版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)山西財(cái)經(jīng)大學(xué)華商學(xué)院C語(yǔ)言程序設(shè)計(jì)4.1 if語(yǔ)句4.2 switch語(yǔ)句3選擇結(jié)構(gòu)程序設(shè)計(jì)舉例 2022/8/142022/8/144.1 if語(yǔ)句 1、單分支選擇if語(yǔ)句語(yǔ)句形式: if (表達(dá)式) 語(yǔ)句; 語(yǔ)句執(zhí)行流程: 表達(dá)式語(yǔ)句真(非0)假(0)if語(yǔ)句有三種形式:?jiǎn)畏种нx擇if語(yǔ)句、雙分支選擇if語(yǔ)句、多分支選擇if語(yǔ)句。 if語(yǔ)句的三種形式2022/8/14例4-1:從鍵盤輸入兩個(gè)整數(shù)a和b,如果a大于b則交換兩數(shù),最后輸出兩個(gè)數(shù)。 輸入a,bab交換a、b輸出結(jié)束真假#include void main() int a,b,t; scanf(%d,%d,
2、&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 2022/8/14注意: (1)if語(yǔ)句自動(dòng)結(jié)合一個(gè)語(yǔ)句,當(dāng)滿足條件需要執(zhí)行多個(gè)語(yǔ)句時(shí),應(yīng)用一對(duì)大括號(hào)將需要執(zhí)行的多個(gè)語(yǔ)句括起,形成一個(gè)復(fù)合語(yǔ)句。 (2)if語(yǔ)句中表達(dá)式形式很靈活,可以是常量、變量、任何類型表達(dá)式、函數(shù)、指針等。只要表達(dá)式的值為非零值,條件就為真,反之條件為假。 如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);2022/8/142、雙分支選擇if語(yǔ)句語(yǔ)句形式:if (表達(dá)式)
3、 語(yǔ)句1;else 語(yǔ)句2 ; 語(yǔ)句執(zhí)行流程: 表達(dá)式語(yǔ)句1真(非0)假(0)語(yǔ)句22022/8/14注意if和else語(yǔ)句之間只能有一個(gè)語(yǔ)句,當(dāng)ifelse之間的語(yǔ)句不只一句時(shí),應(yīng)用一對(duì)將語(yǔ)句括起。 例 考慮下面程序的輸出結(jié)果: #include main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);Compile Error!2022/8/143、多分支選擇if語(yǔ)句語(yǔ)句形式:if (表達(dá)式1) 語(yǔ)句1;else if (表達(dá)式2)語(yǔ)句2; else if (表達(dá)式n)
4、語(yǔ)句n; else 語(yǔ)句n+1;2022/8/14語(yǔ)句執(zhí)行流程: 表達(dá)式1語(yǔ)句1真(非0)假(0)語(yǔ)句2表達(dá)式2真(非0)表達(dá)式n語(yǔ)句n語(yǔ)句n+1假(0)假(0)2022/8/14例4-3:計(jì)算分段函數(shù)。假輸入xX=1真X10y=3/(x-10)y=2xy=x+5假真2022/8/14#include void main()float x,y; printf(enter x:); scanf( %f ,&x); else if (x=1) y=x+5; else if (x10) y=2*x; else y=3/(x-10); printf(x=%.2f,y=%.2fn,x,y); 計(jì)算分段函
5、數(shù)程序if(x=10) printf(not define x.n); 2022/8/14提示(1)當(dāng)if語(yǔ)句中出現(xiàn)多個(gè)“if”與“else”的時(shí)候,要特別注意它們之間的匹配關(guān)系,否則就可能導(dǎo)致程序邏輯錯(cuò)誤?!癳lse”與“if”的匹配原則是“就近一致原則”,即“else”總是與它前面最近的“if”相匹配。(2)if語(yǔ)句中條件的寫法應(yīng)盡量簡(jiǎn)單。 if()if()if()else.else.else.12下面程序段的輸出結(jié)果是:int a=5,b=5;a%=b+=a+=(a+b);printf(“a=%d,b=%d”,a,b); 練習(xí)1:a=15,b=2013下面程序段的輸出結(jié)果是:int a=
6、10,b=10;a+=b-=a*=b/=3;printf(“a=%d,b=%d”,a,b); 練習(xí)2:a=3,b=-2714練習(xí)3:能正確表示x大于等于10或x小于等于0的邏輯表達(dá)式是:能正確表示x大于等于0且小于等于10的邏輯表達(dá)式是: 15例如 a=4*6,a+5 整個(gè)逗號(hào)表達(dá)式的值為29。注意一個(gè)逗號(hào)表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號(hào)表達(dá)式,例如: (a=4*6,a+5),a+6 整個(gè)表達(dá)式的值為30。逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。2022/8/144.2 if語(yǔ)句的嵌套一般形式if (表達(dá)式1) if (表達(dá)式2) statement1 else statement2el
7、se if(表達(dá)式3) statement3 else statement4內(nèi)嵌if內(nèi)嵌ifif (表達(dá)式1) if (表達(dá)式2) statement1 else statement2內(nèi)嵌ifif (表達(dá)式1) if (表達(dá)式2) statement1else statement3 內(nèi)嵌ifif (表達(dá)式1) statement1else if(表達(dá)式2) statement3 else statement4內(nèi)嵌if2022/8/14例 輸入兩數(shù)并判斷其大小關(guān)系#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,&x
8、,&y); if(x!=y) if(xy) printf(XYn); else printf(XYn); else printf(X=Yn);運(yùn)行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y2022/8/14例: 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ì)方法:加 2022/8/141. main() int a=5,b=
9、4,c=3,d=2; if(abc) printf(%dn,d); else if(c-1=d)=1) printf(%dn,d+1); else printf(%dn,d+2); 執(zhí)行后輸出的結(jié)果是( ) A) 2 B) 3 C) 4 D) 編譯時(shí)有錯(cuò),無(wú)結(jié)果2022/8/14以下程序段中與語(yǔ)句k=ab?(bc?1:0):0;功能等價(jià)的是( ) A) if(ab)&(bc) k=1; else k=0; B) if(ab)|(bc) k=1 else k=0; C) if(a=b) k=0; else if(bb) k=1; else if(bc) k=1; else k=0;2022/8/
10、14執(zhí)行后輸出結(jié)果是_。 1.main() int x=10,y=20,t=0; if(x=y)t=x;x=y;y=t; printf(%d,%d n,x,y); 2.main( ) int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(%dn,x); 20,0-42022/8/144.2 switch語(yǔ)句1、語(yǔ)句形式: switch (表達(dá)式) case 常量1: 語(yǔ)句1; case 常量2: 語(yǔ)句2; case 常量3: 語(yǔ)句3; . case 常量n: 語(yǔ)句n; default : 語(yǔ)句n+1; 根據(jù)表達(dá)式的不同值,選擇
11、不同的程序分支,又稱開(kāi)關(guān)語(yǔ)句。數(shù)值型或字符型常量表達(dá)式的值必須互不相同,否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開(kāi)關(guān)值,將對(duì)應(yīng)多種執(zhí)行方案。千萬(wàn)不能接(;)號(hào)2022/8/14在“switch”語(yǔ)句中,“case 常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch 語(yǔ)句,因此會(huì)繼續(xù)執(zhí)行所有后面語(yǔ)句的情況。 為此,語(yǔ)言提供了一種break語(yǔ)句,其功能是可以跳出它所在的switch語(yǔ)句。2022/8/142、語(yǔ)句執(zhí)行流程:指語(yǔ)句的最后一條是否為break簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句breakbreak有無(wú)break有無(wú)有計(jì)算表達(dá)式常量1常量2
12、常量n=語(yǔ)句1=語(yǔ)句2語(yǔ)句n其它=語(yǔ)句n+1無(wú)值case語(yǔ)句出現(xiàn)的次序并不影響執(zhí)行結(jié)果。2022/8/14例4-4:假設(shè)用0、1、2.6分別表示星期日、星期一.星期六?,F(xiàn)輸入一個(gè)數(shù)字,輸出對(duì)應(yīng)的星期幾的英文單詞。如果輸入3,輸出“Wednesday”。 #include stdio.hvoid main()int n;scanf(%d,&n);switch(n)case 0: printf(Sundayn);case 1: printf(Mondayn);case 2: printf(Tuesdayn);case 3: printf(Wednesdayn);case 4: printf(Thu
13、rsdayn);case 5: printf(Fridayn);case 6: printf(Saturdayn);default: printf(Error);程序運(yùn)行情況如下:3Wednesday ThursdayFridaySaturdayerror2022/8/14將上面的例4-4修改如下:#include stdio.hvoid main()int n;scanf(%d,&n);switch(n)case 0: printf(Sundayn); break;case 1: printf(Mondayn); break;case 2: printf(Tuesdayn); break;c
14、ase 3: printf(Wednesdayn); break;case 4: printf(Thursdayn); break;case 5: printf(Fridayn); break;case 6: printf(Saturdayn); break;default: printf(Error);程序運(yùn)行情況如下:3Wednesday 27強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換是通過(guò)類型轉(zhuǎn)換運(yùn)算符來(lái)實(shí)現(xiàn)。一般形式:(類型說(shuō)明符)表達(dá)式功能:把表達(dá)式的結(jié)果強(qiáng)制轉(zhuǎn)換為類型說(shuō)明符所表示的類型。(int)a 將a的結(jié)果強(qiáng)制轉(zhuǎn)換為整型量。(int)(x+y) 將x+y的結(jié)果強(qiáng)制轉(zhuǎn)換為整型量。(float)a+b 將a
15、的內(nèi)容強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù),再與b相加 說(shuō)明:(1)類型說(shuō)明和表達(dá)式都需要加括號(hào)(單個(gè)變量可以不加括號(hào))(2)無(wú)論隱式轉(zhuǎn)換,強(qiáng)制轉(zhuǎn)換都是臨時(shí)轉(zhuǎn)換,不改變數(shù)據(jù)本身的類型和值。28強(qiáng)制類型轉(zhuǎn)換main() float f=5.75; printf(int)f=%dn,(int)f); /* 將f的結(jié)果強(qiáng)制轉(zhuǎn)換為整型,輸出 */ printf(f=%fn,f); /* 輸出f的值 */結(jié)果:(int)f=5f=5.75000029練習(xí)4:下面程序段的輸出結(jié)果: int a,b,c; a=(b=c=5,+b,b+(c+); printf(“a=%d,b=%d,c=%dn”,a,b,c);下面程序段的輸出結(jié)
16、果: int a=10,b=10,c,d; c=(+a,b+,a+,+b); d=-a,b-,-a,b-; printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);a=11,b=6,c=6a=10,b=10,c=12,d=112022/8/143、說(shuō)明多個(gè)case語(yǔ)句可以共用一組執(zhí)行語(yǔ)句。 switch(grade) case A: case B: case C:printf(grade=60n);break; default:printf(grade60);各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。 2022/8/14default語(yǔ)句可
17、以省略不用。case和default與其后面的常量表達(dá)式間至少有一個(gè)空格。switch語(yǔ)句可以嵌套,break語(yǔ)句只跳出它所在的switch語(yǔ)句。 2022/8/141.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(“a=%d,b=%dn”,a,b); 結(jié)果:a=2,b=12022/8/144.3 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例 例4.5 將任意三個(gè)整數(shù)按從大到小的順序輸出。 #include stdio.hvoid
溫馨提示
- 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年度個(gè)人與銀行消費(fèi)貸款合同(二零二五版)4篇
- 建設(shè)工程勘察設(shè)計(jì)合同(2篇)
- 二零二五年度智能設(shè)備模具定制加工合同范本4篇
- 音樂(lè)核心素養(yǎng)課程設(shè)計(jì)
- 二零二五年度門診藥品銷售權(quán)承包合作協(xié)議3篇
- 配電柜拆除施工方案
- 造價(jià)管理課程設(shè)計(jì)
- 二零二五年度孟玲與張偉離婚協(xié)議及共同財(cái)產(chǎn)分割執(zhí)行方案4篇
- 二零二五版電子商務(wù)04安全風(fēng)險(xiǎn)評(píng)估與改進(jìn)合同2篇
- 腳手架加固施工方案
- 小學(xué)數(shù)學(xué)六年級(jí)解方程練習(xí)300題及答案
- 電抗器噪聲控制與減振技術(shù)
- 中醫(yī)健康宣教手冊(cè)
- 2024年江蘇揚(yáng)州市高郵市國(guó)有企業(yè)招聘筆試參考題庫(kù)附帶答案詳解
- 消費(fèi)醫(yī)療行業(yè)報(bào)告
- 品學(xué)課堂新范式
- GB/T 1196-2023重熔用鋁錠
- 運(yùn)輸行業(yè)員工崗前安全培訓(xùn)
- 公路工程安全風(fēng)險(xiǎn)辨識(shí)與防控手冊(cè)
- 幼兒園教師培訓(xùn):計(jì)數(shù)(數(shù)數(shù))的核心經(jīng)驗(yàn)
- 如何撰寫和發(fā)表高水平的科研論文-good ppt
評(píng)論
0/150
提交評(píng)論