




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)當(dāng)某段程序要重復(fù)執(zhí)行時(shí),使用循環(huán)結(jié)構(gòu)——使程序精煉C語言提供4種循環(huán)控制語句:while語句do-while語句for語句if-goto語句(不提倡多用)5.1while語句——“當(dāng)型”循環(huán)結(jié)構(gòu)形式:While(條件表達(dá)式)語句表達(dá)式語句非00執(zhí)行過程:當(dāng)表達(dá)式的值為真(非零)時(shí),重復(fù)執(zhí)行語句,直到邏輯表達(dá)式的值為假,跳出循環(huán)。特點(diǎn):先判斷表達(dá)式,后執(zhí)行語句流程圖例5.1-1200i=1i∑例5.1-2求。加數(shù)的范圍:i=1~i=200,sum=0;求和過程:sum=sum+i;i++;
此時(shí),sum=1;i=2;sum=sum+i;i++;
此時(shí),sum=1+2;i=3;sum=sum+i;i++;
此時(shí),sum=1+2+3;i=4;……sum=sum+i;i++;
此時(shí),sum=1+2+…+199;i=200;sum=sum+i;i++;
此時(shí),sum=1+2+…+199+200;i=201;i=1;i<=200sum+=i;i++;YN輸出sum結(jié)束開始sum=0;#include<stdio.h>main(){inti,sum=0;
i=1;
while
(i<=200)
{
sum=sum+i;
i++;
}printf("sum=%d\n",sum);}例5.2讀程序分析:偶數(shù)和放在even中,even=2+4+6…+100;奇數(shù)和放在odd中,odd=1+3+5+…+99;計(jì)數(shù)器n初值=1.while(n<100){odd=odd+n;even=even+(n+1);n=n+2}例5.35.2do-while語句“直到型”循環(huán)一般形式:do語句while(表達(dá)式);語句表達(dá)式非00do-while語句流程執(zhí)行過程:先執(zhí)行循環(huán)體語句,再判斷while中的表達(dá)式,若為真,則繼續(xù)執(zhí)行循環(huán)體,否則,執(zhí)行while后面的語句。例5.6任意輸入一個(gè)整數(shù),將該數(shù)各位倒序輸出。程序一:用while語句實(shí)現(xiàn)
此程序輸入為0時(shí)沒有輸出main(){intnumber,digit;printf("pleaseinputdata:");scanf("%d",&number);
while(number!=0){digit=number%10;printf("%d",digit);number=number/10;}}200n=1n∑例5.7.求。#include<stdio.h>main(){
inti,sum=0;
i=1;
do
{
sum=sum+i;
i++;
}while
(i<=200);printf("sum=%d\n",sum);}說明:當(dāng)兩者具有相同的循環(huán)體時(shí)當(dāng)while
后面的表達(dá)式第1次的值為“真”
時(shí),兩種循環(huán)得到的結(jié)果相同。否則,二者結(jié)果不相同。main(){intsum=0,i;scanf("%d",&i);
do{sum=sum+i;i++;
}while(i<=10);
printf("sum=%d",sum);}main(){intsum=0,i;scanf("%d",&i);
while(i<=10)
{sum=sum+i;i++;
}printf("sum=%d",sum);}當(dāng)i=1時(shí):sum=55當(dāng)i=11時(shí):sum=0當(dāng)i=1時(shí):sum=55當(dāng)i=11時(shí):sum=11在do_while循環(huán)語句中需要注意,即與while循環(huán)的不同點(diǎn):1.與while循環(huán)語句的區(qū)別,至少執(zhí)行一次循環(huán)體2.do_while循環(huán)語句中的while()后面有分號(hào);百雞問題現(xiàn)在用百錢買百雞,問這100只雞中,公雞、母雞和小雞各有多少只?5錢3錢1錢公雞每只5文錢,母雞每只3文錢,3只小雞1文錢。?cock取值范圍是1-20hen取值范圍是1-33chick取值范圍是3-99設(shè)公雞、母雞、小雞的數(shù)量分別為cock,hen,chick;cock,hen,chick為整數(shù)且chick是3的倍數(shù).可用窮舉法遍歷所有cock,hen,chick的可能組合來求解循環(huán)語句?問題歸結(jié)為求不定方程組的整數(shù)解:一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句計(jì)算表達(dá)式1計(jì)算表達(dá)式2語句計(jì)算表達(dá)式3非00
for(i=0;i<n;i++){……}for語句循環(huán)控制變量賦初值條件表達(dá)式改變循環(huán)條件例200n=1n∑例1.求,用for語句實(shí)現(xiàn)。#include<stdio.h>main(){inti,sum=0;
i=1;
while
(i<=200)
{
sum=sum+i;
i++;
}printf("sum=%d\n",sum);}
for
(i=1;i<=200;i++)
sum=sum+i;
例2:用for語句實(shí)現(xiàn)求n!。#include<stdio.h>main(){inti,fact=1,n;printf("Pleaseinputn:");
scanf("%d",&n);
for(
i=1;i<=n;i++
)
fact*=i;
printf(“%d!=%d\n",n,fact);}思考:如何求s=1!+2!+…+n!?例3例5.判斷m是否為素?cái)?shù)。#include<stdio.h>main(){intm,i,flag;printf("\nInputintegerm:");scanf("%d",&m);flag=1;
for(i=2;i<m;i++)
{
if(m%i==0) {flag=0;i=m;}
}
if(flag==1)
printf("%disprime\n",m);
else
printf("%disnotprime\n",m);}分析:
for語句、while語句和do-while語句的區(qū)別for語句的循環(huán)次數(shù)由其中的3個(gè)表達(dá)式?jīng)Q定,適合實(shí)現(xiàn)明確循環(huán)次數(shù)的循環(huán)結(jié)構(gòu)。while和do-while語句適用于已知結(jié)束條件的循環(huán),在循環(huán)體中應(yīng)存在讓判斷條件改變的語句。while語句之前必須預(yù)先設(shè)置判斷的初始條件。
while和for語句是先判斷后執(zhí)行,所以循環(huán)體最少執(zhí)行次數(shù)為零;而do-while語句是先執(zhí)行后判斷,循環(huán)體最少執(zhí)行1次。while語句多用于循環(huán)次數(shù)不定的情況do-while語句多用于至少要運(yùn)行一次的情況for語句多用于要賦初值或循環(huán)次數(shù)固定的情況2.嵌套的循環(huán)控制變量不能相同3.內(nèi)循環(huán)變化快,外循環(huán)變化慢;外循環(huán)每執(zhí)行一次循環(huán)體,內(nèi)循環(huán)要完整執(zhí)行一遍。4.正確確定循環(huán)體main(){inti,j;
for(i=1;i<=9;i++){for(j=1;j<=i;j++) printf(“%d*%d=%d",j,i,i*j);printf("\n\n");}}注意:1.三種循環(huán)可互相嵌套,層數(shù)不限,每層可有多個(gè)循環(huán)嵌套但不能相互交叉。例1.輸出九九乘法表,輸出格式如下:
1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81#include<stdio.h>main(){ inti,j;
for(i=1;i<=9;i++) {for(j=1;j<=i;j++) printf("%d*%d=%d\t",j,i,i*j);printf("\n");
}}例2:for(a=1;a<=10;a++){for(b=0;b<=5;b++)
……}循環(huán)正常結(jié)束時(shí),內(nèi)循環(huán)執(zhí)行了?次外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次循環(huán)正常結(jié)束時(shí),內(nèi)循環(huán)執(zhí)行了10×6=60次cock的取值范圍是1-20;hen的取值范圍是1-33;chick的取值范圍是3-99設(shè)公雞、母雞、小雞的數(shù)量分別為cock,hen,chick;cock,hen,chick為整數(shù)且chick是3的倍數(shù).例3.使用for語句解決百雞問題cock循環(huán),計(jì)算公雞數(shù);hen循環(huán),計(jì)算母雞數(shù);chick循環(huán),計(jì)算小雞數(shù)量。if((cock*5+hen*3+chick/3==100)&&(cock+hen+chick==100))
#include"stdio.h"main(){intcock,hen,chick;
for(cock=1;cock<=20;cock++)
for(hen=1;hen<=33;hen++)
for(chick=3;chick<=99;chick+=3)
if((cock*5+hen*3+chick/3==100)&&(cock+hen+chick==100))
{printf("公雞有%2d只;母雞有%2d只;小雞有%2d只.",cock,hen,chick); printf("\n");}
}問題可以不用三重循環(huán),用二重循環(huán)就能解決問題,因?yàn)楣u和母雞的數(shù)量確定后,小雞的數(shù)量也能確定,即chick=100-hen-cock;試著改寫程序?注意正確確定循環(huán)體循環(huán)控制變量常與求解的問題掛鉤5.6.1break語句只能出現(xiàn)在兩種場合:(1)用于switch語句中,跳出switch語句;(2)用于循環(huán)語句,提前結(jié)束整個(gè)循環(huán)的執(zhí)行在循環(huán)語句、switch語句嵌套使用的情況下,break語句只能跳出(或終止)它所在的結(jié)構(gòu),而不能同時(shí)跳出多層結(jié)構(gòu)。5.6break語句和continue語句---強(qiáng)制結(jié)束循環(huán)main(){intx=1,y=0,a=0,b=0,i=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}for(i=0;i<=10;i++){a++;
if(i>5)break;}a=2,b=1a=8,b=1例12181例2.判斷m是否為素?cái)?shù)。#include<stdio.h>main(){intm,i,flag;printf("\nInputintegerm:");scanf("%d",&m);flag=1;
for(i=2;i<m;i++)
{
if(m%i==0) {flag=0;i=m;}
}
if(flag==1)
printf("%disprime\n",m);
else
printf("%disnotprime\n",m);}若求100-200之間的所有素?cái)?shù)?break;5.6.2continue語句1、只能用于循環(huán)語句的循環(huán)體中2、作用是使執(zhí)行流程跳過循環(huán)體中continue后面的語句,即提前結(jié)束本次循環(huán)體語句序列。3、在while和do-while語句中,執(zhí)行continue語句就立即去測試是否繼續(xù)循環(huán)的條件。4、在for語句中,執(zhí)行continue語句立即計(jì)算表達(dá)式3,然后計(jì)算表達(dá)式2測試?yán)^續(xù)循環(huán)的條件。5、一般地,continue語句都會(huì)位于一個(gè)if語句中,即僅對(duì)滿足某一條件的該次循環(huán)起作用。---結(jié)束本次循環(huán)例1.輸出100-200之間不能被3整除的數(shù)。better例2:求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值#include<stdio.h>main(){inti,num=0,a;floatsum=0;for(i=0;i<10;i++){scanf("%d",&a); if(a<=0)continue; num++; sum+=a;}printf(“%d個(gè)正數(shù)之和為:%f\n",num,sum);printf(“平均值為:%f\n",sum/num);}5.7循環(huán)結(jié)構(gòu)程序舉例1.累加、累乘算法例1.用公式求π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。t=1;while(fabs(t)>=1e-6){pi+=t;}n=n+2;s=-s;t=s/n;n=1;s=1;#include<math.h>pi=0;4—π
3—1
5—1
7—1
≈1-+-+…pitt=1;while(fabs(t)>=1e-6){pi+=t;}n=n+2;s=-s;t=s/n;n=1;s=1;#include<math.h>pi=0;main(){floatt,pi,n;ints;
pi=pi*4;printf(“pi=%10.6f\n”,pi);}當(dāng)n為整型?用一個(gè)變量充當(dāng)符號(hào)位【算法思想】:利用自身的推導(dǎo)關(guān)系求解問題的方法。利用已知數(shù)據(jù)推算出后面未知數(shù)據(jù)。例2:Fibonacci(斐波納契)數(shù)列定義如下
Fib1=1;(n=1)Fib2=1;(n=2)Fibn=Fibn-1+Fibn-2(n>=3)
即:數(shù)列為:1,1,2,3,5,8,13,…..這是一種遞推算法應(yīng)采用循環(huán)實(shí)現(xiàn)2.遞推算法f1=1;f2=1;f=f1+f2;f1=f2;f2=f;for(i=3;i<=30;i++){}printf(“%10ld”,f);printf(“%10d%10d”,f1,f2);main(){longf;intf1,f2,i;
}迭代:不斷用新值取代變量舊值,或由舊值遞推出新值的過程。例3.求100-200之間的所有素?cái)?shù)?并設(shè)定每行10個(gè)輸出。外層加一個(gè)嵌套的for循環(huán),用n作為素?cái)?shù)個(gè)數(shù)的計(jì)數(shù),控制每行輸出10個(gè)數(shù)。1.以下程序的輸出結(jié)果是()。
main()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);
}
A)10
1
9
2
B)9
8
7
6
C)10
9
9
0
D)10
10
9
1
D
D練習(xí)題:2.以下程序的輸出結(jié)果是()。
main()
{intn=4;
while(n--)printf("%d",--n);
}
A)2
0
B)3
1
C)3
2
1
D)2
1
0
AA
小結(jié)程序設(shè)計(jì)的基本方法結(jié)構(gòu)化程序設(shè)計(jì)方法:自頂向下,逐步求精的方法。2.順序結(jié)構(gòu)按語句順序執(zhí)行,有表達(dá)式語句、函數(shù)調(diào)用語句等。3.
選擇結(jié)構(gòu)根據(jù)表達(dá)式值選擇一組語句執(zhí)行。有if語句和switch語
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)務(wù)工作報(bào)告
- 吉林地區(qū)單招試題及答案
- 商鋪?zhàn)夥繀f(xié)議書合同模版
- 消防類安全試題及答案
- 信息管理考試中的實(shí)踐問題試題及答案
- 如何評(píng)估系統(tǒng)集成項(xiàng)目的可行性試題及答案
- 2025年軟件評(píng)測師考試內(nèi)容深度解析試題及答案
- 急診副高培訓(xùn)試題及答案
- 深度解析軟件評(píng)測師核心題型試題及答案
- 株洲高一期末試題及答案
- JJG 746-2024超聲探傷儀
- 2024年湖南省中考數(shù)學(xué)試卷附答案
- 甘肅省酒泉市(2024年)小學(xué)語文部編版小升初真題(瘋狂進(jìn)步)完整試卷(含答案)
- SYT 7365-2017 油氣輸送管道并行敷設(shè)技術(shù)規(guī)范
- 高校奶茶市場調(diào)研報(bào)告
- 2023年湖南省生物初中會(huì)考試卷
- 物業(yè)外包服務(wù)質(zhì)量評(píng)價(jià)體系構(gòu)建
- 貴州省小升初數(shù)學(xué)試卷及答案
- 《畫里陰晴》課件
- 2024年河北省職業(yè)院校學(xué)生技能大賽數(shù)字技術(shù)應(yīng)用賽項(xiàng)規(guī)程
- 橫道圖自動(dòng)生成
評(píng)論
0/150
提交評(píng)論