![第5章 循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁](http://file4.renrendoc.com/view/15b7bbc44e7e77cff48b1e8cc7227480/15b7bbc44e7e77cff48b1e8cc72274801.gif)
![第5章 循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁](http://file4.renrendoc.com/view/15b7bbc44e7e77cff48b1e8cc7227480/15b7bbc44e7e77cff48b1e8cc72274802.gif)
![第5章 循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁](http://file4.renrendoc.com/view/15b7bbc44e7e77cff48b1e8cc7227480/15b7bbc44e7e77cff48b1e8cc72274803.gif)
![第5章 循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁](http://file4.renrendoc.com/view/15b7bbc44e7e77cff48b1e8cc7227480/15b7bbc44e7e77cff48b1e8cc72274804.gif)
![第5章 循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁](http://file4.renrendoc.com/view/15b7bbc44e7e77cff48b1e8cc7227480/15b7bbc44e7e77cff48b1e8cc72274805.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第五章循環(huán)結(jié)構(gòu)程序設(shè)計第一節(jié)為什么使用循環(huán)如何解決求?==1001nnsum算法1:直接寫出算式sum=1+2+3+4+5+…+100算法2:考慮到1+2+3+…+100可以改寫為:(((1+2)+3)+…+100),則有
S1:p1=0+1S2:p2=p1+2S3:p3=p2+3…S99:p99=p98+99S100:p100=p99+100,結(jié)果在p100里。算法3:考慮用變量i存放加數(shù),變量p存放上一步的和。那么每一步都可以寫成:p+i,然后讓p+i的和存入p,即每步都是p=p+i。
S0:p=0,i=1S1:p=p+i,i=i+1S2:p=p+i,i=i+1S3:p=p+i,i=i+1…S100:p=p+i,i=i+1如何解決求?==1001nnsum算法4:在上面的算法基礎(chǔ)上采用循環(huán)功能實(shí)現(xiàn)。
S0:p=0,i=1(循環(huán)初值)
S1:p=p+i,i=i+1(循環(huán)體)
S2:如果i小于或等于100,重復(fù)執(zhí)行步驟S1及S2;否則,算法結(jié)束(循環(huán)控制)。p中的值就是1+2+…+100的值。如何解決求?==1001nnsum?==1001nnsum求解問題的N-S圖打印p的值當(dāng)i≤100p=p+ii=i+1
p=0,i=1用Excel進(jìn)行過程分析!
while語句
1.形式:
while(表達(dá)式)語句
2.作用:
實(shí)現(xiàn)“當(dāng)型”循環(huán),當(dāng)條件滿足時,執(zhí)行語句3.特點(diǎn):
先判斷表達(dá)式,后執(zhí)行語句
條件表達(dá)式循環(huán)體語句真假第二節(jié)while語句與dowhile語句題目分析:sum=1+2+3+……+100變量設(shè)定:
sum
存放計算的中間結(jié)果和最后結(jié)果,
i
存放被加數(shù);算法分析:
1.開始:sum=0,i=12.如果滿足條件i<=100,則執(zhí)行3,否則轉(zhuǎn)5;3.反復(fù)累加,迭代式子:sum=sum+i; 被加數(shù)i的變化規(guī)律:
i=i+1;
4.轉(zhuǎn)2繼續(xù);5.結(jié)束循環(huán),輸出結(jié)果。例5.1用while語句求#include<stdio.h>main(){inti,sum;
sum=0;i=1;
while(i<=100)
{sum=sum+i; i=i+1; }printf(“sum=%d",sum);}循環(huán)初值循環(huán)條件循環(huán)體{累加迭代式子}例5.1用while語句求舉一反三:1、sum=1+2+3+……+n,其中n由用戶指定。2、sum=1+2+3+……+98+993、sum=2+3+4+……+99+1004、sum=2+4+6+8+……+98+100訓(xùn)練:在上例基礎(chǔ)上思考:如何求提示:凡是此類的求疊加和,而且每個加數(shù)有規(guī)律的都可用循環(huán)語句完成!訓(xùn)練:同類型的題目:拓展:求1~20之間的奇數(shù)之和及偶數(shù)之積。
2.作用:實(shí)現(xiàn)“直到型”循環(huán)3.特點(diǎn):先執(zhí)行語句,后判斷條件,直到條件不滿足為止。
do—while語句1.形式: do
語句
while(表達(dá)式); 說明:1、2、do-while語句有兩個保留字,do和while必須成對出現(xiàn)
do語句在執(zhí)行循環(huán)體后才檢查表達(dá)式,所以循環(huán)體至少執(zhí)行一次。循環(huán)體語句條件表達(dá)式循環(huán)體語句條件表達(dá)式do_while語句的圖形表達(dá)真假main(){inti,sum=0;i=1;
do {sum=sum+i; i++; }while(i<=100);
printf(“sum=%d”,sum); }例5.2用do_while語句實(shí)現(xiàn)1+2+3+···+100循環(huán)初值循環(huán)條件循環(huán)體{累加迭代式子}兩種循環(huán)語句形式的比較用while語句實(shí)現(xiàn)main(){inti,sum=0;i=1;
while(i<=100) {sum=sum+i;i++; }printf("sum=%d",sum);}運(yùn)行結(jié)果:sum=5050用do-while語句實(shí)現(xiàn)main(){inti,sum=0;i=1;do{sum=sum+i;i++; }while(i<=100);printf("sum=%d",sum);}運(yùn)行結(jié)果:sum=5050該題目既可以用while語句實(shí)現(xiàn),也可以用do…while語句實(shí)現(xiàn),而且結(jié)果相同!二者在什么時候有區(qū)別呢?當(dāng)while條件一開始就為假時,二者結(jié)果有區(qū)別?。≌埳蠙C(jī)體會dowhile循環(huán)和while循環(huán)的區(qū)別1、dowhile循環(huán),總是先執(zhí)行一次循環(huán)體,然后再判斷表達(dá)式的值。因此,無論表達(dá)式是否為“真”,循環(huán)體至少執(zhí)行一次。2、while循環(huán)先判斷循環(huán)條件再執(zhí)行循環(huán)體,循環(huán)體可能一次也不執(zhí)行。3、在if語句、while語句中,表達(dá)式后面都不能加分號,而在dowhile語句的條件表達(dá)式后面則必須加分號。main(){inti,sum=0;for(i=1;i<=100;i++) sum=sum+i;printf(“sum=%d”,sum);}循環(huán)初值循環(huán)條件循環(huán)體{累加迭代式子}例5.3用for語句實(shí)現(xiàn)1+2+3+···+100第三節(jié)for語句實(shí)現(xiàn)循環(huán)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體;表達(dá)式1;while(表達(dá)式2){循環(huán)體;表達(dá)式3;}等價形式for語句一般形式for語句執(zhí)行過程:1)計算表達(dá)式1;2)計算表達(dá)式2,若其值為非0(循環(huán)條件成立),則轉(zhuǎn)3)執(zhí)行循環(huán)體;若其值為0(循環(huán)條件不成立),則轉(zhuǎn)5)結(jié)束循環(huán);3)執(zhí)行循環(huán)體;4)計算表達(dá)式3,然后轉(zhuǎn)2);5)結(jié)束循環(huán),執(zhí)行for循環(huán)之后的語句。for語句的的靈活使用1、i=1;for(;i<=100;i++)for(i=1;i<=100;i++)一般寫法:表達(dá)式1一般是設(shè)置循環(huán)變量初值,但也可以是與循環(huán)變量無關(guān)的其他表達(dá)式,可以是零個、一個或多個表達(dá)式,多個以逗號分隔。for語句的的靈活使用2、for(i=1;;i++)相當(dāng)于
i=1;while(1){i++;}for(i=1;i<=100;i++)一般寫法:表達(dá)式2是設(shè)置循環(huán)的條件。若省略了表達(dá)式2,編譯可以通過,但循環(huán)條件永遠(yuǎn)為真,即無限循環(huán)。應(yīng)避免此種情況??!for語句的的靈活使用3、for(i=1;i<=100;){i++;}for(i=1;i<=100;i++)一般寫法:表達(dá)式3是使循環(huán)趨于結(jié)束的語句,可以看作是循環(huán)體的一部分。表達(dá)式3可省略,但應(yīng)設(shè)法保證循環(huán)正常結(jié)束,也就是可以把表達(dá)式3放在循環(huán)體中。for語句的的靈活使用4、sum=0;i=1;
for(;i<=100;)i++;或
for(sum=0,i=1;i<=100;i++)sum=0;for(i=1;i<=100;i++)一般寫法:5、for(;;)
三個表達(dá)式都可以省略,編譯可以通過,但系統(tǒng)在此無限循環(huán)下去??!舉一反三:1、for(s=0,i=10;i>=1;i--)s=s+i;2、for(s=0,i=1;i<=10;i+=2)s=s+i;3、for(s=0,i=2;i<=10;i+=2)s=s+i;完成1~10的自然數(shù)的和。完成1~10的奇數(shù)和。完成1~10的偶數(shù)和?!炯寄苡?xùn)練二】求正整數(shù)n的階乘n!,其中n由用戶輸入。程序如下:main(){floatfact=1.0;inti,n;scanf("%d",&n);for(i=1;i<=n;i++)fact=fact*i;printf("fac=%f",fact);}main(){floatr,s;inti;floatPi=3.14159;for(i=1,r=0.5;i<=6;i++,r++){s=Pi*r*r;printf("\nr=%4.1f,s=%f",r,s);}}運(yùn)行結(jié)果:r=0.5,s=0.785398r=1.5,s=7.068578r=2.5,s=19.634937r=3.5,s=38.484578r=4.5,s=63.617199r=5.5,s=95.033104【例5.5】寫一個程序,計算半徑分別為0.5mm,1.5mm,2.5mm,3.5mm,4.5mm,5.5mm時圓的面積。main(){floatr,s;for(r=0.5;r<=5.5;r++){s=3.14159*r*r;printf("\nr=%4.1f,s=%f",r,s);}}運(yùn)行結(jié)果:
r=0.5,s=0.785398r=1.5,s=7.068578r=2.5,s=19.634937r=3.5,s=38.484578r=4.5,s=63.617199r=5.5,s=95.033104goto語句實(shí)現(xiàn)循環(huán):
main(){inti=1,sum=0;loop:if(i<=100)//loop為標(biāo)識符,可自行命名{sum=sum+i;i++;
gotoloop;}printf(“sum=%d”,sum);}說明:goto語句是轉(zhuǎn)向語句,可以和if語句構(gòu)成循環(huán),也可以通過它從循環(huán)體中跳出來。但goto語句的程序可讀性差,建議不使用該語句,而盡量使用前面介紹的幾種循環(huán)語句。第四節(jié)幾種循環(huán)的比較例如:求1到100之間不能被3整除的數(shù),用三種循環(huán)均可實(shí)現(xiàn)。/*用while語句實(shí)現(xiàn)*/main(){inti=1;while(i<=100){if(i%3!=0)printf("%4d",i);i++;}}/*用for語句實(shí)現(xiàn)*/main(){inti;for(i=1;i<=100;i++)if(i%3!=0)printf("%4d",i);}/*用do-while語句實(shí)現(xiàn)*/main(){inti=1;do{if(i%3!=0)printf("%4d",i);i++;}while(i<=100);}(6)三種基本循環(huán)結(jié)構(gòu)一般可以相互替代,不能說哪種更加優(yōu)越。具體使用哪一種結(jié)構(gòu)依賴于程序的可讀性和程序設(shè)計者個人程序設(shè)計的風(fēng)格。(1)循環(huán)變量初始化:while和do-while的循環(huán)變量初始化在while和do-while語句之前完成;而for循環(huán)變量初始化可以在表達(dá)式1中完成。(2)循環(huán)條件:while和do-while循環(huán)只在while后面指定循環(huán)條件;而for循環(huán)在表達(dá)式2中指定。(3)循環(huán)變量修改使循環(huán)趨向結(jié)束:while和do-while
循環(huán)要在循環(huán)體內(nèi)包含使循環(huán)趨于結(jié)束的操作;
for循環(huán)可以在表達(dá)式3中完成。(4)for循環(huán)可以省略循環(huán)體,將部分操作放到表達(dá)式2,表達(dá)式3中,for語句功能強(qiáng)大。(5)while和for循環(huán)先測試表達(dá)式,后執(zhí)行循環(huán)體,而do-while是先執(zhí)行循環(huán)體,再判斷表達(dá)式。第五節(jié)多重循環(huán)(嵌套循環(huán))一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),即循環(huán)套循環(huán)——叫多重循環(huán)(“嵌套循環(huán)”)。按照循環(huán)的嵌套次數(shù),分別稱為二重循環(huán)、三重循環(huán)。一般將處于內(nèi)部的循環(huán)稱為內(nèi)循環(huán),處于外部的循環(huán)稱為外循環(huán)。一般單重循環(huán)只有一個循環(huán)變量,雙重循環(huán)具有兩個循環(huán)變量,多重循環(huán)有多個循環(huán)變量。【例5.5】打印九九乘法表1×1=11×2=2……1×9=92×1=22×2=4……2×9=183×1=33×2=6……3×9=27………………9×1=99×2=18……9×9=81分析:
第一行為1*i=i;第二行為2*i=2i;第三行為3*i=3i;……;第九行為9*i=9i。行號i從1~9,每次遞增1;列號j從1~9,也是每次遞增1。程序如下:main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf("%3d*%d=%2d",i,j,i*j);printf("\n");
}}i為行號,從1-9循環(huán)1×1=11×2=2……1×9=92×1=22×2=4……2×9=183×1=33×2=6……3×9=27………………9×1=99×2=18……9×9=81j為列號,從1-9循環(huán)舉一反三:輸出下三角形的九九表!【例5.6】用循環(huán)語句打印下列圖案:
***************
i=1i<=5j=1j<=20
輸出空格字符j++j=1j<=i輸出“*”字符j++換行i++程序如下:main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf("*");printf("\n");}}控制行數(shù)為5行,從i=1即第1行開始??刂?數(shù)為i個,i為當(dāng)前行數(shù)。舉一反三:參考上述程序,分別用循環(huán)語句打印下列兩個圖案:122333444455555
112123123412345【例5.7】用循環(huán)語句打印下列圖案:
*************************
程序如下:main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=20-i;j++)printf(““);for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}}舉一反三:參考上述程序,打印下列圖案:
1123123451234567能力拓展:百錢百雞問題。用100元錢買100只雞,每只公雞5元,每只母雞3元,每3只小雞1元,要求每種雞至少買一只,且必須是整只的,問各種雞各買多少只?提示:(1)這是一個組合問題;(2)設(shè)i,j,k分別表示公雞、母雞和小雞的只數(shù)。為了確定
i,j,k的取值范圍,可以有不同方法;方法一:i:1~20;j:1~33;k:1~100;依據(jù)價錢確定出公雞、母雞和小雞的只數(shù):i,j,k的取值范圍。方法二:i:1~20;j:1~33;k:100-i-j;假定每種雞至少有一只。第六節(jié)break和continue語句一、break語句一般形式為:
break;break語句的執(zhí)行過程:終止對switch語句或循環(huán)語句的執(zhí)行(跳出這兩種語句),而轉(zhuǎn)移到其后的語句處執(zhí)行?!纠?.8】從鍵盤上連續(xù)輸入字符,并統(tǒng)計其中大寫字母的個數(shù),直到輸入“換行”字符時結(jié)束。程序如下:#include"stdio.h"main(){
charch;intsum=0;while(1){ch=getchar();if(ch=='\n')break;if(ch>='A'&&ch<='Z')sum++;}printf("sum=%d\n",sum);}
相當(dāng)于循環(huán)條件永遠(yuǎn)為真。如果ch的值為換行符則跳出循環(huán)如果是大寫字母,計數(shù)器加1參考此例,完成程序設(shè)計題5,p105關(guān)于break語句的說明
break語句只用于循環(huán)語句或switch語句中。在循環(huán)語句中,break常常和if語句一起使用,表示當(dāng)條件滿足時,立即終止循環(huán)。注意break不是跳出if語句,而是跳出循環(huán)結(jié)構(gòu)。(2)循環(huán)語句可以嵌套使用,break語句只能跳出(終止)其所在的本層循環(huán),而不能完全跳出多層循環(huán)。要實(shí)現(xiàn)逐層跳出多層循環(huán)可以設(shè)置一個標(biāo)志變量,控制跳出循環(huán)。二、continue語句一般形式:
continue;
continue語句的功能是結(jié)束本次循環(huán)。即跳過本層循環(huán)體中余下尚未執(zhí)行的語句,接著進(jìn)行下一次循環(huán)條件的判定。注意:執(zhí)行continue語句并沒有使整個循環(huán)終止?!纠?.9】將1~100之間能同時被3和7整除的數(shù)輸出。程序如下:#include"stdio.h"main(){intn;for(n=1;n<=100;n++){if((n%3!=0)||(n%7!=0))continue;printf(“%5d”,n);
}}輸出:21426384if(n%3==0&&n%7==0)printf(“%5d”,n);改成下面的語句是一樣的結(jié)果!第七節(jié)循環(huán)結(jié)構(gòu)程序設(shè)計舉例【例5.10】讀入10個數(shù),編寫程序求其中的最大值。設(shè)變量x表示存放讀入數(shù)據(jù)的變量,變量max存放最大值,i表示循環(huán)次數(shù)。1、首先讀入第一個數(shù),存入x中,將它設(shè)為最大值:max=x。2、依次讀入其他的數(shù),與最大值max進(jìn)行比較,若比最大值max大,則用當(dāng)前值代替max的值,如此循環(huán)9次。3、打印最大值。該算法比喻成“擂臺賽”!程序如下:main(){inti=0;floatx,max;printf("\nPleaseinputdata:");scanf("%f",&x);max=x;for(i=1;i<10;i++){scanf("%f",&x);if(max<x)max=x;}printf("TheMaxdatais:%f\n",max);}讀入第一個數(shù)存為最大的數(shù)循環(huán)次數(shù)為9次思考:1、將0作為初值依次跟10個數(shù)進(jìn)行比較可以嗎?2、求10個數(shù)中的最小值,應(yīng)怎么修改程序?程序如下:main(){floatx,sum=0,ave;inti=0;printf("Pleaseinputdata:");scanf("%f",&x);while(x>=0){sum=sum+x;i++;scanf("%f",&x);}printf("\ni=%d,ave=%f\n",i,sum/i);}【例5.11】求一批數(shù)據(jù)的平均值。若程序只用一個scanf語句,該如何修改程序?【例5.12】求階乘的和s=1!+2!+3!+...+20!main(){doubles=0,t=1;inti;for(i=1;i<=20;i++) {t=t*i; s=s+t;}printf("s=%e\n",s);}更新每一個階乘疊加跟求s=1+21+22+23+…220類似!【能力拓展】編程求S=1/1!+1/2!+1/3!+…+1/20!方法一:用兩重循環(huán)完成,外重循環(huán)控制累加,循環(huán)變量從1~20。內(nèi)重循環(huán)求階乘。方法二:用一重循環(huán)完成,利用公式n!=(n-1)!*n。課后練習(xí):求e=S=1/1!+1/2!+1/3!+…+1/n!,直到最后一項(1/n!)小于10-9為止。【技能訓(xùn)練】一個百萬富翁遇見一個陌生人,達(dá)成換錢的協(xié)議。陌生人說:第一天我給你10萬元,你只需給我一分錢;第二天我依然給你10萬元,你只需給我二分錢;第三天我給你10萬元,你給我四分錢……以后你每天給我的錢是前一天的二倍,直到滿30天,富翁很高興,欣然同意了。請編程計算一下,30天后每人各得多少錢?分析:設(shè)fu:富翁得到的錢的總數(shù)
mo:陌生人得到的錢的總數(shù)
t:陌生人每天得到的錢數(shù)第一天:fu=100000.0t=0.01,mo=0.01元循環(huán):2~30天
t=2*t;mo=mo+t;
fu=fu+100000.0;程序如下:#include"stdio.h"main(){intn,i;floatfu,mo,t;fu=0;mo=0;t=0.01;for(i=1;i<=30;i++){mo=mo+t;
t=2*t;fu=fu+100000.0;}printf("richman'smoney=%f",fu);printf("\nstranger'smoney=%f",mo);}運(yùn)行結(jié)果:Therichman'smon
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年供水設(shè)施建設(shè)協(xié)議書
- 2025年緊急出口門采購合同
- 2025年午休時段兒童看護(hù)服務(wù)協(xié)議
- 兒童領(lǐng)養(yǎng)程序指導(dǎo)協(xié)議
- 2025年產(chǎn)品市場分隔協(xié)議范本
- 2025年防水建材項目立項申請報告模板
- 2025年公共場所消防設(shè)施供應(yīng)及維護(hù)合同
- 2025年同心同行策劃合作框架協(xié)議
- 2025年醫(yī)療用品分銷合作伙伴協(xié)議范例
- 2025年共同策劃長遠(yuǎn)發(fā)展協(xié)同計劃協(xié)議書標(biāo)準(zhǔn)樣式
- 一年級語文教材解讀分析ppt
- 萬人計劃藍(lán)色簡約萬人計劃青年拔尖人才答辯PPT模板
- 統(tǒng)編高中《思想政治》教材編寫理念和內(nèi)容介紹
- 高質(zhì)量SCI論文入門必備從選題到發(fā)表全套課件
- 民政局離婚協(xié)議書模板(8篇)
- 2022年普通高等學(xué)校招生全國統(tǒng)一考試數(shù)學(xué)試卷 新高考Ⅰ卷(含解析)
- (完整版)中心醫(yī)院心血管學(xué)科的??平ㄔO(shè)與發(fā)展規(guī)劃
- 勞動合同法草案的立法背景與創(chuàng)新黎建飛中國人民大學(xué)法學(xué)院教授
- 第三章 檢測儀表與傳感器
- 服裝QC尾期查貨報告(中英雙語)
- 電機(jī)學(xué)辜承林(第三版)第1章
評論
0/150
提交評論