版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+語(yǔ)言基礎(chǔ) 2 C+概述 C+的特點(diǎn) 發(fā)展歷史和未來(lái) (CC+(AT ? | ! # % float PI=3.14159; const const int Number_of_Student=100; int Number_of_Student=100; 常變量必須也只能在說(shuō)明時(shí)進(jìn)行初始化;常變量必須也只能在說(shuō)明時(shí)進(jìn)行初始化; 常變量初始化之后,不允許再被賦值;常變量初始化之后,不允許再被賦值; 常變量必須先說(shuō)明后使用;常變量必須先說(shuō)明后使用; 常變量存儲(chǔ)在數(shù)據(jù)區(qū),并且可以按地址訪問(wèn),編譯時(shí)系統(tǒng)對(duì)常變量進(jìn)常變量存儲(chǔ)在數(shù)據(jù)區(qū),并且可以按地址訪問(wèn),編譯時(shí)系統(tǒng)對(duì)常變量進(jìn) 行類型檢查。行類型檢查。
2、 C+C+建議使用常變量,而盡量不使用字面常量。建議使用常變量,而盡量不使用字面常量。 2.3.3 結(jié)束結(jié)束 26 2.1.7 變 量 1 1 變量說(shuō)明變量說(shuō)明 2 2 變量賦初值變量賦初值 變量變量,在程序中是指可以改變值的量;,在程序中是指可以改變值的量; 變量必須用標(biāo)識(shí)符進(jìn)行標(biāo)識(shí),稱為變量必須用標(biāo)識(shí)符進(jìn)行標(biāo)識(shí),稱為變量名變量名; 變量有變量有類型類型之分,如整形變量、字符變量等;之分,如整形變量、字符變量等; 任何變量都必須任何變量都必須先說(shuō)明后使用先說(shuō)明后使用;一是便于編譯程序?yàn)樽兞糠峙淇臻g,二;一是便于編譯程序?yàn)樽兞糠峙淇臻g,二 是便于編譯時(shí)進(jìn)行語(yǔ)法檢查;是便于編譯時(shí)進(jìn)行語(yǔ)法檢查;
3、變量使用的第一步,是給變量賦變量使用的第一步,是給變量賦初始值初始值; ok 27 變量說(shuō)明 在在C+C+中,變量說(shuō)明的一般格式為:中,變量說(shuō)明的一般格式為: 存儲(chǔ)類型存儲(chǔ)類型數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名1 1, ,變量名變量名2, 2, , ,變量名變量名n n; 下面是變量說(shuō)明的幾個(gè)例子:下面是變量說(shuō)明的幾個(gè)例子: int i, j, k; /說(shuō)明三個(gè)整型變量說(shuō)明三個(gè)整型變量i, j, k float x, y, z; /說(shuō)明三個(gè)實(shí)型變量說(shuō)明三個(gè)實(shí)型變量x, y, z char c1, c2; /說(shuō)明兩個(gè)字符型變量說(shuō)明兩個(gè)字符型變量c1, c2 double dx; /說(shuō)明一個(gè)雙精度型變
4、量說(shuō)明一個(gè)雙精度型變量dx 變量 說(shuō)明 結(jié)束 28 變量賦初值 (1 1)變量說(shuō)明時(shí)直接賦初值。變量說(shuō)明時(shí)直接賦初值。 例如:例如:int a=3, b=4, c=5;int a=3, b=4, c=5; float x=3.0float x=3.0; (2 2)用賦值語(yǔ)句賦初值。用賦值語(yǔ)句賦初值。嚴(yán)格的說(shuō),只有前者可稱賦初值嚴(yán)格的說(shuō),只有前者可稱賦初值 例如:例如:float x, e;float x, e; x=3.5; x=3.5; e=2.71828;e=2.71828; 結(jié)束 給變量賦初值稱為初始化,有兩種方法:給變量賦初值稱為初始化,有兩種方法: 29 2.2 基本運(yùn)算符 對(duì)常量和
5、變量進(jìn)行運(yùn)算是通過(guò)運(yùn)算符來(lái)實(shí)現(xiàn)的對(duì)常量和變量進(jìn)行運(yùn)算是通過(guò)運(yùn)算符來(lái)實(shí)現(xiàn)的. 常量和變量通過(guò)運(yùn)算符組常量和變量通過(guò)運(yùn)算符組 成成C+表達(dá)式表達(dá)式,由表達(dá)式再組成由表達(dá)式再組成C+語(yǔ)句語(yǔ)句. 運(yùn)算符是完成對(duì)運(yùn)算符是完成對(duì)常量和變量進(jìn)行運(yùn)算的符號(hào)常量和變量進(jìn)行運(yùn)算的符號(hào). 把參與運(yùn)算的對(duì)象稱為操作把參與運(yùn)算的對(duì)象稱為操作 數(shù)數(shù). 按照要求的操作數(shù)的個(gè)數(shù),運(yùn)算符分為按照要求的操作數(shù)的個(gè)數(shù),運(yùn)算符分為單目單目(一元)運(yùn)算符、(一元)運(yùn)算符、雙目雙目(二元)(二元) 運(yùn)算符和運(yùn)算符和三目三目(三元)運(yùn)算符。(三元)運(yùn)算符。單目運(yùn)算符單目運(yùn)算符只對(duì)一個(gè)操作數(shù)運(yùn)算,如負(fù)號(hào)運(yùn)只對(duì)一個(gè)操作數(shù)運(yùn)算,如負(fù)號(hào)運(yùn) 算符算
6、符“ ”等;等;雙目運(yùn)算符雙目運(yùn)算符要求有兩個(gè)操作數(shù),如乘號(hào)運(yùn)算符要求有兩個(gè)操作數(shù),如乘號(hào)運(yùn)算符“*”等;等;三目三目 運(yùn)算符運(yùn)算符要求有三個(gè)操作數(shù),三元運(yùn)算符只有一個(gè)要求有三個(gè)操作數(shù),三元運(yùn)算符只有一個(gè)“?:”。 30 1.算術(shù)運(yùn)算符 優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符運(yùn)算符名名 稱稱 3+正,單目正,單目 -負(fù),單目負(fù),單目 5*乘,雙目乘,雙目 /除,雙目除,雙目 %求余,雙目求余,雙目 6+加,雙目加,雙目 -減,雙目減,雙目 ok 31 運(yùn)算符重載運(yùn)算符重載: 當(dāng)兩個(gè)操作數(shù)均為整數(shù)時(shí),當(dāng)兩個(gè)操作數(shù)均為整數(shù)時(shí),* *和和/ /重載為重載為整乘整乘和和整除整除,結(jié)果為整數(shù),除法運(yùn)算后,結(jié)果為整數(shù),除法運(yùn)
7、算后 舍去小數(shù)取整。如:舍去小數(shù)取整。如: 5/45/4/結(jié)果為結(jié)果為1 1,整數(shù),整數(shù) 當(dāng)兩個(gè)操作數(shù)均為整數(shù),當(dāng)兩個(gè)操作數(shù)均為整數(shù),%定義為定義為求余求余運(yùn)算,也稱求模運(yùn)算,結(jié)果為兩個(gè)整數(shù)運(yùn)算,也稱求模運(yùn)算,結(jié)果為兩個(gè)整數(shù) 相除后的余數(shù)。如果兩個(gè)整數(shù)中有負(fù)數(shù),則先用兩數(shù)絕對(duì)值求余,最后結(jié)果的相除后的余數(shù)。如果兩個(gè)整數(shù)中有負(fù)數(shù),則先用兩數(shù)絕對(duì)值求余,最后結(jié)果的 符號(hào)與被除數(shù)相同符號(hào)與被除數(shù)相同。例如。例如 6%3/結(jié)果為結(jié)果為0 6%7/結(jié)果為結(jié)果為6 7%6/結(jié)果為結(jié)果為1 32 C+ C+中算術(shù)運(yùn)算應(yīng)注意數(shù)據(jù)溢出問(wèn)題,即運(yùn)算結(jié)果超出對(duì)應(yīng)數(shù)據(jù)類型的表示中算術(shù)運(yùn)算應(yīng)注意數(shù)據(jù)溢出問(wèn)題,即運(yùn)算結(jié)果
8、超出對(duì)應(yīng)數(shù)據(jù)類型的表示 范圍。范圍。編譯程序只會(huì)對(duì)除法運(yùn)算時(shí)除數(shù)為編譯程序只會(huì)對(duì)除法運(yùn)算時(shí)除數(shù)為0 0這種情況提示出錯(cuò),這種情況提示出錯(cuò),而特別容易溢出而特別容易溢出 的整數(shù)的加、減和乘法運(yùn)算產(chǎn)生溢出的情況,系統(tǒng)不作為錯(cuò)誤處理,程序?qū)⒗^續(xù)的整數(shù)的加、減和乘法運(yùn)算產(chǎn)生溢出的情況,系統(tǒng)不作為錯(cuò)誤處理,程序?qū)⒗^續(xù) 執(zhí)行并產(chǎn)生錯(cuò)誤的計(jì)算結(jié)果。因此,程序設(shè)計(jì)者必須在程序中解決檢查并處理整執(zhí)行并產(chǎn)生錯(cuò)誤的計(jì)算結(jié)果。因此,程序設(shè)計(jì)者必須在程序中解決檢查并處理整 數(shù)溢出問(wèn)題。數(shù)溢出問(wèn)題。 只要有一個(gè)操作數(shù)是實(shí)數(shù),兩個(gè)操作數(shù)均轉(zhuǎn)換為只要有一個(gè)操作數(shù)是實(shí)數(shù),兩個(gè)操作數(shù)均轉(zhuǎn)換為doubledouble型,型,*和和
9、/重載為重載為 普通的普通的乘和除乘和除,結(jié),結(jié)果果是實(shí)數(shù)是實(shí)數(shù): 5/4.05/4.0/結(jié)果為結(jié)果為1.251.25,實(shí)數(shù),實(shí)數(shù) 33 2.關(guān)系運(yùn)算符和邏輯運(yùn)算符 ok 關(guān)系運(yùn)算符都是二元運(yùn)算符,包括:關(guān)系運(yùn)算符都是二元運(yùn)算符,包括: (大于)、(大于)、(不小于)、(不小于)、 (?。ㄐ?于)、于)、(不小于)、(不小于)、= = =(等于)和?。ǖ扔冢┖?!= =(不等于)。關(guān)系運(yùn)算符完成兩個(gè)操(不等于)。關(guān)系運(yùn)算符完成兩個(gè)操 作數(shù)大小的比較,結(jié)果為邏輯值作數(shù)大小的比較,結(jié)果為邏輯值true(true(真真) )或或falsefalse(假)(假)。每種。每種可比較大小可比較大小的的 數(shù)據(jù)
10、類型,都數(shù)據(jù)類型,都重載重載了關(guān)系運(yùn)算符。不同類型,自動(dòng)轉(zhuǎn)換為同一類型后,采用對(duì)了關(guān)系運(yùn)算符。不同類型,自動(dòng)轉(zhuǎn)換為同一類型后,采用對(duì) 應(yīng)關(guān)系運(yùn)算符進(jìn)行比較。應(yīng)關(guān)系運(yùn)算符進(jìn)行比較。 在在C+中這兩個(gè)邏輯值與整數(shù)之間有一個(gè)對(duì)應(yīng)關(guān)系,真對(duì)應(yīng)中這兩個(gè)邏輯值與整數(shù)之間有一個(gè)對(duì)應(yīng)關(guān)系,真對(duì)應(yīng)1,假對(duì)應(yīng),假對(duì)應(yīng)0;反;反 過(guò)來(lái),過(guò)來(lái),0對(duì)應(yīng)假,非對(duì)應(yīng)假,非0整數(shù)對(duì)應(yīng)真。整數(shù)對(duì)應(yīng)真。所以關(guān)系運(yùn)算結(jié)果可以作為整數(shù)參與算術(shù)所以關(guān)系運(yùn)算結(jié)果可以作為整數(shù)參與算術(shù) 運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算及其他運(yùn)算。運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算及其他運(yùn)算。 34 2.關(guān)系運(yùn)算符和邏輯運(yùn)算符 設(shè)有定義設(shè)有定義 float a=3.2;int
11、 b=5; ;則則: : 3ab/結(jié)果是結(jié)果是? 根據(jù)右結(jié)合根據(jù)右結(jié)合 原則其運(yùn)算原則其運(yùn)算 過(guò)程如下:過(guò)程如下: a 5b 3.2 3 F, 即即0 F即即0 35 優(yōu)先優(yōu)先 級(jí)級(jí) 運(yùn)算運(yùn)算 符符 名名 稱稱語(yǔ)語(yǔ) 義義 2! 邏輯非邏輯非, 單目單目操作數(shù)的值為真,則結(jié)果為假操作數(shù)的值為真,則結(jié)果為假; 12 13| 邏輯或邏輯或,雙目雙目 兩個(gè)操作數(shù)中有一個(gè)為真,則結(jié)果為兩個(gè)操作數(shù)中有一個(gè)為真,則結(jié)果為 真真; 邏輯運(yùn)算符邏輯運(yùn)算符 36 邏輯運(yùn)算符用來(lái)進(jìn)行邏輯運(yùn)算。其操作數(shù)和運(yùn)算結(jié)果均為邏輯運(yùn)算符用來(lái)進(jìn)行邏輯運(yùn)算。其操作數(shù)和運(yùn)算結(jié)果均為邏輯量邏輯量。運(yùn)算結(jié)。運(yùn)算結(jié) 果同樣可以作為一個(gè)果同
12、樣可以作為一個(gè)整數(shù)整數(shù)參與其他運(yùn)算。參與其他運(yùn)算。 由于由于邏輯值邏輯值和和整數(shù)整數(shù)之間的之間的對(duì)應(yīng)關(guān)系,對(duì)應(yīng)關(guān)系,也允許也允許整型整型和和字符型字符型操作數(shù)進(jìn)行操作數(shù)進(jìn)行邏邏 輯運(yùn)算輯運(yùn)算: 21/左值不能是常數(shù)左值不能是常數(shù) x+y=z;/左值不能是表達(dá)式左值不能是表達(dá)式 const int N=30; N=40;/左值不能是常變量左值不能是常變量 43 5.自增自減運(yùn)算 運(yùn)算分前置和后置兩種,運(yùn)算分前置和后置兩種,前置是先增減后引用前置是先增減后引用,即先對(duì)變量自加或自減,即先對(duì)變量自加或自減, 用新的值參與其他運(yùn)算;用新的值參與其他運(yùn)算;后置則是先引用后增減后置則是先引用后增減,即用變
13、量原來(lái)的值參,即用變量原來(lái)的值參 與其他運(yùn)算,然后再對(duì)變量進(jìn)行自加或自減與其他運(yùn)算,然后再對(duì)變量進(jìn)行自加或自減, ,例如:例如: int i=5, j=5, m, n;int i=5, j=5, m, n; m=i+;m=i+; / /后置;相當(dāng)于后置;相當(dāng)于m=i; i=i+1; m=i; i=i+1; / /結(jié)結(jié) 果:果:i i的值為的值為6 6,m m的值為的值為5 5; ; n=+j;n=+j; / /前置;相當(dāng)于前置;相當(dāng)于j=j+1;n=j;j=j+1;n=j; / /結(jié)果:結(jié)果:j j的值為的值為6 6,n n的值為的值為6 6; ; 意義:使變量當(dāng)前值加意義:使變量當(dāng)前值加1
14、1或減或減1 1,再賦給該變量。再賦給該變量。 要求:操作數(shù)只能是要求:操作數(shù)只能是變量變量,不能是常量或表達(dá)式;,不能是常量或表達(dá)式; ok 44 sizeof( ) 運(yùn)算符 用于計(jì)算一個(gè)操作數(shù)類型或一個(gè)變量的字節(jié)數(shù)。一般格式為:用于計(jì)算一個(gè)操作數(shù)類型或一個(gè)變量的字節(jié)數(shù)。一般格式為:sizeof sizeof ( (數(shù)據(jù)類型數(shù)據(jù)類型) ) 或或 sizeof(sizeof(變量名變量名) ) 例如:例如:sizeof(int) 值為值為4 sizeof( float) 值為值為4 double x; sizeof( x) 值為值為8 結(jié)束結(jié)束 45 2.2.2 表達(dá)式 1 算術(shù)表達(dá)式算術(shù)表達(dá)
15、式 2 關(guān)系表達(dá)式關(guān)系表達(dá)式 3 邏輯表達(dá)式和邏輯表達(dá)式求值的優(yōu)化邏輯表達(dá)式和邏輯表達(dá)式求值的優(yōu)化 4 賦值表達(dá)式與復(fù)合賦值表達(dá)式賦值表達(dá)式與復(fù)合賦值表達(dá)式 5 逗號(hào)表達(dá)式逗號(hào)表達(dá)式 ok 46 1.算術(shù)表達(dá)式 使用時(shí)注意:使用時(shí)注意: 1 1、表達(dá)式中每個(gè)變量都有確定的值時(shí)才能進(jìn)行表達(dá)式求值;、表達(dá)式中每個(gè)變量都有確定的值時(shí)才能進(jìn)行表達(dá)式求值; 2 2、考慮到算術(shù)運(yùn)算溢出和精度問(wèn)題,應(yīng)避免:、考慮到算術(shù)運(yùn)算溢出和精度問(wèn)題,應(yīng)避免: (1 1)兩個(gè)很接近的數(shù)直接相減;)兩個(gè)很接近的數(shù)直接相減; (2 2)除數(shù)是一個(gè)很小的數(shù);)除數(shù)是一個(gè)很小的數(shù); (3 3)整數(shù)的連續(xù)乘運(yùn)算。)整數(shù)的連續(xù)乘運(yùn)算
16、。 ok 由算術(shù)運(yùn)算符連接的表達(dá)式稱為算術(shù)表達(dá)式由算術(shù)運(yùn)算符連接的表達(dá)式稱為算術(shù)表達(dá)式,例如:,例如:a+b*3 ; 47 2.關(guān)系表達(dá)式 例如:例如: abcabc / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再將結(jié)果再將結(jié)果0 0或或1 1與與c c比較大小比較大小* */ / a+bc+da+bc+d / /* *等同于等同于(a+b)(c+d)(a+b)(c+d), 結(jié)果為結(jié)果為0 0或或1 1* */ / y=aby=ab / /* *計(jì)算計(jì)算abab的值的值0 0或或1 1 賦給賦給y y,y y的值為的值為0 0或或1 1* */ / 由關(guān)系
17、運(yùn)算符連接的表達(dá)式。值為由關(guān)系運(yùn)算符連接的表達(dá)式。值為truetrue或或falsefalse。 ok 48 3.邏輯表達(dá)式和邏輯表達(dá)式求值的優(yōu)化 由邏輯運(yùn)算符連接的表達(dá)式稱為邏輯表達(dá)式。邏輯表達(dá)式的值為由邏輯運(yùn)算符連接的表達(dá)式稱為邏輯表達(dá)式。邏輯表達(dá)式的值為truetrue或或falsefalse。 這個(gè)值可對(duì)應(yīng)整數(shù)這個(gè)值可對(duì)應(yīng)整數(shù)1 1或或0 0參與其他運(yùn)算。參與其他運(yùn)算。 ok 已知已知: int a=10, b=20, c=30;float x=1.8, y=2.4; ay|ab-!c 按按優(yōu)先級(jí)優(yōu)先級(jí)與與結(jié)合性結(jié)合性,其,其求值順序求值順序等同于:等同于: (ay)|(a(b-(!c
18、) t1=1 t2=0t4=0 - 求:求: ab | c+ /結(jié)果以及結(jié)果以及a,b,c的值的值 t1=1 整個(gè)表達(dá)式的值為整個(gè)表達(dá)式的值為 1 1 可見(jiàn)可見(jiàn): : 表達(dá)式表達(dá)式 c+ c+ 已不需要計(jì)算所以已不需要計(jì)算所以: : c不變不變 仍為仍為 30 編程人員在使用邏輯運(yùn)算時(shí)應(yīng)當(dāng)加以小心,優(yōu)化計(jì)算固然提高了運(yùn)算效率,但編程人員在使用邏輯運(yùn)算時(shí)應(yīng)當(dāng)加以小心,優(yōu)化計(jì)算固然提高了運(yùn)算效率,但 可能產(chǎn)生副作用??赡墚a(chǎn)生副作用。所謂副作用,就是出乎設(shè)計(jì)人員的意料,得到預(yù)想不到的結(jié)所謂副作用,就是出乎設(shè)計(jì)人員的意料,得到預(yù)想不到的結(jié) 果。果。 50 4.賦值表達(dá)式與復(fù)合賦值表達(dá)式 賦值表達(dá)式的格
19、式為:賦值表達(dá)式的格式為: 變量變量 = = 表達(dá)式表達(dá)式 例如:例如:x=5+6;x=5+6;a=b=c=d+1a=b=c=d+1; ; 在在C+C+中,所有的雙目算術(shù)運(yùn)算符和位運(yùn)算符均可與賦值運(yùn)算符組合成中,所有的雙目算術(shù)運(yùn)算符和位運(yùn)算符均可與賦值運(yùn)算符組合成 一個(gè)單一運(yùn)算符,稱為一個(gè)單一運(yùn)算符,稱為復(fù)合運(yùn)賦值算符復(fù)合運(yùn)賦值算符。包括以下。包括以下1010個(gè):個(gè): + = = * = / = % = = int i1, i2; float x1, x2;char c1, c2; int i1, i2; float x1, x2; 則表達(dá)式則表達(dá)式 x2=c1x2=c1* *i1+c1i1+
20、c1* *x1+c1x1+c1* *c2c2 的求值過(guò)程為:將的求值過(guò)程為:將c1c1轉(zhuǎn)換成整型,完成轉(zhuǎn)換成整型,完成c1c1* *i1i1,結(jié)果表示為,結(jié)果表示為t1t1;將;將c1c1和和x1x1均轉(zhuǎn)換均轉(zhuǎn)換 成雙精度型,完成成雙精度型,完成c1c1* *x1x1,結(jié)果表示為,結(jié)果表示為t2t2;將;將c1c1和和c2c2均轉(zhuǎn)換成整型,完成均轉(zhuǎn)換成整型,完成c1c1* *c2c2, 結(jié)果表示為結(jié)果表示為t3t3;然后;然后t1t1轉(zhuǎn)換成雙精度型,完成轉(zhuǎn)換成雙精度型,完成t1+t2t1+t2,結(jié)果表示為,結(jié)果表示為t4t4;將;將t3t3轉(zhuǎn)換轉(zhuǎn)換 成雙精度型,完成成雙精度型,完成t4+t3t
21、4+t3,最后結(jié)果轉(zhuǎn)為單精度型賦給,最后結(jié)果轉(zhuǎn)為單精度型賦給x2x2。 54 2.賦值類型轉(zhuǎn)換 2.5.3 結(jié)束結(jié)束 系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換規(guī)則:系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換規(guī)則: 1 1、實(shí)型數(shù)賦給整形變量:取整;注意溢出;、實(shí)型數(shù)賦給整形變量:取整;注意溢出; 2 2、整型數(shù)賦給實(shí)型變量:先轉(zhuǎn)換為實(shí)型數(shù);、整型數(shù)賦給實(shí)型變量:先轉(zhuǎn)換為實(shí)型數(shù); 3 3、字符型數(shù)賦給整形變量:、字符型數(shù)賦給整形變量:ASCIIASCII碼為依據(jù);分為兩種情況:符號(hào)位是碼為依據(jù);分為兩種情況:符號(hào)位是 0 0或或1 1時(shí)不同;時(shí)不同; 若符號(hào)位為若符號(hào)位為1,則低位字節(jié)不變,高位字節(jié)全部置,則低位字節(jié)不變,高位字節(jié)全部置
22、1再賦值。再賦值。 4 4、絕對(duì)值較大的數(shù)賦給表達(dá)范圍較小的數(shù)據(jù)類型時(shí),注意溢出;、絕對(duì)值較大的數(shù)賦給表達(dá)范圍較小的數(shù)據(jù)類型時(shí),注意溢出; 55 2.5.4 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 ok 其格式為:其格式為: () () /形式一形式一 或或 ()/形式二形式二 作用:作用:將表達(dá)式強(qiáng)制轉(zhuǎn)換為將表達(dá)式強(qiáng)制轉(zhuǎn)換為類型,類型, 但表達(dá)式的值及其類型不變。但表達(dá)式的值及其類型不變。 任意數(shù)據(jù)類型任意數(shù)據(jù)類型 56 賦值運(yùn)算中,當(dāng)左值與右值類型不一致時(shí),賦值運(yùn)算中,當(dāng)左值與右值類型不一致時(shí), 系統(tǒng)將按照系統(tǒng)將按照左值左值的類型,的類型,自動(dòng)自動(dòng)進(jìn)行強(qiáng)制轉(zhuǎn)換。進(jìn)行強(qiáng)制轉(zhuǎn)換。 例如例如: : 設(shè)有以下定義設(shè)有
23、以下定義 double x=2.3,y; int i=2,j; (1) j2.3 x 2.3 2 2 (1) j=x;(2) y=i; 由由系統(tǒng)系統(tǒng)按按 左值左值j 、y 類型類型自動(dòng)自動(dòng) 完成強(qiáng)制完成強(qiáng)制 轉(zhuǎn)換功能轉(zhuǎn)換功能 (2) y2i 2 2.0 2.0 2.5.4 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 57 第三章: 簡(jiǎn)單輸入/輸出 3.1 cin cin用來(lái)在程序執(zhí)行期間給變量輸入數(shù)據(jù),用來(lái)在程序執(zhí)行期間給變量輸入數(shù)據(jù), 一般格式為:一般格式為: cin變量名變量名1變量名變量名2變量名變量名n; cout實(shí)現(xiàn)將數(shù)據(jù)輸出到顯示器的操作,實(shí)現(xiàn)將數(shù)據(jù)輸出到顯示器的操作, 一般格式為:一般格式為: cout
24、表達(dá)式表達(dá)式1表達(dá)式表達(dá)式2表達(dá)式表達(dá)式n; 同時(shí)必須在程序開(kāi)頭增加一行:同時(shí)必須在程序開(kāi)頭增加一行: # include 58 3.1.1十進(jìn)制數(shù)據(jù)的輸入輸出 請(qǐng)看下例:請(qǐng)看下例: int i, j; float x, y; cout”Input i, j, x, y:”ij;/D cinxy; cout”i=”it”j=”jendl; cout”x+y=”x+yendl; 若輸入:若輸入:10 20 4.5 8.6 則程序輸出:則程序輸出: i=10j=20 x+y=13.1 輸出時(shí)各數(shù)據(jù)間是無(wú)間隔的,因此應(yīng)當(dāng)有意輸出一些間隔符輸出時(shí)各數(shù)據(jù)間是無(wú)間隔的,因此應(yīng)當(dāng)有意輸出一些間隔符 ok 5
25、9 3.1.2 輸入字符數(shù)據(jù)輸入字符數(shù)據(jù) cin 與與cin.get( )的區(qū)別的區(qū)別 (1) cin 例如例如: char c1, c2, c3; cinc1;/A cinc2c3; 程序執(zhí)行到程序執(zhí)行到A行時(shí),等待用戶輸入數(shù)據(jù)。行時(shí),等待用戶輸入數(shù)據(jù)。 若輸入:若輸入:A b c 則則cin分別將字符分別將字符A、b、c賦給變量賦給變量c1、c2、c3。 cin自動(dòng)跳過(guò)輸入的自動(dòng)跳過(guò)輸入的空白空白字符(包括空格,制表,字符(包括空格,制表,backspace和回車等)。和回車等)。 60 (2)cin.get() 例如:例如:char c1, c2, c3, c4; cin.get (c1
26、);/B cin.get (c2); cin.get (c3); 程序執(zhí)行到程序執(zhí)行到B行時(shí),若輸入:行時(shí),若輸入:A b 則執(zhí)行結(jié)果是:字符則執(zhí)行結(jié)果是:字符A、空格、字符、空格、字符b分別賦給變量分別賦給變量c1、c2、c3;輸入;輸入 行中仍保留回車符。行中仍保留回車符。cin.get()把從鍵盤上輸入的所有字符,包括把從鍵盤上輸入的所有字符,包括空白空白字符,字符, 都作為輸入字符賦給字符變量都作為輸入字符賦給字符變量 61 關(guān)于字符的輸出,請(qǐng)看下例,假定字符關(guān)于字符的輸出,請(qǐng)看下例,假定字符c1、c2、c3的值分別為字符的值分別為字符a、 b和和c,執(zhí)行以下語(yǔ)句序列:,執(zhí)行以下語(yǔ)句序
27、列: coutc1tc2n; coutc3endl; coutOkendl; 屏幕上將輸出:屏幕上將輸出: ab c Ok 輸出時(shí)字符之間是無(wú)間隔的,如果想讓字符間有間隔,必須輸出間隔符輸出時(shí)字符之間是無(wú)間隔的,如果想讓字符間有間隔,必須輸出間隔符 62 補(bǔ)充.字符串輸入輸出 向一個(gè)字符數(shù)組中輸入字符串時(shí),用函數(shù)向一個(gè)字符數(shù)組中輸入字符串時(shí),用函數(shù)getline() 。getline() 以用戶按以用戶按 下回車鍵作為結(jié)束,在此之前的所有輸入都放入字符數(shù)組中:下回車鍵作為結(jié)束,在此之前的所有輸入都放入字符數(shù)組中: cin.getline (char ,int) 其中第一個(gè)參數(shù)是已經(jīng)定義的字符數(shù)
28、組名,第二個(gè)參數(shù)是讀入字符的最多其中第一個(gè)參數(shù)是已經(jīng)定義的字符數(shù)組名,第二個(gè)參數(shù)是讀入字符的最多 個(gè)數(shù)個(gè)數(shù)n(包括字符串結(jié)束符(包括字符串結(jié)束符/0)。)。 ok 常用常用cout輸出字符串。雙引號(hào)中的字符串常量照原樣輸出,程序中通常輸出字符串。雙引號(hào)中的字符串常量照原樣輸出,程序中通常 通過(guò)輸出字符串常量來(lái)輸出一些提示信息。字符數(shù)組將輸出串結(jié)束符前通過(guò)輸出字符串常量來(lái)輸出一些提示信息。字符數(shù)組將輸出串結(jié)束符前 所有字符。所有字符。 63 補(bǔ)充:字符串輸入輸出 函數(shù)保證在執(zhí)行時(shí)總會(huì)為字符串的結(jié)束符保留一個(gè)字節(jié)。當(dāng)鍵盤的輸入函數(shù)保證在執(zhí)行時(shí)總會(huì)為字符串的結(jié)束符保留一個(gè)字節(jié)。當(dāng)鍵盤的輸入 字符(字
29、節(jié))數(shù)多于字符(字節(jié))數(shù)多于(n1)時(shí),后面的字符不會(huì)進(jìn)入字符數(shù)組,字符串時(shí),后面的字符不會(huì)進(jìn)入字符數(shù)組,字符串 結(jié)束符自動(dòng)加在字符數(shù)組的最后一個(gè)字節(jié)中。當(dāng)輸入字符數(shù)少于該值時(shí),結(jié)束符自動(dòng)加在字符數(shù)組的最后一個(gè)字節(jié)中。當(dāng)輸入字符數(shù)少于該值時(shí), 字符串結(jié)束符自動(dòng)加在輸入到字符數(shù)組中的最后一個(gè)字符的后面。請(qǐng)看字符串結(jié)束符自動(dòng)加在輸入到字符數(shù)組中的最后一個(gè)字符的后面。請(qǐng)看 下例:下例: char city11; cin.getline(city, 10); / 輸入城市名最多輸入城市名最多5個(gè)中文字個(gè)中文字 cout “城市名:城市名:“ city endl; ok 64 如果要求按八進(jìn)制或十六進(jìn)制
30、輸入輸出,在如果要求按八進(jìn)制或十六進(jìn)制輸入輸出,在cincin或或coutcout中必須指明相應(yīng)的數(shù)中必須指明相應(yīng)的數(shù) 據(jù)形式,據(jù)形式,octoct為八進(jìn)制,為八進(jìn)制,hexhex為十六進(jìn)制,為十六進(jìn)制,decdec為十進(jìn)制。為十進(jìn)制。例如:例如: int i, j, k, l; cout”Input i(oct), j(hex), k(hex), l(dec):” oct i;/輸入為八進(jìn)制數(shù)輸入為八進(jìn)制數(shù) cin hex j;/輸入為十六進(jìn)制數(shù)輸入為十六進(jìn)制數(shù) cin k;/輸入仍為十六進(jìn)制數(shù)輸入仍為十六進(jìn)制數(shù) cin dec l;/輸入為十進(jìn)制數(shù)輸入為十進(jìn)制數(shù) cout” hex:” i
31、=” hex i endl; cout” dec:” j=” dec jt; cout” k=” k endl; cout” oct:” l=” oct l; cout dec endl; /恢復(fù)十進(jìn)制輸出狀態(tài)恢復(fù)十進(jìn)制輸出狀態(tài) ok 輸入輸出的格式控制 (1)各種進(jìn)制數(shù)據(jù)的輸入輸出 65 執(zhí)行時(shí)輸出:執(zhí)行時(shí)輸出: Input i(oct), j(hex), k(hex), l(dec): 此時(shí)從鍵盤輸入:此時(shí)從鍵盤輸入: 032 0 x3f 0 xa0 17 則輸出結(jié)果為:則輸出結(jié)果為: hex:i=1a dec:j=63k=160 oct:l=21 由于已經(jīng)在由于已經(jīng)在cincin中指明數(shù)
32、制,因此從鍵盤輸入時(shí),八進(jìn)制和十六進(jìn)制數(shù)可以中指明數(shù)制,因此從鍵盤輸入時(shí),八進(jìn)制和十六進(jìn)制數(shù)可以 省略其開(kāi)頭的省略其開(kāi)頭的0 0和和0 x0 x標(biāo)志。標(biāo)志。 在在cincin或或coutcout中指明數(shù)制后,該數(shù)制將一直有效,直到重新指明用其他數(shù)制。中指明數(shù)制后,該數(shù)制將一直有效,直到重新指明用其他數(shù)制。 特別注意:特別注意:輸入數(shù)據(jù)的輸入數(shù)據(jù)的格式、個(gè)數(shù)和類型格式、個(gè)數(shù)和類型必須與必須與cincin中的變量一一對(duì)應(yīng),否中的變量一一對(duì)應(yīng),否 則不僅使輸入數(shù)據(jù)錯(cuò)誤,而且影響后面其他數(shù)據(jù)的正確輸入。則不僅使輸入數(shù)據(jù)錯(cuò)誤,而且影響后面其他數(shù)據(jù)的正確輸入。 66 輸入輸出的格式控制 為了使數(shù)據(jù)間隔開(kāi),
33、還可以用為了使數(shù)據(jù)間隔開(kāi),還可以用C+C+提供的函數(shù)提供的函數(shù)setw() setw() 指定輸出數(shù)據(jù)項(xiàng)的寬度。指定輸出數(shù)據(jù)項(xiàng)的寬度。 例如:例如: int i=2, j=3; float x=2.6, y=1.8; cout setw(6) i setw(10) j endl; cout setw(10) i*j endl; cout setw(8) x setw(8) y endl; 輸出結(jié)果為:輸出結(jié)果為: 2 3 6 2.6 1.8 使用使用setw() setw() 必須在程序的開(kāi)始處增加:必須在程序的開(kāi)始處增加: #include #include ok (2)設(shè)置數(shù)據(jù)間隔 67
34、第第4 4章章 流程控制語(yǔ)句流程控制語(yǔ)句 68 4.1 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì) 對(duì)程序的運(yùn)行流程進(jìn)行控制,主要通過(guò)執(zhí)行專門用來(lái)控制流程的語(yǔ)句來(lái)對(duì)程序的運(yùn)行流程進(jìn)行控制,主要通過(guò)執(zhí)行專門用來(lái)控制流程的語(yǔ)句來(lái) 實(shí)現(xiàn)。流程控制語(yǔ)句也稱為過(guò)程化語(yǔ)句。實(shí)現(xiàn)。流程控制語(yǔ)句也稱為過(guò)程化語(yǔ)句。分支語(yǔ)句分支語(yǔ)句是三種基本流程控制語(yǔ)句是三種基本流程控制語(yǔ)句 之一。之一。C+C+提供以下三種分支語(yǔ)句:提供以下三種分支語(yǔ)句: if 語(yǔ)句語(yǔ)句 條件運(yùn)算符條件運(yùn)算符 “ ? : ” swith 語(yǔ)句語(yǔ)句 69 4.2.1 if 語(yǔ)句語(yǔ)句 if語(yǔ)句有兩種基本格式為:語(yǔ)句有兩種基本格式為: 1、if () ; 2、
35、if () else; 70 if 語(yǔ)句語(yǔ)句 【例例41】 輸入一個(gè)年份,判斷是否閏年。輸入一個(gè)年份,判斷是否閏年。 算法分析算法分析:假定年份為假定年份為year, 閏年的條件是閏年的條件是 : year%4=0 cout輸入年份輸入年份:year; if (year%4=0 else cout year不是閏年不是閏年endl; ok 71 分析:讀入三個(gè)數(shù),先求出兩個(gè)數(shù)中較大者,再將該大數(shù)與第三個(gè)數(shù)比較,求出分析:讀入三個(gè)數(shù),先求出兩個(gè)數(shù)中較大者,再將該大數(shù)與第三個(gè)數(shù)比較,求出 最大數(shù)。最大數(shù)。 #include void main() int a, b, c, max; coutabc
36、; couta=atb=bt c=cb) max=a; else max=b; if(cmax) cout “最大數(shù)為最大數(shù)為:”cendl; else cout “最大數(shù)為最大數(shù)為:”maxendl; if 語(yǔ)句語(yǔ)句 【例例42】 從鍵盤上輸入三個(gè)整數(shù),輸出其中的最大數(shù)。從鍵盤上輸入三個(gè)整數(shù),輸出其中的最大數(shù)。 ok 72 if if 語(yǔ)句中,如果內(nèi)嵌語(yǔ)句又是語(yǔ)句中,如果內(nèi)嵌語(yǔ)句又是ifif語(yǔ)句,就構(gòu)成了語(yǔ)句,就構(gòu)成了嵌套嵌套ifif語(yǔ)句語(yǔ)句。if if 語(yǔ)句可實(shí)語(yǔ)句可實(shí) 現(xiàn)現(xiàn)二選一二選一分支,而嵌套分支,而嵌套ifif語(yǔ)句則可以實(shí)現(xiàn)語(yǔ)句則可以實(shí)現(xiàn)多選一多選一的多路分支情況。的多路分支情況。
37、 嵌套有兩種形式,第一種是嵌套在嵌套有兩種形式,第一種是嵌套在elseelse分支中分支中: : if () ; else if () 語(yǔ)句語(yǔ)句2; else if else ; 第二種是嵌套在第二種是嵌套在ifif分支中為:分支中為: if (if () if () if () ) 1; elseelse; 2; if 語(yǔ)句語(yǔ)句 73 /方法方法1:采用:采用if中嵌套形式中嵌套形式 #include void main() int a, b, c, max; coutabc; couta=atb=b tc=cb) if(ac) max=a; /ab且且ac else max=c; /ab且
38、且ac) max=b; /ac else max=c; /a=b且且bc cout最大數(shù)最大數(shù)max=max; if 語(yǔ)句語(yǔ)句 【例例3.3】用嵌套用嵌套if語(yǔ)句完成語(yǔ)句完成【例例3.2】的任務(wù)。的任務(wù)。 ok 74 /方法方法2:采用:采用else中嵌套形式中嵌套形式 #include void main() int a,b,c,max; coutabc; couta=atb=b tc=cb else if(ba else max=c; cout最大數(shù)為最大數(shù)為:max=max; if 語(yǔ)句語(yǔ)句 ok 75 要要特別注意特別注意elseelse和和ifif的配對(duì)關(guān)系的配對(duì)關(guān)系。C+C+規(guī)定了
39、規(guī)定了ifif和和elseelse的的“就近配對(duì)就近配對(duì)”原原 則,即相距最近且還沒(méi)有配對(duì)的一對(duì)則,即相距最近且還沒(méi)有配對(duì)的一對(duì)ifif和和elseelse首先配對(duì)。按上述規(guī)定,第二種首先配對(duì)。按上述規(guī)定,第二種 嵌套形式中的嵌套形式中的elseelse應(yīng)與第二個(gè)應(yīng)與第二個(gè)ifif配對(duì)。如果根據(jù)程序的邏輯需要改變配對(duì)關(guān)系,配對(duì)。如果根據(jù)程序的邏輯需要改變配對(duì)關(guān)系, 則要將屬于同一層的語(yǔ)句放在一對(duì)則要將屬于同一層的語(yǔ)句放在一對(duì)“”中。如第二種嵌套形式中,要讓中。如第二種嵌套形式中,要讓elseelse 和第一個(gè)和第一個(gè)ifif配對(duì),語(yǔ)句必須寫成:配對(duì),語(yǔ)句必須寫成: if (if (表達(dá)式表達(dá)式
40、1) 1) if (if (表達(dá)式表達(dá)式2) 2) 語(yǔ)句語(yǔ)句1 ; 1 ; else else 語(yǔ)句語(yǔ)句2 ;2 ; 第二種嵌套形式較容易產(chǎn)生邏輯錯(cuò)誤,而第一種形式配對(duì)關(guān)系則非常明確,第二種嵌套形式較容易產(chǎn)生邏輯錯(cuò)誤,而第一種形式配對(duì)關(guān)系則非常明確, 因此從程序可讀性角度出發(fā),因此從程序可讀性角度出發(fā),建議盡量使用第一種嵌套形式。建議盡量使用第一種嵌套形式。 76 請(qǐng)看以下兩個(gè)語(yǔ)句:請(qǐng)看以下兩個(gè)語(yǔ)句: /語(yǔ)句語(yǔ)句1 1: if(n%3=0)if(n%3=0) if(n%5=0) coutnif(n%5=0) coutn是是1515的倍數(shù)的倍數(shù)endl;endl; else cout nelse
41、 cout n是是3 3的倍數(shù)但不是的倍數(shù)但不是5 5的倍數(shù)的倍數(shù) endl; endl; /語(yǔ)句語(yǔ)句2 2: if(n%3=0)if(n%3=0) if(n%5=0) coutn if(n%5=0) coutn是是1515的倍數(shù)的倍數(shù)endl;endl; else cout n else cout n 不是不是3 3的倍數(shù)的倍數(shù) 兩個(gè)語(yǔ)句的差別只在于一個(gè)兩個(gè)語(yǔ)句的差別只在于一個(gè)“”,但表達(dá)的邏輯關(guān)系卻完全不同。,但表達(dá)的邏輯關(guān)系卻完全不同。 77 【例例4 44 4】 某商場(chǎng)優(yōu)惠活動(dòng)規(guī)定,某種商品單某商場(chǎng)優(yōu)惠活動(dòng)規(guī)定,某種商品單 價(jià)為價(jià)為8080元,一次購(gòu)買元,一次購(gòu)買5 5件以上件以上(包
42、含 5件)1010件以下件以下(不包含10件)打打9 9 折,一次購(gòu)買折,一次購(gòu)買1010件以上件以上(包含10件) 打打8 8折。設(shè)計(jì)程序根據(jù)客戶的購(gòu)買量計(jì)折。設(shè)計(jì)程序根據(jù)客戶的購(gòu)買量計(jì) 算總價(jià)。算總價(jià)。 if 語(yǔ)句語(yǔ)句 78 算法算法 1、輸入購(gòu)買件數(shù)、輸入購(gòu)買件數(shù)count,設(shè)置單價(jià),設(shè)置單價(jià)price=80(元元) 2、根據(jù)、根據(jù)count值確定折扣值確定折扣discount; 3、實(shí)際售價(jià)、實(shí)際售價(jià)amount=price*count*discount; 4、輸出、輸出amount的值。的值。 算法細(xì)化:算法細(xì)化: 2.1、if(count=5/單價(jià)單價(jià),折扣折扣,總價(jià)總價(jià) int
43、count;/購(gòu)買件數(shù)購(gòu)買件數(shù) cout輸入購(gòu)買件數(shù)輸入購(gòu)買件數(shù):count; if(count5) discount=1; else if(count10) discount=0.9; else discount=0.8; amount=price*count*discount; cout購(gòu)買件數(shù):購(gòu)買件數(shù):countendl; cout單價(jià):?jiǎn)蝺r(jià):pricet折扣:折扣:“ discountendl; cout總價(jià):總價(jià):amount0,方程有兩個(gè)不同實(shí)根;,方程有兩個(gè)不同實(shí)根; 若若delta0)方程有兩個(gè)不同實(shí)根;計(jì)算)方程有兩個(gè)不同實(shí)根;計(jì)算 3.3、 if(delta0)方程無(wú)實(shí)根
44、;計(jì)算)方程無(wú)實(shí)根;計(jì)算 ok 82 #include #include void main() float a,b,c; float delta,x1,x2; const float zero=0.0001;/定義一個(gè)很小的常數(shù)定義一個(gè)很小的常數(shù) cout輸入三個(gè)系數(shù)輸入三個(gè)系數(shù)a(a!=0), b, c:abc; couta=atb=bt c=cendl; delta=b*b-4*a*c; 求一元二次方程的根源程序求一元二次方程的根源程序 83 if(fabs(delta)zero) /絕對(duì)值很小的數(shù)即被認(rèn)為是絕對(duì)值很小的數(shù)即被認(rèn)為是0 cout方程有兩個(gè)相同實(shí)根方程有兩個(gè)相同實(shí)根:; c
45、outx1=x2=-b/(2*a)0) delta=sqrt(delta); x1=(-b+delta)/(2*a); x2=(-b-delta)/(2*a); cout方程有兩個(gè)不同實(shí)根方程有兩個(gè)不同實(shí)根:; coutx1=x1tx2=“ x2endl; else /delta0 cout方程無(wú)實(shí)根方程無(wú)實(shí)根!endl; 請(qǐng)?jiān)谡?qǐng)?jiān)赩C+VC+平臺(tái)上運(yùn)行,輸入不同的系數(shù),使程序所有分支都可以被執(zhí)行一次。平臺(tái)上運(yùn)行,輸入不同的系數(shù),使程序所有分支都可以被執(zhí)行一次。 84 3.1.2 條件運(yùn)算符條件運(yùn)算符“?:” ifif語(yǔ)句在某些情況下可以用條件運(yùn)算符語(yǔ)句在某些情況下可以用條件運(yùn)算符“?:?:”
46、來(lái)簡(jiǎn)化表達(dá)。來(lái)簡(jiǎn)化表達(dá)。“?:?:”是一個(gè)三元是一個(gè)三元 運(yùn)算符,其構(gòu)成的表達(dá)式格式為:運(yùn)算符,其構(gòu)成的表達(dá)式格式為: ? ? : : 3 執(zhí)行邏輯:先計(jì)算表達(dá)式執(zhí)行邏輯:先計(jì)算表達(dá)式1 1,若其值為真(或非,若其值為真(或非0 0),則計(jì)算表達(dá)式),則計(jì)算表達(dá)式2 2(不計(jì)算表(不計(jì)算表 達(dá)式達(dá)式3 3),并將該值作為整個(gè)表達(dá)式的值;反之,即表達(dá)式),并將該值作為整個(gè)表達(dá)式的值;反之,即表達(dá)式1 1的值為假或?yàn)榈闹禐榧倩驗(yàn)? 0,則,則 計(jì)算表達(dá)式計(jì)算表達(dá)式3 3(不計(jì)算表達(dá)式(不計(jì)算表達(dá)式2 2),并將該值作為整個(gè)表達(dá)式的值。),并將該值作為整個(gè)表達(dá)式的值。 例如:例如:int a=6,b
47、=7, min=ab?a:b; int a=6,b=7, min=ab?a:b; /min=6/min=6 min=ab?+a:+b; min=ab?+a:+b; /min=7 a=7 b=7/min=7 a=7 b=7 min=ab?a+:b+; min=ascore; switch (score) case A: case a: coutexcellent; break; case B: case b: coutgood; break; default: coutfair; (5)從形式上看,)從形式上看,switch語(yǔ)句的可讀性比嵌套語(yǔ)句的可讀性比嵌套if語(yǔ)句好,但不是所有多選一的語(yǔ)句好
48、,但不是所有多選一的 問(wèn)題都可由開(kāi)關(guān)語(yǔ)句完成,這是因?yàn)殚_(kāi)關(guān)語(yǔ)句中限定了條件表達(dá)式的取值問(wèn)題都可由開(kāi)關(guān)語(yǔ)句完成,這是因?yàn)殚_(kāi)關(guān)語(yǔ)句中限定了條件表達(dá)式的取值 類型。類型。 ok 88 switch語(yǔ)句例子語(yǔ)句例子 【例例36】 運(yùn)輸公司對(duì)所運(yùn)貨物實(shí)行分段計(jì)費(fèi)。設(shè)運(yùn)輸里程為運(yùn)輸公司對(duì)所運(yùn)貨物實(shí)行分段計(jì)費(fèi)。設(shè)運(yùn)輸里程為s,則運(yùn)費(fèi)打折情,則運(yùn)費(fèi)打折情 況如下:況如下: s250 不打折扣不打折扣 250=s500 2%折扣折扣 500=s10005%折扣折扣 1000=s20008%折扣折扣 2000=s300010%折扣折扣 3000=s15%折扣折扣 設(shè)每公里每噸的基本運(yùn)費(fèi)為設(shè)每公里每噸的基本運(yùn)費(fèi)為p
49、,貨物重量為,貨物重量為w,折扣為,折扣為d,則總運(yùn)費(fèi),則總運(yùn)費(fèi)f為:為: f=p*w*s*(1-d) 設(shè)計(jì)程序,當(dāng)輸入設(shè)計(jì)程序,當(dāng)輸入p、w和和s后,計(jì)算運(yùn)費(fèi)后,計(jì)算運(yùn)費(fèi)f。 89 算法算法 1、輸入每噸運(yùn)費(fèi)、輸入每噸運(yùn)費(fèi)p、貨物重量、貨物重量w、運(yùn)輸里程、運(yùn)輸里程s; 2、根據(jù)運(yùn)輸里程、根據(jù)運(yùn)輸里程s計(jì)算折扣計(jì)算折扣d; 3、計(jì)算總運(yùn)費(fèi)、計(jì)算總運(yùn)費(fèi)f=p*w*s*(1-d); 4、輸出計(jì)算結(jié)果;、輸出計(jì)算結(jié)果; 算法細(xì)化:算法細(xì)化: 2、根據(jù)運(yùn)輸里程、根據(jù)運(yùn)輸里程s計(jì)算折扣計(jì)算折扣d 分析分析:如果用:如果用switch語(yǔ)句,必須使表達(dá)式符合語(yǔ)法要求,分析發(fā)現(xiàn),里程語(yǔ)句,必須使表達(dá)式符合語(yǔ)
50、法要求,分析發(fā)現(xiàn),里程s的的分分 段點(diǎn)均是段點(diǎn)均是250的倍數(shù)的倍數(shù),因此,將里程,因此,將里程s除以除以250,取整數(shù)商,便得到若干整數(shù),取整數(shù)商,便得到若干整數(shù) 值。值。 ok 90 switch(c=s/250) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=0.05; break; case 4: case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11:d=0.1;break; default:d=0.15; s250 不打
51、折扣不打折扣 250=s500 2%折扣折扣 500=s1000 5%折扣折扣 1000=s2000 8%折扣折扣 2000=s3000 10%折扣折扣 3000=s 15%折扣折扣 91 #include #include void main( ) int c,s; float p,w,d,f; cout輸入運(yùn)輸單價(jià)輸入運(yùn)輸單價(jià)p,重量,重量w和里程和里程s:pws; c=s/250; switch(c) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=0.05; break; case 4: case 5: case
52、 6: case 7: d=0.08; break; case 8:case9:case10:case11:d=0.1;break; default:d=0.15; f=p*w*s*(1-d); cout運(yùn)輸單價(jià)為運(yùn)輸單價(jià)為pt重量為重量為wt 里程為里程為sendl; cout折扣為折扣為dendl; cout運(yùn)費(fèi)為運(yùn)費(fèi)為fendl; 請(qǐng)?jiān)谡?qǐng)?jiān)赩C+VC+平臺(tái)上運(yùn)行,輸入不同的里程,使程序所有分支都可以被執(zhí)行一次。平臺(tái)上運(yùn)行,輸入不同的里程,使程序所有分支都可以被執(zhí)行一次。 ok 92 【例例37】 設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)加、減、乘、除運(yùn)算。設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)加、減、乘、除運(yùn)算。 分
53、析:分析:讀入兩個(gè)操作數(shù)和運(yùn)算符,根據(jù)運(yùn)算符完成相應(yīng)運(yùn)算。讀入兩個(gè)操作數(shù)和運(yùn)算符,根據(jù)運(yùn)算符完成相應(yīng)運(yùn)算。 #include void main( ) float num1,num2; char op; cout輸入操作數(shù)輸入操作數(shù)1,運(yùn)算符,操作數(shù),運(yùn)算符,操作數(shù)2:num1opnum2; switch(op) case +: coutnum1opnum2=num1+num2endl; break; case -: coutnum1opnum2=num1-num2endl; break; case *: coutnum1opnum2=num1*num2endl; break; case /:
54、 coutnum1opnum2=num1/num2endl; break; default : coutop是無(wú)效運(yùn)算符是無(wú)效運(yùn)算符!; 常量表達(dá)式采用字符型,上機(jī)運(yùn)行一下。常量表達(dá)式采用字符型,上機(jī)運(yùn)行一下。 93 循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句是三種基本流程控制語(yǔ)句之一。是三種基本流程控制語(yǔ)句之一。C+C+提供以下三種循提供以下三種循 環(huán)語(yǔ)句:環(huán)語(yǔ)句: while語(yǔ)句語(yǔ)句 do-while 語(yǔ)句語(yǔ)句 for語(yǔ)句語(yǔ)句 4.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 94 4.3.1 while 語(yǔ)句語(yǔ)句 whilewhile語(yǔ)句也稱為當(dāng)循環(huán)。語(yǔ)句也稱為當(dāng)循環(huán)。 語(yǔ)句格式為:語(yǔ)句格式為: while (wh
55、ile (表達(dá)式表達(dá)式) ) 循環(huán)體語(yǔ)句;循環(huán)體語(yǔ)句; 圖圖3.1 while語(yǔ)句的執(zhí)行流程圖語(yǔ)句的執(zhí)行流程圖 求表達(dá)式的值求表達(dá)式的值 表達(dá)式值為真表達(dá)式值為真 ? 是是 否否 執(zhí)行循環(huán)體語(yǔ)句執(zhí)行循環(huán)體語(yǔ)句 95 while 語(yǔ)句語(yǔ)句 【例例48】 求求1+2+3+4的值。的值。 ok N N個(gè)連續(xù)整數(shù)相加算法個(gè)連續(xù)整數(shù)相加算法 1 1、設(shè)置變量、設(shè)置變量i i用來(lái)放被加數(shù),變量用來(lái)放被加數(shù),變量sumsum用來(lái)放和值用來(lái)放和值, ,并初始化并初始化; ; 2 2、從第一個(gè)數(shù)開(kāi)始,依次將被加數(shù)賦給、從第一個(gè)數(shù)開(kāi)始,依次將被加數(shù)賦給i i,并進(jìn)行操作,并進(jìn)行操作sumsumsum+i;sum+
56、i; 3 3、輸出、輸出sumsum; 細(xì)化算法細(xì)化算法2 2: while(while(還有被加數(shù)還有被加數(shù)) ) i=i=當(dāng)前被加數(shù);當(dāng)前被加數(shù); sum+=i;sum+=i; i i準(zhǔn)備接受下一個(gè)被加數(shù);準(zhǔn)備接受下一個(gè)被加數(shù); 96 源程序如下:源程序如下: #include void main( ) int i=1,sum=0;/循環(huán)初始條件循環(huán)初始條件 while(i=4) sum+=i; i+;/修改循環(huán)條件修改循環(huán)條件 coutsum=sumendl; 在在VC+VC+平臺(tái)上運(yùn)行,試一試是否正確平臺(tái)上運(yùn)行,試一試是否正確 ok 97 while 語(yǔ)句語(yǔ)句 注意:注意: 在有循環(huán)語(yǔ)
57、句的程序中,通常循環(huán)開(kāi)始前對(duì)循環(huán)條件進(jìn)行初始化;而在循環(huán)在有循環(huán)語(yǔ)句的程序中,通常循環(huán)開(kāi)始前對(duì)循環(huán)條件進(jìn)行初始化;而在循環(huán) 體語(yǔ)句中要包含修改循環(huán)條件的語(yǔ)句,否則循環(huán)將不能終止而陷入死循體語(yǔ)句中要包含修改循環(huán)條件的語(yǔ)句,否則循環(huán)將不能終止而陷入死循 環(huán)。環(huán)。 C+表達(dá)方式靈活,上例中的循環(huán)語(yǔ)句還可以寫成:表達(dá)方式靈活,上例中的循環(huán)語(yǔ)句還可以寫成: while (i=n) sum+=i+; 或者或者 while (sum+=i+, i=n) ;/循環(huán)體為空語(yǔ)句循環(huán)體為空語(yǔ)句 修改程序后在修改程序后在VC+平臺(tái)上運(yùn)行,看是否正確平臺(tái)上運(yùn)行,看是否正確 98 4.3.2 do-while 語(yǔ)句語(yǔ)句
58、do-while語(yǔ)句稱為語(yǔ)句稱為直到循環(huán)直到循環(huán), 格式為:格式為: do 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 while( 表達(dá)式表達(dá)式 ) 否否 是是 表達(dá)式的表達(dá)式的 值為真值為真? 執(zhí)行循環(huán)體語(yǔ)句執(zhí)行循環(huán)體語(yǔ)句 求表達(dá)式的值求表達(dá)式的值 圖圖3.2 do-while語(yǔ)句的執(zhí)行流程圖語(yǔ)句的執(zhí)行流程圖 99 do-while 語(yǔ)句語(yǔ)句 do/whiledo/while語(yǔ)句和語(yǔ)句和whilewhile語(yǔ)句的區(qū)別:語(yǔ)句的區(qū)別: 多數(shù)情況下可以互相替代。多數(shù)情況下可以互相替代。 區(qū)別是區(qū)別是do/whiledo/while語(yǔ)句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足;語(yǔ)句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是
59、否滿足; whilewhile語(yǔ)句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體。語(yǔ)句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體。 100 【例例49】 輸入一段文本,統(tǒng)計(jì)文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之輸入一段文本,統(tǒng)計(jì)文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之 間以空格或跳格或換行符間隔,且文本開(kāi)始沒(méi)有空行。間以空格或跳格或換行符間隔,且文本開(kāi)始沒(méi)有空行。 算法分析算法分析: 1、逐個(gè)讀入文本中的字符,直到讀到一個(gè)輸入結(jié)束符、逐個(gè)讀入文本中的字符,直到讀到一個(gè)輸入結(jié)束符EOF為止。為止。 2、如何算行數(shù)?行結(jié)束標(biāo)志為讀到字符、如何算行數(shù)?行結(jié)束標(biāo)志為讀到字符n; 3、如何算單詞數(shù)?設(shè)一個(gè)變量、如何算單詞
60、數(shù)?設(shè)一個(gè)變量isword,讀到字符時(shí),讀到字符時(shí)isword=1,讀到間隔符時(shí),讀到間隔符時(shí) isword=0;如果讀到一個(gè)間隔符而此時(shí);如果讀到一個(gè)間隔符而此時(shí)isword值為值為1,則說(shuō)明剛讀完一個(gè)單詞;,則說(shuō)明剛讀完一個(gè)單詞; (如果讀到一個(gè)字符而此時(shí)(如果讀到一個(gè)字符而此時(shí)isword值為值為0,則說(shuō)明剛開(kāi)始讀一個(gè)單詞;),則說(shuō)明剛開(kāi)始讀一個(gè)單詞;) 4、如何算字符數(shù)?、如何算字符數(shù)? do-while 語(yǔ)句語(yǔ)句 ok 101 算法 1、設(shè)置變量、設(shè)置變量line、word、ch分別代表行數(shù)、單詞數(shù)、非分隔字符數(shù),并初始分別代表行數(shù)、單詞數(shù)、非分隔字符數(shù),并初始 化化;設(shè)置變量設(shè)置變
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度滑雪場(chǎng)設(shè)施裝修安全防護(hù)合同3篇
- 2025年度早餐店加盟連鎖承包合同范本4篇
- 2025年度智能車間承包環(huán)保技術(shù)改造協(xié)議4篇
- 2024-2028年中國(guó)無(wú)線電接收機(jī)行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 中國(guó)太陽(yáng)能空調(diào)項(xiàng)目可行性研究報(bào)告建議書(shū)
- 2025年度個(gè)人二手房定金買賣合同書(shū)標(biāo)準(zhǔn)化版2篇
- 2025年度個(gè)人借款聯(lián)保合同(附財(cái)產(chǎn)抵押)4篇
- 2025年山東國(guó)新抱犢食品有限公司招聘筆試參考題庫(kù)含答案解析
- 二零二五版苗木種植基地水資源利用與節(jié)水技術(shù)合同4篇
- 2025年寧夏昊陽(yáng)資產(chǎn)管理有限公司招聘筆試參考題庫(kù)含答案解析
- 公司組織架構(gòu)圖(可編輯模版)
- 1汽輪機(jī)跳閘事故演練
- 陜西省銅川市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 禮品(禮金)上交登記臺(tái)賬
- 普通高中英語(yǔ)課程標(biāo)準(zhǔn)詞匯表
- 北師大版七年級(jí)數(shù)學(xué)上冊(cè)教案(全冊(cè)完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- 2023高中物理步步高大一輪 第五章 第1講 萬(wàn)有引力定律及應(yīng)用
- 青少年軟件編程(Scratch)練習(xí)題及答案
- 浙江省公務(wù)員考試面試真題答案及解析精選
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學(xué)
- 全統(tǒng)定額工程量計(jì)算規(guī)則1994
評(píng)論
0/150
提交評(píng)論