版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章 選擇結(jié)構(gòu)程序設(shè)計,5.1 if語句 5.2 switch語句 5.3 goto語句 5.4 程序設(shè)計舉例,5.1 if語句,5.1.1 單分支if語句,格式: if (條件表達式) 語句 功能: 先計算條件表達式的值, 如果條件表達式的值為真(非0), 執(zhí)行語句(選擇體), 否則執(zhí)行if語句的下一條語句。 NS圖: 見圖5 - 1 之(a)。,圖 5 - 1,例如: (1) 如果x0, 輸出x。 if(x0) printf(x=%f, x); (2) 如果a等于b, 輸出a=b。 if(a=b) printf(%s, a=b);,說明: (1) 條件表達式必須用小括號括起, 同時注意區(qū)
2、分作為條件的表達式與作為數(shù)值的表達式。 (2) if語句中要選擇執(zhí)行的語句稱為選擇體, 選擇體從語法上只能是一條語句, 如果選擇體需多條語句描述, 必須采用復(fù)合語句。 ,例如: 如果x0, 求x的平方根。 (1) 將結(jié)果放入變量y 中; (2) 輸出x的平方根。 if (x0) y=sqrt(x); printf(平方根=%f, y); (3) 不管選擇體多么復(fù)雜, 包含多少條語句, if語句邏輯上是一條語句, 后面的雙分支if語句、 多分支if語句、 switch語句、 循環(huán)語句均是邏輯上的一條語句。,例 5 1 計算y, 。 提示: x等于1函數(shù)無定義。 程序如下: /*程序5 - 1,
3、求函數(shù)值*/ main( ) float x; float y; printf(請輸入x: ); scanf(%f, 輸入數(shù)據(jù): 1.2 運行結(jié)果: x= 1.20, y= 11.00,5.1.2 雙分支if語句,格式: if (條件表達式) 語句1 else 語句2 功能: 先計算條件表達式的值, 如果條件表達式的值為真(非0), 執(zhí)行語句1(選擇體1), 否則執(zhí)行語句2(選擇體2), if語句執(zhí)行完后執(zhí)行if 語句的下條語句。 NS圖: 見圖5 - 1之(b)。,例如: (1) 如果x0, 輸出x大于0, 否則輸出x小于等于0。 if(x0) printf(x大于0); else prin
4、tf(x小于等于0); (2) 如果a等于b, 輸出a等于b, 否則輸出a不等于b。 if(a=b) printf(a等于b); else printf(“a不等于b);,(3) 求兩個數(shù)x、 y的最大值max。 if(xy) max=x; else max=y; (4) 判斷整數(shù)i 的奇偶性。 if(i%2= =0) printf(偶數(shù)n); else printf(奇數(shù)n); ,(1) 雙分支if語句形式上相當(dāng)于單分支if語句擴展else分支而來, else分支稱為else子句, else子句不能單獨存在。 (2) 在其它高級語言中特別強調(diào)else子句前不能有分號, C語言中else子句前
5、必有分號。 (3) 選擇體如為多條語句同樣必須采用復(fù)合語句。 (4) 可采用條件運算等價實現(xiàn), 從而以表達式的形式參與運算。 例如, 上例中三個雙分支if語句用條件運算描述: (x0)?printf(x大于0): printf(x小于等于0) (a=b)?printf(a等于b): printf(a不等于b) (xy)?max=x: max=y,(5) 單分支if 語句可認(rèn)為是雙分支if 語句缺省else子句的特殊情況, 一條雙分支if語句可用兩條單分支if語句實現(xiàn)。 例如, 前例中三條雙分支if語句改用單分支if語句實現(xiàn): if (x0) printf(x大于0); if (xy) max=
6、x; if(x=y) max=y;,例 5 2 計算,/*程序 5 - 2, 求函數(shù)值*/ main( ) float x; float y; printf(請輸入x: ); scanf(%f, 輸入數(shù)據(jù): 1.2 運行結(jié)果: x= 1.20, y= 2.00,例 5 3 輸入兩個數(shù), 求兩個數(shù)的最大值、最小值。 數(shù)據(jù)分析: 輸入量: 兩個數(shù)x、 y, float 輸出量: 最大值max、 最小值min, float 算法分析: 輸入兩個數(shù)x、 y 比較兩個數(shù)x、 y 大小 如果xy, max=x, min=y 如果xy, max=y, min=x 輸出最大值max、 最小值min,/*程序
7、5 - 3, 求兩個數(shù)的最大值、 最小值*/ main( ) float x, y; float max, min; printf(請輸入兩個數(shù)x, y: ); scanf(%f, %f, 輸入數(shù)據(jù): 1.2, 2.54 運行結(jié)果: max= 2.54, min= 1.20,5.1.3 多分支if語句,一般形式: if (條件表達式1) if (條件表達式2) 語句1 else 語句2 else if (條件表達式3) 語句3 else 語句4,圖 5 - 2,例 5 4 計算y,/*程序 5 - 4, 求函數(shù)值*/ main( ) float x; float y; printf(請輸入x:
8、 ); scanf(%f, 輸入數(shù)據(jù): 12.345 運行結(jié)果: x= 12.3450, y= 1.00,例 5 5 將百分制成績轉(zhuǎn)成五級記分(A、 B、 C、 D、E)。,if (cj=90) ch=A; else if (cj=80) ch=B; else if (cj=70) ch=C; else if (cj=60) ch=D; else ch=E;,說明: ()多分支if語句中, else子句總是與最近的if 配套。 (2) 通過加花括號、 加注釋來明確 else與if的配套關(guān)系。 (3) 多分支if語句可用多條單分支、 雙分支if 語句等價實現(xiàn)。,例如: 例 5 4 用單分支if語
9、句處理: if (x0) y=1; 例 5 5 用單分支if語句處理: if (cj=90) ch=A; if (cj=80,5.2 switch語句,switch語句稱為開關(guān)語句, 用于多分支選擇的一種特殊情況的處理, 即每個分支、 每種情況通過一個表達式取不同的值(選擇常量、 情況常量)來描述, 相當(dāng)于PASCAL語言中的CASE語句。,格式: switch (選擇表達式) case 常量1: 語句1 case 常量2: 語句2 case 常量n: 語句n default: 語句n+1 ,功能: 計算選擇表達式的值, 當(dāng)表達式的值與某一個case后面的常量相等、 相匹配時,就執(zhí)行此case
10、后面的處理語句。執(zhí)行完一個case后面的語句后, 流程控制轉(zhuǎn)移到下一個case處繼續(xù)執(zhí)行。 若所有case中的常量都不與選擇表達式的值相匹配, 就執(zhí)行default后面的語句。,NS圖: 見圖 5 3。,圖 5 3,例 5 6 根據(jù)輸入的字符, 輸出相應(yīng)的字符串。 t-Turbo C b-Borland C m-Microsoft C v-Visual C,/*程序5 6, 根據(jù)輸入的字符, 輸出相應(yīng)的字符串*/ main( ) char ch; scanf(%c, ,例 5 7 將例 5 5 用switch語句實現(xiàn)。,switch (int)(cj/10) /*注意選擇表達式的構(gòu)造*/ ca
11、se 10: case 9: ch=A; break; case 8: ch=B; break; case 7: ch=C; break; case 6: ch=D; break; default: ch=E; ,說明: (1) 選擇表達式可以是任何表達式, 一般為整型、 字符型、 枚舉型表達式。 (2) 選擇表達式必須用小括號括起。 (3) case后可以是常量表達式, 每一個case后的值必須互不相同, 否則會出現(xiàn)二義性。 (4) 一種情況處理完后, 一般應(yīng)使程序的執(zhí)行流程跳出switch結(jié)構(gòu), 終止switch語句的執(zhí)行, 這可借助break語句完成。,break語句形式為: break
12、; 一般使用的switch語句形式為: switch (選擇表達式) case 常量1: 語句1break; case 常量2: 語句2break; case 常量n: 語句nbreak; default: 語句n+1 ,最后一種情況處理中可以不加break語句。 (5) 在上述switch語句的一般使用形式下, case出現(xiàn)的次序不影響執(zhí)行結(jié)果。 (6) 當(dāng)多個常量代表一種情況時, 出現(xiàn)在前面case中的情況處理無語句, 這實際上也是多個case共用一組執(zhí)行語句。 (7) 可以沒有default子句。 (8) switch語句描述的是多分支選擇的一種特殊情況, 可用if語句等價實現(xiàn), 在例5
13、-5的對比分析中可注意到這樣一個事實。,5.3 goto語句,格式: goto 語句標(biāo)號; 功能: 將程序的執(zhí)行流程無條件轉(zhuǎn)移至語句標(biāo)號所標(biāo)識的位置語句處執(zhí)行。 說明: (1) C語言的語句標(biāo)號用標(biāo)識符表示, 它僅僅表示goto語句轉(zhuǎn)移的目標(biāo)地址。 (2) 帶有標(biāo)號的語句稱為標(biāo)號語句, 標(biāo)號與語句之間用冒號分隔。 標(biāo)號語句僅對goto語句有意義。 (3) goto語句往往與if 語句配套使用構(gòu)成一種遠(yuǎn)距離的轉(zhuǎn)移。,(4) if語句加goto語句還可構(gòu)成循環(huán)。 例如: x=0; flag: if(x10) x+; goto flag; (5) 不允許使用goto語句把程序控制轉(zhuǎn)移到其它函數(shù)內(nèi)部,
14、 不允許使用goto語句把程序控制轉(zhuǎn)向數(shù)據(jù)說明語句。 (6) 盡量少使用goto語句, 即使使用, 一般也不要將程序執(zhí)行流程向后轉(zhuǎn)移。,5.4 程序設(shè)計舉例,例 5 - 8 求三個數(shù)的最大值。 數(shù)據(jù)分析: 輸入量: 三個數(shù)x、 y、 z, float 輸出量: max, float 算法分析: 算法一: 直接求最大值。 算法二: 先假定第一個數(shù)是最大值, 將其它數(shù)依次與最大值比較, 如比最大值還大, 這個數(shù)是新的最大值。,程序一: /*程序5 7-1, 求三個數(shù)的最大值*/ main( ) float x, y, z; float max; clrscr( ); printf(請輸入三個數(shù)x,
15、 y, z: ); scanf(%f, %f, %f, ,程序二: /*程序5 7 2, 求三個數(shù)的最大值*/ main( ) float x, y, z; float max; clrscr( ); printf(請輸入三個數(shù)x, y, z: ); scanf(%f, %f, %f, 輸入數(shù)據(jù): 12.34, 2.18, 10.68 運行結(jié)果: x=12.34, y= 2.18, z=10.68, max=12.34,例 5 9 由三邊求三角形面積和周長。,/*程序 5 9, 求三角形的面積和周長 */ main( ) float a, b, c; int flag; /*為1, 三邊能構(gòu)成
16、三角形*/ float hl; float s, l; clrscr( ); printf(請輸入三角形的三邊: ); scanf(%f, %f, %f, ,if (flag) l=a+b+c; hl=0.5*l; s=sqrt(hl*(hla)*(hlb)*(hlc); printf(面積=%5.2f, 周長=%5.2f n, s, l); else printf(不能構(gòu)成三角形?。? 輸入數(shù)據(jù): 3, 4, 5 運行結(jié)果: 面積= 6.00, 周長=12.00 輸入數(shù)據(jù): 1, 1, 5 運行結(jié)果: 不能構(gòu)成三角形!,例 5 10 求方程ax2+bx+c=0的實根。,圖 5 4,程序如下:
17、 /*程序 5 10, 求方程a*x*x+b*x+c=0的實根*/ main( ) float a, b, c; float d; float x; float x1, x2; clrscr( ); printf(請輸入方程系數(shù)a、 b、 c : ); scanf(%f, %f, %f, ,else x= -c/b; printf(方程的根=%6.2fn, x); else d=b*b-4*a*c; if (d=0) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(第一個根=%6.2f, 第二個根=%6.2f n, x1, x2); els
18、e printf(方程無實根!n); 輸入數(shù)據(jù): 0, 2, 1 運行結(jié)果: 方程的根= -0.50 輸入數(shù)據(jù): 1, 2, 3 運行結(jié)果: 方程無實根!,例 5 11 輸入年號, 判斷是否為閏年。輸入月號, 輸出每月天數(shù)。 數(shù)據(jù)分析: 輸入量: 年號year, 月號month, int 中間量: 閏年標(biāo)志leap, int 輸出量: 無, 直接輸出 算法提示: 閏年用(year%400=0)(year%4=0 int leap; printf(輸入年號: ); scanf(%d, switch (month) case 1: 3: 5:,7: 8: 10: 12: printf(%d年%d月
19、的天數(shù)為%d天n, year, month, 31); break; 4: 6: 9: 11: printf(%d年%d月的天數(shù)為%d天n, year, month, 30); break; 2: if (leap) printf(%d年%d月的天數(shù)為%d天n, year, m onth, 29); else printf(%d年%d月的天數(shù)為%d天n, year, month, 28); 運行結(jié)果: 輸入年號: 1999 1999年不是閏年 輸入月號: 12 1999年12月的天數(shù)為31天,例 5 12 兩個數(shù)的+、 -、 *、 /簡易計算器程序。 數(shù)據(jù)分析: 輸入量: 兩個數(shù)x、 y, float 運算符op, char 輸出量: 計算結(jié)果j, float 算法提
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年阜陽幼兒師范高等??茖W(xué)校高職單招職業(yè)適應(yīng)性考試備考試題帶答案解析
- 2026年安徽商貿(mào)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 2026年合肥財經(jīng)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試參考題庫有答案解析
- 2026年廣東舞蹈戲劇職業(yè)學(xué)院單招綜合素質(zhì)筆試備考試題帶答案解析
- 土地合作開發(fā)協(xié)議2025年資金投入
- 2026年蚌埠學(xué)院高職單招職業(yè)適應(yīng)性考試模擬試題帶答案解析
- 2026年湖北科技學(xué)院繼續(xù)教育學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 2026年海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 2026年安徽揚子職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題有答案解析
- 2026年蚌埠學(xué)院單招綜合素質(zhì)考試參考題庫帶答案解析
- 2025年濟寧職業(yè)技術(shù)學(xué)院毛澤東思想和中國特色社會主義理論體系概論期末考試模擬題必考題
- m的認(rèn)主協(xié)議書
- 2025年及未來5年市場數(shù)據(jù)中國機電安裝工程市場調(diào)查研究及行業(yè)投資潛力預(yù)測報告
- kv高壓線防護施工方案
- 住建局執(zhí)法證考試題庫及答案2025
- 主管護師聘任述職報告
- AI搜索時代:從GEO到AIBE的品牌新藍圖
- 產(chǎn)品知識培訓(xùn)會議總結(jié)
- GB/T 26160-2010中國未成年人頭面部尺寸
- 《凝聚態(tài)物理學(xué)新論》配套教學(xué)課件
- 【高等數(shù)學(xué)練習(xí)題】蘭州職業(yè)技術(shù)學(xué)院專升本自考真題匯總(附答案解析)
評論
0/150
提交評論