




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1為什么需要循環(huán)控制5.2用while語(yǔ)句實(shí)現(xiàn)循環(huán)5.3用do---while語(yǔ)句實(shí)現(xiàn)循環(huán)5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)5.5循環(huán)的嵌套5.6幾種循環(huán)的比較5.7改變循環(huán)執(zhí)行的狀態(tài)5.8循環(huán)程序舉例第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1為什么需要循環(huán)控制5.2用while語(yǔ)句實(shí)現(xiàn)循環(huán)5.3用do---while語(yǔ)句實(shí)現(xiàn)循環(huán)5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)5.5循環(huán)的嵌套5.6幾種循環(huán)的比較5.7改變循環(huán)執(zhí)行的狀態(tài)5.8循環(huán)程序舉例5.1為什么需要循環(huán)控制在日常生活中或是在程序所處理的問(wèn)題中常常遇到需要重復(fù)處理的問(wèn)題要向計(jì)算機(jī)輸入全班50個(gè)學(xué)生的成績(jī)分別統(tǒng)計(jì)全班50個(gè)學(xué)生的平均成績(jī)求30個(gè)整數(shù)之和教師檢查30個(gè)學(xué)生的成績(jī)是否及格5.1為什么需要循環(huán)控制例如:全班有50個(gè)學(xué)生,統(tǒng)計(jì)各學(xué)生三門(mén)課的平均成績(jī)。scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver);輸入學(xué)生1的三門(mén)課成績(jī),并計(jì)算平均值后輸出scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver);輸入學(xué)生2的三門(mén)課成績(jī),并計(jì)算平均值后輸出要對(duì)50個(gè)學(xué)生進(jìn)行相同操作重復(fù)50次大多數(shù)的應(yīng)用程序都會(huì)包含循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu),它們是各種復(fù)雜程序的基本構(gòu)造單元5.2用while語(yǔ)句實(shí)現(xiàn)循環(huán)全班有50個(gè)學(xué)生,統(tǒng)計(jì)各學(xué)生三門(mén)課的平均成績(jī)。i=1i≤0輸入一個(gè)學(xué)生成績(jī)求一個(gè)學(xué)生平均成績(jī)輸出一個(gè)學(xué)生平均成績(jī)i增1YN用while循環(huán)結(jié)構(gòu)實(shí)現(xiàn)while(i<=50){scanf……;aver=……;printf……;i++;}while語(yǔ)句的一般形式如下:while(表達(dá)式)語(yǔ)句循環(huán)體while語(yǔ)句的一般形式如下:while(表達(dá)式)語(yǔ)句“真”時(shí)執(zhí)行循環(huán)體語(yǔ)句“假”時(shí)不執(zhí)行循環(huán)條件表達(dá)式while循環(huán)的特點(diǎn)是:先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句例5.1求1+2+3+…+100,即解題思路:這是累加問(wèn)題,需要先后將100個(gè)數(shù)相加要重復(fù)100次加法運(yùn)算,可用循環(huán)實(shí)現(xiàn)后一個(gè)數(shù)是前一個(gè)數(shù)加1而得加完上一個(gè)數(shù)i后,使i加1可得到下一個(gè)數(shù)#include<stdio.h>intmain(){inti=1,sum=0;
while(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);return0;}復(fù)合語(yǔ)句不能少#include<stdio.h>intmain(){inti=1,sum=0;
while(i<=100){sum=sum+i;i++;}printf("sum=%d\n",sum);return0;}不能丟,否則循環(huán)永不結(jié)束#include"stdio.h"main(){floatx;
scanf("%f",&x);while(x!=0){if(x>0)printf("+");elseprintf("-");
scanf("%f",&x);}注意1、while(表達(dá)式)后面沒(méi)有分號(hào)。2、表達(dá)式在判斷前,必須要有明確的值。
例如:輸入一系列整數(shù),判斷其正負(fù)號(hào),當(dāng)輸入0時(shí),結(jié)束循環(huán)。5.3用do---while語(yǔ)句實(shí)現(xiàn)循環(huán)do---while語(yǔ)句的特點(diǎn):先無(wú)條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立do---while語(yǔ)句的一般形式為:do
語(yǔ)句while(表達(dá)式);表達(dá)式Y(jié)N循環(huán)體語(yǔ)句5.3用do---while語(yǔ)句實(shí)現(xiàn)循環(huán)
例5.2用do…while語(yǔ)句求:1+2+3+…+100,即5.3用do---while語(yǔ)句實(shí)現(xiàn)循環(huán)解題思路:i≤100YNsum=sum+ii=i+1sum=0i=1i=1;sum=0;
do{sum=sum+i;i++;}while(i<=100);
#include<stdio.h>intmain(){inti=1,sum=0;
do{sum=sum+i;i++;}while(i<=100);printf("sum=%d\n",sum);return0;}例5.3while和do---while循環(huán)的比較。inti,sum=0;printf(“i=?”);scanf(“%d”,&i);while(i<=10){sum=sum+i;i++;}printf(“sum=%d\n",sum);inti,sum=0;printf(“i=?”);scanf(“%d”,&i);do{sum=sum+i;i++;}while(i<=10);printf(“sum=%d\n",sum);當(dāng)while后面的表達(dá)式的第一次的值為“真”時(shí),兩種循環(huán)得到的結(jié)果相同;否則不相同#include"stdio.h"main(){charch;intnum=0;ch=getchar();do{num++;ch=getchar();}while(ch!='\n');printf("num=%d\n",num);例如:用do-while語(yǔ)句編寫(xiě)程序統(tǒng)計(jì)從鍵盤(pán)輸入的一行非空字符的個(gè)數(shù)(以回車(chē)鍵作為輸入結(jié)束標(biāo)記)。
注意:在if、while語(yǔ)句中,表達(dá)式后面都沒(méi)有分號(hào),而在do-while語(yǔ)句的表達(dá)式后面則必須加分號(hào)。5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for語(yǔ)句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況for語(yǔ)句完全可以代替while語(yǔ)句printf("%d",i);i++i<=100i=15.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for(i=1;i<=100;i++){printf("%d",i);}i≤100YNi=i+1i=1輸出i5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for語(yǔ)句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語(yǔ)句設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值執(zhí)行5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for語(yǔ)句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語(yǔ)句循環(huán)條件表達(dá)式,用來(lái)判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for語(yǔ)句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語(yǔ)句作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for語(yǔ)句的執(zhí)行過(guò)程:(1)先求解表達(dá)式1(2)求解表達(dá)式2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步(3)求解表達(dá)式3(4)轉(zhuǎn)回上面步驟(2)繼續(xù)執(zhí)行(5)循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for(i=1;i<=100;i++)sum=sum+i;等價(jià)于i=1;while(i<=100){sum=sum+i;i++; }用for語(yǔ)句更簡(jiǎn)單、方便5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語(yǔ)句一個(gè)或兩個(gè)或三個(gè)表達(dá)式均可以省略5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for(sum=0;i<=100;i++)sum=sum+i;與循環(huán)變量無(wú)關(guān)合法5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for(sum=0,i=1;i<=100;i++)sum=sum+i;逗號(hào)表達(dá)式合法for(i=0,j=100;i<=j;i++,j--)k=i+j;
5.4用for語(yǔ)句實(shí)現(xiàn)循環(huán)for(i=0;(c=getchar())!=′\n′;i+=c);合法for(;(c=getchar())!=’\n’;)printf(″%c″,c);例:求累乘積。如:1×2×3×...×100
(累乘器問(wèn)題)基本方法(1)給累乘器賦初值,一般為1;(2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累乘;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體設(shè)計(jì)。累乘器當(dāng)前值=累乘器原值*循環(huán)變量當(dāng)前值;
main(){doubles=1;intk;for(k=1;k<=100;k++)s=s*k;printf("s=%lf",s);}整數(shù)連乘結(jié)果一定是整數(shù),而本例中結(jié)果數(shù)值相當(dāng)大,用long型都無(wú)法存放,因此將存放累乘結(jié)果的變量s定義為double型。5.5循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)的嵌套內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)3種循環(huán)(while循環(huán)、do…while循環(huán)和for循環(huán))可以互相嵌套外循環(huán)初始條件內(nèi)循環(huán)初始條件內(nèi)循環(huán)體外循環(huán)條件內(nèi)循環(huán)條件內(nèi)循環(huán)循環(huán)條件外循環(huán)循環(huán)條件循環(huán)結(jié)束二重循環(huán)嵌套結(jié)構(gòu)執(zhí)行流程TFTF例如:分析程序運(yùn)行結(jié)果main(){inti,j,x=0;for(i=0;i<2;i++){for(j=0;j<=3;j++)x++;}printf(“x=%d\n”,x);}main(){
ints=0,t,i,j;
for(i=1;i<=3;i++){t=1;
for(j=1;j<=2*i-1;j++)t=t*j;s=s+t;}printf(“%d”,s);}求和s=1!+3!+5!
5.6幾種循環(huán)的比較(1)一般情況下,3種循環(huán)可以互相代替(2)在while和do---while循環(huán)中,循環(huán)體應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句。(3)用while和do---while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do---while語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。5.7改變循環(huán)執(zhí)行的狀態(tài)5.7.1用break語(yǔ)句提前終止循環(huán)5.7.2用continue語(yǔ)句提前結(jié)束本次循環(huán)5.7.3break語(yǔ)句和continue語(yǔ)句的區(qū)別5.7.1用break語(yǔ)句提前終止循環(huán)break語(yǔ)句可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句5.7.1用break語(yǔ)句提前終止循環(huán)
例5.4在全系1000學(xué)生中,征集慈善募捐,當(dāng)總數(shù)達(dá)到10萬(wàn)元時(shí)就結(jié)束,統(tǒng)計(jì)此時(shí)捐款的人數(shù),以及平均每人捐款的數(shù)目。5.7.1用break語(yǔ)句提前終止循環(huán)編程思路:循環(huán)次數(shù)不確定,但最多循環(huán)1000次在循環(huán)體中累計(jì)捐款總數(shù)用if語(yǔ)句檢查是否達(dá)到10萬(wàn)元如果達(dá)到就不再繼續(xù)執(zhí)行循環(huán),終止累加計(jì)算人均捐款數(shù)5.7.1用break語(yǔ)句提前終止循環(huán)編程思路:變量amount,用來(lái)存放捐款數(shù)變量total,用來(lái)存放累加后的總捐款數(shù)變量aver,用來(lái)存放人均捐款數(shù)定義符號(hào)常量SUM代表100000#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}指定符號(hào)常量SUM代表100000#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}應(yīng)該執(zhí)行1000次#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}達(dá)到10萬(wàn),提前結(jié)束循環(huán)#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}實(shí)際捐款人數(shù)#include<stdio.h>#defineSUM100000intmain(){floatamount,aver,total;inti;for(i=1,total=0;i<=1000;i++){printf("pleaseenteramount:");scanf("%f",&amount);total=total+amount;if(total>=SUM)break;}aver=total/i;printf(“num=%d\naver=%10.2f\n“,i,aver);return0;}只能用于循環(huán)語(yǔ)句和switch語(yǔ)句之中,而不能單獨(dú)使用5.7.2用continue語(yǔ)句提前結(jié)束本次循環(huán)有時(shí)并不希望終止整個(gè)循環(huán)的操作,而只希望提前結(jié)束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時(shí)可以用continue語(yǔ)句5.7.2用continue語(yǔ)句提前結(jié)束本次循環(huán)
例5.5要求輸出100~200之間的不能被3整除的數(shù)。編程思路:對(duì)100到200之間的每一個(gè)整數(shù)進(jìn)行檢查如果不能被3整除,輸出,否則不輸出無(wú)論是否輸出此數(shù),都要接著檢查下一個(gè)數(shù)(直到200為止)。Nn=100n≤200Yn能被3整除Nn=n+1輸出nYfor(n=100;n<=200;n++){if(n%3==0)
continue;printf("%d",n);}5.7.3break語(yǔ)句和continue語(yǔ)句的區(qū)別continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行break語(yǔ)句結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立N表達(dá)式1Y表達(dá)式2N……Y…………N表達(dá)式1Y表達(dá)式2NY…………break語(yǔ)句continue語(yǔ)句強(qiáng)行退出循環(huán)只結(jié)束本次循環(huán)5.8循環(huán)程序舉例
例5.7用
公式求
的近似值,直到發(fā)現(xiàn)某一項(xiàng)的絕對(duì)值小于10-6
為止(該項(xiàng)不累計(jì)加)。5.8循環(huán)程序舉例解題思路:求近似值的方法很多,本題是一種其他方法:5.8循環(huán)程序舉例每項(xiàng)的分子都是1后一項(xiàng)的分母是前一項(xiàng)的分母加2第1項(xiàng)的符號(hào)為正,從第2項(xiàng)起,每一項(xiàng)的符號(hào)與前一項(xiàng)的符號(hào)相反5.8循環(huán)程序舉例sign=1,pi=0,n=1,term=1當(dāng)term≥10-6pi=pi+termn=n+1sing=-signterm=sign/npi=pi*4輸出pi#include<stdio.h>#include<math.h>intmain(){intsign=1;doublepi=0,n=1,term=1;while(fabs(term)>=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf("pi=%10.8f\n",pi);return0;}求絕對(duì)值的函數(shù)
例5.8求費(fèi)波那西(Fibonacci)數(shù)列的前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2兩個(gè)數(shù)為1、1。從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和。即:#include<stdio.h>intmain(){intf1=1,f2=1;inti;for(i=1;i<=20;i++){printf("%12d%12d",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}return0;}
例5.9輸入一個(gè)大于3的整數(shù)n,判定它是否素?cái)?shù)(prime,又稱(chēng)質(zhì)數(shù))。解題思路:讓n被i整除(i的值從2變到n-1)如果n能被2~(n-1)之中任何一個(gè)整數(shù)整除,則表示n肯定不是素?cái)?shù),不必再繼續(xù)被后面的整數(shù)除,因此,可以提前結(jié)束循環(huán)注意:此時(shí)i的值必然小于nNNYn=i+1輸入ni=2i≤n-1Yn被i整除i<n輸出不是素?cái)?shù)Y輸出是素?cái)?shù)N#include<stdio.h>intmain(){intn,i;printf(“n=?");scanf("%d",&n);for(i=2;i<=n-1;i++)if(n%i==0)break;if(i<n)printf("%disnot\n",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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽(yáng)航空航天大學(xué)《大學(xué)體育乒乓球》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025《版權(quán)許可合同》模板
- 證券從業(yè)資格考試《金融市場(chǎng)基礎(chǔ)知識(shí)》知識(shí)點(diǎn)
- 武昌理工學(xué)院《食品工程理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 福州大學(xué)至誠(chéng)學(xué)院《計(jì)算機(jī)視覺(jué)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 溫州肯恩大學(xué)《馬克思主義經(jīng)典著作》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025超市租賃經(jīng)營(yíng)合同
- 2025屆福州市重點(diǎn)中學(xué)初三年級(jí)模擬考試化學(xué)試題試卷含解析
- 天門(mén)職業(yè)學(xué)院《中國(guó)現(xiàn)當(dāng)代文學(xué)專(zhuān)題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 安徽省池州市2025屆高三下學(xué)期3月二模試題 數(shù)學(xué) 含解析
- 2025溫州二模253溫州二模英語(yǔ)試卷
- 2024-2025學(xué)年二年級(jí)語(yǔ)文下冊(cè)統(tǒng)編版第三單元基礎(chǔ)達(dá)標(biāo)卷(單元測(cè)試)(含答案)
- (二模)烏魯木齊地區(qū)2025年高三年級(jí)第二次質(zhì)量檢測(cè)語(yǔ)文試卷(含官方答案)
- DB37T 4834-2025高速公路集中養(yǎng)護(hù)工作指南
- 2025年土木工程業(yè)務(wù)能力試題及答案
- 城區(qū)建筑垃圾處理資源再利用設(shè)備采購(gòu) 投標(biāo)方案(技術(shù)方案)
- 2025年開(kāi)封大學(xué)單招職業(yè)傾向性測(cè)試題庫(kù)含答案
- 全國(guó)川教版信息技術(shù)八年級(jí)下冊(cè)第二單元第2節(jié)《制作文創(chuàng)作品》教學(xué)設(shè)計(jì)設(shè)計(jì)
- DG-TG08-12-2024 普通中小學(xué)建設(shè)標(biāo)準(zhǔn)
- 實(shí)時(shí)數(shù)字孿生數(shù)據(jù)同步技術(shù)-深度研究
- Unit 4 History and traditions Project 說(shuō)課稿 -2024-2025學(xué)年高中英語(yǔ)人教版(2019)必修第二冊(cè)
評(píng)論
0/150
提交評(píng)論