循環(huán)結(jié)構(gòu)市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第1頁
循環(huán)結(jié)構(gòu)市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第2頁
循環(huán)結(jié)構(gòu)市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第3頁
循環(huán)結(jié)構(gòu)市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第4頁
循環(huán)結(jié)構(gòu)市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第11講break語句和continue語句循環(huán)結(jié)構(gòu)程序舉例。循環(huán)結(jié)構(gòu)第1頁循環(huán)結(jié)構(gòu)第2頁5.6break語句和continue語句為了使循環(huán)控制愈加靈活,C語言還提供了break語句和continue語句。

break語句在循環(huán)控制中作用是強(qiáng)行結(jié)束該語句所在整個(gè)循環(huán)結(jié)構(gòu),轉(zhuǎn)向執(zhí)行循環(huán)體語句后下一條語句。

continue語句作用是提前結(jié)束屢次循環(huán)中某一次循環(huán),即跳過循環(huán)體語句中位于continue語句之后其余語句,從而進(jìn)入下一次循環(huán)。循環(huán)結(jié)構(gòu)第3頁1.break語句在第四章中已經(jīng)介紹過,用break語句能夠使流程跳出由switch語句組成多分支結(jié)構(gòu)。當(dāng)break語句用在do-while、for或while循環(huán)語句中時(shí),也能夠使程序終止循環(huán),跳出循環(huán)結(jié)構(gòu)。通常break語句總是與if語句配合使用,即當(dāng)滿足某個(gè)給定條件要求時(shí)便跳出循環(huán)。循環(huán)結(jié)構(gòu)第4頁例5.6在循環(huán)體中使用break語句。main(){inti,s;s=0;for(i=1;i<=10;i++)

{s=s+i;if(s>5)

break;printf("s=%d\n",s);

}}程序輸出結(jié)果以下:s=1s=3

注意

只能在do-while、for、while循環(huán)語句或switch語句體內(nèi)使用break語句,其作用是使程序提前終止它所在語句結(jié)構(gòu),轉(zhuǎn)去執(zhí)行下一條語句;若程序中有上述四種結(jié)構(gòu)語句嵌套使用,則break語句只能終止它所在最內(nèi)層語句結(jié)構(gòu)。循環(huán)結(jié)構(gòu)第5頁2.continue語句例5.7在循環(huán)體中使用continue語句。main(){inti,s=0;for(i=1;i<=8;i++){s=s+i;printf("\ni=%d",i);if(i%2==0)

continue;printf("s=%d\n",s);

}}continue語句只能在do-while、for和while循環(huán)語句中使用,其作用是提前結(jié)束屢次循環(huán)中某一次循環(huán)。運(yùn)行結(jié)果:i=1s=1i=2i=3s=6i=4i=5s=15i=6i=7s=28i=8

在執(zhí)行8次循環(huán)中,當(dāng)i值為偶數(shù)時(shí),執(zhí)行continue語句,其作用是跳過printf(“s=%d\n”,s);語句,繼續(xù)執(zhí)行下一次循環(huán)。循環(huán)結(jié)構(gòu)第6頁5.7選擇結(jié)構(gòu)程序舉例

許多實(shí)際應(yīng)用程序都要用到循環(huán)處理,在學(xué)習(xí)了本章基本內(nèi)容之后,我們?cè)谶@里著重介紹兩個(gè)最基本、最慣用循環(huán)處理算法----窮舉法和遞推法。1.窮舉法

“窮舉法”也稱為“枚舉法”或“試湊法”,即采取循環(huán)結(jié)構(gòu)將全部可能出現(xiàn)情況一一進(jìn)行測試,判斷是否滿足給定條件。循環(huán)結(jié)構(gòu)第7頁例5.8求n!。即計(jì)算1×2×3×…×n值。程序以下:main(){inti,n;longs=1;printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)

s=s*i;printf("%d!=%ld\n",n,s);}運(yùn)行結(jié)果以下:Entern:6<CR>6!=720分析:把每一個(gè)參加乘積數(shù)用循環(huán)變量一一列舉出來,并相乘。循環(huán)結(jié)構(gòu)第8頁

題目:從鍵盤輸入全班學(xué)習(xí)成績,統(tǒng)計(jì)出最高分、最低分和平均分。

分析:因?yàn)椴恢缹W(xué)生人數(shù),程序中用一個(gè)負(fù)數(shù)來作為結(jié)束輸入成績標(biāo)志。例5.9極值問題main(){intx,max,min,n;

float

sum=0;printf("Enterx(-1toend):");scanf("%d",&x);

max=x;min=x;n=0;while(x>=0){sum=sum+x;n=n+1;if(x>max)max=x;if(x<min)min=x;scanf("%d",&x);

}if(max>0)printf("max=%d,min=%d,aver=%f\n",max,min,sum/n);}運(yùn)行結(jié)果以下:Enterx(-1toend):8776539958-1<CR>max=99,min=53,aver=74.599998循環(huán)結(jié)構(gòu)第9頁例5.10素?cái)?shù)問題程序以下:main(){intm,i,flag;printf("Enterainteger:");scanf("%d",&m);

flag=1;/*先假定m是素?cái)?shù)*/for(i=2;i<=m-1;i++)if(m%i==0){flag=0;break;}printf("%d:",m);if(flag)printf("YES!\n");elseprintf("NO!\n");}

素?cái)?shù)是一個(gè)大于2,且只能被1和它自己整除整數(shù)。試編程求輸入某個(gè)正整數(shù)是否為素?cái)?shù)。若是,輸出YES,若不是,輸出NO。

分析:判別某數(shù)m是否為素?cái)?shù)最簡單方法是:窮舉出全部可能除數(shù)2、3、4、…一直到m-1,分別判定m能否被它們整除,只要有一個(gè)能整除,m就不是素?cái)?shù);只有全部都不能整除時(shí),m才是素?cái)?shù)。運(yùn)行結(jié)果以下:Enterainteger:157<CR>157:YES!實(shí)際上只要試除到m/2或sqrt(m)就足夠了。循環(huán)結(jié)構(gòu)第10頁例5.11百錢買百雞問題“雞翁一,值錢三;雞母一,值錢五;雞雛三,值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?”。

分析:設(shè)雞翁x只、雞母y只、雞雛z只。解題思緒是:雞翁數(shù)x值可能是[0,33]中任何一個(gè)值;雞母數(shù)y值可能是[0,20]中任何一個(gè)值;將全部可能出現(xiàn)情況都一一進(jìn)行測試,若滿足要求就把這種情況輸出,作為可能一個(gè)解。main(){intx,y,z;

for(x=0;x<=33;x++)

for(y=0;y<=20;y++)

{z=100-x-y;

if(x*3.0+y*5.0+z/3.0==100.0)

printf("x=%d,y=%d,z=%d\n",x,y,z);}}該程序能從七百各種可能組合情況中挑選出四種滿足要求答案。運(yùn)行結(jié)果以下:x=4,y=12,z=84x=11,y=8,z=81x=18,y=4,z=78x=25,y=0,z=75循環(huán)結(jié)構(gòu)第11頁例5.12長材料截取短料最優(yōu)化方法

題目:有一根長度為323米鋼材料,要將它截取成兩種規(guī)格a、b長度分別為17米和27米短料,每種最少1段,問分隔成a,b各多少段后,剩下殘料r最少?分析:規(guī)格a鋼材料個(gè)數(shù)na可能為:1、2、3、……(321-27)/17。main(){intna,nb,a,b,r,rmin;na=1;nb=1;rmin=323-17-27;for(na=1;na<=(323-27)/17;na++){nb=(323-na*17)/27;r=323-na*17-nb*27;if(r<rmin){rmin=r;a=na;b=nb;}}printf("a=%d,b=%d,min=%d\n",a,b,rmin);}運(yùn)行結(jié)果以下:a=11,b=5,min=1循環(huán)結(jié)構(gòu)第12頁2.遞推法“遞推法”又稱為“迭代法”,其基本思想是把一個(gè)復(fù)雜計(jì)算過程轉(zhuǎn)化為簡單過程屢次重復(fù)。例5.13猴子吃桃問題:小猴在某天摘桃若干個(gè),當(dāng)日吃掉二分之一,以為還不過癮,又多吃了一個(gè)。第二天吃了剩下桃子二分之一又多一個(gè);以后天天都這么吃下去,直到第8天要吃時(shí)只剩下一個(gè)桃子了,問小猴子第一天共摘下了多少個(gè)桃子?

分析:這是一個(gè)“遞推”問題,先從最終一天桃子數(shù)推出倒數(shù)第二天桃子數(shù),再從倒數(shù)第二天桃子數(shù)推出倒數(shù)第三天桃子數(shù)……。設(shè)第n天桃子為xn,那么它是前一天桃子數(shù)xn-1二分之一減1,遞推公式為:xn=xn-1/2–1。即:xn-1=(xn+1)×2。循環(huán)結(jié)構(gòu)第13頁例5.13猴子吃桃問題程序main(){inttao,n;tao=1;/*已知第8天桃子數(shù)*/for(n=7;n>=1;n=n-1)

tao=(tao+1)*2;printf("tao(1)=%d\n",tao);}程序執(zhí)行后輸出結(jié)果以下:tao(1)=382循環(huán)結(jié)構(gòu)第14頁例5.15求pi近似值

分析:本題遞推公式比上面兩個(gè)例子復(fù)雜,只能將分子和分母分別遞推出新值后再做除法運(yùn)算。其遞推方法和求解步驟以下:1.分母n初值為1,遞推公式:n=n+2;2.分子s初值為1.0,遞推公式:s=(-1)*s;3.公式中某項(xiàng)值為:t=s/n。從以上求pi公式來看,不能決定n最終值應(yīng)該是多少;但能夠用最終一項(xiàng)t=s/n絕對(duì)值小于0.0001來作為循環(huán)結(jié)束條件。題目:用公式pi/4=1-1/3+1/5-1/7…求pi近似值,直到最終一項(xiàng)絕對(duì)值小于10-4為止。循環(huán)結(jié)構(gòu)第15頁#include"math.h"

main(){intn;floatt,s,pi;pi=0;/*變量pi用來存放累加和*/n=1;/*第一項(xiàng)分母值為1*/s=1.0;/*第一項(xiàng)分子值為+1*/t=s/n;/*先求出第一項(xiàng)值*/while(fabs(t)>=0.0001)

{pi=pi+t;

n+=2;s=-1*s;t=s/n;/*遞推出下一項(xiàng)值*/

}

printf("pi=%f\n",pi*4);}程序執(zhí)行后輸出以下結(jié)果。pi=3.141397pi/4=1-1/3+1/5-1/7+1/9……循環(huán)結(jié)構(gòu)第16頁

分析:求最大條約數(shù)迭代步驟以下:(1)輸入兩個(gè)正整數(shù)m,n;(2)用m除以n得到一個(gè)余數(shù)r;(3)若r=0,則n為最大條約數(shù),程序結(jié)束;不然用n取代m,用r取代n,轉(zhuǎn)去執(zhí)行第(2)步。例5.16求兩個(gè)正整數(shù)最大條約數(shù)程序以下:main(){intm,n,r;printf("Enterm,n:");scanf("%d,%d",&m,&n);

r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf("gcd=%d\n",n);}程序執(zhí)行后輸出結(jié)果以下:Enterm,n:14,8<CR>gcd=2循環(huán)結(jié)構(gòu)第17頁分析:兩個(gè)數(shù)最大條約數(shù)必定不會(huì)比其中小者大。用窮舉法求最大條約數(shù)main(){intm,n,r;printf("Enterm,n:");scanf("%d,%d",&m,&n);

r=m<n?m:n;

/*取m,n中小者*/while(r>1){if(m%r==0&&n%r==0)

break;

/*找到r即為最大條約數(shù),中止循環(huán)。*/

r=r-1;/*從大到小窮舉出全部可能數(shù)*/}printf("gcd(%d,%d)=%d\n",m,n,r);}循環(huán)結(jié)構(gòu)第18頁例5.17高次方程求根。本例介紹其中較簡單二分法,其遞推方法以下:(1)輸入兩個(gè)點(diǎn)x坐標(biāo)值a,b,使f(a)*f(b)<0,即確保在區(qū)間[a,b]內(nèi)有一根。(2)求區(qū)間[a,b]中點(diǎn)c=(a+b)/2。(3)計(jì)算f(c)值,若該值小于給定精度要求,則c為求得近似根,程序結(jié)束;不然執(zhí)行步驟(4)。(4)若f(a)與f(c)同號(hào),則[a,c]無根,用c代替a;不然[c,b]無根,用c代替b;使求根區(qū)間縮小二分之一,并

溫馨提示

  • 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. 人人文庫網(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)論