




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 耿小慶耿小慶 4-1 4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4-2 4-2 C C語句概述語句概述 4-3 4-3 選擇語句選擇語句 4-4 4-4 循環(huán)語句循環(huán)語句 4-5 4-5 輔助控制語句輔助控制語句 4-6 4-6 習題習題 結(jié)構(gòu)化程序設(shè)計思想結(jié)構(gòu)化程序設(shè)計思想 算法算法 傳統(tǒng)流程圖表示的三種結(jié)構(gòu)傳統(tǒng)流程圖表示的三種結(jié)構(gòu) N/SN/S方框圖表示的三種結(jié)構(gòu)方框圖表示的三種結(jié)構(gòu) 小結(jié)小結(jié)4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.14.1.1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 思想思想任何程序都可以用三種基本結(jié)構(gòu)表示,即用順序任何程序都可以用三種基本結(jié)構(gòu)表示,即用順序( (Composi
2、tion)Composition)、選擇選擇( (Alternation)Alternation)和循環(huán)和循環(huán)( (Iteration)Iteration)結(jié)結(jié)構(gòu)來表示。構(gòu)來表示。這三種結(jié)構(gòu)反復組合、嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序。這三種結(jié)構(gòu)反復組合、嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序。順序結(jié)構(gòu)的程序流程是按照語句的順序依次執(zhí)行;選擇順序結(jié)構(gòu)的程序流程是按照語句的順序依次執(zhí)行;選擇結(jié)構(gòu)是根據(jù)給定的條件進行判斷,由判斷結(jié)構(gòu)決定執(zhí)行兩結(jié)構(gòu)是根據(jù)給定的條件進行判斷,由判斷結(jié)構(gòu)決定執(zhí)行兩支或多支程序段中的一支;循環(huán)結(jié)構(gòu)是在給定條件成立的支或多支程序段中的一支;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復執(zhí)行某個程序
3、段。情況下,反復執(zhí)行某個程序段。 優(yōu)點優(yōu)點結(jié)構(gòu)化程序?qū)哟畏置鳌⒔Y(jié)構(gòu)清晰、有效地改善了程序的結(jié)構(gòu)化程序?qū)哟畏置?、結(jié)構(gòu)清晰、有效地改善了程序的可靠性,從而大大地提高了程序設(shè)計的質(zhì)量和效率可靠性,從而大大地提高了程序設(shè)計的質(zhì)量和效率。4-1 概述概述員工工資管理系統(tǒng)員工工資管理系統(tǒng)稅率計算稅率計算員工福利員工福利員工出勤記錄員工出勤記錄保險費保險費退休金退休金4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計自頂向下,逐步求精自頂向下,逐步求精 4.1.24.1.2 算法算法 “ “算法算法”是為解決一個具體問題而采取的確定的有限的是為解決一個具體問題而采取的確定的有限的操作步驟。操作步驟。 (數(shù)據(jù)結(jié)構(gòu))(算法)
4、(數(shù)據(jù)結(jié)構(gòu))(算法) 程序程序 NWirthNWirth 算法的表示方法:算法的表示方法: 傳統(tǒng)的流程圖傳統(tǒng)的流程圖 N/SN/S方框圖方框圖 自然語言自然語言 偽碼偽碼 問題求解圖(問題求解圖(PADPAD)明確問題明確問題利用某種語言利用某種語言描述算法描述算法設(shè)計算法設(shè)計算法4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.3 4.1.3 傳統(tǒng)流程圖表示的三種結(jié)構(gòu)傳統(tǒng)流程圖表示的三種結(jié)構(gòu)開始開始/ /結(jié)束框結(jié)束框一般處理框一般處理框判斷框判斷框輸入輸入/ /輸出框輸出框流程線流程線連接符連接符4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.34.1.3 傳統(tǒng)流程圖表示的三種結(jié)構(gòu)傳統(tǒng)流程圖表示的
5、三種結(jié)構(gòu) 順序結(jié)構(gòu)順序結(jié)構(gòu)( (Composition)Composition)AB4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.3 4.1.3 傳統(tǒng)流程圖表示的三種結(jié)構(gòu)傳統(tǒng)流程圖表示的三種結(jié)構(gòu) 選擇結(jié)構(gòu)選擇結(jié)構(gòu)( (Alternation)Alternation)AB條件條件P成立成立不成立不成立4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.34.1.3 傳統(tǒng)流程圖表示的三種結(jié)構(gòu)傳統(tǒng)流程圖表示的三種結(jié)構(gòu) 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)( (Iteration)Iteration)不成立不成立條件條件PA成立成立成立成立A條件條件P不成立不成立(1)當型)當型(2)直到型)直到型4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化
6、程序設(shè)計實例實例1 1:計算:計算1+2+3+1001+2+3+100的值的值i =i+1s = s+i開始開始NY循環(huán)變量循環(huán)變量i 置置1累加器累加器s 置置0i=100? 結(jié)束結(jié)束輸出輸出s4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 這是一款意大利生產(chǎn)的多功能廚具這是一款意大利生產(chǎn)的多功能廚具|請猜價格!請猜價格!600答案是:答案是:720低了!低了!800750700高高了!了!高高了!了!正確!正確! 這是一款瑞士生產(chǎn)的多功能刀具這是一款瑞士生產(chǎn)的多功能刀具|請猜價格!請猜價格!600高高了!了!500高高了!了!時間到!時間到!1個商標個商標720低了!低了!答案是:答案是:4284-
7、1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計實例實例2 2:幸運:幸運5252“幸運幸運52”52”的傳統(tǒng)流程圖的傳統(tǒng)流程圖否否是是是是是是否否否否否否是是時間到?時間到?輸出產(chǎn)品特點輸出產(chǎn)品特點新產(chǎn)品?新產(chǎn)品?開始開始計時計時商標數(shù)清商標數(shù)清0猜對了?猜對了?猜高了?猜高了?輸入猜想價格輸入猜想價格輸出輸出“高了!高了!”輸出輸出“正確!正確!”輸出輸出“低了!低了!”累計商標數(shù)累計商標數(shù)結(jié)束結(jié)束輸出商標數(shù)輸出商標數(shù)輸出輸出“時間到!時間到!” 傳統(tǒng)流程圖的優(yōu)缺點傳統(tǒng)流程圖的優(yōu)缺點 優(yōu)點:形象直觀,各種操作一目了然,不會優(yōu)點:形象直觀,各種操作一目了然,不會產(chǎn)生產(chǎn)生“歧義性歧義性”,便于理解,算法出錯時
8、容,便于理解,算法出錯時容易發(fā)現(xiàn),并可直接轉(zhuǎn)化為程序。易發(fā)現(xiàn),并可直接轉(zhuǎn)化為程序。 缺點:所占篇幅較大,由于使用流程線,過缺點:所占篇幅較大,由于使用流程線,過于靈活,不受約束,使用者可使流程線任意于靈活,不受約束,使用者可使流程線任意轉(zhuǎn)移,從而造成程序閱讀和修改的困難,不轉(zhuǎn)移,從而造成程序閱讀和修改的困難,不利于結(jié)構(gòu)化程序的設(shè)計。利于結(jié)構(gòu)化程序的設(shè)計。4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.44.1.4 N/SN/S方框圖方框圖 N/SN/S方框圖是由美國學者方框圖是由美國學者IINassiNassi和和BBSchneiderman Schneiderman 于于19731973年提出
9、的。年提出的。 N/SN/S方框圖的重要特點就是完全取消了流程線,方框圖的重要特點就是完全取消了流程線,這樣,算法被迫只能順序執(zhí)行,從而避免了流這樣,算法被迫只能順序執(zhí)行,從而避免了流程的任意轉(zhuǎn)向,保證了程序的質(zhì)量。尤其適合程的任意轉(zhuǎn)向,保證了程序的質(zhì)量。尤其適合結(jié)構(gòu)化程序的設(shè)計。結(jié)構(gòu)化程序的設(shè)計。 N/SN/S方框圖的另一個優(yōu)點是既形象直觀,又節(jié)方框圖的另一個優(yōu)點是既形象直觀,又節(jié)省篇幅。省篇幅。4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.44.1.4 N/SN/S方框圖方框圖 順序結(jié)構(gòu)順序結(jié)構(gòu)( (Composition)Composition)AB4
10、-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.44.1.4 N/SN/S方框圖方框圖 選擇結(jié)構(gòu)選擇結(jié)構(gòu)( (Alternation)Alternation)AB條件條件P P成立成立不成立不成立4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 4.1.44.1.4 N/SN/S方框圖方框圖 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)( (Iteration)Iteration)A當當P成立成立A直到直到P成立成立(1)當型)當型(2)直到型)直到型實例實例1 1的的N/SN/S方框圖方框圖累加器累加器s 置置0循環(huán)變量循環(huán)變量i 置置1i =i+1s = s+ii=100?輸出輸出s4-1 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 表達式語句表
11、達式語句 表達式;表達式; 賦值語句賦值語句 i=10;i=10; 函數(shù)調(diào)用語句函數(shù)調(diào)用語句 printfprintf(Hello!n);(Hello!n); 流程控制語句流程控制語句 選擇選擇 ifelse, elseif, switchcaseifelse, elseif, switchcase 循環(huán)循環(huán) for, while, dowhilefor, while, dowhile 輔助控制輔助控制 break, continue,break, continue,gotogoto,return,return 空語句空語句 ; 什么也不干什么也不干 for(i=1;i5000;i+); fo
12、r(i=1;i5000;i+); 延時延時 for(i=0;i100;ai+=0); for(i=0;ib) t=a;a=b;b=t; if (ab) t=a;a=b;b=t; if (ac) t=a;a=c;c=t; if (ac) t=a;a=c;c=t; if (bc) t=b;b=c;c=t; if (bc) t=b;b=c;c=t; printf printf(%5.2f=%5.2f=%5.2fn,a,b,c);(%5.2f=%5.2f=%5.2fn,a,b,c); 4.3.1 4.3.1 ifif 語句語句 格式:格式: if(表達式表達式) 語句;語句; 說明:說明: 一般語言,
13、一般語言,if 后是關(guān)系或邏輯表達式,而后是關(guān)系或邏輯表達式,而C無要求無要求 if 只是測試表達式的值,當表達式的值為非只是測試表達式的值,當表達式的值為非0時,執(zhí)行語句時,執(zhí)行語句 if(表達式表達式) if(表達式表達式!=0) if(!表達式表達式) if(表達式表達式=0) “語句語句”為一條語句或復合語句為一條語句或復合語句4-3 選擇語句選擇語句 4.3.2 4.3.2 ifelse ifelse 語句語句 格式:格式: if(if(表達式表達式) ) 語句語句1 1; else else 語句語句2 2; 說明:說明:n 表達式仍為一般表達式,當表達式非表達式仍為一般表達式,當
14、表達式非0 0時,執(zhí)行時,執(zhí)行語句語句1 1,否則,執(zhí)行語句,否則,執(zhí)行語句2 2n “ “語句語句1”1”、“語句語句2”2”均為一條語句或復合語均為一條語句或復合語句句4-3 選擇語句選擇語句 根據(jù)需要交換兩個變量的值根據(jù)需要交換兩個變量的值#include main( ) int a,b,x,ch; printf(Enter two integers:); scanf(%d%d,&a,&b); printf(Swap?(y/n):); ch=getchar(); if(ch=y|ch=Y) x=a; a=b; b=x; printf(a=%d,b=%d,a,b); els
15、e printf(No swap!n);加上加上就行了!就行了!if(n0)if(n0) if(ab) z=a; if(ab) z=a; else z=b;else z=b;4-3 選擇語句選擇語句要想在要想在n=0n0)if(n0) if(ab) z=a; if(ab) z=a; else z=b;else z=b;什么時候執(zhí)行什么時候執(zhí)行z=b;z=b;?太簡單了!太簡單了! elseelse總是與總是與其上最近的且未與其他其上最近的且未與其他elseelse配對的配對的if if 配對,因配對,因此此n0n0并且并且a=bamagic) if(guessmagic) printf pri
16、ntf(“Too high!n”);(“Too high!n”); else else printf printf(Too low!n”);(Too low!n”); 4-3 選擇語句選擇語句main()main() intint magic=200,guess; magic=200,guess; printfprintf(“Please guess a magic number:”);(“Please guess a magic number:”); scanf scanf(%d,&guess);(%d,&guess); if(guess=magic) if(guess=ma
17、gic) printfprintf(“Right!n”);(“Right!n”); else if(guessmagic) else if(guessmagic) printf printf(“Wrong!Too big!n”);(“Wrong!Too big!n”); else else printfprintf(Wrong!Too small!n”); (Wrong!Too small!n”); 猜數(shù)數(shù)游戲:由計算機猜數(shù)數(shù)游戲:由計算機“想想”一個數(shù)請人猜,若猜對了則給一個數(shù)請人猜,若猜對了則給出提示出提示“Right”Right”,否則提示否則提示“Wrong”Wrong”,并告訴人是大
18、還是并告訴人是大還是小了?小了?4-3 選擇語句選擇語句輸入學號及成績,并根據(jù)成績定等級輸入學號及成績,并根據(jù)成績定等級main()main() intint score, score,snumsnum; char grade; char grade; scanf scanf(%d%d,&(%d%d,&snumsnum,&score);,&score); if( if(snumsnum0&0&snumsnum35=0&score=0&score=90) grade=A; if(score=90) grade=A; else if(
19、score=80) grade=B; else if(score=80) grade=B; else if(score=70) grade=C; else if(score=70) grade=C; else if(score=60) grade=D; else if(score=60) grade=D; else grade=E; else grade=E; printf printf(number:%d is grade %cn,(number:%d is grade %cn,snumsnum,grade);,grade); else else printfprintf(The No.is
20、 invalid!n); (The No.is invalid!n); 4-3 選擇語句選擇語句 4.3.5 4.3.5 開關(guān)分支開關(guān)分支switchcase switchcase 格式:格式: switch(switch(表達式表達式) ) case case 值值1: 1: 語句組語句組1 1; break;break; case case 值值2: 2: 語句組語句組2 2; break;break; . . case case 值值n: n: 語句組語句組 n; break;n; break; default: default: 語句組語句組n+1; break;n+1; break;
21、 功能:根據(jù)表達式的值與各個功能:根據(jù)表達式的值與各個casecase判斷值的比判斷值的比較情況決定執(zhí)行哪個語句組。較情況決定執(zhí)行哪個語句組。4-3 選擇語句選擇語句 4.3.54.3.5 開關(guān)分支開關(guān)分支switchcase switchcase 注意:注意:n表達式的值可為任意類型,但一般為整型或字符表達式的值可為任意類型,但一般為整型或字符型數(shù)據(jù),判斷值的類型與其要一致型數(shù)據(jù),判斷值的類型與其要一致ncasecase判斷值必須為常量或常量表達式,且判斷值判斷值必須為常量或常量表達式,且判斷值必須互不相同必須互不相同ndefaultdefault缺省時,當所有缺省時,當所有casecase
22、判斷不符時,則直判斷不符時,則直接自動退出接自動退出 switchswitchn當當breakbreak語句不缺省時,語句不缺省時,casecase和和defaultdefault的順序可的順序可以任意以任意nbreakbreak語句缺省時,系統(tǒng)將繼續(xù)執(zhí)行下一條語句缺省時,系統(tǒng)將繼續(xù)執(zhí)行下一條case case 語句組,可以使用語句組,可以使用case case 重疊重疊 共用一個語句組共用一個語句組4-3 選擇語句選擇語句運輸公司計算運費的原則是距離越遠,每公里收費越低運輸公司計算運費的原則是距離越遠,每公里收費越低 s250s250無折扣;無折扣;250=250=s500 2%s500 2
23、%折扣;折扣;500=500=s1000 5%s1000 5%; 1000=s2000 8% 1000=s2000 8% ;2000=s3000 10%2000=s=3000 15%s=3000 15% p- p-單價單價 w-w-重量重量 d-d-折扣折扣 f f 運費運費 p p* *W W* *S S* *(1-d)(1-d)main( )main( ) intint s; float p,w,d,f; s; float p,w,d,f; scanfscanf(%f %f %d,&p,&w,&s);(%f %f %d,&p,&w,&s);
24、switch(s/250) switch(s/250) case 0: d=0;break; case 0: d=0;break; case 1: d=0.02;break; case 1: d=0.02;break; case 2: case 3: d=0.05;break; case 2: case 3: d=0.05;break; case 4: case 5: case 6: case 7: d=0.08; break; case 4: case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11: d=
25、0.1; break; case 8: case 9: case 10: case 11: d=0.1; break; default: d=0.15; break; default: d=0.15; break; f=p f=p* *w w* *s s* *(1-d);(1-d); printf printf(freight=%.2fn,f);(freight=%.2fn,f); 4-3 選擇語句選擇語句統(tǒng)計輸入的一行字符中的英文各元音字母的個數(shù)(不區(qū)分大小寫)統(tǒng)計輸入的一行字符中的英文各元音字母的個數(shù)(不區(qū)分大小寫)# #include include .hmain()main() int
26、 na int na, ,nene, ,nini,no,no,nunu; char c; ; char c; na na= =nene= =nini=no=no=nunu= =0 0; ; while(c= while(c=getchargetchar()!=n)()!=n) switch(c) switch(c) case A: case A: case a: case a: na na+; +; break;break; case E: case e: case E: case e: ne ne+; +; break;break; case I: case i: case I: case
27、i: ni ni+; +; break;break; case O: case o: no+; case O: case o: no+; break;break; case U: case u: case U: case u: nu nu+; +; break;break; printf printf(nana=%d,=%d,nene=%d,=%d,nini=%d,no=%d,=%d,no=%d,nunu=%dn, =%dn, na na, ,nene, ,nini,no,no,nunu);); 4-3 選擇語句選擇語句輸入學號及成績,并根據(jù)成績定等級輸入學號及成績,并根據(jù)成績定等級main(
28、)main() int int score, score,snumsnum; char grade; char grade; scanf scanf(%d%d,&(%d%d,&snumsnum,&score);,&score); if( if(snumsnum0&0&snumsnum=0&score=100)=0&score=100) switch(score/10) switch(score/10) case 10: case 9: grade=A; break; case 10: case 9: grade=A; break;
29、 case 8: grade=B; break; case 8: grade=B; break; case 7: grade=C; break; case 7: grade=C; break; case 6: grade=D; break; case 6: grade=D; break; default: grade=E;break; default: grade=E;break; printfprintf(number:%d is grade %cn,(number:%d is grade %cn,snumsnum,grade);,grade); else else printf print
30、f(The No.or Score is invalid!n); (The No.or Score is invalid!n); 4-4 循環(huán)語句循環(huán)語句 循環(huán)就是反復執(zhí)行一段程序,循環(huán)就是反復執(zhí)行一段程序,被反復執(zhí)行的程序段稱為循環(huán)體。被反復執(zhí)行的程序段稱為循環(huán)體。 循環(huán)必須能結(jié)束,通常需要循循環(huán)必須能結(jié)束,通常需要循環(huán)變量來控制循環(huán)。環(huán)變量來控制循環(huán)。4.4.14.4.1 whilewhile語句語句 當型當型 格式:格式: while(while(表達式表達式) ) 循環(huán)體語句;循環(huán)體語句; 說明:說明:n進入循環(huán)前要作初始化工作進入循環(huán)前要作初始化工作n循環(huán)體中應(yīng)有使條件向假方向變化的
31、語句循環(huán)體中應(yīng)有使條件向假方向變化的語句n表達式為常數(shù)(非表達式為常數(shù)(非O O)是無限循環(huán),需配合其他是無限循環(huán),需配合其他語句加以控制語句加以控制n循環(huán)體可以是空語句循環(huán)體可以是空語句4-4 循環(huán)語句循環(huán)語句0非非0表達式?表達式?循環(huán)體循環(huán)體4-4 循環(huán)語句循環(huán)語句計算計算1+2+3+1001+2+3+100的值的值main()main() int int sum=0,i=1; sum=0,i=1; while(i=100) while(i=100) sum+=i+; / sum+=i+; /* * sum+=i;i+; sum+=i;i+; * */ / printf printf(“
32、sum of 1-100 is:%dn”,sum);(“sum of 1-100 is:%dn”,sum); 求個位數(shù)為求個位數(shù)為6 6且能被且能被3 3整除的整除的5 5位數(shù)共有多少個?位數(shù)共有多少個?main( )main( ) intint i=0; long m=10006; i=0; long m=10006; while(m=99996l) while(m=99996l) if(m%3=0) / if(m%3=0) /* *if(m/3)if(m/3)* *3=m) 3=m) * */ / i+; i+; m+=10; m+=10; printfprintf(“It is %d n
33、”,i);(“It is %d n”,i); 4-4 循環(huán)語句循環(huán)語句求出求出200200800800之間所有既能被之間所有既能被7 7又能被又能被1111整除的整整除的整數(shù)數(shù)main( )main( ) intint i=0 i=0,m=200;m=200; while(m=800) while(m=800) if(m%7=0&m%11=0) if(m%7=0&m%11=0) printfprintf(“%5d”,m); i+;(“%5d”,m); i+; if(i%10=0) if(i%10=0) printf printf(“n”);(“n”); m+; m+; n4.4
34、.2 4.4.2 do whiledo while語句語句n格式:格式:dodo 循環(huán)體循環(huán)體 whilewhile(表達式);表達式);n說明:說明:n先執(zhí)行一次循環(huán)體,再判表達式先執(zhí)行一次循環(huán)體,再判表達式n在不知道循環(huán)次數(shù),且又必須執(zhí)行一次循在不知道循環(huán)次數(shù),且又必須執(zhí)行一次循環(huán)體時環(huán)體時4-4 循環(huán)語句循環(huán)語句0非非0表達式?表達式?循環(huán)體循環(huán)體4-4 循環(huán)語句循環(huán)語句計算計算1+2+3+1001+2+3+100的值的值main()main() int int sum=0,i=1; sum=0,i=1; do sum+=i; do sum+=i; i+; i+; while(i=100
35、); while(i=100); printf printf(“sum of 1-100 is :%dn”,sum);(“sum of 1-100 is :%dn”,sum); 某數(shù)用某數(shù)用3 3除余除余2 2,用,用5 5余余3 3,用,用7 7余余2 2)main()main() int int i=0; i=0; do i+; do i+; while(!(i%3=2 & i%5=3 &i%7=2); while(!(i%3=2 & i%5=3 &i%7=2); / /* *while(i%3!=2 | i%5!=3|i%7!=2);while(i%3!=
36、2 | i%5!=3|i%7!=2);* */ / printf printf(“%dn”,i);(“%dn”,i); 4.4.34.4.3 for for 語句語句 格式:格式:for(for(表達式表達式1 1;表達式;表達式2 2;表達式;表達式3 3) 循環(huán)體;循環(huán)體; 執(zhí)行順序:執(zhí)行順序:n(1 1)執(zhí)行表達式)執(zhí)行表達式1 1n(2 2)判斷表達式)判斷表達式2 2,如果表達式,如果表達式2 2成立,則執(zhí)行循環(huán)體,成立,則執(zhí)行循環(huán)體, 如果表達式如果表達式2 2不成立,則執(zhí)行(不成立,則執(zhí)行(4 4)n(3 3)再執(zhí)行表達式)再執(zhí)行表達式3 3,然后回到(,然后回到(2 2)n(4
37、 4) 說明:說明:n 表達式均可省略表達式均可省略, ,分號不能省略分號不能省略 for( ; ; )for( ; ; )n 表達式表達式1 1和和3 3可為逗號表達式可為逗號表達式 for(i=0,j=100;ij;i+,j-);for(i=0,j=100;ij;i+,j-);n 表達式表達式2 2多為關(guān)系或邏輯表達式多為關(guān)系或邏輯表達式for( ;low=high&found=0;)for( ;low=high&found=0;)4-4 循環(huán)語句循環(huán)語句0非非0表達式表達式1表達式表達式2?循環(huán)體循環(huán)體表達式表達式34-4 循環(huán)語句循環(huán)語句計算計算1+2+3+1001+2
38、+3+100的值的值egeg.main().main() int int sum=0 sum=0,i;i; for(i=1;i=100;i+) for(i=1;i=100;i+) sum+=i; sum+=i; printf printf(“sum of 1-100 is :%dn”,sum);(“sum of 1-100 is :%dn”,sum); 4-4 循環(huán)語句循環(huán)語句n4.4.44.4.4 循環(huán)的嵌套循環(huán)的嵌套 多重循環(huán)多重循環(huán)在在C C語言中,當一個循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)有另一個循環(huán)結(jié)構(gòu)語言中,當一個循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)有另一個循環(huán)結(jié)構(gòu)時,稱為多重循環(huán)或循環(huán)嵌套,前面介紹的三種循環(huán)結(jié)構(gòu)時
39、,稱為多重循環(huán)或循環(huán)嵌套,前面介紹的三種循環(huán)結(jié)構(gòu)可以相互嵌套。當一個循環(huán)的循環(huán)體僅是另一個單一的循可以相互嵌套。當一個循環(huán)的循環(huán)體僅是另一個單一的循環(huán)結(jié)構(gòu)時,外層循環(huán)不需要使用大括號包圍它的循環(huán)體。環(huán)結(jié)構(gòu)時,外層循環(huán)不需要使用大括號包圍它的循環(huán)體。打印乘法口訣表打印乘法口訣表for(i=1;i=9;i+)for(i=1;i=9;i+) for(j=1;j=9;j+) for(j=1;j=9;j+) printfprintf(“%5d”,i(“%5d”,i* *j);j); printf printf(“n”);(“n”); 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
40、 2 4 6 8 10 12 14 16 18 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 7 14 21 28 35 42 49 56 63
41、 8 16 24 32 40 48 56 64 72 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 9 18 27 36 45 54 63 72 81 1 1 2 4 2 4 3 6 9 3 6 9 4 8 12 16 4 8 12 16 5 10 15 20 25 5 10 15 20 25 6 12 18 24 30 36 6 12 18 24 30 36 7 14 21 28 35 42 49 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 8 16 24 32 40 48 56 64 9 1
42、8 27 36 45 54 63 72 81 9 18 27 36 45 54 63 72 81 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 4 6 8 10 12 14 16 18 4 6 8 10 12 14 16 18 9 12 15 18 21 24 27 9 12 15 18 21 24 27 16 20 24 28 32 36 16 20 24 28 32 36 25 30 35 40 45 25 30 35 40 45 36 42 48 54 36 42 48 54 49 56 63 49 56 63 64 72 64 72 81 814-5 輔助控制
43、語句輔助控制語句 4.5.14.5.1 breakbreak語句語句 功能:功能:n中斷循環(huán)過程,退出循環(huán)體中斷循環(huán)過程,退出循環(huán)體n從包含它的從包含它的switchswitch退出退出 說明:說明:n強行退出強行退出n僅退出一層循環(huán)或一層僅退出一層循環(huán)或一層switchswitch 4.5.24.5.2 continue continue語句語句 功能:使本次循環(huán)短路,繼續(xù)執(zhí)行下一功能:使本次循環(huán)短路,繼續(xù)執(zhí)行下一次循環(huán)次循環(huán)4-5 輔助控制語句輔助控制語句跳過負元素,求為正元素之和跳過負元素,求為正元素之和main()main() int int n,sum=0; n,sum=0; whi
44、le(1) while(1) scanfscanf(“%d”,&n);(“%d”,&n); if(n=0) break; if(n=0) break; if(n0) continue; if(n0) continue; sum+=n; sum+=n; printfprintf(sum=%dn,sum)(sum=%dn,sum) 4-5 輔助控制語句輔助控制語句 4.5.34.5.3 轉(zhuǎn)向語句轉(zhuǎn)向語句goto goto 格式:格式:ngotogoto 標號;標號; error: .error: . for( ) for( ) if( ) if( ) goto goto error
45、; error; . . gotogoto破壞結(jié)構(gòu)化,不用!破壞結(jié)構(gòu)化,不用! 4.5.44.5.4 返回語句返回語句 returnreturn 格式:格式:return return 值值; ; return(return(值值) );4-6 習題習題 簡單應(yīng)用簡單應(yīng)用 見書見書( (譚譚) )例題例題 枚舉法枚舉法 求最小公倍數(shù)求最小公倍數(shù) 找出找出100999100999之間的所有之間的所有水仙花數(shù)水仙花數(shù),各位立方和,各位立方和= =本本身(身(153153等)等) 百錢買百雞、百馬運百貨百錢買百雞、百馬運百貨 求素數(shù)求素數(shù) 編程序找出編程序找出10001000之內(nèi)的所有之內(nèi)的所有完數(shù)
46、完數(shù),一個數(shù)恰好等于,一個數(shù)恰好等于其因子之和如其因子之和如 6=1+2+3 6=1+2+34-6 習題習題 遞推法遞推法 公式類公式類n1!+2!+3!+201!+2!+3!+20!n1+1/11+1/1!+1/2+1/2!+ +1/10+ +1/10!n/4=1-1/3+1/5-1/7+1/9+ 10/4=1-1/3+1/5-1/7+1/9+ 10-6-6 求求na+a+aaaa+ +aaaaaa+aaaaaa aa a=2,n=7 2+22+222+2222+22222+222222+2222222a=2,n=7 2+22+222+2222+22222+222222+2222222 其它
47、其它n猴子吃桃猴子吃桃n珠穆朗瑪峰珠穆朗瑪峰n皮球落地皮球落地最小公倍、最大公約最小公倍、最大公約main()main() int int a,b, a,b,beibei; ; printfprintf(Please enter two integers:);(Please enter two integers:); scanf scanf(%d%d,&a,&b);(%d%d,&a,&b); if(ab) if(ab) if(ab) beibei=a; =a; chuchu=b;=b; else else beibei=b; =b; chuchu=a; =a;
48、while( while( (yuyu= =beibei% %chuchu)!=0)!=0) ) beibei= =chuchu; ; chu chu= =yuyu; ; printfprintf(“n(“n最大公約數(shù)為:最大公約數(shù)為:% %dn,dn,chuchu);); 水仙花數(shù)水仙花數(shù)main()main() int int i,j,k,m,n;i,j,k,m,n; for(i=1;i=9;i+) for(i=1;i=9;i+) for(j=0;j=9;j+) for(j=0;j=9;j+) for(k=0;k=9;k+) for(k=0;k=9;k+) m=i m=i* *100+j1
49、00+j* *10+k;10+k; n=i n=i* *i i* *i+ji+j* *j j* *j+kj+k* *k k* *k;k; if(m=n) if(m=n) printf printf(%5d,m);(%5d,m); main()main() int int m,i,j,k; m,i,j,k; for(m=100;m=999;m+) for(m=100;m=999;m+) i=m/100; i=m/100; j=(m-ij=(m-i* *100)/10100)/10; ; / /* *j=m%100/10;j=m%100/10;* */ / k=m%10; k=m%10; if(i
50、 if(i* *i i* *i+ji+j* *j j* *j+kj+k* *k k* *k=m)k=m) printfprintf(%5d,m);(%5d,m); 百錢買百百錢買百雞、百馬拉百貨雞、百馬拉百貨main()main() int int i,j,k;i,j,k; for(i=1;i20;i+) for(i=1;i20;i+) for(j=1;j=33;j+) for(j=1;j=33;j+) k=100-i-j; k=100-i-j; if(5 if(5* *i+3i+3* *j+k/3=100&k%3=0)j+k/3=100&k%3=0) printfprintf
51、(cock:%d,hen:%d,chick:%dn,i,j,k);(cock:%d,hen:%d,chick:%dn,i,j,k); main()main() int int i,j,k; i,j,k; for(i=1;i34;i+) for(i=1;i34;i+) for(j=1;j50;j+) for(j=1;j50;j+) for(k=2;k100;k+=2) for(k=2;k100;k+=2) if(i if(i* *3+j3+j* *2+k/2=100&i+j+k=100)2+k/2=100&i+j+k=100) printfprintf(big = %3d(big
52、 = %3dtmiddletmiddle = %3d = %3dtsmalltsmall =%3dn,i,j,k); =%3dn,i,j,k); 素數(shù)素數(shù)判斷一個數(shù)是否為素數(shù)判斷一個數(shù)是否為素數(shù)# #include include main()main() long m; long m; int int i, i,sqrtmsqrtm; ; printfprintf(Please enter a numbers:);(Please enter a numbers:); scanf scanf(%ld,&m);(%ld,&m); sqrtmsqrtm= =sqrtsqrt(m);
53、(m); for(i=2;i= for(i=2;i if(isqrtmsqrtm) ) printf printf(%ld is a prime.n,m);(%ld is a prime.n,m); else else printf printf(%ld is not a prime.n,m); (%ld is not a prime.n,m); 素數(shù)素數(shù)求一個區(qū)間中所有的素數(shù)求一個區(qū)間中所有的素數(shù)# #include include void main(void)void main(void) long a,b,m; long a,b,m; int int i, i,sqrtmsqrtm,c
54、ount=0;,count=0; printf printf(Please enter two numbers:);(Please enter two numbers:); scanf scanf(%ld%ld,&a,&b);(%ld%ld,&a,&b); printf printf(Primes from %d to %d is:n,a,b);(Primes from %d to %d is:n,a,b); for(m=(a%2=0)?a+1:a;m=b;m+=2) for(m=(a%2=0)?a+1:a;m=b;m+=2) sqrtmsqrtm= =sqrt
55、sqrt(m);(m); for(i=2;i= for(i=2;i if(isqrtmsqrtm) ) if(count+%10=0) if(count+%10=0) printf printf(n);(n); printf printf(%8ld,m);(%8ld,m); 完數(shù)完數(shù)main()main() int int i,j,s,n=0; i,j,s,n=0; printf printf(“1000(“1000之內(nèi)的完數(shù)之內(nèi)的完數(shù): ”);: ”); for(i=1;i=1000;i+)for(i=1;i=1000;i+) s=0; s=0; for(j=1;ji;j+) if(i%j=
56、0) s+=j; for(j=1;ji;j+) if(i%j=0) s+=j; if(s=i) if(s=i) printf printf(%5d,i);(%5d,i); n+; n+; if(n%10=0) if(n%10=0) printf printf(n);(n); /4=1-1/3+1/5-1/7+1/9+ 求求# #include include main()main() int int s=1; long n=1; s=1; long n=1; double pi=0,t=1; double pi=0,t=1; / /* * double pi=0,s=1,t=1,n=1; do
57、uble pi=0,s=1,t=1,n=1; * */ / while( while(fabsfabs(t)=1e-6)(t)=1e-6) pi+=t; pi+=t; n+=2; n+=2; s=-s; s=-s; t=(double)s/n; / t=(double)s/n; /* * t=s/n; t=s/n; * */ / pi pi* *=4;=4; printfprintf(“PI=%fn,pi);(“PI=%fn,pi); 1!+2!+3!+20!main()main() int int i; i; float s=0,t=1; float s=0,t=1; for(i=1;i=2
58、0;i+) for(i=1;i=20;i+) t t* *=i;=i; s+=t; s+=t; printfprintf(“Result:%fn,s);(“Result:%fn,s); 1+1/2!+1/3!+1/10!main()main() int int i; long t=1; i; long t=1; float s=0; float s=0; for(i=1;i=10;i+) for(i=1;i=10;i+) t t* *=i;=i; s+=1.0/t; s+=1.0/t; printfprintf(“Result:%fn,s);(“Result:%fn,s); a+aa+aaa+aaaa main()main() int int i,a,n; double t=0,s=0; i,a,n; double t=0,s=0; printfprintf(“%d%d”,&a,&n);(“%d%d”,&a,&n); for(i=1;i=n;i+) for(i=1;i=1;i-)n=1;i=1;i-) n=(n+1) n=(n+1)* *2;2; printfpri
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑勞務(wù)清包合同
- 園林綠化工程施工合同
- 展廳裝修施工合同協(xié)議書
- 中介房屋買賣合同大全年
- 醫(yī)療健康領(lǐng)域醫(yī)療資源分布統(tǒng)計表
- 導購員聘用合同協(xié)議書
- 2025年潮州貨運上崗證模擬考試0題
- 2025年部編版小學三年級下冊課外閱讀專項復習題(有答案)
- ic芯片購銷合同范本
- 制動氣室市場分析及競爭策略分析報告
- 一年級美術(shù)課后輔導方案-1
- 新法律援助基礎(chǔ)知識講座
- 《鍛造安全生產(chǎn)》課件
- 小學數(shù)學1-6年級(含奧數(shù))找規(guī)律專項及練習題附詳細答案
- 《同濟大學簡介》課件
- 《建筑攝影5構(gòu)》課件
- 機電安裝工程質(zhì)量控制
- 愛自己是終身浪漫的開始 心理課件
- 新房房屋買賣合同
- 地鐵出入口雨棚施工工藝
- 人工智能引論智慧樹知到課后章節(jié)答案2023年下浙江大學
評論
0/150
提交評論