第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è),還剩101頁(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、廈門大學(xué)自動(dòng)化系 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é)自動(dòng)化系 在現(xiàn)實(shí)生活在現(xiàn)實(shí)生活中中,需要進(jìn)行判斷和選擇的,需要進(jìn)行判斷和選擇的 情況是很多的情況是很多的 u如果你在家,我去拜訪你如果你在家,我去拜訪你 u如果考

2、試不及格,要補(bǔ)考如果考試不及格,要補(bǔ)考 u如果遇到紅燈,要停車等待如果遇到紅燈,要停車等待 u周末我們?nèi)ソ加沃苣┪覀內(nèi)ソ加?u70歲以上的老年人,入公園免票歲以上的老年人,入公園免票 廈門大學(xué)自動(dòng)化系 在現(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)行條件判斷 廈門大學(xué)自動(dòng)化系 c語(yǔ)言有兩種選擇語(yǔ)句

3、語(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) 廈門大學(xué)自動(dòng)化系 例例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í)根” 的信息。的信息。 0 2 cbxax

4、 04 2 acb 04 2 acb 廈門大學(xué)自動(dòng)化系 解題思路:解題思路: 輸入輸入a,b,c 計(jì)算計(jì)算disc disc0 計(jì)算計(jì)算x1,x2 輸出無(wú)實(shí)根輸出無(wú)實(shí)根 輸出輸出x1,x2 真真 假假 廈門大學(xué)自動(dòng)化系 #include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, disc=b*b-4*a*c; 計(jì)算計(jì)算b2-4ac,disc的值變?yōu)榈闹底優(yōu)?15 廈門大學(xué)自動(dòng)化系 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a);

5、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; -150為真為真 廈門大學(xué)自動(dòng)化系 #include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, disc=b*b-4*a*c; 計(jì)算計(jì)算b2-4ac,disc的值變?yōu)榈闹底優(yōu)? 廈門大學(xué)自動(dòng)化系 if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a

6、); 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; 80為假為假 p的值變?yōu)榈闹底優(yōu)?1 q的值變?yōu)榈闹底優(yōu)?.71 x1的值變?yōu)榈闹底優(yōu)?0.29 x2的值變?yōu)榈闹底優(yōu)?1.71 廈門大學(xué)自動(dòng)化系 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.2

7、fn x2=%7.2fn”,x1,x2); return 0; 選擇結(jié)構(gòu)選擇結(jié)構(gòu),用用if語(yǔ)句實(shí)現(xiàn)語(yǔ)句實(shí)現(xiàn)的的 廈門大學(xué)自動(dòng)化系 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ǔ)句 廈門大學(xué)自動(dòng)化系 4.2.1 用用if語(yǔ)句處理選擇結(jié)構(gòu)舉例語(yǔ)句處理選擇結(jié)構(gòu)舉例 4.2.2 if語(yǔ)句的一般形式語(yǔ)句的一般形式 廈門大學(xué)自

8、動(dòng)化系 例例4.2 輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到 大的順序輸出這兩個(gè)數(shù)。大的順序輸出這兩個(gè)數(shù)。 廈門大學(xué)自動(dòng)化系 解題思路:解題思路: u只需要做一次比較,然后進(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互換后互換后 廈門大學(xué)自動(dòng)化系 ab c 廈門大學(xué)自動(dòng)化系 ab c 廈門大學(xué)自動(dòng)化系 ab c 廈門大學(xué)自動(dòng)化系 #include int main() float a,b,t; scanf(%f,%f, if(ab) t=

9、a; a=b; b=t; printf(%5.2f,%5.2fn,a,b); return 0; 將將a和和b的值互換的值互換 如果如果ab 廈門大學(xué)自動(dòng)化系 #include int main() float a,b,t; scanf(%f,%f, 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)的 廈門大學(xué)自動(dòng)化系 例例4.3 輸入輸入3個(gè)數(shù)個(gè)數(shù)a,b,c,要求按由小,要求按由小 到大的順序輸出。到大的順序輸出。 廈門大學(xué)自動(dòng)化系 解題思路:可以先用偽代碼寫出算法:解題思路:可

10、以先用偽代碼寫出算法: 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 廈門大學(xué)自動(dòng)化系 #include int main() float a,b,c,t; scanf(%f,%f,%f, 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;

11、如果如果 ab,將,將a和和b對(duì)換對(duì)換 a是是a、b中的小者中的小者 廈門大學(xué)自動(dòng)化系 #include int main() float a,b,c,t; scanf(%f,%f,%f, 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; 如果如果 ac,將,將a和和c對(duì)換對(duì)換 a是是三者三者中的小者中的小者 廈門大學(xué)自動(dòng)化系 #include int main() float a,b,c,t; scanf(%f,%f,%f,

12、 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; 如果如果 bc,將,將b和和c對(duì)換對(duì)換 b是是三者三者中的中的次次小者小者 廈門大學(xué)自動(dòng)化系 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)的部分為可選的 廈門大學(xué)自動(dòng)化系 if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 簡(jiǎn)單的語(yǔ)句簡(jiǎn)單的語(yǔ)句 復(fù)合語(yǔ)句復(fù)合語(yǔ)句

13、 另一個(gè)另一個(gè)if語(yǔ)句語(yǔ)句等等 廈門大學(xué)自動(dòng)化系 最常用的最常用的3種種if語(yǔ)句語(yǔ)句形式形式: 1. if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 (沒有沒有else子句子句) 2. if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 (有有else子句子句) 3. if(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句 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ǔ)句) 廈門大學(xué)自動(dòng)化系 if(number 500) cost = 0.15

14、; 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 300) 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)不能丟 廈門大學(xué)自動(dòng)化系 說(shuō)明:說(shuō)明: (1)

15、整個(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ù)合語(yǔ)句 廈門大學(xué)自動(dòng)化系 4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序關(guān)系運(yùn)算符及其優(yōu)先次序 4.3.2 關(guān)系表達(dá)式關(guān)系表達(dá)式 廈門大學(xué)自動(dòng)化系 關(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)

16、系運(yùn)算符:語(yǔ)言提供種關(guān)系運(yùn)算符: (小于小于) = (小于或等于小于或等于) (大于大于) = (大于或等于大于或等于) = (等于等于) != (不等于不等于) 優(yōu)先級(jí)相同優(yōu)先級(jí)相同 (高高) 優(yōu)先級(jí)相同優(yōu)先級(jí)相同 (低低) 廈門大學(xué)自動(dòng)化系 關(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)算符 廈門大學(xué)自動(dòng)化系 ca+b 等效于等效于 c(a+b) ab=c 等效于等效于 (ab)=c a=bc 等效于等效于 a=(bc 等效于等效于 a=(bc) 廈門大學(xué)自動(dòng)化系 關(guān)系表達(dá)式關(guān)系表達(dá)式 u用關(guān)系運(yùn)算

17、符將兩個(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)算中,以“”代表代表“真真” ,以,以“”代表代表“假假” 廈門大學(xué)自動(dòng)化系 4.4.1 邏輯運(yùn)算符及其優(yōu)先次序邏輯運(yùn)算符及其優(yōu)先次序 4.4.2 邏輯表達(dá)式邏輯表達(dá)式 4.4.3 邏輯型變量邏輯型變量 廈門大學(xué)自動(dòng)化系 3種邏輯運(yùn)算符:種邏輯運(yùn)算符: else max=b; max = (a b) ? a : b; 條件運(yùn)算符條件運(yùn)算符 廈門大學(xué)自動(dòng)化系 有一種有一種if語(yǔ)句,當(dāng)被判別的

18、表達(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á)式 廈門大學(xué)自動(dòng)化系 條件表達(dá)式的一般形式為條件表達(dá)式的一般形式為 表達(dá)式表達(dá)式?表達(dá)式表達(dá)式: 表達(dá)式表達(dá)式 廈門大學(xué)自動(dòng)化系 條件運(yùn)算符的執(zhí)行順序:條件運(yùn)算符的執(zhí)行順序: u求解表達(dá)式求解表達(dá)式1 u若為非若為非0(真)則求解表達(dá)式(真)則求解表達(dá)式2,此時(shí)表達(dá),此時(shí)表達(dá) 式式2的值就作為整個(gè)條件表達(dá)式的值的值就作為整個(gè)條件

19、表達(dá)式的值 u若表達(dá)式若表達(dá)式1的值為的值為0(假),則求解表達(dá)式(假),則求解表達(dá)式 3,表達(dá)式,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值的值就是整個(gè)條件表達(dá)式的值 廈門大學(xué)自動(dòng)化系 條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符優(yōu)先于賦值運(yùn)算符 條件運(yùn)算符的結(jié)合方向?yàn)闂l件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷笞杂抑磷蟆?以下為合法的使用方法:以下為合法的使用方法: uab ? (max=a):(max=b); uab ? printf(“%d”,a): printf(“%d”,b); 廈門大學(xué)自動(dòng)化系 例例4.4 輸入一個(gè)字符,判別它是否大寫輸入一個(gè)字符,判別它是否大寫 字母,如果是,將它轉(zhuǎn)換成小寫字母;字母,如果

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

21、if( ) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 else if( ) 語(yǔ)句語(yǔ)句3 else 語(yǔ)句語(yǔ)句4 內(nèi)嵌內(nèi)嵌if else總是與它上面最總是與它上面最 近的未配對(duì)的近的未配對(duì)的if配對(duì)配對(duì) 廈門大學(xué)自動(dòng)化系 在在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范圍范圍 廈門大學(xué)自動(dòng)化系 例例4.5有一函數(shù)有一函數(shù): 編一程序編一程序,輸入一個(gè)輸入一個(gè)x值值,要求輸出相應(yīng)要求輸出相應(yīng) 的的y值。值。 )0(1 )0(0 )0(1 x x x y 廈門大學(xué)

22、自動(dòng)化系 解題思路:解題思路: u用用if語(yǔ)句檢查語(yǔ)句檢查x的值,根據(jù)的值,根據(jù)x的值決定賦予的值決定賦予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) 廈門大學(xué)自動(dòng)化系 解題思路:解題思路:方法方法1 (1) 先后用先后用3個(gè)獨(dú)立的個(gè)獨(dú)立的if語(yǔ)句處理:語(yǔ)句處理: 輸入輸入x 若若 x 0, 則則y = 1 輸出輸出x和和y scanf(%d, if(x0) y = 1; printf(x=%d,y=%dn,x,y); 廈門大學(xué)自動(dòng)化系 解題思路:解題思路:方法

23、方法2 (2) 用一個(gè)嵌套的用一個(gè)嵌套的if語(yǔ)句處理:語(yǔ)句處理: 輸入輸入x 若若x 0, 則則y = -1 否則否則 若若 x = 0, 則則y = 0 否則否則 y = 1 輸出輸出x和和y scanf(%d, if(x0) y=-1; else if(x=0) y=0; else y=1; printf(x=%d,y=%dn,x,y); 廈門大學(xué)自動(dòng)化系 解題思路:解題思路:方法方法2 (2) 用一個(gè)嵌套的用一個(gè)嵌套的if語(yǔ)句處理:語(yǔ)句處理: 輸入輸入x 若若x 0, 則則y = -1 否則否則 若若 x = 0, 則則y = 0 否則否則 y = 1 輸出輸出x和和y scanf(%d

24、, 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中中 廈門大學(xué)自動(dòng)化系 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ì)分類 按年齡分為老、中、青、少、兒童按年齡分為老、中、青、少、兒童 廈門大學(xué)自動(dòng)化系 switch語(yǔ)句 f1.開關(guān)語(yǔ)句開關(guān)語(yǔ)句 (switch) f與與if-else一樣又稱選擇結(jié)構(gòu)一樣又稱選擇結(jié)構(gòu)屬于判斷問(wèn)題屬

25、于判斷問(wèn)題 switch語(yǔ)句,用于多分支選擇語(yǔ)句,用于多分支選擇 一般格式一般格式 we1en為標(biāo)號(hào),常量及常量表達(dá)式,應(yīng)具有唯一性為標(biāo)號(hào),常量及常量表達(dá)式,應(yīng)具有唯一性 w實(shí)現(xiàn)實(shí)現(xiàn)“多選一多選一”:使用使用 break、goto、return語(yǔ)句跳出語(yǔ)句跳出switch體體 w允許嵌套使用允許嵌套使用switch語(yǔ)句語(yǔ)句 w多個(gè)多個(gè)case可執(zhí)行同一語(yǔ)句可執(zhí)行同一語(yǔ)句 y y en 表達(dá)式表達(dá)式 e1 e2 語(yǔ)句語(yǔ)句n+1 語(yǔ)句語(yǔ)句1 語(yǔ)句語(yǔ)句2 語(yǔ)句語(yǔ)句n y n n n switch(表達(dá)式表達(dá)式) case e1:語(yǔ)句語(yǔ)句1 case e2:語(yǔ)句語(yǔ)句2 . case en:語(yǔ)句語(yǔ)句n

26、default:語(yǔ)句語(yǔ)句n+1 y y en 表達(dá)式表達(dá)式 e1 e2 語(yǔ)句語(yǔ)句n+1 語(yǔ)句語(yǔ)句1 語(yǔ)句語(yǔ)句2 語(yǔ)句語(yǔ)句n y n n n 廈門大學(xué)自動(dòng)化系 執(zhí)行過(guò)程執(zhí)行過(guò)程: : u先計(jì)算表達(dá)式的值。先計(jì)算表達(dá)式的值。 u順次同順次同case后的常量表達(dá)式的值比較后的常量表達(dá)式的值比較 若找到相等的若找到相等的常量表達(dá)式i,則執(zhí)行該常量表則執(zhí)行該常量表 達(dá)式冒號(hào)后的語(yǔ)句組達(dá)式冒號(hào)后的語(yǔ)句組i。在執(zhí)行過(guò)程中,若遇到在執(zhí)行過(guò)程中,若遇到 break語(yǔ)句則跳出語(yǔ)句則跳出switch 結(jié)構(gòu);否則依次執(zhí)行結(jié)構(gòu);否則依次執(zhí)行 其后的所有冒號(hào)后面的語(yǔ)句。其后的所有冒號(hào)后面的語(yǔ)句。 若找不到匹配的常量表達(dá)式

27、的值,則執(zhí)行若找不到匹配的常量表達(dá)式的值,則執(zhí)行 default后面的語(yǔ)句組直到結(jié)束。后面的語(yǔ)句組直到結(jié)束。 上一頁(yè) 廈門大學(xué)自動(dòng)化系 例例4.6 要求按照考試成績(jī)的等級(jí)輸出百要求按照考試成績(jī)的等級(jí)輸出百 分制分?jǐn)?shù)段,分制分?jǐn)?shù)段,a等為等為85分以上,分以上,b等為等為 7084分,分,c等為等為6069分分 ,d等為等為 60分以下分以下 。成績(jī)的等級(jí)由鍵盤輸入。成績(jī)的等級(jí)由鍵盤輸入。 廈門大學(xué)自動(dòng)化系 解題思路:解題思路: u判斷出判斷出這是一個(gè)多分支選擇問(wèn)題這是一個(gè)多分支選擇問(wèn)題 u根據(jù)百分制分?jǐn)?shù)將學(xué)生成績(jī)分為根據(jù)百分制分?jǐn)?shù)將學(xué)生成績(jī)分為4個(gè)等級(jí)個(gè)等級(jí) u如果用如果用if語(yǔ)句語(yǔ)句,至少要

28、用至少要用3層嵌套的層嵌套的if,進(jìn)行,進(jìn)行 3次檢查判斷次檢查判斷 u用用switch語(yǔ)句進(jìn)行一次檢查即可得到結(jié)果語(yǔ)句進(jìn)行一次檢查即可得到結(jié)果 廈門大學(xué)自動(dòng)化系 #include int main() char grade; scanf(%c, 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

29、 error!n); return 0; 值為值為a 廈門大學(xué)自動(dòng)化系 #include int main() char grade; scanf(%c, 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; 不能少不能少 廈門大學(xué)自動(dòng)化系 #include

30、int main() char grade; scanf(%c, 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 廈門大學(xué)自動(dòng)化系 #include int main() char grade; scanf(%c, printf(your s

31、core:); 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 廈門大學(xué)自動(dòng)化系 #include int main() char grade; scanf(%c, printf(your score:); switch(grade) case a: printf(85100n);b

32、reak; 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)如何修改? 廈門大學(xué)自動(dòng)化系 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 常量

33、常量2 :語(yǔ)句:語(yǔ)句2 case 常量常量n :語(yǔ)句:語(yǔ)句n default : 語(yǔ)句語(yǔ)句n+1 整數(shù)類型整數(shù)類型(包括字符型包括字符型) 廈門大學(xué)自動(dòng)化系 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 不能相同不能相同 廈門大學(xué)自動(dòng)化系 scanf(%c, printf(your score:);

34、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); 廈門大學(xué)自動(dòng)化系 scanf(%c, printf(your score:); switch(grade) case a: printf(85100n);break; case b: printf(7084n);break; case c: printf(6069n)

35、;break; case d: printf(60n);break; default: printf(enter data error!n); 廈門大學(xué)自動(dòng)化系 scanf(%c, printf(your score:); switch(grade) case a: case b: case c: printf(6069n);break; case d: printf(=90a, 8089b,60e) switch (grade/10) case 10: case 9: printf(“an”); break; case 8: printf(“bn”); break; case 7: prin

36、tf(“cn”); break; case 6: printf(“dn”); break; case 5: printf(“en”); break; default :printf(“fn”); 廈門大學(xué)自動(dòng)化系 例例4.7 編寫程序,用編寫程序,用switch語(yǔ)句處理菜語(yǔ)句處理菜 單命令。單命令。 解題思路:在許多應(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操作,等等。操作,等等。 廈門大學(xué)自動(dòng)化系 #inc

37、lude 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);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); 廈門大學(xué)自動(dòng)化系

38、#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);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); 廈門大學(xué)自

39、動(dòng)化系 #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);break; default: putchar(a); return 0; 輸入其他字符輸入其他字符 發(fā)出警告發(fā)出警告 廈門大學(xué)自動(dòng)化系 這是一個(gè)非常簡(jiǎn)單的示意程序這是一個(gè)非常簡(jiǎn)單的示意程序 實(shí)際應(yīng)用中,所指定的操作可能比較復(fù)雜:實(shí)際應(yīng)用中,所

40、指定的操作可能比較復(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è)計(jì)成不同的功能以實(shí)現(xiàn)各要求設(shè)計(jì)成不同的功能以實(shí)現(xiàn)各要求 廈門大學(xué)自動(dòng)化系 例例4.8 寫一程序,判斷某一年是否閏年。寫一程序,判斷某一年是否閏年。 解題思路:在前面已介紹過(guò)判別閏年的方解題思路:在前面已

41、介紹過(guò)判別閏年的方 法法 本例本例用不同的方法編寫程序用不同的方法編寫程序 廈門大學(xué)自動(dòng)化系 用變量用變量leap代表是否閏年的信息。若閏代表是否閏年的信息。若閏 年,令年,令leap=1;非閏年,;非閏年,leap=0。最。最 后判斷后判斷l(xiāng)eap是否為(真),若是,則是否為(真),若是,則 輸出輸出“閏年閏年”信息信息 參見教材參見教材圖圖4.13 廈門大學(xué)自動(dòng)化系 #include int main() int year,leap; printf(enter year:); scanf(%d, if (year%4=0) if(year%100=0) if(year%400=0) lea

42、p=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)含義相同含義相同 廈門大學(xué)自動(dòng)化系 #include int main() int year,leap; printf(enter year:); scanf(%d, if (year%4=0) if(year%100=0) if(year%400=0) leap=1; els

43、e 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; 采取鋸齒形式采取鋸齒形式 廈門大學(xué)自動(dòng)化系 #include int main() int year,leap; printf(enter year:); scanf(%d, if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else

44、 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; 廈門大學(xué)自動(dòng)化系 #include int main() int year,leap; printf(enter year:); scanf(%d, if (year%4=0) if(year%100=0)

45、 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 else leap=0; 廈門大學(xué)自動(dòng)化系 例例4.9 求求 方程的解。方程的解。0 2 cbxax 解題思路:解題思路:處理以下各情況處理以下各情況 ,不是二次方程,不是二次方程 ,有兩個(gè)相等實(shí)根,有兩個(gè)相等實(shí)根 ,有兩個(gè)不等實(shí)根。,有兩個(gè)不等實(shí)根。 ,有兩個(gè)

46、共軛復(fù)根。,有兩個(gè)共軛復(fù)根。 應(yīng)當(dāng)以應(yīng)當(dāng)以p+qi和和p-qi的形式輸出復(fù)根的形式輸出復(fù)根 其中,其中,p=-b/2a,q=( )/2a 參見教材參見教材圖圖4.14 04 2 acb 04 2 acb 04 2 acb acb4 2 廈門大學(xué)自動(dòng)化系 #include #include int main() double a,b,c,disc,x1,x2,realpart, imagpart; scanf(%lf,%lf,%lf, printf(the equation ); if(fabs(a)=1e-6) printf(is not a quadraticn); 實(shí)型不能用實(shí)型不能用if

47、 (a=0) 廈門大學(xué)自動(dòng)化系 else disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(has distinct real roots:%8.4f and %8.4fn,x1,x2); else 廈門大學(xué)自動(dòng)化系 realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf( has complex roots:n); printf(%8.4f+%8.4fin“ ,realpart,imagpart); prin

48、tf(%8.4f-%8.4fin, realpart,imagpart); return 0; 廈門大學(xué)自動(dòng)化系 realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf( has complex roots:n); printf(%8.4f+%8.4fin“ ,realpart,imagpart); printf(%8.4f-%8.4fin, realpart,imagpart); return 0; 廈門大學(xué)自動(dòng)化系 realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf( has com

49、plex roots:n); printf(%8.4f+%8.4fin“ ,realpart,imagpart); printf(%8.4f-%8.4fin, realpart,imagpart); return 0; 廈門大學(xué)自動(dòng)化系 例例4.10 運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)輸費(fèi)用。運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)輸費(fèi)用。 路程路程(s km)越遠(yuǎn),每噸)越遠(yuǎn),每噸千米運(yùn)費(fèi)越低。千米運(yùn)費(fèi)越低。 標(biāo)準(zhǔn)如下:標(biāo)準(zhǔn)如下: s 250 沒有折扣沒有折扣 250s 500 2折扣折扣 500s 1000 5折扣折扣 1000s 2000 8折扣折扣 2000s 3000 10折扣折扣 3000s 15折扣折扣 廈門大學(xué)

50、自動(dòng)化系 解題思路:解題思路: u設(shè)每噸每千米貨物的基本運(yùn)費(fèi)為設(shè)每噸每千米貨物的基本運(yùn)費(fèi)為p,貨物重,貨物重 為為w,距離為,距離為s,折扣為,折扣為d u總運(yùn)費(fèi)總運(yùn)費(fèi)f的計(jì)算公式為的計(jì)算公式為f=pws(1-d) 廈門大學(xué)自動(dòng)化系 折扣的變化規(guī)律折扣的變化規(guī)律(參見教材(參見教材圖圖4.15): u折扣的折扣的“變化點(diǎn)變化點(diǎn)”都是都是250的倍數(shù)的倍數(shù) u在橫軸上加一種坐標(biāo)在橫軸上加一種坐標(biāo)c,c的值為的值為s/250 uc代表代表250的倍數(shù)的倍數(shù) u當(dāng)當(dāng)c1時(shí),表示時(shí),表示s250,無(wú)折扣,無(wú)折扣 u1c2時(shí),表示時(shí),表示250s500,折扣,折扣d=2 u2c4時(shí),時(shí),d=5;4c8時(shí),時(shí),d=8; 8c12時(shí),時(shí),d=10;c12時(shí),時(shí),d=15 廈門大學(xué)自動(dòng)化系 #include int main() int c,s; flo

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論