lh多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
lh多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
lh多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
lh多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
lh多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、主要內(nèi)容多分支選擇結(jié)構(gòu)switch語(yǔ)句循環(huán)結(jié)構(gòu)while語(yǔ)句多分支的選擇結(jié)構(gòu)多分支的選擇結(jié)構(gòu)根據(jù)同一個(gè)表達(dá)式的各種取值分情況處理表達(dá)式e?語(yǔ)句序列1值1語(yǔ)句序列2值2語(yǔ)句序列n+1其他值語(yǔ)句序列n值n.switch語(yǔ)句switch語(yǔ)句用于表示多分支的選擇結(jié)構(gòu),其基本形式為:switch (表達(dá)式e) case 常量表達(dá)式1: 語(yǔ)句序列1;break; case 常量表達(dá)式2: 語(yǔ)句序列2;break; . case 常量表達(dá)式: 語(yǔ)句序列;break; default: 語(yǔ)句序列+1;switch語(yǔ)句的含義是:若表達(dá)式e的值等于某個(gè)常量表達(dá)式i的值,則執(zhí)行相應(yīng)的語(yǔ)句序列i;否則,執(zhí)行defau

2、lt的語(yǔ)句序列。什么是常量表達(dá)式?switch語(yǔ)句的使用舉例問題:輸入一個(gè)百分制的成績(jī),將其轉(zhuǎn)換為等級(jí)分制輸出。規(guī)則如下:90100: A8089: B7079: C6069: D低于60: F成績(jī)轉(zhuǎn)換1(用if語(yǔ)句)#include main( ) int score; printf(input a score(0100): ); scanf(%d,&score); if (score = 90 ) printf( grade = An ); else if (score = 80) printf( grade = Bn ); else if (score =70) printf( grad

3、e = Cn ); else if (score = 60) printf( grade = Dn ); else printf( grade = Fn ); 成績(jī)轉(zhuǎn)換2#include main() int score; /* score用于表示百分制分?jǐn)?shù) */ printf(input score(0100): ); scanf(%d,&score); switch (score / 10) case 10: printf( grade = An ); break; case 9: printf( grade = An ); break; case 8: printf( grade = B

4、n ); break; case 7: printf( grade = Cn ); break; case 6: printf( grade = Dn ); break; case 5: printf( grade = Fn ); break; case 4: printf( grade = Fn ); break; case 3: printf( grade = Fn ); break; case 2: printf( grade = Fn ); break; case 1: printf( grade = Fn ); break; case 0: printf( grade = Fn );

5、 break; 沒有這些break,該程序的執(zhí)行結(jié)果是什么?缺少break的switch語(yǔ)句示例 switch (n) case 1: printf( grade = An ); case 2: printf( grade = Bn ); case 3: printf( grade = Cn ); case 4: printf( grade = Dn ); case 5: printf( grade = Fn ); n = 1?YesNo輸出grade = A輸出grade = Bn = 2?YesNo輸出grade = C輸出grade = D輸出grade = Fn = 3?YesNon

6、= 4?YesNon = 5?YesNoswitch中的break 語(yǔ)句break 語(yǔ)句的目的終止 switch 語(yǔ)句的執(zhí)行如果沒有 break 語(yǔ)句,則程序會(huì)從指定的 case 分支開始,并在該分支結(jié)束后繼續(xù)執(zhí)行下去除非 switch 語(yǔ)句結(jié)束,后面的其他 case 分支或 default 分支中的語(yǔ)句都會(huì)得到執(zhí)行原因:case 子句中的常數(shù)表達(dá)式僅起到語(yǔ)句標(biāo)號(hào)的作用,不是分支之間的分隔標(biāo)記省略 break 語(yǔ)句的場(chǎng)合允許多個(gè)分支執(zhí)行同樣的代碼成績(jī)轉(zhuǎn)換3#include main() int score, grade; printf(input a score(0100): ); scanf

7、(%d,&score); grade = score / 10; switch (grade) case 10: case 9: printf( grade = An ); break; case 8: printf( grade = Bn ); break; case 7: printf( grade = Cn ); break;成績(jī)轉(zhuǎn)換3(續(xù)) case 6: printf( grade = Dn ); break; case 5: case 4: case 3: case 2: case 1: case 0: printf( grade = Fn ); break; default: p

8、rintf( Invalid input!n ); 成績(jī)轉(zhuǎn)換4(if和switch結(jié)合使用)#include main() int score, n; printf(input a score(0100): ); scanf(%d,&score); if (score = 90 ) n = 1; else if (score = 80) n = 2; else if (score =70) n = 3; else if (score = 60) n = 4; else n = 5; switch (n) case 1: printf(grade = An ); break; case 2: p

9、rintf(grade = Bn ); break; case 3: printf(grade = Cn ); break; case 4: printf(grade = Dn ); break; case 5: printf( grade = Fn ); break; /*end of switch*/*end of main*/ 成績(jī)轉(zhuǎn)換5(if和switch結(jié)合使用)#include main() int score, n; printf(input a score(0100): ); scanf(%d,&score); if (score 60 ) n = 0; else n = (s

10、core 60) / 10 + 1; switch (n) case 5: case 4: printf(grade = An ); break; case 3: printf(grade = Bn ); break; case 2: printf(grade = Cn ); break; case 1: printf( grade = Dn ); break; case 0: printf( grade = Fn ); break; /*end of switch*/*end of main*/ 至此,我們已經(jīng)了解了if語(yǔ)句和switch語(yǔ)句的含義和用法,那么,程序中使用if語(yǔ)句的地方能否用

11、switch語(yǔ)句替換呢?switch示例5編寫程序,接受用戶輸入的年份和月份,輸出該月天數(shù)#include #include zylib.hint main() int year, month, days_of_month;BOOL leapyear = FALSE; /* 輸入部分 */ printf( The program gets a year and a month, and prints days of the month.n ); printf( The year: );year = GetIntegerFromKeyboard(); printf( The month: );m

12、onth = GetIntegerFromKeyboard(); if( month 12 )printf( Month error!n );return 1; /* 計(jì)算部分 */ leapyear = year % 4 = 0 & year % 100 != 0 | year % 400 = 0; switch( month ) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days_of_month = 31; break; case 4: case 6: case 9: case 11: days_of_month

13、= 30; break; case 2: days_of_month = 28 + (int)leapyear; break; /* 輸出部分 */ printf( Days in %4d-%2.2d is %d.n, year, month, days_of_month ); return 0;#include void main() int a=1,b=6,c=4,d=2; switch(a+) case 1: c+;d+; case 2: switch(+b) case 7: c+; case 8: d+; case 3: c+;d+; break; case 4: c+; d+; pr

14、intf(%d,%dn,c,d);switch示例6switch語(yǔ)句小結(jié)switch語(yǔ)句用于表示多分支的選擇結(jié)構(gòu),可以用if語(yǔ)句等價(jià)地表示switch (表達(dá)式e) case 常量表達(dá)式1: 語(yǔ)句序列1;break; case 常量表達(dá)式2: 語(yǔ)句序列2;break; . case 常量表達(dá)式: 語(yǔ)句序列n;break; default: 語(yǔ)句序列n+1;可以將各種情況進(jìn)行歸納后再用switch語(yǔ)句表示,例如 grade = score / 10;break語(yǔ)句在switch語(yǔ)句中有很重要的作用選擇結(jié)構(gòu)程序設(shè)計(jì)小結(jié)掌握并熟練應(yīng)用if語(yǔ)句和switch語(yǔ)句pAB成立不成立ab選擇結(jié)構(gòu)1pA成立不

15、成立ab選擇結(jié)構(gòu)2表達(dá)式e?語(yǔ)句序列1值1語(yǔ)句序列2值2語(yǔ)句序列n+1其他值語(yǔ)句序列n值n.C的循環(huán)語(yǔ)句C語(yǔ)言提供了描述循環(huán)計(jì)算的語(yǔ)句: while語(yǔ)句 do.while語(yǔ)句 for語(yǔ)句學(xué)習(xí)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)就是掌握以上語(yǔ)句的使用方法while語(yǔ)句while語(yǔ)句的格式和含義while語(yǔ)句的格式:while (表達(dá)式p) 循環(huán)體語(yǔ)句ApA真 假循環(huán)結(jié)構(gòu)while語(yǔ)句的含義:1) 計(jì)算表達(dá)式p;2) 若表達(dá)式的值為“假”,則結(jié)束while語(yǔ)句的執(zhí)行;否則,執(zhí)行循環(huán)體語(yǔ)句A,然后轉(zhuǎn)1);while語(yǔ)句使用舉例1#include int main( ) int i, s; i = 1; s = 0; w

16、hile (i = 100) s += i; i+; printf( %dn ,s); return 0;BYNI 1S 0I=100?S S+I輸出S的值開始結(jié)束I I+1AC求最大公約數(shù)和最小公倍數(shù)void main()int a,b,s1,s2;/s1:最大公約數(shù) s2:最小公倍數(shù)int i,j,min,max;printf(請(qǐng)輸入兩個(gè)整數(shù):n); scanf(%d%d,&a,&b);min = ab ? a : b;s1 = s2 = 0;for(i = 1;i = max;j-)if(j%max = 0 & j%min = 0)s2 = j;else continue;printf(

17、%d與%d的最大公約數(shù)為:%dt最小公倍數(shù)為:%dn,a,b,s1,s2);ABCD求最大公約數(shù)流程圖(歐氏算法)YNr不等于0?輸出n的值輸入正整數(shù)m和n開始結(jié)束m n; n rr m % nABCDr m % n求最大公約數(shù)程序#include int main( ) return 0;YNr不等于0?輸出n的值輸入正整數(shù)m和n開始結(jié)束m n; n rr m % nr m % nwhile (r != 0) m = n; n = r; r = m % n;printf(input two integers:);scanf(%d%d,&m,&n); r = m % n; int m, n,

18、r;printf(ngcd = %dn ,n);分析問題,在求解過程中:存在一個(gè)(些)運(yùn)算(動(dòng)作)需要重復(fù)進(jìn)行(循環(huán))若干次。重復(fù)的次數(shù)是事先確定的,或者是根據(jù)條件確定的。處理循環(huán)計(jì)算需要明確的三個(gè)問題:循環(huán)體:哪些運(yùn)算(動(dòng)作)是需要重復(fù)進(jìn)行的;循環(huán)條件:重復(fù)這些運(yùn)算的條件是什么,即在什么情況下終止/繼續(xù)這個(gè)重復(fù)的過程。循環(huán)準(zhǔn)備:在進(jìn)行重復(fù)的運(yùn)算處理之前,需要進(jìn)行的準(zhǔn)備工作是什么;循環(huán)結(jié)構(gòu)程序的編寫要點(diǎn)程序設(shè)計(jì)練習(xí)一球從100m高度自由落下,每次落地后反跳回原來高度的一半,再落下。求它在第10次落地時(shí),共經(jīng)過多少米?第10次反彈的高度是多少?落地-反彈一球從100m高度自由落下,每次落地后反跳回原來高度的一半,再落下。求它在第10次落地時(shí),共經(jīng)過多少米?第10次反彈的高度是多少?100m5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論