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

下載本文檔

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

文檔簡(jiǎn)介

1、5.1 概述概述 循環(huán)結(jié)構(gòu)是高級(jí)語(yǔ)言中一個(gè)重要的基本結(jié)構(gòu),它可以利用很少的語(yǔ)句簡(jiǎn)單方便地重復(fù)執(zhí)行一些操作,因此應(yīng)用很廣。 1、基本概念 (1)循環(huán)條件:控制循環(huán)的條件。 (2)循環(huán)變量:確定循環(huán)條件的變量。 (3)循環(huán)體:程序中需要重復(fù)執(zhí)行的語(yǔ)句。 第第5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 2、循環(huán)的種類 (1)當(dāng)型循環(huán):先判斷條件,當(dāng)條件成立時(shí)執(zhí)行循環(huán)體,條件不成立循環(huán)體一次也不執(zhí)行。 (2)直到型循環(huán):先執(zhí)行循環(huán)體,后判斷條件,當(dāng)條件成立時(shí)繼續(xù)循環(huán),條件不成立結(jié)束循環(huán)(至少執(zhí)行循環(huán)體一次)。3、C語(yǔ)言中實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的四種語(yǔ)句: while 語(yǔ)句 (當(dāng)型) dowhile 語(yǔ)句 (直到型

2、) for 語(yǔ)句 (當(dāng)型) goto語(yǔ)句和if 語(yǔ)句結(jié)合形成循環(huán)結(jié)構(gòu)(容易形成非結(jié) 構(gòu)化,可以不用) 5.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán) 一、自由轉(zhuǎn)向語(yǔ)句goto1、一般形式 或: 標(biāo)號(hào):語(yǔ)句 goto 標(biāo)號(hào) goto 標(biāo)號(hào) 標(biāo)號(hào): 語(yǔ)句 (形成循環(huán)結(jié)構(gòu)) (不形成循環(huán)結(jié)構(gòu)) 2、說(shuō)明 (1)標(biāo)號(hào)為合法的標(biāo)識(shí)符,不能是數(shù)字等??杉釉谌魏握Z(yǔ)句的前面。 (2)goto語(yǔ)句是造成程序非結(jié)構(gòu)化的重要原因,因此盡量不用(C語(yǔ)言中完全可以不用)。二、用goto語(yǔ)句構(gòu)成循環(huán):在上面第一種形式中,將“goto 標(biāo)號(hào)”改為: if(條件) goto 標(biāo)號(hào);例 用if 和goto語(yǔ)句構(gòu)成循環(huán),求100

3、1nnmain() int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop; printf(%d,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體5.3 while 5.3 while 語(yǔ)句語(yǔ)句1、while 語(yǔ)句的一般形式 while (條件) 循環(huán)體語(yǔ)句2、說(shuō)明 (1)while 是關(guān)鍵字,“while (條件)”的意思為“當(dāng)條件成立時(shí)執(zhí)行”; (2)“條件”為關(guān)系表達(dá)式、邏輯表達(dá)式和任意合法的表達(dá)式,其兩端的圓括號(hào)不能少; (3)循環(huán)

4、體為一條語(yǔ)句或復(fù)合語(yǔ)句,可執(zhí)行多次,也可能一次也不執(zhí)行。3、while循環(huán)的執(zhí)行過(guò)程: 計(jì)算表達(dá)式(條件) 值為假(0) 值為真 (非0) 執(zhí)行循環(huán)體 例例 計(jì)算計(jì)算1100之間所有之間所有3的倍數(shù)的數(shù)的和。的倍數(shù)的數(shù)的和。main()int i,s; i=1;s=0; while(i=100) if (i%3=0) s=s+i; i+; printf(“s=%dn”,s);5.4 do5.4 dowhile while 語(yǔ)句語(yǔ)句1、dowhile 語(yǔ)句的一般形式 do 循環(huán)體語(yǔ)句 while (條件);2、說(shuō)明 (1)do、while是C語(yǔ)言的關(guān)鍵字; (2)循環(huán)體是一條語(yǔ)句或復(fù)合語(yǔ)句; (

5、3)“條件”為關(guān)系表達(dá)式、邏輯表達(dá)式和任意合法的表達(dá)式,兩端的圓括號(hào)不能少,其后的“;”表示dowhile語(yǔ)句的結(jié)束,也不能少。 3、do-while循環(huán)的執(zhí)行過(guò)程: 執(zhí)行循環(huán)體 計(jì)算表達(dá)式(條件) 值為假(0) 值為真 (非0)例例 求兩個(gè)整數(shù)求兩個(gè)整數(shù)m和和n最大公約數(shù)最大公約數(shù)main()int m,n,a,b,r; scanf(“%d%d”,&m,&n); a=m;b=n; dor=a%b; a=b; b=r;while(r!=0);printf(“the greatest common divide of”);printf(“%d,%d is %dn”,m,n,a);

6、 5.5 for 5.5 for 語(yǔ)句語(yǔ)句1、for語(yǔ)句的一般形式 for(初始化表達(dá)式;條件表達(dá)式;修正表達(dá)式) 循環(huán)體語(yǔ)句2、說(shuō)明 (1)for為C語(yǔ)言的關(guān)鍵字; (2)for后圓括號(hào)中的三個(gè)表達(dá)式可以是任意表達(dá)式,它們的作用如下: 初始化表達(dá)式:對(duì)循環(huán)變量等賦初值??墒?,此時(shí)初始化在for語(yǔ)句前進(jìn)行; 條件表達(dá)式:控制循環(huán)的條件,為關(guān)系表達(dá)式、邏輯表達(dá)式或任意合法的表達(dá)式。一般不能省,若省,可能產(chǎn)生死循環(huán); 修正表達(dá)式:對(duì)循環(huán)變量進(jìn)行修正??墒?,此時(shí)對(duì)循環(huán)變量的修正在循環(huán)體中或在條件表達(dá)式中進(jìn)行。 (3)循環(huán)體語(yǔ)句為一條語(yǔ)句或復(fù)合語(yǔ)句 3、for循環(huán)結(jié)構(gòu)的執(zhí)行過(guò)程,可用下圖表示: 假 (

7、0) for(初始化表達(dá)式; 條件(表達(dá)式); 修正表達(dá)式) 真 (非0 ) 循環(huán)體語(yǔ)句例1:求sum=1+2+3+100 sum=0; for(i=1;i=100;i+)sum+=i; 其中i為循環(huán)變量。此程序段可改寫成很多形式,例如:(1) for(sum=0,i=1;i=100;sum+=i,i+); /*無(wú)循環(huán)體,含在修正表達(dá)式中*/ (2) sum=0; i=1; /*初始化放在for語(yǔ)句之前*/ for(;i=100;i+)sum+=i; (3) sum=0;i=0; for(;+i=100;)sum+=i; /*條件表達(dá)式同時(shí)起到修正表達(dá)式的作用*/ (4) sum=0; i=1

8、; for(;i=100;)sum+=i;i+; /*對(duì)循環(huán)變量的修正放在循環(huán)體中*/ 可見(jiàn)for語(yǔ)句的用法相當(dāng)靈活,功能很強(qiáng),用途很廣。例例2:2:寫出下面程序的運(yùn)行結(jié)果寫出下面程序的運(yùn)行結(jié)果main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); 例例3 打印所有的打印所有的“水仙花數(shù)水仙花數(shù)“。所謂。所謂”水仙花數(shù)水仙花數(shù)”是指一個(gè)是指一個(gè)3位數(shù),其各位位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,數(shù)字的立方和等于該數(shù)本身。例如,153是一個(gè)是一個(gè)“水仙花數(shù)水仙花數(shù)“,因?yàn)?,因?yàn)?53=13+53+

9、33main()int i,j,k,n; printf(“水仙花水仙花“數(shù)是數(shù)是:”); for (n=100;n1000;n+) i=n/100; j=n/10-i*10; k=n%10; if (n=i*i*i+j*j*j+k*k*k) printf(“%4d”,n); printf(“n”);5.6 5.6 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套 由于循環(huán)體可以是任意語(yǔ)句,因此也可以是循環(huán)語(yǔ)句,這就構(gòu)成循環(huán)結(jié)構(gòu)的嵌套。既可以是同種循環(huán)語(yǔ)句嵌套,也可以是不同循環(huán)語(yǔ)句相互嵌套。嵌套循環(huán)的特點(diǎn):外循環(huán)變量每取一個(gè)值,內(nèi)循環(huán)要循環(huán)一周。 例:百雞問(wèn)題:百錢買百雞,公雞三塊錢一只,母雞兩塊錢一只,小雞一塊錢

10、買三只,問(wèn)共買公雞、母雞和小雞各多少只?分析:可用窮舉算法,公雞不超過(guò)33只,母雞不超過(guò)49只,小雞=100-公雞-母雞??捎们短椎膚hile或do-while或for循環(huán)編程。嵌套的while循環(huán)如下:main( )int cock=0,hen,chick; while(cock=33) hen=0; while(hen=49) chick=100-cock-hen; if(3*cock+2*hen+chick/3=100 & chick%3=0) printf(“%d,%d,%dn”,cock,hen,chick); hen+; cock+; 5.7 流程限定轉(zhuǎn)向語(yǔ)句:流程限定轉(zhuǎn)向

11、語(yǔ)句:break和和continue 5.7.1 break(中斷)語(yǔ)句。前面學(xué)過(guò)它的作用有:1、跳出當(dāng)層switch結(jié)構(gòu)2、循環(huán)體中的break語(yǔ)句,使流程跳出當(dāng)層循環(huán)語(yǔ)句。注意:循環(huán)體中的break語(yǔ)句應(yīng)作為 if 語(yǔ)句的一個(gè)分支,即是在一定條件下才跳出循環(huán)。例例1 1:對(duì)于整數(shù)半徑的圓,求面積大于:對(duì)于整數(shù)半徑的圓,求面積大于100100的最小的面的最小的面積積。#define PI 3.14159main( )int r; float area; for(r=1;r100) break; printf(“area=%fn, area); 5.7.2 continue(繼續(xù))語(yǔ)句1、一般

12、形式 continue;2、放置位置:循環(huán)體中,一般也是作為if語(yǔ)句的一個(gè)分支,以防出現(xiàn)死語(yǔ)句。3、作用:(結(jié)束本次循環(huán))跳過(guò)循環(huán)體中余下的語(yǔ)句,然后: 對(duì)while循環(huán)和dowhile循環(huán):繼續(xù)計(jì)算(條件)表達(dá)式以確定是否繼續(xù)循環(huán); 對(duì)for循環(huán):計(jì)算修正表達(dá)式,然后計(jì)算條件表達(dá)式以確定是否繼續(xù)循環(huán)。例1 寫出下面程序的運(yùn)行結(jié)果 main( ) int k=0, s=0, i; for(i=1;i5)printf(*i=%d,s=%d,k=%dn,i,s,k); continue; k=k+s; printf(i=%d,s=%d,k=%dn,i,s,k); 當(dāng)s5時(shí),由于continue語(yǔ)句

13、的作用,for循環(huán)中循環(huán)體的最后兩條語(yǔ)句不再執(zhí)行。程序輸出四行信息:i=1, s=1, k=1i=2, s=3, k=4* i=3, s=6, k=4* i=4, s=10, k=44、continue語(yǔ)句與break語(yǔ)句比較。 實(shí)驗(yàn)五實(shí)驗(yàn)五1、利用公式求、利用公式求cosx的近似值(精度為的近似值(精度為0.01) 2、每個(gè)蘋果、每個(gè)蘋果 0.8元,第一天買元,第一天買2個(gè)蘋果,第二個(gè)蘋果,第二天開始,每天買前一天的天開始,每天買前一天的2倍,直到購(gòu)買的蘋倍,直到購(gòu)買的蘋果個(gè)數(shù)達(dá)到不超過(guò)果個(gè)數(shù)達(dá)到不超過(guò)100的最大值。編寫程序求的最大值。編寫程序求每天平均花多少錢?每天平均花多少錢?)!2(

14、) 1(.! 6! 4! 21cos20642nxxxxxnnn3、編寫程序,從鍵盤輸入、編寫程序,從鍵盤輸入6名學(xué)生的名學(xué)生的5門成績(jī),門成績(jī),分別統(tǒng)計(jì)出每個(gè)學(xué)生的平均成績(jī)。分別統(tǒng)計(jì)出每個(gè)學(xué)生的平均成績(jī)。4、試編寫程序,找出、試編寫程序,找出1至至99之間的全部同構(gòu)數(shù)。之間的全部同構(gòu)數(shù)。同構(gòu)數(shù)是這樣一組數(shù):它出現(xiàn)在平方數(shù)的右同構(gòu)數(shù)是這樣一組數(shù):它出現(xiàn)在平方數(shù)的右邊。例如:邊。例如:5是是25右邊的數(shù),右邊的數(shù),25是是625右邊的右邊的數(shù),數(shù),5和和25都是同構(gòu)數(shù)。都是同構(gòu)數(shù)。5、打印形狀為直角三角形的九九乘法表。、打印形狀為直角三角形的九九乘法表。習(xí)題課習(xí)題課例例1 已知正弦值近似計(jì)算公式

15、為:已知正弦值近似計(jì)算公式為:輸入輸入x和和eps,按上述公式計(jì)算,按上述公式計(jì)算sinx的近似的近似值,要求計(jì)算誤差小于給定的值,要求計(jì)算誤差小于給定的eps.)!12 () 1(.! 7! 5! 3sin12753nxxxxxxnn#include main()float x,eps,s,m=0.0,mo; int n=0,i=1,j,t; printf(“enter float x & eps:”); scanf(“%f%f”,&x,&eps); do t=s=1; mo=m; for (j=1;jeps);printf(“%d,sin(%f)=%fn”,n,x,

16、m); 例例2 打印輸出下列圖案打印輸出下列圖案 * * * * * * *main()int i,j; for (i=1;i=4;i+) for (j=1;j=4-i;j+) printf(“ “); for (j=1;j=2*i-1;j+) printf(“*”); printf(“n”); for (i=1;i=3;i+) for (j=1;j=i;j+) printf(“ “); for (j=1;j=7-2*i;j+) printf(“*”); printf(“n”); 例例3 一個(gè)正整數(shù)如果恰好等于它的因子之和(除一個(gè)正整數(shù)如果恰好等于它的因子之和(除自身外),則稱該數(shù)為完全數(shù),例如:自身外),則稱該數(shù)為完全數(shù),例如:6=1+2+3,6為完全數(shù)。編程求為完全數(shù)。編程求1000以內(nèi)的所以內(nèi)的所有完全數(shù)。有完全數(shù)。main()int a,i,m; for (a=1;a=1000;a+) for (m=0,i=1 ;i=a/2;i+) if (!(a%i) m+=i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論