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頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章循環(huán)結(jié)構(gòu)程序設(shè)計5.1while循環(huán)5.2do-while循環(huán)5.3for循環(huán)5.4循環(huán)結(jié)構(gòu)的嵌套5.5轉(zhuǎn)向語句5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例

5.1while循環(huán)while語句用于構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)。while語句的一般形式為:

while(表達(dá)式)循環(huán)體語句while循環(huán)結(jié)構(gòu)的執(zhí)行過程是:首先計算表達(dá)式(循環(huán)條件)的值,若結(jié)果為“真”(非零),則執(zhí)行循環(huán)體語句;然后再次計算表達(dá)式的值,重復(fù)上述過程,直到表達(dá)式的值為“假”(零)時結(jié)束循環(huán),流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語句。5.1while循環(huán)【例5.1】從鍵盤上輸入一個整數(shù)n,求n!,利用while語句編程實現(xiàn)。main(){intn,i,s;printf("\nEntern:");

scanf("%d",&n);i=1;s=1; /*給變量i、s賦初值*/

while(i<=n) /*循環(huán)繼續(xù)的條件*/ {s=s*i;

/*進(jìn)行累乘求積*/

i++; /*乘數(shù)增值*/ }

printf("\nn!=%d",s); /*輸出計算的結(jié)果*/}運(yùn)行情況如下:Entern:5↙n!=1205.1

while循環(huán)使用while循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點:while循環(huán)結(jié)構(gòu)的特點是“先判斷,后執(zhí)行”。如果表達(dá)式的值一開始就為“假”,則循環(huán)體一次也不執(zhí)行。循環(huán)體中,如果包含一個以上的語句,則應(yīng)用花括號括起來,以復(fù)合語句的形式出現(xiàn)。循環(huán)體內(nèi)一定要有改變循環(huán)繼續(xù)條件的語句,使得循環(huán)趨向于結(jié)束,否則循環(huán)將無休止的進(jìn)行下去,即形成“死循環(huán)”。為使循環(huán)能夠正確開始運(yùn)行,還要做好循環(huán)前的準(zhǔn)備工作,【例5.2】從鍵盤上輸入30個學(xué)生的成績,對其進(jìn)行處理:如果成績及格,則輸出“Passed”;否則輸出“Failed”。5.1while循環(huán)5.1while循環(huán)main(){intn=1;/*循環(huán)控制變量賦初值*/

floatscore;while(n<=30)/*/循環(huán)繼續(xù)的條件*/{printf("Enterascore:\n");scanf("%f",&score);if(score>=60.0)printf("Passed\n"); elseprintf("Failed\n");n++;/*循環(huán)控制變量增值*/}}5.2

do-while循環(huán)do-while語句構(gòu)成的循環(huán)結(jié)構(gòu)類似于“直到型”循環(huán),do-while語句的形式為:do

循環(huán)體語句while(表達(dá)式);do-while循環(huán)結(jié)構(gòu)的執(zhí)行過程:首先執(zhí)行一次循環(huán)體語句,然后計算表達(dá)式(循環(huán)條件)的值。若結(jié)果為“真”(非零),則再次執(zhí)行循環(huán)體,再計算表達(dá)式的值,如此重復(fù)下去,直到表達(dá)式的值為“假”(零)時,循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語句。5.2do-while循環(huán)【例5.3】用do-while循環(huán)結(jié)構(gòu)實現(xiàn)例5.1。main(){intn,i,s;

printf("\nEntern:");

scanf("%d",&n);i=1;s=1;do{s=s*i; i++;}while(i<=n);printf("\nn!=%d",s);}5.2do-while循環(huán)使用do-while循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點:當(dāng)do-while循環(huán)體包含一個以上的語句時應(yīng)該用花括號括起來,以復(fù)合語句形式出現(xiàn);循環(huán)體內(nèi)也一定要有改變循環(huán)條件的語句,使循環(huán)趨向于結(jié)束。下面的兩個程序可以明顯的看出while循環(huán)和do-while循環(huán)的區(qū)別。5.2do-while循環(huán)當(dāng)輸入1時,兩個程序的運(yùn)行結(jié)果是一樣的:Thesumis18,i=4當(dāng)輸入5時,第一個程序的運(yùn)行結(jié)果是:Thesumis6,i=6第二個程序的運(yùn)行結(jié)果是:Thesumis0,i=5for語句是功能強(qiáng)大的構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)的循環(huán)語句。它不但可以用于循環(huán)次數(shù)已知的情況,而且還可以用于循環(huán)次數(shù)不定的情況。程序形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語句5.3for循環(huán)for循環(huán)結(jié)構(gòu)的執(zhí)行過程:首先進(jìn)行表達(dá)式1的運(yùn)算,然后計算表達(dá)式2的值,若結(jié)果為真(非零),則執(zhí)行循環(huán)體語句,最后進(jìn)行表達(dá)式3的運(yùn)算。再次計算表達(dá)式2的值,若結(jié)果為“真”(非零),再執(zhí)行循環(huán)體語句,最后再進(jìn)行表達(dá)式3的運(yùn)算。如此循環(huán)重復(fù)下去,直到計算表達(dá)式2的結(jié)果為“假”(零)時,循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語句?!纠?.4】用for循環(huán)結(jié)構(gòu)實現(xiàn)例5.1。main(){intn,i,s;

printf("\nEntern:");

scanf("%d",&n);for(i=1,s=1;i<=n;i++) s=s*i;printf("\nn!=%d",s);}5.3

for循環(huán)使用for循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點:用for循環(huán)結(jié)構(gòu)也具有“先判斷,后執(zhí)行”的特點。for循環(huán)結(jié)構(gòu)相當(dāng)如下形式的while結(jié)構(gòu):表達(dá)式1;while(表達(dá)式2)循環(huán)體表達(dá)式3;從語法上看,for的三個成分都是表達(dá)式,它們之間都以分號“;”隔開。表達(dá)式1和表達(dá)式3常常是賦值表達(dá)式或函數(shù)調(diào)用,有時也可以是逗號表達(dá)式,一般用來實現(xiàn)對循環(huán)控制變量初始化和循環(huán)控制變量增(減)值。表達(dá)式2常常是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是其它類型的表達(dá)式,它是用來表示循環(huán)繼續(xù)的條件,只要其值為非零,就可執(zhí)行循環(huán)體,否則推出循環(huán)。例如:for(i=1,sum=0;i<=100;i++,i++)sum+=i;5.3for循環(huán)關(guān)鍵字for的三個表達(dá)式允許部分或全部省略,但其中的兩個分號不能省略,否則,系統(tǒng)將報錯。需要注意:當(dāng)省略表達(dá)式1時,在進(jìn)入for循環(huán)之前應(yīng)該有給循環(huán)控制變量賦初始值的語句;當(dāng)省略表達(dá)式3時,應(yīng)該在循環(huán)體內(nèi)有修改循環(huán)控制變量的值的語句,以保證循環(huán)能夠正常結(jié)束。例如:for(i=1,s=1;i<=n;)

{s=s*i;;

i++;}當(dāng)表達(dá)式2或三個表達(dá)式全部省略時,應(yīng)該在循環(huán)體內(nèi)設(shè)置相應(yīng)的語句來結(jié)束循環(huán),否則程序始終認(rèn)為判斷條件成立,循環(huán)將無終止地執(zhí)行下去,即形成了所謂的死循環(huán)。如果循環(huán)體語句為一語句組,則必須用一對花括號“{}”括起來。5.3for循環(huán)由于for循環(huán)結(jié)構(gòu)書寫形式靈活多樣,如果在三個表達(dá)式中過多的加入與循環(huán)控制無關(guān)的內(nèi)容,容易降低可讀性。因此,通常使用一種簡單明了的for循環(huán)結(jié)構(gòu)形式:for(循環(huán)控制變量賦初值;循環(huán)條件;循環(huán)控制變量增(減)值)循環(huán)體語句5.3for循環(huán)【例5.5】輸入一批非零整數(shù),以0為結(jié)束符,輸出其中的最大值。#include<stdio.h>main(){intx,max;printf("inputnumbers,lastoneis0:\n");/*輸出提示信息*/

scanf("%d",&x);max=x;/*先將第一個數(shù)賦值給變量max*/for(;x!=0;){scanf("%d",&x);if(max<x)max=x;/*輸入值比變量max大,用當(dāng)前值替換變量max的值*/}printf("max=%d\n",max);/*輸出最大值*/}5.3for循環(huán)程序的運(yùn)行情況如下:inputnumbers,lastoneis0:3↙6↙5↙2↙9↙7↙0↙max=9例3

main(){inta=10,b=5,c=5,d=5;inti=0,j=0,k=0;for(;a>b;++b)i++;while(a>++c)j++;dok++;while(a>d++);printf("%d,%d,%d\n",i,j,k);}運(yùn)行結(jié)果:5,4,65.4循環(huán)結(jié)構(gòu)的嵌套下面是幾種合法的循環(huán)嵌套形式:(1)while()(2)for(;;){{……while()do{{……}}while();……}}(3)while()(4)do{{……for(;;)for(;;){{……}}}}while();5.4循環(huán)結(jié)構(gòu)的嵌套【例5.6】編程輸出以下形式的乘法九九表。1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=92*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18……9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81main(){ inti,j; for(i=1;i<=9;i++)/*i作為外循環(huán)控制變量控制被乘數(shù)變化*/ {printf("\n"); for(j=1;j<=9;j++)/*j作為內(nèi)循環(huán)控制變量控制乘數(shù)變化*/

printf("%1d*%1d=%2d",i,j,i*j); }}5.4循環(huán)結(jié)構(gòu)的嵌套【例5.7】全班有30個學(xué)生,每個學(xué)生考8門課。要求分別統(tǒng)計出每個學(xué)生各門課的平均成績。5.4循環(huán)結(jié)構(gòu)的嵌套main(){inti,j,score,sum; floataver; j=1; while(j<=30) {sum=0; for(i=1;i<=8;i++)

{printf("EnterNO.%dthescore%d:",j,i); scanf("%d",&score);/*輸入第j個學(xué)生第i門課程的成績*/

sum=sum+score;

/*累計第j個學(xué)生的總成績*/ }

aver=sum/8.0;

/*計算第j個學(xué)生的平均成績*/

printf("NO.%daver=%5.2f\n",j,aver);/*輸出第j個學(xué)生的平均成績*/

j++; }}5.4循環(huán)結(jié)構(gòu)的嵌套使用循環(huán)的嵌套結(jié)構(gòu)要注意以幾點:外層循環(huán)應(yīng)“完全包含”內(nèi)層循環(huán),不能發(fā)生交叉。例如下面這種形式是不允許的:do{……for(…){……}while(…);}嵌套的循環(huán)控制變量一般不應(yīng)同名,以免造成混亂。5.4循環(huán)結(jié)構(gòu)的嵌套嵌套的循環(huán)要注意正確使用縮進(jìn)式書寫格式來明確嵌套循環(huán)的層次關(guān)系,以增加程序的可讀性。break語句break語句的功能是使執(zhí)行從包含它的最內(nèi)層循環(huán)或開關(guān)語句中跳出,轉(zhuǎn)到switch結(jié)構(gòu)或該循環(huán)結(jié)構(gòu)外的下一語句執(zhí)行。這將導(dǎo)致包含它的最內(nèi)層循環(huán)(while、for、do-while)或switch語句的終止。break語句的一般形式:break;5.5轉(zhuǎn)向語句

【例5.8】找出100~300之間第一個能17整除的數(shù)。

main(){inti;for(i=100;i<=300;i++){if(i%17==0)/*判斷是否能被17整除*/{printf("%d\n",i);break;/*找到第一個能被17整除的數(shù),結(jié)束整個循環(huán)*/}}}5.5轉(zhuǎn)向語句

使用break語句應(yīng)注意以下幾點:break語句只能用于switch結(jié)構(gòu)或循環(huán)結(jié)構(gòu)中。在循環(huán)結(jié)構(gòu)中應(yīng)用時,通常與if語句配合使用。在嵌套的循環(huán)結(jié)構(gòu)中使用時,break語句只能跳出(或終止)包含它的最內(nèi)層循環(huán)。而不能同時跳出(或終止)多層循環(huán)。5.5轉(zhuǎn)向語句

continue語句continue語句的作用是結(jié)束本次循環(huán),使得包含它的循環(huán)(while、do-while、for)開始下一次重復(fù)continue語句的一般形為:continue;【例5.9】把100~200之間不能被7整除的數(shù)輸出。main(){ intn; for(n=100;n<=200;n++) {if(n%7==0)continue;printf("%d\t",n); }}

5.5轉(zhuǎn)向語句

使用continue語句時要注意以下幾點:continue語句只能用于循環(huán)結(jié)構(gòu)中。通常也要有if語句配合使用。continue語句和break語句雖然都實現(xiàn)了程序執(zhí)行方向的無條件轉(zhuǎn)移,但它們的區(qū)別是:continue語句只能結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行;break語句則是立即結(jié)束整個循環(huán)過程。例如

main(){inti=1;while(i<=15)if(++i%3!=2)continue;elseprintf("%d",i);printf("\n");}運(yùn)行結(jié)果:2581114例如

求10~30間的全部質(zhì)數(shù)

main(){inti,j;for(i=10;i<=30;i++)for(j=2;j<i;j++){if(i%j==0)break;if(j==i-1)printf("%d\t",i);}}5.5轉(zhuǎn)向語句goto語句goto語句為無條件轉(zhuǎn)向語句,功能是:把程序控制轉(zhuǎn)移到標(biāo)號指定的語句處,使程序從指定的標(biāo)號處的語句開始繼續(xù)執(zhí)行。goto語句的一般形式為:goto標(biāo)號;……標(biāo)號:語句;標(biāo)號是由用戶命名的標(biāo)識符,其后要跟一個冒號。標(biāo)號的命名規(guī)則與變量名相同,其作用是用來表示goto的目標(biāo)。標(biāo)號可以用在任何語句前面,但必須與引用它的goto語句在同一個函數(shù)中。一般來講,goto語句的用途有兩種:與if語句一起構(gòu)成循環(huán)結(jié)構(gòu);從循環(huán)體中跳到循環(huán)體外。5.5轉(zhuǎn)向語句

【例5.10】從鍵盤上輸入10個整數(shù),求其累加和。采用if語句和goto語句構(gòu)成的循環(huán)編程實現(xiàn)。main(){ inti,sum,x;; i=1;sum=0; loop:if(i>10)gotoend;/*loop為標(biāo)號*/

printf("Enteradata:"); scanf("%d",&x); sum=sum+x; i++; gotoloop; end:printf("sum=%d\n",sum);/*end為標(biāo)號*/}5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例計數(shù)型循環(huán)

5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例【例5.11】輸入10個整數(shù),求出其中的最大值與最小值。main(){ inti; intx,max,min; printf("\npleaseinputthefirstnumber:"); scanf("%d",&x); max=x; min=x; for(i=2;i<=10;i++) {printf("\npleaseinputthenextnumber:");scanf("%d",&x);if(x>max)max=x;elseif(x<min)min=x; } printf("\nmax=%d,min=%d",max,min);}5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例【例5.12】輸入10個整數(shù),輸出其中正數(shù)的個數(shù)及平均值。#include<stdio.h>main(){intsum,i,k,x;printf("\ninput10numbers:");sum=0;k=0;for(i=0;i<10;++i){scanf("%d",&x);if(x<=0)

continue;/*結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)判斷*/

sum+=x;k++;}5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例

if(k)/*正數(shù)的個數(shù)不為0*/

printf("\nnumbers=%d,average=%.4f",k,1.0*sum/k);else

printf("\nnumbersis0");}運(yùn)行情況如下:input10numbers:1↙8↙3↙-5↙9↙3↙-77↙2↙9↙6↙numbers=7,average=5.42865.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例【例5.13】計算s=1!+2!+3!+…+n!,n由終端輸入。#include<stdio.h>main(){inti,j,n;longsum,term;/*定義變量sum、term為長整型變量*/

printf("\ninputn:");scanf("%d",&n);for(sum=0,i=1;i<=n;i++){term=1;j=1;do{term*=j;/*求i的結(jié)乘*/}while(++j<=i);sum+=term;/*把i的結(jié)乘累加到sum單元中*/}5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例printf("\nsum=%ld\n",sum);}程序的運(yùn)行情況如下:inputn:4↙sum=33例

計算1!+2!+3!+……+10!

main(){floatx,y,t,s;s=0;for(x=1;x<=10;x++){y=1;t=1;while(y<=x){t=t*y;y++;}s=s+t;}printf("%10.0f\n",s);}例2

main(){inti,j,k;chars='';for(i=0;i<=5;i++){for(j=1;j<=i;j++)printf("%c",s);for(k=0;k<=5;k++)printf("%c",'*');printf("\n");}}例3

輸出以下圖案

****************

程序如下main(){inta,b,c;for(a=0;a<=3;a++){for(b=0;b<=2-a;b++)printf("");for(c=0;c<=2*a;c++)printf("*");printf("\n");}}其中a決定了行數(shù)若改為:main(){inta,b,c;for(a=0;a<=5;a++){for(b=0;b<=4-a;b++)printf("");for(c=0;c<=2*a;c++)printf("*");printf("\n");}}則輸出變成了6行。條件型循環(huán)【例5.14】利用格里高利公式求π:=1-+-+…直到最后一項的絕對值小于等于10-6為止。#include"math.h"main(){intsign=1;floatn,pi,t;t=1.0;n=1.0;pi=0.0;do{pi=pi+t;n=n+2;sign=-sign;/*符號轉(zhuǎn)換*/

t=sign/n;}while(fabs(t)>=1e-6);pi=pi*4;

printf("\npi=%10.6f",pi);}運(yùn)行情況:pi=3.1415945.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例【例5.15】輸入一個整數(shù)n(n≥3),判斷是否為素數(shù)。#

include"math.h"main(){ intn,i,flag; printf("\nEnterainteger:"); scanf("%d",&n); i=2; flag=1; while(i<=(int)sqrt(n)&&flag)

if(n%i==0)flag=0;elsei++; if(flag)printf("\n%disprimenumber.",n); elseprintf("\n%disnotprimenumber.",n); }5.6循環(huán)結(jié)構(gòu)程序設(shè)計舉例運(yùn)行情況:Enterainteger:78↙78isnotprimenumber.再運(yùn)行:Enterainteger:137↙137isprimenumber.父子倆的年齡:父親今年30歲,兒子今年6歲,問多少年后父親年齡是兒子年齡的2倍打印500以內(nèi)所有能被7或9整除的數(shù)。main(){inti=30,j=6;for(;i<500;i++,j++)if(i==2*j)printf("after%dyear,%dis%d*2",i-30,i,j);}main(){inti;for(i=1;i<=500;i++)if(i%7==0||i%9==0)printf("%d\t",i);}goto語句

goto是無條件轉(zhuǎn)向語句,它的形式是:goto語句標(biāo)號;goto語句可以和if語句一起組成循環(huán),也可以用于跳出循環(huán)體

例如:計算1+2+3+……+99+100的值

main(){inti,t=0;i=1;aaa:if(i<=100){t=t+i;i++;gotoaaa;}printf(“%d“,t);}循環(huán)的應(yīng)用一、Fibonacci數(shù)列問題1,1,2,3,5,8,13,21,34,55,……歸納分析結(jié)果:數(shù)列的第三項等于前兩項之和。可使用循環(huán)解決該問題。程序如下:

main(){inta=1,b=1,c,i;

printf(“%d\t%\t”,a,b);for(i=3;i<=10;i++){c=a+b;a=b;b=c;

printf(“%d\t”,c);if(i%5==0)printf(“\n”);}}練習(xí):編程,將數(shù)列延長到前50項:1,2,5,10,21,42,85,170,341,682,……牛的繁殖問題:有一頭母牛,它每年年初要生一頭小母牛;每頭小母牛從第四個年頭起,每年年初也要生一頭小母牛。按此規(guī)律,若無牛死亡,第20年頭上共有多少頭母牛。main()

{inti;

floatj=1;printf("%10.0f\t",j);

for(i=2;i<=50;i++)

{if(i%2)j=2*j+1;

elsej=2*j;

printf("%10.0f\t",j);

if(i%5==0)printf("\n");

}

}

main(){intx,j,z=1;j=1;printf("%d\t",j);for(x=1;x<20;x++){if(x<=4) {j++;}else{z++;j+=z;}printf("%d\t",j);if(x%4==0)printf("\n");}}搬磚問題36塊磚,36人搬,男搬4,女搬3,兩個小孩抬一塊磚,要求一次全搬完,問男、女、小孩各需要多少人?

main(){intmen,women,children;for(men=1;men<=36/4;men++)for(women=1;women<=36/3;women

溫馨提示

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

最新文檔

評論

0/150

提交評論