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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

2.C語(yǔ)言的特點(diǎn)

C語(yǔ)言同時(shí)具有匯編語(yǔ)言和高級(jí)語(yǔ)言的優(yōu)勢(shì)。(1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活(見(jiàn)表1.1)。(2)運(yùn)算符極其豐富(共34種,見(jiàn)附錄III)。(3)生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。(4)可移植性好(較之匯編語(yǔ)言)。(5)可以直接操縱硬件。

3.在C語(yǔ)言中,除實(shí)現(xiàn)順序、選擇和循環(huán)三種基本結(jié)構(gòu)等的9條控制語(yǔ)句外,輸入輸出操作均由標(biāo)準(zhǔn)庫(kù)函數(shù)(不是C語(yǔ)言的組成部分)來(lái)實(shí)現(xiàn)。所以學(xué)習(xí)C語(yǔ)言,不僅要學(xué)習(xí)這9條控制語(yǔ)句和各種運(yùn)算符,而且要學(xué)習(xí)并掌握常用標(biāo)準(zhǔn)庫(kù)函數(shù)的使用。[Return]

1.2C語(yǔ)言程序的結(jié)構(gòu)與書(shū)寫(xiě)規(guī)則1.2.1C語(yǔ)言程序的總體結(jié)構(gòu)

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

ThisisaCprogram.[程序演示][案例1.2]由main()函數(shù)和1個(gè)其它函數(shù)max()構(gòu)成的C語(yǔ)言程序。/*案例代碼文件名:AL1_2.C*//*功能:由main()函數(shù)和1個(gè)其它函數(shù)max()構(gòu)成的C語(yǔ)言程序示例*/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);}程序運(yùn)行情況:

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

69←┘max=91.函數(shù)是C語(yǔ)言程序的基本單位。main()函數(shù)的作用,相當(dāng)于其它高級(jí)語(yǔ)言中的主程序;其它函數(shù)的作用,相當(dāng)于子程序。2.C語(yǔ)言程序總是從main()函數(shù)開(kāi)始執(zhí)行。一個(gè)C語(yǔ)言程序,總是從main()函數(shù)開(kāi)始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時(shí),亦即程序執(zhí)行完畢。習(xí)慣上,將主函數(shù)main()放在最前頭。

1.2.2函數(shù)的一般結(jié)構(gòu)

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

[函數(shù)類(lèi)型]函數(shù)名(函數(shù)參數(shù)表)函數(shù)說(shuō)明部分

{

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

}

1.使用的語(yǔ)法符號(hào)約定

[...]──方括號(hào)表示可選(即可以指定,也可以缺省)

……──省略號(hào)表示前面的項(xiàng)可以重復(fù)

|──多(含2)中選1

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

↓↓↓intmax(intx,inty)

圖1-1函數(shù)說(shuō)明部分結(jié)構(gòu)圖注意:在舊標(biāo)準(zhǔn)中,函數(shù)可以缺省參數(shù)表。3.函數(shù)體在函數(shù)說(shuō)明部分的下面、大括號(hào)(必須配對(duì)使用)內(nèi)的部分。函數(shù)體一般由說(shuō)明語(yǔ)句和可執(zhí)行語(yǔ)句兩部分構(gòu)成:(1)說(shuō)明語(yǔ)句部分說(shuō)明語(yǔ)句部分由變量定義、自定義類(lèi)型定義、自定義函數(shù)說(shuō)明、外部變量說(shuō)明等組成。

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

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

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

圖1-2函數(shù)體結(jié)構(gòu)示意圖

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

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

技巧:為避免遺漏必須配對(duì)使用的符號(hào),例如注釋符號(hào)、函數(shù)體的起止標(biāo)識(shí)符(花括號(hào))、圓括號(hào)等等,在輸入時(shí),可連續(xù)輸入這些起止標(biāo)識(shí)符,然后再在其中進(jìn)行插入來(lái)完成內(nèi)容的編輯。在起止標(biāo)識(shí)符嵌套時(shí),以及相距較遠(yuǎn)時(shí),這樣做更有必要。

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

[Return]1.3C語(yǔ)言的語(yǔ)句和關(guān)鍵字

1.3.1C語(yǔ)言的語(yǔ)句

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

if()~else~,switch()~(2)循環(huán)結(jié)構(gòu)控制語(yǔ)句

do~while(),for()~,while()~,break,continue(3)其它控制語(yǔ)句

goto,return

2.函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句由一次函數(shù)調(diào)用加一個(gè)分號(hào)(語(yǔ)句結(jié)束標(biāo)志)構(gòu)成。例如,printf("ThisisaCfunctionstatement.");3.表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句由表達(dá)式后加一個(gè)分號(hào)構(gòu)成。最典型的表達(dá)式語(yǔ)句是,在賦值表達(dá)式后加一個(gè)分號(hào)構(gòu)成的賦值語(yǔ)句。例如,“num=5”是一個(gè)賦值表達(dá)式,而“num=5;”卻是一個(gè)賦值語(yǔ)句。4.空語(yǔ)句空語(yǔ)句僅由一個(gè)分號(hào)構(gòu)成。顯然,空語(yǔ)句什么操作也不執(zhí)行。例如,下面就是一個(gè)空語(yǔ)句:;5.復(fù)合語(yǔ)句復(fù)合語(yǔ)句是由大括號(hào)括起來(lái)的一組(也可以是1條)語(yǔ)句構(gòu)成。例如:

main(){……{……}/*復(fù)合語(yǔ)句。注意:右括號(hào)后不需要分號(hào)。*/……}復(fù)合語(yǔ)句的性質(zhì):(1)在語(yǔ)法上和單一語(yǔ)句相同,即單一語(yǔ)句可以出現(xiàn)的地方,也可以使用復(fù)合語(yǔ)句。(2)復(fù)合語(yǔ)句可以嵌套,即復(fù)合語(yǔ)句中也可出現(xiàn)復(fù)合語(yǔ)句。1.3.2關(guān)鍵字

C語(yǔ)言的關(guān)鍵字共有32個(gè),根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類(lèi)型關(guān)鍵字、控制語(yǔ)句關(guān)鍵字、存儲(chǔ)類(lèi)型關(guān)鍵字和其它關(guān)鍵字四類(lèi)。

(1)數(shù)據(jù)類(lèi)型關(guān)鍵字(12個(gè)):char,double,enum,float,int,long,short,signed,struct,union,unsigned,void

(2)控制語(yǔ)句關(guān)鍵字(12個(gè)):break,case,continue,default,do,else,for,goto,if,return,switch,while

(3)存儲(chǔ)類(lèi)型關(guān)鍵字(4個(gè)):auto,extern,register,static

(4)其它關(guān)鍵字(4個(gè)):const,sizeof,typedef,volatile[Return]1.4TurboCV2.0的基本操作1.運(yùn)行一個(gè)C語(yǔ)言程序的一般過(guò)程2.TC的啟動(dòng)、退出與命令菜單3.編輯并保存一個(gè)C語(yǔ)言源程序4.編譯、連接──單個(gè)源程序文件5.運(yùn)行與查看結(jié)果6.編輯下一個(gè)新的源程序[Return]1.運(yùn)行一個(gè)C語(yǔ)言程序的一般過(guò)程

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

(1)啟動(dòng)TurboC:tc←┘[畫(huà)面演示]啟動(dòng)TurboC后,其主菜單條橫向排列在屏幕頂端,并被激活,其中File主項(xiàng)成為當(dāng)前項(xiàng)。主菜單的下面,是Edit(編輯)窗口和Message(消息)窗口。兩個(gè)窗口中,頂端橫線為雙線顯示的,表示該窗口是活動(dòng)窗口。編輯窗口的頂端為狀態(tài)行,其中:.Line1Col1:顯示光標(biāo)所在的行號(hào)和列號(hào),即光標(biāo)位置。.Insert:表示編輯狀態(tài)處于“插入”。當(dāng)處于“改寫(xiě)”狀態(tài)時(shí),此處為空白。.d:NONAME.C:顯示當(dāng)前正在編輯的文件名。顯示為“NONAME.C”時(shí),表示用戶尚未給文件命名。屏幕底端是7個(gè)功能鍵的說(shuō)明,以及NumLock鍵的狀態(tài)(顯示“NUM”時(shí),表示處于“數(shù)字鍵”狀態(tài);空白,表示“控制鍵”狀態(tài))。

(2)命令菜單的使用

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

2)用左、右方向鍵移動(dòng)光帶,定位于需要的主項(xiàng)上,然后再按回車(chē)鍵,打開(kāi)其子菜單(縱向排列)。

3)用上、下方向鍵移動(dòng)光帶,定位于需要的子項(xiàng)上,回車(chē)即可。執(zhí)行完選定的功能后,系統(tǒng)自動(dòng)關(guān)閉菜單。注意:菜單激活后,又不使用,可再按F10/Esc鍵關(guān)閉,返回原來(lái)狀態(tài)。

(3)退出TurboC

退出TC有兩種方法:

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

2)快捷鍵法:Alt+“X”(先按下Alt鍵并保持,再按字母鍵X,然后同時(shí)放開(kāi))[Return]3.編輯并保存一個(gè)C語(yǔ)言源程序

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

①空回車(chē),打開(kāi)當(dāng)前目錄下、后綴為.C的所有文件的文件名窗口。

②用上、下、左、右方向鍵,將光帶定位于所需的文件名上。

③按回車(chē)鍵。

(3)常用編輯操作在編輯源程序過(guò)程中,隨時(shí)都可以按F2鍵(或File|Save),將當(dāng)前編輯的文件存盤(pán),然后繼續(xù)編輯。這是一個(gè)良好的習(xí)慣!關(guān)于在線幫助:在任何窗口(或狀態(tài))下,按F1鍵激活活動(dòng)窗口(或狀態(tài))的在線幫助:.下一頁(yè)──PageDown,返回上一頁(yè)──PageUp.關(guān)閉在線幫助、返回原窗口(或狀態(tài))──Esc.返回前一個(gè)在線幫助屏──Alt+F1(無(wú)論在線幫助是否被激活).返回在線幫助索引──F1:激活在線幫助后,再按F1,則返回在線幫助索引,以便查詢其它類(lèi)別在線幫助信息。.查詢庫(kù)函數(shù)的在線幫助信息──^F1:將光標(biāo)移到需要查詢函數(shù)名的首字符上,然后鍵入^F1,即可獲得該庫(kù)函數(shù)的在線幫助信息。注:為簡(jiǎn)化描述,用“^”代表“Ctrl”鍵。^Fn就是Ctrl+Fn,下同。[Return]

4.編譯、連接──單個(gè)源程序文件

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

5.運(yùn)行與查看結(jié)果

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

6.編輯下一個(gè)新的源程序

選擇并執(zhí)行File|New項(xiàng)即可。如果屏幕提示如下確認(rèn)信息:

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

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

1.對(duì)數(shù)據(jù)的描述,即數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)學(xué)科的核心課程之一,有許多專(zhuān)門(mén)著作論述,本課程就不再贅述。

在C語(yǔ)言中,系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),是以數(shù)據(jù)類(lèi)型的形式出現(xiàn)的。

2.對(duì)數(shù)據(jù)處理的描述,即計(jì)算機(jī)算法。算法是為解決一個(gè)問(wèn)題而采取的方法和步驟,是程序的靈魂。為此,著名計(jì)算機(jī)科學(xué)家沃思(NikiklausWirth)提出一個(gè)公式:

數(shù)據(jù)結(jié)構(gòu)+算法=程序

(以廚師做菜為例)實(shí)際上,一個(gè)程序除了數(shù)據(jù)結(jié)構(gòu)和算法外,還必須使用一種計(jì)算機(jī)語(yǔ)言,并采用結(jié)構(gòu)化方法來(lái)表示。廣義的說(shuō),算法是指為解決一個(gè)問(wèn)題而采取的方法和步驟。(以生活為例)2.2簡(jiǎn)單算法舉例

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

n1—表示第一個(gè)學(xué)生學(xué)號(hào)ni--表示第i個(gè)學(xué)生學(xué)號(hào)

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

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

圖2.4選擇結(jié)構(gòu)

圖2.5連接點(diǎn)原因:避免交差

判斷框的特點(diǎn):一個(gè)入口,兩個(gè)出口注釋框不是流程圖中必要的部分,不反映流程和操作,只是為了對(duì)流程圖中某些框的操作做必要的補(bǔ)充說(shuō)明,以便閱讀。例2.1的算法流程圖如下:例2.2的算法流程圖如下:開(kāi)始1=>p2=>ipⅹi=>pi+1=>ii>5結(jié)束NYY開(kāi)始1=>ii+1=>ii>50結(jié)束NYgi>80N打印ni,gi

綜上所述,流程圖一般包括以下幾個(gè)部分:(1)表示相應(yīng)操作的框。(2)帶箭頭的流程線。(3)框內(nèi)外必要的文字說(shuō)明。流程圖的優(yōu)點(diǎn):直觀形象。缺點(diǎn):對(duì)復(fù)雜算法篇幅大,費(fèi)時(shí)。

2.4.3三種基本結(jié)構(gòu)和改進(jìn)的流程圖傳統(tǒng)的流程圖結(jié)構(gòu)混亂,閱讀費(fèi)時(shí),特別是對(duì)有多個(gè)循環(huán)和分支的算法。為了解決這一問(wèn)題,人們制定了幾種基本結(jié)構(gòu),整個(gè)算法的結(jié)構(gòu)就可以由這幾種基本結(jié)構(gòu)組合而成。(1)順序結(jié)構(gòu)(2)選擇結(jié)構(gòu)(3)循環(huán)結(jié)構(gòu)

ABab順序結(jié)構(gòu)ABabpYN選擇結(jié)構(gòu)1AabpYN選擇結(jié)構(gòu)2AabpY當(dāng)循環(huán)結(jié)構(gòu)abpN直到循環(huán)結(jié)構(gòu)A以上三種基本結(jié)構(gòu),有以下共同特點(diǎn):(1)只有一個(gè)入口。(2)只有一個(gè)出口。注意,菱形判斷框的出口和基本結(jié)構(gòu)的出口的區(qū)別。(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)執(zhí)行。(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”。只要具有上述四個(gè)特點(diǎn)的都可以作為基本結(jié)構(gòu)。ABpA同學(xué)們思考一下,下列三個(gè)流程圖中,有哪幾個(gè)是由基本結(jié)構(gòu)組成?開(kāi)始1=>p2=>ipⅹi=>pi+1=>ii>5結(jié)束NYY開(kāi)始1=>ii+1=>ii>50結(jié)束NYgi>80N打印ni,gi2.4.4用N-S表示流程圖表示算法沒(méi)有流程線的流程圖,所有算法寫(xiě)在一個(gè)矩形框內(nèi),分別也對(duì)應(yīng)有三種基本結(jié)構(gòu),如下所示:AB順序結(jié)構(gòu)PABNY選擇結(jié)構(gòu)當(dāng)P成立A循環(huán)結(jié)構(gòu)1直到P成立A循環(huán)結(jié)構(gòu)2注意:每個(gè)處理框可以是一個(gè)簡(jiǎn)單操作,也可以是三個(gè)基本結(jié)構(gòu)之一。例2.1、2.2、2.3的N-S流程圖分別如下圖所示:例21例22例22例23請(qǐng)同學(xué)們思考一下,圖2.12能轉(zhuǎn)換成N-S圖嗎?如何改進(jìn)?綜上所述,可以看出與傳統(tǒng)流程圖比較,N-S流程圖有如下優(yōu)點(diǎn):(1)文字描述直觀、形象、易于理解;(2)比傳統(tǒng)流程圖緊湊易畫(huà)。(3)圖中位置在上面的先執(zhí)行,在下面的后執(zhí)行。注意:一個(gè)結(jié)構(gòu)化算法是由一些基本結(jié)構(gòu)順序組成的,對(duì)于非機(jī)構(gòu)化算法可以用一個(gè)結(jié)構(gòu)化算法來(lái)代替(例如:圖2.12轉(zhuǎn)換為圖2.34)2.4.6用計(jì)算機(jī)語(yǔ)言表示算法【例2.20】將例2.13表示的算法(求閏年)用C語(yǔ)言表示。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結(jié)構(gòu)化程序設(shè)計(jì)方法

結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,其基本的思路是:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。具體步驟如下:(1)自頂向下;(2)逐步細(xì)化;(3)模塊化設(shè)計(jì);(4)結(jié)構(gòu)化編碼;以寫(xiě)文章為例?!纠?.22】將1到1000之間的素?cái)?shù)打印出來(lái)。

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

1.常量的概念

在程序運(yùn)行過(guò)程中,其值不能被改變的量稱為常量。

2.常量的分類(lèi)

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

1.分類(lèi)

根據(jù)占用內(nèi)存字節(jié)數(shù)的不同,整型變量又分為4類(lèi):(1)基本整型(類(lèi)型關(guān)鍵字為int)。(2)短整型(類(lèi)型關(guān)鍵字為shortint)。(3)長(zhǎng)整型(類(lèi)型關(guān)鍵字為longint)。(4)無(wú)符號(hào)整型。無(wú)符號(hào)型又分為無(wú)符號(hào)基本整型(unsignedint)、無(wú)符號(hào)短整型(unsignedshort)和無(wú)符號(hào)長(zhǎng)整型(unsignedlong)三種,只能用來(lái)存儲(chǔ)無(wú)符號(hào)整數(shù)。2.整型變量的定義int變量名1,變量名2,….;例如:inta,b;3.占用內(nèi)存字節(jié)數(shù)與值域

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

以補(bǔ)碼形式存放在內(nèi)存中。正數(shù)的補(bǔ)碼是其本身,負(fù)數(shù)的補(bǔ)碼是其絕對(duì)值的二進(jìn)制碼按位取反加1。inta=10;

intb=-10;0000000000001010類(lèi)型字節(jié)數(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.整型變量的溢出當(dāng)賦給變量的值超出了變量所允許的值域范圍所產(chǎn)生的現(xiàn)象叫溢出。例如:inta=32767;intb=a+1;b的值是多少?3.4.2整型常量1.三種表示形式整型常量即整常數(shù),在C語(yǔ)言中可用三種形式表示:(1)十進(jìn)制。例如10、36。(2)八進(jìn)制(以數(shù)字0開(kāi)頭)。例如012。(3)十六進(jìn)制(以數(shù)字0+小寫(xiě)字母x開(kāi)頭)。例如0x36。2.分類(lèi)(1)基本整型。在16位機(jī)中,用2字節(jié)存儲(chǔ),其數(shù)據(jù)范圍與int型變量一樣。(2)長(zhǎng)整型(在數(shù)值后面加“L(l)”)。對(duì)超出基本整型值域的整型常量,可使用長(zhǎng)整型常量表示,其取值范圍可達(dá)-231~(231-1)。例如,123l、315L等。3.類(lèi)型匹配規(guī)則類(lèi)型匹配規(guī)則為:一個(gè)整型常量,可以賦給能容納下其值的整型變量。例如,其值在-215~(215-1)的整型常量,可以賦給int型變量和longint型變量;其值在-231~(231-1)的整型常量,就只能賦給longint型變量。注意:常量無(wú)unsigned型。但一個(gè)非負(fù)整型常量,只要它的值不超過(guò)相應(yīng)變量的值域(即取值范圍),也可以賦給unsigned型變量。3.4實(shí)型數(shù)據(jù)3.5.1實(shí)型變量

存放形式:

一個(gè)是型數(shù)據(jù)一般在內(nèi)存中占四個(gè)字節(jié),按照指數(shù)形式存儲(chǔ)(24位表示小數(shù)部分,8位表示指數(shù)部分)。例如:3.14159在內(nèi)存中的存儲(chǔ)形式如下:分類(lèi):

(1)單精度型。類(lèi)型關(guān)鍵字為float,一般占4字節(jié)(32位)、提供7位有效數(shù)字。

(2)雙精度型。類(lèi)型關(guān)鍵字為double,一般占8?jìng)€(gè)字節(jié)、提供15~16位有效數(shù)字。

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

1.表示形式

實(shí)型常量即實(shí)數(shù),在C語(yǔ)言中又稱浮點(diǎn)數(shù),其值有兩種表達(dá)形式:

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

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

A)5E2.0

B)E-3

C).2E0

D)1.3E

2.關(guān)于類(lèi)型

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

【例3.3】轉(zhuǎn)義字符的使用

main()

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

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

}程序運(yùn)行結(jié)果如下:

OK!

§?字符形式含義ASCII代碼\n換行10\t水平制表9\b退格8\r回車(chē)13\f換頁(yè)12\\反斜杠字符“\”92\’單撇字符39\”雙撇字符34\ddd1到3位8進(jìn)制數(shù)代表的字符\xhh1到2位16進(jìn)制數(shù)代表的字符3.6.2字符變量字符變量的類(lèi)型關(guān)鍵字為char,一般占用1字節(jié)內(nèi)存單元。1.變量值的存儲(chǔ)

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

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

main()

{charch1,ch2;

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

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

}

程序運(yùn)行結(jié)果:

ch1=a,ch2=b

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

[案例3.5]字母的大小寫(xiě)轉(zhuǎn)換

main()

{charch1,ch2;

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

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

/*用字符形式輸出一個(gè)大于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ù)只占一個(gè)字節(jié),故只能存放0~255內(nèi)的整數(shù)。程序運(yùn)行結(jié)果:ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a 思考題:用字符形式輸出一個(gè)大于256的數(shù)值,會(huì)得到什么結(jié)果?3.6.3字符串常量1.字符串常量的概念和字符串長(zhǎng)度字符串常量是用一對(duì)雙引號(hào)括起來(lái)的若干字符序列。字符串中字符的個(gè)數(shù)稱為字符串長(zhǎng)度。長(zhǎng)度為0的字符串(即一個(gè)字符都沒(méi)有的字符串)稱為空串,表示為“”(一對(duì)緊連的雙引號(hào))。例如,“Howdoyoudo.”、“Goodmorning.”等,都是字符串常量,其長(zhǎng)度分別為14和13(空格也是一個(gè)字符)。

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

(2)Isay:"Goodbye!"→"Isay:\"Goodbye!\"“2.字符串的存儲(chǔ)C語(yǔ)言規(guī)定:在存儲(chǔ)字符串常量時(shí),由系統(tǒng)在字符串的末尾自動(dòng)加一個(gè)'\0'作為字符串的結(jié)束標(biāo)志。

如果有一個(gè)字符串為“CHINA”,則它在內(nèi)存中的實(shí)際存儲(chǔ)如下所示:最后一個(gè)字符'\0'是系統(tǒng)自動(dòng)加上的,它占用6字節(jié)而非5字節(jié)內(nèi)存空間。CHINA\0綜上所述,字符常量'A'與字符串常量"A"是兩回事:(1)定界符不同:字符常量使用單引號(hào),而字符串常量使用雙引號(hào);(2)長(zhǎng)度不同:字符常量的長(zhǎng)度固定為1,而字符串常量的長(zhǎng)度,可以是0,也可以是某個(gè)整數(shù);(3)存儲(chǔ)要求不同:字符常量存儲(chǔ)的是字符的ASCII碼值,而字符串常量,除了要存儲(chǔ)有效的字符外,還要存儲(chǔ)一個(gè)結(jié)束標(biāo)志’\0’。請(qǐng)同學(xué)們思考下面的語(yǔ)句是否有錯(cuò)?charC;C=‘A’;C=“A”;3.6變量賦初值

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

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

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

inta;inta=3;a=3;3.7混合運(yùn)算

請(qǐng)思考下面表達(dá)式的特點(diǎn)以及其運(yùn)算結(jié)果?10+’a’+1.5-8765.1234*’b’

在C語(yǔ)言規(guī)定,對(duì)由不同類(lèi)型數(shù)據(jù)組成的表達(dá)式進(jìn)行運(yùn)算時(shí),先將不同類(lèi)型轉(zhuǎn)換成同一類(lèi)型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換時(shí)遵循以下優(yōu)先級(jí)。高doublefloatlongunsigned

低intchar,short

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

1.五種基本算術(shù)運(yùn)算符

+、-(減法/取負(fù))、*、/、%(求余數(shù))(1)關(guān)于除法運(yùn)算/C語(yǔ)言規(guī)定:兩個(gè)整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄。例如,5/2=2,對(duì)于負(fù)數(shù)一般“向零取整”。

(2)關(guān)于求余數(shù)運(yùn)算%要求兩側(cè)的操作數(shù)均為整型數(shù)據(jù),否則出錯(cuò)。

2.表達(dá)式和算術(shù)表達(dá)式(1)表達(dá)式的概念用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(常量、變量和函數(shù)等)連接起來(lái)的、符合C語(yǔ)言語(yǔ)法規(guī)則的式子,稱為表達(dá)式。

單個(gè)常量、變量或函數(shù),可以看作是表達(dá)式的一種特例。將單個(gè)常量、變量或函數(shù)構(gòu)成的表達(dá)式稱為簡(jiǎn)單表達(dá)式,其它表達(dá)式稱之為復(fù)雜表達(dá)式。(2)算術(shù)表達(dá)式的概念表達(dá)式中的運(yùn)算符都是算術(shù)運(yùn)算符。例如,3+6*9、(x+y)/2-1等,都是算術(shù)表達(dá)式。3.運(yùn)算符的優(yōu)先級(jí)與結(jié)合性(1)C語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。優(yōu)先級(jí)規(guī)定了運(yùn)算符的運(yùn)算先后。結(jié)合性規(guī)定了當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算符具有相同的優(yōu)先級(jí)時(shí),該操作數(shù)是先與左邊的運(yùn)算符結(jié)合,還是先與右邊的運(yùn)算符結(jié)合。自左至右的結(jié)合方向,稱為左結(jié)合性。反之,稱為右結(jié)合性。結(jié)合性是C語(yǔ)言的獨(dú)有概念。除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符是右結(jié)合性外,其它運(yùn)算符都是左結(jié)合性。(2)表達(dá)式求值1)按運(yùn)算符的優(yōu)先級(jí)高低次序執(zhí)行。例如,先乘除后加減。2)如果在一個(gè)運(yùn)算對(duì)象(或稱操作數(shù))兩側(cè)的運(yùn)算符的優(yōu)先級(jí)相同,則按C語(yǔ)言規(guī)定的結(jié)合方向(結(jié)合性)進(jìn)行。例如,算術(shù)運(yùn)算符的結(jié)合方向是“自左至右”,即:在執(zhí)行“a–b+c”時(shí),變量b先與減號(hào)結(jié)合,執(zhí)行“a-b”;然后再執(zhí)行加c的運(yùn)算。4.強(qiáng)制類(lèi)型轉(zhuǎn)換可以利用強(qiáng)制類(lèi)型轉(zhuǎn)換將一個(gè)表達(dá)式轉(zhuǎn)換成所需類(lèi)型,其基本格式如下:(類(lèi)型名)表達(dá)式當(dāng)被轉(zhuǎn)換的表達(dá)式是一個(gè)簡(jiǎn)單表達(dá)式時(shí),外面的一對(duì)圓括號(hào)可以缺省。例如,(double)a(等價(jià)于(double)(a))/*將變量a的值轉(zhuǎn)換成double型*/(int)(x+y) /*將x+y的結(jié)果轉(zhuǎn)換成int型*/(float)5/2(等價(jià)于(float)(5)/2)/*將5轉(zhuǎn)換成實(shí)型,再除以2(=2.5)*/(float)(5/2) 注意:強(qiáng)制轉(zhuǎn)換類(lèi)型得到的是一個(gè)所需類(lèi)型的中間量,原表達(dá)式類(lèi)型并不發(fā)生變化。思考:inta=5,b;floatf;f=(float)a;b=a;思考b的值是多少?5.自增(++)、自減(--)運(yùn)算++和--是單目運(yùn)算符,每運(yùn)算一次使變量的值增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)只能用于變量,不能用于常量或表達(dá)式。例如:++1,--1,(a+b)++//都是非法的(3)其結(jié)合方式是“從右至左”。例如:-i--相當(dāng)于-(i--)思考:下列函數(shù)輸出的結(jié)果是什么,i最終的值是多少?

main(){inti=3;intj=(i++)+(i++)+(i++);printf(“%d,%d”,i,j);return0;}[案例3.4]自增、自減運(yùn)算符的用法與運(yùn)算規(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);}程序運(yùn)行結(jié)果:x=6y=++x:x=7,y=7y=x--:x=6,y=7 3.9賦值運(yùn)算與賦值表達(dá)式1.賦值運(yùn)算賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量。賦值運(yùn)算符的一般形式為:變量=賦值表達(dá)式

例如,x=5

y=(float)5/2

如果表達(dá)式值的類(lèi)型與被賦值變量的類(lèi)型不一致,系統(tǒng)自動(dòng)地將表達(dá)式的值轉(zhuǎn)換成被賦值變量的數(shù)據(jù)類(lèi)型,然后再賦值給變量。

思考題:假設(shè)變量num的數(shù)據(jù)類(lèi)型為float,其值為2.5,則執(zhí)行“num=(int)num”后,num的值等于多少?2.復(fù)合賦值運(yùn)算復(fù)合賦值運(yùn)算符是由賦值運(yùn)算符之前再加一個(gè)雙目運(yùn)算符構(gòu)成的。復(fù)合賦值運(yùn)算的一般格式為:變量雙目運(yùn)算符=表達(dá)式

└──┬──┘

復(fù)合賦值運(yùn)算符它等價(jià)于:變量=變量雙目運(yùn)算符(表達(dá)式)。當(dāng)表達(dá)式為簡(jiǎn)單表達(dá)式時(shí),表達(dá)式外的一對(duì)圓括號(hào)才可缺省,否則可能出錯(cuò)。例如,x+=3 /*等價(jià)于x=x+3*/y*=x+6 /*等價(jià)于y=y*(x+6),而不是y=y*x+6*/C語(yǔ)言規(guī)定的10種復(fù)合賦值運(yùn)算符如下:+=,-=,*=,/=,%=; /*復(fù)合算術(shù)運(yùn)算符(5個(gè))*/&=,^=,|=,<<=,>>=; /*復(fù)合位運(yùn)算符(5個(gè))*/3.賦值表達(dá)式由賦值運(yùn)算符或復(fù)合賦值運(yùn)算符,將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的表達(dá)式,稱為賦值表達(dá)式。(1)一般格式

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

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

②必須有一個(gè)分號(hào)作為語(yǔ)句標(biāo)志。例如:inta=4;return1;注意:有分號(hào)作為結(jié)尾的并不一定是語(yǔ)句;例如:inta;//不是語(yǔ)句,只是定義了一個(gè)變量程序應(yīng)該包括數(shù)據(jù)描述(由聲明部分來(lái)實(shí)現(xiàn))和數(shù)據(jù)操作(由語(yǔ)句實(shí)現(xiàn))。4.1.2分類(lèi)(1)控制語(yǔ)句(有9個(gè),見(jiàn)P68)作用:完成控制功能例如:if(x>y)z=x;elsez=y;(2)函數(shù)調(diào)用語(yǔ)句作用:完成函數(shù)調(diào)用例如:a=max(7,8);(3)表達(dá)式語(yǔ)句由任一表達(dá)式加一個(gè)分號(hào)構(gòu)成;例如:i=i+1;//賦值語(yǔ)句

i++;(4)空語(yǔ)句

;(5)復(fù)合語(yǔ)句:由一對(duì){}括起來(lái)的多個(gè)語(yǔ)句構(gòu)成的語(yǔ)句4.3C語(yǔ)言中的輸入輸出

輸入:從輸入設(shè)備(鍵盤(pán)、磁盤(pán)、掃描儀)向計(jì)算機(jī)輸入數(shù)據(jù).

輸出:從計(jì)算機(jī)向外部輸出設(shè)備(顯示器、打印機(jī)、磁盤(pán))輸出數(shù)據(jù)。(1)C語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入輸出是由函數(shù)來(lái)實(shí)現(xiàn)。一般由C語(yǔ)言的庫(kù)函數(shù)提供,有如下幾類(lèi):輸入:getchar(),scanf(),gets()

輸出:putchar(),printf(),puts()(2)使用C語(yǔ)言庫(kù)函數(shù)時(shí),要用“#include”命令將頭文件包含進(jìn)來(lái)。例如:#include<stdio.h>

或#include“stdio.h”

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

main()

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

length=2*pi*radius; /*求圓周長(zhǎng)*/

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

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

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

程序運(yùn)行結(jié)果如下:

radius=1.500000length=9.42,area=7.07

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

例如:%7.2f

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

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

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

必須強(qiáng)調(diào):“格式控制符”中的格式指示符,必須與“輸出列表”中、輸出項(xiàng)的數(shù)據(jù)類(lèi)型一致,否則會(huì)引起輸出錯(cuò)誤。

4.1.2格式指示符

輸出不同類(lèi)型的數(shù)據(jù),要使用不同的類(lèi)型轉(zhuǎn)換字符。

1.%d──以帶符號(hào)的十進(jìn)制整數(shù)形式輸出。

[案例4.2]類(lèi)型轉(zhuǎn)換字符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);} [程序演示]程序運(yùn)行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=58327163 %o──八進(jìn)制、無(wú)符號(hào)形式輸出%x──十六進(jìn)制、無(wú)符號(hào)形式輸出%u──以十進(jìn)制、無(wú)符號(hào)形式輸出%l──輸出長(zhǎng)整型數(shù)所謂無(wú)符號(hào)形式是指,不論正數(shù)還是負(fù)數(shù),系統(tǒng)一律當(dāng)作無(wú)符號(hào)整數(shù)來(lái)輸出。例如,printf("%d,%o,%x\n",-1,-1,-1);輸出結(jié)果:-1,177777,ffff(分析原因:補(bǔ)碼)

2.%f──以小數(shù)形式、按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。[案例4.3]類(lèi)型轉(zhuǎn)換字符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);}

程序運(yùn)行結(jié)果如下:

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

本案例程序的輸出結(jié)果中,數(shù)據(jù)123.456001和3333333333333.333010中的001和010都是無(wú)意義的,因?yàn)樗鼈兂隽擞行?shù)字的范圍。

%e以標(biāo)準(zhǔn)指數(shù)形式輸出整數(shù)部分大于等于1、小于10,小數(shù)點(diǎn)占1位,小數(shù)部分占6位,指數(shù)部分占4位,其中e占一位,指數(shù)符號(hào)占一位,指數(shù)占2位,共計(jì)12位。例如:printf(“%e”,12.0);輸出如下:

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

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

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

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

4.1.3

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

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

[案例4.6]已知圓柱體的底半徑radius=1.5,高h(yuǎn)igh=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);}

程序運(yùn)行結(jié)果如下:

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

在程序中給計(jì)算機(jī)提供數(shù)據(jù),可以用賦值語(yǔ)句,也可以用輸入函數(shù)。在C語(yǔ)言中,可使用scanf()函數(shù),通過(guò)鍵盤(pán)輸入,給計(jì)算機(jī)同時(shí)提供多個(gè)、任意的數(shù)據(jù)。1.scanf()函數(shù)的一般格式scanf("格式字符串",輸入項(xiàng)首地址表);(1)格式字符串。格式字符串可以包含3種類(lèi)型的字符:格式指示符、空白字符(空格、Tab鍵和回車(chē)鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數(shù)的相似,空白字符作為相鄰2

溫馨提示

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

評(píng)論

0/150

提交評(píng)論