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

第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1while語(yǔ)句5.2do-while語(yǔ)句5.3for語(yǔ)句5.4break、continue和goto語(yǔ)句5.5循環(huán)的嵌套5.6復(fù)合結(jié)構(gòu)程序舉例1ppt課件第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1while語(yǔ)句1ppt課件1教學(xué)目的和基本要求:要求學(xué)生了解循環(huán)結(jié)構(gòu)程序設(shè)計(jì),掌握各種循環(huán)語(yǔ)句應(yīng)用的特點(diǎn)及異同點(diǎn),掌握循環(huán)嵌套及復(fù)合結(jié)構(gòu)。教學(xué)重點(diǎn):各種循環(huán)語(yǔ)句應(yīng)用的特點(diǎn)及異同點(diǎn)。2ppt課件教學(xué)目的和基本要求:要求學(xué)生了解循環(huán)結(jié)構(gòu)程序設(shè)計(jì),掌握各種循2精品資料精品資料3你怎么稱(chēng)呼老師?如果老師最后沒(méi)有總結(jié)一節(jié)課的重點(diǎn)的難點(diǎn),你是否會(huì)認(rèn)為老師的教學(xué)方法需要改進(jìn)?你所經(jīng)歷的課堂,是講座式還是討論式?教師的教鞭“不怕太陽(yáng)曬,也不怕那風(fēng)雨狂,只怕先生罵我笨,沒(méi)有學(xué)問(wèn)無(wú)顏見(jiàn)爹娘……”“太陽(yáng)當(dāng)空照,花兒對(duì)我笑,小鳥(niǎo)說(shuō)早早早……”循環(huán)結(jié)構(gòu)程序設(shè)計(jì)--ppt課件4精品資料精品資料5你怎么稱(chēng)呼老師?如果老師最后沒(méi)有總結(jié)一節(jié)課的重點(diǎn)的難點(diǎn),你是否會(huì)認(rèn)為老師的教學(xué)方法需要改進(jìn)?你所經(jīng)歷的課堂,是講座式還是討論式?教師的教鞭“不怕太陽(yáng)曬,也不怕那風(fēng)雨狂,只怕先生罵我笨,沒(méi)有學(xué)問(wèn)無(wú)顏見(jiàn)爹娘……”“太陽(yáng)當(dāng)空照,花兒對(duì)我笑,小鳥(niǎo)說(shuō)早早早……”循環(huán)結(jié)構(gòu)程序設(shè)計(jì)--ppt課件6

scanf(“%f”,&a);s=s+a;scanf(“%f”,&a);s=s+a;………….

這樣重復(fù)一百次,然后輸出s的值。這樣寫(xiě)顯然非常麻煩。我們注意到程序中的

scanf(“%f”,&a);s=s+a;兩句話是一直重復(fù)的,如果能用一種語(yǔ)句,使這兩句話能自動(dòng)的重復(fù)執(zhí)行一百次,就可以簡(jiǎn)化了書(shū)寫(xiě)的麻煩,這就是循環(huán)語(yǔ)句。編程解決這樣的一個(gè)問(wèn)題:從鍵盤(pán)輸入一百個(gè)學(xué)生的成績(jī),求總成績(jī)。從前面所學(xué),有兩種解決方法。1.設(shè)一百個(gè)變量,分別輸入學(xué)生的成績(jī),然后求和。這種方法浪費(fèi)內(nèi)存空間,顯然不實(shí)際。2.設(shè)一個(gè)變量,每次輸入一個(gè)學(xué)生成績(jī),累加后再輸入下一個(gè)學(xué)生成績(jī),如下:/a/Agyyhjbzx/7ppt課件scanf(“%f”,&a);這樣寫(xiě)顯然非常麻煩。7C語(yǔ)言有while、do-while、和for語(yǔ)句三種循環(huán)結(jié)構(gòu)語(yǔ)句。前兩個(gè)稱(chēng)為條件循環(huán),即根據(jù)條件來(lái)決定是否繼續(xù)循環(huán);后一個(gè)稱(chēng)為計(jì)數(shù)循環(huán),即根據(jù)設(shè)定的執(zhí)行次數(shù)來(lái)執(zhí)行循環(huán)。8ppt課件C語(yǔ)言有while、do-w85.1while語(yǔ)句一般形式:

while(表達(dá)式)語(yǔ)句表達(dá)式語(yǔ)句真假表達(dá)式1.計(jì)算表達(dá)式語(yǔ)句2.如果表達(dá)式的值為非零,執(zhí)行語(yǔ)句表達(dá)式3.返回第一步,重新計(jì)算表達(dá)式4.如果表達(dá)式的值為零,則結(jié)束循環(huán)如果表達(dá)式的值一開(kāi)始就為0,則語(yǔ)句一次也不會(huì)被執(zhí)行。執(zhí)行流程:9ppt課件5.1while語(yǔ)句一般形式:

while(表達(dá)式)9while語(yǔ)句舉例問(wèn)題:求學(xué)生的平均成績(jī),以輸入負(fù)數(shù)成績(jī)?yōu)榻Y(jié)束

算法分析:1.定義變量score存儲(chǔ)學(xué)生成績(jī),定義s=0存儲(chǔ)累加的成績(jī),定義n=0統(tǒng)計(jì)錄入的成績(jī)數(shù)目。

2.輸入第一個(gè)學(xué)生的score3.若score>=0,執(zhí)行第4步,否則執(zhí)行第7步

4.n++5.s=s+score6.錄入下一個(gè)score,并返回第3步

7.如果n>0,輸出s/n否則輸出沒(méi)有學(xué)生成績(jī)10ppt課件while語(yǔ)句舉例問(wèn)題:求學(xué)生的平均成績(jī),以輸入負(fù)數(shù)成績(jī)?yōu)?0main(){intn=0;floats=0,score;scanf(“%f”,&score);while(score>=0){n++;s=s+score;scanf(“%f”,&score);}if(n>0)printf(“\n%f”,s/n);elseprintf(“nostudentscore!”);}程序:11ppt課件main()程序:11ppt課件115.2do—while語(yǔ)句一般形式:

do{

語(yǔ)句

}while(表達(dá)式);1.執(zhí)行語(yǔ)句3.表達(dá)式的值為非零,返回第1步4.表達(dá)式的值為零,結(jié)束循環(huán)語(yǔ)句至少被執(zhí)行一次。表達(dá)式語(yǔ)句2.計(jì)算表達(dá)式執(zhí)行流程:注意:分號(hào)不能丟語(yǔ)句表達(dá)式真假12ppt課件5.2do—while語(yǔ)句一般形式:

do{

12main(){intn=0;floats=0,score;do{scanf(“%f”,&score);n++;s=s+score;}while(score>=0);if(n>1)printf(“\n%f”,(s-score)/(n-1));elseprintf(“nostudentscore!”);}用do-while語(yǔ)句編寫(xiě)統(tǒng)計(jì)學(xué)生平均成績(jī)的程序:由于do-while語(yǔ)句至少要被執(zhí)行一次,特別要注意n和s的取值問(wèn)題!13ppt課件main()用do-while語(yǔ)句編寫(xiě)統(tǒng)計(jì)學(xué)生平均成績(jī)的程13想想這樣的一段循環(huán)語(yǔ)句的執(zhí)行結(jié)果:i=1;while(i<=100)putchar(‘*’);i++;這個(gè)循環(huán)永遠(yuǎn)不會(huì)結(jié)束,因?yàn)檠h(huán)控制變量i沒(méi)有在循環(huán)體內(nèi)被改變,i++;不屬于循環(huán)體。應(yīng)該改為:i=1;while(i<=100){putchar(‘*’);i++;}

循環(huán)語(yǔ)句中一定要注意表達(dá)式的值是否能在循環(huán)執(zhí)行過(guò)程中被改變,以免造成死循環(huán)。14ppt課件想想這樣的一段循環(huán)語(yǔ)句的執(zhí)行結(jié)果:這個(gè)循環(huán)永遠(yuǎn)不會(huì)結(jié)束,因?yàn)?4

5.3

for循環(huán)語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語(yǔ)句一般形式:1.計(jì)算表達(dá)式1,通常用于循環(huán)開(kāi)始前設(shè)置變量初值。2.計(jì)算表達(dá)式2,值為0則結(jié)束循環(huán),否則執(zhí)行第3步。3.執(zhí)行循環(huán)體語(yǔ)句。4.計(jì)算表達(dá)式3,返回第2步。執(zhí)行流程表達(dá)式1表達(dá)式2循環(huán)體表達(dá)式3假真15ppt課件 5.3for循環(huán)語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式15例:求1+2+…+99#include<stdio.h>main(){inti,s=0;for(i=1;i<=99;i++)s=s+i;printf(“s=%d”,s);}分析:用變量i從1到99循環(huán),把i的值累加到變量s中,最后輸出s的值。程序如下:i=1i<=99s=s+ii++假真16ppt課件例:求1+2+…+99#include<stdio.h16從上面的程序我們看到,for語(yǔ)句中:表達(dá)式1:通常是給循環(huán)變量賦初值表達(dá)式2:循環(huán)是否繼續(xù)執(zhí)行的判別表達(dá)式,這個(gè)表達(dá)式通常與某一個(gè)(或多個(gè))變量的值有關(guān),隨著這個(gè)(些)變量的值的改變,表達(dá)式的結(jié)果發(fā)生變化,這個(gè)(些)變量被稱(chēng)為循環(huán)因變量。表達(dá)式3:通常用于改變循環(huán)因變量的值。

在某些情況下,for語(yǔ)句中的表達(dá)式1、2、3都可以省略,而改用其他的方式來(lái)實(shí)現(xiàn)這些功能。我們還用上面的例子說(shuō)明for語(yǔ)句省略表達(dá)式的情形。17ppt課件從上面的程序我們看到,for語(yǔ)句中:在某些情況下171.省略表達(dá)式1:#include<stdio.h>main(){inti=1,s=0;for(;i<=99;i++)s=s+i;printf(“s=%d”,s);}2.省略表達(dá)式3:#include<stdio.h>main(){inti,s=0;for(i=1;i<=99;){s=s+i;i++;}printf(“s=%d”,s);}3.同時(shí)省略表達(dá)式1、3#include<stdio.h>main(){inti=1,s=0;for(;i<=99;){s=s+i;i++;}printf(“s=%d”,s);}表達(dá)式2也可以省略但在循環(huán)體中要借助break;語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)的結(jié)束,我們將在后面介紹。注意:表達(dá)式省略,分號(hào)不省略。18ppt課件1.省略表達(dá)式1:#include<stdio.h>2.省略18for語(yǔ)句中的表達(dá)式可以是一切形式的表達(dá)式,逗號(hào)運(yùn)算符參與的表達(dá)式也可以運(yùn)用在for語(yǔ)句中,通常運(yùn)用于表達(dá)式1和表達(dá)式3。如上面的例子可以改寫(xiě)為:#include<stdio.h>main(){inti,s;for(s=0,i=1;i<=99;s=s+i,i++);printf(“s=%d”,s);}注意此處的分號(hào)。

此處,表達(dá)式1用逗號(hào)表達(dá)式的形式,給多個(gè)變量賦初值。表達(dá)式3用逗號(hào)表達(dá)式把循環(huán)體也寫(xiě)入其中。注意表達(dá)式3書(shū)寫(xiě)順序不能交換。19ppt課件for語(yǔ)句中的表達(dá)式可以是一切形式的表達(dá)式,逗19例:求1/100+2/99+…+1分析:用變量i從1開(kāi)始循環(huán),每次增加1;用變量j從100開(kāi)始循環(huán),每次減少1。累加i/j的值到s中。當(dāng)i>j時(shí)結(jié)束循環(huán)(即i<=j時(shí)繼續(xù)循環(huán))。最后輸出s。程序如下:#include<stdio.h>main(){inti,j;floats=0;for(i=1,j=100;i<=j;i++,j--)s=s+(float)i/j;printf(“\ns=%f”,s);}20ppt課件例:求1/100+2/99+…+1分析:用變量i從1開(kāi)始循20for、while、do-while的比較

所有需要用到循環(huán)結(jié)構(gòu)的程序,都可以用for、while、do-while中的任何一個(gè)來(lái)實(shí)現(xiàn),區(qū)別只在于某些問(wèn)題用哪種語(yǔ)句更方便。

比如求1+2+…+99的問(wèn)題我們也可以分別用while與do-while語(yǔ)句編寫(xiě)如下:用while:#include<stdio.h>main(){inti=1,s=0;while(i<=99){s=s+i;i++;}printf(“\ns=%d”,s);}用do-while:#include<stdio.h>main(){inti=1,s=0;do{s=s+i;i++;}while(i<=99);printf(“\ns=%d”,s);}21ppt課件for、while、do-while的比較所有21例:任意輸入一個(gè)自然數(shù),把它反序輸出。(如:原數(shù)為123,輸出321)。分析:此題不確定循環(huán)執(zhí)行的次數(shù),也不涉及一個(gè)規(guī)律變化的變量,一般用while或do-while來(lái)編寫(xiě)。又由于第一次就要判斷輸入的是否是自然數(shù),通常用while來(lái)實(shí)現(xiàn)。算法步驟如下:1.定義整型變量a用于存儲(chǔ)輸入的自然數(shù),定義t初值為0用于存放a的反序數(shù),定義i用于依次存放求出的a的每一位的數(shù)值。2.輸入一個(gè)自然數(shù)賦值給變量a3.若a>0,執(zhí)行第4步,否則執(zhí)行第7步4.i=a%105.t=t*10+i6.a=a/10,并返回第3步7.輸出t22ppt課件例:任意輸入一個(gè)自然數(shù),把它反序輸出。(如:原數(shù)為123,輸22程序:#include<stdio.h>main(){longa,i,t=0;scanf(“%ld”,&a);while(a>0){i=a%10;t=t*10+i;a=a/10;}printf(“\n%ld”,t);}

在這里由于a的值可能很大所以用到了long型定義變量a,如果希望取到的值更大,可以用unsignedlong型。問(wèn):如果a用double型,并把i=a%10改為i=(long)a%10;把a(bǔ)=a/10改為a=(long)a/10可以嗎?答:不可以?。?3ppt課件程序:#include<stdio.h>在這里由于a23例:有數(shù)列2/3、4/5、6/9、10/15……求此數(shù)列前30項(xiàng)的和。1.初值i=2,j=3,s=0;2.用n從1到30循環(huán)5.輸出s;3.s=s+i/j;4.c=i;i=j+1;j=c+j;算法分析:對(duì)于數(shù)列的題,首先要找出通項(xiàng)公式,或前后項(xiàng)的計(jì)算關(guān)系公式,根據(jù)公式求所需。由于數(shù)列的題一般執(zhí)行次數(shù)能確定,用for語(yǔ)句來(lái)編寫(xiě)比較方便。此題,前后項(xiàng)的關(guān)系是:后一項(xiàng)的分子是前一項(xiàng)的分母加1,后一項(xiàng)的分母是前一項(xiàng)的分子加分母。解題思路是用循環(huán)語(yǔ)句求各項(xiàng),并把值累加,因?yàn)槭乔笄?0項(xiàng)的和,循環(huán)執(zhí)行30次。24ppt課件例:有數(shù)列2/3、4/5、6/9、10/15……求此數(shù)列前324程序:#include<stdio.h>main(){inti=2,j=3,n,c;floats=0;for(n=1;n<=30;n++){s=s+(float)i/j;c=i;i=j+1;j=c+j;}printf(“\n%f”,s);}

此題中的n與循環(huán)體中的執(zhí)行語(yǔ)句沒(méi)有數(shù)值上的聯(lián)系,僅僅用做決定循環(huán)執(zhí)行的次數(shù)。25ppt課件程序:#include<stdio.h>此題中的255.4break、continue、goto語(yǔ)句

此類(lèi)語(yǔ)句的功能是使程序從其所在的位置轉(zhuǎn)向另一處。goto語(yǔ)句使程序的結(jié)構(gòu)性和可讀性都變差,要求盡量避免使用,此處不做介紹。26ppt課件5.4break、continue、goto語(yǔ)句此類(lèi)語(yǔ)265.4.1break語(yǔ)句

它的作用是把流程轉(zhuǎn)向所在結(jié)構(gòu)之后。在switch分支結(jié)構(gòu)中,使用break語(yǔ)句可以使流程跳出switch分支結(jié)構(gòu)。同樣的,在循環(huán)結(jié)構(gòu)中,使用break語(yǔ)句使流程跳出當(dāng)前的循環(huán)層,轉(zhuǎn)向執(zhí)行該循環(huán)結(jié)構(gòu)后面的語(yǔ)句。一般形式:

break;27ppt課件5.4.1break語(yǔ)句它的作用是把流程轉(zhuǎn)向27main()

{

ints=0,i=1:

for(;;)

{if(i>99)break;s=s+i;i++;

}

printf(“s=%d”,s);

}例:前面講到的計(jì)算1+2+…+99的程序,可以同時(shí)省略for循環(huán)的三個(gè)表達(dá)式,改寫(xiě)成如下形式:

本程序中,當(dāng)i>99時(shí),利用break語(yǔ)句強(qiáng)行終止for循環(huán),繼續(xù)執(zhí)行for語(yǔ)句后的下一條語(yǔ)句。28ppt課件main()

{

ints=0,i=1:

for28 5.4.2continue語(yǔ)句

該語(yǔ)句被稱(chēng)為繼續(xù)語(yǔ)句。在循環(huán)結(jié)構(gòu)中執(zhí)行continue語(yǔ)句,使本次循環(huán)提前結(jié)束,即跳過(guò)循環(huán)體中continrue語(yǔ)句下面的尚未執(zhí)行的循環(huán)體語(yǔ)句,但不結(jié)束整個(gè)循環(huán),繼續(xù)進(jìn)行下一次循環(huán)的條件判別,條件為真,繼續(xù)進(jìn)行執(zhí)行循環(huán)語(yǔ)句。一般形式:

continue;29ppt課件 5.4.2continue語(yǔ)句該語(yǔ)句被稱(chēng)為29例:下面這個(gè)程序,想想它實(shí)現(xiàn)的是什么功能?#include<stdio.h>main(){inti,s=0;for(i=1;i<=100;i++){if(i%5==0)continue;s=s+i;}printf(“\n%d”,s);}

在左邊的程序中,i從1到100循環(huán),當(dāng)i是5的倍數(shù)時(shí),直接進(jìn)入下一個(gè)i,當(dāng)i不是5的倍數(shù)時(shí),把i累加到s,最后輸出s。所以,這個(gè)程序?qū)崿F(xiàn)的是求1~100中間所有非5的倍數(shù)的數(shù)之和。30ppt課件例:下面這個(gè)程序,想想它實(shí)現(xiàn)的是什么功能?#include<30 5.5循環(huán)的嵌套

當(dāng)循環(huán)體語(yǔ)句又是一條循環(huán)語(yǔ)句,或作為循環(huán)體的復(fù)合語(yǔ)句中又包含循環(huán)語(yǔ)句時(shí)稱(chēng)為循環(huán)的嵌套。嵌套可以是兩層或多層。While、do-while、for三種循環(huán)都可以互相嵌套。

循環(huán)體語(yǔ)句可以是任何形式的語(yǔ)句,簡(jiǎn)單語(yǔ)句、空語(yǔ)句、復(fù)合語(yǔ)句、流程控制語(yǔ)句都可作為循環(huán)體語(yǔ)句。/a/Agyyhjb/31ppt課件 5.5循環(huán)的嵌套當(dāng)循環(huán)體語(yǔ)31例:輸出n~m中(0<n<m)能被3整除,且至少有一個(gè)數(shù)字是5的所有數(shù)。算法分析:

1.輸入n與m的值

2.用整型變量a從n~m循環(huán),每次值加13.若a能被3整除,執(zhí)行第4步,否則執(zhí)行第9步

9.返回第2步,察看下一個(gè)a6.i=x%107.若i值不為5,執(zhí)行第8步,否則輸出a,并執(zhí)行第9步8.x=x/10,并返回第5步4.令整型變量x=a5.若x>0,執(zhí)行第6步,否則執(zhí)行第9步32ppt課件例:輸出n~m中(0<n<m)能被3整除,且至少有一個(gè)數(shù)字是32#include<stdio.h>main(){longa,x,i,t,n,m;scanf(“%ld%ld”,&n,&m);for(a=n;a<=m;a++)if(a%3==0){x=a;while(x>0){i=x%10;if(i==5){printf(“\t%ld”,a);break;}x=x/10;}}}程序:?jiǎn)枺耗馨補(bǔ)%3==0也放到for循環(huán)語(yǔ)句的表達(dá)式2中,寫(xiě)成a<=m&&a%3==0嗎?答:不可以!33ppt課件#include<stdio.h>程序:?jiǎn)枺捍穑翰豢梢裕?333例:求3~150中所有素?cái)?shù)的和。

算法分析:

1.用變量a從3到150循環(huán),每次值增加12.用變量i從2到a-1循環(huán),每次值增加13.若a%i==0,結(jié)束i的循環(huán),執(zhí)行第4步

4.若i==a,把a(bǔ)累加到s上。

5.輸出s的值

注意:此題中執(zhí)行第4步時(shí)有兩種情況。第一種:在第3步中發(fā)現(xiàn)了滿(mǎn)足a%i==0的情況,直接跳出了i的循環(huán),此時(shí)的i一定是在2到a-1中間的一個(gè)值,而且a不是素?cái)?shù)。第二種:一直沒(méi)有發(fā)現(xiàn)滿(mǎn)足a%i==0的i,在i==a時(shí),不再滿(mǎn)足i循環(huán)的執(zhí)行條件,i循環(huán)結(jié)束,此時(shí)的a是素?cái)?shù)!34ppt課件例:求3~150中所有素?cái)?shù)的和。算法分析:注意:此34程序:#include<stdio.h>main(){inta,s=0,i;for(a=3;a<=150;a++){for(i=2;i<=a-1;i++)if(a%i==0)break;if(a==i)s=s+a;}printf(“\n%d”,s)}

求素?cái)?shù)的方法很多,大同小異。此題可以做一些改動(dòng)。如:i的值可以是從2取到sqrt(a);可以不用最后察看i的值,而是通過(guò)在發(fā)現(xiàn)因子時(shí)改動(dòng)標(biāo)志變量,最后根據(jù)標(biāo)志變量的值判斷是否是素?cái)?shù)。35ppt課件程序:#include<stdio.h>求素?cái)?shù)的方法很35

在前面的例子中,循環(huán)體內(nèi)不但包含有循環(huán)語(yǔ)句,而且還包含有if這樣的分支結(jié)構(gòu)語(yǔ)句,這種循環(huán)體包含分支結(jié)構(gòu)的形式,叫做復(fù)合結(jié)構(gòu)。下面,我們?cè)倏磧蓚€(gè)復(fù)合結(jié)構(gòu)程序設(shè)計(jì)的例子。36ppt課件在前面的例子中,循環(huán)體內(nèi)不但包含有循環(huán)語(yǔ)句,而36例:有一個(gè)八層高的燈塔,每層所點(diǎn)燈數(shù)都等于上一層的兩倍,一共有765盞燈,求塔底燈數(shù)。算法分析:此題的關(guān)鍵在于塔頂?shù)臒魯?shù),只要知道了塔頂?shù)臒魯?shù),就可知道塔底燈數(shù)。這里采取試探的方法來(lái)求塔頂燈數(shù)。設(shè)塔頂燈數(shù)為x,x的初值從1開(kāi)始循環(huán),每次值加1。求出相應(yīng)的燈的總數(shù),總數(shù)不為765,繼續(xù)下一個(gè)x的循環(huán),直到某次求得燈總數(shù)為765時(shí),結(jié)束x的循環(huán),輸出此時(shí)塔底燈數(shù)。x從1開(kāi)始循環(huán),每次值加1出k/22.設(shè)s初值為零,用于累加每層燈數(shù);設(shè)k初值為x3.i從1到8循環(huán),每次值加15.如果s==765,結(jié)束x的循環(huán)4.s=s+k;k=k*2;37ppt課件例:有一個(gè)八層高的燈塔,每層所點(diǎn)燈數(shù)都等于上一層的兩倍,一共37程序:#include<stdio.h>main(){intx,s,i,k;for(x=1;;x++){s=0;k=x;for(i=1;i<=8;i++){s=s+k;k=k*2;}if(s==765)break;}printf(“\n%d”,k/2);}38ppt課件程序:#include<stdio.h>38ppt課件38例:已知a>b>c>0,a、b、c為整數(shù),且a+b+c<100,求滿(mǎn)足1/a2+1/b2=1/c2的a、b、c共有多少組?算法分析:這是一道典型的三重嵌套循環(huán)的題目。a、b、c都是位于1到99之間整數(shù)。編程的基本思路是:找出1到99之間的所有a、b、c的排列,察看同時(shí)滿(mǎn)足a>b>c、a+b+c<100、1/a2+1/b2=1/c2這三個(gè)條件的a、b、c有多少組。值的注意的是,1/a2+1/b2=1/c2這個(gè)條件并不能簡(jiǎn)單的原樣照寫(xiě),因?yàn)樵谇蠓謹(jǐn)?shù)的過(guò)程中必然有四舍五入,不能得出真正的準(zhǔn)確的結(jié)果,必須把條件變形成:c2(a2+b2)=a2b2才能得出正確的結(jié)果。1.a從1到99循環(huán)

2.b從1到99循環(huán)

3.c從1到99循環(huán)

4.若a>b&&b>c&&a+b+c<100&&c*c*(a*a+b*b)==a*a*b*b,統(tǒng)計(jì)找到了一組

5.輸出找到的組數(shù)39ppt課件例:已知a>b>c>0,a、b、c為整數(shù),且a+b+c<1039程序:#include<stdio.h>main(){inta,b,c,n=0;printf(“\n%d”,n);}for(c=1;c<=97;c++)for(b=c+1;b<=98;b++)for(a=b+1;a<=99;a++)if(a+b+c<100&&c*c*(a*a+b*b)==a*a*b*b)n++;

此題可做改進(jìn),在循環(huán)時(shí)確保a>b>c,而不需要再在if中判斷。改進(jìn)如左所示:for(a=1;a<=99;a++)for(b=1;b<=99;b++)for(c=1;c<=99;c++)if(a>b&&b>c&&a+b+c<100&&c*c*(a*a+b*b)==a*a*b*b)n++;40ppt課件程序:#include<stdio.h>for(c=1;c<40#include<stdio.h>main(){longintI,s=0;for(I=10;I<=130;I++)s=s+I*I;printf(“\n%d”,s);}注意:i一定要是longint型。編程練習(xí)1.[10,130]之間,所有整數(shù)的平方和。分析:用變量i從10到130循環(huán),用變量s求和,s初值為0,每次循環(huán),s=s+i*i;41ppt課件#include<stdio.h>編程練習(xí)1.[10,13041#include<stdio.h>main(){longintI,s=0;for(I=10;I<=150;I++)if(I%2!=0)s=s+I*I;printf(“\n%ld”,s);}2.[10,150]奇數(shù)的平方和。

分析:用變量s求和,s初值為0。用變量I從10到150循環(huán),如果I是奇數(shù)(I%2!=0),則s=s+I*I42ppt課件#include<stdio.h42#include<stdio.h>main(){longintI,s=0;for(I=10;I<=150;I++)if(I%3==0||I%7==0)s=s+I*I;printf(“\n%ld”,s);

}3.[10,150]之間,能被3或7整除的數(shù)的平方和。

分析:用變量s求和,s初值為0。用變量I從10到150循環(huán),如果I能被3或7整除(I%3==0||i%7==0),則s=s+I*I43ppt課件#include<stdio.43#include<stdio.h>main(){intI,n=0;for(I=1;I<=800;I++)if(I%3==0&&I%8==0)n++;printf(“\n%d”,n);}4.[1,800]中能被3和8整除的數(shù)的個(gè)數(shù)。

分析:用變量n求個(gè)數(shù),n初值為0。用變量I從1到800循環(huán),如果I能被3和8整除(I%3==0&&i%8==0),則n++44ppt課件#include<stdio.h>444#include<stdio.h>main(){intI;floats=0;for(I=1;I<=50;I++)s=s+1.0/(I*I)printf(“\n%.4f”,s);}5.s=1+1/(2*2)+1/(3*3)+…..+1/(m*m),求m=50時(shí)的s(結(jié)果保留4位小數(shù))分析:用變量s求和,s初值為0。用變量I從1到50循環(huán),s=s+1/(I*I)45ppt課件#include<stdio.h45#include<stdio.h>main(){intn=1,s=0;do{s=s+n*n;n=n+1;}while(s<=5500);printf(“\nn=%d”,n-1);}6.求100以?xún)?nèi)最小的自然數(shù)n,使1*1+2*2+3*3+…+n*n>5500分析:用變量s求和,s初值為0。用變量n從1開(kāi)始循環(huán),每次I增加1,如果s>5500,循環(huán)結(jié)束。46ppt課件#include<stdio.h46#include<stdio.h>main(){intI;floata=1;for(I=2;I<=25;I++)a=1/(1+a);printf(“\n%.10f”,a);}7.a1=1a2=1/(1+a1)an=1/(1+an-1),求a25(結(jié)果保留10位小數(shù))

分析:用變量a求項(xiàng),a初值為1。用變量I從2到25循環(huán),a=1/(1+a)47ppt課件#include<stdio.47#include<stdio.h>main(){intI;longinta=1;floats=0;for(I=1;I<=10;I++){a=a*I;s=s+1.0/a;}printf(“\n%.10f”,s);}8.1/1!+1/2!+….+1/10!(結(jié)果保留10位小數(shù))分析:用變量s求和,s初值為0。用變量a求階乘,a初值為1。用變量I從1到10循環(huán),a=a*I,s=s+1/a。48ppt課件#include<stdio.h>848main(){floats=1;intn;longinta=1,b=1;for(n=1;n<=40;n++){a=a*n;b=b*(2*n+1);s=s+(float)a/b;}printf(“\ns=%.10f”,s);}9.求s=1+1/3+(1*2)/(3*5)+…+(1*2*…*n)/(3*5*…*(2*n+1))當(dāng)n=40時(shí)的值。(結(jié)果保留10位小數(shù))分析:用變量s求和,s初值為1。用變量a用來(lái)求項(xiàng)的分子,變量b求項(xiàng)的分母,a、b初值均為1。用變量n從1到40循環(huán),a=a*n,b=b*(2*n+1),s=s+a/b。49ppt課件main()9.求s=149#include<stdio.h>main(){longintf1=1,f2=1,f,n;for(n=3;n<=40;n++){f=f1+f2;f1=f2;f2=f;}printf(“\nf=%ld”,f);}

思考:求14萬(wàn)之內(nèi)的最大的f(n).10.數(shù)列1,1,2,3,5,8…..有f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=1,求f(40)分析:用變量f1、f2、f作為數(shù)列相鄰的三項(xiàng),初值f1=1,f2=1。用變量n從3到40循環(huán),f=f1+f2,f1=f2,f2=f.50ppt課件#include<stdi50#include<stdio.h>main(){intn;floats=0;for(n=1;n<=100;n++)if(n%2!=0)s=s+1.0/(2*n-1)elses=s-1.0/(2*n-1);printf(“\n%.4f”,s);}11.Sn=1-1/3+1/5-1/7+…1/(2n-1)求s(100)(保留4位小數(shù))

分析:用變量s求和,s初值為0。用變量n從1到100循環(huán),如果n是奇數(shù)(n%2!=0),s=s+1/(2*n-1),否則s=s-1/(2*n-1)。51ppt課件#inc51main(){inta,s=0,I=1,j;for(a=1000;a>=1;a--){for(j=2;j<a;j++)if(a%j==0)break;if(j==a&&I<=20){s=s+a;I++;}if(I>20)break;}printf(“\n%d”,s);}12.求1000以?xún)?nèi)最大的20個(gè)素?cái)?shù)之和。

分析:用變量s求和,s初值為0。用變量I統(tǒng)計(jì)以求得素?cái)?shù)的個(gè)數(shù),I初值為1。用變量a從1000到1循環(huán),如果a是素?cái)?shù),并且I值小于等于20,則s=s+a,I++。當(dāng)i值大于20時(shí),跳出循環(huán)。素?cái)?shù)求法同上題,用變量j從2到a-1循環(huán)。52ppt課件main()12.求1000以?xún)?nèi)52main(){inta,b,n=0,I;for(a=200;a<=998;a++){for(I=2;I<a;I++)if(a%I==0)break;if(a==i){b=a+2;for(I=2;I<b;I++)if(b%I==0)break;if(b==i)n++;}}printf(“\n%d”,n);}13.[200,1000]的雙胞胎數(shù)的對(duì)數(shù)。雙胞胎數(shù):兩素?cái)?shù)差為2稱(chēng)為雙胞胎數(shù)。分析:用變量n統(tǒng)計(jì)以求得雙胞胎數(shù)的對(duì)數(shù),n初值為0。用變量a從200到998循環(huán),如果a是素?cái)?shù),則令變量b=a+2,如果b也是素?cái)?shù),則n值增1。素?cái)?shù)求法同前,用變量i循環(huán)/a/Agyyhjttsjb/53ppt課件main()13.[200,53main(){inta,c,n=0,I;for(a=10;a<=200;a++){c=0;for(I=1;I<=a;I++)if(a%I==0)c++;if(a%c==0)n++;}printf(“\nn=%d”,n);}14

溫馨提示

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