版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三章第三章 選擇結(jié)構(gòu)程序設(shè)計選擇結(jié)構(gòu)程序設(shè)計3.1 3.1 算法及其描述方法算法及其描述方法w 算法的概念算法的概念w 怎么樣表示一個算法怎么樣表示一個算法w 結(jié)構(gòu)化程序設(shè)計方法的基本思想結(jié)構(gòu)化程序設(shè)計方法的基本思想算法的基本概念算法的基本概念w 所謂算法,就是指為解決特定問題而采所謂算法,就是指為解決特定問題而采取的有限操作步驟。取的有限操作步驟。程序程序=數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+算法算法描述問題處描述問題處理的對象及理的對象及其關(guān)系其關(guān)系描述對問題描述對問題處理對象的處理對象的處理規(guī)則處理規(guī)則算法舉例算法舉例l已知蘋果價格和公斤數(shù),求蘋果總價格算法:已知蘋果價格和公斤數(shù),求蘋果總價格算法: 步
2、驟步驟1 1:輸入蘋果價格和所需公斤數(shù):輸入蘋果價格和所需公斤數(shù) 步驟步驟2 2:處理數(shù)據(jù),求得蘋果總價格。:處理數(shù)據(jù),求得蘋果總價格。 步驟步驟3 3:輸出蘋果總價格。:輸出蘋果總價格。 我們把這種將問題歸結(jié)為有規(guī)律的操作步驟,并我們把這種將問題歸結(jié)為有規(guī)律的操作步驟,并且用有限多個步驟來表示的具體過程就稱之為且用有限多個步驟來表示的具體過程就稱之為算法算法。l對同一個問題,可以有不同的解題方法和步驟。對同一個問題,可以有不同的解題方法和步驟。算法的表示算法的表示w自然語言描述法自然語言描述法w流程圖描述法流程圖描述法w 偽代碼描述法偽代碼描述法w NS流程圖描述法流程圖描述法1、 自然語言
3、描述法自然語言描述法w 自然語言描述法:自然語言描述法: 自然語言描述就是用人們?nèi)粘J褂玫恼Z自然語言描述就是用人們?nèi)粘J褂玫恼Z言,如:漢語、英語或其他語言來描述算法言,如:漢語、英語或其他語言來描述算法。用自然語言來描述和表示算法的優(yōu)點是。用自然語言來描述和表示算法的優(yōu)點是通通俗易懂俗易懂,缺點是文字過于,缺點是文字過于冗長冗長,容易出現(xiàn)歧,容易出現(xiàn)歧義性。因此,除了簡單的問題外,一般不用義性。因此,除了簡單的問題外,一般不用自然語言描述算法。自然語言描述算法。2 傳統(tǒng)流程圖描述法傳統(tǒng)流程圖描述法w 算法常用算法常用“流程圖流程圖”描述,更直觀,容易閱讀和理解。描述,更直觀,容易閱讀和理解。w
4、 流程圖中基本的圖形符號流程圖中基本的圖形符號無角矩形框無角矩形框(開始(開始/結(jié)束框)結(jié)束框)矩形框矩形框(操作框)(操作框)菱形框菱形框(條件判斷框)(條件判斷框)平行四邊形框平行四邊形框(輸入(輸入/輸出框)輸出框)流程線流程線連接點連接點totalPriceprice*quantity開始開始結(jié)束結(jié)束輸出輸出totalPrice輸入蘋果每公斤價格輸入蘋果每公斤價格 price功能:功能:已知蘋果價格和公斤數(shù),求蘋果總價格的流程圖已知蘋果價格和公斤數(shù),求蘋果總價格的流程圖輸入蘋果公斤數(shù)輸入蘋果公斤數(shù) quantityvoid apple() float price, totalPrice
5、; int quantity; scanf(“%f”,&price); scanf(“%d”,&quantity); totalPrice=price * quantity; printf(“%f”,totalPrice);3 N- S 圖表示法圖表示法1973年美國學(xué)者年美國學(xué)者I . Nassi 和和 B . Shneiderman提出一種新提出一種新的流程圖形式。的流程圖形式。 NS流程圖符號:流程圖符號:AB順序結(jié)構(gòu)順序結(jié)構(gòu) P成立成立 不成立不成立 A B選擇結(jié)構(gòu)選擇結(jié)構(gòu) 當當P成立成立A當型循環(huán)當型循環(huán) 直到P為假A直到型循環(huán)直到型循環(huán)構(gòu)成程序的三種基本結(jié)構(gòu)構(gòu)成程序的三種基本結(jié)構(gòu)w
6、 順序結(jié)構(gòu)順序結(jié)構(gòu)w 選擇結(jié)構(gòu)選擇結(jié)構(gòu)w 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)w 已經(jīng)證明,任何程序均可只用這三種結(jié)構(gòu)已經(jīng)證明,任何程序均可只用這三種結(jié)構(gòu)綜合描述綜合描述w 只用這三種結(jié)構(gòu)編制的程序,叫結(jié)構(gòu)化程只用這三種結(jié)構(gòu)編制的程序,叫結(jié)構(gòu)化程序序w 程序必須符合結(jié)構(gòu)化規(guī)則程序必須符合結(jié)構(gòu)化規(guī)則結(jié)構(gòu)化程序設(shè)計的核心思想結(jié)構(gòu)化程序設(shè)計的核心思想w 采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計的基本單元程序設(shè)計的基本單元 n只有一個入口;只有一個入口;n只有一個出口;只有一個出口;n無死語句,即不存在永遠都執(zhí)行不到的語句;無死語句,即不存在永遠都執(zhí)行不到的語句;n無死循環(huán),即不存
7、在永遠都執(zhí)行不完的循環(huán)。無死循環(huán),即不存在永遠都執(zhí)行不完的循環(huán)。w 采用采用“自頂向下、逐步求精自頂向下、逐步求精”和模塊化的和模塊化的方法進行結(jié)構(gòu)化程序設(shè)計方法進行結(jié)構(gòu)化程序設(shè)計 課堂練習(xí)課堂練習(xí)w 問題問題1:從鍵盤輸入大寫字母,用小寫字:從鍵盤輸入大寫字母,用小寫字母輸出到屏幕上。母輸出到屏幕上。w 解題思路:解題思路:n分析大寫字母、小寫字母的關(guān)系,得到轉(zhuǎn)換方法;分析大寫字母、小寫字母的關(guān)系,得到轉(zhuǎn)換方法;n寫出處理問題的步驟(算法);寫出處理問題的步驟(算法);n根據(jù)算法,編寫程序。根據(jù)算法,編寫程序。流程圖流程圖開始開始輸入一個大寫字母輸入一個大寫字母c1c2c132輸出一個小寫字
8、母輸出一個小寫字母c2結(jié)束結(jié)束源程序參考源程序參考#include void change() char c1,c2; c1=getchar(); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2); 輸入:A 輸出:A,65 a,973.2 3.2 基本控制結(jié)構(gòu)基本控制結(jié)構(gòu)N 成績成績60=60output “pass”endyesno #include void pass() int mark;scanf(%d,&mark); if(mark=60)printf(passn); 表達式(通常表達式(通常是邏輯或關(guān)系是邏輯或關(guān)系表達式)必
9、須表達式)必須用(),右括用(),右括號后面沒有號后面沒有“;”if的內(nèi)嵌語句要有縮進的內(nèi)嵌語句要有縮進分支結(jié)構(gòu)程序示例二分支結(jié)構(gòu)程序示例二*24 要求:從鍵盤輸入兩個整數(shù)要求:從鍵盤輸入兩個整數(shù)a和和b,如果,如果a大于大于b則交換兩數(shù)則交換兩數(shù),最最后輸出兩個數(shù)。后輸出兩個數(shù)。abab交換交換a a、b b真真假假輸入輸入a,b輸出輸出a,b開始開始結(jié)束結(jié)束*25#include void swap(int *p1,int *p2);int main( )int a,b; printf(nInput a,b: );scanf(%d,%d,&a,&b);swap(&a,&b);printf(
10、a=%d, b=%dn,a,b); return 0;void swap(int *p1,int *p2)int t;if(*p1*p2)t = *p1;*p1 = *p2 ;*p2 = t;262 雙分支選擇雙分支選擇if語句語句語句形式:語句形式:語句執(zhí)行流程:語句執(zhí)行流程:if (表達式)表達式) 語句語句1;else 語句語句2 ; 表達式語句1真(非0)假(0)語句2結(jié)束結(jié)束輸入輸入c c開始開始27要求:要求:輸入一個字符,輸入一個字符,判斷它是否是判斷它是否是09之間之間的字符的字符,并顯示相應(yīng)提,并顯示相應(yīng)提示。示。? ?c c是數(shù)字是數(shù)字真真假假c c不是數(shù)字不是數(shù)字怎么判斷
11、一個字符是怎么判斷一個字符是否是否是09之間之間的字符呢?的字符呢?#include void TestDigit();int main() TestDigit(); return 0; void TestDigit() char c; printf(input a character:); c=getchar(); if(c = 0 & c b) a+;b+; else a=0;b=10; 一定記得不能丟!后沒有分號29*3 多分支選擇多分支選擇if語句語句 語句形式:語句形式:if (表達式1) 語句1;else if (表達式2)語句2; else if (表達式n)語句n; else
12、語句n+1;30w 語句執(zhí)行流程:語句執(zhí)行流程:表達式表達式1 1語句語句1真真(非非0)假假(0)真真(非非0)語句語句2表達式表達式2 2真真(非非0)表達式表達式n n語句語句n語句語句n+1假假(0)假假(0)if (表達式1) 語句1;else if (表達式2)語句2; else if (表達式n)語句n; else 語句n+1;31*例:分段函數(shù)的計算例:分段函數(shù)的計算 0 (x50)假假x0 x0真真x50y=xy=x* *x xy=xy=xy=0y=0假假真真分析設(shè)計:x是int;y是double;獲得獲得x x#include int main() int x; scanf
13、(%d,&x); if(x=0&x50) printf(y=%dn,x*x); else if(x=50) printf(y=%dn,x); else printf(y=%dn,x*x); else if (x=50) printf(y=%dn,x); else printf(y=%dn,x*x); return 0; 32*例:分段函數(shù)的計算例:分段函數(shù)的計算 0 (x50)假y=0輸入xx50真0 x50y=x*xy=x假真If 語句的嵌套語句的嵌套v一般形式:一般形式:if (條件1) if (條件2) 語句1 else 語句2else if(條件3) 語句3 else 語句4內(nèi)嵌if內(nèi)
14、嵌ifvif 嵌套的幾種變形嵌套的幾種變形if (條件1) 語句1else if (條件2) 語句2 else 語句3內(nèi)嵌ifif (條件1) if (條件2) 語句1 else 語句2else 語句3內(nèi)嵌ifif (條件1) if (條件2) 語句1else if (條件3) 語句2 else 語句3內(nèi)嵌ifif (條件1) if (條件2) 語句1else if (條件3) 語句2 else 語句3內(nèi)嵌if內(nèi)嵌if注意:else 總是與前面最近的if 配對。內(nèi)嵌if內(nèi)嵌if35*注意事項注意事項w else與與if的配對原則:的配對原則:n一個一個if 最多配一個最多配一個else,可以不
15、配;可以不配;nelse與最接近它與最接近它if相匹配相匹配/*結(jié)果是2*/常見錯誤: if (x0) ; if (x=2) if (1=x0”); y=x-1;例如:以下函數(shù)的輸出結(jié)果是什么? void test_xy( ) int x=2,y=-1,z=2; if (xy) if (y0) z=0; else z+=1; printf(“%dn”,z); 哦,原來是因為else 總是與靠近它的if配對 實例實例w 體型判斷。按體型判斷。按“體指數(shù)體指數(shù)”對肥胖程度進行對肥胖程度進行劃分:劃分: 體指數(shù)體指數(shù)t = 體重體重w / (身高身高h)2 (w 單位為公斤,單位為公斤,h單位為米)
16、單位為米)n當當t = 27時,為肥胖。時,為肥胖。要要 求求w 編程從鍵盤輸入身高編程從鍵盤輸入身高h和體重和體重w,根據(jù)給定公式計算,根據(jù)給定公式計算體指數(shù)體指數(shù)t,然后判斷體重屬于何種類型,給出提示。,然后判斷體重屬于何種類型,給出提示。w 用函數(shù)完成,已知函數(shù)聲明為用函數(shù)完成,已知函數(shù)聲明為w void JudgeBodyIndex(float height,float weight);w 分別用以下三種方式實現(xiàn),要求畫出流程圖。分別用以下三種方式實現(xiàn),要求畫出流程圖。 n(1)不帶不帶else子句的子句的if語句編程;語句編程;n(2)在在if子句中嵌入子句中嵌入if語句的形式編程;
17、語句的形式編程;n(3)用在用在else子句中嵌入子句中嵌入if語句的形式編程;語句的形式編程;38*小結(jié)小結(jié)w 分支結(jié)構(gòu)有三種形式,分別用什么語句分支結(jié)構(gòu)有三種形式,分別用什么語句實現(xiàn)的?實現(xiàn)的?n單分支結(jié)構(gòu)單分支結(jié)構(gòu)n雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)n多分支結(jié)構(gòu)多分支結(jié)構(gòu)if (表達式)語句1;if (表達式)語句1;else 語句2;if 語句嵌套問題: 編寫函數(shù)將一個百分制成績score,按下列原則轉(zhuǎn)換成等級:score90,等級為A;80score90,等級為B;70score80,等級為C;60score70,等級為D;score60,等級為E。分析設(shè)計自變量score是int函數(shù)值是char
18、函數(shù)頭:char grade(int score)39*5 switch語句語句 1、語句形式:、語句形式:switch (表達式)(表達式) case 常量常量1: 語句語句1; case 常量常量2: 語句語句2; case 常量常量3: 語句語句3; . case 常量常量n: 語句語句n; default : 語句語句n+1; 。數(shù)值型或字符型常量1n的值必須互不相同,否則執(zhí)行時將出現(xiàn)矛盾,即同一個開關(guān)值,將對應(yīng)多種執(zhí)行方案。千萬不能接(;)號舉舉例例void weekday()int weekday;printf(n輸入一個整數(shù):輸入一個整數(shù):);scanf(%d,&weekday)
19、;switch(weekday) case 1: printf(Mondayn);case 2: printf(Tusedayn);case 3: printf(Wedesdayn);case 4: printf(Thursdayn);case 5: printf(Fridayn);case 6: printf(Saturdayn);case 0: printf(Sundayn);該函數(shù)被調(diào)用執(zhí)行后的效果如下:casecase語句出現(xiàn)的次序語句出現(xiàn)的次序直接影響執(zhí)行結(jié)果。直接影響執(zhí)行結(jié)果。41*breakbreak語句語句w 中斷當前開關(guān)語句中斷當前開關(guān)語句 或者或者 中斷當前循環(huán)中斷當前循環(huán)
20、w 語句形式:語句形式:break;break;的應(yīng)用的應(yīng)用void one_weekday()int weekday;printf(輸入一個整數(shù):);scanf(%d,&weekday);switch(weekday) case 1: printf(Mondayn);break;case 2: printf(Tusedayn);break;case 3: printf(Wedesdayn);break;case 4: printf(Thursdayn);break;case 5: printf(Fridayn);break;case 6: printf(Saturdayn);break;ca
21、se 0: printf(Sundayn);break;default : printf(n 值不符合要求n);該函數(shù)被調(diào)用執(zhí)行后的效果如下:break;break;的應(yīng)用的應(yīng)用該函數(shù)被調(diào)用執(zhí)行后的效果如下:如果有如果有breakbreak;casecase語句出語句出現(xiàn)的次序并現(xiàn)的次序并不影響執(zhí)行結(jié)果。不影響執(zhí)行結(jié)果。switch-caseswitch-case語句執(zhí)行流程:語句執(zhí)行流程:指語句的最指語句的最后一條是否后一條是否為為break;簡單語句或簡單語句或復(fù)合語句復(fù)合語句breakbreakbreakbreak有有無無breakbreak有有無無有有計算表達式計算表達式常量常量1 1
22、常量常量2 2常量常量n n=語句語句1 1=語句語句2 2語句語句n n其它其它=語句語句n+1n+1無無值值如果有如果有breakbreak;casecase語句出語句出現(xiàn)的次序并現(xiàn)的次序并不影響執(zhí)行結(jié)果。不影響執(zhí)行結(jié)果。45*分支結(jié)構(gòu)程序示例分支結(jié)構(gòu)程序示例w “成績等級成績等級”問題問題要求:要求: 獲取一個百分制成績獲取一個百分制成績score,按下列原則輸出,按下列原則輸出其等級:其等級:score90,等級為,等級為A;80score90,等級為,等級為B;70score80,等級為,等級為C;60score70,等級為,等級為D;score=90: printf(“Got An”); case score=60:printf(“Got Dn”); break;break;實例實例- -選擇合適的語句選擇合適的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加工被子合同范例
- 小區(qū)托管轉(zhuǎn)讓合同范例
- 國家合同范例庫查詢
- 小區(qū)閑置房出租合同范例
- 建筑勞務(wù)總包合同范例
- 單位離職合同模板
- 做飯阿姨勞務(wù)合同模板
- 展板制作購銷合同范例
- 后廚租房合同范例
- 借用店鋪合同范例
- 設(shè)備安裝應(yīng)急救援預(yù)案
- 深基坑工程降水技術(shù)及現(xiàn)階段發(fā)展
- 暫堵壓裂技術(shù)服務(wù)方案
- 生產(chǎn)現(xiàn)場作業(yè)十不干PPT課件
- 《孔乙己》公開課一等獎PPT優(yōu)秀課件
- 美的中央空調(diào)故障代碼H系列家庭中央空調(diào)(第一部分多聯(lián)機)
- 物料承認管理辦法
- 業(yè)主委員會成立流程圖
- (完整版)全usedtodo,beusedtodoing,beusedtodo辨析練習(xí)(帶答案)
- 廣聯(lián)達辦公大廈工程施工組織設(shè)計
- 疑難病例HELLP綜合征
評論
0/150
提交評論