版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第4講 選擇結構程序設計,要設計選擇結構程序,要考慮兩個方面的問題:一是在C語言中如何來表示條件,二是在C語言中實現(xiàn)選擇結構用什么語句。 在C語言中表示條件,一般用關系表達式或邏輯表達式,實現(xiàn)選擇結構用if語句或switch語句。 4.1 if語句 4.2 switch語句 4.3 選擇結構程序舉例,4.1 if 語句,if 語句是用來判斷所給定的條件是否滿足,根據(jù)判定的結果(真或假)決定執(zhí)行給定的某種操作之一。,一、if 語句的形式1單邊選擇結構,格式: if (表達式) 語句,執(zhí)行過程:,判斷條件,表達式取值非0,即條件成立,執(zhí)行語句后繼續(xù)向下執(zhí)行,表達式取值為0,即條件不成立,跳過語句向
2、下執(zhí)行,P,語句,(入口),(出口),Y,N,一、if 語句的形式1單邊選擇結構,main( ) int x,y=0; scanf(%d, ,程序運行后,當從鍵盤上輸入3時,程序運行的結果是多少?,程序運行后,當從鍵盤上輸入-5時,程序運行的結果是多少?,x=3,y=7,x=-5,y=0,例如,求: y=,2x+1 x=0 0 x0,二、if 語句的形式2雙邊選擇結構,格式: if (表達式) 語句1 else 語句2,執(zhí)行過程:,判斷條件,表達式取值非0,即條件成立,執(zhí)行語句1后繼續(xù)向下執(zhí)行,表達式取值為0,即條件不成立,跳過語句1執(zhí)行語句2后向下執(zhí)行,P,語句1,(入口),(出口),Y,N
3、,語句2,二、if 語句的形式2雙邊選擇結構,main( ) int x,y; scanf(%d, ,程序運行后,當從鍵盤上輸入3時,程序運行的結果是多少?,程序運行后,當從鍵盤上輸入-5時,程序運行的結果是多少?,x=3,y=7,x=-5,y=26,例如,求: y=,2x+1 x=0 x2+1 x0,這是一個雙邊結構,三、多層選擇結構,格式: if (表達式1) 語句1 else if (表達式2) 語句2 else if (表達式3) 語句3 : : : : else if (表達式n) 語句n else 語句n+1,執(zhí)行過程: 依次計算各表達式的值,若表達式之值為非0,即條件成立執(zhí)行其后
4、的語句后,跳過其它語句,向下執(zhí)行;若表達式之值為0,即條件不成立,則繼續(xù)判斷其它條件;當所有的條件都不成立時,執(zhí)行語句n+1后繼續(xù)向下執(zhí)行。,三、多層選擇結構,表達式1,這是一個單邊結構,單邊選擇結構舉例按升序輸出兩個實數(shù),main( ) float a,b,t; scanf(%f,%f, ,程序運行后,如果從鍵盤上輸入6,2.8,則程序運行的順序為:,程序運行后,如果從鍵盤上輸入2.8,6,則程序運行的順序為:,2.80, 6.00 End,2.80, 6.00 End,兩個變量交換數(shù)據(jù)的實現(xiàn)方法,變量a,3,變量b,5,注意:變量a,b交換內容不能簡單地用a=b;b=a;來實現(xiàn),正確的方法
5、是借助一個中間變量(如t)來實現(xiàn),先執(zhí)行t=a;將a的值保存在中間變量t中,再執(zhí)行a=b;將b的值賦給變量a,最后執(zhí)行b=t;將t中保存的變量a的原來值賦給變量b,main( ) float a,b,t; scanf(%f,%f, ,復合語句及其花括號的使用,main( ) float a,b,t; scanf(%f,%f, ,有花括號時程序的運行順序 (假設從鍵盤上輸入2.8, 6),2.80, 6.00 End,復合語句及其花括號的使用,main( ) float a,b,t; scanf(%f,%f, ,去掉花括號時程序的運行順序 (假設從鍵盤上輸入2.8, 6),6.00, 隨機值 E
6、nd,復合語句及其花括號的使用,將前2個分號改為逗號時程序的運行情況 (假設從鍵盤上輸入2.8, 6),main( ) float a,b,t; scanf(%f,%f, ,2.80, 6.00 End,復合語句及其花括號的使用,將前2個分號改為逗號時程序的運行情況 (假設從鍵盤上輸入2.8, 6),main( ) float a,b,t; scanf(%d,%d, ,2.80, 6.00 End,結論:將條件成立時要進行的所有操作變成一個語句,if 語句的嵌套,一般形式: if (條件1 ) if (條件2 ) 語句1 else 語句2 else if (條件3) 語句3 else 語句4,
7、在if 語句中又包含一個或多個if 語句,稱為if 語句的嵌套,if 與 else 的配對關系:從最內層開始,else 總是與它上面最近的且尚未配對的if 配對。,求分段函數(shù)的值,1 (x0) 0 (x=0) -1 (x0),程序分析:要對x 的值判斷之后計算y 的值,要用到選擇結構??紤]到要進行兩次判斷,因而使用單邊或雙邊選擇結構都不能很好地解決這一問題,應使用多層選擇結構或選擇結構的嵌套。,y=,根據(jù)所輸入的x之值,求:,這是一個嵌套結構,用if 嵌套結構求分段函數(shù)的值,main ( ) int x,y; scanf(%d, ,/* x=0不成立,即x0 */,/* x=0成立且x0不成立
8、,即x=0 */,從鍵盤上輸入2時程序的運行順序,x=2,y=1,用多層選擇結構求分段函數(shù)的值,main ( ) int x,y; scanf(%d, ,/* x0和x=0都不成立,即x0 */,/*x0不成立再判斷x=0是否成立*/,從鍵盤上輸入2時程序的運行順序,x=2,y=1,條件運算符,條件運算符(三目): ? : (表達式1)?(表達式2):表達式3) 條件運算符的結合性: 自右向左 條件運算符的執(zhí)行:先計算表達式1之值,若條件表達式的值非0(即條件成立),計算表達式2之值并將該值作為條件表達式之值;若表達式1的值為0(即條件不成立),計算表達式3之值并將表達式3之值作為整個條件表達
9、式的值。,條件運算符的優(yōu)先等級: 高于賦值和逗號運算符,比其它運算符都低,條件運算符使用舉例,有如下程序: main( ) int a=3,b=4,c; c=ab?a:b; printf(max=%dn,c); ,語句:c=ab?a:b;執(zhí)行以后,變量c中存放的是 變量a,b中的最大值,輸入一個字母并將其轉換為小寫(小寫不變),main () char ch ; scanf(%c, printf (%cn,ch) ,要求掌握的兩點內容: 掌握條件運算符的使用。 掌握判斷大寫字母或小寫字母的方法。,1、在嵌套使用if語句時,C語言規(guī)定else總是 A) 和之前與其具有相同縮進位置的if配對 B)
10、 和之前與其最近的if配對 C) 和之前與其最近的且不帶else的if配對 D) 和之前的第一個if配對 2、設變量x和y均已正確定義并賦值。以下if語句中,編譯產生錯誤的是 A) if(x+); B) if(xy ,2006-9,2007-4,3、有以下計算公式 sqrt(x) (x=0) y= sqrt(-x) (x=0)y=sqrt(x); B)y=sqrt(x) elsey=sqrt(-x); if(x=0)y=sqrt(x); D)y=sqrt(x=0?x:-x); if(x main() inta,b,c,t1,t2; scanf(%d%d%d, ,2007-9,2007-9,a:
11、b c:t1,5、若變量已經正確定義,有以下程序段 inta=3,b=5,c=7; if(ab)a=b; c=a; if(c!=a)c=b; printf(%d,%d,%dn,a,b,c); 其輸出的結果是 A)程序段有語法錯B)3,5,3C)3,5,5D)3,5,7 6、有以下程序段 inta,b,c; a=10;b=50;c=30; if(ab)a=b, b=c;c=a; printf(a=%db=%dc=%dn,a,b,c); 程序的輸出結果是 A)a=10b=50c=10B)a=10b=50c=30 C)a=10b=30c=10D)a=50b=30c=50,2008-4,2008-9,
12、7、有以下程序 #include main() intx=1,y=2,z=3; if(xy) if(yz)printf(%d, +z); elseprintf(%d, +y); printf(%dn, x+); 程序的運行結果是 A)331B)41C)2D)1,2008-9,8、以下是if語句的基本形式: if(表達式)語句 其中表達式 A)必須是邏輯表達式 B)必須是關系表達式 C)必須是邏輯表達式或關系表達式 D)可以是任意合法的表達式,2009-3,9、有以下程序 #include main( ) intx; scanf(%d, 程序運行時,輸入的值在哪個范圍才會有輸出結果 A)不等于1
13、0的整數(shù) B)大于3且不等于10的整數(shù) C)大于3或等于10的整數(shù) D)小于3的整數(shù),2009-3,10、有以下程序 #include main( ) inta=1, b=2, c=3, d=0; if(a=1 程序運行后輸出結果是 A)1,2,3 B)1,3,2 C)1,3,3 D)3,2,1,2009-3,11、 設有定義:inta=1,b=2,c=3;,以下語句中執(zhí)行效果與其它三個不同的是 A)if(ab)c=a,a=b,b=c; B)if(ab)c=a,a=b,b=c; C)if(ab)c=a;a=b;b=c; D)if(ab)c=a;a=b;b=c; 12、以下程序段中,與語句:k=
14、ab?(bc?1:0):0;功能相同的是 A)if(ab),2009-9,2009-9,填空題 請補充main函數(shù),該函數(shù)的功能是:從鍵盤輸入一個長整數(shù),如果這個數(shù)是負數(shù),則取它的絕對值,并顯示出來。例如,輸入:-3847652,結果為:3847652。 注意:部分源程序給出如下。 請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。 試題程序: #include #include #include void main() long int n; system(CLS); printf(Enter the data:n); scanf(【1】)
15、; printf(* the absolute value *n); if(n0) 【2】 printf(nn); printf(【3】); ,填空題 請補充main函數(shù),其功能是:從鍵盤輸入3個整數(shù),然后找出最大的數(shù)并輸出。 例如,輸入:12,45,43,最大值為45。 試題程序: #include #include #include void main() int a, b, c,max; system(CLS); scanf(%d,%d,%d, ,4.2 switch 語句(開關語句、多分支選擇語句),switch 語句的格式: switch (表達式) case 常量1 : 語句1;
16、break; case 常量2 : 語句2; break; case 常量3 : 語句3; break; case 常量n : 語句n;break; default : 語句n+1 ; ,執(zhí)行過程: 先計算表達式之值,如果與某個case語句中的常量的值匹配(即相同),則執(zhí)行其后的語句;若所有的case語句中的常量的值都 不能與之匹配,則執(zhí)行default后的語句n+1。,根據(jù)表達式的值找入口,注意:則執(zhí)行完入口語句后,則自動轉到下一個case后面的語句執(zhí)行;如果語句中有break;,則執(zhí)行完一個入口語句后跳出switch選擇結構。,switch 語句流程圖(有break;語句),表達式,語句1
17、,語句2,語句3,語句n,=常量1,=常量2,=常量3,=常量n,語句n+1,=其它,switch 語句流程圖(無break;語句),表達式,語句1,語句2,語句3,語句n,=常量1,=常量2,=常量3,=常量n,語句n+1,=其它,switch語句的使用舉例1:求分段函數(shù)的值,1+x x=1 2*x x=2 x*x x=3 x 其它,y=,求分段函數(shù)的值:,main( ) int x,y; scanf(%d, ,用switch語句求分段函數(shù)的值程序,注意:關鍵字case后面一定要留空格,且case后面應為常量。,程序運行后,如果從鍵盤上輸入3,則程序運行的順序和結果如下:,x=3,y=9,這
18、是一個switch語句,switch 語句使用說明,各個語句后如果沒有break;語句,則執(zhí)行了相應的操作后,會自動轉到下一個case后面的語句執(zhí)行。 可以使多個case共用同一組執(zhí)行語句。 case后面的表達式不能相同。 各個case和default語句的順序可以改變。,案例4.1 從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score90,等級為A;80score main()int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, ,switch語句應用例2:,case 8: printf(grade=B
19、n); break; case 7: printf(grade=Cn); break; case 6: printf(grade=Dn); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“grade=En”); break; default: printf(“The score is out of range!n”); 程序演示 程序運行情況如下: Input a score(0100): 85 grade=B,4.3 選擇結構程序舉例,求一元二次方程的根 小學生做算術題 數(shù)字拆分 判斷字母、數(shù)字,求一元二次方程的根程序,#include main( ) float a,b,c,disc,x1,x2,real,imag; scanf(%f,%f,%f, ,小學生解100以內加法問題,#include #include main( ) int a,b,c; a=rand( )%100; b=rand( )%100; scanf(%d, ,/* 產生一個099之間的隨機數(shù) */,/* 再產生一個099之間的隨機數(shù) */,/* 為學生顯示題目 */,/* 學生輸入答案 */,printf(%d + %d = ?,a,b);,將一個三位數(shù)進行拆分,#incl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共享藥箱活動策劃方案(3篇)
- 舒膚佳活動促銷策劃方案(3篇)
- 梅州水貼施工方案(3篇)
- 2025年物流運輸管理與服務操作手冊
- 2025年大學大三(應急技術與管理)應急演練組織試題及答案
- 2025年中職(寵物醫(yī)療技術)寵物疾病診療試題及答案
- 2025年大學大一(機械電子工程)機械設計基礎試題及答案
- 2025年中職(市場營銷)產品推銷技巧階段測試試題及答案
- 2026年注冊土木工程師(水工結構)(專業(yè)知識考試上)試題及答案
- 2025年大學大三(生態(tài)學)海洋生態(tài)學階段測試題及答案
- 2026年及未來5年中國鍛造件行業(yè)市場深度分析及發(fā)展前景預測報告
- 2025年荊楚理工學院馬克思主義基本原理概論期末考試真題匯編
- 2026年恒豐銀行廣州分行社會招聘備考題庫帶答案詳解
- 紋繡風險協(xié)議書
- 【語文】湖南省長沙市雨花區(qū)桂花樹小學小學一年級上冊期末試卷(含答案)
- 貴港市利恒投資集團有限公司關于公開招聘工作人員備考題庫附答案
- 2026年及未來5年市場數(shù)據(jù)中國大型鑄鍛件行業(yè)市場深度分析及投資戰(zhàn)略數(shù)據(jù)分析研究報告
- 冬季防靜電安全注意事項
- 2025版煤礦安全規(guī)程題庫
- 2025寧夏旅游投資集團有限公司招聘16人(第二批)筆試歷年參考題庫附帶答案詳解
- 村委會工作人員招聘面試常見問題及解答
評論
0/150
提交評論