5 選擇結(jié)構(gòu)1.ppt_第1頁
5 選擇結(jié)構(gòu)1.ppt_第2頁
5 選擇結(jié)構(gòu)1.ppt_第3頁
5 選擇結(jié)構(gòu)1.ppt_第4頁
5 選擇結(jié)構(gòu)1.ppt_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第5章 選擇結(jié)構(gòu)程序設(shè)計(jì),5.1 關(guān)系運(yùn)算符及表達(dá)式 5.2 邏輯運(yùn)算符及表達(dá)式 5.3 if語句 5.4 switch語句 5.5選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,問題與說明,【問題】 1、從鍵盤輸入一個(gè)數(shù),如果該數(shù)為正,打印,否則不打??; 2、解一元二次方程,求出相應(yīng)的實(shí)根或復(fù)根。,解決辦法: 1、引入新的程序結(jié)構(gòu):選擇結(jié)構(gòu),又稱之為分支結(jié)構(gòu) 2、為了配合分支結(jié)構(gòu)相,需引入邏輯表達(dá)式的概念。 3、有三種形式可進(jìn)行分支結(jié)構(gòu)的程序設(shè)計(jì) A、 if 結(jié)構(gòu)(三種具體形式) B、多重選擇結(jié)構(gòu)(switch語句,即情形結(jié)構(gòu)) C、無條件轉(zhuǎn)移結(jié)構(gòu)(goto語句,不要求),5.1 關(guān)系運(yùn)算符及表達(dá)式,1)進(jìn)行比較運(yùn)算

2、 2)連接的運(yùn)算對象:都是雙目運(yùn)算符號??梢?連接整型、實(shí)型、字符型、枚舉型數(shù)據(jù);,5.1 關(guān)系運(yùn)算符,3)運(yùn)算結(jié)果 結(jié)果為數(shù)值型,用0表示假,1表示真。(關(guān)系表達(dá)式的值, 可以參與其它種類的運(yùn)算,例如算術(shù)運(yùn)算、邏輯運(yùn)算等) 4)優(yōu)先級別:低于算術(shù)運(yùn)算,高于賦值運(yùn)算。 例:int x=2,y=3,z; z=3-1=x+14521 結(jié)果為0,5.1 關(guān)系表達(dá)式實(shí)例,用關(guān)系運(yùn)算符將兩個(gè)算術(shù)表達(dá)式或兩個(gè)字符串表達(dá)式聯(lián)起來的式子,其值為邏輯值。,例5101 #include main() int a,b; a=10=56; b=(10=5)6; printf(“%d,%dn”,a,b); 輸出結(jié)果:,

3、例5102 #include main() int a,b; a=6*77+8; b=7!=73; printf(“%d,%dn”,a,b); 輸出結(jié)果:,0,1,1,1,1)C語言提供三種邏輯運(yùn)算符: a+|-b ,輸出結(jié)果: 1 0 -1 0 1 0 1 1 0 分析: a+|-b 中,先判斷a(為0),然后a在自加邊為1;要執(zhí)行-b;b 變?yōu)?;則c+不被執(zhí)行,所有c的值不變。第一次輸出結(jié)果為: 1 0 -1,5. 3 if 語句,5.3.1 簡單if語句 一般格式:if(表達(dá)式) 語句體 【說明】 1)表達(dá)式可以是任意類型的值,具體形式有:常量、變量、函數(shù)調(diào)用、表達(dá)式(包括算術(shù)表達(dá)式、

4、賦值表達(dá)式、逗號表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、條件運(yùn)算表達(dá)式、 ) 2)表達(dá)式必須加()括起來。 3)語句體中的語句可以是:一條語句;多條語句(當(dāng)語句體包含多個(gè)語句時(shí),語句體要用括起來??梢詥为?dú)占一行)。,4)執(zhí)行過程:當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行語句體的語句 5)一個(gè)if語句總體上只算一條語句 注意: (1)c中對“真”、“假”的表示:只要表達(dá)式的值為非0則認(rèn)為是“真”,否則是“假”; (2)“假”(0值)的幾種具體形式:0、0.0、0、NULL (3)關(guān)系、邏輯運(yùn)算的結(jié)果(的表示)與“真”、“假”值的區(qū)別與聯(lián)系。,5. 3 if 語句,例5.2輸入任意三個(gè)數(shù)a、b、c,按從小到大的順序排序

5、輸出。 分析: if (ab) a和b交換,另a為a,b中較小值 if (ac) a和c交換,另a為a,b,c中最小值 if (bc) b和c交換,另b為次大值,c為最大值,例5.2輸入任意三個(gè)數(shù)a、b、c,按從小到大的順序排序輸出。 main() int a,b,c,t; printf(input three numbers:); scanf(%d,%d,%d, input three numbers:11,22,18 11,18,22,5.3.2 復(fù)合ifelse語句,1復(fù)合if語句的一般格式 if(表達(dá)式) 語句組1; else 語句組2; 【說明】 (1)表達(dá)式可以是任意類型的值,具體

6、形式有:常量、變量、表達(dá)式 (2)if語句中的“表達(dá)式”必須用“(”和“)”括起來。 (3)else子句(可選)是if語句的一部分,必須與if配對使用,不能單獨(dú)使用。 (4)if語句允許嵌套,但嵌套的層數(shù)不宜太多。 (5)“語句組1”和“語句組2”,可以只包含一個(gè)簡單語句,也可以是復(fù)合語句。,if 邏輯表達(dá)式“真” 復(fù)合語句 1 else 復(fù)合語句 2 ,不管是簡單語句,還是復(fù)合語句中的各個(gè)語句,每個(gè)語句后面的分號必不可少! 例如: if (ab) max=a; else max=b;,5.3.2 ifelse if語句,1符合if語句的一般格式 if(表達(dá)式1) 語句組1 else if (

7、表達(dá)式2) 語句組2 else if (表達(dá)式3) 語句組3 else if (表達(dá)式4) 語句組4 else if (表達(dá)式n) 語句組n else 語句組n+1 【注意】 if語句嵌套時(shí),else子句 與在它上面、距它最近、 且尚未匹配的if配對。,Ifelse配對規(guī)則可能產(chǎn)生的“副作用”,例5.3:有符號函數(shù),要求輸入不同的x的值能輸出正確的符號數(shù)。 算法思路1:先可以用簡單的if語句實(shí)現(xiàn),用三個(gè)if 語句就可以。 算法思路2:要求用簡單的ifelse語句實(shí)現(xiàn),分析以下幾個(gè)程序。,程序1: 程序2: if(x=0) if(x0) y=1; else if(x=0) y=0; else y

8、=0; else y=1; else y=-1; 程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=-1;,輸入x=0驗(yàn)證,輸入x=-5驗(yàn)證,if語句嵌套時(shí),else子句 與在它上面、距它最近、且尚未匹配的if配對。,選擇結(jié)構(gòu)之IF語句應(yīng)用實(shí)例分析,有如下實(shí)例,要求用簡單if語句、ifelse語句、 ifelse if語句分別實(shí)現(xiàn)。,算法之一:用if語句實(shí)現(xiàn),main() float x,y; printf(x=?); scanf(%f, ,算法之二:用ifelse語句實(shí)現(xiàn),main()

9、 float x,y; printf(x=?); scanf(%f, ,算法之三:用ifelse if語句實(shí)現(xiàn),main() float x,y; printf(x=?); scanf(%f, ,1一般格式: 表達(dá)式1?表達(dá)式2:表達(dá)式3 3個(gè)表達(dá)式的類型可以各不相同。 2運(yùn)算規(guī)則 如果“表達(dá)式1”的值為非0, 則運(yùn)算結(jié)果等于“表達(dá)式2”的值;否則, 等于“表達(dá)式3”的值。 例:int max(int a,int b) int m; if(ab) m=a; else m=b; 與條件運(yùn)算等價(jià): m=(ab?a:b);,5.3.3 條件運(yùn)算符,例5.4 從鍵盤上輸入一個(gè)字符,如果它是大寫字母,則

10、把它轉(zhuǎn)換成小寫字母輸出;否則,直接輸出。 main() char ch; printf(Input a character: ); scanf(%c, ,5.3.3 條件運(yùn)算符,條件運(yùn)算的嵌套 例1:ab? a: b+1 相當(dāng)于: ab? a: (b+1) 例2: ab? a: cd? c: d 相當(dāng)于: ab? a: (cd? c: d) 設(shè):int a=1,b=2,c=3,d=4; 則上述表達(dá)式的結(jié)果為4,5.3.3 條件運(yùn)算符,輸入星期中的某一天,顯示對應(yīng)的英文,#include main() int i; printf(“Input 1- 7: ”); scanf(“%d”, ,此例

11、似顯 復(fù)雜, 是否 有更 好的 辦法?,5.4 switch語句的結(jié)構(gòu)及其執(zhí)行過程,1switch語句的一般形式 switch(表達(dá)式) case 常量表達(dá)式1:語句組1;break; case 常量表達(dá)式2:語句組2;break; . case 常量表達(dá)式:語句組n;break; default:語句組;break; ,2執(zhí)行過程 (1)首先計(jì)算switch后的條件表達(dá)式的值, (2) 找到與表達(dá)式的值相同的case, 執(zhí)行該case后面的語句組(包括之后的各個(gè)case和default情形,并不再對之后的各case進(jìn)行判斷); (3)如果沒有任何一個(gè)case 匹配,則執(zhí)行default 后面

12、的語句組( 若存在default情形時(shí) )。 (4) break語句的功能:跳出switch結(jié)構(gòu)。(通常在case語句執(zhí)行完 后添加break,結(jié)束分支結(jié)構(gòu) ),5.4 switch語句的結(jié)構(gòu)及其執(zhí)行過程,3說明 (1)switch后面的“表達(dá)式” 一般是: int、char和枚舉型中的一種 也可以是不含變量與函數(shù)的常量表達(dá)式。例: case 3+4:/* 正確*/ case x+y: /*錯(cuò)誤 設(shè)int x=3,y=4;*/ (2)多個(gè)case子句,可共用同一語句(組)。 例如: case 10: case 9: printf(grade=An); break; (3)default情形可以

13、省略;每個(gè)case后面的語句有多條語句時(shí)不必加括起來。,5.4 switch語句的結(jié)構(gòu)及其執(zhí)行過程,main() int i; printf( “Input 1- 7: ”); scanf(“%d”, ,輸入星期中的某一天,顯示對應(yīng)的英文,break; break; break; break; break; break;,5.5 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,例5.6 求一元二次方程ax2+bx+c=0的解(a0)。#include math.hmain() float a,b,c,disc,x1,x2,p,q; scanf(“%f,%f,%f”, ,else p=-b/(2*a); /*求出兩個(gè)共軛

14、復(fù)根*/ q=sqrt(fabs(disc)/(2*a); printf(“x1=%7.2f + %7.2f in“, p, q); printf(”x2=%7.2f - %7.2f in“, p, q); 說明:由于實(shí)數(shù)在計(jì)算機(jī)中存儲時(shí),經(jīng)常會有一些微小誤差,所以本案例判斷disc是否為0的方法是:判斷disc的絕對值是否小于一個(gè)很小的數(shù)(例如10-6)。思考題: 如果將系數(shù)a、b、c定義成整數(shù),能否直接判斷disc是否等于0?,5.5 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,例:從鍵盤上輸入一個(gè)百分制成績score,按下列原則輸出其等級:score90,等級為A;80score90,等級為B;70score80,等級為C;60score70,等級為D;score60,等級為E。,分析:1)可以用最簡單的switch分支結(jié)構(gòu)實(shí)現(xiàn),將成績轉(zhuǎn)化為十個(gè)分?jǐn)?shù)段(s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論