C語言程序設(shè)計教程_第4章.ppt_第1頁
C語言程序設(shè)計教程_第4章.ppt_第2頁
C語言程序設(shè)計教程_第4章.ppt_第3頁
C語言程序設(shè)計教程_第4章.ppt_第4頁
C語言程序設(shè)計教程_第4章.ppt_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 選擇結(jié)構(gòu)程序設(shè)計,4.1 關(guān)系運算符與關(guān)系表達(dá)式 4.2 邏輯運算符與邏輯表達(dá)式 4.3 if語句 4.4 switch語句 4.5 結(jié)構(gòu)嵌套程序舉例,選擇結(jié)構(gòu):三種基本結(jié)構(gòu)之一,根據(jù)所指定的條件是否滿足,決定從給定的兩組或兩組以上操作中選一。 實現(xiàn)方式: if (關(guān)系表達(dá)式) 語句1 else 語句2 例如:判定某一年是否為閏年: if(y%4=0 else printf(“不是閏年n”);,4.1 關(guān)系運算及其表達(dá)式,所謂“關(guān)系運算”實際上就是“比較運算”,即將兩個數(shù)據(jù)進(jìn)行比較,判定兩個數(shù)據(jù)是否符合給定的關(guān)系。 例如,“a b”中的“”表示一個大于關(guān)系運算。如果a的值是5,b的值是

2、3,則大于關(guān)系運算“”的結(jié)果為“真”,即條件成立;如果a的值是2,b的值是3,則大于關(guān)系運算“”的結(jié)果為“假”,即條件不成立。,4.1.1 關(guān)系運算符及其優(yōu)先次序,1關(guān)系運算符 2優(yōu)先級 (1)在關(guān)系運算符中,前4個優(yōu)先級相同,后2個也相同,且前4個高于后2個。 例如:int a=1; 表達(dá)式 a=30 的值 真?假? (2)與其它種類運算符的優(yōu)先級關(guān)系。 算術(shù)運算符關(guān)系運算符賦值運算符 例如:a=81+2 a= ?,4.1.2 關(guān)系表達(dá)式,1關(guān)系表達(dá)式的概念 用關(guān)系運算符將兩個表達(dá)式連接起來,進(jìn)行關(guān)系運算的式子。 例如,下面的關(guān)系表達(dá)式那些是合法的? (1)比較a、b的值 :ab (2)比較

3、a+b、c+d的值:a+bc+d (3)比較a=3、b=5的值:a=3=b 2關(guān)系表達(dá)式的值邏輯值(非“真”即“假”)。 由于語言沒有邏輯型數(shù)據(jù),所以用整數(shù)“”表示“邏輯真”,用整數(shù)“”表示“邏輯假”。,例如,假設(shè)a=3,b=4,c=5,則: (1)ab的值為0。 (2)(ab)!=c的值為1。 (3)abc的值為1。 (4)(ab)+c的值為6,因為ab的值為1, 1+5=6。 再次強(qiáng)調(diào):C語言用整數(shù)“1”表示“邏輯真”, 用整數(shù)“0”表示“邏輯假”。 所以,關(guān)系表達(dá)式的值,還可以參與其它種類的運算,例如算術(shù)運算、邏輯運算等。,4.2 邏輯運算及其表達(dá)式,關(guān)系表達(dá)式只能描述單一條件,例如“x

4、=0”。如果需要描述“0=0) if(xy) z=x; x+; printf(%dn,z); ,輸入一個數(shù),如果該數(shù)大于等于0,則輸出它的平方根,如果它小于0,則不作任何處理。 分析:1)需要一個變量存儲輸入的數(shù),定義一個變量x。 2)使用選擇if語句來實現(xiàn)。,例1,(2) 第2種形式為 :if else ifelse語句的一般形式是: 流程圖如下: if (表達(dá)式 ) 語句1 else 語句2 如果“表達(dá)式”為真,則執(zhí)行語句1; 如果“表達(dá)式”假,則執(zhí)行else后面的語句2。 例如: if(xy) z=x; else z=y;,例3:輸入2個數(shù),比較大小,然后將較大的數(shù)輸出。 分析:1)需要

5、定義2個變量a,b來存放輸入的2個數(shù)。 2)若a大于b,輸出a,否則輸出b。,例2:修改例1,當(dāng)輸入的數(shù)小于0時,提示信息錯誤。,(3) 第3種形式為 ifelseif 形式 if else if語句的一般形式是: if(表達(dá)式1) 語句1 else if(表達(dá)式2) 語句2 else if(表達(dá)式3) 語句3 else if(表達(dá)式n)語句n else 語句 n+1,表達(dá)式1,語句1,語句2,假(0),真 1,表達(dá)式2,真 1,表達(dá)式n,假(0),語句n,語句n+1,0,真 1,例4:根據(jù)學(xué)生成績劃分優(yōu)、良、中、及格、差等級。 int score; if (score=90) grade=“

6、優(yōu)”; else if (score=80) grade=“良”; else if (score=70) grade=“中”; else if (score=60) grade=“及格”; else grade=“差”; 依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個值為真時,則執(zhí)行其對應(yīng) 的語句,然后跳到整個if語句之外繼續(xù)執(zhí)行程序;如果所有表達(dá) 式均為假,則執(zhí)行最后else語句,然后繼續(xù)執(zhí)行程序。,4.3.2 if語句的嵌套,在 if 語句中又包含一個或多個 if 語句的情況稱為if語句的嵌套。當(dāng)流程進(jìn)入某個選擇分支后又引出新的選擇時,就要用嵌套的if語句。 嵌套的if語句的一般形式是: if ( ) i

7、f ( ) 語句1 else 語句2 else if ( ) 語句1 else 語句2,內(nèi)嵌if,內(nèi)嵌if,例如:求a、b、c三數(shù)中的最大數(shù)max。 if (ab) if(ac) max=a; else max=c; else if(bc) max=b; else max=c;,當(dāng)有許多 if 和 else 時,如何決定哪個 if 與哪個 else 配對呢? 例如: if(score60) if(score =80) printf(“優(yōu)n”); else printf(“不及格); else應(yīng)該與第一個if配對,還是第二個? 答案是:else與第二個if配對。,else與 if 配對的規(guī)則:e

8、lse語句總是與在它上面、距它最近、且尚未匹配的 if 配對,除非用花括號表示出其它選擇。如果確實希望else與第一個 if 匹配,那就得加花括號。例如: if(score60) if(score =80) printf(“優(yōu)n”); else printf(“不及格);,例4.3 有一函數(shù): -1 (x0) , 編寫一程序,輸入一個x,輸出y值。 main() int x,y; scanf(“%d”, 請判斷以下幾個 if 語句那個正確,那個不正確?,4.3.3 條件運算符,(1)由運算符“ ?”和“ :”組合而成 (2)運算規(guī)則:對 e1?e2 :e3 如果e1的值為非0(即邏輯真), 則

9、運算結(jié)果等于e2的值; 否則,運算結(jié)果等于e3的值。 (3)優(yōu)先級: 算術(shù)運算符 關(guān)系運算符 條件運算符 賦值運算符 例如: max=(ab)? a:b (a=2,b=1) max=ab? a:b max=(ab?a:b)+1 max=ab?a:b+1 (4)結(jié)合性: 從右到左(即右結(jié)合性) 例如: ab ? a:cd ? c:d (假如:a=1,b=2,c=3,d=4) 從右至左結(jié)合,相當(dāng)于: ab ? a: ( cd ? c:d),(5)對于e2 、e3,不僅可以是算術(shù)表達(dá)式,還可以是賦值表達(dá)式或函數(shù)表達(dá)式。例如: ab? max=a : printf(“%d”,b) 相當(dāng)于: if(ab

10、) max=a ; else printf(“%d”,b) ; 完整程序: main() int a=3,b=2 ; ab? max=a : printf(“%d”,b) ; ,4.3.3 switch語句,當(dāng)程序面臨多重選擇時, ifelseif 語句能夠滿足需要,但在大多數(shù)情況下, 使用switch語句則更為方便。 switch的一般形式: switch (表達(dá)式) case 常量表達(dá)式1:語句1 case 常量表達(dá)式2:語句2 case 常量表達(dá)式n:語句n default:語句 n+1 ,表達(dá)式可以是數(shù)值型或者字符型的,表達(dá)式的值為開關(guān)值。語句中各個case后面的常量表達(dá)式值必須不相同

11、,否則將會出現(xiàn)矛盾。,switch語句控制流程:首先計算switch語句括號中的表達(dá)式值,然后依次與每一個case中的常量進(jìn)行比較,一旦發(fā)現(xiàn)了某個能匹配的值,就執(zhí)行該case后面的語句組,如果沒有相匹配的值,則執(zhí)行default后面的語句組。執(zhí)行完一個case后面的語句后,流程控制轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行。如果執(zhí)行完一個case后面的語句后,想退出switch結(jié)構(gòu),可以用 break 語句實現(xiàn)。 例如:要求按照考試成績的等級打印出分?jǐn)?shù)段。 switch (grade) case A :printf(“85100n”) ; case B :printf(“7084n”) ; case C :

12、printf(“6069n”) ; case D :printf(“60n”) ; default:printf(“errorn”) ; ,若 grade的值為B,則執(zhí)行結(jié)果為 : 7084 6069 60 error 因此,應(yīng)該在每一個case分支后加break語句 使流程跳出switch結(jié)構(gòu) switch (grade) caseA :printf(“85100n”) ; break; caseB :printf(“7084n”) ; break; caseC :printf(“6069n”) ; break; caseD :printf(“60n”) ; break; default:p

13、rintf(“errorn”) ; ,根據(jù)輸入的成績判定等級。當(dāng)成績score=90 為A等, 70=score90 為B等, 60=score70 為C等, score60 為D等。(score為整數(shù)),例4,分析:score為整型數(shù)據(jù),那么score=90可能取到的值有:100,99,90,如果一一列舉出來,太麻煩了??紤]采用其他方法。,使用switch語句應(yīng)注意: (1) 在case的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯誤。 (2) 在case后允許有多個語句,可以不用 括起來。 (3) 各case 和default的出現(xiàn)順序可以變動,不會影響switch 語句的結(jié)果。 (4) default可以省略不用。,4.4 選擇結(jié)構(gòu)程序舉例,例4.7 求 ax2+bx+c=0 方程的根。 分析: (1) a=0,不是二次方程; (2)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論