C程序語言課件:第5章 選擇控制結(jié)構(gòu)_第1頁
C程序語言課件:第5章 選擇控制結(jié)構(gòu)_第2頁
C程序語言課件:第5章 選擇控制結(jié)構(gòu)_第3頁
C程序語言課件:第5章 選擇控制結(jié)構(gòu)_第4頁
C程序語言課件:第5章 選擇控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章 選擇控制結(jié)構(gòu)本章學(xué)習(xí)內(nèi)容 算法的描述方法 用于單分支控制的if語句 用于雙分支控制的if-else語句 用于多路選擇的switch語句 break語句在switch語句中的作用 關(guān)系運算符 條件運算符 邏輯運算符分治策略(Divide and Conquer Strategy )Problem: 準備早餐( Prepare a Breakfast)1.Start2.準備早餐3.End5.1生活中與計算機中的問題求解 (Problem Solving Process)1. Start2. 準備早餐 2.1 準備一個金槍魚三明治 2.2 準備一些薯條 2.3 沖一杯咖啡3. End分治策略

2、(Divide and Conquer Strategy )1. Start2.準備早餐 2.1 準備一個金槍魚三明治 2.1.1 拿來兩片面包 2.1.2 準備一些金槍魚醬 2.2 準備一些薯條 2.3 沖一杯咖啡3. End分治策略(Divide and Conquer Strategy )1. Start2.準備早餐 2.1 準備一個金槍魚三明治 2.1.1 拿來兩片面包 2.1.2 準備一些金槍魚醬 2.2 準備一些薯條 2.2.1 將土豆切成條 2.2.2 油炸這些土豆條 2.3 沖一杯咖啡3. End分治策略(Divide and Conquer Strategy )分治策略( D

3、ivide and Conquer Strategy )1. Start2.準備早餐 2.1 準備一個金槍魚三明治 2.1.1 拿來兩片面包 2.1.2 準備一些金槍魚醬 2.2 準備一些薯條 2.2.1 將土豆切成條 2.2.2 油炸這些土豆條 2.3 沖一杯咖啡 2.3.1 燒些開水放入杯中 2.3.2 在水杯中加入一些咖啡和糖3. End5.2算法的概念及其描述方法面向?qū)ο蟪绦?= 對象 + 消息面向過程的程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法計算機中的算法( Algorithm )為解決一個具體問題而采取的、確定的、有限的操作步驟,僅指計算機能執(zhí)行的算法A specific and step-b

4、y-step set of instructions for carrying out a procedure or solving a problem, usually with the requirement that the procedure terminate at some point5.2算法的概念及其描述方法算法的特性有窮性在合理的時間內(nèi)完成確定性,無歧義 如果x0,則輸出Yes;如果x0,則輸出No有效性 能有效執(zhí)行負數(shù)開平方?jīng)]有輸入或有多個輸入 有一個或多個輸出 5.2算法的概念及其描述方法算法的描述方法自然語言描述傳統(tǒng)流程圖(Flowchart)在1966年,Bohra

5、與 Jacopini 提出N-S結(jié)構(gòu)化流程圖1973年,美國學(xué)者I.Nassi 和 B.Shneiderman 提出偽碼(Pseudocode)表示流程圖(Flowchart)Flowchart represents algorithm graphically.Start/EndSymbolSemanticProcessInput/OutputTestConnectorFlow of activities計算機中的問題求解過程Example :買蘋果,計算價錢Calculate and display the price of a number of apples if the quantit

6、y in kg and price per kg are given. quantity pricePerkgpriceprice = quantity * pricePerkgInputProcessOutputFirst identify the input and output of the problem.順序結(jié)構(gòu)( Sequence Structure)給變量賦值賦值表達式語句 賦值表達式 ; price = quantity*pricePerkg;輸入輸出數(shù)據(jù)標準庫函數(shù)調(diào)用語句 scanf(%d, &quantity); scanf(%d, &pricePerkg); printf

7、(%d, price);ABC【例5.1】計算兩整數(shù)的最大值 num1 num2max?InputProcessOutputif - elseSingle SelectionDouble SelectionMultiple Selectionifif - else - if選擇結(jié)構(gòu)(分支結(jié)構(gòu)) (Selection Structure)5.3關(guān)系運算符與關(guān)系表達式Relational OperationDescriptionExamples of ExpressionValueLess than6 91 (true)=Less than or equal to5 Greater than2 6

8、0 (false)=Greater than or equal to9 = 51 (true)=Equal to7 = 50 (false)!=Not equal to6 != 51 (true)5.4用于單分支控制的條件語句(Single Selection)Step aconditionStep mStep nStep xtruefalsestep aconditionstep mstep nstep btruefalsePseudocode Structurestep aif startstep mstep nend_ifstep bif StatementThe structure i

9、s similar to single selection (flowchart)Syntax:if (expression)statement;orif (expression) statement1;statement2; 復(fù)合語句compound statement被當作一條語句看待表達式非0為真if StatementThe structure is similar to single selection (flowchart)Syntax:if (expression)statement;orif (expression) statement1;statement2; Dont fo

10、rget the braces !Dont forget the parentheses !#include main() int a, b, max; printf(Input a,b:); scanf(%d,%d, &a, &b); if (a b)max = a; if (a = b)max = b; printf(max = %dn, max);Input a,b: _Input a,b: 20 15_Input a,b: 20 15max = 20_【例5.1】計算兩整數(shù)的最大值 Pseudocode StructureStep aif startStep mStep nend_if

11、else startStep xStep yend_elseStep zStep aconditionStep mStep nStep ztruefalseStep xStep yStep aconditionStep mStep nStep ztruefalseStep xStep y5.5用于雙分支控制的條件語句( Double Selection)if - else StatementThe structure is similar to double selection (flowchart)Syntax:if (expression) statement1;else statemen

12、t2;or if (expression) statement1; statement3; else statement2; statement4; NoYesFlowchart: Calculate the MaximumInput a and bOutput maxa b?max bmax aStartEnd【例5.2】計算兩整數(shù)的最大值 scanf(%d,%d, &a, &b);if (a b) max = a;else max = b;Turn Flowchart to C ProgramNoYesInput a and bOutput maxa b?max bmax aStartEn

13、d【例5.2】計算兩整數(shù)的最大值 printf(max = %dn, max);#include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (a b) max = a; else max = b; printf(max = %d, max); if (a b) max = a; if (a = b) max = b;【例5.2】計算兩整數(shù)的最大值 #include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (

14、a b) max = a; else max = b; printf(max = %d, max); max = a b ? a : b;表達式1 ? 表達式2 : 表達式35.6條件運算符和條件表達式【例5.3】5.7用于多分支控制的條件語句(Multiple Selection)Multi-way ifStep aif (expression1)Step m if (expression2) Step n Step zStep aexpression1Step mStep nStep ztruefalseexpression2truefalseStep aexpression1Step m

15、Step nStep ztruefalseexpression2truefalse5.7用于多分支控制的條件語句(Multiple Selection)Cascaded ifStep aif (expression1) Step m else if (expression2) Step n else Step x Step zStep aexpression1Step mStep nStep ztruefalseexpression2truefalseStep xStep aexpression1Step mStep nStep ztruefalseexpression2truefalseSt

16、ep x5.8用于多路選擇的switch語句 The structure is similar to multiple selection (flowchart)switch (expression) case value1 :statement1;break;case value2 :statement2;break;default :statementX;break;Dont forget the braces !Dont forget the colons !Dont forget the blank ! Important Rule !switch (expression) case

17、value1 :statement1;break;case value2 :statement2;break;default :statementX;break;Must be int or char!5.8用于多路選擇的switch語句 注意!Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Assume month = 1, so

18、this step will be executed. Later case is terminated here. Jump to January_JanuaryEnd _5.8用于多路選擇的switch語句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);this step will be executed. Later Marc

19、h_MarchEnd _Assume month = 3, so case is terminated here. Jump to 5.8用于多路選擇的switch語句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Nowwhat will happen if this break is taken out from the pro

20、gram?5.8用于多路選擇的switch語句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);No more !5.8用于多路選擇的switch語句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(March

21、n);break;default:printf(Othersn);break; printf(End);this step will be executed. Later February_March _Assume month = 2, so case is terminated here. Jump to End _execution continues. Thus, this step is executed . So 5.8用于多路選擇的switch語句 Example: switch (month) case 1:printf(Januaryn);break;case 2:print

22、f(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Nowwhat will happen if these breaks are taken out from the program?And if month = 1 ?And if month = 4 ?5.8用于多路選擇的switch語句 最好不省略!【例5.5】 計算器程序編程設(shè)計一個簡單的計算器程序,要求用戶從鍵盤輸入如下形式的表達式: 操作數(shù)1 運算符op 操作數(shù)2 然后,計算并輸出表達式的值 指定的運算符為 加(+)

23、 減(-) 乘(*) 除(/) main()int data1, data2; /*定義兩個操作符*/char op; /*定義運算符*/printf(Please enter the expression:);scanf(%d%c%d, &data1, &op, &data2); /*輸入運算表達式*/switch (op) case +: /*處理加法*/printf(%d + %d = %dn, data1, data2, data1 + data2); break;case -: /*處理減法*/printf(%d - %d = %dn, data1, data2, data1 - d

24、ata2);break;case *: /*處理乘法*/printf(%d * %d = %dn, data1, data2, data1 * data2); break;case /: /*處理除法*/if (0 = data2) printf(Division by zero!n);else printf(%d/%d = %dn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.5】 Why?注釋掉會怎樣?思考題語句if(0=data2)的必要性避免除零錯誤1998年11月,科學(xué)美國人雜志

25、描述了美國導(dǎo)彈巡洋艦約克敦號上的一起事故,除零錯導(dǎo)致軍艦推進系統(tǒng)的關(guān)閉為什么不用if (data2 = 0)?如果要求輸入的算術(shù)表達式中的操作數(shù)和運算符之間可以加入任意多個空格符,那么程序如何修改?main()int data1, data2; char op; printf(Please enter the expression:);scanf(%d %c%d, &data1, &op, &data2); /* %c前有一個空格 */ switch (op) case +:printf(%d + %d = %dn, data1, data2, data1 + data2); break;ca

26、se -:printf(%d - %d = %dn, data1, data2, data1 - data2);break;case *:printf(%d * %d = %dn, data1, data2, data1 * data2); break;case /:if (0 = data2) printf(Division by zero!n);else printf(%d/%d = %dn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.5】 空格思考題如果要求對浮點數(shù)進行運算,那么程

27、序如何修改?修改例5.5程序,使其能進行浮點數(shù)的算術(shù)運算,同時允許使用字符*、x與X作為乘號,并且允許輸入的算術(shù)表達式中的操作數(shù)和運算符之間可以加入任意多個空格符。 main()float data1, data2; char op; printf(Please enter the expression:);scanf(%f %c%f, &data1, &op, &data2); switch (op) case +:printf(%f + %f = %fn, data1, data2, data1 + data2); break;case -:printf(%f - %f = %fn, da

28、ta1, data2, data1 - data2);break;case *: case x:case X:printf(%f * %f = %fn, data1, data2, data1 * data2); break;case /:if (fabs(data2) = 1e-7) /* 實數(shù)與0比較 */ printf(Division by zero!n);else printf(%f/%f = %fn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.6】 取絕對值函數(shù)switch語

29、句和else-if語句的比較else-if比switch的條件控制更強大一些else-if可以依照各種邏輯運算的結(jié)果進行流程控制switch只能進行=判斷,并且只能是整數(shù)判斷csae后面的常量表達式不能用一個區(qū)間表示,也不 能出現(xiàn)任何運算符。 例: csae 90=score=100:語句; case 90100:語句;switch比else-if更清晰兩者都要盡量避免用得過多、過長,尤其不要嵌套得太多,否則,會大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護,易出錯。#include main( ) int x,y; scanf(“%d”, &x); if (x0) y=-1; else i

30、f (x=0) y=0; else y=1; printf(“x=%d, y=%d”, x, y);#include main( ) int x,y; scanf(“%d”, &x); if(x=0) if(x=0) y = 0; else y = 1; else y=-1; printf(“x = %d, y = %d”, x, y); -1 (x0)有一函數(shù): -1 (x0)編一程序,輸入一個x值,輸出y值。Symbol Description & 與(AND)當且僅當兩者都為真,則結(jié)果為真 | 或(OR) 只要兩者中有一個為真,結(jié)果就為真 ! 非(NOT)aba & ba | b!a!b0000110101101001011111005.9邏輯運算符和邏輯表達式( Logical Operators )! & |高低ch是大寫英文字母(ch = A) &

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論