c語言-第5章循環(huán)結(jié)構(gòu)程序設(shè)計課件_第1頁
c語言-第5章循環(huán)結(jié)構(gòu)程序設(shè)計課件_第2頁
c語言-第5章循環(huán)結(jié)構(gòu)程序設(shè)計課件_第3頁
c語言-第5章循環(huán)結(jié)構(gòu)程序設(shè)計課件_第4頁
c語言-第5章循環(huán)結(jié)構(gòu)程序設(shè)計課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章循環(huán)結(jié)構(gòu)程序設(shè)計5.1為什么使用循環(huán)5.2while語句與do…while語句5.3for語句實現(xiàn)循環(huán)5.4幾種循環(huán)的比較5.5多重循環(huán)(嵌套循環(huán))5.6break和continue語句5.7選擇結(jié)構(gòu)程序設(shè)計舉例1§5.1為什么使用循環(huán)循環(huán)是有規(guī)律的重復(fù)操作??梢詫?fù)雜問題分解為簡單的操作過程,程序只需對簡單過程描述,這些過程的多次重復(fù)就可完成對問題的求解。

例:求1+2+3+…+100的和。算法1:直接寫出算式sum=1+2+3+4+5+…+100算法2:考慮到1+2+3+…+100可以改寫為:(((1+2)+3)+…+100),則有2

S1:p1=0+1;S2:p2=p1+2;…S100:p100=p99+100,結(jié)果在p100里。算法3:用變量i存放加數(shù),變量p存放上一步的和。那么每一步都可以寫成:p+i,然后把p+i的和存入p,即每步都是p=p+i。S0:p=0,i=1S1:p=p+i,i=i+1S2:p=p+i,i=i+1S3:p=p+i,i=i+1…S100:p=p+i,i=i+13

while循環(huán)1.格式:while(表達式)循環(huán)體2.功能:先判斷表達式的值,若為非零,重復(fù)執(zhí)行循環(huán)體語句,再判斷…直到表達式的值為零,退出循環(huán)體。條件即:測試---執(zhí)行--測試--執(zhí)行--§5.2while語句與do-while語句while(條件){語句組}main(){ints,n;s=0;n=1;while(n<=100)

{s=s+n;n++;}printf(“%d\n”,s);}1005(1)當循環(huán)體中語句多于一條時,用{},否則,循環(huán)只對第一個;起作用.(2)循環(huán)體內(nèi)部必須有實現(xiàn)對循環(huán)變量增值的語句,否則,易出現(xiàn)“死循環(huán)”.(3)條件表達式要有括號,后面不加分號.(4)注意條件的邊界值.例題:求1+2+3…+n<=10000的最大的n。main(){inta,k;a=k=0;while(a<=10000){

++k;a+=k;}printf(“1+2+3…..+%d=%d\n”,k-1,a-k);}3.說明:6例:一個百萬富翁遇見一個陌生人,達成換錢的協(xié)議:陌生人說:“第一天我給你10萬元,你只需給我一分錢;第二天我依然給你10萬元,你只需給我二分錢;……以后你每天給我的錢數(shù)是前一天的二倍,直到滿30天”,富翁很高興,欣然同意了。請你編程計算一下,30天后每人各得多少錢?分析:設(shè)fu:富翁得到的錢的總數(shù);

mo:陌生人得到的錢的總數(shù);

t:陌生人每天得到的錢數(shù);第一天:fu=100000.0,t=0.01,mo=0.01循環(huán):2~30天

fu=fu+100000.0;t=2*t;mo=mo+t;7main(){inti=1;floatfu,mo,t;fu=100000.0;mo=0.01;t=0.01;while(i<30){i++;fu=fu+100000.0;t=2*t;mo=mo+t;}printf("Therichman'smoney=%f\n",fu);printf("Thestranger'smoney=%f\m",mo);}程序如下8

main(){intn=1,s=0,x;scanf("%d",&x);

do{s=s+n;n++;}

while(n<=x);printf("s=%d\n",s);}n<=xs=s+nYn++開始初始化n,sN結(jié)束輸入x輸出s條件表達式后有分號10計算表達式1初值;計算表達式2并判斷,當表達式2為0時跳出循環(huán),當表達式2非0,執(zhí)行循環(huán)體語句,計算表達式3增量;自動轉(zhuǎn)到第二步(計算表達式2)…...繼續(xù)執(zhí)行。

for語句初值表達式1條件表達式2增量表達式3for(表達式1;表達式2;表達式3){語句組}§5.3for語句實現(xiàn)循環(huán)1.格式:2.功能:main(){intn,s;for(n=1;n<=100;n++)s=s+n;printf(“%d\n”,s);}變量的增量循環(huán)體變量的初值循環(huán)條件122.表達式1和表達式3可是與初值、增量無關(guān)的逗號表達式for(s=0,n=1;n<=100;s=s+n,printf(“%d”,s))n++;for(s=0;n<100;s=s+n,n++){printf(“%d”,s);}求累加和n的初值在for之前完成增量在for之外完成14例求正整數(shù)n的階乘n!,其中n由用戶輸入。fact=1.0輸入變量n的值i=1i<=nfact=fact*ii++輸出fact的值程序如下:main(){floatfact=1.0;inti,n;scanf("%d",&n);for(i=1;i<=n;i++)fact=fact*i;printf("fac=%f",fact);}15§5.4

幾種循環(huán)的比較1、C中的三種循環(huán)語句while(),do-while(),for()都可由表達式控制重復(fù)執(zhí)行一個循環(huán)體,都可以用來解決同一個問題,一般情況下,可以相互代替。2、三種循環(huán)各有特點:1)當循環(huán)次數(shù)及條件在程序運行中才能確定時,選用while()或do-while()語句兩者區(qū)別:while()

頂部測試,可能一次也不執(zhí)行

do-while()底部測試,至少執(zhí)行一次16(2)如果初值,條件明顯,循環(huán)次數(shù)已給出,選用for()語句,功能最強。(3)出現(xiàn)“死循環(huán)”的幾種情況

for(;;)for(….;非零常數(shù)表達式;……)

while(非零常數(shù)表達式)

do..while(非零常數(shù)表達式)main(){intI=0,j=5;while(j<10){j=I*2;printf(“%d”,j);}結(jié)果為:?17§5.5循環(huán)嵌套一、循環(huán)嵌套的概念123456789---------------------------------12436948121651015202561218243036714212835424981624324048566491827364554637281在循環(huán)體中,又包含有循環(huán)結(jié)構(gòu)。行循環(huán)中包含了列循環(huán)。雙重循環(huán)將一元錢換成硬幣,共有多少種換法?18例:每只公雞5個錢,每只母雞3個錢,每3只小雞1個錢,用100個錢,買100只雞,問公雞、母雞和小雞各買幾只?分析定義變量x,y,z,表示公雞、母雞和小雞的只數(shù)intx,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++)for(z=1;z<=300;z++){….}程序運算多少次?百錢百雞問題的解決20程序如下main(){intx,y,z;for(x=1;x<20;x++)for(y=1;y<=33;y++){z=100-x-y;if(5*x+3*y+z/3==100)printf(“%d,%d,%d\n”,x,y,z);}}共六組解:xyz320774187871380811811168312484所求的z不能被3整除如何解決?21要求:從鍵盤輸入m值,輸出m行每行m個*號。例:輸入m=4,輸出的圖形如下:思路:1.輸入m;2.重復(fù)打印m行,每行打印m個*;****************1.輸入m;2.for(k=1;k<=m;k++)

打印一行中的m個*;打印如下圖形:23細化:1.輸入m;2.for(k=1;k<=m;k++){打印m個*;換新行;}1.輸入m;2.for(k=1;k<=m;k++){for(j=1;j<=m;j++)printf(“*”);

printf(“\n”);}

main(){intk,m,j;scanf(“%d”,&m);for(k=1;k<=m;k++){for(j=1;j<=m;j++)

printf(“*”);

printf(“\n”);}}24continue語句格式:continue;continue語句的功能:continue語句僅能在循環(huán)語句中使用。它的作用不是結(jié)束循環(huán),而是開始一次新的循環(huán)。結(jié)束一次循環(huán)對于for語句,將控制轉(zhuǎn)到執(zhí)行增量和條件測試部分。對于while和do-while語句,將控制轉(zhuǎn)到條件測試部分。循環(huán)的退出26break的使用main(){inti,j,a=0;for(i=0;i<2;i++){for(j=0;j<4;j++)

{if(j%2)break;a++;}a++;#}printf(“a=%d\n”,a);}a=4a=5a=6a=71.i=0j=0,if為0,a從0到1j=1,if為1退出j循環(huán)執(zhí)行語句#a從1到22.i=1j=0,if為0,a從2到3j=1,if為1退出j循環(huán)執(zhí)行語句#a從3到4練習127main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++)

{if(j%2)continue;x++;}x++;#}printf(“x=%d\n”,x);}x=4x=8x=6x=121.i=0,x從0到1j=0,if為0,x從1到2j=1,if為1

j=2,if為0,x從2到3j=3,if為1

執(zhí)行語句#x為42.i=1,x從4到5內(nèi)部循環(huán)

j=0,if為0,

x從5到6

j=1,if為1

j=2,if為0,x從6到7

j=3,if為1

x為8continue的使用練習228#include"math.h"main(){intm,i,k,n=0;for(m=201;m<=300;m+=2){k=sqrt(m);for(i=2;i<=k;i++) if(m%i==0)break;if(i>=k+1){printf("%d,",m);n++;} if(n%10==0)printf("\n");}}程序如下30一個古典數(shù)學問題:有一對兔子,從出生后第3個月起每月都生一對兔子。小兔子長到第三個月后每月又生一對兔子。假設(shè)所有兔子都不死,問每個月的兔子總數(shù)為多少只及四十個月后所有兔子的總數(shù)?設(shè)以不滿1個月的為小兔子,滿1個月不滿2個月的為中兔子,3個月以上的為老兔子,列出各個月的兔子情況:

例2Fibonacci數(shù)列問題31第幾個月小兔子數(shù)中兔子數(shù)老兔子數(shù)兔子總數(shù)110012010131012411135212563238求Fibonacci數(shù)列的前40個數(shù)?數(shù)列特點:第1,2兩個數(shù)為1,1。從第三個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)32解題方法:

設(shè)計求每月兔子總數(shù)的通用程序。設(shè)計一個計數(shù)器i表示當前月數(shù),變量f1,f2分別表示前兩月兔子總數(shù)并

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論