版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第六章 循環(huán)控制6. 1 概述概述6. 2 goto語句以及用語句以及用goto語句構(gòu)成循環(huán)語句構(gòu)成循環(huán)6. 3 while語句語句6. 4 do - while語句語句6. 5 for語句語句6. 6 循環(huán)的嵌套循環(huán)的嵌套6. 1 概述概述C語言描述循環(huán)結(jié)構(gòu)的方法:1)goto語句與if語句配合(可構(gòu)成當(dāng)型、直到型)2)while語句 (當(dāng)型循環(huán))3)do while語句 (直到型循環(huán))4)for語句 (當(dāng)型循環(huán))6. 3 while語句語句一般形式:一般形式:while (while (表達(dá)式表達(dá)式) )語句語句其中: 表達(dá)式表示循環(huán)條件;可是任何表達(dá)式。 內(nèi)嵌語句為循環(huán)體;是一條語句。執(zhí)
2、行流程: 首先求解表達(dá)式并進(jìn)行邏輯判斷,為真執(zhí)行內(nèi)嵌語句;再次求解表達(dá)式并判斷,為真再次執(zhí)行內(nèi)嵌語句;當(dāng)表達(dá)式值為假時,退出while循環(huán)。例:求例:求#include stdio.hint main( ) int i=1, sum=0; while(i=100) sum=sum+i; i=i+1 ; printf(%dn, sum); return 0; 1001nnsum+=i; i+ ;易錯點(diǎn):易錯點(diǎn):累加變量累加變量在循環(huán)體外初值在循環(huán)體外初值使用說明:1)循環(huán)變量應(yīng)該在循環(huán)體外初值;2)在while的循環(huán)體中一定要有改變循環(huán)變量的值以使循環(huán)條件為假的語句,否則將形成死循環(huán);1)循環(huán)變
3、量、累加變量、累乘變量都)循環(huán)變量、累加變量、累乘變量都要在循環(huán)體外初值;要在循環(huán)體外初值;2)在循環(huán)體中要有改變循環(huán)變量的值)在循環(huán)體中要有改變循環(huán)變量的值的語句。的語句。例:累加例:累加求求:1+22+32+102 的值的值#include stdio.hint main()int i=1,sum=0;while(i11)printf(%d,sum); return 0;sum=sum+i*i; i+;求:求:4i1000的的i的最大值的最大值#include stdio.hint main()int i=0,p=1;while(p1000) i+; p=p*4;printf(%d,i-1
4、); return 0; 6. 4 do - while語句語句一般形式: do 語句 while (表達(dá)式) ;其中:其中: 表達(dá)式表示了循環(huán)條件,可以是任何表達(dá)式。 內(nèi)嵌語句為循環(huán)體;單條、復(fù)合。執(zhí)行流程:執(zhí)行流程: 首先執(zhí)行內(nèi)嵌語句,之后求解表達(dá)式并對其值進(jìn)邏輯判斷,為真再次執(zhí)行內(nèi)嵌語句,如此反復(fù),直到表達(dá)式的值為假退出 do - while循環(huán)。例:求例:求5! #include stdio.hint main( ) int i, p; i=1, p=1; do p=p*i; i+ ; while(i=1e-6pi=pi+t計算下一項tpi=pi*4輸出pi#include math.
5、hint main( ) int s; float n, t, pi; n=1.0; s=1; t=1.; pi=0; /*判斷某項*/ pi=pi+t; /*累加*/ n=n+2.0; /*求下一項*/ s=-s; t=s/n; printf(PI=%10.6fn, pi*4);return 0;直到某項的絕對值直到某項的絕對值小于小于10-6為止。為止。while(fabs(t)=1e-6)6. 5 for語句語句一般形式:一般形式:for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 語句其中:其中: 內(nèi)嵌語句為循環(huán)體;可以是單條、復(fù)合; 表達(dá)式13可是任何形式的表達(dá)式; 循環(huán)類型:當(dāng)型例:例:
6、求任意求任意1010個三角形的面積個三角形的面積. .lint main( )l float a,b,c,s,area; l printf(Enter a, b, c:); l scanf(%f,%f,%f, &a, &b, &c);l if(a+bc & a+cb & b+ca)l s=(a+b+c)/2.0;l area=sqrt(s*(s-a)*(s-b)*(s-c);l printf(area=%-8.3fn, area); l else printf(DATA ERROR!n);lreturn 0;l int main( ) float a,b
7、,c,s,area; int i; for(i=1;ic & a+cb & b+ca) s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%-8.3fn, area); else printf(DATA ERROR!n); return 0;6. 8 break語句和語句和continue語句語句 (循環(huán)的附加控制)(循環(huán)的附加控制)1. break語句語句一般形式:一般形式: break;break;常用形式常用形式: : if(if(表達(dá)式表達(dá)式) break;) break;功能:功能:以if(if(表達(dá)式
8、表達(dá)式) break;) break;的的形式放在 whilewhile、do- do- whilewhile、forfor語句的循環(huán)體中語句的循環(huán)體中, ,用于跳出(結(jié)束)循環(huán)語句. 以break; break; 的的形式放在switch語句中語句中, , 用于跳出(結(jié)束)switchswitch構(gòu)成的多路分支結(jié)構(gòu)。例:判斷例:判斷m m是否素數(shù)是否素數(shù)素數(shù):除素數(shù):除1和它本身之外再無別的約數(shù);和它本身之外再無別的約數(shù);m算法:判斷算法:判斷m%i=0成立否?成立否? i取值取值: 2(m-1) 或:或:2#include math.h int main( ) int m, i, k; p
9、rintf(Enter m: ); scanf(%d,&m); k=sqrt(m);for(i=2; i=k; i+) if(m%i=0) break;if(i=k+1)printf(%d is a prime number.n, m);else printf(%d is not prime number.n, m);return 0;2. continue語句語句 一般形式:一般形式: continue;continue;常用形式:常用形式: if (e) continue;if (e) continue;功能:功能:用于用于whilewhile、do-whiledo-while、f
10、orfor的循環(huán)體中,的循環(huán)體中, 跳過跳過本次循環(huán)體本次循環(huán)體后面尚未執(zhí)行后面尚未執(zhí)行的語句的語句,繼續(xù)循環(huán)流,繼續(xù)循環(huán)流程的下一步。程的下一步。例:例: 例:例:for中用中用 continue while中用中用continue for(e1; e2; e3 ) while( e1 ) if (e) continue; if(e) continue; do-while中用中用continue do if (e) continue; while( e1 ) 讀下列程序:讀下列程序:#include stdio.hInt main( ) int n; printf(n); for(n=100
11、; n=200; n+)例:把例:把100_200之間之間不能不能被被3整除的數(shù)輸出整除的數(shù)輸出.改寫改寫 if(n%3=0) continue; printf(%5d, n); return 0;枚舉(窮舉)算法:枚舉(窮舉)算法:采用枚舉算法求解問題的基本思路為:采用枚舉算法求解問題的基本思路為:(1)確定)確定枚舉對象枚舉對象,枚舉范圍枚舉范圍和和判定條件判定條件;(2)一一枚舉該范圍的對象,驗證是否為問題的解。)一一枚舉該范圍的對象,驗證是否為問題的解。枚舉算法的實現(xiàn):用循環(huán)語句從可能的集合中一一枚舉各枚舉算法的實現(xiàn):用循環(huán)語句從可能的集合中一一枚舉各個元素;在循環(huán)體中用選擇語句判定哪
12、些是所求的解。個元素;在循環(huán)體中用選擇語句判定哪些是所求的解。其基本格式如下:其基本格式如下:ForFor(循環(huán)變量(循環(huán)變量x x取所有可能的值)取所有可能的值) if( if(滿足指定的條件)滿足指定的條件) 處理語句處理語句 6. 6 循環(huán)的嵌套循環(huán)的嵌套 一個循環(huán)體內(nèi)又包含一個完整的循環(huán)語句,稱一個循環(huán)體內(nèi)又包含一個完整的循環(huán)語句,稱為循環(huán)的嵌套。為循環(huán)的嵌套。 C C四種形式的循環(huán)可以互相嵌套,但絕不能出現(xiàn)四種形式的循環(huán)可以互相嵌套,但絕不能出現(xiàn)交叉現(xiàn)象。交叉現(xiàn)象。正確的循環(huán)嵌套形式:正確的循環(huán)嵌套形式: 外循環(huán)體外循環(huán)體 內(nèi)循環(huán)內(nèi)循環(huán) 外循環(huán)體外循環(huán)體 內(nèi)循環(huán)內(nèi)循環(huán)1 內(nèi)循環(huán)內(nèi)循環(huán)
13、2三重循環(huán)三重循環(huán)分辨循環(huán)語句之間的關(guān)系分辨循環(huán)語句之間的關(guān)系for(.).for(.).內(nèi)循環(huán)內(nèi)循環(huán)外循環(huán)外循環(huán)for(.).for(.). 并列循環(huán)并列循環(huán)嵌套循環(huán)嵌套循環(huán)交叉循環(huán)交叉循環(huán)for(.).for(.) . 錯誤錯誤例:do-while嵌套 例:do-while、for混合嵌套 do do do for(e1;e2;e3) while(e1); while(e); while(e); l 1 #include l 2 int main()l 3 l 4 int i,m;l 5 scanf(%d,&m);l 7 for (i=2 ; i=m-1 ; i+)l 8 if (
14、m % i=0) break;l 9 if (i=m) printf(Yesn);l 10 else printf(Non);l 11 return 0;l 12 判斷一個整數(shù)為素數(shù)判斷一個整數(shù)為素數(shù)例:求100 200之間的全部素數(shù)。算法:枚舉100 200之間的素數(shù)。 #include int main() int i,m;for(m=101; m200; m=m+2)for (i=2 ; i=m-1 ; i+) if (m % i=0) break; if (i=m) printf(Yesn); else printf(Non); return 0; 例:某學(xué)院一年級共10個小班,求每一
15、個班英語課的平均成績。 #includestdio.hInt main()float sum,mark,aver;int i,num,j;for(j=1;j=10;j+) sum=0; printf(input class %d num,j); scanf(%d,&num); /*輸入人數(shù)*/ for(i=1; i=num; i+) /*循環(huán)次數(shù)明確*/ scanf(%f, &mark); sum=sum+mark; aver=sum/num;printf(class %d aver mark is %.2fn,j,aver);return 0;【例3.14】 百錢買百雞問題:
16、有人有一百塊錢,打算買一百只雞。公雞一只5元,母雞一只3元,小雞3只1元,求應(yīng)各買多少? 枚舉對象及范圍:三種雞的個數(shù)(設(shè)為x、y、z)。判定條件:三種雞的總數(shù)(x+y+z)=100和買雞用的錢的總數(shù)(5x+3y+z/3)=100。 1 #include 2 int main() 3 4 int x,y,z; 5 for (x=0; x=20; x+) 6 for (y=0; y=33; y+) 7 for (z=0; z=100; z+) 8 if (z%3=0 & x+y+z=100 & 5*x+3*y+z/3=100) 9 printf(公雞公雞=%d,母雞母雞=%d,小
17、雞小雞=%dn,x,y,z); 10 return 0; 11 例3.14 5 for (x=0; x=20; x+) 6 for (y=0; y=33; y+) 7 z=100-x-y; 8 if (z%3=0 & 5*x+3*y+z/3=100) 9 printf(公雞公雞=%d,母雞母雞=%d,小雞小雞=%dn,x,y,z); 10 由于三種雞的和是固定的,因此只要枚舉二種雞(x、y),第三種雞就可以根據(jù)約束條件求得(z=100-x-y),這樣就縮小了枚舉范圍變成雙重循環(huán)。之所以選擇z,是因為z的數(shù)量大,優(yōu)化效果更好。此時循環(huán)體執(zhí)行21x34=714次。 ch0615l#incl
18、udestdio.hlInt main()lchar i,j,k;lfor(i=x;i=z;i+)l for(j=x;j=z;j+)l for(k=x;k=z;k+)l if(i!=j&i!=k&j!=k)l if(i!=x&k!=x&k!=z)l printf(A-%ct B-%ctC-%cn,i,j,k);lT0611.CPP l編寫程序計算編寫程序計算500800區(qū)間內(nèi)素數(shù)的個數(shù)區(qū)間內(nèi)素數(shù)的個數(shù)cnt,并按所求素數(shù)的值從大到小的順序,再計算其并按所求素數(shù)的值從大到小的順序,再計算其間隔減、加之和,即第間隔減、加之和,即第1個素數(shù)第個素數(shù)第2個素數(shù)個素數(shù)+第
19、第3個素數(shù)第個素數(shù)第4個素數(shù)個素數(shù)+第第5個素數(shù)個素數(shù)的值的值sum。 l#includel#includelint main()llint m,k,i,cnt=0,s=0,q=1;lfor(m=799;m=500;m=m-2)lprintf(cnt=%d,s=%dn,cnt,s);lreturn 0;l k=sqrt(m); for(i=2;i=k;i+)if(m%i=0) break;if(i=k+1)s=s+q*m; q=-q; cnt=cnt+1;迭代法是一種不斷用變量的舊值遞推新值的求解方法。迭代法是一種不斷用變量的舊值遞推新值的求解方法。采用迭代算法求解問題的基本思路為:(1)確定
20、迭代變量確定迭代變量。在可以用迭代算法解決的問題中,至少存在一個直接或間接地不斷由舊值遞推出新值的變量,這個變量就是迭代變量。 (2)建立迭代關(guān)系式建立迭代關(guān)系式。所謂迭代關(guān)系式,指如何從變量的前一個值推出其下一個值的公式(或關(guān)系)。(3)實現(xiàn)迭代算法。實現(xiàn)迭代算法。4迭代算法迭代算法【例3.15】 求斐波那契(Fibonacci)數(shù)列前40個 數(shù)。斐波那契數(shù)列公式為: (1) 1(1)(2) 1(2)( )(1)(2)(2)fnfnf nf nf nn語句的設(shè)計:語句的設(shè)計:確定變量并賦初值:當(dāng)前項(fn)為后兩項(f1,f2),為f1,f2賦初值,并輸出前兩項。循環(huán)語句:循環(huán)語句:1)循環(huán)
21、變量)循環(huán)變量 :i=32)循環(huán)條件:)循環(huán)條件:i=403)循環(huán)體:)循環(huán)體:求出一項求出一項fn,輸出一項;,輸出一項;調(diào)整后兩項變量(調(diào)整后兩項變量(f1,f2)的值的值i+ 例3.15#include int main() int i, f1=1,f2=1,fn; /迭代變量迭代變量 printf(%dn%dn,f1,f2);for(i=3;i1e-5)給定初值給定初值x0, 計算計算x1.構(gòu)造循環(huán)構(gòu)造循環(huán):循環(huán)條件循環(huán)條件x1-x0大于給定精度大于給定精度;循環(huán)體中循環(huán)體中:1)用用x1更新更新 x0,2)用用x0通過迭代公式算出通過迭代公式算出X1,x0=x1; x1=1./2*(x0+a/x0);簡單迭代求方程的近似根簡單迭代求方程的近似根 給定方程給定方程f(xf(x)=0)=0,按照迭代公式:,按照迭代公式:X Xn+1n+1=g(X=g(Xn n) )進(jìn)行進(jìn)行迭代,迭代,直到直到xn+1-xn小于給定精度。小于給定精度。算法實現(xiàn):算法實現(xiàn): 給定初值給定初值x0,通過迭代公式算出通過迭代公式算出X1;構(gòu)造循環(huán):構(gòu)造循環(huán):循環(huán)條件:循環(huán)條件:x1-x0大于給定精度。大于給定精度。循環(huán)體循環(huán)體:X1更新更新 x0,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入探討科技企業(yè)如何通過強(qiáng)化知識產(chǎn)權(quán)保護(hù)來提升品牌形象和競爭力
- 現(xiàn)代綠色辦公樓的設(shè)計與施工經(jīng)驗分享
- 生產(chǎn)制造中基于智能算法的調(diào)度系統(tǒng)設(shè)計
- 2023三年級英語上冊 Unit 3 My friends第4課時說課稿 牛津譯林版
- 2024年春八年級語文下冊 第二單元 5 大自然的語言說課稿 新人教版
- 9 烏鴉喝水(說課稿)-2024-2025學(xué)年統(tǒng)編版語文一年級上冊
- Unit 4 My Family Lesson 2(說課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語三年級下冊
- Unit 6 Useful numbers Lesson 2(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 2024-2025學(xué)年高中歷史 第三單元 各國經(jīng)濟(jì)體制的創(chuàng)新和調(diào)整 第16課 戰(zhàn)后資本主義經(jīng)濟(jì)的調(diào)整教學(xué)說課稿 岳麓版必修2
- 2025淮安市城東花園小區(qū)門禁系統(tǒng)工程合同
- 2025年人教五四新版八年級物理上冊階段測試試卷含答案
- 2025新人教版英語七年級下單詞表(小學(xué)部分)
- 2025年春季1530安全教育記錄主題
- 礦山2025年安全工作計劃
- 基本藥物制度政策培訓(xùn)課件
- 2025年包裝印刷項目可行性研究報告
- 2025年九年級物理中考復(fù)習(xí)計劃
- 企業(yè)融資報告特斯拉成功案例分享
- 合資經(jīng)營工廠合同范本
- 2024年新疆(兵團(tuán))公務(wù)員考試《行測》真題及答案解析
- 2024年《論教育》全文課件
評論
0/150
提交評論