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

下載本文檔

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

文檔簡(jiǎn)介

1、寧波大學(xué)信息科學(xué)與工程學(xué)院 計(jì)算機(jī)系循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 程序中的重復(fù)程序中的重復(fù) while語句語句 do-while語句語句 for語句語句 退出循環(huán)退出循環(huán) 循環(huán)的嵌套循環(huán)的嵌套 實(shí)例研究實(shí)例研究程序中的重復(fù)程序中的重復(fù)計(jì)數(shù)循環(huán):可在循環(huán)執(zhí)行前確定重復(fù)的次數(shù)。如明確告知需要處理n個(gè)數(shù)據(jù)等。 標(biāo)記控制循環(huán):用一個(gè)正常情況下不會(huì)出現(xiàn)在數(shù)據(jù)中的值來作為循環(huán)結(jié)束的標(biāo)記。如輸入學(xué)生成績(jī)時(shí)以負(fù)數(shù)作為結(jié)束標(biāo)記。 條件循環(huán):重復(fù)操作直到期望的條件滿足。如累加的和達(dá)到某一數(shù)值,或者計(jì)算的精度達(dá)到某一數(shù)值。 文件結(jié)束控制循環(huán):用EOF來判斷輸入是否結(jié)束。 while語句1.計(jì)數(shù)循環(huán)計(jì)數(shù)循環(huán) 【例【例4-1】學(xué)生

2、成績(jī)求和。編寫程序,從鍵盤輸入】學(xué)生成績(jī)求和。編寫程序,從鍵盤輸入10位同學(xué)的成績(jī),位同學(xué)的成績(jī), 計(jì)算他們的總分。計(jì)算他們的總分。 int sum=0; int i=0; int x; printf(Input 10 score:n); while(i10) /*判斷循環(huán)條件判斷循環(huán)條件*/ scanf(%d,&x); /*讀入一個(gè)成績(jī)讀入一個(gè)成績(jī)*/ sum+=x; i+; while語句【例【例4-2】累加運(yùn)算。計(jì)算】累加運(yùn)算。計(jì)算1+2+3+100int sum,i;sum=0; /*設(shè)置累加值的初始值設(shè)置累加值的初始值*/i=1; /*設(shè)置循環(huán)控制變量的初始值設(shè)置循環(huán)控制變量

3、的初始值*/while(i=100)sum=sum+i; /*累加累加*/i+;while語句【例4-3】累乘運(yùn)算。 本題計(jì)算1*2*3*4*5.int power,i;power=1; /*設(shè)置乘積的初始值*/i=1; /*設(shè)置循環(huán)控制變量的初始值*/while(i=0) /*若沒有遇到標(biāo)記值負(fù)數(shù))*/ /*則執(zhí)行循環(huán)體*/sum=sum+score; n+;scanf(%f,&score); /*讀取下一個(gè)數(shù)據(jù)*/ while語句【例4-5】從鍵盤輸入若干字符,統(tǒng)計(jì)其中字母、數(shù)字以及其他字符的個(gè)數(shù)。用換行符結(jié)束輸入 char ch; int letter=0,digit=0,oth

4、er=0; ch=getchar(); /*讀取一個(gè)字符*/ while(ch!=n) /*若沒有遇到標(biāo)記值換行符n)*/ /*則執(zhí)行循環(huán)*/ if(ch=a&ch=A&ch=0&ch=1e-6) /*判斷條件*/pi=pi+t; /*將當(dāng)前分?jǐn)?shù)項(xiàng)累加到pi上*/n=n+2; /*下一項(xiàng)的分母以步長(zhǎng)2自增*/sign=-sign; /*符號(hào)求反*/ t=sign/n; /*構(gòu)建下一個(gè)分?jǐn)?shù)項(xiàng)*/pi=4*pi; while語句【例4-8】設(shè)計(jì)一個(gè)程序,輸入任意長(zhǎng)度的正整數(shù),然后逆序輸出。如輸入3765,則輸出5673。int num,i;scanf(%d,&num

5、);while(num!=0)i=num%10; /*取當(dāng)前數(shù)據(jù)的末位數(shù)*/printf(%d,i); /*輸出當(dāng)前的末位數(shù)*/num=num/10; /*對(duì)原數(shù)除以10取整,相當(dāng)于截?cái)嗄┪粩?shù)*/while語句【例4-6】scanf函數(shù)的返回值。int num1,num2,num3; int a,b;a=scanf(%d,&num1); /*/b=scanf(%d%d,&num2,&num3); /*/printf(Num1=%d,Num2=%d,Num3=%dn,num1,num2,num3);printf(a=%d,b=%dn,a,b);while語句 4.文件結(jié)束

6、控制循環(huán)【例4-9】輸入一些整數(shù),求出它們的平均值。 int x,sum=0;int n=0; /*統(tǒng)計(jì)實(shí)際輸入的數(shù)據(jù)個(gè)數(shù)*/while(scanf(%d,&x)!=EOF) /*文件結(jié)束控制循環(huán)*/ sum=sum+x; /*累加*/ n+; printf(Average=%fn,(double)sum/n);while語句【例4-10】輸入兩個(gè)整數(shù),比較它們的大小關(guān)系 int a,b;while(scanf(%d%d,&a,&b)!=EOF) if(ab) printf(%d%dn,a,b); else if(ab) printf(%d%dn,a,b); else

7、printf(%d=%dn,a,b);do-while語句語句 【例【例4-11】用】用do-while語句求語句求 1+2+100. int sum,i; sum=0; i=1; dosum=sum+i; i+;while(i0); for語句 【例4-14】用for語句求 1+2+100. int i,sum=0; for(i=1;i=100;i+)sum+=i; for語句【例4-15】使用for語句求解數(shù)列1+3+5+97+99的和。int sum,i;sum=0;for(i=1;i100;i+=2)sum=sum+i;for語句 【例4-16】求Fibonacci數(shù)列的前20項(xiàng)。這個(gè)

8、數(shù)列有如下特點(diǎn):第1、2個(gè)數(shù)都為1,從第3個(gè)數(shù)開始,每個(gè)數(shù)都是其前面兩個(gè)數(shù)的和。 int f,f1=1,f2=1; printf(%6d%6d,f1,f2); for(i=3;i=20;i+) f=f1+f2; /*遞推公式,推出一個(gè)新值*/printf(%6d,f);if(i%5=0) printf(n); /*控制每行輸出5個(gè)數(shù)*/f1=f2; f2=f; /*更新f1和f2,為下一次遞推作準(zhǔn)備*/for表達(dá)式表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3語句語句(l)表達(dá)式表達(dá)式1、表達(dá)式、表達(dá)式2、表達(dá)式、表達(dá)式3可以是任何類可以是任何類型的表達(dá)式,它們之間用分號(hào)間隔。型的表達(dá)式,它們之

9、間用分號(hào)間隔。(2)表達(dá)式表達(dá)式1只被執(zhí)行一次,通常用來給循環(huán)變只被執(zhí)行一次,通常用來給循環(huán)變量賦初值,也允許在量賦初值,也允許在for語句外給循環(huán)變量語句外給循環(huán)變量賦初值,此時(shí)可以省略該表達(dá)式,但分號(hào)不賦初值,此時(shí)可以省略該表達(dá)式,但分號(hào)不能省略。能省略。(3)表達(dá)式表達(dá)式3通常用來修改循環(huán)控制變量的值,通常用來修改循環(huán)控制變量的值,表明循環(huán)控制變量每次變化的數(shù)值。表明循環(huán)控制變量每次變化的數(shù)值。關(guān)于關(guān)于for語句的用法以下幾點(diǎn)值得注意:語句的用法以下幾點(diǎn)值得注意:for語句與while語句比較循環(huán)包括:初值、循環(huán)條件、循環(huán)體和步長(zhǎng)循環(huán)包括:初值、循環(huán)條件、循環(huán)體和步長(zhǎng)for表達(dá)式表達(dá)式1

10、;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3語句語句 等價(jià)為等價(jià)為表達(dá)式表達(dá)式1;while表達(dá)式表達(dá)式2) 語句語句 表達(dá)式表達(dá)式3;如果循環(huán)次數(shù)不確定,循如果循環(huán)次數(shù)不確定,循環(huán)的控制需要結(jié)合其它條環(huán)的控制需要結(jié)合其它條件并且條件較為明確的情件并且條件較為明確的情況下,可以使用況下,可以使用while語語句;如果指定了循環(huán)次數(shù),句;如果指定了循環(huán)次數(shù),則用則用for語句會(huì)使程序顯語句會(huì)使程序顯得簡(jiǎn)潔、明晰。得簡(jiǎn)潔、明晰。 break continue 和goto語句 C語言提供了語言提供了break while語句中語句中break執(zhí)行流程圖執(zhí)行流程圖do-while語句中語句中break執(zhí)行流程

11、圖執(zhí)行流程圖for語句中語句中break執(zhí)行流程圖執(zhí)行流程圖break語句舉例#includevoid main() int a,n,i=1,sum=0; printf(請(qǐng)輸入累加求和數(shù)的個(gè)數(shù)請(qǐng)輸入累加求和數(shù)的個(gè)數(shù),遇到負(fù)數(shù)將退出!遇到負(fù)數(shù)將退出!n); scanf(%d,&n); /*先輸入一個(gè)數(shù)先輸入一個(gè)數(shù)*/ printf(請(qǐng)輸入請(qǐng)輸入%d個(gè)整數(shù)個(gè)整數(shù):,n); while(i=n) /*一共要輸入一共要輸入10個(gè)數(shù),所以再循環(huán)個(gè)數(shù),所以再循環(huán)9次次*/ scanf(%d,&a); /*重新輸入一個(gè)數(shù)重新輸入一個(gè)數(shù)*/ if(a0)break; /*遇到負(fù)數(shù)退出遇到負(fù)數(shù)退

12、出while循環(huán)循環(huán)*/ sum=sum+a; /*否則將輸入的正數(shù)累加否則將輸入的正數(shù)累加*/ i+; printf(此次輸入的正數(shù)之和是此次輸入的正數(shù)之和是%dn,sum); 【例4-18】為迎接一年一度的校運(yùn)會(huì),需要排練一個(gè)團(tuán)體操,列隊(duì)時(shí)發(fā)現(xiàn)每行3個(gè)人的話還多出1位同學(xué),每行5個(gè)人的話多出2人,每行7個(gè)人的話多出5人,每行9個(gè)人的話多出7人,請(qǐng)問至少有多少同學(xué)來參加排練。 for(n=1;n+) if(n%3=1&n%5=3&n%7=5&n%9=7)break; break語句舉例 【例4-19】判斷整數(shù)m是否為素?cái)?shù)。 for(i=2;im;i+) if(m%i=

13、0) break; /*只要找到一個(gè)因子,循環(huán)就可提前終止*/break語句舉例C語言continuewhile語句 do-while語句for語句注意:與注意:與break語句完全終止循環(huán)不同,語句完全終止循環(huán)不同,continue語句是終止本次循環(huán)語句是終止本次循環(huán) continue語句舉例 輸入一個(gè)整數(shù)輸入一個(gè)整數(shù)n,編寫程序在屏幕上以每行編寫程序在屏幕上以每行10個(gè)數(shù)輸出個(gè)數(shù)輸出100200之間能被之間能被n整除的數(shù)。整除的數(shù)。#includevoid main() int i,n,count=0; printf(請(qǐng)輸入請(qǐng)輸入100到到200之間的整數(shù)之間的整數(shù)n:); scanf(%

14、d,&n); for(i=100;i=200;i+) if(i%n!=0) continue; printf(%d ,i); count+; if(count%10=0) printf(n); printf(n); printf(能被能被%d整除的整除的個(gè)數(shù)是個(gè)數(shù)是:%dn,n,count); #includevoid main() int i,n,count=0; printf(請(qǐng)輸入請(qǐng)輸入100到到200之間之間的整數(shù)的整數(shù)n:); scanf(%d,&n); for(i=100;i=200;i+) if(i%n=0) printf(%d ,i); count+; if(c

15、ount%10=0) printf(n); printf(n); printf(能被能被%d整除的個(gè)數(shù)整除的個(gè)數(shù)是是:%dn,n,count); 【例4-20】把100300之間不能被3整除的數(shù)輸出。int n,count=0;for(n=100;n=300;n+) if(n%3=0) /*若能被3整除,則跳過本次循環(huán)*/continue; printf(%d ,n); continue語句舉例C語言goto控制語句 goto語句也稱為無條件轉(zhuǎn)移語句語句也稱為無條件轉(zhuǎn)移語句 一般格式:一般格式:goto 語句標(biāo)號(hào);語句標(biāo)號(hào); 例:用例:用goto語句求語句求100個(gè)自然數(shù)之和個(gè)自然數(shù)之和 #i

16、nclude void main( ) int i=1; int sum=0; loop: sum=sum+i; i+; if(i=100)goto loop; printf(sum=%dn,sum); 循環(huán)的嵌套【例4-22】有兩個(gè)紅球,三個(gè)黃球,四個(gè)白球,任意取四個(gè)球,其中必須有一個(gè)紅球,編程輸出所有可能的方案。 for(i=1;i=2;i+)for(j=0;j=0) printf(%5d%7d%8dn,i,j,k);循環(huán)的嵌套【例4-23】利用雙層for循環(huán)打印乘法表。int i,j;for(i=1;i=9;i+) /*i控制輸出有多少行*/ for(j=1;j=i;j+) /*j控制輸

17、出每行中有多 少個(gè)等式*/printf(%d*%d=%d ,i,j,i*j); printf(n);實(shí)例研究 【例4-25】投骰子游戲。模擬投骰子的過程,以6點(diǎn)為目標(biāo),投中目標(biāo)3次為獲勝,最多允許投10次。int count=0,hit=0; /*count記錄投的次數(shù),hit記錄投中的次數(shù)*/int dice; /*dice記錄點(diǎn)數(shù)*/srand(unsigned)time(NULL);while(count10&hit3) dice=1+rand()%6; /*生成16的隨機(jī)數(shù)來模擬投出的點(diǎn)數(shù)*/count+;if(dice=6)hit+;實(shí)例研究【例4-26】輸入正整數(shù)n,求1!

18、+2!+3!+n!。int i,j,n;double f,sum=0; for(i=1;i=n;i+) f=1; for(j=1;j=i;j+) /*求i!,結(jié)果存儲(chǔ)在f中*/ f=f*j; sum+=f; /*將i!加入到累加器*/ printf(Sum=%en,sum); /*以指數(shù)形式輸出*/是否有更簡(jiǎn)單的方法?是否有更簡(jiǎn)單的方法?補(bǔ)充編程補(bǔ)充編程:編寫程序解決下列問題編寫程序解決下列問題:用用1分分,2分分,5分硬幣組合成分硬幣組合成1元元錢錢,請(qǐng)問分別需要幾個(gè)請(qǐng)問分別需要幾個(gè)1分分,幾個(gè)幾個(gè)2分分,幾個(gè)幾個(gè)5分分?(每幣種必須至少每幣種必須至少1個(gè)個(gè))列出所有的組合列出所有的組合.用

19、用x,y,z分別代表分別代表1分分,2分分,5分分,列出方程列出方程:x+2y+5z=100,x的取值的取值范圍是范圍是1100,y取值范圍是取值范圍是150, z取值范圍是取值范圍是120#include void main( ) int i,j,k; for(i=1;i=100;i+) for(j=1;j=50;j+) for(k=1;k=20;k+)if(i+2*j+5*k=100) printf(“%3d %3d %3dn”,i,j,k); 如果可以沒有某種硬幣,如果可以沒有某種硬幣,如何修改程序?如何修改程序?另外一種解法另外一種解法#include void main( ) int j,k; for(j=1;j=50;j+) for(k=1;k=20;k+)if(2*j+5*k100) printf(“%3d %3d %3dn100-2*j-5*k,j,k);“百錢百雞問題一只公雞,值一只公雞,值5錢;一只母雞,值錢;一只母雞,值3錢;一只小雞,值錢;一只小雞,值1/3錢。用百錢買百雞,問可買公雞,母雞,小雞各多少只?錢。用百錢買百雞,問可買公雞,母雞,小雞各多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論