第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)75676.ppt_第1頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)75676.ppt_第2頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)75676.ppt_第3頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)75676.ppt_第4頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)75676.ppt_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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章 選擇結(jié)構(gòu)的程序設(shè)計(jì),1. if語(yǔ)句,簡(jiǎn)單if語(yǔ)句形式,if (表達(dá)式) 語(yǔ)句;,格式:,執(zhí)行流程:,例如:下面的程序段是輸入兩個(gè)整數(shù),輸出其中的大數(shù)。 int a, b, max; printf (input two numbers: ); scanf (%d%d, ,if_else形式,if (表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;,格式:,執(zhí)行流程:,例如:下面的程序段同樣是輸出兩個(gè)整數(shù)中的最大數(shù)。 int a, b; printf (input two numbers: ); scanf (%d%d, ,C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),1. if語(yǔ)句,if_else

2、_if形式,if(表達(dá)式1) 語(yǔ)句1; else if (表達(dá)式2) 語(yǔ)句2; else if (表達(dá)式3) 語(yǔ)句3; else 語(yǔ)句n;,格式:,執(zhí)行流程:,例如:下面的程序段是判斷輸入字符的種類。 char c; printf (Enter a character: ); c = getchar ( ); if (c = A ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),if語(yǔ)句注意事項(xiàng),(1) if語(yǔ)句后面的表達(dá)式必須用括號(hào)括起來(lái) 。 (2) 表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它任何表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)

3、變量。只要表達(dá)式非零時(shí),表達(dá)式的值就為真,否則就是假。 (3) 在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用 括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。但要注意的是在之后不能再加分號(hào)。 (4) 在if語(yǔ)句中,如果表達(dá)式是一個(gè)判斷兩個(gè)數(shù)是否相等的關(guān)系表達(dá)式,要當(dāng)心不要將=寫成了賦值運(yùn)算符=。,if (a = 5) 語(yǔ)句; /表達(dá)式的值永遠(yuǎn)為非0, 所以其后的語(yǔ)句總是要執(zhí)行的 if (b) 語(yǔ)句; /等價(jià)于if (b != 0) 語(yǔ)句;,運(yùn)行結(jié)果:x = 0,運(yùn)行結(jié)果:x != 0,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程

4、 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),if語(yǔ)句嵌套: 一般形式:,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),例 輸入兩數(shù)并判斷其大小關(guān)系,#include void main ( ) int x, y; printf (Enter integer x, y: ); scanf (%d, %d, ,運(yùn)行結(jié)果: Enter integer x, y: 12, 23 XY Enter integer x, y: 12, 12 X=Y,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),語(yǔ)言規(guī)定,在缺省 時(shí),els

5、e總是和它上面離它最近的未配對(duì)的if配對(duì),運(yùn)行結(jié)果:a = 0,運(yùn)行結(jié)果:a = 1,if_else 配對(duì)原則,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,實(shí)現(xiàn)if else 正確配對(duì)方法:加 ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),例:考慮下面程序輸出結(jié)果: void main( ) int x =

6、 100, a = 10, b = 20; int v1 = 5, v2 = 0; if (a b) if (b != 15) if (!v1) x=1; else if (v2) x = 10; x = -1; printf (“%d”, x); ,結(jié)果:-1,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),2. switch語(yǔ)句(開(kāi)關(guān)分支語(yǔ)句) 一般形式:,switch ( 表達(dá)式) case E1: 語(yǔ)句組 1; break; case E2: 語(yǔ)句組 2; break; . case En: 語(yǔ)句組 n; break; default:

7、語(yǔ)句組 ; break; ,執(zhí)行過(guò)程:,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語(yǔ)句注意事項(xiàng),(1) switch后面的“表達(dá)式”,可以是int、char和枚舉型中的一種,但不可為浮點(diǎn)型。,float a, b = 4.0; scanf (%f, ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),int a, b = 4; scanf (%d, ,使用switch語(yǔ)句注意事項(xiàng),(2) case后面語(yǔ)句(組)可加 也可以不加 ,但一般不加 。 (3) 每個(gè)case后面“常量表達(dá)

8、式”的值,必須各不相同,否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象。,switch ( i ) case 1: b = b + 1; break; / 可加可不加 case 2: b = b - 1; break; ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語(yǔ)句注意事項(xiàng),(4) 每個(gè)case后面必須是“常量表達(dá)式”,表達(dá)式中不能包含變量。,例:按成績(jī)分成A、B、C、D、E、F幾個(gè)等級(jí)。 char score; printf (Enter Score: ); scanf (%d, ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序

9、設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語(yǔ)句注意事項(xiàng),(5) case后面的“常量表達(dá)式”僅起語(yǔ)句標(biāo)號(hào)作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語(yǔ)句,以便結(jié)束switch語(yǔ)句。,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; case N : printf (Non); break; case A : printf (Alln); break; default : printf (Y

10、es,No or Alln); ,運(yùn)行結(jié)果: No,/假設(shè)輸入為:N,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; case N : printf (Non); case A : printf (Alln); break; default : printf (Yes,No or Alln); ,/假設(shè)輸入為:N,運(yùn)行結(jié)果: No ALL,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),使用switch語(yǔ)句注意事項(xiàng),(6)多個(gè)case子句,可共用同一語(yǔ)句(

11、組)。,例:當(dāng)a的值是1、2、3時(shí),將b的值加2,當(dāng)a的值是4、5、6時(shí),將b的值減2。 int a, b = 4; scanf (%d, ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語(yǔ)句注意事項(xiàng),(7) case子句和default子句如果都帶有break子句,那么它們之間順序的變化不會(huì)影響switch語(yǔ)句的功能。,#include void

12、 main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; case N : printf (Non); break; case A : printf (Alln); break; default : printf (Yes,No or Alln); break; ,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; default : printf (Yes,N

13、o or Alln); break; case N : printf (Non); break; case A : printf (Alln); break; ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語(yǔ)句注意事項(xiàng),(8) case子句和default子句如果有的帶有break子句,而有的沒(méi)有帶break子句,那么它們之間順序的變化可能會(huì)影響輸出的結(jié)果。,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn);

14、 break; case N : printf (Non); break; case A : printf (Alln); break; default : printf (Yes,No or Alln); ,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; default : printf (Yes,No or Alln); case N : printf (Non); break; case A : printf (Alln); break; ,/假設(shè)輸入

15、為:B,運(yùn)行結(jié)果: Yes,No or All,運(yùn)行結(jié)果: Yes,No or All No,/假設(shè)輸入為:B,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語(yǔ)句注意事項(xiàng),(9) switch語(yǔ)句可以嵌套。,void main ( ) int x = 1, y = 0, a = 0, b = 0; switch ( x ) case 1: switch ( y ) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+; b+; printf

16、 (na = %d, b = %d, a, b); ,運(yùn)行結(jié)果: a = 2,b = 1,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,【例1】已知某公司員工的保底薪水為500,某月所接工程的利潤(rùn)profit(整數(shù))與利潤(rùn)提成的關(guān)系如下所示(計(jì)量單位:元)。計(jì)算員工的當(dāng)月薪水。,程序應(yīng)該這樣來(lái)設(shè)計(jì): 首先要定義一個(gè)變量用來(lái)存放員工所接工程的利潤(rùn); 其次提示用戶輸入員工所接工程的利潤(rùn),并調(diào)用scanf函數(shù)接受用戶輸入員工所接工程的利潤(rùn); 然后根據(jù)上表的規(guī)則,計(jì)算該員工當(dāng)月的提成比率。 最后計(jì)算該員工當(dāng)月的薪水(保底薪

17、水+所接工程的利潤(rùn)*提成比率),并輸出結(jié)果。,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) long profit; /所接工程的利潤(rùn) float ratio; /提成比率 float salary = 500; /薪水,初始值為保底薪水500 printf (Input profit: ); /提示輸入所接工程的利潤(rùn) scanf (%ld, /輸出結(jié)果 ,運(yùn)行結(jié)果: Input profit: 4000 salary = 1100.00,方法一:使用if_else if語(yǔ)句,C語(yǔ)言程序設(shè)計(jì)教程 第

18、三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) long profit; /所接工程的利潤(rùn) float ratio; /提成比率 float salary = 500; /薪水,初始值為保底薪水500 printf (Input profit: ); /提示輸入所接工程的利潤(rùn) scanf (%ld, /輸出結(jié)果 ,運(yùn)行結(jié)果: Input profit: 4000 salary = 1100.00,方法二:使用if語(yǔ)句,0.1默認(rèn)為double型,不進(jìn)行強(qiáng)制類型轉(zhuǎn)換將產(chǎn)生警告信息!,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循

19、環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),方法三:使用switch語(yǔ)句,算法設(shè)計(jì)要點(diǎn): 為使用switch語(yǔ)句,必須將利潤(rùn)profit與提成的關(guān)系轉(zhuǎn)換成某些整數(shù)與提成的關(guān)系。分析本題可知,提成的變化點(diǎn)都是1000的整數(shù)倍(1000、2000、5000、),如果將利潤(rùn)profit整除1000,則當(dāng): profit 1000 對(duì)應(yīng)0、1 1000 profit 2000 對(duì)應(yīng)1、2 2000 profit 5000 對(duì)應(yīng)2、3、4、5 5000 profit 10000 對(duì)應(yīng)5、6、7、8、9、10 10000 profit 對(duì)應(yīng)10、11、12、 為解決相鄰兩個(gè)區(qū)間的重疊問(wèn)題,最簡(jiǎn)單

20、的方法就是:利潤(rùn)profit先減1(最小增量),然后再整除1000即可: profit 1000 對(duì)應(yīng)0 1000 profit 2000 對(duì)應(yīng)1 2000 profit 5000 對(duì)應(yīng)2、3、4 5000 profit 10000 對(duì)應(yīng)5、6、7、8、9 10000 profit 對(duì)應(yīng)10、11、12、,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) long profit; /所接工程的利潤(rùn) int grade; float ratio; /提成比率 float salary = 500; /薪水

21、,初始值為保底薪水500 printf (Input profit: ); /提示輸入所接工程的利潤(rùn) scanf (%ld, /輸入所接工程的利潤(rùn),方法三:使用switch語(yǔ)句,/將利潤(rùn)-1、再整除1000,轉(zhuǎn)化成switch語(yǔ)句中的case標(biāo)號(hào) grade = (profit - 1) / 1000; switch ( grade ) /計(jì)算提成比率 case 0: ratio = 0; break; / profit1000 case 1: ratio = (float)0.10; break; / 1000profit2000 case 2: case 3: case 4: ratio

22、= (float)0.15; break; / 2000profit5000 case 5: case 6: case 7: case 8: case 9: ratio = (float)0.20; break; / 5000profit10000 default: ratio = (float)0.25; / 10000profit salary += profit * ratio; /計(jì)算當(dāng)月薪水 printf (salary = %.2fn, salary); /輸出結(jié)果 ,運(yùn)行結(jié)果: Input profit: 4000 salary = 1100.00,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順

23、序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),【例2】寫一程序,從鍵盤上輸入1年份year(4位十進(jìn)制數(shù)),判斷其是否閏年。閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。,程序應(yīng)該這樣來(lái)設(shè)計(jì): 如果能被整除,則余數(shù)為,即如果的值等于,則表示能被整除! 首先將是否閏年的標(biāo)志leap預(yù)置為0(非閏年),這樣僅當(dāng)year為閏年時(shí),將leap置為1即可。這種處理兩種狀態(tài)值的方法,對(duì)優(yōu)化算法和提高程序可讀性非常有效,請(qǐng)讀者仔細(xì)體會(huì)。,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main

24、 ( ) int year, leap = 0; / leap=0:預(yù)置為非閏年 printf (Please input the year: ); /提示輸入年份 scanf (“%d”, ,運(yùn)行結(jié)果: Please input the year: 2008 2008 is a leap year.,判斷是否為閏年,if ( ( year % 4 = 0 ,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),【例3】寫一程序,從鍵盤上輸入任意兩個(gè)數(shù)和一運(yùn)算符(+:加,-:減,*:乘,/:除),計(jì)算其運(yùn)算的結(jié)果并輸出 。,程序應(yīng)該這樣來(lái)設(shè)計(jì): 首先輸

25、入兩個(gè)數(shù)和一運(yùn)算符號(hào),然后根據(jù)運(yùn)算符號(hào)來(lái)做相應(yīng)的運(yùn)算,但是在做除法運(yùn)算時(shí),應(yīng)判別除數(shù)是否為0,如果為0,運(yùn)算非法,給出提示信息。如果運(yùn)算符號(hào)不是+、-、*、/則同樣是非法的,也應(yīng)給出提示信息。其它情況,輸出運(yùn)算的結(jié)果。,C語(yǔ)言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語(yǔ)言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) float a, b; /存放兩個(gè)數(shù)的變量 int tag = 0; /運(yùn)算合法的標(biāo)志,0-合法,1-非法 char ch; /運(yùn)算符變量 float result; /運(yùn)算結(jié)果變量 printf (input two number: ); /提示輸入兩個(gè)數(shù) scanf (%f%f, /輸入運(yùn)算符,switch ( ch ) /根據(jù)運(yùn)算符來(lái)進(jìn)行相關(guān)的運(yùn)算 cas

溫馨提示

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