第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩93頁(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)介

1、4.1 選擇結(jié)構(gòu)和條件判斷選擇結(jié)構(gòu)和條件判斷4.2 用用if語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.4 邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式4.5 條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符和條件表達(dá)式4.6 選擇結(jié)構(gòu)的嵌套選擇結(jié)構(gòu)的嵌套4.7 用用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)4.8選擇結(jié)構(gòu)程序綜合舉例選擇結(jié)構(gòu)程序綜合舉例/東北大學(xué)計(jì)算機(jī)考研東北大學(xué)計(jì)算機(jī)考研QQ群:群:410243415 計(jì)計(jì)算機(jī)內(nèi)部考研群歡迎您的加入算機(jī)內(nèi)部考研群歡迎您的加入在現(xiàn)實(shí)生活在現(xiàn)實(shí)生活中中,需要進(jìn)行判斷和選擇的,需要進(jìn)行判斷和選擇的情況是很多

2、的情況是很多的u如果你在家,我去拜訪你如果你在家,我去拜訪你u如果考試不及格,要補(bǔ)考如果考試不及格,要補(bǔ)考u如果遇到紅燈,要停車等待如果遇到紅燈,要停車等待u周末我們?nèi)ソ加沃苣┪覀內(nèi)ソ加蝩70歲以上的老年人,入公園免票歲以上的老年人,入公園免票在現(xiàn)實(shí)生活在現(xiàn)實(shí)生活中中,需要進(jìn)行判斷和選擇的,需要進(jìn)行判斷和選擇的情況是很多的情況是很多的處理處理這些這些問(wèn)題,關(guān)鍵在于進(jìn)行條件判斷問(wèn)題,關(guān)鍵在于進(jìn)行條件判斷由于程序處理問(wèn)題的需要,在大多數(shù)程由于程序處理問(wèn)題的需要,在大多數(shù)程序中都會(huì)包含選擇結(jié)構(gòu),需要在進(jìn)行下序中都會(huì)包含選擇結(jié)構(gòu),需要在進(jìn)行下一個(gè)操作之前先進(jìn)行條件判斷一個(gè)操作之前先進(jìn)行條件判斷C語(yǔ)言有

3、兩種選擇語(yǔ)句語(yǔ)言有兩種選擇語(yǔ)句:(1)if語(yǔ)句語(yǔ)句,實(shí)現(xiàn)兩個(gè)分支的選擇結(jié)構(gòu),實(shí)現(xiàn)兩個(gè)分支的選擇結(jié)構(gòu)(2)switch語(yǔ)句語(yǔ)句,實(shí)現(xiàn)多分支的選擇結(jié)構(gòu),實(shí)現(xiàn)多分支的選擇結(jié)構(gòu) 例例4.1 在例在例3.5的基礎(chǔ)上對(duì)程序進(jìn)行改進(jìn)。的基礎(chǔ)上對(duì)程序進(jìn)行改進(jìn)。題目要求題目要求是是求求 方程的根。方程的根。 由鍵盤輸入由鍵盤輸入a,b,c。假設(shè)。假設(shè)a,b,c的值任意,的值任意,并不保證并不保證 。需要在程序中進(jìn)行。需要在程序中進(jìn)行判別,如果判別,如果 ,就計(jì)算并輸出方,就計(jì)算并輸出方程的兩個(gè)實(shí)根,程的兩個(gè)實(shí)根,否則否則就輸出就輸出“方程無(wú)實(shí)根方程無(wú)實(shí)根”的信息。的信息。 02cbxax042 acb042 a

4、cb解題思路:解題思路:輸入輸入a,b,c計(jì)算計(jì)算discdisc0計(jì)算計(jì)算x1,x2輸出無(wú)實(shí)根輸出無(wú)實(shí)根輸出輸出x1,x2真真假假#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf,&a,&b,&c); disc=b*b-4*a*c;計(jì)算計(jì)算b2-4ac,disc的值變?yōu)榈闹底優(yōu)?15 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2

5、=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;-150為真為真#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf,&a,&b,&c); disc=b*b-4*a*c;計(jì)算計(jì)算b2-4ac,disc的值變?yōu)榈闹底優(yōu)? if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q

6、; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;80為假為假p的值變?yōu)榈闹底優(yōu)?1q的值變?yōu)榈闹底優(yōu)?.71x1的值變?yōu)榈闹底優(yōu)?0.29x2的值變?yōu)榈闹底優(yōu)?1.71 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;選擇結(jié)構(gòu)選擇結(jié)構(gòu),用用if語(yǔ)

7、句實(shí)現(xiàn)語(yǔ)句實(shí)現(xiàn)的的 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0;復(fù)合語(yǔ)句復(fù)合語(yǔ)句4.2.1 用用if語(yǔ)句處理選擇結(jié)構(gòu)舉例語(yǔ)句處理選擇結(jié)構(gòu)舉例4.2.2 if語(yǔ)句的一般形式語(yǔ)句的一般形式 例例4.2 輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)數(shù)。大的順序輸出這兩個(gè)數(shù)。解題思路:解題思路:u只需要做一

8、次比較,然后進(jìn)行一次交換即可只需要做一次比較,然后進(jìn)行一次交換即可u用用if語(yǔ)句實(shí)現(xiàn)條件判斷語(yǔ)句實(shí)現(xiàn)條件判斷u關(guān)鍵是怎樣實(shí)現(xiàn)兩個(gè)變量值的互換關(guān)鍵是怎樣實(shí)現(xiàn)兩個(gè)變量值的互換AB互換前互換前AB互換后互換后ABCABCABC#include int main() float a,b,t; scanf(%f,%f,&a,&b); if(ab) t=a; a=b; b=t; printf(%5.2f,%5.2fn,a,b); return 0;將將a和和b的值互換的值互換如果如果ab#include int main() float a,b,t; scanf(%f,%f,&a,

9、&b); if(ab) t=a; a=b; b=t; printf(%5.2f,%5.2fn,a,b); return 0;選擇結(jié)構(gòu),用選擇結(jié)構(gòu),用if語(yǔ)句實(shí)現(xiàn)的語(yǔ)句實(shí)現(xiàn)的 例例4.3 輸入輸入3個(gè)數(shù)個(gè)數(shù)a,b,c,要求按由小,要求按由小到大的順序輸出。到大的順序輸出。解題思路:可以先用偽代碼寫出算法:解題思路:可以先用偽代碼寫出算法:uif ab,a和和b對(duì)換對(duì)換 (a是是a、b中的小者)中的小者)uif ac,a和和c對(duì)換對(duì)換 (a是三者中最小者)是三者中最小者)uif bc,b和和c對(duì)換對(duì)換 (b是三者中次小者是三者中次小者)u順序輸出順序輸出a,b,c#include int

10、main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&c); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); return 0;如果如果 ab,將,將a和和b對(duì)換對(duì)換a是是a、b中的小者中的小者#include int main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&c); if(ab) t=a; a=b; b=t; if(

11、ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); return 0;如果如果 ac,將,將a和和c對(duì)換對(duì)換a是是三者三者中的小者中的小者#include int main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&c); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); return 0;

12、如果如果 bc,將,將b和和c對(duì)換對(duì)換b是是三者三者中的中的次次小者小者 if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 關(guān)系表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式邏輯表達(dá)式數(shù)值表達(dá)式數(shù)值表達(dá)式方括號(hào)內(nèi)的部分為可選的方括號(hào)內(nèi)的部分為可選的 if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 簡(jiǎn)單的語(yǔ)句簡(jiǎn)單的語(yǔ)句復(fù)合語(yǔ)句復(fù)合語(yǔ)句另一個(gè)另一個(gè)if語(yǔ)句語(yǔ)句等等最常用的最常用的3種種if語(yǔ)句語(yǔ)句形式形式:1. if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 (沒(méi)有沒(méi)有else子句子句)2. if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 (有有else子句子句)3. if(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)

13、句 else if(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句 else if(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句 else if(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句 else 語(yǔ)句語(yǔ)句m+1 (在在else部分又嵌套了多層的部分又嵌套了多層的if語(yǔ)句語(yǔ)句)if(number 500) cost = 0.15;else if (number 300) cost = 0.10;else if (number 100) cost = 0.075;else if (number 50) cost = 0.05;else cost=0;if (number 500) cost = 0.15;else if (number 30

14、0) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) cost = 0.05; else cost = 0;等價(jià)于等價(jià)于分號(hào)不能丟分號(hào)不能丟說(shuō)明:說(shuō)明:(1)整個(gè)整個(gè)if語(yǔ)句可寫在多行上,也可寫在一行上語(yǔ)句可寫在多行上,也可寫在一行上 但但都是一個(gè)整體,屬于同一個(gè)語(yǔ)句都是一個(gè)整體,屬于同一個(gè)語(yǔ)句(2)“語(yǔ)句語(yǔ)句1”“語(yǔ)句語(yǔ)句m”是是if中的內(nèi)嵌語(yǔ)句中的內(nèi)嵌語(yǔ)句 內(nèi)嵌語(yǔ)句也可以是一個(gè)內(nèi)嵌語(yǔ)句也可以是一個(gè)if語(yǔ)句語(yǔ)句(3)“語(yǔ)句語(yǔ)句1”“語(yǔ)句語(yǔ)句m”可以是簡(jiǎn)單的語(yǔ)句可以是簡(jiǎn)單的語(yǔ)句,也可以是復(fù)合語(yǔ)句,也可以是復(fù)

15、合語(yǔ)句4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序關(guān)系運(yùn)算符及其優(yōu)先次序4.3.2 關(guān)系表達(dá)式關(guān)系表達(dá)式關(guān)系運(yùn)算符關(guān)系運(yùn)算符:用來(lái)對(duì)兩個(gè)數(shù)值進(jìn)行比較用來(lái)對(duì)兩個(gè)數(shù)值進(jìn)行比較的的比較運(yùn)算符比較運(yùn)算符語(yǔ)言提供種關(guān)系運(yùn)算符:語(yǔ)言提供種關(guān)系運(yùn)算符: (小于小于) = (小于或等于小于或等于) (大于大于) = (大于或等于大于或等于) = (等于等于) != (不等于不等于) 優(yōu)先級(jí)相同優(yōu)先級(jí)相同 (高高)優(yōu)先級(jí)相同優(yōu)先級(jí)相同 (低低)關(guān)系關(guān)系、算術(shù)算術(shù)、賦值運(yùn)算符賦值運(yùn)算符的優(yōu)先級(jí)的優(yōu)先級(jí)算術(shù)運(yùn)算符算術(shù)運(yùn)算符 (高高)賦值運(yùn)算符賦值運(yùn)算符 (低低)關(guān)系運(yùn)算符關(guān)系運(yùn)算符 ca+b 等效于等效于 c(a+b)ab=c

16、 等效于等效于 (ab)=ca=bc 等效于等效于 a=(bc 等效于等效于 a=(bc)關(guān)系表達(dá)式關(guān)系表達(dá)式u用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來(lái)的式子接起來(lái)的式子u關(guān)系表達(dá)式的值是一個(gè)邏輯值,即關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真真”或或“假假”u在在C的邏輯運(yùn)算中,以的邏輯運(yùn)算中,以“”代表代表“真真”,以,以“”代表代表“假假”4.4.1 邏輯運(yùn)算符及其優(yōu)先次序邏輯運(yùn)算符及其優(yōu)先次序4.4.2 邏輯表達(dá)式邏輯表達(dá)式4.4.3 邏輯型變量邏輯型變量3種邏輯運(yùn)算符:種邏輯運(yùn)算符:&(邏輯與邏輯與) |(邏輯或邏輯或) !(邏輯非邏輯非)&am

17、p;和和|是雙目是雙目(元元)運(yùn)算符運(yùn)算符!是一目是一目(元元)運(yùn)算符運(yùn)算符邏輯表達(dá)式邏輯表達(dá)式u用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來(lái)的式子接起來(lái)的式子判斷判斷年齡年齡在在13至至17歲歲之內(nèi)?之內(nèi)?age=13 & age=17判斷判斷年齡小于年齡小于12或大于或大于65?age65ab! a! ba & ba | b 真真真真假假假假真真真真真真假假假假真真假假真真假假真真真真假假假假真真假假假假真真真真假假假假邏輯運(yùn)算的真值表邏輯運(yùn)算的真值表邏輯運(yùn)算符的優(yōu)先次序邏輯運(yùn)算符的優(yōu)先次序! & | (!為三者中最高為三者中最

18、高)與其他運(yùn)算符的優(yōu)先次序與其他運(yùn)算符的優(yōu)先次序 ! (高)(高)算術(shù)運(yùn)算符算術(shù)運(yùn)算符關(guān)系運(yùn)算符關(guān)系運(yùn)算符 & 和和 |賦值運(yùn)算符賦值運(yùn)算符 (低)(低)邏輯表達(dá)式的值應(yīng)該是邏輯量邏輯表達(dá)式的值應(yīng)該是邏輯量“真真”或或“假假”編譯系統(tǒng)在編譯系統(tǒng)在表示表示邏輯運(yùn)算邏輯運(yùn)算結(jié)果結(jié)果時(shí)時(shí)u以數(shù)值以數(shù)值1代表代表“真真”,以,以0代表代表“假假”但在但在判斷判斷一個(gè)量是否為一個(gè)量是否為“真真”時(shí)時(shí)u以以0代表代表“假假”,以非,以非0代表代表“真真”注意:注意:將一個(gè)非零的數(shù)值認(rèn)作為將一個(gè)非零的數(shù)值認(rèn)作為“真真”(1) 若若a=4,則,則!a的值為的值為0(2) 若若a=4,b=5,則,則a

19、& b的值為的值為1(3) a和和b值分別為值分別為4和和5,則則a|b的值為的值為1(4) a和和b值分別為值分別為4和和5,則則!a|b的值為的值為1(5) 4 & 0 | 2的值為的值為1修改后的修改后的邏輯運(yùn)算真值表邏輯運(yùn)算真值表ab! a! ba & ba | b 非非0非非00011非非000101假假非非01001假假01100判別某一年是否閏年,判別某一年是否閏年,用用邏輯表達(dá)式表示邏輯表達(dá)式表示閏年的條件是符合下面二者之一:閏年的條件是符合下面二者之一:能被能被4整除,但不能被整除,但不能被100整除,如整除,如2008能被能被400整除,如整除,如2

20、000u(year % 4 = 0 & year 100 !=0) | year % 400 = 0u如果表達(dá)式值為如果表達(dá)式值為1,則閏年;否則為非閏年,則閏年;否則為非閏年這是這是C99所增加的一種數(shù)據(jù)類型所增加的一種數(shù)據(jù)類型可以將關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果存到可以將關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果存到一個(gè)邏輯型變量中,以便于分析和運(yùn)算一個(gè)邏輯型變量中,以便于分析和運(yùn)算有一種有一種if語(yǔ)句,當(dāng)被判別的表達(dá)式的值語(yǔ)句,當(dāng)被判別的表達(dá)式的值為為“真真”或或“假假” 時(shí),都執(zhí)行一個(gè)賦值時(shí),都執(zhí)行一個(gè)賦值語(yǔ)句且向同一個(gè)變量賦值語(yǔ)句且向同一個(gè)變量賦值如:如:if (ab) max=a; else ma

21、x=b;max = (a b) ? a : b;條件運(yùn)算符條件運(yùn)算符有一種有一種if語(yǔ)句,當(dāng)被判別的表達(dá)式的值語(yǔ)句,當(dāng)被判別的表達(dá)式的值為為“真真”或或“假假” 時(shí),都執(zhí)行一個(gè)賦值時(shí),都執(zhí)行一個(gè)賦值語(yǔ)句且向同一個(gè)變量賦值語(yǔ)句且向同一個(gè)變量賦值如:如:if (ab) max=a; else max=b;max = (a b) ? a : b;條件條件表達(dá)式表達(dá)式條件表達(dá)式的一般形式為條件表達(dá)式的一般形式為表達(dá)式表達(dá)式?表達(dá)式表達(dá)式: 表達(dá)式表達(dá)式條件運(yùn)算符的執(zhí)行順序:條件運(yùn)算符的執(zhí)行順序:u求解表達(dá)式求解表達(dá)式1u若為非若為非0(真)則求解表達(dá)式(真)則求解表達(dá)式2,此時(shí)表達(dá),此時(shí)表達(dá)式式2的值

22、就作為整個(gè)條件表達(dá)式的值的值就作為整個(gè)條件表達(dá)式的值u若表達(dá)式若表達(dá)式1的值為的值為0(假),則求解表達(dá)式(假),則求解表達(dá)式3,表達(dá)式,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值的值就是整個(gè)條件表達(dá)式的值條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符的結(jié)合方向?yàn)闂l件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷笞杂抑磷蟆币韵聻楹戏ǖ氖褂梅椒ǎ阂韵聻楹戏ǖ氖褂梅椒ǎ簎ab ? (max=a):(max=b);uab ? printf(“%d”,a): printf(“%d”,b); 例例4.4 輸入一個(gè)字符,判別它是否大寫輸入一個(gè)字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;字母,如果是,將它轉(zhuǎn)

23、換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。的字符。解題思路:用條件表達(dá)式來(lái)處理,當(dāng)字解題思路:用條件表達(dá)式來(lái)處理,當(dāng)字母是大寫時(shí),轉(zhuǎn)換成小寫字母,否則不母是大寫時(shí),轉(zhuǎn)換成小寫字母,否則不轉(zhuǎn)換轉(zhuǎn)換#include int main() char ch; scanf(%c,&ch); ch=(ch=A & ch=Z)?(ch+32):ch; printf(%cn,ch); return 0;在在if語(yǔ)句中又包含一個(gè)或多個(gè)語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱為語(yǔ)句稱為if語(yǔ)句的嵌套語(yǔ)句的嵌套一般形式:一般形式:if( ) if( ) 語(yǔ)句語(yǔ)

24、句1 else 語(yǔ)句語(yǔ)句2 else if( ) 語(yǔ)句語(yǔ)句3 else 語(yǔ)句語(yǔ)句4 內(nèi)嵌內(nèi)嵌ifelse總是與它上面最總是與它上面最近的未配對(duì)的近的未配對(duì)的if配對(duì)配對(duì)在在if語(yǔ)句中又包含一個(gè)或多個(gè)語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱為語(yǔ)句稱為if語(yǔ)句的嵌套語(yǔ)句的嵌套if () if () 語(yǔ)句語(yǔ)句1 else語(yǔ)句語(yǔ)句2內(nèi)嵌內(nèi)嵌if 限定了內(nèi)嵌限定了內(nèi)嵌if范圍范圍 例例4.5有一函數(shù)有一函數(shù): 編一程序編一程序,輸入一個(gè)輸入一個(gè)x值值,要求輸出相應(yīng)要求輸出相應(yīng)的的y值。值。)0(1)0(0)0(1xxxy解題思路:解題思路:u用用if語(yǔ)句檢查語(yǔ)句檢查x的值,根據(jù)的值,根據(jù)x的值決定賦予的值決定賦

25、予y的值的值u由于由于y的可能值不是兩個(gè)而是三個(gè),因此不的可能值不是兩個(gè)而是三個(gè),因此不可能只用一個(gè)簡(jiǎn)單的可能只用一個(gè)簡(jiǎn)單的(無(wú)內(nèi)嵌無(wú)內(nèi)嵌if)的的if語(yǔ)句來(lái)語(yǔ)句來(lái)實(shí)現(xiàn)實(shí)現(xiàn)解題思路:解題思路:方法方法1(1) 先后用先后用3個(gè)獨(dú)立的個(gè)獨(dú)立的if語(yǔ)句處理:語(yǔ)句處理:輸入輸入x若若 x 0, 則則y = 1輸出輸出x和和yscanf(%d,&x);if(x0) y = 1;printf(x=%d,y=%dn,x,y);解題思路:解題思路:方法方法2(2) 用一個(gè)嵌套的用一個(gè)嵌套的if語(yǔ)句處理:語(yǔ)句處理:輸入輸入x若若x 0, 則則y = -1 否則否則 若若 x = 0, 則則y = 0

26、否則否則 y = 1輸出輸出x和和yscanf(%d,&x);if(x0) y=-1;else if(x=0) y=0; else y=1;printf(x=%d,y=%dn,x,y);解題思路:解題思路:方法方法2(2) 用一個(gè)嵌套的用一個(gè)嵌套的if語(yǔ)句處理:語(yǔ)句處理:輸入輸入x若若x 0, 則則y = -1 否則否則 若若 x = 0, 則則y = 0 否則否則 y = 1輸出輸出x和和yscanf(%d,&x);if(x=0) if (x0) y=1; else y=0;else y=-1;printf(x=%d,y=%dn,x,y);提倡提倡內(nèi)嵌內(nèi)嵌if放在放在else

27、中中switch語(yǔ)句用來(lái)實(shí)現(xiàn)多分支選擇結(jié)構(gòu)語(yǔ)句用來(lái)實(shí)現(xiàn)多分支選擇結(jié)構(gòu)u學(xué)生成績(jī)分類學(xué)生成績(jī)分類85分以上為分以上為A等等7084分為分為B等等6069分為分為C等等u人口統(tǒng)計(jì)分類人口統(tǒng)計(jì)分類 按年齡分為老、中、青、少、兒童按年齡分為老、中、青、少、兒童 例例4.6 要求按照考試成績(jī)的等級(jí)輸出百要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,分制分?jǐn)?shù)段,A等為等為85分以上,分以上,B等為等為7084分,分,C等為等為6069分分 ,D等為等為 60分以下分以下 。成績(jī)的等級(jí)由鍵盤輸入。成績(jī)的等級(jí)由鍵盤輸入。解題思路:解題思路:u判斷出判斷出這是一個(gè)多分支選擇問(wèn)題這是一個(gè)多分支選擇問(wèn)題u根據(jù)百分制分?jǐn)?shù)將

28、學(xué)生成績(jī)分為根據(jù)百分制分?jǐn)?shù)將學(xué)生成績(jī)分為4個(gè)等級(jí)個(gè)等級(jí)u如果用如果用if語(yǔ)句語(yǔ)句,至少要用至少要用3層嵌套的層嵌套的if,進(jìn)行,進(jìn)行3次檢查判斷次檢查判斷u用用switch語(yǔ)句進(jìn)行一次檢查即可得到結(jié)果語(yǔ)句進(jìn)行一次檢查即可得到結(jié)果#include int main() char grade; scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: p

29、rintf(60n);break; default: printf(enter data error!n); return 0; 值為值為A#include int main() char grade; scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data

30、 error!n); return 0; 不能少不能少#include int main() char grade; scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); return 0; 值為值為C#include int main

31、() char grade; scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); return 0; 值為值為F#include int main() char grade; scanf(%c,&grade); printf(

32、Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); return 0; 此行位置有問(wèn)題,此行位置有問(wèn)題,應(yīng)如何修改?應(yīng)如何修改?switch語(yǔ)句的作用是根據(jù)表達(dá)式的值,語(yǔ)句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語(yǔ)句使流程跳轉(zhuǎn)到不同的語(yǔ)句switch語(yǔ)句的一般形式語(yǔ)句的一般形式:switc

33、h(表達(dá)式)(表達(dá)式) case 常量常量1 :語(yǔ)句:語(yǔ)句1 case 常量常量2 :語(yǔ)句:語(yǔ)句2 case 常量常量n :語(yǔ)句:語(yǔ)句n default : 語(yǔ)句語(yǔ)句n+1整數(shù)類型整數(shù)類型(包括字符型包括字符型)switch語(yǔ)句的作用是根據(jù)表達(dá)式的值,語(yǔ)句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語(yǔ)句使流程跳轉(zhuǎn)到不同的語(yǔ)句switch語(yǔ)句的一般形式語(yǔ)句的一般形式:switch(表達(dá)式)(表達(dá)式) case 常量常量1 :語(yǔ)句:語(yǔ)句1 case 常量常量2 :語(yǔ)句:語(yǔ)句2 case 常量常量n :語(yǔ)句:語(yǔ)句n default : 語(yǔ)句語(yǔ)句n+1不能相同不能相同 scanf(%c,&gra

34、de); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n)

35、;break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); scanf(%c,&grade); printf(Your score:); switch(grade) case A: case B: case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); 例例4.7 編寫程序,用編寫程序,用switch語(yǔ)句處理菜語(yǔ)句處理

36、菜單命令。單命令。解題思路:在許多應(yīng)用程序中,用菜單對(duì)解題思路:在許多應(yīng)用程序中,用菜單對(duì)流程進(jìn)行控制,例如從鍵盤輸入一個(gè)流程進(jìn)行控制,例如從鍵盤輸入一個(gè)A或或a字符,就會(huì)執(zhí)行字符,就會(huì)執(zhí)行A操作,輸入一個(gè)操作,輸入一個(gè)B或或b字符,就會(huì)執(zhí)行字符,就會(huì)執(zhí)行B操作,等等。操作,等等。#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B

37、: action2(a,b);break; default: putchar(a); return 0;輸入輸入a或或A調(diào)用調(diào)用action1函數(shù),執(zhí)行函數(shù),執(zhí)行A操作操作void action1(int x,int y) printf(x+y=%dn,x+y);#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2

38、(a,b);break; default: putchar(a); return 0;輸入輸入b或或B調(diào)用調(diào)用action2函數(shù),執(zhí)行函數(shù),執(zhí)行B操作操作void action2(int x,int y) printf(x*y=%dn,x*y);#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2(a,b);bre

39、ak; default: putchar(a); return 0;輸入其他字符輸入其他字符發(fā)出警告發(fā)出警告這是一個(gè)非常簡(jiǎn)單的示意程序這是一個(gè)非常簡(jiǎn)單的示意程序?qū)嶋H應(yīng)用中,所指定的操作可能比較復(fù)雜:實(shí)際應(yīng)用中,所指定的操作可能比較復(fù)雜: uA:輸入全班學(xué)生各門課的成績(jī):輸入全班學(xué)生各門課的成績(jī)uB:計(jì)算并輸出每個(gè)學(xué)生各門課的平均成績(jī):計(jì)算并輸出每個(gè)學(xué)生各門課的平均成績(jī)uC:計(jì)算并輸出各門課的全班平均成績(jī):計(jì)算并輸出各門課的全班平均成績(jī)uD:對(duì)全班學(xué)生的平均成績(jī)由高到低排序并輸出:對(duì)全班學(xué)生的平均成績(jī)由高到低排序并輸出可以按以上思路編寫程序,把各可以按以上思路編寫程序,把各action函數(shù)函數(shù)設(shè)

40、計(jì)成不同的功能以實(shí)現(xiàn)各要求設(shè)計(jì)成不同的功能以實(shí)現(xiàn)各要求例例4.8 寫一程序,判斷某一年是否閏年。寫一程序,判斷某一年是否閏年。解題思路:在前面已介紹過(guò)判別閏年的方解題思路:在前面已介紹過(guò)判別閏年的方法法本例本例用不同的方法編寫程序用不同的方法編寫程序用變量用變量leap代表是否閏年的信息。若閏代表是否閏年的信息。若閏年,令年,令leap=1;非閏年,;非閏年,leap=0。最。最后判斷后判斷l(xiāng)eap是否為(真),若是,則是否為(真),若是,則輸出輸出“閏年閏年”信息信息參見(jiàn)教材參見(jiàn)教材圖圖4.13#include int main()int year,leap; printf(enter ye

41、ar:); scanf(%d,&year); if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(%d is ,year); else printf(%d is not ,year); printf(a leap year.n); return 0;標(biāo)志變量標(biāo)志變量與與if (leap!=0)含義相同含義相同#include int main()int year,leap; printf(enter year:); scan

42、f(%d,&year); if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(%d is ,year); else printf(%d is not ,year); printf(a leap year.n); return 0;采取鋸齒形式采取鋸齒形式#include int main()int year,leap; printf(enter year:); scanf(%d,&year); if (year%4=

43、0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(%d is ,year); else printf(%d is not ,year); printf(a leap year.n); return 0;if(year%4!=0) leap=0;else if (year%100!=0) leap=1;else if(year%400!=0) leap=0;else leap=1;#include int main()int year,leap; pri

44、ntf(enter year:); scanf(%d,&year); if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(%d is ,year); else printf(%d is not ,year); printf(a leap year.n); return 0;if(year%4=0 & year%100!=0) | (year%400=0) leap=1;else leap=0; 例例4.9 求求 方程

45、的解。方程的解。02cbxax解題思路:解題思路:處理以下各情況處理以下各情況 ,不是二次方程,不是二次方程 ,有兩個(gè)相等實(shí)根,有兩個(gè)相等實(shí)根 ,有兩個(gè)不等實(shí)根。,有兩個(gè)不等實(shí)根。 ,有兩個(gè)共軛復(fù)根。,有兩個(gè)共軛復(fù)根。 應(yīng)當(dāng)以應(yīng)當(dāng)以p+qi和和p-qi的形式輸出復(fù)根的形式輸出復(fù)根 其中,其中,p=-b/2a,q=( )/2a參見(jiàn)教材參見(jiàn)教材圖圖4.14042 acb042 acb042 acbacb42#include #include int main() double a,b,c,disc,x1,x2,realpart, imagpart; scanf(%lf,%lf,%lf,&a,&b,&c); printf(The equation ); if(fabs(a)=1e-6) printf(is not a quadraticn);實(shí)型不能用實(shí)型不能用if (a=0) else disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(

溫馨提示

  • 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)論