《C語(yǔ)言程序設(shè)計(jì)教程》課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)教程》課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)教程》課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)教程》課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)教程》課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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)介

本章要點(diǎn)while、do…while、for三種循環(huán)語(yǔ)句continue和break語(yǔ)句循環(huán)的嵌套循環(huán)結(jié)構(gòu)程序的應(yīng)用舉例學(xué)習(xí)方法建議:學(xué)習(xí)本章內(nèi)容時(shí),應(yīng)重點(diǎn)掌握三種循環(huán)語(yǔ)句的基本流程,并在此基礎(chǔ)上理解循環(huán)嵌套的應(yīng)用。要求多讀程序,理解編程的算法、編程的思路,并仿照例題多編程序、上機(jī)練習(xí),真正掌握循環(huán)結(jié)構(gòu)程序的設(shè)計(jì)。第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

1.問(wèn)題描述——統(tǒng)計(jì)學(xué)生某門(mén)課程的平均成績(jī)每學(xué)期期末,通常需要對(duì)各門(mén)課程的教學(xué)情況進(jìn)行總結(jié)。其中,統(tǒng)計(jì)課程的平均成績(jī)是考察教學(xué)效果的重要評(píng)定參數(shù)。假設(shè)某班40名同學(xué)選修了C語(yǔ)言程序設(shè)計(jì),要求統(tǒng)計(jì)該門(mén)課程的平均成績(jī)。2.引例分析要想統(tǒng)計(jì)課程的平均成績(jī),應(yīng)先求出所有學(xué)生的成績(jī)總和,然后用人數(shù)去除總成績(jī)可得結(jié)果。首先設(shè)定變量sum表示總成績(jī),令其初值為零,即sum=0;定義變量score用來(lái)表示某位同學(xué)的成績(jī)。

5.1引例3.程序代碼#defineN40#include<stdio.h>main(){inti=1,sum=0;/*初始化循環(huán)控制變量i和累加器sum*/intscore;/*定義存放成績(jī)的變量score*/floatavg;/*定義存放平均成績(jī)的變量avg*/while(i<=N){scanf("%d",&score);/*輸入第i位同學(xué)的成績(jī)*/sum+=score;/*實(shí)現(xiàn)累加*/i++;/*循環(huán)控制變量i增1*/}avg=(float)sum/N;/*計(jì)算平均值*/printf("avg=%.2f\n",avg);}5.2while語(yǔ)句while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般格式為

while(表達(dá)式)語(yǔ)句;當(dāng)表達(dá)式為非值時(shí),執(zhí)行while語(yǔ)句中內(nèi)嵌語(yǔ)句,其執(zhí)行過(guò)程如圖所示。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語(yǔ)句。main(){inti=1,sum=0;

while(i<=100)

{sum+=i;

i++;

}printf("sum=%d\n",sum);} 【例5.1】用while語(yǔ)句求1~100的累加和。運(yùn)行結(jié)果為:sum=5050

sum=0

while(i<=100)

sum+=i; i++;printf(“sum=%d\n”,sum);

N-S圖【例5.2】求n!,即求n的階乘,n由鍵盤(pán)輸入。#include"stdio.h"main(){ inti=1,n,s=1;printf("Inputn:");scanf("%d",&n);while(i<=n){ s*=i; i++;}printf("%d!=%d\n",n,s);}5.3dowhile語(yǔ)句do…while語(yǔ)句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般格式為:

do{循環(huán)體語(yǔ)句;}while(表達(dá)式); /*本行的分號(hào)不能缺省*/其特點(diǎn)是:先執(zhí)行循環(huán)體語(yǔ)句,然后再判斷表達(dá)式。【例5.3】用do…while語(yǔ)句實(shí)現(xiàn)引例。#include<stdio.h>main(){inti=1,sum=0;/*定義并初始化循環(huán)控制變量i及累計(jì)器sum*/intscore;/*定義存放成績(jī)的變量score*/floatavg;/*定義存放平均成績(jī)的變量avg*/do{scanf("%d",&score);/*輸入第i位同學(xué)的成績(jī)*/sum+=score;/*實(shí)現(xiàn)累加*/i++;}/*循環(huán)控制變量i增1*/while(i<=40);/*循環(huán)繼續(xù)條件:i<=40*/avg=(float)sum/40;/*計(jì)算平均值*/

printf("avg=%.2f\n",avg);}【例5.4】用do…while語(yǔ)句求解1~100的累加和。#include<stdio.h>main(){inti=1,sum=0;do{sum+=i;i++;}while(i<=100);printf("sum=%d\n",sum);}

i=1,sum=0;

sum+=i;i++;直到i>100時(shí)printf(“sum=%d\n”,sum);N-S圖【例5.5】

while和do…while循環(huán)的比較。(1)main(){ints=0,i;scanf("%d",&i);while(i<=10){s=s+i;i++;}printf("s=%d\n",s)}運(yùn)行結(jié)果為:輸入1↙s=55再運(yùn)行一次

11↙s=0

(2)

main(){ints=0,i;scanf("%d",&ido{s=s+i;i++;}while(i<=10);printf("s=%d\n",}

運(yùn)行結(jié)果為輸入1↙s=55

再運(yùn)行一次

11↙s=11可以看到:當(dāng)輸入i的值小于或等于10時(shí),二者得到結(jié)果相同。而當(dāng)i>10時(shí),二者結(jié)果就不同了。這是因?yàn)榇藭r(shí)對(duì)while循環(huán)來(lái)說(shuō),一次也不執(zhí)行循環(huán)體,而對(duì)do…while循環(huán)語(yǔ)句來(lái)說(shuō)則要執(zhí)行一次循環(huán)體。while循環(huán)是先判斷,而do…while循環(huán)是后判斷。5.4for語(yǔ)句在3種循環(huán)語(yǔ)句中,for語(yǔ)句最為靈活,不僅可用于循環(huán)次數(shù)已經(jīng)確定的情況,也可用于循環(huán)次數(shù)雖不確定、但給出了循環(huán)繼續(xù)條件的情況。for語(yǔ)句的一般格式:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;執(zhí)行過(guò)程:①求解表達(dá)式1。②判斷表達(dá)式2。如果其值非0,則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行③;否則,轉(zhuǎn)至⑤。③求解表達(dá)式3。④轉(zhuǎn)向②繼續(xù)執(zhí)行。⑤循環(huán)結(jié)束,執(zhí)行for語(yǔ)句的下一條語(yǔ)句。例如:for(i=1;i<=100;i++)

s=s+i;的執(zhí)行過(guò)程相當(dāng)于以下語(yǔ)句:

i=1;

while(i<=100)

{s=s+i;

i++;

}可以改寫(xiě)成while循環(huán)的形式:表達(dá)式1;

while(表達(dá)式2)

{語(yǔ)句;表達(dá)式3;}【例5.6】用for語(yǔ)句語(yǔ)句實(shí)現(xiàn)引例。#include"stdio.h"main(){inti,sum=0,score;floatavg;for(i=1;i<=40;i++){scanf("%d",&score);/*輸入第i位同學(xué)的成績(jī)*/sum+=score;/*實(shí)現(xiàn)累加*/}printf("Thesumis%d\n",sum); avg=(float)sum/40;/*計(jì)算平均值*/printf("avg=%.2f\n",avg);}【例5.7】求1~100的累加和。#include"stdio.h"main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;

printf("sum=%d\n",sum);} #include"stdio.h"main(){intn,i;floatt=1.0;printf("inputn:");scanf("%d",&n);for(i=1;i<=n;i++)t=t*i;printf("t=%10.0f\n",t);}【例5.8】求t=1*2*3*4*5……*n。#include"stdio.h"main(){inti,n;floats=1;printf("inputn:");scanf("%d",&n);for(i=2;i<=n;i++)s=s+1.0/i;printf("s=%f\n",s);}運(yùn)行結(jié)果為:inputn:4↙s=2.083333【例5.9】求s=1+1/2+1/3+……1/n。5.5循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)嵌套。3種循環(huán)(while、do…while、for)可以互相嵌套。例如:下面幾種形式都是合法的循環(huán)嵌套形式。(1)while(){…while(){…}}(2)while(){…do{…}while();…}(3)do{…do{…}While()}while();(4)for(;;){…while(){…} …}(5)for(;;){for(;;{…}}(6)do{…for(;;){…}}while();【例5.10】百錢(qián)買(mǎi)百雞問(wèn)題。我國(guó)古代數(shù)學(xué)家張丘建在《算徑》中出了這樣一道題:“雞翁一,值錢(qián)三;雞母一,值錢(qián)五;雞雛三,值錢(qián)一。百錢(qián)買(mǎi)百雞,問(wèn)雞翁、雞母、雞雛各幾何?”。voidmain(){intx,y,z;for(x=0;x<=33;x++)for(z=0;z<=99;z=z+3){y=100-x-z;if((y>=0)&&(x*3+y*5+z/3==100))printf("x=%d,y=%d,z=%d\n",x,y,z);}}【例5.11】編寫(xiě)程序,輸出下列圖形。#include"stdio.h"main(){inti,j,k;for(i=1;i<=5;i++){for(j=1;j<=6-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}}5.6break語(yǔ)句和continue語(yǔ)句5.6.1break語(yǔ)句break語(yǔ)句有兩種用途,一是在switch中終止一個(gè)case對(duì)應(yīng)的語(yǔ)句,二是在循環(huán)語(yǔ)句中越過(guò)常規(guī)循環(huán)條件的測(cè)試,立即強(qiáng)制終止循環(huán)。break語(yǔ)句一般格式為:break;功能:在循環(huán)中當(dāng)滿足特定條件時(shí),使用break語(yǔ)句強(qiáng)行結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)語(yǔ)句的下一條語(yǔ)句?!纠?.12】

break語(yǔ)句應(yīng)用。main(){intr;

floatpi=3.14159,s;

for(r=1;r<=10;r++)

{s=pi*r*r;

if(s>100)break;

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

}

}r=1,s=3.141590r=2,s=12.566360r=3,s=28.274311r=4,s=50.265442r=5,s=78.539749程序的作用是計(jì)算r=1到r=10時(shí)的圓的面積,直到面積大于100為止。從上面的循環(huán)可以看到:當(dāng)s>100時(shí),執(zhí)行break語(yǔ)句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。運(yùn)行結(jié)果為:2.continue語(yǔ)句一般格式為:

continue;功能:結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面未執(zhí)行的語(yǔ)句,繼續(xù)進(jìn)行下一次循環(huán)?!纠?.13】將100~200之間的不能被3整除的數(shù)輸出。#include"stdio.h"main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}}5.7程序設(shè)計(jì)舉例【例5.14】在屏幕上輸出下三角九九乘法表。#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d",i,j,i*j);printf("\n");}}#include"stdio.h"main(){inti,j,n=0;for(i=101;i<=200;i+=2) /*外循環(huán):為內(nèi)循環(huán)提供一個(gè)整數(shù)i*/{for(j=2;j<=i-1;j++) /*內(nèi)循環(huán):判斷整數(shù)i是否是素?cái)?shù)*/if(i%j==0) /*i不是素?cái)?shù)*/break; /*強(qiáng)行結(jié)束內(nèi)循環(huán),執(zhí)行下面的if語(yǔ)句*/if(j>=i) /*整數(shù)i是素?cái)?shù):輸出,計(jì)數(shù)器加1*/{printf("%4d",i);n++;}if(n%10==0)printf("\n");}}運(yùn)行結(jié)果為:101103107109113127131137139149151157163167173179181191193197199【例5.15】輸出100~200之間的全部素?cái)?shù)。所謂素?cái)?shù)i是指,除1和i之外,不能被2~(i-1)之間的任何整數(shù)整除。#include"stdio.h"main(){longintf1=1,f2=1; /*定義并初始化數(shù)列的前2個(gè)數(shù)*/inti; /*定義并初始化循環(huán)控制變量i*/for(i=1;i<=10;i++) /*1組2個(gè),10組20個(gè)數(shù)*/{printf("%15ld%15ld",f1,f2);/*輸出當(dāng)前的2個(gè)數(shù)*/if(i%2==0)printf("\n"); /*輸出2次(4個(gè)數(shù)),換行*/f1+=f2;f2+=f1; /*計(jì)算下2個(gè)數(shù)*/}}

【例5.16】求Fibonacci數(shù)列的前20個(gè)數(shù)。F1=1,F(xiàn)2=1,F(xiàn)n=Fn-1+Fn-2(n>=3),即從第3個(gè)數(shù)開(kāi)始,每個(gè)數(shù)等于前2個(gè)數(shù)之和1 8553772584 2 13 89 6104181 3211449876765運(yùn)行結(jié)果為:#include"math.h"main(){ints;

floatn,t,pi;

t=1;pi=0;n=1.0;s=1;

while(fabs(t)>=1e-6)

{pi=pi+t;

n=n+2;

s=-s;

t=s/n;

}

pi=pi*4;

printf("pi=%10.6f\n",pi);}運(yùn)行結(jié)果為:pi=□□3.141594【例5.17】用公式,求的近似值,直到最后一項(xiàng)絕對(duì)值小于10-6為止。#include"stdio.h"main(){charc;

while((c=getchar())!='\n')

{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

{c=c+4;

if(c>'Z'&&c<='Z'+4||c>'z')c=c-26;

}

printf("%c",c);

}}【例5.18】譯密碼。為了使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。例如將A→E,B→F,a→e即變成其后的第4個(gè)字母,W變成A,X變成B,Y變成C,Z變成D等,字母按上述規(guī)律轉(zhuǎn)換,非字母字符不變。如“china!”轉(zhuǎn)換為“glmre!”。上機(jī)實(shí)驗(yàn)1.掌握while、dowhile和for循環(huán)結(jié)構(gòu)的用法以及循環(huán)條件的構(gòu)造;2.能夠掌握循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。

一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)內(nèi)容1.驗(yàn)證性實(shí)驗(yàn)1)求1+2+3+4+5+…+100之和,驗(yàn)證程序運(yùn)行結(jié)果。#include<stdio.h>main(){inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;

i++;}printf("1+2+3+...+100=%d\n",sum);}修改上面的程序,實(shí)現(xiàn)1~100間所有偶數(shù)之和。2)運(yùn)行下列程序,說(shuō)明程序的功能。#include"stdio.h"main(){intn,j=0;for(n=1;n<=100;n++){if(n%7!=0)continue;printf("%3d",n);j++;if(j%5==0)printf("\n");}printf("\nj=%d\n",j);

}2.設(shè)計(jì)性實(shí)驗(yàn)1)從鍵盤(pán)輸入若干學(xué)生的成績(jī),輸出最高和最低成績(jī),當(dāng)輸入負(fù)數(shù)時(shí)結(jié)束,請(qǐng)將程序補(bǔ)充完整。voidmain(){floatx,amax,amin;scanf("%f",&x);amax=x;amin=x;while(_____){if(x>amax)amax=x;if(_____)amin=x;scanf("%f",&x);}printf("\namax=%f\namin=%f\n",amax,amin);}2)根據(jù)以下公式求p的值,結(jié)果由函數(shù)值返回。m與n為兩個(gè)正數(shù)且要求m>n。請(qǐng)將程序補(bǔ)充完整。#include<stdio.h>main(){inti,m,n;doublep=1.0;scanf("%d%d",&m,&n);for(i=1;i<=m;i++)p=__①__;/*求m!*/

for(i=1;i<=n;i++)p=__②__;/*求m!/n!*/for(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/printf("%f",p);}3)下面程序的功能是用“輾轉(zhuǎn)相除法”求兩個(gè)正數(shù)M和N的最大公約數(shù),將程序補(bǔ)充完整。#include<stdio.h>main(){intm,n,r,t;printf("pleaseinputm&n:");scanf("%d%d",&m,&n);

溫馨提示

  • 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)論