第04章分支結(jié)構(gòu)的C程序設(shè)計(jì)_第1頁
第04章分支結(jié)構(gòu)的C程序設(shè)計(jì)_第2頁
第04章分支結(jié)構(gòu)的C程序設(shè)計(jì)_第3頁
第04章分支結(jié)構(gòu)的C程序設(shè)計(jì)_第4頁
第04章分支結(jié)構(gòu)的C程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第四章第四章 分支結(jié)構(gòu)的分支結(jié)構(gòu)的c程序設(shè)計(jì)程序設(shè)計(jì) 4.1 分支結(jié)構(gòu)中的表達(dá)式分支結(jié)構(gòu)中的表達(dá)式 4.2 if語句語句 4.3 switch語句語句 4.4 程序舉例程序舉例 24.1 分支結(jié)構(gòu)中的表達(dá)式分支結(jié)構(gòu)中的表達(dá)式 c語言的邏輯值 關(guān)系表達(dá)式(,=,=,=,!=) 關(guān)系表達(dá)式 關(guān)系表達(dá)式的運(yùn)算結(jié)果(1,0) 邏輯表達(dá)式(&,|,!)3if(表達(dá)式)語句圖 4.1 if語句執(zhí)行過程 下一語句真(非0)(a)(b)假(0)表達(dá)式語 句語句假真表達(dá)式if 語語 句句 if語句的簡單形式語句的簡單形式 4例例 4.1 打印出不及格的成績。5if(表達(dá)式) 語句1else 語句2 下一語句真

2、(a)(b)假表達(dá)式語句1語句1假真表達(dá)式語句2語句2圖 4.2 ifelse語句執(zhí)行過程 4.2.2 ifelse結(jié)構(gòu)結(jié)構(gòu)6例例 4.2 打印成績60分為“pass”, 否則為“fail”。 解解 我們可以使用兩種方法編程: 方法一:方法一: 用兩個(gè)簡單的if語句實(shí)現(xiàn): main( )float score; scanf(%f, &score); if(score=60.0) printf(score=%5.1f-passn, score); 例例 4.27 運(yùn)行: 50 score=50.0-fail 再次運(yùn)行: 80 score= 80.0-pass 在第二個(gè)if語句中,if(score

3、=60.0)是不能缺少的,否則不管score是否小于60,都將打印出第二行的結(jié)果。 main( ) float score; scanf(%f, &score); if(score=60.0) printf(score=%5.1f-passn, score); 8方法二:方法二: 用ifelse語句實(shí)現(xiàn): main( )float score; scanf(%f, &score); if(score9) y=100; else y=200; 可以寫成: x=10; y=x9? 100: 200; 11例例 4.3 輸入x的值, 當(dāng)x0時(shí)調(diào)用sqrt(x),否則調(diào)用sqrt(-x)。 inclu

4、de include main( ) float x, y; scanf(%f, &x); y=x0? sqrt(x): sqrt(-x); printf(x=%f, y=%fn, x, y); 運(yùn)行: 9.0 x=9.000000, y=3.000000再次運(yùn)行: -9.0 x=-9.000000, y=3.000000 12例例 4.4 打印a, b兩個(gè)數(shù)中大者。 方法一方法一: 用ifelse結(jié)構(gòu)實(shí)現(xiàn): main( ) int a, b; scanf(%d, %d, &a, &b); if (ab) printf(max=%dn, a); else printf(max=%dn, b);

5、 方法二方法二: 用條件運(yùn)算符實(shí)現(xiàn): main( ) int a, b; scanf(%d, %d, &a, &b); printf(max=%dn, ab? a:b); 13 例例 4.5 輸入一個(gè)學(xué)生成績,當(dāng)成績90時(shí),打印“very good”;當(dāng)80成績90時(shí),打印“good”; 當(dāng)60成績80時(shí),打印“pass”;當(dāng)成績60分,打印“fail”。 main( ) float score; scanf(%f, &score); if(score = 80) if(score=90) printf(very goodn); else printf(goodn); else if(scor

6、e=60) printf(passn); else printf(failn); 3. if語句的嵌套語句的嵌套14運(yùn)行: 85good 例如語句段: if(x) if(y) printf(a); else printf(); 其中else語句是與if(y)相匹配。如果與if(x)相匹配,則if(y)子句必須加花括號(hào)寫成: if(x) if(y) printf(a); else printf(b); 15 else if結(jié)構(gòu)的形式如下: if(表達(dá)式1) 語句1else if(表達(dá)式2) 語句2else if(表達(dá)式3) 語句3 else if(表達(dá)式n) 語句nelse 語句 n+1 4.2

7、.3 else if結(jié)構(gòu)結(jié)構(gòu)(多個(gè)分支多個(gè)分支) 16表達(dá)式1表達(dá)式2表達(dá)式3表達(dá)式n語句n語句n+1語句3真假假假假語句2語句1真真真下一語句(a)語句n語句n+1假真表達(dá)式n假真語句3表達(dá)式3真假語句2表達(dá)式2真假語句1表達(dá)式1真假(b)圖 else if 結(jié)構(gòu)執(zhí)行過程4.317例例 4.6 將例4.5用else if結(jié)構(gòu)來實(shí)現(xiàn)。 main( ) float score; scanf(%f, &score); if(score=90) printf(very goodn); else if (score=80) printf(goodn); else if(score=60) printf

8、(passn); else printf(failn); 運(yùn)行: 58fail 18 說明: (1) 在else if結(jié)構(gòu)中,if語句else if 語句else語句屬于同一程序模塊。程序每運(yùn)行一次,僅有一個(gè)分支的語句能得到執(zhí)行。 (2) 各個(gè)表達(dá)式所表示的條件必須是互相排除的,也就是說, 只有條件1(表達(dá)式1)不滿足時(shí)才會(huì)判斷條件2,只有條件2也不滿足時(shí)才會(huì)判斷條件3,其余依次類推,只有所有條件都不滿足時(shí)才執(zhí)行最后的else語句。 19例4.6的程序也可寫成: main( ) float score; scanf(%f, &score); if (score60) printf(failn)

9、; else if(score80) printf(passn); else if(score90) printf(goodn); else printf(very goodn); 20錯(cuò)誤的寫法: main( ) float score; scanf(%f, &score); if (score=60) printf(passn); else if(score=80) printf(goodn); *無用*/ else printf(very goodn); /*無用*/ 21switch(表達(dá)式) case 常量1: 語句段1 case 常量2: 語句段2 default: 語句段n 4.

10、3 switch 語句語句22 switch語句的執(zhí)行過程: switch語句先計(jì)算表達(dá)式的值,然后同多個(gè)case語句后的常量比較,找到相等的case常量則執(zhí)行該常量冒號(hào)后的語句段,并從這個(gè)入口一直執(zhí)行下面所有冒號(hào)后的語句,直到switch語句結(jié)束。如果執(zhí)行一個(gè)或幾個(gè)冒號(hào)后的語句就要跳出switch語句,則可以在跳出處使用break語句。如果switch語句后表達(dá)式的值找不到匹配的case常量,就執(zhí)行default后面的語句段直到結(jié)束。default是任選項(xiàng),如果沒有該語句, 則在所有配對(duì)都失敗時(shí),什么也不執(zhí)行。 23計(jì)算表達(dá)式的值語句段1語句段2語句段3語句段n常量1常量2常量3常量n24例

11、4.7-1 一日三餐void main( ) int now; printf(現(xiàn)在什么時(shí)間?n, &now); printf(1-早上n, &now); printf(2-中午n, &now); printf(3-下午n, &now); scanf(%d, &now); switch (now) case 1: printf(吃早飯); case 2: printf(吃午飯); case 3: printf(吃晚飯); default: printf(睡覺); 現(xiàn)在什么時(shí)間?1-早上2-中午3-下午2吃午飯吃晚飯睡覺現(xiàn)在什么時(shí)間?1-早上2-中午3-下午-1213睡覺25計(jì)算表達(dá)式的值語句段1

12、語句段2語句段3語句段n常量1常量2常量3常量nbreak;下一語句break;26例4.7-2 一日三餐void main( ) int now; printf(現(xiàn)在什么時(shí)間?n, &now); printf(1-早上n, &now); printf(2-中午n, &now); printf(3-下午n, &now); scanf(%d, &now); switch (now) case 1: printf(吃早飯); case 2: printf(吃午飯); break; case 3: printf(吃晚飯); default: printf(睡覺); 現(xiàn)在什么時(shí)間?1-早上2-中午3-

13、下午1吃早飯吃午飯現(xiàn)在什么時(shí)間?1-早上2-中午3-下午-1213睡覺現(xiàn)在什么時(shí)間?1-早上2-中午3-下午2吃午飯27計(jì)算表達(dá)式的值語句段1語句段2語句段3語句段n常量1常量2常量3常量nbreak;下一語句break;break;break;28例4.7-3 一日三餐void main( ) int now; printf(現(xiàn)在什么時(shí)間?n, &now); printf(1-早上n, &now); printf(2-中午n, &now); printf(3-下午n, &now); scanf(%d, &now); switch (now) default: printf(睡覺); brea

14、k; case 1: printf(吃早飯); break; case 2: printf(吃午飯); break; case 3: printf(吃晚飯); break; 現(xiàn)在什么時(shí)間?1-早上2-中午3-下午2吃午飯現(xiàn)在什么時(shí)間?1-早上2-中午3-下午3吃晚飯29例例 4.7 在顯示器上顯示一個(gè)菜單程序的模型。 include void dummy() ; int main( )char ch;printf(1 - please input a recordn);printf(2 - list all recordsn);printf(3 - delete a recordn);prin

15、tf(4 - modify a recordn);printf(nplease input your choise:n);ch = getche();printf(n);switch (ch) case 1:printf(1 - input a recordn);dummy();case 2:printf(2 - list all recordsn);dummy();case 3:printf(3 - delete a recordn);dummy();case 4:printf(4 - modify a recordn);dummy();default:printf(%c - error i

16、nput!n, ch);dummy();return 0;301 - please input a record2 - list all records3 - delete a record4 - modify a recordplease input your choise:11 - input a record2 - list all records3 - delete a record4 - modify a record1 - error input!314.4 程序舉例程序舉例 例 4.8 編寫一個(gè)可由用戶鍵入簡單表達(dá)式的程序,形式如下: number operator number

17、 該程序要計(jì)算該表達(dá)式并以兩位小數(shù)顯示結(jié)果。 我們要識(shí)別的運(yùn)算符operator為加、 減、 乘、 除。 32#include int main( ) float value1, value2;char op;printf(input your expression: n); scanf(%f%c%f, &value1, &op, &value2); if (op=+)printf(%.2fn, value1+value2); else if (op=-) printf(%.2fn, value1-value2); else if (op=*) printf(%.2fn, value1*val

18、ue2); else if (op=/) if (fabs(value2)1e-6)printf(division by zero.n); elseprintf(%.2fn, value1/value2); else printf(unknown operator.n); return 0;33例例 4.9 用switch語句改寫例4.8。 #include int main( ) float value1, value2;char op;printf(input your expression: n); scanf(%f%c%f, &value1, &op, &value2); switch (op)case +: printf(%.2fn, value1+value2); break;case -: printf(%.2fn, value1-value2); break;case *: printf(%.2fn, value1*value2); break;case /: if (fabs(value2)1e-6)printf(division by zero.n); elseprintf(%.2fn, value1/value2); break;defau

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論