C語言程序設計課件_第1頁
C語言程序設計課件_第2頁
C語言程序設計課件_第3頁
C語言程序設計課件_第4頁
C語言程序設計課件_第5頁
已閱讀5頁,還剩337頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言概述1.1C語言的發(fā)展簡史和特點1.C語言的誕生與發(fā)展(1)在C語言誕生以前,系統(tǒng)軟體主要是用組合語言編寫的。由於組合語言程式依賴於電腦硬體,其可讀性和可移植性都很差;但一般的高級語言又難以實現(xiàn)對電腦硬體的直接操作(這正是組合語言的優(yōu)勢),於是人們盼望有一種兼有組合語言和高級語言特性的新語言。(2)C語言是貝爾實驗室的KenThompson於70年代初研製出來的,後來又被多次改進,並出現(xiàn)了多種版本。80年代初,美國國家標準化協(xié)會(ANSI),根據(jù)C語言問世以來各種版本對C語言的發(fā)展和擴充,制定了ANSIC標準(1989年再次做了修訂)。本書以ANSIC新標準來介紹。(3)目前,在微機上廣泛使用的C語言編譯系統(tǒng)有MicrosoftC、TurboC、BorlandC等。雖然它們的基本部分都是相同的,但還是有一些差異,所以請大家注意自己所使用的C編譯系統(tǒng)的特點和規(guī)定(參閱相應的手冊)。本書選定的上機環(huán)境是TCV2.0(DOS操作系統(tǒng))。

2.C語言的特點

C語言同時具有組合語言和高級語言的優(yōu)勢。(1)語言簡潔、緊湊,使用方便、靈活(見表1.1)。(2)運算符極其豐富(共34種,見附錄III)。(3)生成的目標代碼品質高,程式執(zhí)行效率高。(4)可移植性好(較之組合語言)。(5)可以直接操縱硬體。

3.在C語言中,除實現(xiàn)順序、選擇和迴圈三種基本結構等的9條控制語句外,輸入輸出操作均由標準庫函數(shù)(不是C語言的組成部分)來實現(xiàn)。所以學習C語言,不僅要學習這9條控制語句和各種運算符,而且要學習並掌握常用標準庫函數(shù)的使用。[Return]

1.2C語言程式的結構與書寫規(guī)則1.2.1C語言程式的總體結構

一個完整的C語言程式,是由一個main()函數(shù)(又稱主函數(shù))和若干個其他函數(shù)結合而成的,或僅由一個main()函數(shù)構成。[案例1.1]僅由main()函數(shù)構成的C語言程式。/*案例代碼檔案名:AL1_1.C*//*功能:僅由main()函數(shù)構成的C語言程式示例*/main(){printf(“ThisisaCprogram.\n”);}程式運行結果:

ThisisaCprogram.[程式演示][案例1.2]由main()函數(shù)和1個其他函數(shù)max()構成的C語言程式。/*案例代碼檔案名:AL1_2.C*//*功能:由main()函數(shù)和1個其他函數(shù)max()構成的C語言程式示例*/intmax(intx,inty){return(x>y?x:y);}main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max=%d”,c);}程式運行情況:

8,5←┘max=8[程式演示][案例1.3]改寫[案例1.2],交換main()函數(shù)和max()函數(shù)的前後位置。根源程式略。程式運行情況:

69←┘max=91.函數(shù)是C語言程式的基本單位。main()函數(shù)的作用,相當於其他高級語言中的主程序;其他函數(shù)的作用,相當於副程式。2.C語言程式總是從main()函數(shù)開始執(zhí)行。一個C語言程式,總是從main()函數(shù)開始執(zhí)行,而不論其在程式中的位置。當主函數(shù)執(zhí)行完畢時,亦即程式執(zhí)行完畢。習慣上,將主函數(shù)main()放在最前頭。

1.2.2函數(shù)的一般結構

任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說明和函數(shù)體兩部分組成。其一般結構如下:

[函數(shù)類型]函數(shù)名(函數(shù)參數(shù)表)函數(shù)說明部分

{

說明語句部分;執(zhí)行語句部分;函數(shù)體部分

}

1.使用的語法符號約定

[...]──方括號表示可選(即可以指定,也可以缺?。?/p>

……──省略號表示前面的項可以重複

|──多(含2)中選1

2.函數(shù)說明由函數(shù)類型(可缺省)、函數(shù)名和函數(shù)參數(shù)表三部分組成,其中函數(shù)參數(shù)表的格式為:數(shù)據(jù)類型形參[,數(shù)據(jù)類型形參2……]例如,[案例1.2]中的函數(shù)max(),其函數(shù)說明各部分如圖1-1所示。函數(shù)類型函數(shù)名函數(shù)參數(shù)表

↓↓↓intmax(intx,inty)

圖1-1函數(shù)說明部分結構圖注意:在舊標準中,函數(shù)可以缺省參數(shù)表。3.函數(shù)體在函數(shù)說明部分的下麵、大括?。ū仨毰鋵κ褂茫﹥鹊牟糠?。函數(shù)體一般由說明語句和可執(zhí)行語句兩部分構成:(1)說明語句部分說明語句部分由變數(shù)定義、自定義類型定義、自定義函數(shù)說明、外部變數(shù)說明等組成。

(2)可執(zhí)行語句一般由若干條可執(zhí)行語句構成。圖1-2是[案例1.2]的main()函數(shù)體的示意圖。/*主函數(shù)main()*/main(){intnum1,num2;變數(shù)定義部分

printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);可執(zhí)行語句部分函數(shù)體

scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}

圖1-2函數(shù)體結構示意圖

4.說明(1)函數(shù)體中的變數(shù)定義語句,必須在所有可執(zhí)行語句之前。下麵程式中變數(shù)定義語句“intmax;”的位置是非法的:main(){intx,y; /*變數(shù)定義語句:定義2個整型變數(shù)x、y*/x=3; /*可執(zhí)行的賦值語句:將3賦值給變數(shù)x*/y=6; /*可執(zhí)行的賦值語句:將6賦值給變數(shù)y*/intmax; /*變數(shù)定義語句:出現(xiàn)在可執(zhí)行的賦值語句“x=3;”和“y=6;”之後,非法!*/max=x>y?x:y;printf(“max=%d\n”,max);}解決辦法很簡單,請讀者自己思考。(2)如果不需要,也可以缺省變數(shù)定義語句。1.2.3根源程式書寫格式1.所有語句都必須以分號“;”結束,函數(shù)的最後一個語句也不例外。2.程式行的書寫格式自由,既允許1行內寫幾條語句,也允許1條語句分寫在幾行上。例如,[案例1.2]的主函數(shù)main(),也可改寫成如下所示的格式:……

main(){intnum1,num2;printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}如果某條語句很長,一般需要將其分寫在幾行上。3.允許使用注釋。C語言的注釋格式為:/*……*/例如,在[案例1.1]和[案例1.2]中,以及本節(jié)其他部分給出的根源程式中,凡是用“/*”和“*/”括起來的文字,都是注釋。(1)“/*”和“*/”必須成對使用,且“/”和“*”、以及“*”和“/”之間不能有空格,否則都出錯。

技巧:為避免遺漏必須配對使用的符號,例如注釋符號、函數(shù)體的起止識別字(花括?。?、圓括號等等,在輸入時,可連續(xù)輸入這些起止識別字,然後再在其中進行插入來完成內容的編輯。在起止識別字嵌套時,以及相距較遠時,這樣做更有必要。

(2)注釋的位置,可以單占1行,也可以跟在語句的後面。(3)如果1行寫不下,可另起1行繼續(xù)寫。(4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程式運行。

[Return]1.3C語言的語句和關鍵字

1.3.1C語言的語句

與其它高級語言一樣,C語言也是利用函數(shù)體中的可執(zhí)行語句,向電腦系統(tǒng)發(fā)出操作命令。按照語句功能或構成的不同,可將C語言的語句分為五類。1.控制語句控制語句完成一定的控制功能。C語言只有9條控制語句,又可細分為三種:(1)選擇結構控制語句

if()~else~,switch()~(2)迴圈結構控制語句

do~while(),for()~,while()~,break,continue(3)其他控制語句

goto,return

2.函數(shù)調用語句函數(shù)調用語句由一次函數(shù)調用加一個分號(語句結束標誌)構成。例如,printf("ThisisaCfunctionstatement.");3.運算式語句運算式語句由運算式後加一個分號構成。最典型的運算式語句是,在賦值運算式後加一個分號構成的賦值語句。例如,“num=5”是一個賦值運算式,而“num=5;”卻是一個賦值語句。4.空語句空語句僅由一個分號構成。顯然,空語句什麼操作也不執(zhí)行。例如,下麵就是一個空語句:;5.複合語句複合語句是由大括弧括起來的一組(也可以是1條)語句構成。例如:

main(){……{……}/*複合語句。注意:右括弧後不需要分號。*/……}複合語句的性質:(1)在語法上和單一語句相同,即單一語句可以出現(xiàn)的地方,也可以使用複合語句。(2)複合語句可以嵌套,即複合語句中也可出現(xiàn)複合語句。1.3.2關鍵字

C語言的關鍵字共有32個,根據(jù)關鍵字的作用,可分其為數(shù)據(jù)類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其他關鍵字四類。

(1)數(shù)據(jù)類型關鍵字(12個):char,double,enum,float,int,long,short,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,volatile[Return]1.4TurboCV2.0的基本操作1.運行一個C語言程式的一般過程2.TC的啟動、退出與命令菜單3.編輯並保存一個C語言根源程式4.編譯、連接──單個根源程式檔5.運行與查看結果6.編輯下一個新的根源程式[Return]1.運行一個C語言程式的一般過程

TurboC是一個集根源程式編輯、編譯、連接、運行與調試於一體、用菜單驅動的集成軟體環(huán)境。運行一個C語言程式的一般過程:(1)啟動TC,進入TC集成環(huán)境。(2)編輯(或修改)根源程式。(3)編譯。如果編譯成功,則可進行下一步操作;否則,返回(2)修改根源程式,再重新編譯,直至編譯成功。(4)連接。如果連接成功,則可進行下一步操作;否則,根據(jù)系統(tǒng)的錯誤提示,進行相應修改,再重新連接,直至連接成功。(5)運行。通過觀察程式運行結果,驗證程式的正確性。如果出現(xiàn)邏輯錯誤,則必須返回(2)修改根源程式,再重新編譯、連接和運行,直至程式正確。(6)退出TC集成環(huán)境,結束本次程式運行。[Return]2.TC的啟動、退出與命令菜單

(1)啟動TurboC:tc←┘[畫面演示]啟動TurboC後,其主菜單條橫向排列在螢幕頂端,並被啟動,其中File主項成為當前項。主菜單的下麵,是Edit(編輯)窗口和Message(消息)窗口。兩個窗口中,頂端橫線為雙線顯示的,表示該窗口是活動窗口。編輯窗口的頂端為狀態(tài)行,其中:.Line1Col1:顯示游標所在的行號和列號,即游標位置。.Insert:表示編輯狀態(tài)處於“插入”。當處於“改寫”狀態(tài)時,此處為空白。.d:NONAME.C:顯示當前正在編輯的檔案名。顯示為“NONAME.C”時,表示用戶尚未給檔命名。螢幕底端是7個功能鍵的說明,以及NumLock鍵的狀態(tài)(顯示“NUM”時,表示處於“數(shù)字鍵”狀態(tài);空白,表示“控制鍵”狀態(tài))。

(2)命令菜單的使用

1)按下功能鍵F10,啟動主菜單。如果主菜單已經(jīng)被啟動,則直接轉下一步。

2)用左、右方向鍵移動光帶,定位於需要的主項上,然後再按回車鍵,打開其子菜單(縱向排列)。

3)用上、下方向鍵移動光帶,定位於需要的子項上,回車即可。執(zhí)行完選定的功能後,系統(tǒng)自動關閉菜單。注意:菜單啟動後,又不使用,可再按F10/Esc鍵關閉,返回原來狀態(tài)。

(3)退出TurboC

退出TC有兩種方法:

1)菜單法:File|Quit(先選擇File主項,再選擇並執(zhí)行Quit子項)

2)快捷鍵法:Alt+“X”(先按下Alt鍵並保持,再按字母鍵X,然後同時放開)[Return]3.編輯並保存一個C語言根源程式

(1)啟動主菜單,選擇並執(zhí)行File|Load項(快捷鍵鍵:F3)。(2)在“LoadFileName”窗口,輸入根源程式檔案名。檔案名的輸入有兩種方法:直接輸入和選擇輸入。1)直接輸入按照檔案名的組成字串,逐個字元輸入即可。如果是已經(jīng)存在的檔,系統(tǒng)就在編輯窗口顯示該檔的內容,可供編輯、修改。如果是新檔,則給出一個空白編輯窗口,可供輸入新的根源程式。如果該檔不在當前目錄下,則需要冠以路徑名和(或)盤符。2)選擇檔(僅適用於已經(jīng)存在的根源程式檔)

①空回車,打開當前目錄下、尾碼為.C的所有檔的檔案名窗口。

②用上、下、左、右方向鍵,將光帶定位於所需的檔案名上。

③按回車鍵。

(3)常用編輯操作在編輯根源程式過程中,隨時都可以按F2鍵(或File|Save),將當前編輯的檔存盤,然後繼續(xù)編輯。這是一個良好的習慣!關於線上幫助:在任何窗口(或狀態(tài))下,按F1鍵啟動活動窗口(或狀態(tài))的線上幫助:.下一頁──PageDown,返回上一頁──PageUp.關閉線上幫助、返回原窗口(或狀態(tài))──Esc.返回前一個線上幫助屏──Alt+F1(無論線上幫助是否被啟動).返回線上幫助索引──F1:啟動線上幫助後,再按F1,則返回線上幫助索引,以便查詢其他類別線上幫助資訊。.查詢庫函數(shù)的線上幫助資訊──^F1:將游標移到需要查詢函數(shù)名的首字元上,然後鍵入^F1,即可獲得該庫函數(shù)的線上幫助資訊。注:為簡化描述,用“^”代表“Ctrl”鍵。^Fn就是Ctrl+Fn,下同。[Return]

4.編譯、連接──單個根源程式檔

選擇並執(zhí)行Compile|MakeEXEFile項(快捷鍵:F9),則TC將自動完成對當前正在編輯的根源程式檔的編譯、連接,並生成可執(zhí)行檔。如果根源程式有語法錯誤,系統(tǒng)將在螢幕中央的“Compiling”(編譯)窗口底端提示“Error:Pressanykey”(錯誤:按任意鍵)。此時,按空格鍵,螢幕下端的“Message”(消息)窗口被啟動,顯示出錯(或警告)資訊,光帶停在第一條消息上。這時“Edit”(編輯)窗口中也有一條光帶,它總是停在編譯錯誤在源代碼中的相應位置。注意:當用上、下鍵移動消息窗口中的光帶時,編輯窗口中的光帶也隨之移動,始終跟蹤源代碼中的錯誤位置![Return]

5.運行與查看結果

(1)運行當前正在編輯的根源程式檔選擇並執(zhí)行Run|Run項(快捷鍵:^F9),程式運行結束後,仍返回到編輯窗口。當你認為自己的根源程式不會有編譯、連接錯誤時,也可直接運行(即跳過對根源程式的編譯、連接步驟)。這時,TC將一次完成從編譯、連接到運行的全過程。(2)查看運行結果選擇並執(zhí)行Run|UserScreen項(快捷鍵:Alt+F5)。查看完畢後,按任一鍵返回編輯窗口。如果發(fā)現(xiàn)邏輯錯誤,則可在返回編輯窗口後,進行修改;然後再重新編譯、連接、運行,直至正確為止。[Return]

6.編輯下一個新的根源程式

選擇並執(zhí)行File|New項即可。如果螢幕提示如下確認資訊:

NONAME.Cnotsaved.Save?(Y/N)如果需要保存當前正在編輯的根源程式,則鍵入“Y”,進入下一步操作;否則,鍵入“N”(不保存),跳轉到(2)。(1)系統(tǒng)提示換名:

<d:><path>\NONAME.C直接輸入你給根源程式檔起的名字即可。(2)系統(tǒng)給出一個空白的編輯窗口,可以開始編輯下一個新的根源程式。[Return]2.1演算法的概念一個程式應包括對數(shù)據(jù)的描述和對數(shù)據(jù)處理的描述。

1.對數(shù)據(jù)的描述,即數(shù)據(jù)結構。數(shù)據(jù)結構是電腦學科的核心課程之一,有許多專門著作論述,本課程就不再贅述。

在C語言中,系統(tǒng)提供的數(shù)據(jù)結構,是以數(shù)據(jù)類型的形式出現(xiàn)的。

2.對數(shù)據(jù)處理的描述,即電腦演算法。演算法是為解決一個問題而採取的方法和步驟,是程式的靈魂。為此,著名電腦科學家沃思(NikiklausWirth)提出一個公式:

數(shù)據(jù)結構+演算法=程式

(以廚師做菜為例)實際上,一個程式除了數(shù)據(jù)結構和演算法外,還必須使用一種電腦語言,並採用結構化方法來表示。廣義的說,演算法是指為解決一個問題而採取的方法和步驟。(以生活為例)2.2簡單演算法舉例

【例2.1】求1ⅹ2ⅹ3ⅹ4ⅹ5。設p為被乘數(shù),i為乘數(shù),則演算法如下:S1:使p=1;S2:使i=2;S3:使pⅹi,乘積仍放在變數(shù)p中,可表示為pⅹi=>p;S4:使i的值加1,即i+1=>i;S5:如果i不大於5,返回重新執(zhí)行步驟S3以及其後的步驟S4和S5;否則,演算法結束?!纠?.2】有50個學生,要求將他們之中成績在80分以上者列印出來。

n1—表示第一個學生學號ni--表示第i個學生學號

g1—表示第一個學生成績gi--表示第i個學生成績則演算法如下:S1:1=>iS2:如果gi≥80,則列印ni和gi,否則,不列印。S3:i+1=>i。S4:如果i≤50,則返回S2,繼續(xù)執(zhí)行;否則,演算法結束。【例2.3】判定2000~2500年中的每一年是否為閏年,將結果輸出。閏年的條件:(1)能被4整除,但不能被100整除的年分。(2)能被100整除,又能被400整除的年分。演算法可表示如下:設y為被檢測的年分,可採取以下步驟:S1:2000=>yS2:若y不能被4整除,則輸出y“不是閏年”。然後轉到S5S3:若y能被4整除,不能被100整除,則輸出y“是閏年”。然後轉到S5S4:若y能被100整除,又能被400整除,則輸出y“是閏年”,否則輸出y“不是閏年”然後轉到S5S5:y+1=>yS6:當y≦2500時,轉S2級繼續(xù)執(zhí)行,否則演算法停止。2.3演算法的特性一個演算法應該具有以下特點:1.有窮性2.確定性3.有零個或多個輸入4.有一個或多個輸出5.有效性例如:b=0;a/b;演算法的輸出不一定就是電腦的列印輸出,一個演算法得到的結果就是演算法的輸出。沒有輸出的演算法是沒有意義的。2.4演算法的表示為了表示一個演算法,可以用不同的方法.常用的有自然語言、傳統(tǒng)流程圖、結構化流程圖、偽代碼、PAD圖等。2.4.1用自然語言表示演算法

優(yōu)點:通俗易懂。缺點:文字允長,易產(chǎn)生歧義。2.4.2用流程圖表示演算法起止框輸入輸出框判斷框處理框流程線連接點注釋框圖2.3流程圖符號或

圖2.4選擇結構

圖2.5連接點原因:避免交差

判斷框的特點:一個入口,兩個出口注釋框不是流程圖中必要的部分,不反映流程和操作,只是為了對流程圖中某些框的操作做必要的補充說明,以便閱讀。例2.1的演算法流程圖如下:例2.2的演算法流程圖如下:開始1=>p2=>ipⅹi=>pi+1=>ii>5結束NYY開始1=>ii+1=>ii>50結束NYgi>80N列印ni,gi

綜上所述,流程圖一般包括以下幾個部分:(1)表示相應操作的框。(2)帶箭頭的流程線。(3)框內外必要的文字說明。流程圖的優(yōu)點:直觀形象。缺點:對複雜演算法篇幅大,費時。

2.4.3三種基本結構和改進的流程圖傳統(tǒng)的流程圖結構混亂,閱讀費時,特別是對有多個迴圈和分支的演算法。為了解決這一問題,人們制定了幾種基本結構,整個演算法的結構就可以由這幾種基本結構組合而成。(1)順序結構(2)選擇結構(3)迴圈結構

ABab順序結構ABabpYN選擇結構1AabpYN選擇結構2AabpY當迴圈結構abpN直到迴圈結構A以上三種基本結構,有以下共同特點:(1)只有一個入口。(2)只有一個出口。注意,菱形判斷框的出口和基本結構的出口的區(qū)別。(3)結構內的每一部分都有機會執(zhí)行。(4)結構內不存在“死迴圈”。只要具有上述四個特點的都可以作為基本結構。ABpA同學們思考一下,下列三個流程圖中,有哪幾個是由基本結構組成?開始1=>p2=>ipⅹi=>pi+1=>ii>5結束NYY開始1=>ii+1=>ii>50結束NYgi>80N列印ni,gi2.4.4用N-S表示流程圖表示演算法沒有流程線的流程圖,所有演算法寫在一個矩形框內,分別也對應有三種基本結構,如下所示:AB順序結構PABNY選擇結構當P成立A迴圈結構1直到P成立A迴圈結構2注意:每個處理框可以是一個簡單操作,也可以是三個基本結構之一。例2.1、2.2、2.3的N-S流程圖分別如下圖所示:例21例22例22例23請同學們思考一下,圖2.12能轉換成N-S圖嗎?如何改進?綜上所述,可以看出與傳統(tǒng)流程圖比較,N-S流程圖有如下優(yōu)點:(1)文字描述直觀、形象、易於理解;(2)比傳統(tǒng)流程圖緊湊易畫。(3)圖中位置在上面的先執(zhí)行,在下面的後執(zhí)行。注意:一個結構化演算法是由一些基本結構順序組成的,對於非機構化演算法可以用一個結構化演算法來代替(例如:圖2.12轉換為圖2.34)2.4.6用電腦語言表示演算法【例2.20】將例2.13表示的演算法(求閏年)用C語言表示。main(){inty=2000;for(y=2000;y<=2500;y++){ if(y%4!=0){ printf("%disnotrunnian\n",y);continue;} elseif((y%4==0)&&(y%100!=0)){ printf("%disrunnian\n",y);continue; } elseif((y%100==0)&&(y%400==0)){ printf("%disrunnian\n",y);continue;}else printf("%disnotrunnian\n",y);}}2.5結構化程式設計方法

結構化程式設計強調程式設計風格和程式結構的規(guī)範化,其基本的思路是:把一個複雜問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的範圍內。具體步驟如下:(1)自頂向下;(2)逐步細化;(3)模組化設計;(4)結構化編碼;以寫文章為例。【例2.22】將1到1000之間的素數(shù)列印出來。

(1)挖去1;(2)用下一個未被挖去的數(shù)P去除P後面?zhèn)€數(shù),把P的倍數(shù)挖掉;(3)檢查P是否小於n的平方根的整數(shù)部分,如果是則返回(2)繼續(xù)執(zhí)行,否則就結束。(4)紙上剩下的就是素數(shù)。3.1C語言的數(shù)據(jù)類型C語言提供的數(shù)據(jù)結構,是以數(shù)據(jù)類型形式出現(xiàn)的。具體分類如下:1.基本類型分為整型、實型(又稱浮點型)、字元型和枚舉型四種。2.構造類型分為數(shù)組類型、結構類型和共用類型三種。3.指針類型。在第10章仲介紹。4.空類型C語言中的數(shù)據(jù),有常量和變數(shù)之分,它們分別屬於上述這些類型。本章將介紹基本類型中的整型、實型和字元型三種數(shù)據(jù)。[Return]3.2常量和變數(shù)3.3.1常量

1.常量的概念

在程式運行過程中,其值不能被改變的量稱為常量。

2.常量的分類

(1)整型常量,例如:123(2)實型常量,例如:3.14(3)字元常量,例如:‘A’(4)符號常量,例如:PI常量的類型,可通過書寫形式來判別。3.3.2變數(shù)1.變數(shù)的概念在程式運行過程中,其值可以被改變的量稱為變數(shù)。2.變數(shù)的兩個要素(1)變數(shù)名。每個變數(shù)都必須有一個名字──變數(shù)名,變數(shù)命名遵循識別字命名規(guī)則。(2)變數(shù)值。在程式運行過程中,變數(shù)值存儲在內存中。在程式中,通過變數(shù)名來引用變數(shù)的值。3.識別字命名規(guī)則(1)有效字元:只能由字母、數(shù)字和下劃線組成,且以字母或下劃線開頭。(2)有效長度:隨系統(tǒng)而異,但至少前8個字元有效。如果超長,則超長部分被捨棄。例如,由於student_name和student_number的前8個字元相同,有的系統(tǒng)認為這兩個變數(shù),是一回事而不加區(qū)別。在TCV2.0中,變數(shù)名(識別字)的有效長度為1~32個字元,缺省值為32。(3)C語言的關鍵字不能用作變數(shù)名(見附錄II)。注意:C語言對英文字母的大小敏感,即同一字母的大小寫,被認為是兩個不同的字元。習慣上,變數(shù)名和函數(shù)名中的英文字母用小寫,以增加可讀性。思考題:在C語言中,變數(shù)名total與變數(shù)名TOTAL、ToTaL、tOtAl等是同一個變數(shù)嗎?識別字命名的良好習慣──見名知意:所謂“見名知意”是指,通過變數(shù)名就知道變數(shù)值的含義。通常應選擇能表示數(shù)據(jù)含義的英文單詞(或縮寫)作變數(shù)名,或中文拼音字頭作變數(shù)名。例如,name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資)。4.變數(shù)的定義與初始化在C語言中,要求對所有用到的變數(shù),必須先定義、後使用;且稱在定義變數(shù)的同時進行賦初值的操作為變數(shù)初始化。(1)變數(shù)定義的一般格式數(shù)據(jù)類型變數(shù)名[,變數(shù)名2……];例如,floatradius,length,area;(2)變數(shù)初始化的一般格式數(shù)據(jù)類型變數(shù)名=初值;例如,floatradius=2.5;[Return]3.3整型數(shù)據(jù)3.4.1整型變數(shù)

1.分類

根據(jù)佔用記憶體位元組數(shù)的不同,整型變數(shù)又分為4類:(1)基本整型(類型關鍵字為int)。(2)短整型(類型關鍵字為shortint)。(3)長整型(類型關鍵字為longint)。(4)無符號整型。無符號型又分為無符號基本整型(unsignedint)、無符號短整型(unsignedshort)和無符號長整型(unsignedlong)三種,只能用來存儲無符號整數(shù)。2.整型變數(shù)的定義int變數(shù)名1,變數(shù)名2,….;例如:inta,b;3.佔用記憶體位元組數(shù)與值域

4.整型數(shù)據(jù)在內存中的存放方式

以補數(shù)形式存放在記憶體中。正數(shù)的補數(shù)是其本身,負數(shù)的補數(shù)是其絕對值的二進位碼按位取反加1。inta=10;

intb=-10;0000000000001010類型位元組數(shù)取值範圍signedint2-32768~32767即-215~(215-1)unsignedint20~65535即0~(216-1)signedshortint2-32768~32767即-215~(215-1)unsignedshortint20~65535即0~(216-1)longint4-231~(231-1)unsignedlongint40~4294967295即0~(231-1)11111111111101105.整型變數(shù)的溢出當賦給變數(shù)的值超出了變數(shù)所允許的值域範圍所產(chǎn)生的現(xiàn)象叫溢出。例如:inta=32767;intb=a+1;b的值是多少?3.4.2整型常量1.三種表示形式整型常量即整常數(shù),在C語言中可用三種形式表示:(1)十進位。例如10、36。(2)八進制(以數(shù)字0開頭)。例如012。(3)十六進制(以數(shù)字0+小寫字母x開頭)。例如0x36。2.分類(1)基本整型。在16位機中,用2位元組存儲,其數(shù)據(jù)範圍與int型變數(shù)一樣。(2)長整型(在數(shù)值後面加“L(l)”)。對超出基本整型值域的整型常量,可使用長整型常量表示,其取值範圍可達-231~(231-1)。例如,123l、315L等。3.類型匹配規(guī)則類型匹配規(guī)則為:一個整型常量,可以賦給能容納下其值的整型變數(shù)。例如,其值在-215~(215-1)的整型常量,可以賦給int型變數(shù)和longint型變數(shù);其值在-231~(231-1)的整型常量,就只能賦給longint型變數(shù)。注意:常量無unsigned型。但一個非負整型常量,只要它的值不超過相應變數(shù)的值域(即取值範圍),也可以賦給unsigned型變數(shù)。3.4實型數(shù)據(jù)3.5.1實型變數(shù)

存放形式:

一個是型數(shù)據(jù)一般在內存中占四個位元組,按照指數(shù)形式存儲(24位表示小數(shù)部分,8位表示指數(shù)部分)。例如:3.14159在內存中的存儲形式如下:分類:

(1)單精確度型。類型關鍵字為float,一般占4位元組(32位)、提供7位有效數(shù)字。

(2)雙精度型。類型關鍵字為double,一般占8個位元組、提供15~16位有效數(shù)字。

實型數(shù)據(jù)的舍入誤差超出有效位後的數(shù)據(jù)會被丟棄,從而產(chǎn)生了誤差。[例3.2]main(){floata,b;a=123456.789e5;b=a+2;printf(“%f\n”,b);}3.5.2實型常量

1.表示形式

實型常量即實數(shù),在C語言中又稱浮點數(shù),其值有兩種表達形式:

(1)十進位形式。例如3.14、9.8。(2)指數(shù)形式:<尾數(shù)>E(e)<整型指數(shù)>。例如3.0E+5等。

例如:以下選項中合法的實型常數(shù)是______。

A)5E2.0

B)E-3

C).2E0

D)1.3E

2.關於類型

實型常量不分float型和double型,通常按double型來處理。一個實型常量,可以賦給一個實型變數(shù)(float型或double型)。例如:f=2.45678*4523.653.6字元型數(shù)據(jù)3.6.1字元常量1.字元常量的定義用一對單引號括起來的單個字元,稱為字元常量。例如,‘A’、‘1’、‘+’等。2.轉義字元C語言還允許使用一種特殊形式的字元常量,就是以反斜杠“\”開頭的轉義字元,常見的轉義字元表如下(P48)。

【例3.3】轉義字元的使用

main()

{printf(“\x4F\x4B\x21\n”); /*等價于printf(“OK!\n”);*/

printf(“\x15\xAB\n”);

}程式運行結果如下:

OK!

§?字元形式含義ASCII代碼\n換行10\t水準製錶9\b退格8\r回車13\f換頁12\\反斜杠字元“\”92\’單撇字元39\”雙撇字元34\ddd1到3位8進制數(shù)代表的字元\xhh1到2位16進制數(shù)代表的字元3.6.2字元變數(shù)字元變數(shù)的類型關鍵字為char,一般佔用1位元組記憶體單元。1.變數(shù)值的存儲

字符變量用來存儲字符常量。將一個字元常量存儲到一個字元變數(shù)中,實際上是將該字元的ASCII碼值(無符號整數(shù))存儲到記憶體單元中。例如,charc1,c2;//定義兩個字元變數(shù):c1,c2*c1=’a’;c2=’b’;//給字元變數(shù)賦值注意:一個字元變數(shù)中只能存放一個字元,而不能存放一個字串。2.特性字元數(shù)據(jù)在內存中存儲的是字元的ASCII碼─一個無符號整數(shù),其形式與整數(shù)的存儲形式一樣(如圖3.4所示),所以C語言允許字元型數(shù)據(jù)與整型數(shù)據(jù)之間通用。(1)一個字元型數(shù)據(jù),既可以字元形式輸出,也可以整數(shù)形式輸出。

[案例3.4]字元變數(shù)的字元形式輸出和整數(shù)形式輸出。

main()

{charch1,ch2;

ch1='a';ch2='b';printf(“ch1=%c,ch2=%c\n”,ch1,ch2);

printf(“ch1=%d,ch2=%d\n”,ch1,ch2);

}

程序運行結果:

ch1=a,ch2=b

ch1=97,ch2=98(2)允許對字元數(shù)據(jù)進行算術運算,此時就是對它們的ASCII碼值進行算術運算。

[案例3.5]字母的大小寫轉換

main()

{charch1,ch2;

ch1=‘a(chǎn)’;ch2=‘B’;

printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32);

/*用字符形式輸出一個大于256的數(shù)值*/

printf("ch1+200=%d\n",ch1+200);

printf("ch1+200=%c\n",ch1+200);

printf("ch1+256=%d\n",ch1+256);

printf("ch1+256=%c\n",ch1+256);

}注意:字元數(shù)據(jù)只占一個位元組,故只能存放0~255內的整數(shù)。程式運行結果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a 思考題:用字符形式輸出一個大於256的數(shù)值,會得到什麼結果?3.6.3字串常量1.字串常量的概念和字串長度字串常量是用一對雙引號括起來的若干字元序列。字串中字元的個數(shù)稱為字串長度。長度為0的字串(即一個字元都沒有的字串)稱為空串,表示為“”(一對緊連的雙引號)。例如,“Howdoyoudo.”、“Goodmorning.”等,都是字串常量,其長度分別為14和13(空格也是一個字元)。

如果反斜杠和雙引號作為字串中的有效字元,則必須使用轉義字元。例如:(1)C:\msdos\v6.22→"C:\\msdos\\v6.22"

(2)Isay:"Goodbye!"→"Isay:\"Goodbye!\"“2.字串的存儲C語言規(guī)定:在存儲字串常量時,由系統(tǒng)在字串的末尾自動加一個'\0'作為字串的結束標誌。

如果有一個字串為“CHINA”,則它在內存中的實際存儲如下所示:最後一個字元'\0'是系統(tǒng)自動加上的,它佔用6位元組而非5位元組記憶體空間。CHINA\0綜上所述,字元常量'A'與字串常量"A"是兩回事:(1)定界符不同:字元常量使用單引號,而字串常量使用雙引號;(2)長度不同:字元常量的長度固定為1,而字串常量的長度,可以是0,也可以是某個整數(shù);(3)存儲要求不同:字元常量存儲的是字元的ASCII碼值,而字串常量,除了要存儲有效的字元外,還要存儲一個結束標誌’\0’。請同學們思考下麵的語句是否有錯?charC;C=‘A’;C=“A”;3.6變數(shù)賦初值

賦初值是指在定義變數(shù)的同時給其賦值,也稱變數(shù)初始化。例如:

floatf=3.156;charc=‘b’;inta,b,c=3;inta=3,b=3,c=3;

但是,inta=b=c=3;是非法的。初始化是在程式運行時執(zhí)行的。

inta;inta=3;a=3;3.7混合運算

請思考下麵運算式的特點以及其運算結果?10+’a’+1.5-8765.1234*’b’

在C語言規(guī)定,對由不同類型數(shù)據(jù)組成的運算式進行運算時,先將不同類型轉換成同一類型,然後進行運算。轉換時遵循以下優(yōu)先順序。高doublefloatlongunsigned

低intchar,short

上面運算式的值為:-858873.5932003.8算術運算與算術運算式在C語言中,除控制語句和輸入輸出函數(shù)外,其他所有基本操作都作為運算符處理(見P55)。

1.五種基本算術運算符

+、-(減法/取負)、*、/、%(求餘數(shù))(1)關於除法運算/C語言規(guī)定:兩個整數(shù)相除,其商為整數(shù),小數(shù)部分被捨棄。例如,5/2=2,對於負數(shù)一般“向零取整”。

(2)關於求餘數(shù)運算%要求兩側的運算元均為整型數(shù)據(jù),否則出錯。

2.運算式和算術運算式(1)運算式的概念用運算符和括弧將運算對象(常量、變數(shù)和函數(shù)等)連接起來的、符合C語言語法規(guī)則的式子,稱為運算式。

單個常量、變數(shù)或函數(shù),可以看作是運算式的一種特例。將單個常量、變數(shù)或函數(shù)構成的運算式稱為簡單運算式,其他運算式稱之為複雜運算式。(2)算術運算式的概念運算式中的運算符都是算術運算符。例如,3+6*9、(x+y)/2-1等,都是算術運算式。3.運算符的優(yōu)先順序與結合性(1)C語言規(guī)定了運算符的優(yōu)先順序和結合性。優(yōu)先順序規(guī)定了運算符的運算先後。結合性規(guī)定了當一個運算元兩側的運算符具有相同的優(yōu)先順序時,該運算元是先與左邊的運算符結合,還是先與右邊的運算符結合。自左至右的結合方向,稱為左結合性。反之,稱為右結合性。結合性是C語言的獨有概念。除單目運算符、賦值運算符和條件運算符是右結合性外,其他運算符都是左結合性。(2)運算式求值1)按運算符的優(yōu)先順序高低次序執(zhí)行。例如,先乘除後加減。2)如果在一個運算對象(或稱運算元)兩側的運算符的優(yōu)先順序相同,則按C語言規(guī)定的結合方向(結合性)進行。例如,算術運算符的結合方向是“自左至右”,即:在執(zhí)行“a–b+c”時,變數(shù)b先與減號結合,執(zhí)行“a-b”;然後再執(zhí)行加c的運算。4.強制類型轉換可以利用強制類型轉換將一個運算式轉換成所需類型,其基本格式如下:(類型名)運算式當被轉換的運算式是一個簡單運算式時,外面的一對圓括號可以缺省。例如,(double)a(等價於(double)(a))/*將變數(shù)a的值轉換成double型*/(int)(x+y) /*將x+y的結果轉換成int型*/(float)5/2(等價於(float)(5)/2)/*將5轉換成實型,再除以2(=2.5)*/(float)(5/2) 注意:強制轉換類型得到的是一個所需類型的中間量,原運算式類型並不發(fā)生變化。思考:inta=5,b;floatf;f=(float)a;b=a;思考b的值是多少?5.自增(++)、自減(--)運算++和--是單目運算符,每運算一次使變數(shù)的值增1或減1。如:++i,--i//在使用i之前,先使i的值加(減)1i++,i--//在使用i之後,再使i的值加(減)1注意:(1)雖然i++和++i都是使i的值自加1,即i=i+1,但卻有區(qū)別;

例如:intj,i=3;j=++i;j=i++;(2)只能用於變數(shù),不能用於常量或運算式。例如:++1,--1,(a+b)++//都是非法的(3)其結合方式是“從右至左”。例如:-i--相當於-(i--)思考:下列函數(shù)輸出的結果是什麼,i最終的值是多少?

main(){inti=3;intj=(i++)+(i++)+(i++);printf(“%d,%d”,i,j);return0;}[案例3.4]自增、自減運算符的用法與運算規(guī)則示例。main(){intx=6,y;printf("x=%d\n",x); y=++x; printf("y=++x:x=%d,y=%d\n",x,y);y=x--; printf("y=x--:x=%d,y=%d\n",x,y);}程式運行結果:x=6y=++x:x=7,y=7y=x--:x=6,y=7 3.9賦值運算與賦值運算式1.賦值運算賦值符號“=”就是賦值運算符,它的作用是將一個運算式的值賦給一個變數(shù)。賦值運算符的一般形式為:變數(shù)=賦值運算式

例如,x=5

y=(float)5/2

如果運算式值的類型與被賦值變數(shù)的類型不一致,系統(tǒng)自動地將運算式的值轉換成被賦值變數(shù)的數(shù)據(jù)類型,然後再賦值給變數(shù)。

思考題:假設變數(shù)num的數(shù)據(jù)類型為float,其值為2.5,則執(zhí)行“num=(int)num”後,num的值等於多少?2.複合賦值運算複合賦值運算符是由賦值運算符之前再加一個雙目運算符構成的。複合賦值運算的一般格式為:變數(shù)雙目運算符=運算式

└──┬──┘

複合賦值運算符它等價於:變數(shù)=變數(shù)雙目運算符(運算式)。當運算式為簡單運算式時,運算式外的一對圓括號才可缺省,否則可能出錯。例如,x+=3 /*等價於x=x+3*/y*=x+6 /*等價於y=y*(x+6),而不是y=y*x+6*/C語言規(guī)定的10種複合賦值運算符如下:+=,-=,*=,/=,%=; /*複合算術運算符(5個)*/&=,^=,|=,<<=,>>=; /*複合位運算符(5個)*/3.賦值運算式由賦值運算符或複合賦值運算符,將一個變數(shù)和一個運算式連接起來的運算式,稱為賦值運算式。(1)一般格式

變數(shù)賦值運算符運算式(2)賦值運算式的值任何一個運算式都有一個值,賦值運算式也不例外。被賦值變數(shù)的值,就是賦值運算式的值。例如,“a=5”這個賦值運算式,變數(shù)a的值“5”就是它的值。a=5+(c=6)注意:賦值運算式與賦值語句之間的區(qū)別a=b=c//是賦值運算式a=b=c;//是賦值語句4.1C語句概述C程式是由若干根源程式構成,根源程式又是若干函數(shù)組成,而函數(shù)卻是由若干數(shù)據(jù)和語句構成,所以C語句是基礎中的基礎。4.1.1有效語句的條件

條件:①必須能產(chǎn)生機器操作,並完成一定操作任務。

②必須有一個分號作為語句標誌。例如:inta=4;return1;注意:有分號作為結尾的並不一定是語句;例如:inta;//不是語句,只是定義了一個變數(shù)程式應該包括數(shù)據(jù)描述(由聲明部分來實現(xiàn))和數(shù)據(jù)操作(由語句實現(xiàn))。4.1.2分類(1)控制語句(有9個,見P68)作用:完成控制功能例如:if(x>y)z=x;elsez=y;(2)函數(shù)調用語句作用:完成函數(shù)調用例如:a=max(7,8);(3)運算式語句由任一運算式加一個分號構成;例如:i=i+1;//賦值語句

i++;(4)空語句

;(5)複合語句:由一對{}括起來的多個語句構成的語句4.3C語言中的輸入輸出

輸入:從輸入設備(鍵盤、磁片、掃描器)向電腦輸入數(shù)據(jù).

輸出:從電腦向外部輸出設備(顯示器、印表機、磁片)輸出數(shù)據(jù)。(1)C語言本身不提供輸入輸出語句,輸入輸出是由函數(shù)來實現(xiàn)。一般由C語言的庫函數(shù)提供,有如下幾類:輸入:getchar(),scanf(),gets()

輸出:putchar(),printf(),puts()(2)使用C語言庫函數(shù)時,要用“#include”命令將頭檔包含進來。例如:#include<stdio.h>

或#include“stdio.h”

[案例4.1]已知圓半徑radius=1.5,求圓周長和圓面積。

main()

{floatradius=1.5,length,area,pi=3.1415926;

length=2*pi*radius; /*求圓周長*/

area=pi*radius*radius; /*求圓面積*/

printf(“radius=%f\n”,radius); /*輸出圓半徑*/

printf(“l(fā)ength=%7.2f,area=%7.2f\n”,length,area);}

程式運行結果如下:

radius=1.500000length=9.42,area=7.07

4.4格式化輸出——printf()函數(shù)printf()函數(shù)的作用:向電腦系統(tǒng)默認的輸出設備輸出一個或多個任意類型的數(shù)據(jù)。4.4.1printf()函數(shù)的一般格式printf(”格式控制”,輸出列表);例如:printf(”%d,%c”,i,c);1.格式控制(由三部分組成)(1)格式控制符。格式控制符的一般形式如下:%[寬度][.精度][類型]

例如:%7.2f

常用的類型字元如表4.1所示,常用的寬度和精度指示符如表4.2所示。(2)普通字元──格式字串中的普通字元,原樣輸出。例如,[案例4.1]中的printf(”radius=%f\n“,radius);(3)轉義字元例如,[案例4.1]中printf()函數(shù)中的‘\n’就是轉義字元,輸出時產(chǎn)生一個“換行”操作。2.輸出列表輸出列表是可選的。如果要輸出的數(shù)據(jù)不止1個,相鄰2個之間用逗號分開。下麵的printf()函數(shù)都是合法的:(1)printf("Iamastudent.\n");

(2)printf("%d",3);

(3)printf("a=%fb=%5d\n",a,a+3);

必須強調:“格式控制符”中的格式指示符,必須與“輸出列表”中、輸出項的數(shù)據(jù)類型一致,否則會引起輸出錯誤。

4.1.2格式指示符

輸出不同類型的數(shù)據(jù),要使用不同的類型轉換字元。

1.%d──以帶符號的十進位整數(shù)形式輸出。

[案例4.2]類型轉換字元d的使用。

main(){intnum1=123;longnum2=123456;/*用3種不同格式,輸出int型數(shù)據(jù)num1的值*/printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3種不同格式,輸出long型數(shù)據(jù)num2的值*/printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);} [程式演示]程式運行結果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=58327163 %o──八進制、無符號形式輸出%x──十六進制、無符號形式輸出%u──以十進位、無符號形式輸出%l──輸出長整型數(shù)所謂無符號形式是指,不論正數(shù)還是負數(shù),系統(tǒng)一律當作無符號整數(shù)來輸出。例如,printf("%d,%o,%x\n",-1,-1,-1);輸出結果:-1,177777,ffff(分析原因:補數(shù))

2.%f──以小數(shù)形式、按系統(tǒng)默認的寬度,輸出單精確度和雙精度實數(shù)。[案例4.3]類型轉換字元f的使用。main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);printf(“%e,%g”,f,f);}

程式運行結果如下:

123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.3330101.234560e+02,123.456

本案例程式的輸出結果中,數(shù)據(jù)123.456001和3333333333333.333010中的001和010都是無意義的,因為它們超出了有效數(shù)字的範圍。

%e以標準指數(shù)形式輸出整數(shù)部分大於等於1、小於10,小數(shù)點占1位,小數(shù)部分占6位,指數(shù)部分占4位,其中e占一位,指數(shù)符號占一位,指數(shù)占2位,共計12位。例如:printf(“%e”,12.0);輸出如下:

1.200000e+01%g讓系統(tǒng)根據(jù)數(shù)值的大小,自動選擇%f或%e格式、且不輸出無意義的零。3.類型轉換字元c──輸出一個字元(只占一列寬度)。[案例4.4]類型轉換字元c的使用。

main(){charc='A';inti=65;printf("c=%c,%5c,%d\n",c,c,c);printf("i=%d,%c",i,i);}程式運行結果如下:

c=A,□□□□A,65i=65,A

需要強調的是:在C語言中,整數(shù)可以用字符形式輸出,字元數(shù)據(jù)也可以用整數(shù)形式輸出。將整數(shù)用字符形式輸出時,系統(tǒng)首先求該數(shù)與256的餘數(shù),然後將餘數(shù)作為ASCII碼,轉換成相應的字元輸出。4.類型轉換字元s──輸出一個字串。[案例4.5]類型轉換字元s的使用。/*案例代碼檔案名:AL3_10.C。*/main(){printf("%s,%5s,%-10s","Internet","Internet","Internet");printf("%10.5s,%4.5s\n","Internet","Internet");} [程式演示]程式運行結果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter注意:系統(tǒng)輸出字元和字串時,不輸出單引號和雙引號。

4.1.3

使用說明(1)printf()可以輸出常量、變數(shù)和運算式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項表中的每個數(shù)據(jù)一一對應,否則出錯。例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是錯誤的。(2)格式字元x、e、g可以用小寫字母,也可以用大寫字母。使用大寫字母時,輸出數(shù)據(jù)中包含的字母也大寫。除了x、e、g格式字元外,其他格式字元必須用小寫字母。例如,%f不能寫成%F。(3)格式字元緊跟在“%”後面就作為格式字元,否則將作為普通字元使用(原樣輸出)。例如,printf(”c=%c,f=%f\n“,c,f);中的第一個c和f,都是普通字元。4.5格式化輸入——scanf()函數(shù)scanf()函數(shù)是用來從外部輸入設備向電腦主機輸入數(shù)據(jù)的。

4.5.1scanf()函數(shù)的一般格式

[案例4.6]已知圓柱體的底半徑radius=1.5,高high=2.0,求其體積。

main()

{floatradius=1.5,high=2.0,pi=3.14159,vol;

vol=pi*radius*radius*high;/*求體積*/

printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/

} [案例4.7]已知圓柱體的底半徑為radius,高為high,求其體積。

main(){floatradius,high,vol,pi=3.1415926;printf("Pleaseinputradius&high:");scanf("%f%f",&radius,&high);vol=pi*radius*radius*high;printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);}

程式運行結果如下:

Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14

在程式中給電腦提供數(shù)據(jù),可以用賦值語句,也可以用輸入函數(shù)。在C語言中,可使用scanf()函數(shù),通過鍵盤輸入,給電腦同時提供多個、任意的數(shù)據(jù)。1.scanf()函數(shù)的一般格式scanf("格式字串",輸入項首地址表);(1)格式字串。格式字串可以包含3種類型的字元:格式指示符、空白字元(空格、Tab鍵和回車鍵)和非空白字元(又稱普通字元)。格式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論