循環(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è),還剩131頁(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)介

第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)15.1程序中需要用循環(huán)結(jié)構(gòu)現(xiàn)實(shí)生活中許多問(wèn)題是需要重復(fù)處理計(jì)算一個(gè)班50學(xué)生每人的平均成績(jī)工廠各車(chē)間的生產(chǎn)日?qǐng)?bào)表全國(guó)各省市的人口統(tǒng)計(jì)分析各大學(xué)招生情況統(tǒng)計(jì)全校教職工工資報(bào)表P1155.1程序中需要用循環(huán)結(jié)構(gòu)現(xiàn)實(shí)生活中許多問(wèn)題是需要重復(fù)處理2第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)課件3第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)課件45.2用while語(yǔ)句和do…while語(yǔ)句實(shí)現(xiàn)循環(huán)5.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)5.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P1155.2用while語(yǔ)句和do…while語(yǔ)句實(shí)現(xiàn)循環(huán)5.255.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115例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ù)5.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115例5.1求1+265.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115sum=sum+ii=i+1非0(真)i1000(假)i=15.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115sum=sum+7#include<stdio.h>voidmain(){inti,sum=0;i=1;

while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}復(fù)合語(yǔ)句能否改為i<100?#include<stdio.h>復(fù)合語(yǔ)句能否改為i<108

while語(yǔ)句的一般形式如下:

while(表達(dá)式)語(yǔ)句循環(huán)體while語(yǔ)句的一般形式如下:循環(huán)體9

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ǔ)句語(yǔ)句非0(真)表達(dá)式0(假)while語(yǔ)句的一般形式如下:“真”時(shí)執(zhí)行循環(huán)體語(yǔ)句循環(huán)條105.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117do---while語(yǔ)句的特點(diǎn):先無(wú)條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立一般形式為:do

循環(huán)體語(yǔ)句while(表達(dá)式);表達(dá)式非0(真)0(假)循環(huán)體語(yǔ)句當(dāng)表達(dá)式的值為真循環(huán)體語(yǔ)句5.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117do---115.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117

例5.2用do…while循環(huán)求:1+2+3+…+100,即5.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117例5.125.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117解題思路:i≤100非0(真)0(假)sum=sum+ii=i+1sum=0i=1sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);

i≤100sum=sum+ii=i+1sum=0,i=15.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117解題思路:13#include<stdio.h>voidmain(){inti,sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);printf(“%d\n”,sum);}5050#include<stdio.h>505014例5.3募集慈善基金10000元,有若干人捐款,每輸入一個(gè)人的捐款數(shù)后,計(jì)算機(jī)就輸出當(dāng)時(shí)的捐款總和。當(dāng)某一次輸入捐款數(shù)后,總和達(dá)到或超過(guò)10000元時(shí),即宣告結(jié)束,輸出最后的累加值。解題思路:設(shè)計(jì)一個(gè)循環(huán)結(jié)構(gòu),在其中輸入捐款數(shù),求出累加值,然后檢查此時(shí)的累加值是否達(dá)到或超過(guò)預(yù)定值,如果達(dá)到了,就結(jié)束循環(huán)操作例5.3募集慈善基金10000元,有若干人捐款,每輸入一個(gè)15#include<stdio.h>voidmain(){floatamount,sum=0;do{scanf("%f",&amount); sum=sum+amount;}while(sum<10000);printf("sum=%9.2f\n",sum);}循環(huán)執(zhí)行的條件1000↙

1850↙1500↙2600↙2500↙1200↙sum=10650.00#include<stdio.h>循環(huán)執(zhí)行的條件1000↙165.3用for語(yǔ)句實(shí)現(xiàn)循環(huán)P1195.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程5.3.2for循環(huán)程序舉例for語(yǔ)句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況for語(yǔ)句完全可以代替while語(yǔ)句5.3用for語(yǔ)句實(shí)現(xiàn)循環(huán)P1195.3.1for語(yǔ)句的175.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句的一般形式為

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語(yǔ)句設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值執(zhí)行5.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句185.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(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.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句195.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句的一般形式為

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語(yǔ)句作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的5.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句20for語(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ǔ)句表達(dá)式2非0(真)0(假)求解表達(dá)式3求解表達(dá)式1語(yǔ)句for語(yǔ)句的執(zhí)行過(guò)程:表達(dá)式2非0(真)0(假)求解表達(dá)式321for(i=1;i<=100;i++)sum=sum+i;等價(jià)于i=1;while(i<=100){sum=sum+i;i++; }用for語(yǔ)句更簡(jiǎn)單、方便for(i=1;i<=100;i++)用for語(yǔ)句更簡(jiǎn)單、225.3.2for循環(huán)程序舉例例5.4在象棋的棋盤(pán)第1個(gè)格子中放1粒麥子,第2個(gè)格子中放2粒麥子,第3個(gè)格子中放4粒麥子,以后按此比例每一格加一倍,一直放到第64格(象棋的棋盤(pán)是8×8=64格),共放多少?P120麥子總粒數(shù)=1+2+22+23+…+2631m3=1.42×108粒5.3.2for循環(huán)程序舉例例5.4在象棋的棋盤(pán)第1個(gè)格23#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}p是當(dāng)前一個(gè)格子中麥子粒數(shù)t是當(dāng)前麥子總粒數(shù)v是總體積total=1.844674e+019volnme=1.299066e+011#include<stdio.h>p是當(dāng)前一個(gè)格子中麥子粒24#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改為i=1;i<=64;i++會(huì)怎樣?#include<stdio.h>改為i=1;i<=64;25#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改為i=0;i<64;i++會(huì)怎樣?#include<stdio.h>改為i=0;i<64;i26

例5.5人口增長(zhǎng)預(yù)測(cè)。據(jù)2005年末統(tǒng)計(jì),我國(guó)人口為130756萬(wàn)人,如果人口的年增長(zhǎng)率為1%,請(qǐng)計(jì)算到哪一年中國(guó)總?cè)丝诔^(guò)15億。解題思路:假設(shè)原來(lái)人口為p0

,則一年后的人口為:p=p0*(1+r),r是年增長(zhǎng)率每算出一年的人口后就檢查是否達(dá)到或超過(guò)15億。如果未達(dá)到或超過(guò),再計(jì)算下一年的人口,直到某一年的人口達(dá)到或超過(guò)15億為止例5.5人口增長(zhǎng)預(yù)測(cè)。據(jù)2005年末統(tǒng)計(jì),我國(guó)人口為27#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}原來(lái)的值1年后的值year=2019,p=1.503007e+009注意不是y2019年達(dá)到15.03007億人口#include<stdio.h>原來(lái)的值1年后的值yea28#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}計(jì)算1000年后的人口y<=3006y=3006,p=2.767941e+0133006年達(dá)到276794億人口#include<stdio.h>計(jì)算1000年后的人口y29#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}迭代公式#include<stdio.h>迭代公式305.4循環(huán)的嵌套P124一個(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))可以互相嵌套5.4循環(huán)的嵌套P124一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)315.5提前結(jié)束循環(huán)5.5.1用break語(yǔ)句提前退出循環(huán)5.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)P1245.5提前結(jié)束循環(huán)5.5.1用break語(yǔ)句提前退出循環(huán)325.5.1用break語(yǔ)句提前退出循環(huán)在執(zhí)行循環(huán)語(yǔ)句時(shí),在正常情況下只要滿足給定的循環(huán)條件,就應(yīng)當(dāng)一次一次地執(zhí)行循環(huán)體,直到不滿足給定的循環(huán)條件為止。但是有些情況下,需要提前結(jié)束循環(huán)。P1245.5.1用break語(yǔ)句提前退出循環(huán)在執(zhí)行循環(huán)語(yǔ)句時(shí),在33

例5.6統(tǒng)計(jì)各班級(jí)學(xué)生的平均成績(jī)。已知各班人數(shù)不等,但都不超過(guò)30人。編一個(gè)程序能處理人數(shù)不等的各班學(xué)生的平均成績(jī)。解題思路:輸入的成績(jī)是負(fù)數(shù)時(shí),表示本班數(shù)據(jù)已結(jié)束接收到一個(gè)負(fù)的分?jǐn)?shù)時(shí)就提前結(jié)束循環(huán)用break語(yǔ)句實(shí)現(xiàn)提前結(jié)束循環(huán)例5.6統(tǒng)計(jì)各班級(jí)學(xué)生的平均成績(jī)。已知各班人數(shù)不等,但34#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n;for(i=1;i<31;i++){ scanf(“%f”,&score);if(score<0)break;sum=sum+score; }n=i-1;ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}負(fù)值,跳出循環(huán)非負(fù),累加100↙80↙70↙-1↙

n=3,ave=90.00#include<stdio.h>負(fù)值,跳出循環(huán)非負(fù),累加35break語(yǔ)句的一般形式為:break;只能用于循環(huán)語(yǔ)句和switch語(yǔ)句之中,而不能單獨(dú)使用break語(yǔ)句的一般形式為:只能用于循環(huán)語(yǔ)句和switch語(yǔ)365.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)

continue語(yǔ)句的一般形式為:

continue;

其作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判斷。P1265.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)cont375.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)continue語(yǔ)句和break語(yǔ)句的區(qū)別:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行break語(yǔ)句結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立P1265.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)conti38假表達(dá)式1真表達(dá)式2假真…………break語(yǔ)句強(qiáng)行退出循環(huán)while(表達(dá)式1){

┇if(表達(dá)式2)

break;

┇}假表達(dá)式1真表達(dá)式2假真…………break語(yǔ)句強(qiáng)行退出循環(huán)w39假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)束本次循環(huán)while(表達(dá)式1){

┇if(表達(dá)式2)

continue;

┇}假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)40假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)束本次循環(huán)假表達(dá)式1真表達(dá)式2假真…………break語(yǔ)句強(qiáng)行退出循環(huán)假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)41

例5.7輸入一個(gè)班全體學(xué)生的成績(jī),把不及格的學(xué)生成績(jī)輸出,并求及格學(xué)生的平均成績(jī)。解題思路:在進(jìn)行循環(huán)中,檢查學(xué)生的成績(jī),把其中不及格的成績(jī)輸出,然后跳過(guò)后面總成績(jī)的累加和求平均成績(jī)的語(yǔ)句用continu語(yǔ)句處理例5.7輸入一個(gè)班全體學(xué)生的成績(jī),把不及格的學(xué)生成績(jī)42#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n=0;for(i=1;i<6;i++){printf(“score:");scanf(“%f”,&score); if(score<60){printf(“Fail:%7.2f\n”,score);

continue;}sum=sum+score;n=n+1; }ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}不及格輸出成績(jī)跳過(guò)下面語(yǔ)句score:89↙score:56↙Fail:56score:76↙score:58↙Fail:58score:98↙

n=3ave=87.67#include<stdio.h>不及格輸出成績(jī)跳過(guò)下面語(yǔ)435.6幾種循環(huán)的比較P128(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.6幾種循環(huán)的比較P128(1)一般情況下,3種循環(huán)可以445.7程序舉例P128

例5.8有一對(duì)兔子,出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,問(wèn)40個(gè)月的兔子總數(shù)為多少?5.7程序舉例P128例5.8有一對(duì)兔子,出生后第345解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題??梢詮南卤砜闯鐾米臃敝车囊?guī)律。第幾個(gè)月小兔子對(duì)數(shù)中兔子對(duì)數(shù)老兔子對(duì)數(shù)兔子總數(shù)110012010131012411135212563238753513┆┆┆┆┆每個(gè)月的兔子總數(shù)依次為1,1,2,3,5,8,13…是費(fèi)波那西(Fibonacci)數(shù)列特點(diǎn):第1、2兩個(gè)數(shù)為1、1

從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題。可以從下表看出兔子繁殖46解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題??梢詮南卤砜闯鐾米臃敝车囊?guī)律。每個(gè)月的兔子總數(shù)依次為1,1,2,3,5,8,13…是費(fèi)波那西(Fibonacci)數(shù)列特點(diǎn):第1、2兩個(gè)數(shù)為1、1

從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和f1=f1+f2f2=f2+f1fori=1to20f1=1,f2=1輸出f1,f2解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題??梢詮南卤砜闯鐾米臃敝?7#include<stdio.h>voidmain(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}控制一行輸出的數(shù)據(jù)個(gè)數(shù)在VC++中可用int型#include<stdio.h>控制一行輸出的數(shù)據(jù)個(gè)數(shù)在48例5.9有一個(gè)整數(shù)m,判斷它是否素?cái)?shù)。解題思路:所謂素?cái)?shù)(或稱(chēng)質(zhì)數(shù))是指除了1和它本身以外,不能被任何整數(shù)整除的數(shù)例如17是素?cái)?shù),因?yàn)樗荒鼙?到16間任一整數(shù)整除因此判斷一個(gè)整數(shù)m是否素?cái)?shù),只需把m被2到m-1之間的每一個(gè)整數(shù)去除,如果都不能被整除,那末m就是一個(gè)素?cái)?shù)

例5.9有一個(gè)整數(shù)m,判斷它是否素?cái)?shù)。49假假真i=i+1輸入mi=2i≤真m被i整除i>輸出是素?cái)?shù)真輸出不是素?cái)?shù)假假假真i=i+1輸入mi=2i≤真m被i整除i>輸出是50#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf(“number:");scanf(“%d”,&m);

k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf("%dprime\n",m);elseprintf("%dnotprime\n",m);}number:17↙17prime#include<stdio.h>number:17↙51

例5.10譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。ABCDEFG……WXYZ非字母字符保持原狀不變輸入一行字符,要求輸出其相應(yīng)的密碼例5.10譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)52解題思路:(1)從字母A到V,只需將字母加上4就行

例如,’A’+4就是’E’(2)從字母W到Z,將字母加4,再減去26’W’+4-26就是’A’解題思路:53解題思路:輸入一個(gè)字符給字符變量c判定它是否字母(包括大小寫(xiě)),若不是字母,不改變c的值;若是字母,則使變量c的值改變?yōu)槠浜蟮?個(gè)字母如果新的c值范圍不在字母范圍內(nèi),應(yīng)減去26解題思路:54#include<stdio.h>voidmain(){charc;while((c=getchar())!=‘\n’){if((c>=‘a(chǎn)’&&c<=‘z’)||(c>=‘A’&&c<=‘Z’)){c=c+4;if(c>‘Z’&&c<=‘Z’+4||c>‘z’)c=c-26;}printf("%c",c);}}China!↙

Glmre!#include<stdio.h>China!↙555.8提高部分5.8.1while和do…while循環(huán)的比較5.8.2for語(yǔ)句的各種形式P1325.8提高部分5.8.1while和do…while循環(huán)565.8.1while和do…while循環(huán)的比較凡是能用while循環(huán)處理的情況,都能用do…while循環(huán)處理do…while循環(huán)結(jié)構(gòu)可以轉(zhuǎn)換成while循環(huán)結(jié)構(gòu)P1325.8.1while和do…while循環(huán)的比較凡是能用w575.8.1while和do…while循環(huán)的比較P132表達(dá)式非0(真)0(假)循環(huán)體語(yǔ)句表達(dá)式非0(真)0(假)語(yǔ)句語(yǔ)句do…while語(yǔ)句while語(yǔ)句5.8.1while和do…while循環(huán)的比較P132表585.8.1while和do…while循環(huán)的比較例5.11while和do…while循環(huán)的比較以下兩個(gè)程序,循環(huán)體是相同的程序(1)用while循環(huán)程序(2)用do-while循環(huán)運(yùn)行時(shí),在有的情況下結(jié)果相同,而另一些情況下結(jié)果不同,請(qǐng)仔細(xì)分析。P1325.8.1while和do…while循環(huán)的比較例5.1159程序(1)#include<stdio.h>voidmain(){ints=0,i;scanf(“%d”,&i);while(i<=10){s=s+i;i++;}printf(“s=%d”,s);}程序(2)#include<stdio.h>voidmain(){ints=0,i;scanf(“%d”,&i);do{s=s+i;i++;}while(i<=10);printf(“s=%d”,s);}1↙s=55再運(yùn)行一次:

11↙s=01↙s=55再運(yùn)行一次:

11↙s=11當(dāng)while后面的表達(dá)式的第一次的值為“真”時(shí),兩種循環(huán)得到的結(jié)果相同;否則,二者結(jié)果不相同(相同循環(huán)體時(shí))程序(1)程序(2)1↙1↙當(dāng)while后面的表達(dá)式的第一次605.8.2for語(yǔ)句的各種形式在實(shí)際編程中,for語(yǔ)句相當(dāng)靈活,形式變化多樣。前面介紹過(guò)for語(yǔ)句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句P1345.8.2for語(yǔ)句的各種形式在實(shí)際編程中,for語(yǔ)句相當(dāng)61for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句表達(dá)式1;for(;表達(dá)式2;表達(dá)式3)語(yǔ)句for(表達(dá)式1;;表達(dá)式3)if(表達(dá)式2)語(yǔ)句for(表達(dá)式1;表達(dá)式2;){語(yǔ)句

表達(dá)式3;}for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句表達(dá)式162for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句表達(dá)式1;for(;表達(dá)式2;){語(yǔ)句

表達(dá)式3;}表達(dá)式1;for(;;){if(表達(dá)式2)語(yǔ)句

表達(dá)式3;}for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句表達(dá)式163for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式也可以是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句可以是設(shè)64for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句可以是與循環(huán)控制無(wú)關(guān)的任意表達(dá)式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句可以是與65for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句可以是一個(gè)簡(jiǎn)單的表達(dá)式也可以是逗號(hào)表達(dá)式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句可以是一66for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句

一般是關(guān)系表達(dá)式或邏輯表達(dá)式也可以是數(shù)值表達(dá)式或字符表達(dá)式只要其值為非0,就執(zhí)行循環(huán)體for(i=0;(c=getchar())!=′\n′;i+=c);作用:不斷輸入字符,將它們的ASCII碼相加,直到輸入一個(gè)“換行”符為止for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句一般是67for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句

一般是關(guān)系表達(dá)式或邏輯表達(dá)式也可以是數(shù)值表達(dá)式或字符表達(dá)式只要其值為非0,就執(zhí)行循環(huán)體for(;(c=getchar())!=′\n′;)printf(″%c″,c);作用:每讀入一個(gè)字符后立即輸出該字符,直到輸入一個(gè)“換行”為止for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句一般是68第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)695.1程序中需要用循環(huán)結(jié)構(gòu)現(xiàn)實(shí)生活中許多問(wèn)題是需要重復(fù)處理計(jì)算一個(gè)班50學(xué)生每人的平均成績(jī)工廠各車(chē)間的生產(chǎn)日?qǐng)?bào)表全國(guó)各省市的人口統(tǒng)計(jì)分析各大學(xué)招生情況統(tǒng)計(jì)全校教職工工資報(bào)表P1155.1程序中需要用循環(huán)結(jié)構(gòu)現(xiàn)實(shí)生活中許多問(wèn)題是需要重復(fù)處理70第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)課件71第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)課件725.2用while語(yǔ)句和do…while語(yǔ)句實(shí)現(xiàn)循環(huán)5.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)5.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P1155.2用while語(yǔ)句和do…while語(yǔ)句實(shí)現(xiàn)循環(huán)5.2735.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115例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ù)5.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115例5.1求1+2745.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115sum=sum+ii=i+1非0(真)i1000(假)i=15.2.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)P115sum=sum+75#include<stdio.h>voidmain(){inti,sum=0;i=1;

while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}復(fù)合語(yǔ)句能否改為i<100?#include<stdio.h>復(fù)合語(yǔ)句能否改為i<1076

while語(yǔ)句的一般形式如下:

while(表達(dá)式)語(yǔ)句循環(huán)體while語(yǔ)句的一般形式如下:循環(huán)體77

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ǔ)句語(yǔ)句非0(真)表達(dá)式0(假)while語(yǔ)句的一般形式如下:“真”時(shí)執(zhí)行循環(huán)體語(yǔ)句循環(huán)條785.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117do---while語(yǔ)句的特點(diǎn):先無(wú)條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立一般形式為:do

循環(huán)體語(yǔ)句while(表達(dá)式);表達(dá)式非0(真)0(假)循環(huán)體語(yǔ)句當(dāng)表達(dá)式的值為真循環(huán)體語(yǔ)句5.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117do---795.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117

例5.2用do…while循環(huán)求:1+2+3+…+100,即5.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117例5.805.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117解題思路:i≤100非0(真)0(假)sum=sum+ii=i+1sum=0i=1sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);

i≤100sum=sum+ii=i+1sum=0,i=15.2.2用do…while語(yǔ)句實(shí)現(xiàn)循環(huán)P117解題思路:81#include<stdio.h>voidmain(){inti,sum=0;i=1;

do{sum=sum+i;i++;}while(i<=100);printf(“%d\n”,sum);}5050#include<stdio.h>505082例5.3募集慈善基金10000元,有若干人捐款,每輸入一個(gè)人的捐款數(shù)后,計(jì)算機(jī)就輸出當(dāng)時(shí)的捐款總和。當(dāng)某一次輸入捐款數(shù)后,總和達(dá)到或超過(guò)10000元時(shí),即宣告結(jié)束,輸出最后的累加值。解題思路:設(shè)計(jì)一個(gè)循環(huán)結(jié)構(gòu),在其中輸入捐款數(shù),求出累加值,然后檢查此時(shí)的累加值是否達(dá)到或超過(guò)預(yù)定值,如果達(dá)到了,就結(jié)束循環(huán)操作例5.3募集慈善基金10000元,有若干人捐款,每輸入一個(gè)83#include<stdio.h>voidmain(){floatamount,sum=0;do{scanf("%f",&amount); sum=sum+amount;}while(sum<10000);printf("sum=%9.2f\n",sum);}循環(huán)執(zhí)行的條件1000↙

1850↙1500↙2600↙2500↙1200↙sum=10650.00#include<stdio.h>循環(huán)執(zhí)行的條件1000↙845.3用for語(yǔ)句實(shí)現(xiàn)循環(huán)P1195.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程5.3.2for循環(huán)程序舉例for語(yǔ)句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況for語(yǔ)句完全可以代替while語(yǔ)句5.3用for語(yǔ)句實(shí)現(xiàn)循環(huán)P1195.3.1for語(yǔ)句的855.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句的一般形式為

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語(yǔ)句設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值執(zhí)行5.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句865.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(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.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句875.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句的一般形式為

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語(yǔ)句作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的5.3.1for語(yǔ)句的一般形式和執(zhí)行過(guò)程P120for語(yǔ)句88for語(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ǔ)句表達(dá)式2非0(真)0(假)求解表達(dá)式3求解表達(dá)式1語(yǔ)句for語(yǔ)句的執(zhí)行過(guò)程:表達(dá)式2非0(真)0(假)求解表達(dá)式389for(i=1;i<=100;i++)sum=sum+i;等價(jià)于i=1;while(i<=100){sum=sum+i;i++; }用for語(yǔ)句更簡(jiǎn)單、方便for(i=1;i<=100;i++)用for語(yǔ)句更簡(jiǎn)單、905.3.2for循環(huán)程序舉例例5.4在象棋的棋盤(pán)第1個(gè)格子中放1粒麥子,第2個(gè)格子中放2粒麥子,第3個(gè)格子中放4粒麥子,以后按此比例每一格加一倍,一直放到第64格(象棋的棋盤(pán)是8×8=64格),共放多少?P120麥子總粒數(shù)=1+2+22+23+…+2631m3=1.42×108粒5.3.2for循環(huán)程序舉例例5.4在象棋的棋盤(pán)第1個(gè)格91#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}p是當(dāng)前一個(gè)格子中麥子粒數(shù)t是當(dāng)前麥子總粒數(shù)v是總體積total=1.844674e+019volnme=1.299066e+011#include<stdio.h>p是當(dāng)前一個(gè)格子中麥子粒92#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改為i=1;i<=64;i++會(huì)怎樣?#include<stdio.h>改為i=1;i<=64;93#include<stdio.h>voidmain(){doublep=1,t=1,v;inti;for(i=1;i<64;i++){p=p*2;t=t+p; }v=t/1.42e8;printf(“total=%e\n”,t);printf(“volume=%e\n”,v);

}改為i=0;i<64;i++會(huì)怎樣?#include<stdio.h>改為i=0;i<64;i94

例5.5人口增長(zhǎng)預(yù)測(cè)。據(jù)2005年末統(tǒng)計(jì),我國(guó)人口為130756萬(wàn)人,如果人口的年增長(zhǎng)率為1%,請(qǐng)計(jì)算到哪一年中國(guó)總?cè)丝诔^(guò)15億。解題思路:假設(shè)原來(lái)人口為p0

,則一年后的人口為:p=p0*(1+r),r是年增長(zhǎng)率每算出一年的人口后就檢查是否達(dá)到或超過(guò)15億。如果未達(dá)到或超過(guò),再計(jì)算下一年的人口,直到某一年的人口達(dá)到或超過(guò)15億為止例5.5人口增長(zhǎng)預(yù)測(cè)。據(jù)2005年末統(tǒng)計(jì),我國(guó)人口為95#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}原來(lái)的值1年后的值year=2019,p=1.503007e+009注意不是y2019年達(dá)到15.03007億人口#include<stdio.h>原來(lái)的值1年后的值yea96#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}計(jì)算1000年后的人口y<=3006y=3006,p=2.767941e+0133006年達(dá)到276794億人口#include<stdio.h>計(jì)算1000年后的人口y97#include<stdio.h>voidmain(){doublep=1.30756e9,r=0.01;inty;for(y=2006;p<1.5e9;y++)p=p*(1+r);printf("year=%d,p=%e\n",y-1,p);}迭代公式#include<stdio.h>迭代公式985.4循環(huán)的嵌套P124一個(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))可以互相嵌套5.4循環(huán)的嵌套P124一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)995.5提前結(jié)束循環(huán)5.5.1用break語(yǔ)句提前退出循環(huán)5.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)P1245.5提前結(jié)束循環(huán)5.5.1用break語(yǔ)句提前退出循環(huán)1005.5.1用break語(yǔ)句提前退出循環(huán)在執(zhí)行循環(huán)語(yǔ)句時(shí),在正常情況下只要滿足給定的循環(huán)條件,就應(yīng)當(dāng)一次一次地執(zhí)行循環(huán)體,直到不滿足給定的循環(huán)條件為止。但是有些情況下,需要提前結(jié)束循環(huán)。P1245.5.1用break語(yǔ)句提前退出循環(huán)在執(zhí)行循環(huán)語(yǔ)句時(shí),在101

例5.6統(tǒng)計(jì)各班級(jí)學(xué)生的平均成績(jī)。已知各班人數(shù)不等,但都不超過(guò)30人。編一個(gè)程序能處理人數(shù)不等的各班學(xué)生的平均成績(jī)。解題思路:輸入的成績(jī)是負(fù)數(shù)時(shí),表示本班數(shù)據(jù)已結(jié)束接收到一個(gè)負(fù)的分?jǐn)?shù)時(shí)就提前結(jié)束循環(huán)用break語(yǔ)句實(shí)現(xiàn)提前結(jié)束循環(huán)例5.6統(tǒng)計(jì)各班級(jí)學(xué)生的平均成績(jī)。已知各班人數(shù)不等,但102#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n;for(i=1;i<31;i++){ scanf(“%f”,&score);if(score<0)break;sum=sum+score; }n=i-1;ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}負(fù)值,跳出循環(huán)非負(fù),累加100↙80↙70↙-1↙

n=3,ave=90.00#include<stdio.h>負(fù)值,跳出循環(huán)非負(fù),累加103break語(yǔ)句的一般形式為:break;只能用于循環(huán)語(yǔ)句和switch語(yǔ)句之中,而不能單獨(dú)使用break語(yǔ)句的一般形式為:只能用于循環(huán)語(yǔ)句和switch語(yǔ)1045.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)

continue語(yǔ)句的一般形式為:

continue;

其作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判斷。P1265.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)cont1055.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)continue語(yǔ)句和break語(yǔ)句的區(qū)別:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行break語(yǔ)句結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立P1265.5.2用continue語(yǔ)句提前結(jié)束本次循環(huán)conti106假表達(dá)式1真表達(dá)式2假真…………break語(yǔ)句強(qiáng)行退出循環(huán)while(表達(dá)式1){

┇if(表達(dá)式2)

break;

┇}假表達(dá)式1真表達(dá)式2假真…………break語(yǔ)句強(qiáng)行退出循環(huán)w107假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)束本次循環(huán)while(表達(dá)式1){

┇if(表達(dá)式2)

continue;

┇}假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)108假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)束本次循環(huán)假表達(dá)式1真表達(dá)式2假真…………break語(yǔ)句強(qiáng)行退出循環(huán)假表達(dá)式1真表達(dá)式2假……真…………continue語(yǔ)句只結(jié)109

例5.7輸入一個(gè)班全體學(xué)生的成績(jī),把不及格的學(xué)生成績(jī)輸出,并求及格學(xué)生的平均成績(jī)。解題思路:在進(jìn)行循環(huán)中,檢查學(xué)生的成績(jī),把其中不及格的成績(jī)輸出,然后跳過(guò)后面總成績(jī)的累加和求平均成績(jī)的語(yǔ)句用continu語(yǔ)句處理例5.7輸入一個(gè)班全體學(xué)生的成績(jī),把不及格的學(xué)生成績(jī)110#include<stdio.h>voidmain(){floatscore,sum=0,ave;inti,n=0;for(i=1;i<6;i++){printf(“score:");scanf(“%f”,&score); if(score<60){printf(“Fail:%7.2f\n”,score);

continue;}sum=sum+score;n=n+1; }ave=sum/n;printf(“n=%d,ave=%7.2f\n”,n,ave);}不及格輸出成績(jī)跳過(guò)下面語(yǔ)句score:89↙score:56↙Fail:56score:76↙score:58↙Fail:58score:98↙

n=3ave=87.67#include<stdio.h>不及格輸出成績(jī)跳過(guò)下面語(yǔ)1115.6幾種循環(huán)的比較P128(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.6幾種循環(huán)的比較P128(1)一般情況下,3種循環(huán)可以1125.7程序舉例P128

例5.8有一對(duì)兔子,出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,問(wèn)40個(gè)月的兔子總數(shù)為多少?5.7程序舉例P128例5.8有一對(duì)兔子,出生后第3113解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題??梢詮南卤砜闯鐾米臃敝车囊?guī)律。第幾個(gè)月小兔子對(duì)數(shù)中兔子對(duì)數(shù)老兔子對(duì)數(shù)兔子總數(shù)110012010131012411135212563238753513┆┆┆┆┆每個(gè)月的兔子總數(shù)依次為1,1,2,3,5,8,13…是費(fèi)波那西(Fibonacci)數(shù)列特點(diǎn):第1、2兩個(gè)數(shù)為1、1

從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題。可以從下表看出兔子繁殖114解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題??梢詮南卤砜闯鐾米臃敝车囊?guī)律。每個(gè)月的兔子總數(shù)依次為1,1,2,3,5,8,13…是費(fèi)波那西(Fibonacci)數(shù)列特點(diǎn):第1、2兩個(gè)數(shù)為1、1

從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和f1=f1+f2f2=f2+f1fori=1to20f1=1,f2=1輸出f1,f2解題思路:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題。可以從下表看出兔子繁殖115#include<stdio.h>voidmain(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}控制一行輸出的數(shù)據(jù)個(gè)數(shù)在VC++中可用int型#include<stdio.h>控制一行輸出的數(shù)據(jù)個(gè)數(shù)在116例5.9有一個(gè)整數(shù)m,判斷它是否素?cái)?shù)。解題思路:所謂素?cái)?shù)(或稱(chēng)質(zhì)數(shù))是指除了1和它本身以外,不能被任何整數(shù)整除的數(shù)例如17是素?cái)?shù),因?yàn)樗荒鼙?到16間任一整數(shù)整除因此判斷一個(gè)整數(shù)m是否素?cái)?shù),只需把m被2到m-1之間的每一個(gè)整數(shù)去除,如果都不能被整除,那末m就是一個(gè)素?cái)?shù)

例5.9有一個(gè)整數(shù)m,判斷它是否素?cái)?shù)。117假假真i=i+1輸入mi=2i≤真m被i整除i>輸出是素?cái)?shù)真輸出不是素?cái)?shù)假假假真i=i+1輸入mi=2i≤真m被i整除i>輸出是118#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf(“number:");scanf(“%d”,&m);

k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf("%dprime\n",m);elseprintf("%dnotprime\n",m);}number:17↙17prime#include<stdio.h>number:17↙119

例5.10譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。ABCDEFG……WXYZ非字母字符保持原狀不變輸入一行字符,要求輸出其相應(yīng)的密碼例5.10譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)120解題思路:(1)從字母A到V,只需將字母加上4就行

例如,’A’+4就是’E’(2)從字母W到Z,將字母加4,再減去26’W’+4-26就是’A’解題思路:121解題思路:輸入一個(gè)字符給字符變量c判定它是否字母(包括大小寫(xiě)),若不是字母,不改變c的值;若是字母,則使變量c的值改變?yōu)槠浜蟮?個(gè)字母如果新的c值范圍不在字母范圍內(nèi),應(yīng)減去26解題思路:122#include<stdio.h>voidmain(){charc;while((c=getchar())!=‘\n’){if((c>=‘a(chǎn)’&&c<=‘z’)||

溫馨提示

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