C語言課件 全集
《C語言課件 全集》由會員分享,可在線閱讀,更多相關《C語言課件 全集(260頁珍藏版)》請在裝配圖網上搜索。
1、C語言程序設計語言程序設計教程教程目目 錄錄第1章 語言概述第2章 數據類型、運算符與表達式第3章 順序結構程序設計第4章 選擇結構程序設計第5章 循環(huán)結構程序設計第6章 數 組第7章 函 數第8章 編譯預處理第9章 指 針第10章 結構與鏈表第11章 位運算第12章 文 件第第1章章 語言概述語言概述本章主要介紹C語言程序的結構和書寫規(guī)則,以及Turbo C V2.0的基本操作。1.1 C語言的發(fā)展簡史和特點語言的發(fā)展簡史和特點1.2 語言程序的結構與書寫規(guī)則語言程序的結構與書寫規(guī)則1.3 C語言的語句和關鍵字語言的語句和關鍵字1.4 Turbo C V2.0的基本操作的基本操作Return
2、1.1 C語言的發(fā)展簡史和特點語言的發(fā)展簡史和特點 1語言的誕生與發(fā)展語言的誕生與發(fā)展(1)在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的。由于匯編語言程序依賴于計算機硬件,其可讀性和可移植性都很差;但一般的高級語言又難以實現(xiàn)對計算機硬件的直接操作(這正是匯編語言的優(yōu)勢),于是人們盼望有一種兼有匯編語言和高級語言特性的新語言。(2)語言是貝爾實驗室于70年代初研制出來的,后來又被多次改進,并出現(xiàn)了多種版本。80年代初,美國國家標準化協(xié)會(ANSI),根據語言問世以來各種版本對語言的發(fā)展和擴充,制定了ANSI C標準(1989年再次做了修訂)。本書以本書以ANSI C新標準來介紹。新標準來介紹
3、。(3)目前,在微機上廣泛使用的語言編譯系統(tǒng)有Microsoft C、Turbo C 、Borland C等。雖然它們的基本部分都是相同的,但還是有一些差異, 所以請大家注意自己所使用的編譯系統(tǒng)的特點和規(guī)定(參閱相應的手冊)。本書選定的上機環(huán)境是本書選定的上機環(huán)境是TC V2.0(DOS操作系統(tǒng))操作系統(tǒng))。 2C語言的特點語言的特點 C語言同時具有匯編語言和高級語言的優(yōu)勢。(1)語言簡潔、緊湊,使用方便、靈活。 (2)運算符極其豐富。(3)生成的目標代碼質量高,程序執(zhí)行效率高。(4)可移植性好(較之匯編語言)。(5)可以直接操縱硬件。 3. 在C語言中,除實現(xiàn)順序、選擇順序、選擇和循環(huán)循環(huán)三
4、種基本結構等的9條控制語句外,輸入輸出操作均由標準庫函數(不是C語言的組成部分)來實現(xiàn)。所以學習學習C語言,不僅要學習這語言,不僅要學習這9條控制語句和各種條控制語句和各種運算符,而且要學習并掌握常用標準庫函數的使用運算符,而且要學習并掌握常用標準庫函數的使用。Return1.2 語言程序的結構與書寫規(guī)則語言程序的結構與書寫規(guī)則1.2.1 語言程序的總體結構語言程序的總體結構 一個完整的語言程序,是由一個main()函數(又稱主函數)和若干個其它函數結合而成的,或僅由一個main()函數構成。案例案例1.1 僅由main()函數構成的語言程序。/*案例代碼文件名:AL1_1.C*/*功能:僅由
5、main()函數構成的語言程序示例*/main() printf(“This is a C program.n”); 程序運行結果: This is a C program. 程序演示案例案例1.2 由main()函數和1個其它函數max()構成的語言程序。/*案例代碼文件名:AL1_2.C*/*功能:由main()函數和1個其它函數max()構成的語言程序示例*/int max(int x, int y) return( xy ? x : y ); main() int num1,num2; printf(“Input the first integer number: ”); scanf(
6、“%d”, &num1); printf(“Input the second integer number: ”); scanf(“%d”, &num2); printf(“max=%dn”, max(num1, num2); 程序運行情況: Input the first integer number:6 Input the second integer number:9 max=9 程序演示案例案例1.3 改寫案例案例1.2,交換main()函數和max()函數的前后位置。源程序略。程序運行情況: Input the first integer number:6 Input the sec
7、ond integer number:9 max=91.函數是語言程序的基本單位。函數是語言程序的基本單位。main()函數的作用,相當于其它高級語言中的主程序;其它函數的作用,相當于子程序。2.C語言程序總是從語言程序總是從main()函數開始執(zhí)行。函數開始執(zhí)行。一個語言程序,總是從main()函數開始執(zhí)行,而不論其在程序中的位置。當主函數執(zhí)行完畢時,亦即程序執(zhí)行完畢。習慣上,將主函數main()放在最前頭。 1.2.2 函數的一般結構函數的一般結構 任何函數(包括主函數main())都是由函數說明和函數體兩部分組成。其一般結構如下: 函數類型 函數名(函數參數表) 函數說明部分 說明語句部
8、分; 執(zhí)行語句部分; 函數體部分 1. 使用的語法符號約定使用的語法符號約定 .方括號表示可選(即可以指定,也可以缺?。?省略號表示前面的項可以重復 | 多(含2)中選1 2.函數說明函數說明 由函數類型(可缺?。⒑瘮得秃瘮祬当砣糠纸M成,其中函數參數表的格式為: 數據類型 形參, 數據類型 形參2例如,案例1.2中的函數max(),其函數說明各部分如圖1-1所示。 函數類型 函數名 函數參數表 int max ( int x , int y ) 圖1-1 函數說明部分結構圖注意:注意:在舊標準中,函數可以缺省參數表。3.函數體函數體在函數說明部分的下面、大括號(必須配對使用)內的部分。
9、函數體一般由說明語句和可執(zhí)行語句兩部分構成:(1)說明語句部分說明語句部分由變量定義、自定義類型定義、自定義函數說明、外部變量說明等組成。 (2)可執(zhí)行語句)可執(zhí)行語句 一般由若干條可執(zhí)行語句構成。圖1-2是案例案例1.2的main()函數體的示意圖。/*主函數main()*/main() int num1,num2; 變量定義部分 printf(“Input the first integer number: ”); scanf(“%d”, &num1); printf(“Input the second integer number: ”); 可執(zhí)行語句部分 函數體 scanf(“%d”,
10、 &num2); printf(“max=%dn”, max(num1, num2); 圖1-2 函數體結構示意圖 4.說明說明(1)函數體中的變量定義語句,必須在所有可執(zhí)行語句之前。 下面程序中變量定義語句“int max;”的位置是非法的:main() int x,y;/*變量定義語句:定義2個整型變量x、y*/ x=3; /*可執(zhí)行的賦值語句:將3賦值給變量x*/ y=6;/*可執(zhí)行的賦值語句:將6賦值給變量y*/ int max;/*變量定義語句:出現(xiàn)在可執(zhí)行的 賦值語句“x=3;”和“ y=6;”之后,非法!*/ max=xy?x:y; printf(“max=%dn”,max);
11、解決辦法很簡單,請讀者自己思考。(2)如果不需要,也可以缺省變量定義語句。1.2.3 源程序書寫格式源程序書寫格式1.所有語句都必須以分號“;”結束,函數的最后一個語句也不例外。2.程序行的書寫格式自由,既允許1行內寫幾條語句,也允許1條語句分寫在幾行上。例如,案例案例1.2的主函數main(),也可改寫成如下所示的格式:main() int num1,num2; printf(“Input the first integer number: ”); scanf(“%d”, &num1); printf(“Input the second integer number: ”); scanf(“
12、%d”, &num2); printf(“max=%dn”, max(num1, num2); 如果某條語句很長,一般需要將其分寫在幾行上。3.允許使用注釋。C語言的注釋格式為: /* */例如,在案例1.1和案例1.2中,以及本節(jié)其它部分給出的源程序中,凡是用“/*”和“*/”括起來的文字,都是注釋。(1) “/*”和“*/” 必須成對使用,且“/”和“*”、以及“*”和“/”之間不能有空格,否則都出錯。 技巧技巧:為避免遺漏必須配對使用的符號,例如注釋符號、函數體的起止標識符(花括號)、圓括號等等,在輸入時,可連續(xù)輸入這些起止標識符,然后再在其中進行插入來完成內容的編輯。在起止標識符嵌套時
13、,以及相距較遠時,這樣做更有必要。 (2)注釋的位置,可以單占1行,也可以跟在語句的后面。 (3)如果1行寫不下,可另起1行繼續(xù)寫。 (4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程序運行。 Return1.3 C語言的語句和關鍵字語言的語句和關鍵字 1.3.1 C語言的語句語言的語句 與其它高級語言一樣,語言也是利用函數體中的可執(zhí)行語句,向計算機系統(tǒng)發(fā)出操作命令。按照語句功能或構成的不同,可將語言的語句分為五類。1.控制語句控制語句控制語句完成一定的控制功能。語言只有條控制語句,又可細分為三種:( 1)選擇結構控制語句 if()else, switch()(2)循環(huán)
14、結構控制語句 dowhile(), for(), while(), break, continue(3)其它控制語句 goto, return 2. 函數調用語句函數調用語句 函數調用語句由一次函數調用加一個分號(語句結束標志)構成。例如,printf(This is a C function statement.);3. 表達式語句表達式語句表達式語句由表達式后加一個分號構成。最典型的表達式語句是,在賦值表達式后加一個分號構成的賦值語句。例如,“num=5 ”是一個賦值表達式,而“num=5;”卻是一個賦值語句。4. 空語句空語句空語句僅由一個分號構成。顯然,空語句什么操作也不執(zhí)行。 例如,
15、下面就是一個空語句: ;5. 復合語句復合語句復合語句是由大括號括起來的一組(也可以是1條)語句構成。例如: main() /*復合語句。注意:右括號后不需要分號。*/ 復合語句的性質復合語句的性質: (1)在語法上和單一語句相同,即單一語句可以出現(xiàn)的地方,也可以使用復合語句。(2)復合語句可以嵌套,即復合語句中也可出現(xiàn)復合語句。 1.3.2 關鍵字關鍵字 C語言的關鍵字共有32個,根據關鍵字的作用,可分其為數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它關鍵字四類。 (1)數據類型關鍵字(12個):char, double, enum, float, int, long, short,
16、signed, struct, union, unsigned, void (2)控制語句關鍵字(12個):break, case, continue, default, do, else, for, goto, if, return, switch, while (3)存儲類型關鍵字(4個):auto, extern, register, static (4)其它關鍵字(4個):const, sizeof, typedef, volatileReturn1.4 Turbo C V2.0的基本操作的基本操作1.運行一個語言程序的一般過程 2.TC的啟動、退出與命令菜單 3.編輯并保存一個語言源
17、程序 4.編譯、連接單個源程序文件 5.運行與查看結果 6.編輯下一個新的源程序 Return1.運行一個語言程序的一般過程運行一個語言程序的一般過程 urbo 是一個集源程序編輯、編譯、連接、運行與調試于一體、 用菜單驅動的集成軟件環(huán)境。 運行一個語言程序的一般過程: (1)啟動TC,進入TC集成環(huán)境。(2)編輯(或修改)源程序。(3)編譯。如果編譯成功,則可進行下一步操作;否則,返回(2)修改源程序,再重新編譯,直至編譯成功。 (4)連接。如果連接成功,則可進行下一步操作;否則,根據系統(tǒng)的錯誤提示,進行相應修改,再重新連接,直至連接成功。(5)運行。通過觀察程序運行結果,驗證程序的正確性。
18、如果出現(xiàn)邏輯錯誤,則必須返回(2)修改源程序,再重新編譯、連接和運行,直至程序正確。(6)退出TC集成環(huán)境,結束本次程序運行。Return2.TC的啟動、退出與命令菜單的啟動、退出與命令菜單 (1)啟動)啟動Turbo C: tc 畫面演示畫面演示啟動Turbo C后,其主菜單條橫向排列在屏幕頂端,并被激活,其中File主項成為當前項。 主菜單的下面,是Edit(編輯)窗口和Message(消息)窗口。兩個窗口中,頂端橫線為雙線顯示的,表示該窗口是活動窗口。編輯窗口的頂端為狀態(tài)行,其中:Line 1 Col 1:顯示光標所在的行號和列號,即光標位置。Insert:表示編輯狀態(tài)處于“插入”。當處
19、于“改寫”狀態(tài)時,此處為空白。d: NONAME.C:顯示當前正在編輯的文件名。顯示為“NONAME.C”時,表示用戶尚未給文件命名。屏幕底端是7個功能鍵的說明,以及Num Lock鍵的狀態(tài)(顯示“NUM”時,表示處于“數字鍵”狀態(tài);空白,表示“控制鍵”狀態(tài))。 (2)命令菜單的使用)命令菜單的使用 1)按下功能鍵F10,激活主菜單。如果主菜單已經被激活,則直接轉下一步。 2)用左、右方向鍵移動光帶,定位于需要的主項上,然后再按回車鍵,打開其子菜單(縱向排列)。 3)用上、下方向鍵移動光帶,定位于需要的子項上,回車即可。執(zhí)行完選定的功能后,系統(tǒng)自動關閉菜單。 注意注意:菜單激活后,又不使用,可
20、再按F10Esc鍵關閉,返回原來狀態(tài)。 (3)退出)退出Turbo C 退出TC有兩種方法: 1)菜單法:File | Quit(先選擇File主項,再選擇并執(zhí)行Quit子項) 2)快捷鍵法:Alt+“X”(先按下Alt鍵并保持,再按字母鍵,然后同時放開)Return3.編輯并保存一個語言源程序編輯并保存一個語言源程序 (1)激活主菜單,選擇并執(zhí)行File | Load項(快捷鍵鍵:F3)。(2)在“Load File Name”窗口,輸入源程序文件名。文件名的輸入有兩種方法:直接輸入和選擇輸入。1)直接輸入按照文件名的組成字符串,逐個字符輸入即可。如果是已經存在的文件,系統(tǒng)就在編輯窗口顯示該
21、文件的內容,可供編輯、修改。如果是新文件,則給出一個空白編輯窗口,可供輸入新的源程序。如果該文件不在當前目錄下,則需要冠以路徑名和(或)盤符。2)選擇文件(僅適用于已經存在的源程序文件) 空回車,打開當前目錄下、后綴為.的所有文件的文件名窗口。 用上、下、左、右方向鍵,將光帶定位于所需的文件名上。 按回車鍵。 (3)常用編輯操作)常用編輯操作 在編輯源程序過程中,隨時都可以按F2鍵(或File | Save),將當前編輯的文件存盤,然后繼續(xù)編輯。這是一個良好的習慣! 關于在線幫助: 在任何窗口(或狀態(tài))下,按F1鍵激活活動窗口(或狀態(tài))的在線幫助:下一頁PageDown,返回上一頁PageUp
22、關閉在線幫助、返回原窗口(或狀態(tài))Esc返回前一個在線幫助屏Alt+F1(無論在線幫助是否被激活)返回在線幫助索引F1:激活在線幫助后,再按F1,則返回在線幫助索引,以便查詢其它類別在線幫助信息。查詢庫函數的在線幫助信息F1:將光標移到需要查詢函數名的首字符上,然后鍵入F1,即可獲得該庫函數的在線幫助信息。 注注:為簡化描述,用“”代表“Ctrl”鍵。Fn就是Ctrl+Fn,下同。Return 4.編譯、連接編譯、連接單個源程序文件單個源程序文件 選擇并執(zhí)行Compile | Make EXE File項(快捷鍵:F9),則TC將自動完成對當前正在編輯的源程序文件的編譯、連接,并生成可執(zhí)行文件
23、。 如果源程序有語法錯誤,系統(tǒng)將在屏幕中央的“Compiling ”(編譯)窗口底端提示“Error: Press any key”(錯誤:按任意鍵)。 此時,按空格鍵,屏幕下端的“Message”(消息)窗口被激活, 顯示出錯(或警告)信息,光帶停在第一條消息上。這時“Edit”(編輯)窗口中也有一條光帶,它總是停在編譯錯誤在源代碼中的相應位置。 注意注意:當用上、下鍵移動消息窗口中的光帶時,編輯窗口中的光帶也隨之移動,始終跟蹤源代碼中的錯誤位置!Return 5.運行與查看結果運行與查看結果 (1)運行當前正在編輯的源程序文件 選擇并執(zhí)行Run | Run項(快捷鍵:F9),程序運行結束后
24、, 仍返回到編輯窗口。 當你認為自己的源程序不會有編譯、連接錯誤時,也可直接運行(即跳過對源程序的編譯、連接步驟)。這時,TC將一次完成從編譯、連接到運行的全過程。(2)查看運行結果 選擇并執(zhí)行Run | User Screen項(快捷鍵:Alt+F5)。查看完畢后,按任一鍵返回編輯窗口。 如果發(fā)現(xiàn)邏輯錯誤,則可在返回編輯窗口后,進行修改;然后再重新編譯、連接、運行,直至正確為止。Return 6.編輯下一個新的源程序編輯下一個新的源程序 選擇并執(zhí)行File | New項即可。 如果屏幕提示如下確認信息: NONAME.C not saved. Save?(Y/N) 如果需要保存當前正在編輯的
25、源程序,則鍵入“”,進入下一步操作;否則,鍵入“”(不保存),跳轉到(2)。(1)系統(tǒng)提示換名: NONAME.C直接輸入你給源程序文件起的名字即可。(2)系統(tǒng)給出一個空白的編輯窗口,可以開始編輯下一個新的源程序。Return 第第2章章 數據類型、運算符與表達式數據類型、運算符與表達式2.1 程序設計概述程序設計概述2.2 C語言的數據類型語言的數據類型2.3 常量和變量常量和變量2.4 整型數據整型數據2.5 實型數據實型數據2.6 字符型數據字符型數據2.7 算術運算與算術表達式算術運算與算術表達式2.8 賦值運算與賦值表達式賦值運算與賦值表達式2.9 C語言特有的運算和運算符語言特有的
26、運算和運算符Return2.1 程序設計概述程序設計概述一個程序應包括對數據的描述和對數據處理的描述。 1對數據的描述,即數據結構。數據結構是計算機學科的核心課程之一,有許多專門著作論述,本課程就不再贅述。 在C語言中,系統(tǒng)提供的數據結構,是以數據類型的形式出現(xiàn)的。 2對數據處理的描述,即計算機算法。算法是為解決一個問題而采取的方法和步驟,是程序的靈魂。為此,著名計算機科學家沃思(Nikiklaus Wirth)提出一個公式: 數據結構數據結構 + 算法算法 = 程序程序 實際上,一個程序除了數據結構和算法外,還必須使用一種計算機語言,并采用結構化方法來表示。 Return2.2 C語言的數據
27、類型語言的數據類型C語言提供的數據結構,是以數據類型形式出現(xiàn)的。具體分類如下:1.基本類型分為整型、實型(又稱浮點型)、字符型和枚舉型四種。2.構造類型分為數組類型、結構類型和共用類型三種。3.指針類型。在第9章中介紹。4.空類型C語言中的數據,有常量和變量之分,它們分別屬于上述這些類型。本章將介紹基本類型中的整型、實型和字符型三種數據。Return2.3 常量和變量常量和變量2.3.1 常量常量 1.常量的概念 在程序運行過程中,其值不能被改變的量稱為常量。 2.常量的分類 (1)整型常量(2)實型常量(3)字符常量。(4)符號常量。常量的類型,可通過書寫形式來判別。2.3.2 變量變量1.
28、變量的概念在程序運行過程中,其值可以被改變的量稱為變量。2.變量的兩個要素(1)變量名。每個變量都必須有一個名字變量名,變量命名遵循標識符命名規(guī)則。(2)變量值。在程序運行過程中,變量值存儲在內存中。在程序中,通過變量名來引用變量的值。.標識符命名規(guī)則標識符命名規(guī)則(1)有效字符:只能由字母、數字和下劃線組成,且以字母或下劃線開頭。(2)有效長度:隨系統(tǒng)而異,但至少前個字符有效。如果超長,則超長部分被舍棄。例如,由于student_name和student_number的前個字符相同,有的系統(tǒng)認為這兩個變量,是一回事而不加區(qū)別。在TC V2.0中,變量名(標識符)的有效長度為個字符,缺省值為。
29、(3)C語言的關鍵字不能用作變量名。注意注意:C語言對英文字母的大小敏感,即同一字母的大小寫,被認為是兩個不同的字符。習慣上,變量名和函數名中的英文字母用小寫,以增加可讀性。思考題思考題:在C語言中,變量名total與變量名TOTAL、ToTaL、tOtAl等是同一個變量嗎?標識符命名的良好習慣標識符命名的良好習慣見名知意見名知意:所謂“見名知意”是指,通過變量名就知道變量值的含義。通常應選擇能表示數據含義的英文單詞(或縮寫)作變量名,或漢語拼音字頭作變量名。例如,name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資)。4.變量的定義與初始化在語言中,要
30、求對所有用到的變量,必須先定義、后使用;且稱在定義變量的同時進行賦初值的操作為變量初始化。(1)變量定義的一般格式 存儲類型 數據類型 變量名, 變量名2;例如,float radius, length, area; (2)變量初始化的一般格式存儲類型 數據類型 變量名=初值, 變量名2=初值2;例如,float radius=2.5, length, area; Return2.4 整型數據整型數據2.4.1 整型變量整型變量 1.分類 根據占用內存字節(jié)數的不同,整型變量又分為類:(1)基本整型(類型關鍵字為int)。(2)短整型(類型關鍵字為short int)。(3)長整型(類型關鍵字為
31、long int)。(4)無符號整型。無符號型又分為無符號基本整型(unsigned int)、無符號短整型(unsigned short)和無符號長整型(unsigned long)三種,只能用來存儲無符號整數。2.占用內存字節(jié)數與值域 上述各類型整型變量占用的內存字節(jié)數,隨系統(tǒng)而異。在16位操作系統(tǒng)中,一般用字節(jié)表示一個int型變量,且long型(字節(jié))int型(字節(jié))short型(字節(jié))。顯然,不同類型的整型變量,其值域不同。占用內存字節(jié)數為n的(有符號)整型變量,其值域為:-2n*8-1(2n*8-1-1);無符號整型變量的值域為:0(2n*8-1)。 例如,PC機中的一個int型變量
32、,其值域為-22*8-1(22*8-1-1),即-3276832767;一個unsigned型變量的值域為:0(22*8-1),即065535。 2.4.2 整型常量整型常量.三種表示形式整型常量即整常數,在語言中可用三種形式表示:(1)十進制。例如10、36。(2)八進制(以數字開頭)。例如012。(3)十六進制(以數字+小寫字母x開頭)。例如0 x36。.分類(1)基本整型。在16位機中,用2字節(jié)存儲,其數據范圍與int型變量一樣。(2)長整型(在數值后面加“L(l)”)。對超出基本整型值域的整型常量,可使用長整型常量表示,其取值范圍可達-(-)。例如,123l、315等。.類型匹配規(guī)則類
33、型匹配規(guī)則為:一個整型常量,可以賦給能容納下其值的整型變量。例如,其值在-(-)的整型常量,可以賦給int型變量和long int型變量;其值在-(-)的整型常量,就只能賦給long int型變量。 注意注意:常量無unsigned型。但一個非負整型常量,只要它的值不超過相應變量的值域(即取值范圍),也可以賦給unsigned型變量。Return2.5 實型數據實型數據2.5.1 實型變量實型變量 語言的實型變量,分為兩種: (1)單精度型。類型關鍵字為float,一般占字節(jié)(位)、提供位有效數字。 (2)雙精度型。類型關鍵字為double,一般占個字節(jié)、提供1516位有效數字。2.5.2 實
34、型常量實型常量 .表示形式實型常量即實數,在語言中又稱浮點數,其值有兩種表達形式: (1)十進制形式。例如3.14、9.8。 (2)指數形式:E(e)。例如3.0+5等。 .關于類型 實型常量不分float型和double型。一個實型常量,可以賦給一個實型變量(float型或double型)。Return2.6 字符型數據字符型數據2.6.1 字符常量字符常量1.字符常量的定義用一對單引號括起來的單個字符,稱為字符常量。例如,A、等。2.轉義字符語言還允許使用一種特殊形式的字符常量,就是以反斜杠“ ”開頭的轉義字符。 注意注意:如果反斜杠或單引號本身作為字符常量,必須使用轉義字符:、。案例案例
35、2.1 用轉義字符輸出可打印字符和不可打印字符。 /*案例代碼文件名:AL2_1.C*/ /*程序功能:用轉義字符輸出可打印字符和不可打印字符*/main() printf(“x4Fx4Bx21n”); /* 等價于printf(“OK!n”); */ printf(“x15 xABn”); 程序運行結果如下: ! 程序程序演示演示 2.6.2 字符變量字符變量字符變量的類型關鍵字為char,一般占用1字節(jié)內存單元。1.變量值的存儲 字符變量用來存儲字符常量。將一個字符常量存儲到一個字符變量中,實際上是將該字符的ASCII碼值(無符號整數)存儲到內存單元中。例如,char ch1, ch2;
36、/*定義兩個字符變量:ch1,ch2*/ch1=a; ch2=b; /*給字符變量賦值*/2.特性字符數據在內存中存儲的是字符的ASCII碼 一個無符號整數,其形式與整數的存儲形式一樣(如圖2-4所示),所以語言允許字符型數據與整型數據之間通用。(1)一個字符型數據,既可以字符形式輸出,也可以整數形式輸出。 案例案例2.2 字符變量的字符形式輸出和整數形式輸出。 /*案例代碼文件名:AL2_2.C*/ /*程序功能:用字符形式和整數形式輸出字符變量*/ main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2); pr
37、intf(“ch1=%d,ch2=%dn”,ch1,ch2); 程序運行結果: ch1=a,ch2=b ch1=97,ch2=98 程序程序演示演示(2)允許對字符數據進行算術運算,此時就是對它們的ASCII碼值進行算術運算。 案例案例2.3 字符數據的算術運算。 /*案例代碼文件名:AL2_3.C*/ /*程序功能:字符數據的算術運算*/ main() char ch1,ch2; ch1=a; ch2=B; /*字母的大小寫轉換*/ printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); /*用字符形式輸出一個大于256的數值*/ printf(ch1+200=%dn
38、, ch1+200); printf(ch1+200=%cn, ch1+200); printf(ch1+256=%dn, ch1+256); printf(ch1+256=%cn, ch1+256); 程序運行結果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a 程序演示程序演示思考題思考題:用字符形式輸出一個大于256的數值,會得到什么結果?2.6.3 字符串常量字符串常量1.字符串常量的概念和字符串長度字符串常量是用一對雙引號括起來的若干字符序列。字符串中字符的個數稱為字符串長度。長度為0的字符串(即一個字符都沒有的字符串)稱為空串
39、,表示為“ ” (一對緊連的雙引號)。例如,“How do you do.”、“Good morning.”等,都是字符串常量,其長度分別為14和13(空格也是一個字符)。 如果反斜杠和雙引號作為字符串中的有效字符,則必須使用轉義字符。例如:(1)C:msdosv6.22 C:msdosv6.22 (2)I say:Goodbye! I say:Goodbye!“2.字符串的存儲字符串的存儲C語言規(guī)定:在存儲字符串常量時,由系統(tǒng)在字符串的末尾自動加一個0作為字符串的結束標志。注意注意:在源程序中書寫字符串常量時,不必加結束字符0,否則畫蛇添足。 如果有一個字符串為“CHINA”,則它在內存中的
40、實際存儲如下所示:最后一個字符0是系統(tǒng)自動加上的,它占用字節(jié)而非字節(jié)內存空間。CHINA0綜上所述,字符常量A與字符串常量A是兩回事:(1)定界符不同:字符常量使用單引號,而字符串常量使用雙引號;(2)長度不同:字符常量的長度固定為1,而字符串常量的長度,可以是0,也可以是某個整數;(3)存儲要求不同:字符常量存儲的是字符的ASCII碼值,而字符串常量,除了要存儲有效的字符外,還要存儲一個結束標志0。Return2.7 算術運算與算術表達式算術運算與算術表達式在語言中,除控制語句和輸入輸出函數外,其它所有基本操作都作為運算符處理。 1.五種基本算術運算符五種基本算術運算符 +、-(減法/取負)
41、、*、/、%(求余數)(1)關于除法運算/C語言規(guī)定:兩個整數相除,其商為整數,小數部分被舍棄。例如,5 / 2 = 2。 (2)關于求余數運算要求兩側的操作數均為整型數據,否則出錯。 2.表達式和算術表達式表達式和算術表達式(1)表達式的概念 用運算符和括號將運算對象(常量、變量和函數等)連接起來的、符合語言語法規(guī)則的式子,稱為表達式。 單個常量、變量或函數,可以看作是表達式的一種特例。將單個常量、變量或函數構成的表達式稱為簡單表達式,其它表達式稱之為復雜表達式。(2)算術表達式的概念表達式中的運算符都是算術運算符。例如,3 + 6 * 9、(x + y) / 2 - 1等,都是算術表達式。
42、良好的源程序書寫習慣良好的源程序書寫習慣:在表達式中,在雙目運算符的左右兩側各加一個空格,可增強程序的可讀性。請比較表達式“ (x + y) / 2 1”與“(x+y)/21”,您認為哪個的可讀性更好一些?3.運算符的優(yōu)先級與結合性運算符的優(yōu)先級與結合性(1)語言規(guī)定了運算符的優(yōu)先級和結合性。 所謂結合性是指,當一個操作數兩側的運算符具有相同的優(yōu)先級時,該操作數是先與左邊的運算符結合,還是先與右邊的運算符結合。自左至右的結合方向,稱為左結合性。反之,稱為右結合性。結合性是語言的獨有概念。除單目單目運算符、賦值賦值運算符和條件條件運算符是右結合性外,其它運算符都是左結合性。(2)表達式求值1)按
43、運算符的優(yōu)先級高低次序執(zhí)行。例如,先乘除后加減。2)如果在一個運算對象(或稱操作數)兩側的運算符的優(yōu)先級相同,則按語言規(guī)定的結合方向(結合性)進行。例如,算術運算符的結合方向是“自左至右”,即:在執(zhí)行“a b + c”時,變量b先與減號結合,執(zhí)行“a - b”;然后再執(zhí)行加c的運算。4.數據類型轉換數據類型轉換(1) 在語言中,整型、實型和字符型數據間可以混合運算(因為字符數據與整型數據可以通用)。如果一個運算符兩側的操作數的數據類型不同,則系統(tǒng)按“先轉換、后運算”的原則,首先將數據自動轉換成同一類型,然后在同一類型數據間進行運算。轉換規(guī)則如圖2-5所示。1)橫向向左的箭頭,表示必須的轉換。c
44、har和short 型必須轉換成 int 型,float型必須轉換成double型。 2)縱向向上的箭頭,表示不同類型的轉換方向。 例如,int型與double型數據進行混合運算,則先將int型數據轉換成double型,然后在兩個同類型的數據間進行運算,結果為double型。 注意注意:箭頭方向只表示數據類型由低向高轉換,不要理解為int型先轉換成unsigned型,再轉換成long型,最后轉換成double型。(2)除自動轉換外,語言也允許強制轉換。數據類型強制轉換的一般格式為: (要轉換成的數據類型)(被轉換的表達式)當被轉換的表達式是一個簡單表達式時,外面的一對圓括號可以缺省。例如,(d
45、ouble)a (等價于(double)(a) /*將變量a的值轉換成double型*/(int)(x + y) /*將x+y的結果轉換成int型*/(float)5 / 2(等價于(float)(5)/2) /*將5轉換成實型,再除以2(=2.5)*/(float)(5 / 2) /*將5整除2的結果(2)轉換成實型(2.0)*/注意注意:強制轉換類型得到的是一個所需類型的中間量,原表達式類型并不發(fā)生變化。例如,(double)a 只是將變量a的值轉換成一個double型的中間量,其數據類型并未轉換成double型。Return2.8 賦值運算與賦值表達式 1.賦值運算賦值運算 賦值符號“=
46、”就是賦值運算符,它的作用是將一個表達式的值賦給一個變量。 賦值運算符的一般形式為: 變量變量 = 賦值表達式賦值表達式 例如,x = 5 y = (float)5 / 2 如果表達式值的類型,與被賦值變量的類型不一致,但都是數值型或字符型時,系統(tǒng)自動地將表達式的值轉換成被賦值變量的數據類型,然后再賦值給變量。 思考題思考題:假設變量num的數據類型為float,其值為2.5,則執(zhí)行“num = (int)num”后,num的值等于多少?2.復合賦值運算復合賦值運算復合賦值運算符是由賦值運算符之前再加一個雙目運算符構成的。復合賦值運算的一般格式為: 變量 雙目運算符雙目運算符 = 表達式 復合
47、賦值運算符它等價于等價于:變量 = 變量 雙目運算符 (表達式)。當表達式為簡單表達式時,表達式外的一對圓括號才可缺省,否則可能出錯。例如,x += 3 /* 等價于x=x+3 */ y *= x + 6/* 等價于y=y*(x+6),而不是y=y*x+6 */C語言規(guī)定的10種復合賦值運算符如下:+=,-=,*=,/=,%=; /*復合算術運算符(5個)*/&=,=,|=,=;/*復合位運算符(5個)*/3.賦值表達式賦值表達式由賦值運算符或復合賦值運算符,將一個變量和一個表達式連接起來的表達式,稱為賦值表達式。(1)一般格式 變量 (復合)賦值運算符 表達式(2)賦值表達式的值任何一個表達
48、式都有一個值,賦值表達式也不例外。被賦值變量的值,就是賦值表達式的值被賦值變量的值,就是賦值表達式的值。例如,“a = 5”這個賦值表達式,變量a的值“”就是它的值。Return2.9 C語言特有的運算和運算符2.9.1 自增(自增(+)、自減()、自減(-)運算)運算 1.作用 自增運算使單個變量的值增,自減運算使單個變量的值減。 2.用法與運算規(guī)則 自增、自減運算符都有兩種用法: (1)前置運算運算符放在變量之前:變量、變量 先使變量的值增(或減),然后再以變化后的值參與其它運算,即先增減、后運算。 (2)后置運算運算符放在變量之后:變量、變量 變量先參與其它運算,然后再使變量的值增(或減
49、),即先運算、后增減。 案例案例2.4 自增、自減運算符的用法與運算規(guī)則示例。/*案例代碼文件名:AL2_4.C*/*程序功能:自增、自減運算符的用法與運算規(guī)則示例*/main() int x=6, y; printf(x=%dn,x); /*輸出x的初值*/ y = +x; /*前置運算*/ printf(y=+x: x=%d,y=%dn,x,y); y = x-; /*后置運算*/ printf(y=x-: x=%d,y=%dn,x,y); 程序運行結果:x=6y=+x: x=7,y=7y=x-: x=6,y=7 程序演示程序演示思考題思考題:如果將案例“y=+x;”語句中的前置運算改為后
50、置(y=x+;),“y=x-;”語句中的后置運算改為前置(y=-x;),程序運行結果會如何?3.說明說明(1)自增、自減運算,常用于循環(huán)語句中,使循環(huán)控制變量加(或減),以及指針變量中,使指針指向下(或上)一個地址。(2)自增、自減運算符,不能用于常量和表達式。例如,5+、-(a+b)等都是非法的。(3)在表達式中,連續(xù)使同一變量進行自增或自減運算時,很容易出錯,所以最好避免這種用法。2.8.2 逗號運算(,)及其表達式逗號運算(,)及其表達式語言提供一種用逗號運算符“,”連接起來的式子,稱為逗號表達式。逗號運算符又稱順序求值運算符。1.一般形式 表達式, 表達式, , 表達式n2.求解過程自
51、左至右,依次計算各表達式的值,“表達式n” 的值即為整個逗號表達式的值。例如,逗號表達式“a = 3 * 5, a * 4”的值=60:先求解a = 3 * 5,得a=15;再求a * 4 = 60,所以逗號表達式的值=60。又例如,逗號表達式“(a = 3 * 5, a * 4), a + 5”的值=20:先求解a = 3 * 5,得a=15;再求a * 4=60;最后求解a + 5=20,所以逗號表達式的值=20。注意注意:并不是任何地方出現(xiàn)的逗號,都是逗號運算符。很多情況下,逗號僅用作分隔符。Return 第第3章章 順序結構程序設計順序結構程序設計為了讓計算機處理各種數據,首先就應該把
52、源數據輸入到計算機中;計算機處理結束后,再將目標數據信息以人能夠識別的方式輸出。C語言中的輸入輸出操作,是由C語言編譯系統(tǒng)提供的庫函數來實現(xiàn)。3.1 格式化輸出格式化輸出printf()函數函數3.2 格式化輸入格式化輸入scanf()函數函數3.3 單個字符輸入輸出單個字符輸入輸出getchar()和和putchar()函函數數3.4 順序結構程序設計順序結構程序設計良好的源程序書寫風格良好的源程序書寫風格順序程序段左對齊順序程序段左對齊Return3.1 格式化輸出格式化輸出printf()函數函數 printf()函數的作用:向計算機系統(tǒng)默認的輸出設備(一般指終端或顯示器)輸出一個或多個
53、任意類型的數據。3.1.1 printf()函數的一般格式函數的一般格式案例案例3.1 已知圓半徑radius=1.5,求圓周長和圓面積。/*案例代碼文件名:AL3_1.C。*/main() float radius,length,area,pi=3.1415926; radius=1.5; length=2*pi*radius;/*求圓周長*/ area=pi*radius*radius; /*求圓面積*/ printf(“radius=%fn”,radius);/*輸出圓半徑*/ printf(“l(fā)ength=%7.2f,area=%7.2fn”,length,area); /*輸出圓周長
54、、面積*/ 程序演示程序演示 程序運行結果如下: radius=1.500000 length= 9.42,area= 7.07 printf()函數的一般格式如下:printf(格式字符串格式字符串 ,輸出項表,輸出項表); 1格式字符串?!案袷阶址币卜Q“轉換控制字符串”,可以包含三種字符: (1)格式指示符。格式指示符的一般形式如下:%標志標志寬度寬度.精度精度F|N|h|L類型類型 常用的標志字符如表3-1所示,常用的寬度指示符如表3-2所示,常用的精度指示符如表3-3所示,長度修飾符如表3-4所示,類型轉換字符如表3-5所示。 (2)轉義字符 例如,案例案例3.1中printf()
55、函數中的n就是轉義字符,輸出時產生一個“換行”操作。 (3)普通字符除格式指示符和轉義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。 例如,案例案例3.1中“printf(radius=%fn, radius);”語句中的“radius=”,“printf(length=%7.2f,area=%7.2fn, length,area);”語句中的“l(fā)ength=”、“area=”等都是普通字符。 2輸出項表 輸出項表是可選的。如果要輸出的數據不止1個,相鄰2個之間用逗號分開。下面的printf()函數都是合法的: (1)printf(I am a student.n); (2)print
56、f(%d,3+2); (3)printf(a=%f b=%5dn, a, a+3);必須強調必須強調:“格式字符串”中的格式指示符,必須與“輸出項表”中、輸出項的數據類型一致,否則會引起輸出錯誤。 3.1.2 格式指示符格式指示符 輸出不同類型的數據,要使用不同的類型轉換字符。 1類型轉換字符類型轉換字符d以帶符號的十進制整數形式輸出。以帶符號的十進制整數形式輸出。 案例案例3.2 類型轉換字符d的使用。/*案例代碼文件名:AL3_2.C。*/main() int num1=123; long num2=123456; /*用3種不同格式,輸出int型數據num1的值*/ printf(num
57、1=%d,num1=%5d,num1=%-5d,num1=%2dn,num1,num1,num1,num1); /*用3種不同格式,輸出long型數據num2的值*/ printf(num2=%ld,num2=%8ld,num2=%5ldn,num2,num2,num2); printf(num1=%ldn,num1); 程序演示程序演示程序運行結果如下:num1=123,num1=123,num1=123,num1=123num2=123456,num2=123456,num2=123456num1=16908411對于整數,還可用八進制、無符號形式(%o(小寫字母o))和十六進制、無符號形
58、式(%x)輸出。對于unsigned型數據,也可用%u格式符,以十進制、無符號形式輸出。所謂無符號形式是指,不論正數還是負數,系統(tǒng)一律當作無符號整數來輸出。例如,printf(%d,%o,%xn,-1,-1,-1); 2類型轉換字符類型轉換字符f以小數形式、按系統(tǒng)默認的寬度,輸出單精以小數形式、按系統(tǒng)默認的寬度,輸出單精度和雙精度實數。度和雙精度實數。案例案例3.3 類型轉換字符f的使用。/*案例代碼文件名:AL3_3.C。*/main( )float f=123.456; double d1,d2; d1=1111111111111.111111111; d2=2222222222222.2
59、22222222; printf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f); printf(d1+d2=%fn,d1+d2); 程序演示程序演示 程序運行結果如下: 123.456001,123.456001,123.46,123.46,123.46 d1+d2=3333333333333.333010 本案例程序的輸出結果中,數據123.456001和3333333333333.333010中的001和010都是無意義的,因為它們超出了有效數字的范圍。 對于實數,也可使用格式符%e,以標準指數形式輸出:尾數中的整數部分大于等于1、小于10,小數點占一位,
60、尾數中的小數部分占5位;指數部分占4位(如e-03),其中e占一位,指數符號占一位,指數占2位,共計11位。 也可使用格式符%g,讓系統(tǒng)根據數值的大小,自動選擇%f或%e格式、且不輸出無意義的零。3類型轉換字符類型轉換字符c輸出一個字符(只占一列寬度)。輸出一個字符(只占一列寬度)。案例案例3.4 類型轉換字符c的使用。/*案例代碼文件名:AL3_4.C。*/ main() char c=A; int i=65; printf(c=%c,%5c,%dn,c,c,c); printf(i=%d,%c,i,i); 程序運行結果如下: c=A,A,65 i=65,A程序演示程序演示 需要強調需要強調
61、的是:在C語言中,整數可以用字符形式輸出,字符數據也可以用整數形式輸出。將整數用字符形式輸出時,系統(tǒng)首先求該數與256的余數,然后將余數作為ASCII碼,轉換成相應的字符輸出。4類型轉換字符類型轉換字符s輸出一個字符串。輸出一個字符串。案例案例3.5 類型轉換字符s的使用。/*案例代碼文件名:AL3_10.C。*/ main() printf(%s,%5s,%-10s,Internet,Internet,Internet); printf(%10.5s,%-10.5s,%4.5sn,Internet,Internet,Internet); 程序演示程序演示程序運行結果如下:Internet,I
62、nternet,Internet,Inter,Inter,Inter注意注意:系統(tǒng)輸出字符和字符串時,不輸出單引號和雙引號。 3.1.3 使用說明使用說明 (1)printf()可以輸出常量、變量和表達式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項表中的每個數據一一對應,否則出錯。 例如,printf(str=%s, f=%d, i=%fn, Internet, 1.0 / 2.0, 3 + 5, CHINA);是錯誤的。 (2)格式字符x、e、g可以用小寫字母,也可以用大寫字母。使用大寫字母時,輸出數據中包含的字母也大寫。除了x、e、g格式字符外,其它格式字符必須用小寫字母
63、。 例如,%f不能寫成%F。 (3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。 例如,“printf(”c=%c, f=%fn“, c, f);”中的第一個c和f,都是普通字符。Return3.2 格式化輸入格式化輸入scanf()函數函數scanf()函數是用來從外部輸入設備向計算機主機輸入數據的。 3.2.1 scanf()函數的一般格式函數的一般格式 案例案例3.6 已知圓柱體的底半徑radius=1.5,高high=2.0,求其體積。/*案例代碼文件名:AL3_6.C。*/main() float radius=1.5, high=2.0, pi=3.
64、14159, vol; vol=pi*radius*radius*high; /*求體積*/ printf(“vol=%7.2fn”,vol);/*輸出求出的體積*/ 程序演示程序演示案例案例3.7 已知圓柱體的底半徑為radius,高為high,求其體積。/*案例代碼文件名:AL3_7.C。*/*功能:說明函數scanf()的格式及作用。*/main() float radius,high,vol,pi=3.1415926; printf(Please input radius & high: ); scanf(%f%f,&radius,&high); /*從鍵盤輸入兩個實數賦給變量r,h*
65、/ vol=pi*radius*radius*high; printf(radius=%7.2f, high=%7.2f, vol=%7.2fn,radius,high,vol); 程序演示程序演示程序運行結果如下: Please input radius & high: 1.52.0 radius=1.50,high=2.00,vol=14.14 在程序中給計算機提供數據,可以用賦值語句,也可以用輸入函數。在C語言中,可使用scanf()函數,通過鍵盤輸入,給計算機同時提供多個、任意的數據。1. scanf()函數的一般格式scanf(格式字符串格式字符串, 輸入項首地址表輸入項首地址表);
66、(1)格式字符串。格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數的相似,空白字符作為相鄰2個輸入數據的缺省分隔符,非空白字符在輸入有效數據時,必須原樣一起輸入。(2)輸入項首地址表由若干個輸入項首地址組成,相鄰2個輸入項首地址之間,用逗號分開。輸入項首地址表中的地址,可以是變量的首地址,也可以是字符數組名或指針變量。變量首地址的表示方法: &變量名變量名其中“&”是地址運算符。例如,案例案例3.7中的“&radius”是指變量radius在內存中的首地址。 2scanf()函數的功能:從鍵盤上接收格式化輸入。運行案例案例3.7的程序時,從鍵盤上輸入2個實數,分別存入&radius、&high起始的存儲單元中,即輸入兩個實數分別賦給radius和high。 3.2.2 格式指示符格式指示符 格式指示符的一般形式為: % * 寬度寬度 F|N h|l 類類型字符型字符 1類型字符類型字符 類型字符如表3-6所示。例如,在案例案例3.7的scanf()函數語句中,格式字符串“%f%f”。 2寬度寬
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險源安全管理制度
- 安全培訓資料:典型建筑火災的防治基本原則與救援技術
- 企業(yè)雙重預防體系應知應會知識問答
- 8 各種煤礦安全考試試題
- 9 危險化學品經營單位安全生產管理人員模擬考試題庫試卷附答案
- 加壓過濾機司機技術操作規(guī)程
- 樹脂砂混砂工藝知識總結
- XXXXX現(xiàn)場安全應急處置預案
- 某公司消防安全檢查制度總結
- 1 煤礦安全檢查工(中級)職業(yè)技能理論知識考核試題含答案
- 4.燃氣安全生產企業(yè)主要負責人模擬考試題庫試卷含答案
- 工段(班組)級安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫試卷含答案-4
- 建筑起重司索信號工安全操作要點
- 實驗室計量常見的30個問問答題含解析