版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第六章 循環(huán)控制 6.1 概述 所謂循環(huán)控制,就是如何實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的控制問題。有4種方法: ① 用goto語句和if構(gòu)成循環(huán)。 ② 用while語句。 ③ 用do-while語句。 ④ 用for語句。,6.2 用goto語句和if語句構(gòu)成循環(huán)例: 對于計(jì)算 s=1+2+3+4+5+6+7+8+9+10,0 s,1 i,s+i → s,i+1 → i,i
2、≤10,,,,,,,輸出s,,,,,,,y,n,s=0; i=1; label:s+=i; i++; if(i<=10) goto label; printf(“%d”,s) ;,,語句標(biāo)號,,無條件轉(zhuǎn)向語句,goto 語句可以構(gòu)造循環(huán),但不主張用,因?yàn)樗菀灼茐慕Y(jié)構(gòu)化程序設(shè)計(jì)。,6.3 while語句 while語句是專門用于實(shí)現(xiàn)
3、循環(huán)控制的語 句之一。 其一般形式為: while (表達(dá)式) 語句 含義:當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行循環(huán)體,否則執(zhí)行后續(xù)語句。,,,,,語句關(guān)鍵,表達(dá)循環(huán)條件的表達(dá)式,循環(huán)體,語句關(guān)鍵字,執(zhí)行過程: while (表達(dá)式) 語句,,表達(dá)式,循環(huán)體,,,,,,,,,,,0,非0,例:用while語句實(shí)現(xiàn)前面算法:eg6-1main(){ int i=1,s=0;
4、 while(i<=10) { s=s+i; i++; } printf(“\n %d”,s); },注意:循環(huán)體若包括一條以上的語句,使用花括號。循環(huán)體中要有使循環(huán)趨于結(jié)束的條件,while(i<=10) { s=s+i; i++; } 可簡寫為: eg6-2 while(i<=10) s+=i++;,6
5、.4 do-while語句 do-while語句主要用于實(shí)現(xiàn)直到型循環(huán)。 其一般形式為: do 循環(huán)體 while(表達(dá)式); 執(zhí)行過程:,例:用do-while語句實(shí)現(xiàn)前面算法:eg6-3 main() { int i=1,s=0; do s+=i++; while(i<=10); printf(“\n%d”,s); },do-wh
6、ile與while語句的區(qū)別,#include void main(){int s=0,i;scanf("%d",&i);while(i<=10)s+=i++;printf("%d\n",s);} eg6-4,#include void main(){int s=0,i;scanf("%d",&i);dos
7、+=i++;while(i<=10);printf("%d\n",s);} eg6-5,輸入的i:10,do…while能方便的實(shí)現(xiàn)“直到型”循環(huán),但應(yīng)將條件取反。,直到型,main() { int i=1,s=0; do s+=i++; while(i<=10); printf(“\n%d”,s); },6.5 for 語句 for語句是一種使用最為靈活
8、,并且是用得最多的循環(huán)控制語句,其一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體大體含義:對于()中的情況執(zhí)行循環(huán)體內(nèi)容:表達(dá)式1:賦初值表達(dá)式2:判斷循環(huán)條件是否成立表達(dá)式3:改變循環(huán)條件(避免進(jìn)入死循環(huán)),例:用for語句實(shí)現(xiàn)前面的算法:eg6-6s=0;for(i=1;i<=10;i++) s+=i; 標(biāo)準(zhǔn)形式,,,,表達(dá)式1,表達(dá)式2,表達(dá)式3,,循環(huán)體,可以理解: 循環(huán)變
9、量i從初值1開始到終值10,步長為1,重復(fù)執(zhí)行循環(huán)體。,for語句的常見變化: s=0; i=1; for(;i<=10;i++)s+=i; s=0; for(i=1;i<=10;)s+=i++; s=0;i=1; for(;i<=10;)s+=i++;,(1)省略表達(dá)式1,(2)省略表達(dá)式3,(3)省略表達(dá)式1和3,for(i=1;i<=10;i++) s+=i;
10、 標(biāo)準(zhǔn)形式,循環(huán)體之前賦初值,,循環(huán)體內(nèi)改變循環(huán)條件,,循環(huán)體之前賦初值,循環(huán)體內(nèi)改變循環(huán)條件,,,s=0; i=1; for(;;) { s+=i++; if(i>10) break; } s=10;i=10; for(;--i;) s+=i;,(4)省略三個(gè)表達(dá)式,表達(dá)式2可為任意表達(dá)式,值為0時(shí)跳出循環(huán)eg6-7,標(biāo)準(zhǔn)形式:for(i=1;i<=10
11、;i++) s+=i;,循環(huán)體之前賦初值,循環(huán)體內(nèi)改變循環(huán)條件,,,循環(huán)體內(nèi)判斷循環(huán)條件,,eg6-8 s=0; for(i=1,j=10;i<j;i++,j--) s+=i+j; 1 2 3 4 5 6 7 8 9 10在程序設(shè)計(jì)中不要過分追求它的多變性,i,j,,,,,用逗號表達(dá)式,多個(gè)初值,,,修改多個(gè)循環(huán)變量,,,例:求n! n!=1*2*3…6-9(n-1)*n 參照累加求和
12、eg6-9main(){ int i,n=5,s=1; for(i=1;i<=n;i++)s*=i; printf(“\n s=%d”,s);}注意s的初值。注意當(dāng)n較大時(shí)的情況。求和與連乘都是最常用的算法,要熟練掌握。,例:求自然數(shù)1-100中能被3整除的數(shù)之和。 main() { int i,s=0; printf(“\n %d”,s); }eg6-10
13、,eg6-11:1683 求能被3整除但不被7整除的數(shù)之和?eg6-12:1473,for(i=1;i<=100;i++) s+=i;,for(i=1;i<=100;i++) if(i%3==0)s+=i;,for(i=3;i<=100;i+=3) s+=i;,for(i=3;i<=100;i+=3) if (i%7)s+=i;,例:求任意100個(gè)數(shù)中的最大值。Eg6-13 main() { in
14、t i,a,max; max=? for(i=1;imax) max=a; } printf(“\n max=%d”,max); } 循環(huán)體中沒有引用循環(huán)變量。i的作用? 求任意個(gè)數(shù)中的最大值?eg6-14 eg6-15,for(i=1; ;i++),if(a==-9999)break;,max=-32768/-2147483647 ;,§6.6 循環(huán)的嵌套在C
15、語言中,三種循環(huán)可以相互嵌套(1) while( ) (2) do (3) for( ; ; ) {┆ {┆
16、{┆ while( ) do for( ; ;) { … } { . . .}while( );
17、 {. . .} ┆ ┆ ┆ } } while( );
18、 }(4) while( ) (5) for( ; ;) (6) do {┆ { ┆
19、{┆ do while( ) for( ; ;) { . . .}while( ); { . . . }
20、 { . . . } ┆ ┆ ┆ } }
21、 }while( );,,,,§6.7 幾種循環(huán)的比較1.四種循環(huán)通??梢杂脕斫鉀Q同一問題,但不提倡使用goto語句,因?yàn)樗欠墙Y(jié)構(gòu)化語句;2.while和do~while中循環(huán)體是反復(fù)執(zhí)行的部分,要有使循環(huán)趨于結(jié)束的語句。for中使循環(huán)趨于結(jié)束的操作在表達(dá)式3中。3.while , do ~while 中循環(huán)變量初始化在該語句之前,而for是在表達(dá)式1
22、中;4.while, for先判斷表達(dá)式,然后再執(zhí)行語句,而do ~ while先執(zhí)行語句,再判表達(dá)式;5.while , do ~ while , for 可用break 跳出循環(huán),continue是結(jié)束本次循環(huán),而 if - goto 中不能使用break 和 continue語句,eg6-16 已知半徑 r , 計(jì)算圓面積area,當(dāng)area > 100時(shí)結(jié)束程序的運(yùn)行。main(){ int r
23、 ; float pi=3.14159, area; for( r=1 ; r 100) break ; printf( “r=%d , area=%5. 2f\ n”, r, area); }},輸出:r=1, area=3.14 r=2, area=12.57 r=3, area=28.27 r=4, area=50.27
24、 r=5, area=78.85 / * 當(dāng) r=6時(shí),area=113.10 故此值沒有被輸出 */,§6.8 break 和 continue 語句6.8.1 break 語句一般形式: break;功能:結(jié)束循環(huán)語句,轉(zhuǎn)向循環(huán)語句的下一語句,在多層循環(huán)結(jié)構(gòu)中,只退出包含它的那層循環(huán)。本語句僅限用于 while, do ~ while , for,
25、 switch 語句,6.8.2 continue語句一般形式:continue;功能:跳過循環(huán)體中后面的語句,進(jìn)入本循環(huán)結(jié)構(gòu)的下次循環(huán), 在while 和 do ~ while中立即轉(zhuǎn)到表達(dá)式進(jìn)行判斷。 在for語句中,轉(zhuǎn)到表達(dá)式3進(jìn)行增量,再轉(zhuǎn)到表達(dá)式2進(jìn)行判斷。eg6-17 把100 - 120之間不能被3整除的數(shù)輸出。main( ){int n; for(n=1
26、00; n<=120; n++) {if(n%3==0) {printf (“\ n” ); continue; } printf( “%d,” , n); }},運(yùn)行結(jié)果:100,101, 103,104,106,107, 109,110, 112,113,
27、 115,116, 118,119,,例:一場晚會要現(xiàn)場隨機(jī)抽取幸運(yùn)觀眾,抽取辦法是由主持人隨機(jī)給定一個(gè)數(shù)字,如座位的行號和列號之和正好等于該數(shù)字的觀眾就是幸運(yùn)觀眾,已知晚會現(xiàn)場共有30排座位,每排20個(gè)座位,請編寫程序,從鍵盤輸入主持人隨機(jī)給定數(shù)字,輸出所有幸運(yùn)觀眾的坐號。,eg6-18 main() { int i,j,num;
28、 scanf(“%d”,&num); for(i=1;i<=30;i++) for(j=1;j<=20;j++) if(i+j==num) printf(“\n%d,%d”,i,j); },注意循環(huán)的關(guān)系,例:百錢買百雞問題。 給定100塊錢,要求正好買100只雞,已知公雞5元/只,母雞3元/只,小雞1元/3只,問公雞、母雞和小雞應(yīng)各買多
29、少只?若考慮用方程組: x+y+z=100 5x+3y+z/3=100 是一個(gè)多解問題。,,用測試法求解的程序: eg6-19 main() { int x,y,z; for(x=1;x<=100;x++) for(y=1;y<=100;y++) for(z=1;z<=100;z++) i
30、f(x+y+z==100&&5*x+3*y+z/3.0==100) printf(“\n%d,%d,%d”,x,y,z); },程序可進(jìn)一步簡化為: eg6-20 main() { int x,y,z; for(x=1;x<=20;x++) for(y=1;y<=33;y++) { z=100-x-y; if(5*x+3*y+
31、z/3.0==100) printf(“\n%d,%d,%d”,x,y,z); } },用測試法求解問題的典型例子,測試法求解的程序設(shè)計(jì)有兩個(gè)要點(diǎn): ⑴通過循環(huán)列出所有可能的解。 ⑵對所有列出的可能的解進(jìn)行條件測試。,例:判斷一個(gè)數(shù)m是否為素?cái)?shù)。 eg6-21main(){ int i,m; scanf(“%d”,&m); for(i=2;i<m;i
32、++) if(m%i==0)break; if(i==m) printf(“\n %d is a prime”,m); else printf(“\n %d is not a prime”,m); },用測試法求解,例:(習(xí)題6.6) 打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。如:153是一水仙花數(shù),因?yàn)?153=13+53+33。,eg6-22main(
33、){ int i,j,k,n; for(n=100;n<=999;n++) { i=? j=? k=? if(i*i*i+j*j*j+k*k*k==n) printf(“\n%d”,n); } } 通過循環(huán)列出n的所有可能的范圍,i=n/100;,k=n%10;,j=n/10%10;,eg6-23main(){ int i,j,
34、k,n; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) { n=i*100+j*10+k; if(i*i*i+j*j*j+k*k*k==n) printf(“\n%d”,n); }}通過循環(huán)列出i,j,k的所有可能的范圍,main(){ i
35、nt i,j; float t,s=0; for(i=1;i<=20;i++) { s+=?; } printf(“\n s=%f”,s); }用兩重循環(huán)實(shí)現(xiàn),s+=t;,t=1;for(j=1;j<=i;j++) t*=j;,例:(習(xí)題6.4 ) eg6-24,用遞推法: 遞推公式:ti=ti-1.i,main(){
36、 int i,j; float t=1,s=t; for(i=2;i<=20;i++) { t=t*i; s+=t; } printf(“\n s=%f”,s); }eg6-25,例: 遞推公式:,s=∑,—,i!,1,1,20,=,— + — + — + — + …+ —,1! 2! 3! 4!
37、 20!,1 1 1 1 1,ti= ti-1 / i,eg6-26main(){ int i,j; float t=1,s=t; for(i=2;i<=20;i++) { t=t*i; s+=t; } printf(“\n s=%f”,s); },t=t/i;,習(xí)題6.3:
38、 s=a+aa+aaa+aaaa+aaaaa 2+22+222+2222+22222 遞推公式:ti= ti-1·?,ti= ti-1 * 10+a,eg6-27main(){ int i,j,a=2; float t=a,s=t; for(i=2;i<=5;i++) { t=t*10+a; s+=t;
39、 } printf(“\n s=%f”,s); },例:求定積分: 數(shù)值積分,,f (x),a,b,x,,∫,—,sinx,x,dx,a,b,,,,,,,,,,,,,等分n,h=,—,b-a,n,第i個(gè)矩形:x=?,x=a+(i-1).h,#include “math.h” main(){ int n,i; float a,b,x,y,h,s=0; scan
40、f(“%f%f%d”,&a,&b,&n); h=(b-a)/n; for(i=1;i<=n;i++) { x=a+(i-1)*h; y=sin(x)/x; s+=h*y; } printf(“\n s=%f”,s); }eg6-30,例:求方程 2x3+3x2-4x+1=0的根。 簡單迭代法基
41、本思想: 將原方程f(x)化為:x2=g(x1) x2=(2x13+3x12+1)/4 迭代公式,,迭代過程:,假定一個(gè)x1,x2=g(x1),不成立,|x2-x1∣<ε,,,,,,x1=x2,,,,輸出x2,,成立,Eg6-28main(){ float x1,x2; scanf(“%f”,&x1); while(1) { x2=(2
42、*x1*x1*x1+3*x1*x1+1)/4; if(fabs(x2-x1)<1e-6)break; ? } printf(“\n %f”,x2);},x1=x2;,牛頓迭代法基本思想: 牛頓迭代公式 f′(x1)=f(x1)/(x1-x2) x2=x1-f(x1)/ f′(x1),main() { float x1,x2,f1,f; scanf(“%f”,&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- [學(xué)習(xí)]樊媛媛c語言程序設(shè)計(jì)
- [學(xué)習(xí)]樊媛媛c語言程序設(shè)計(jì)08-函數(shù)
- [學(xué)習(xí)]樊媛媛c語言程序設(shè)計(jì)10-指針
- [學(xué)習(xí)]樊媛媛c語言程序設(shè)計(jì)07-數(shù)組
- [學(xué)習(xí)]樊媛媛c語言程序設(shè)計(jì)11-結(jié)構(gòu)體
- [學(xué)習(xí)]樊媛媛c語言程序設(shè)計(jì)09-編譯預(yù)處理
- c語言循環(huán)結(jié)構(gòu)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 《c語言程序設(shè)計(jì)》
- c語言程序設(shè)計(jì)
- c語言程序設(shè)計(jì)
- c語言程序設(shè)計(jì)
- c語言程序設(shè)計(jì)
- c語言程序設(shè)計(jì)學(xué)習(xí)資料及答案
- c語言程序設(shè)計(jì)中for循環(huán)語句的教學(xué)設(shè)計(jì)探析
- c語言程序設(shè)計(jì)(譚浩強(qiáng))
- c語言程序設(shè)計(jì)教程
- c語言程序設(shè)計(jì)3
- c語言程序設(shè)計(jì)論文
- c語言程序設(shè)計(jì)論文
- c語言程序設(shè)計(jì)49295
評論
0/150
提交評論