版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 選擇控制結(jié)構(gòu)本章學(xué)習(xí)內(nèi)容 算法的描述方法 用于單分支控制的if語(yǔ)句 用于雙分支控制的if-else語(yǔ)句 用于多路選擇的switch語(yǔ)句 break語(yǔ)句在switch語(yǔ)句中的作用 關(guān)系運(yùn)算符 條件運(yùn)算符 邏輯運(yùn)算符分治策略(Divide and Conquer Strategy )Problem: 準(zhǔn)備早餐( Prepare a Breakfast)1.Start2.準(zhǔn)備早餐3.End5.1生活中與計(jì)算機(jī)中的問(wèn)題求解 (Problem Solving Process)1. Start2. 準(zhǔn)備早餐 2.1 準(zhǔn)備一個(gè)金槍魚(yú)三明治 2.2 準(zhǔn)備一些薯?xiàng)l 2.3 沖一杯咖啡3. End分治策略
2、(Divide and Conquer Strategy )1. Start2.準(zhǔn)備早餐 2.1 準(zhǔn)備一個(gè)金槍魚(yú)三明治 2.1.1 拿來(lái)兩片面包 2.1.2 準(zhǔn)備一些金槍魚(yú)醬 2.2 準(zhǔn)備一些薯?xiàng)l 2.3 沖一杯咖啡3. End分治策略(Divide and Conquer Strategy )1. Start2.準(zhǔn)備早餐 2.1 準(zhǔn)備一個(gè)金槍魚(yú)三明治 2.1.1 拿來(lái)兩片面包 2.1.2 準(zhǔn)備一些金槍魚(yú)醬 2.2 準(zhǔn)備一些薯?xiàng)l 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)備一個(gè)金槍魚(yú)三明治 2.1.1 拿來(lái)兩片面包 2.1.2 準(zhǔn)備一些金槍魚(yú)醬 2.2 準(zhǔn)備一些薯?xiàng)l 2.2.1 將土豆切成條 2.2.2 油炸這些土豆條 2.3 沖一杯咖啡 2.3.1 燒些開(kāi)水放入杯中 2.3.2 在水杯中加入一些咖啡和糖3. End5.2算法的概念及其描述方法面向?qū)ο蟪绦?= 對(duì)象 + 消息面向過(guò)程的程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法計(jì)算機(jī)中的算法( Algorithm )為解決一個(gè)具體問(wèn)題而采取的、確定的、有限的操作步驟,僅指計(jì)算機(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算法的概念及其描述方法算法的特性有窮性在合理的時(shí)間內(nèi)完成確定性,無(wú)歧義 如果x0,則輸出Yes;如果x0,則輸出No有效性 能有效執(zhí)行負(fù)數(shù)開(kāi)平方?jīng)]有輸入或有多個(gè)輸入 有一個(gè)或多個(gè)輸出 5.2算法的概念及其描述方法算法的描述方法自然語(yǔ)言描述傳統(tǒng)流程圖(Flowchart)在1966年,Bohra
5、與 Jacopini 提出N-S結(jié)構(gòu)化流程圖1973年,美國(guó)學(xué)者I.Nassi 和 B.Shneiderman 提出偽碼(Pseudocode)表示流程圖(Flowchart)Flowchart represents algorithm graphically.Start/EndSymbolSemanticProcessInput/OutputTestConnectorFlow of activities計(jì)算機(jī)中的問(wèn)題求解過(guò)程Example :買(mǎi)蘋(píng)果,計(jì)算價(jià)錢(qián)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á)式語(yǔ)句 賦值表達(dá)式 ; price = quantity*pricePerkg;輸入輸出數(shù)據(jù)標(biāo)準(zhǔn)庫(kù)函數(shù)調(diào)用語(yǔ)句 scanf(%d, &quantity); scanf(%d, &pricePerkg); printf
7、(%d, price);ABC【例5.1】計(jì)算兩整數(shù)的最大值 num1 num2max?InputProcessOutputif - elseSingle SelectionDouble SelectionMultiple Selectionifif - else - if選擇結(jié)構(gòu)(分支結(jié)構(gòu)) (Selection Structure)5.3關(guān)系運(yù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用于單分支控制的條件語(yǔ)句(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ù)合語(yǔ)句compound statement被當(dāng)作一條語(yǔ)句看待表達(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】計(jì)算兩整數(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用于雙分支控制的條件語(yǔ)句( 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】計(jì)算兩整數(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】計(jì)算兩整數(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】計(jì)算兩整數(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條件運(yùn)算符和條件表達(dá)式【例5.3】5.7用于多分支控制的條件語(yǔ)句(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用于多分支控制的條件語(yǔ)句(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語(yǔ)句 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語(yǔ)句 注意!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語(yǔ)句 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語(yǔ)句 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語(yǔ)句 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語(yǔ)句 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語(yǔ)句 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語(yǔ)句 最好不省略!【例5.5】 計(jì)算器程序編程設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器程序,要求用戶(hù)從鍵盤(pán)輸入如下形式的表達(dá)式: 操作數(shù)1 運(yùn)算符op 操作數(shù)2 然后,計(jì)算并輸出表達(dá)式的值 指定的運(yùn)算符為 加(+)
23、 減(-) 乘(*) 除(/) main()int data1, data2; /*定義兩個(gè)操作符*/char op; /*定義運(yùn)算符*/printf(Please enter the expression:);scanf(%d%c%d, &data1, &op, &data2); /*輸入運(yùn)算表達(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?注釋掉會(huì)怎樣?思考題語(yǔ)句if(0=data2)的必要性避免除零錯(cuò)誤1998年11月,科學(xué)美國(guó)人雜志
25、描述了美國(guó)導(dǎo)彈巡洋艦約克敦號(hào)上的一起事故,除零錯(cuò)導(dǎo)致軍艦推進(jìn)系統(tǒng)的關(guān)閉為什么不用if (data2 = 0)?如果要求輸入的算術(shù)表達(dá)式中的操作數(shù)和運(yùn)算符之間可以加入任意多個(gè)空格符,那么程序如何修改?main()int data1, data2; char op; printf(Please enter the expression:);scanf(%d %c%d, &data1, &op, &data2); /* %c前有一個(gè)空格 */ 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】 空格思考題如果要求對(duì)浮點(diǎn)數(shù)進(jìn)行運(yùn)算,那么程
27、序如何修改?修改例5.5程序,使其能進(jìn)行浮點(diǎn)數(shù)的算術(shù)運(yùn)算,同時(shí)允許使用字符*、x與X作為乘號(hào),并且允許輸入的算術(shù)表達(dá)式中的操作數(shù)和運(yùn)算符之間可以加入任意多個(gè)空格符。 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í)數(shù)與0比較 */ printf(Division by zero!n);else printf(%f/%f = %fn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.6】 取絕對(duì)值函數(shù)switch語(yǔ)
29、句和else-if語(yǔ)句的比較else-if比switch的條件控制更強(qiáng)大一些else-if可以依照各種邏輯運(yùn)算的結(jié)果進(jìn)行流程控制switch只能進(jìn)行=判斷,并且只能是整數(shù)判斷csae后面的常量表達(dá)式不能用一個(gè)區(qū)間表示,也不 能出現(xiàn)任何運(yùn)算符。 例: csae 90=score=100:語(yǔ)句; case 90100:語(yǔ)句;switch比else-if更清晰兩者都要盡量避免用得過(guò)多、過(guò)長(zhǎng),尤其不要嵌套得太多,否則,會(huì)大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護(hù),易出錯(cuò)。#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)編一程序,輸入一個(gè)x值,輸出y值。Symbol Description & 與(AND)當(dāng)且僅當(dāng)兩者都為真,則結(jié)果為真 | 或(OR) 只要兩者中有一個(gè)為真,結(jié)果就為真 ! 非(NOT)aba & ba | b!a!b0000110101101001011111005.9邏輯運(yùn)算符和邏輯表達(dá)式( Logical Operators )! & |高低ch是大寫(xiě)英文字母(ch = A) &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024股權(quán)質(zhì)押借款合同范本2
- 信用貸款合同模板
- 2024年國(guó)際買(mǎi)賣(mài)合同中英文
- 2024年建筑外墻節(jié)能保溫技術(shù)服務(wù)合同
- 2024規(guī)范的電子配件購(gòu)銷(xiāo)合同模板
- 三輪摩托購(gòu)車(chē)合同范本2024年
- 教育機(jī)構(gòu)合作契約
- 2024停車(chē)場(chǎng)場(chǎng)地協(xié)議書(shū)范文
- 網(wǎng)絡(luò)證券交易平臺(tái)服務(wù)協(xié)議
- 經(jīng)營(yíng)托管合同范本
- 中國(guó)介入醫(yī)學(xué)白皮書(shū)(2021 版)
- 2024中華人民共和國(guó)農(nóng)村集體經(jīng)濟(jì)組織法詳細(xì)解讀課件
- 代運(yùn)營(yíng)合作服務(wù)協(xié)議
- 婚內(nèi)財(cái)產(chǎn)協(xié)議書(shū)(2024版)
- 有限空間作業(yè)應(yīng)急管理制度
- 2024全國(guó)普法知識(shí)考試題庫(kù)及答案
- 化工企業(yè)中試階段及試生產(chǎn)期間的產(chǎn)品能否對(duì)外銷(xiāo)售
- 籃球智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 國(guó)開(kāi)作業(yè)《公共關(guān)系學(xué)》實(shí)訓(xùn)項(xiàng)目1:公關(guān)三要素分析(六選一)參考552
- 碳排放核算與報(bào)告要求 第XX部分:鉛冶煉企業(yè)
- 物業(yè)及物業(yè)管理:提升旅游景區(qū)品質(zhì)
評(píng)論
0/150
提交評(píng)論