C語(yǔ)言循環(huán)結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言循環(huán)結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言循環(huán)結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言循環(huán)結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第六章循環(huán)結(jié)構(gòu)2什么是循環(huán)?為什么要使用循環(huán)??循環(huán)的基本概念循環(huán)是有規(guī)律的重復(fù)操作。將復(fù)雜問(wèn)題分解為簡(jiǎn)單的操作過(guò)程,程序只對(duì)簡(jiǎn)單過(guò)程描述,這些過(guò)程的多次重復(fù)就可完成對(duì)問(wèn)題的求解。重復(fù)的頻繁性決定了循環(huán)在程序設(shè)計(jì)中必不可少!問(wèn)題1:?jiǎn)栴}2:求學(xué)生平均成績(jī)

成績(jī)相加后除以人數(shù)做99次加法問(wèn)題3:找出數(shù)x中能同時(shí)被3和7整除的數(shù)

找數(shù)問(wèn)題分解循環(huán)控制3

if--goto循環(huán)

while循環(huán)

for循環(huán)

dowhile循環(huán)

先判斷后循環(huán)

先循環(huán)后判斷特點(diǎn):難點(diǎn):循環(huán)嵌套C提供四種循環(huán)控制:46.1goto語(yǔ)句與標(biāo)號(hào)一般形式:goto標(biāo)號(hào);

其中:標(biāo)號(hào)用標(biāo)識(shí)符表示,即由字母、數(shù)字和下劃線組成,且首字符必須是字母或下劃線。不能用整數(shù)作標(biāo)號(hào)功能:當(dāng)程序執(zhí)行到語(yǔ)句時(shí),改變程序自上而下的執(zhí)行順序,執(zhí)行語(yǔ)句標(biāo)號(hào)指定的語(yǔ)句,并從該語(yǔ)句往下順序執(zhí)行程序。用途:1.與if語(yǔ)句一起構(gòu)成循環(huán)結(jié)構(gòu)2.從循環(huán)體內(nèi)跳到循環(huán)體外3.改變程序自上而下的執(zhí)行順序。缺點(diǎn):濫用goto語(yǔ)句,可使程序無(wú)規(guī)律、可讀性差。5例1:求和sum=1+2+······+100main()

{inti=1,sum=0;L1:if(i>100)gotoL2;sum=sum+i;i++;gotoL1;L2:printf("1+2+······+100=%d\n",sum);

}i>100開(kāi)始i=1,sum=0sum=sum+i,i++非零零結(jié)束輸出sum6

另一寫(xiě)法:

main()

{inti=1,sum=0;L:if(i<=100)

{sum=sum+i;i++; gotoL;

}printf("%d",sum);

}開(kāi)始i=1sum=0i<=100sum=sum+ii=i+1輸出sum結(jié)束零非零框圖:用if與goto構(gòu)成“當(dāng)型”循環(huán)76.2while循環(huán)語(yǔ)句1.while循環(huán)語(yǔ)句的形式

while(表達(dá)式)語(yǔ)句while循環(huán)語(yǔ)句的執(zhí)行過(guò)程是:先判斷條件,后執(zhí)行語(yǔ)句。表達(dá)式語(yǔ)句零非零2.執(zhí)行過(guò)程這是內(nèi)嵌語(yǔ)句,也稱(chēng)為循環(huán)體,它可以是單語(yǔ)句,也可以是復(fù)合語(yǔ)句

循環(huán)體內(nèi)應(yīng)注意設(shè)置修改循環(huán)條件的語(yǔ)句。否則循環(huán)無(wú)法終止。循環(huán)體8說(shuō)明:(1)執(zhí)行while循環(huán)語(yǔ)句時(shí),如果表達(dá)式的值第一次計(jì)算就等于0,則循環(huán)體一次也不執(zhí)行。(2)發(fā)生下列情況之一時(shí),while循環(huán)結(jié)束執(zhí)行:表達(dá)式的值為0;循環(huán)體內(nèi)遇到break語(yǔ)句;循環(huán)體內(nèi)遇到goto語(yǔ)句,且與該goto語(yǔ)句配合使用的標(biāo)號(hào)所指定的語(yǔ)句在本循環(huán)體外;循環(huán)體內(nèi)遇到return語(yǔ)句,此時(shí)退出while循環(huán)后,執(zhí)行的流程從包含該while語(yǔ)句的函數(shù)返回到所調(diào)用函數(shù)。9前例求:main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}開(kāi)始sum=0i=1i<=100sum=sum+ii=i+1輸出sum結(jié)束零非零框圖:循環(huán)體思考:刪除i++;后果?調(diào)換i++;與求和語(yǔ)句的后果?10

例2:輸出華氏-攝氏溫度轉(zhuǎn)換表華氏溫度3035之間的每一度都轉(zhuǎn)換成相應(yīng)的攝氏溫度。轉(zhuǎn)換公式:C=5*(F-32)/9f<=35開(kāi)始f=30c=5*(f-32)/9零非零結(jié)束輸出fcf=f+1#include"stdio.h"

main(){intf;floatc;f=30;

while(f<=35){

c=5*(f-32)/9.0;printf("F=%dC=%4.1f\n",f,c);f=f+1;}}11

例3:輸入一批整數(shù),輸入0時(shí)表示輸入結(jié)束,求這些整數(shù)的和。#include"stdio.h"

main(){ints=0,x;scanf("%d",&x);

while(x!=0){

s=s+x;scanf("%d",&x);}printf("s=%d\n",s);}零非零x!=0開(kāi)始s=0s=s+x結(jié)束輸出s輸入正數(shù)x輸入正數(shù)x思考:取消循環(huán)內(nèi)的輸入語(yǔ)句后果?循環(huán)次數(shù)未知,標(biāo)記控制的循環(huán)121.do—while循環(huán)語(yǔ)句的形式

do語(yǔ)句while(表達(dá)式);2.執(zhí)行過(guò)程說(shuō)明:(1)do—while循環(huán)語(yǔ)句首先執(zhí)行循環(huán)體,然后計(jì)算表達(dá)式并檢查循環(huán)條件,所以循環(huán)體至少執(zhí)行一次。(2)退出do—while循環(huán)的條件與退出while循環(huán)的條件相同。表達(dá)式語(yǔ)句零非零6.3

do—while循環(huán)語(yǔ)句注意:不要丟掉分號(hào)do—while循環(huán)執(zhí)行過(guò)程是:先執(zhí)行語(yǔ)句,后判斷條件。13例4:用迭代法求a的算數(shù)平方根。公式:xn=0.5*(xn-1+a/xn-1)

確定初值為x0,

取a/2為x0的初值,迭代結(jié)束條件:|x1-x0|<=10-5.#include<stdio.h>#include<math.h>main(){floata,x0,x1;scanf("%f",&a);x1=a/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x1-x0)>1e-5);printf("squrt(a)=%f\n",x1);}表達(dá)式=0?語(yǔ)句零非零|x1-x0|>10-5

?x0=x1x1=(x0+a/x0)/2輸入ax1=a/2輸出a,x114注意:當(dāng)while后的表達(dá)式為真時(shí),while語(yǔ)句和do—while語(yǔ)句的結(jié)果相同,否則不同。main(){inti,s=0;scanf("%d",&i);

while(i<=10){s=s+i;i++;}printf("s=%d\n",s);}輸入:1打?。?5輸入:11打印:0main(){inti,s=0;scanf("%d",&i);

do

{s=s+i;i++;}

while(i<=10);printf("s=%d\n",s);}

輸入:1打印:55

輸入:11打?。?1156.4for循環(huán)語(yǔ)句1.for循環(huán)語(yǔ)句的形式

for([表達(dá)式1];[表達(dá)式2];[表達(dá)式3])語(yǔ)句表達(dá)式2表達(dá)式1語(yǔ)句表達(dá)式3零非零2.執(zhí)行過(guò)程說(shuō)明:(1)表達(dá)式1僅被執(zhí)行一次;表達(dá)式2決定了是否繼續(xù)執(zhí)行循環(huán);表達(dá)式3則不斷修改循環(huán)控制變量的值。(2)三個(gè)表達(dá)式均可省略,分號(hào)不能省略。163.說(shuō)明:(1)最簡(jiǎn)單的應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語(yǔ)句如前例:求1+2+3+……+100之和。main(){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d",sum);}作累加17(2)三個(gè)表達(dá)式均可缺省,但起分割作用的兩個(gè)分號(hào)不可省略。例如:for(;;)表達(dá)式1省略,應(yīng)在for之前對(duì)循環(huán)變量賦初值

……i=1;for(;i<=100;i++)sum=sum+i;……while(1){...if(表達(dá)式)break;...}表達(dá)式1放在for前18表達(dá)式2省略,則不判斷條件,循環(huán)無(wú)終止進(jìn)行下去。

……for(i=1;;i++)sum+=i;

表達(dá)式3省略,則應(yīng)另設(shè)法保證循環(huán)的結(jié)束.

……for(sum=0,i=1;i<=100;){sum=sum+i;i++;}表達(dá)式319(3)表達(dá)式1和表達(dá)式3可以是逗號(hào)表達(dá)式。例:inti,j,sum;for(i=0,j=100;i<=j;i++,j--)sum=i+j;20例5:計(jì)算并輸出

n!=1×2×3×…×n

作累乘,p類(lèi)型21例6:計(jì)算并輸出

1!,2!,3!,…,n!

循環(huán)體22例7:輸出100以?xún)?nèi)(含100)所有偶數(shù)的和與所有奇數(shù)的和。main(){inti,s1=0,s2=0;for(i=1;i<=100;i++)if(i%2==0)s1=s1+i;elses2=s2+i;printf(s1=%d,s2=%d\n,s1,s2);}若只計(jì)算奇數(shù)的和,此處改為:if(i%2!=0)s1=s1+i;23例8:求s=1-1/2+1/3-1/4+······+1/n,n由鍵盤(pán)輸入。解題方法:讓變量t的初值等于1,然后反復(fù)執(zhí)行語(yǔ)句,則t的值就在1和-1之間交替變化。main(){inti,n;doubles,t;scanf(″%d″,&n);for(s=0,t=1,i=1;i<=n;i++){s=s+t/i;t=–t;}printf(″s=%f\n″,s);}24分析:求前n項(xiàng)和,要循環(huán)n次,每次累加1項(xiàng)。除第1項(xiàng)外,每次循環(huán)分母都遞增2,符號(hào)交替變化。#include<stdio.h>main(){inti,n,t=1,flag=1;doublesum=0,item;scanf("%d",&n);for(i=1;i<=n;i++){item=flag*1.0/t;/*計(jì)算第i項(xiàng)的值*/sum=sum+item;/*累加第i項(xiàng)的值*/flag=-flag;/*改變符號(hào),為下次循環(huán)做準(zhǔn)備*/t=t+2;/*分母遞增2,為下次循環(huán)做準(zhǔn)備*/}printf("sum=%f\n",sum);}例9:輸入一個(gè)正數(shù)n,計(jì)算1-1/3+1/5-1/7+……的前n項(xiàng)之和。運(yùn)行結(jié)果:輸入:5↙sum=0.834921sum=sum+flag*1.0/(2*i-1);flag=-flag;等效256.5三種循環(huán)語(yǔ)句的比較for語(yǔ)句和while語(yǔ)句先判斷條件,后執(zhí)行語(yǔ)句,故循環(huán)體有可能一次也不執(zhí)行,而do—while語(yǔ)句的循環(huán)體至少執(zhí)行一次。用while和do—while循環(huán)時(shí)循環(huán)變量初始化的操作應(yīng)在while和do—while語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。26選擇三種循環(huán)的一般原則如果循環(huán)次數(shù)已知,計(jì)數(shù)控制的循環(huán)用for如果循環(huán)次數(shù)未知,條件控制的循環(huán)用while如果循環(huán)體至少要執(zhí)行一次用do-while這只是“一般”原則,不是“原則”276.6循環(huán)語(yǔ)句的嵌套1.定義:在循環(huán)體內(nèi)又包含一個(gè)循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)嵌套。三種循環(huán)(while、do_while、for)都可以互相嵌套。例如:以下幾種都是合法的嵌套形式for(;;){···

while(){···}

}for循環(huán)體嵌套while循環(huán)體for(;;){···

for(;;){···}}for循環(huán)體嵌套for循環(huán)28do{

do{···}while();

}while();do_while循環(huán)體嵌套do_while循環(huán)while(){

do{···}while();

}while循環(huán)體嵌套do_while循環(huán)while(){

while(){···}}while循環(huán)體嵌套while循環(huán)

do{

for(;;){···}}while();do_while循環(huán)體嵌套for循環(huán)292.嵌套結(jié)構(gòu)規(guī)則外循環(huán)內(nèi)循環(huán)交叉循環(huán)外循環(huán)入口內(nèi)循環(huán)出口內(nèi)循環(huán)出口外循環(huán)出口30

例10:循環(huán)嵌套舉例。

for(i=1;i<=2;i++)for(j=1;j<=2;j++)

{printf(″%3d″,i+j);

printf(″\n″);

}for(i=1;i<=2;i++){for(j=1;j<=2;j++)printf(″%3d″,i+j);

printf(″\n″);

}對(duì)j循環(huán)結(jié)束,再換行.輸出結(jié)果:

2

3

3

4輸出結(jié)果:

23

3431

例11:求1!+2!+3!+…..+n!

main(){inti,j,n;floatsum,s;scanf("%d",&n);sum=0;for(i=1;i<=n;i++)

{

s=1;for(j=1;j<=i;j++)s*=j;sum+=s;

}printf("%f\n",sum);}計(jì)算i!注意類(lèi)型定義32例12:按規(guī)定的格式輸出九九乘法表。main(){inti,j;for(i=1;i<=9;i++)

{for(j=1;j<=i;j++)printf("%d",i*j);printf("\n");}}內(nèi)循環(huán)體外循環(huán)體1

24369

918277281…..……討論:1、輸出上三角99乘法表。2、輸出全部99乘法表33main(){inti,j,k;for(i=1;i<=9;i++){for(k=1;k<=i-1;k++)printf(""); for(j=i;j<=9;j++)printf("%3d",i*j);printf("\n");}}main(){inti,j,k;for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf("%3d",i*j);printf("\n");}}34

例13:在前題基礎(chǔ)編寫(xiě)程序輸出該圖形輸入m(行數(shù));for(i=1;i<=m;i++)

{for(j=1;j<=i;j++)printf(“*”);/*打印j個(gè)*號(hào)*/

printf(“\n”);/*換新行*/}**********#include<stdio.h>main(){

inti,j,m;scanf("%d",&m);for(i=1;i<=m;i++)

{for(j=1;j<=i;j++)

printf("*");

printf("\n");}

}35例14:for循環(huán)嵌套while循環(huán):

輸入6名學(xué)生5門(mén)課程的成績(jī),分別統(tǒng)計(jì)每名學(xué)生5門(mén)課程的平均成績(jī)。#include<stdio.h>main(){inti,j;floatscore,sum,ave;for(i=1;i<=6;i++)

{sum=0;j=1;while(j<=5){scanf("%f",&score);sum=sum+score;j++;}ave=sum/5;printf("i=%dave=%6.2f\n",i,ave);

}}for(j=1;j<=5;j++){scanf("%f",&score);sum=sum+score;}等效36#include"stdio.h"main(){inti,f,f1,f2;f1=f2=1;printf("%8d%8d",f1,f2);for(i=3;i<=20;i++){f=f1+f2;printf("%8d",f);if(i%5==0)printf("\n");f1=f2;f2=f;}}例15:求斐波那契(Fibonacci)數(shù)列的前20項(xiàng),并以每行5個(gè)輸出。Fibonacci數(shù)列:1,1,2,3,5,8,13,21,34,……。特點(diǎn):前兩項(xiàng)是1,1,從第3項(xiàng)開(kāi)始每項(xiàng)的值是前兩項(xiàng)之和。運(yùn)行結(jié)果控制每行輸出5個(gè)數(shù)例16:求以下函數(shù)的近似值

特點(diǎn):第i項(xiàng)的分子是x的2i-1次方第i項(xiàng)的分母是(2i-1)!第i項(xiàng)的符號(hào)是(-1)i+1需要雙重循環(huán):內(nèi)循環(huán)計(jì)算分子和分母,外循環(huán)實(shí)現(xiàn)累加。作業(yè)選作題:習(xí)題五第四小題。#include<stdio.h>#include<math.h>main(){ doublesin=0,x,a,b; inti,k,n; printf("inputx,n:\n"); scanf("%lf,%d",&x,&n); x=x*3.1415926/180;/*輸入的角度化為弧度*/ for(i=1;i<=n;i++) {

a=b=1; for(k=1;k<=2*i-1;k++) { a=a*x; b=b*k; } sin+=pow(-1,i+1)*a/b; }printf("sin=%lf\n",sin);}注意:要用此類(lèi)型注意:輸入角度化為弧度注意:正負(fù)的變化或采用先t=1;t=-t;的辦法x的累乘分母的累乘396.7break和continue語(yǔ)句1.break語(yǔ)句語(yǔ)法:break;功能:結(jié)束包含該語(yǔ)句的最內(nèi)層循環(huán)

main(){intn;for(n=100;n<=200;n++)

{if(n%3==0)break;printf(″%6d″,n);

}}2.continue語(yǔ)句語(yǔ)法:continue;功能:結(jié)束循環(huán)體的本次循環(huán)main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(″%6d″,n);}}100-200之間只要遇到能被3整除的數(shù)就結(jié)束循環(huán)。輸出:100101本程序?qū)?00-200之間不能被3整除的數(shù)輸出與下列語(yǔ)句等效:if(n%3!=0)printf(″%6d″,n);只能出現(xiàn)在switch和循環(huán)語(yǔ)句中只能出現(xiàn)在循環(huán)語(yǔ)句的循環(huán)體中40for循環(huán)結(jié)構(gòu)中的break結(jié)構(gòu)for循環(huán)結(jié)構(gòu)中的continue結(jié)構(gòu)表達(dá)式2表達(dá)式1語(yǔ)句1表達(dá)式3零非零break語(yǔ)句2是否表達(dá)式2表達(dá)式1語(yǔ)句1表達(dá)式3零非零continue語(yǔ)句2是否41程序段1:inti,n=0;for(i=0;i<10;i++){n++;if(i>5)continue;}printf("i=%d,n=%d\n",i,n);程序段2:inti=0,n=0;while(i<10){n++;if(i>5)continue;i++;}printf("i=%d,n=%d\n",i,n);表面看功能相同。討論:1、將continue換成break結(jié)果相同2、段1運(yùn)行結(jié)果i=10,n=10

段2,當(dāng)i=6時(shí)死循環(huán)。423.空語(yǔ)句形式:

;(只由一個(gè)分號(hào)構(gòu)成)2.功能什么也不做。(可出現(xiàn)在程序中任何語(yǔ)句可以出現(xiàn)的地方)例:求級(jí)數(shù)12+22+32+…,前10項(xiàng)之和。main(){inti,sum;for(sum=0,i=1;i<=10;sum+=i*i,i++)

;printf("sum=%d\n",sum);}例:程序段

gotoL1;

L1:;

43練習(xí)1:下面程序的運(yùn)行結(jié)果是________。

main(){inti=10;while(i-->0);printf("%d\n",i);}輸出結(jié)果:-1循環(huán)體“;”是空語(yǔ)句。44注意在for和while語(yǔ)句之后一般沒(méi)有分號(hào)有分號(hào)表示循環(huán)體就是分號(hào)之前的內(nèi)容空語(yǔ)句——表示循環(huán)體內(nèi)什么都不做

while

(i<100);

i++;死循環(huán)

for

(i=0;i<100;i++);

printf("%d",i);用于延時(shí)注意!45練習(xí)2:下列程序段,選項(xiàng)正確的是()。

inti,k;for(i=0,k=-1;k=1;i++,k++)printf("***");

A.判斷循環(huán)結(jié)束的條件非法

B.無(wú)限循環(huán)。

C.只循環(huán)一次

D.一次也不循環(huán)

表達(dá)式2:k=1,非零,是無(wú)限循環(huán)B46

練習(xí)3:main(){intx=3;doprintf("%3d",x-=2);while(!(--x));}輸出結(jié)果:1-247練習(xí)4:閱讀下列程序,輸出結(jié)果()。

main(){inti=0,j=10,k=2,s=0;for(;;)i+=k;if(i>j){printf(″s=%d″,s);break;}s+=j;

}

循環(huán)體共執(zhí)行了多少次?

S=506次當(dāng)條件i>j成立時(shí)才能執(zhí)行到break語(yǔ)句For循環(huán)是死循環(huán)注意:break語(yǔ)句只能出現(xiàn)在switch,for,while或do—while語(yǔ)句中。{}48練習(xí)5:以下程序的輸出結(jié)果是()。

main(){intx=8;for(;x>0;x--)

{if(x%3){printf(″%d″,x--);continue;}printf(″%d″,--x);}}

D如x不是3的倍數(shù)(x%3!=0),則輸出x,并令x減1,結(jié)束本次循環(huán)。

A.742B.8752C.9764D.8542

49

練習(xí)6:下列程序的輸出結(jié)果是()。

main(){intk=0,m=0;inti,j;for(i=0;i<2;i++){for(j=0;j<3;j++)k++;k-=j;}m=i+j;printf(“k=%d,m=%d”,k,m);}

A.k=0,m=3B.k=0,m=5C.k=1,m=1D.k=1,m=4

B外循環(huán)的循環(huán)體包括內(nèi)循環(huán)和k-=j;兩條語(yǔ)句50

練習(xí)7:下列程序的輸出結(jié)果是()。

main(){inti,j,x=0;for(i=0;i<2;i++)

{x++;for(j=0;j<=3;j++){if(j%2!=0)cont

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論