循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(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、1,C語(yǔ)言程序設(shè)計(jì)(電子教案),滕永晨 Tyc_T 蘭州理工大學(xué)計(jì)通學(xué)院,chap04 循環(huán)結(jié)構(gòu)程序設(shè)計(jì), if與goto構(gòu)成循環(huán) while構(gòu)成循環(huán) dowhile構(gòu)成循環(huán) for構(gòu)成循環(huán) 循環(huán)輔助控制語(yǔ)句(break和continue) 循環(huán)的嵌套結(jié)構(gòu),本章主要內(nèi)容,C語(yǔ)言中,除了可用if與goto構(gòu)成循環(huán)外,還提供while、dowhile和for三種循環(huán)語(yǔ)句,下面將分別介紹。,if與goto構(gòu)成的循環(huán),無(wú)條件轉(zhuǎn)向語(yǔ)句:goto,goto語(yǔ)句為無(wú)條件轉(zhuǎn)向語(yǔ)句,它使用起來(lái)十分方便,但決不可濫用。,功能:將程序控制轉(zhuǎn)移到“語(yǔ)句標(biāo)號(hào)”標(biāo)識(shí)的語(yǔ)句執(zhí)行。,格式:goto 語(yǔ)句標(biāo)號(hào),main( )

2、int i=1,s=0; L1: if(i=100) s=s+i; i+ ; goto L1; printf(s=%dn,s); ,零,非零,【例4-1】用if與goto語(yǔ)句求 。,while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。,功能:首先求解表達(dá)式,若為真(非0)則執(zhí)行循環(huán)體語(yǔ)句,然后,再次求解表達(dá)式,并重復(fù)前面的工作,直到表達(dá)式的值為假(0)時(shí)退出循環(huán)。,格式: while(表達(dá)式) 循環(huán)體語(yǔ)句; ,while 語(yǔ)句,【例4-2】 用while語(yǔ)句求 。,main( ) int i=1, sum=0; while(i=100) sum=sum+i; i=i+1; printf(sum=%dn,s

3、um); ,【例4-3 】 使用格里高利公式求的近似值,要求精確到最后一項(xiàng)的絕對(duì)值小于104。 4.3.1 程序解析 4.3.2 while語(yǔ)句,#include #include int main(void) int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while(fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = d

4、enominator +2; pi = pi * 4; printf (pi = %.4fn, pi); return 0; ,4.3.1 程序解析求的近似值,pi = 3.141613,item=0.0 ?,fabs(item) 0.0001,【例4-4】從鍵盤輸入一批學(xué)生的成績(jī),計(jì)算平均成績(jī),并統(tǒng)計(jì)不及格學(xué)生的人數(shù)。 分析: 求累加和 確定循環(huán)條件 不知道輸入數(shù)據(jù)的個(gè)數(shù),無(wú)法事先確定循環(huán)次數(shù) 用一個(gè)特殊的數(shù)據(jù)作為正常輸入數(shù)據(jù)的結(jié)束標(biāo)志,比如選用一個(gè)負(fù)數(shù)作為結(jié)束標(biāo)志。 循環(huán)的三種常見的控制方式(計(jì)數(shù)控制的循環(huán)、條件控制的循環(huán)、標(biāo)記控制的循環(huán)),#include int main(void)

5、int num,count=0; double grade, total; num = 0; total = 0; printf(Enter grades: n); scanf(%lf, ,Enter grades: 67 88 73 54 82 -1 Grade average is 72.80 Number of failures is 1,do while 語(yǔ)句用來(lái)實(shí)現(xiàn)“直到型”循環(huán)結(jié)構(gòu),格式:do,循環(huán)體語(yǔ)句;,功能:如右圖所示,while(表達(dá)式);,dowhile 語(yǔ)句,【例4-5】用dowhile語(yǔ)句求 。,main( ) int i,sum=0; i=1; do sum=sum

6、+i; i=i+1; while(i=100); printf(sum=%dn,sum); ,while和do-while循環(huán)的比較。,#includestdio.h main( ) int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(sum=%dn,sum); ,#includestdio.h main( ) int i,sum=0; i=1; do sum=sum+i; i=i+1; while(i=100); printf(sum=%dn,sum); ,【例4-6】編寫程序求這樣一個(gè)數(shù),這個(gè)數(shù)用3除余2,用5除余3,用7除余2。(從0

7、開始測(cè)試),非0,非0,非0,非0,0,main( ) int i,flag; i=0; flag=0; do i+; if(i%3=2 ,程序?yàn)椋?運(yùn)行結(jié)果為: i=23,應(yīng)用dowhile語(yǔ)句需要注意:,(1)dowhile語(yǔ)句是先執(zhí)行循環(huán)體,后求解while中的表達(dá)式,所以即使while中的表達(dá)式值開始就為假(0),循環(huán)體也會(huì)執(zhí)行一次; (2)除循環(huán)體一次都不執(zhí)行的情況外,while和dowhile語(yǔ)句是可以互相轉(zhuǎn)換的。 (3)在dowhile語(yǔ)句中,while (表達(dá)式);后的分號(hào)決不可少。 (4) 在設(shè)計(jì)dowhile循環(huán)時(shí),同樣要考慮循環(huán)的有限終止問(wèn)題,即也要在循環(huán)體中安排改變循環(huán)

8、變量值的語(yǔ)句,或用條件語(yǔ)句控制的break語(yǔ)句。,for 循環(huán)語(yǔ)句,格式:for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語(yǔ)句; ,功能:,設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值執(zhí)行,循環(huán)條件表達(dá)式,用來(lái)判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán),作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的,【例4-7】用for語(yǔ)句求,i=1; for(;i=100;i+) sum=sum+i;,for(i=1 ; i=100; ) sum=sum+i; i+;,i=1; for( ;i=100; ) sum=sum+i; i+;,fo

9、r(i=1; ;i+) if(i100) break; sum=sum+i;,i=1; for( ; ; ) sum=sum+i; i+; if(i100) break;,for(i=1, sum=0; i=100; sum=sum+i, i+) ;,【例4-8】編寫程序,判斷一個(gè)給定的數(shù) 是否為素?cái)?shù)。 素?cái)?shù)定義:除了1和m,不能被其它數(shù)整除。 算法分析: i 取值 2, m-1 2, m/2 2, ,非0,i=x1,非0,main( ) int i,x,flag=0; scanf(%d,程序如下:,輸入:31 顯示:31 is a prime number. 再次運(yùn)行,輸入51 顯示:51

10、isnt a prime number.,# include math.h,for(i=2;i= x-1; i+) if(x%i=0) flag=1;,printf (flag=0)?(%d is a prime number.n): (%d isnt a prime number.n),x);,main( ) int i,x,flag=0; scanf(%d,# include math.h,for(i=2;i= x-1 ; i+) if(x%i=0)flag=1; break; /*提前結(jié)束循環(huán)*/ ,printf (flag=0)?(%d is a prime number.n) : (

11、%d isnt a prime number.n),x);,利用break語(yǔ)句修改上述程序?yàn)椋?continue 語(yǔ)句,功能:提前結(jié)束本次循環(huán),即跳過(guò)循環(huán)體continue語(yǔ)句下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次循環(huán)。,格式: continue;,【例4-9】打印出199之間不能被5整除的數(shù),每10個(gè)數(shù)為一行。,程序如下:,#includestdio.h main( ) int i, j=0; for(i=1 ; i=99;) if(i%5=0) i+; continue; printf(%4d,i); i+; j+; if(j%10=0) printf(n); ,小結(jié):,為了更清楚地了解bre

12、ak語(yǔ)句和continue語(yǔ)句的區(qū)別,用下面的流程圖表示:,(1)break語(yǔ)句 while(表達(dá)式1) if(表達(dá)式2)break; ,(2) continue語(yǔ)句 while(表達(dá)1) if(表達(dá)式2)continue; ,作 業(yè),1、打印出如下圖案(菱形) * * * * * * *,2、將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出 90=2*3*3*5。 3、一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如6=123。編程找出1000以內(nèi)的所有完數(shù)。4、有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13.求出這個(gè)數(shù)列的前20項(xiàng)之和。,作 業(yè),#include

13、 main( ) int i=1; while (i=8) if(+i%3!=2)continue; else printf(%d,i); printf(n); ,分析下列程序的運(yùn)行結(jié)果:,#include main( )int i,k=19; while(i=k-1)k-=3; if(k%5=0)i+;continue; else if(k5)break; i+; printf(i=%d,k=%dn, i , k);,分析下列程序的運(yùn)行結(jié)果:,分析下列程序的運(yùn)行結(jié)果:,#include main( ) int a,y; a=10;y=0; do a+=2; y+=a; if(y50)brea

14、k; while(a=14); printf(“a=%d y=%dn”,a,y); ,注意:, break語(yǔ)句只能用在循環(huán)語(yǔ)句和switch語(yǔ)句中;, break語(yǔ)句只能跳出當(dāng)前循環(huán)語(yǔ)句和當(dāng)前switch語(yǔ)句;, continue語(yǔ)句只能用在循環(huán)語(yǔ)句中。,我們用下表對(duì)幾種循環(huán)語(yǔ)句進(jìn)行比較:,語(yǔ) 句 適 用 范 圍 說(shuō) 明,ifgoto,while,dowhile,for,盡可能少用,“ 當(dāng)型” 循環(huán) 先判斷后執(zhí)行,“ 直到型” 循環(huán) 先執(zhí)行后判斷,“ 步長(zhǎng)型” 循環(huán) 先判斷后執(zhí)行,完全可替代while,所構(gòu)成的循環(huán)不能用break和continue語(yǔ)句控制,循環(huán)變量的初始化應(yīng)在這兩個(gè)語(yǔ)句之前完

15、成,可以用break跳出循環(huán),用continue結(jié)束本次循環(huán),表達(dá)式3中可以包括使循環(huán)趨于結(jié)束的操作,甚至包括循環(huán)體中全部操作,在這兩個(gè)語(yǔ)句后面應(yīng)指定循環(huán)條件,循環(huán)體中應(yīng)包括能使循環(huán)結(jié)束的語(yǔ)句,goto語(yǔ)句可能破壞結(jié)構(gòu)化原則,應(yīng)限制使用,表達(dá)式3中可以包括使循環(huán)趨于結(jié)束的操作,甚至包括循環(huán)體中全部操作,可以用break跳出循環(huán),用continue結(jié)束本次循環(huán),可在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化,例1 古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?(編程求Fibonacci數(shù)列的前40個(gè)數(shù)。),循環(huán)應(yīng)

16、用舉例,迭代與遞推,一遍又一遍, 麥子磨成面。,迭代就是不斷用變量的新值替代其舊值。例如,一筆存款每年自動(dòng)轉(zhuǎn)存,就形成利滾利的情況,本金每年不同,不斷迭代。 遞推是由一個(gè)變量的值推出另外變量的值。例如,若每代人之間的年齡相差25歲,則由一個(gè)人的年齡推出其父親年齡、爺爺年齡的過(guò)程,就稱為遞推。,迭代或遞推三要素:,迭代或遞推初始狀態(tài),即迭代或遞推比變量的初始值。,迭代或遞推關(guān)系,即一個(gè)問(wèn)題中某個(gè)狀態(tài)的前項(xiàng)與后項(xiàng)之間的關(guān)系。,迭代或遞推的終止條件。,1. 問(wèn)題描述 意大利數(shù)學(xué)家昂納多斐波那契(Leonardo Fibonacci,11701240)在他1202年出版的珠算原理一書中提出一個(gè)問(wèn)題:假

17、定一對(duì)新出生的兔子一個(gè)月后成熟,并且再過(guò)一個(gè)月開始生出一對(duì)小兔子。按此規(guī)律,在沒(méi)有兔子死亡的情形下,一對(duì)初生的兔子,到一年頭上,可以繁殖成多少對(duì)兔子?這是一個(gè)典型的遞推問(wèn)題。,Fibonacci函數(shù)的定義為:,F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3),2. 算法分析,#include int main() int f1=1,f2=1,f3; int i; printf(%12dn%12dn,f1,f2); for(i=1; i=38; i+) f3=f1+f2; printf(%12dn,f3); f1=f2; f2=f3; return 0; ,#inc

18、lude int main() int f1=1,f2=1; int i; for(i=1; i=20; i+) printf(%12d %12d ,f1,f2); if(i%2=0) printf(n); f1=f1+f2; f2=f2+f1; return 0; ,改為while語(yǔ)句: #includestdio.h main( ) int f1=1, f2=1,f; int i=2; printf(%12d%12d,f1,f2); while(i40) f=f1+f2; i+; printf(%12d,f); if (i%4=0) printf(n); f1=f2;f2=f; ,1. 問(wèn)

19、題描述 一天一只小猴子摘下一堆桃子,當(dāng)即吃去一半,還覺(jué)得不過(guò)癮,又多吃了一個(gè)。第2天接著吃了前一天剩下的一半,饞不忍罷又多吃了一個(gè)。以后每天如此。到第10天小猴子去吃時(shí),只剩下一個(gè)桃子了。問(wèn)小猴子最初共摘了多少桃子?,例1思考:猴子吃桃子,2. 算法分析,首先看一下用代數(shù)方法如何求解此題。 設(shè)小猴子當(dāng)初共摘了x個(gè)桃子。則根據(jù)題意,有:,3. 采用while結(jié)構(gòu)的參考代碼,#include int main(void) int peachNumber=1,days=10; while(days 1) peachNumber=(peachNumber + 1) * 2; -days; printf(第%d天的桃子數(shù)為:%d個(gè)。n, days, peachNumber); return 0; ,例2:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。 例如:153是一個(gè)“水仙花數(shù)”,因?yàn)?53=1的三次方5的三次方3的三次方。程序分析:利用for循環(huán)控制1

溫馨提示

  • 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)論