版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)第五章循環(huán)結(jié)構(gòu)4種循環(huán)語(yǔ)句whilefordo-while循環(huán)是指使用一定條件對(duì)同一個(gè)程序段重復(fù)執(zhí)行若干次。循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu),可以完成重復(fù)性、規(guī)律性的操作。gotogoto語(yǔ)句一般格式:goto語(yǔ)句標(biāo)號(hào)
由if……goto構(gòu)成循環(huán)例4-1:main(){intx=0,y=0;star:if(x<=3){y=x+1;x=x+1;gotostar;}printf(“%d”,y);}分析輸出結(jié)果。一般形式:while(<表達(dá)式>)<語(yǔ)句>執(zhí)行流程:while語(yǔ)句循環(huán)體:被重復(fù)執(zhí)行的部分表達(dá)式循環(huán)體假(0)真(非0)while特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體說(shuō)明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類(lèi)型語(yǔ)句下列情況,可退出while循環(huán)條件表達(dá)式不成立(為零)循環(huán)體內(nèi)遇break,return,gotowhile語(yǔ)句特點(diǎn)和說(shuō)明while(<表達(dá)式>)<語(yǔ)句>例4-2:main(){intcount=1;while(count<5) { printf(”goodmorning!\n”); count++; }}goodmorning!goodmorning!goodmorning!goodmorning!#include<stdio.h>main(){intn=9;while(n>6){n--;printf(“%d”,n);}}876main(){intn=9;while(n>6) n--;printf(“%d\n”,n);}6例4-3:用while循環(huán)求sum=1+2+3+……+100
#include<stdio.h>main(){intsum=0;inti=1;while(i<=100){sum+=i;i++;}printf(“sum=%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體如何求sum=1*2*3*……*100?【例5-13】猴子吃桃問(wèn)題。猴子第一天摘下若干桃子,當(dāng)即吃掉一半,還不過(guò)癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃掉前一天剩下的一半零一個(gè)。到第10天早上再想吃時(shí),就只剩一個(gè)桃子了。問(wèn)第一天共摘了多少個(gè)桃子?迭代法設(shè)第n天為xn個(gè),第n+1天為xn+1則:xn+1=xn/2-1可得遞推公式:xn=(xn+1+1)*21≤n≤9x10=1n=10即:x10=1
x9=(x10+1)*2=4x8=(x9+1)*2=10
……x1=(x2+1)*2=1534算法分析:倒推#include<stdio.h>main(){intp2=1,p1;intn=9;while(n>0) { p1=2*(p2+1); p2=p1; n--; }printf(“thetotalis%d\n”,p1);}#include<stdio.h>main(){intn=0;longt=1;printf(“nn!\n”);while(n<8){n++;t*=n;printf("%d%ld\n",n,t);}}運(yùn)行結(jié)果:nn!1122364245120672075040840320求n!(n=1~8)do-while語(yǔ)句一般形式:do<語(yǔ)句>while(<表達(dá)式>);執(zhí)行流程:do循環(huán)體expr假(0)真(非0)while“;
”不能少expr循環(huán)體假(0)真(非0)循環(huán)體while循環(huán)特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式說(shuō)明:至少執(zhí)行一次循環(huán)體do~while可轉(zhuǎn)化成while結(jié)構(gòu)do~while語(yǔ)句特點(diǎn)和說(shuō)明do<語(yǔ)句>while(<表達(dá)式>);main(){intx=3;do{printf(“%d”,x-=2); }while(x>=0);}1-1x=x-2;printf(“%d”,x);求1+2+3+……100#include<stdio.h>main(){intsum=0,i;i=1;
do{sum=sum+i;i++;}while(i<=100);printf(”sum=%d\n”,sum);}#include<stdio.h>main(){intsum=0;inti=1;
while(i<=100){sum=sum+i;i++;}printf(“sum=%d",sum);}main(){inti=1,s=0;
while(i<1)
{
s=s+i;
i=i+1;
}
printf("s=%d\n",s);
}s=0main(){inti=1,s=0;
do
{
s=s+i;
i=i+1;
}while(i<1);
printf("s=%d\n",s);}s=1do-while與while的區(qū)別一般形式:for([表達(dá)1];[表達(dá)式2];[表達(dá)式3])<語(yǔ)句>執(zhí)行流程:expr2循環(huán)體假(0)真(非0)forexpr1expr3for語(yǔ)句一般應(yīng)用形式:for(初始化表達(dá)式;條件表達(dá)式;修正表達(dá)式)<語(yǔ)句>說(shuō)明:for語(yǔ)句中expr1,expr2,expr3類(lèi)型任意,都可省略,但分號(hào);不可省for語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu)表達(dá)式1;while(表達(dá)式2){<語(yǔ)句>表達(dá)式3;}for語(yǔ)句for([表達(dá)1];[表達(dá)式2];[表達(dá)式3])<語(yǔ)句>形式1:#include<stdio.h>main(){inti=0;
for(i=0;i<10;i++)putchar(‘a(chǎn)’+i);}運(yùn)行結(jié)果:abcdefghij形式2:#include<stdio.h>main(){inti=0;
for(;i<10;i++)putchar(‘a(chǎn)’+i);}形式3:#include<stdio.h>main(){inti=0;
for(;i<10;)putchar(‘a(chǎn)’+(i++));}形式4:#include<stdio.h>main(){inti=0;
for(;i<10;putchar(‘a(chǎn)’+i),i++)
;}例:for語(yǔ)句形式的多樣性main(){inti;for(i=0;i<10;i++) {i++;printf(“%d”,i);}}main(){inti;for(i=1;i<5;i++);printf(“%d”,i);}513579空語(yǔ)句求1+2+3+……100main(){intsum=0,i;for(i=1;i<=100;i++) sum=sum+i;printf(”sum=%d\n”,sum);}幾種循環(huán)的比較………while(表達(dá)式)語(yǔ)句;
………do語(yǔ)句while(表達(dá)式);循環(huán)控制條件循環(huán)條件初始化循環(huán)修改條件也可在for前也可在循環(huán)體內(nèi)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句幾種循環(huán)的比較123循環(huán)體的執(zhí)行:先判斷條件,循環(huán)體可能一次也不執(zhí)行。while(表達(dá)式)語(yǔ)句;
后判斷條件,循環(huán)體至少執(zhí)行一次.do語(yǔ)句while(表達(dá)式);for循環(huán)功能強(qiáng),兩者界限不清,使用較隨意。for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句界限不清……界限不清小結(jié)
循環(huán)控制有兩種方法:計(jì)數(shù)法和標(biāo)志法。
能確定循環(huán)次數(shù)時(shí),采用計(jì)數(shù)法,用for語(yǔ)句比較清晰;
不能確定循環(huán)次數(shù)時(shí),采用標(biāo)志法,設(shè)法找出循環(huán)終止條件,用while或do-while語(yǔ)句來(lái)實(shí)現(xiàn)。
用while與do-while語(yǔ)句能實(shí)現(xiàn)的程序,用for語(yǔ)句未必可以實(shí)現(xiàn)。while語(yǔ)句是先判斷后執(zhí)行,do-while語(yǔ)句是先執(zhí)行后判斷。在循環(huán)體至少執(zhí)行一次的情況下兩者等價(jià)。#include<stdio.h>main(){inti,s;s=0;
i=1;while(i<=100){s=s+i;i++;}printf("s=%d\n",s);}計(jì)算s=1+2+3+…+100#include<stdio.h>main(){inti,s;s=0;
i=1;do{s=s+i;i++;}while(i<=100);printf("s=%d\n",s);}#include<stdio.h>main(){inti,s=0;for(i=1;i<=100;i++) s=s+i;printf("s=%d\n",s);}i=1;for(;i<=100;){s=s+i;i++;}main(){inti;for(i=1;i<5;i++);printf(“i=%d\n”,i);}main(){intx=3;do{printf(“%d\n”,x-=2);}while(x>=0);}去掉分號(hào),結(jié)果是?例:求Fibonacci數(shù)列第40項(xiàng)。又叫兔子繁殖問(wèn)題(Fibonacci提出的)
main()
{intn,m;longf1=1,f2=1,f3;printf(“%ld%ld”,f1,f2);for(m=3;m<=40;m++){f3=f1+f2;f1=f2;f2=f3;printf(“%d”,f3);}printf(“\n”);
}設(shè)有一對(duì)新生兔子,從第3個(gè)月開(kāi)始,每個(gè)月都生一對(duì)兔子。按此規(guī)律,若所有兔子都不死,問(wèn)一年后共有多少對(duì)兔子?迭代法算法分析:月:12345678
1--1—1—1—1—1—1--1
1
1--1
1—1--1
1
1—1—1--1
1
1--1
1—1—1—1—11
1--1
1—1—1
1兔:1123581321f1f21
1
f3=f1+f2
2f1f2
f3=f1+f2
3
f1f2
f3=f1+f2
5
f1f2f3=…初始條件終止條件迭代公式思考:f1=f2和f2=f3能否對(duì)換位置?不例:打印出所有的水仙花數(shù)。一個(gè)3位數(shù),其各位數(shù)字的立方和等于它本身。分析:百位數(shù)i=m/100;十位數(shù):j=m/10%10;個(gè)位數(shù)k=m%10;判斷m==i^3+j^3+k^3main(){inti,j,k,m;for(m=100;m<1000;m++){
i=m/100; j=m/10%10;k=m%10;if(m==i*i*i+j*j*j+k*k*k) printf("%5d",m);}
}窮舉法計(jì)數(shù)法統(tǒng)計(jì)從鍵盤(pán)輸入一行字符的個(gè)數(shù).main(){intcount=0;while(getchar()!='\n‘) count++;printf("%d",count);}標(biāo)志法:循環(huán)終止條件main(){intx,max,i;scanf(“%d”,&x);max=x;for(i=2;i<=10;i++){scanf(“%d”,&x);if(x>max)max=x;}printf(“max=%d\n”,max);}依次輸入10個(gè)數(shù),找出最大數(shù)。分析:輸入x1x1max輸入x2若x2>max則x2max輸入x3若x3>mx則x3max輸入x4……打擂方式有一個(gè)分?jǐn)?shù)序列2/1,3/2,5/3,8/5,21/13……求該數(shù)例前20項(xiàng)之和main(){intn,t;floata=2,b=1,s=0;for(n=1;n<=20;n++){s=s+a/b;
t=a;a=a+b;b=t;}printf("sumis%9.6f\n",s);}分析:每項(xiàng)用a/b表示,從第2項(xiàng)開(kāi)始:每項(xiàng)的分子a是前一項(xiàng)的分子與分母之和,分母是前一項(xiàng)的分子。例題:輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)#include"stdio.h"main(){charc;intletters=0,space=0,digit=0,others=0;printf("pleaseinputsomecharacters:\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letters++;elseif(c=='')space++;elseif(c>='0'&&c<='9')digit++;elseothers++;}printf("allinall:char=%dspace=%ddigit=%dothers=%d\n",letters,space,digit,others);}循環(huán)的嵌套:循環(huán)體本身包含循環(huán)語(yǔ)句三種循環(huán)可互相嵌套,層數(shù)不限外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)循環(huán)的嵌套for(i=1;i<5;i++){j=1;
while(j<4){printf(i=%d,j=%d\n",i,j);j++;}}
for(j=1;j<4:j++)printf((i=%d,j=%d\n",i,j);i=1,j=1i=1,j=2i=1,j=3i=2,j=1i=2,j=2i=2,j=3i=3,j=1i=3,j=2i=3,j=3i=4,j=1i=4,j=2i=4,j=3
形狀
形狀main()
{inti,j;
for(i=1;i<=9;i++)
printf(“%4d”,i);
printf(“\n”);
for(i=1;i<=9;i++)
printf(“%c”,‘-’);
printf(“\n”);
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
printf(“%4d”,i*j);
printf(“\n”);
}
}P71例12:打印九九乘法表
形狀123456789
12
3456789
246
81012141618
36912
…
…打印表頭
9個(gè)數(shù)字打印虛線打印表體……
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf(“%4d”,i*j);
printf(“\n”);
}打印表體for(i=1;i<=9;i++)
{for(j=0;j<=i-1;j++)
printf(“%4c”,‘’);
for(j=i;j<=9;j++)
printf(“%4d”,i*j);
printf(“\n”);
}打印表體打印空格例:百馬百擔(dān)有100匹馬,馱100擔(dān)貨,大馬馱3擔(dān),中馬馱2擔(dān),兩匹小馬馱1擔(dān)。問(wèn)有大、中、小馬各多少?算法分析:main()
{inta,b,c;
for(a=0;a<33;a++)
for(b=0;b<50;b++)
{c=100-a-b;
if(3*a+2*b+c/2.0==100)
{printf(“a=%d”,a);
printf(“b=%d”,b);
printf(“c=%d\n”,c);}
}
}設(shè)大、中、小馬各為a、b、c,則:3a+2b+c/2=100a+b+c=100可得:
0≤a<330≤b<500≤c≤200窮舉法若問(wèn)有幾種解決方法,則應(yīng)如何修改程序?用變量k作為計(jì)數(shù)器,在if語(yǔ)句中增加“k++;”語(yǔ)句例:打印圖形。12345678901****************算法分析:第1行:1個(gè)*,6個(gè)空格,換行第2行:3個(gè)*,4個(gè)空格,換行第3行:5個(gè)*,1個(gè)空格,換行第4行:7個(gè)*,0個(gè)空格,換行第i(1~4)行:2i-1個(gè)*,8-2i個(gè)空格,換行main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=2*i-1;j++)printf(“*”);for(k=1;k<=8-2*i;k++)printf(“”);printf(“\n”);}}2i-1個(gè)*8-2i個(gè)空格換行補(bǔ)充舉例:打印圖形。1234567891011*************************算法分析:第1行:1個(gè)空格,5個(gè)*號(hào),換行第2行:2個(gè)空格,5個(gè)*號(hào),換行第3行:3個(gè)空格,5個(gè)*號(hào),換行第4行:4個(gè)空格,5個(gè)*號(hào),換行第5行:5個(gè)空格,5個(gè)*號(hào),換行第i(1~5)行:i個(gè)空格,5個(gè)*號(hào),換行main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf(“”);for(j=1;j<=5;j++)printf(“*”);printf(“\n”);}}i個(gè)空格5個(gè)*號(hào)換行循環(huán)語(yǔ)句嵌套時(shí),當(dāng)外層循環(huán)變量取1個(gè)值時(shí),內(nèi)層循環(huán)變量要取遍所有值補(bǔ)充舉例(續(xù)):打印圖形。12345678901***************1234567890112233344445555512345678901***************算法分析:第1行:5個(gè)空格,1個(gè)*_,換行第2行:4個(gè)空格,2個(gè)*_,換行第3行:3個(gè)空格,3個(gè)*_,換行第4行:2個(gè)空格,4個(gè)*_,換行第5行:1個(gè)空格,5個(gè)*_,換行第i(1~5)行:6-i個(gè)空格,i個(gè)*_,換行main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=6-i;j++)printf(“”);for(j=1;j<=i;j++)printf(“*_”);printf(“\n”);}}6-i個(gè)空格i個(gè)*_換行算法分析:第1行:5個(gè)空格,1個(gè)1_,換行第2行:4個(gè)空格,2個(gè)2_,換行第3行:3個(gè)空格,3個(gè)3_,換行第4行:2個(gè)空格,4個(gè)4_,換行第5行:1個(gè)空格,5個(gè)5_,換行第i(1~5)行:6-i個(gè)空格,i個(gè)i_,換行main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=6-i;j++)printf(“”);for(j=1;j<=i;j++)printf(“%d_”,i);printf(“\n”);}}6-i個(gè)空格i個(gè)i_換行算法分析:第1行:1個(gè)空格,5個(gè)*_,換行第2行:2個(gè)空格,4個(gè)*_,換行第3行:3個(gè)空格,3個(gè)*_,換行第4行:4個(gè)空格,2個(gè)*_,換行第5行:5個(gè)空格,1個(gè)*_,換行第i(1~5)行:i個(gè)空格,6-i個(gè)*_,換行main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf(“”);for(j=1;j<=6-i;j++)printf(“%d_”,i);printf(“\n”);}}i個(gè)空格6-i個(gè)*_換行流程控制語(yǔ)句流程
控制
語(yǔ)句選擇結(jié)構(gòu)
(條件語(yǔ)句)雙分支結(jié)構(gòu)多分支結(jié)構(gòu)if()…else語(yǔ)句elseif語(yǔ)句
switch語(yǔ)句循環(huán)結(jié)構(gòu)while()…語(yǔ)句
do…while()語(yǔ)句
for()…語(yǔ)句流程
轉(zhuǎn)向
語(yǔ)句條件轉(zhuǎn)向語(yǔ)句無(wú)條件
轉(zhuǎn)向語(yǔ)句goto語(yǔ)句中止循環(huán)或switch語(yǔ)句:break
跳過(guò)其后語(yǔ)句返回循環(huán)開(kāi)始:continue
函數(shù)返回語(yǔ)句:return()while(){……
break;
……}……break;while(){……
continue;
……}……continue;
……gotoer;
……er
……
……
……goto標(biāo)號(hào);幾種控制語(yǔ)句判斷一個(gè)正整數(shù)m>3是否為素?cái)?shù)main(){intn,m;scanf("%d",&m);for(n=2;n<=m-1;n++)if(m%n==0)break;if(n>m-1)printf("the%disaprimer\n",m);elseprintf("the%disnotaprimer\n",m);}例:驗(yàn)證素?cái)?shù)素?cái)?shù)是除了1和它自身外,再也找不到能被它整除的數(shù)。即:若m不能被2到m-1中所有整數(shù)整除,則n為素?cái)?shù)。已證明只要從2判斷到m/2或即可。算法分析:求100~200間的全部素?cái)?shù)?也可用m/2或sqrt(m)與break語(yǔ)句退出循環(huán)不同的是,continue語(yǔ)句只結(jié)束本次循環(huán),忽略循環(huán)體中剩下
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025勞動(dòng)合同書(shū)(合同版本)
- 2025年廣告宣傳推廣合同
- 2025房產(chǎn)代理銷(xiāo)售合同
- 2025建筑消防設(shè)施檢測(cè)合同書(shū)最終
- 2025復(fù)印機(jī)購(gòu)銷(xiāo)合同協(xié)議(精簡(jiǎn)版)
- 藥店藥師聘用合同年
- 2025年建筑物空調(diào)系統(tǒng)設(shè)計(jì)合同
- 2025年度個(gè)人住房貸款擔(dān)保合同標(biāo)準(zhǔn)范本8篇
- 2025年總擔(dān)保合同模板
- 2025年工程設(shè)計(jì)變更管理合同
- 中國(guó)末端執(zhí)行器(靈巧手)行業(yè)市場(chǎng)發(fā)展態(tài)勢(shì)及前景戰(zhàn)略研判報(bào)告
- 北京離婚協(xié)議書(shū)(2篇)(2篇)
- 2025中國(guó)聯(lián)通北京市分公司春季校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 康復(fù)醫(yī)學(xué)科患者隱私保護(hù)制度
- Samsung三星SMARTCAMERANX2000(20-50mm)中文說(shuō)明書(shū)200
- 2024年藥品質(zhì)量信息管理制度(2篇)
- 2024年安徽省高考地理試卷真題(含答案逐題解析)
- 廣東省廣州市2024年中考數(shù)學(xué)真題試卷(含答案)
- 高中學(xué)校開(kāi)學(xué)典禮方案
- 內(nèi)審檢查表完整版本
- 3級(jí)人工智能訓(xùn)練師(高級(jí))國(guó)家職業(yè)技能鑒定考試題及答案
評(píng)論
0/150
提交評(píng)論