版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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: 準(zhǔn)備早餐( Prepare a Breakfast)1.Start2.準(zhǔn)備早餐3.End5.1生活中與計算機(jī)中的問題求解 (Problem Solving Process)1. Start2. 準(zhǔn)備早餐 2.1 準(zhǔn)備一個金槍魚三明治 2.2 準(zhǔn)備一些薯條 2.3 沖一杯咖啡3. End分治策略
2、(Divide and Conquer Strategy )1. Start2.準(zhǔn)備早餐 2.1 準(zhǔn)備一個金槍魚三明治 2.1.1 拿來兩片面包 2.1.2 準(zhǔn)備一些金槍魚醬 2.2 準(zhǔn)備一些薯條 2.3 沖一杯咖啡3. End分治策略(Divide and Conquer Strategy )1. Start2.準(zhǔn)備早餐 2.1 準(zhǔn)備一個金槍魚三明治 2.1.1 拿來兩片面包 2.1.2 準(zhǔn)備一些金槍魚醬 2.2 準(zhǔn)備一些薯條 2.2.1 將土豆切成條 2.2.2 油炸這些土豆條 2.3 沖一杯咖啡3. End分治策略(Divide and Conquer Strategy )分治策略( D
3、ivide and Conquer Strategy )1. Start2.準(zhǔn)備早餐 2.1 準(zhǔn)備一個金槍魚三明治 2.1.1 拿來兩片面包 2.1.2 準(zhǔn)備一些金槍魚醬 2.2 準(zhǔn)備一些薯條 2.2.1 將土豆切成條 2.2.2 油炸這些土豆條 2.3 沖一杯咖啡 2.3.1 燒些開水放入杯中 2.3.2 在水杯中加入一些咖啡和糖3. End5.2算法的概念及其描述方法面向?qū)ο蟪绦?= 對象 + 消息面向過程的程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法計算機(jī)中的算法( Algorithm )為解決一個具體問題而采取的、確定的、有限的操作步驟,僅指計算機(jī)能執(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í)行負(fù)數(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計算機(jī)中的問題求解過程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)給變量賦值賦值表達(dá)式語句 賦值表達(dá)式 ; price = quantity*pricePerkg;輸入輸出數(shù)據(jù)標(biāo)準(zhǔn)庫函數(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)系表達(dá)式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被當(dāng)作一條語句看待表達(dá)式非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;表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式35.6條件運算符和條件表達(dá)式【例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è)計一個簡單的計算器程序,要求用戶從鍵盤輸入如下形式的表達(dá)式: 操作數(shù)1 運算符op 操作數(shù)2 然后,計算并輸出表達(dá)式的值 指定的運算符為 加(+)
23、 減(-) 乘(*) 除(/) main()int data1, data2; /*定義兩個操作符*/char op; /*定義運算符*/printf(Please enter the expression:);scanf(%d%c%d, &data1, &op, &data2); /*輸入運算表達(dá)式*/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)致軍艦推進(jìn)系統(tǒng)的關(guān)閉為什么不用if (data2 = 0)?如果要求輸入的算術(shù)表達(dá)式中的操作數(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ù)進(jìn)行運算,那么程
27、序如何修改?修改例5.5程序,使其能進(jìn)行浮點數(shù)的算術(shù)運算,同時允許使用字符*、x與X作為乘號,并且允許輸入的算術(shù)表達(dá)式中的操作數(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的條件控制更強(qiáng)大一些else-if可以依照各種邏輯運算的結(jié)果進(jìn)行流程控制switch只能進(jìn)行=判斷,并且只能是整數(shù)判斷csae后面的常量表達(dá)式不能用一個區(qū)間表示,也不 能出現(xiàn)任何運算符。 例: csae 90=score=100:語句; case 90100:語句;switch比else-if更清晰兩者都要盡量避免用得過多、過長,尤其不要嵌套得太多,否則,會大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護(hù),易出錯。#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)當(dāng)且僅當(dāng)兩者都為真,則結(jié)果為真 | 或(OR) 只要兩者中有一個為真,結(jié)果就為真 ! 非(NOT)aba & ba | b!a!b0000110101101001011111005.9邏輯運算符和邏輯表達(dá)式( 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年鐵路貨物運輸與專用線運營合同
- 2025年度建筑勞務(wù)分包合同標(biāo)的工程進(jìn)度與質(zhì)量監(jiān)管條款3篇
- 2024年贈與股份合同:父子權(quán)益的傳遞與確認(rèn)
- 2024庭院園藝景觀設(shè)計與生態(tài)修復(fù)工程包工合同范本6篇
- 2024年電子商務(wù)平臺送貨員聘用合同
- 2024年航空航天產(chǎn)業(yè)投資合作意向書(國家戰(zhàn)略版)3篇
- 2024年社交媒體品牌建設(shè)與維護(hù)服務(wù)條款3篇
- 2024年版權(quán)許可合同違約責(zé)任認(rèn)定
- 2024年資產(chǎn)重組合同范本
- 2024物業(yè)管理實務(wù)客戶關(guān)系管理與滿意度調(diào)查合同3篇
- 小數(shù)加減法計算題100道
- 中國馬克思主義與當(dāng)代思考題(附答案)
- ESD靜電防護(hù)檢測及管控標(biāo)準(zhǔn)
- 【求陰影部分面積】五年級上冊數(shù)學(xué)必考求陰影部分面積35題2023.9.27
- 結(jié)核病診斷-TSPOT-實驗課件
- 業(yè)主搭建陽光房申請書
- 小學(xué)語文分層作業(yè)設(shè)計案例
- 四川旭虹光電科技有限公司曲面顯示用蓋板玻璃生產(chǎn)項目環(huán)評報告
- 傷口愈合的病理生理及濕性愈合理論-課件
- GB/T 24475-2023電梯遠(yuǎn)程報警系統(tǒng)
- 科技計劃項目(課題)驗收(結(jié)題)經(jīng)費審計業(yè)務(wù)約定書
評論
0/150
提交評論