C語(yǔ)言程序設(shè)計(jì):第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
《C語(yǔ)言程序設(shè)計(jì):第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《C語(yǔ)言程序設(shè)計(jì):第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(82頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、5.1 為什么需要循環(huán)控制為什么需要循環(huán)控制5.2 用用while語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)5.3 用用do-while語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)5.4 用用for 語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)5.5 循環(huán)的嵌套循環(huán)的嵌套5.6 幾種循環(huán)的比較幾種循環(huán)的比較5.7 改變循環(huán)執(zhí)行的狀態(tài)改變循環(huán)執(zhí)行的狀態(tài)5.8 循環(huán)程序舉例循環(huán)程序舉例在日常生活中或是在程序所處理的問(wèn)題在日常生活中或是在程序所處理的問(wèn)題中常常遇到需要重復(fù)處理的問(wèn)題中常常遇到需要重復(fù)處理的問(wèn)題u要向計(jì)算機(jī)輸入全班要向計(jì)算機(jī)輸入全班50個(gè)學(xué)生的成績(jī)個(gè)學(xué)生的成績(jī)u分別統(tǒng)計(jì)全班分別統(tǒng)計(jì)全班50個(gè)學(xué)生的平均成績(jī)個(gè)學(xué)生的平均成績(jī)u求求30個(gè)整數(shù)之和個(gè)
2、整數(shù)之和u教師檢查教師檢查30個(gè)學(xué)生的成績(jī)是否及格個(gè)學(xué)生的成績(jī)是否及格例如:全班有例如:全班有50個(gè)學(xué)生個(gè)學(xué)生,統(tǒng)計(jì)各學(xué)生,統(tǒng)計(jì)各學(xué)生三門(mén)課三門(mén)課的平均成績(jī)的平均成績(jī)。scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver); 輸入學(xué)生輸入學(xué)生1的三門(mén)課成績(jī),并計(jì)算平均值后輸出的三門(mén)課成績(jī),并計(jì)算平均值后輸出scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver); 輸入學(xué)生輸入學(xué)生2的三門(mén)課成績(jī),并計(jì)算平均值后輸出
3、的三門(mén)課成績(jī),并計(jì)算平均值后輸出要對(duì)要對(duì)50個(gè)學(xué)生進(jìn)行相同操作個(gè)學(xué)生進(jìn)行相同操作重復(fù)重復(fù)50次次大多數(shù)的應(yīng)用程序都會(huì)包含循環(huán)結(jié)構(gòu)大多數(shù)的應(yīng)用程序都會(huì)包含循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的化程序設(shè)計(jì)的三種基本結(jié)構(gòu)三種基本結(jié)構(gòu),它們是各,它們是各種復(fù)雜程序的基本構(gòu)造單元種復(fù)雜程序的基本構(gòu)造單元全班有全班有50個(gè)學(xué)生個(gè)學(xué)生,統(tǒng)計(jì)各學(xué)生三門(mén)課,統(tǒng)計(jì)各學(xué)生三門(mén)課的平均成績(jī)的平均成績(jī)。i=1i0輸入一個(gè)學(xué)生成績(jī)輸入一個(gè)學(xué)生成績(jī)求一個(gè)學(xué)生平均成績(jī)求一個(gè)學(xué)生平均成績(jī)輸出一個(gè)學(xué)生平均成績(jī)輸出一個(gè)學(xué)生平均成績(jī)i增增1YN用用while循環(huán)結(jié)構(gòu)實(shí)現(xiàn)循環(huán)結(jié)構(gòu)實(shí)現(xiàn)w
4、hile(i=50) scanf ; aver= ; printf ; i+; while語(yǔ)句的一般形式如下:語(yǔ)句的一般形式如下: while (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句循環(huán)體循環(huán)體 while語(yǔ)句的一般形式如下:語(yǔ)句的一般形式如下: while (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句“真真”時(shí)時(shí)執(zhí)行循環(huán)體語(yǔ)句執(zhí)行循環(huán)體語(yǔ)句“假假”時(shí)不執(zhí)行時(shí)不執(zhí)行循環(huán)條件表達(dá)式循環(huán)條件表達(dá)式while循環(huán)的特點(diǎn)是:循環(huán)的特點(diǎn)是:先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句例例5.1求求1+2+3+100,即,即解題思路:解題思路:u這是累加問(wèn)題,需要先后將這是累加問(wèn)題,需要先后將100個(gè)數(shù)相加個(gè)數(shù)
5、相加u要重復(fù)要重復(fù)100次加法運(yùn)算,可用循環(huán)實(shí)現(xiàn)次加法運(yùn)算,可用循環(huán)實(shí)現(xiàn)u后一個(gè)數(shù)是前一個(gè)數(shù)加后一個(gè)數(shù)是前一個(gè)數(shù)加1而得而得u加完上一個(gè)數(shù)加完上一個(gè)數(shù)i后,使后,使i加加1可得到下一個(gè)數(shù)可得到下一個(gè)數(shù)1001nn#include int main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); return 0;復(fù)合語(yǔ)句復(fù)合語(yǔ)句不能少不能少#include int main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); r
6、eturn 0;不能丟,否則不能丟,否則循環(huán)永不結(jié)束循環(huán)永不結(jié)束do-while語(yǔ)句的特點(diǎn):先無(wú)條件地執(zhí)語(yǔ)句的特點(diǎn):先無(wú)條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立行循環(huán)體,然后判斷循環(huán)條件是否成立do-while語(yǔ)句的一般形式為:語(yǔ)句的一般形式為: do 語(yǔ)句語(yǔ)句 while (表達(dá)式表達(dá)式);表達(dá)式表達(dá)式Y(jié)N循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 例例5.2 用用dowhile語(yǔ)句求語(yǔ)句求: 1+2+3+100,即,即1001nn解題思路:解題思路:i 100YNsum=sum+ii=i+1sum=0i=1 i=1; sum=0; do sum=sum+i; i+; while(i=100); #includ
7、e int main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(sum=%dn,sum); return 0;例例5.3 while和和do-while循環(huán)的比較。循環(huán)的比較。int i,sum=0;printf(“i=?”);scanf(“%d”,&i);while(i=10) sum=sum+i; i+;printf(“sum=%dn,sum);int i,sum=0;printf(“i=?”);scanf(“%d”,&i);do sum=sum+i; i+;while(i=10);printf(“sum=%dn,sum
8、);當(dāng)當(dāng)while后面的表達(dá)式的第一次的值為后面的表達(dá)式的第一次的值為“真真”時(shí),兩種循環(huán)得到的結(jié)果相同;否則不相同時(shí),兩種循環(huán)得到的結(jié)果相同;否則不相同for語(yǔ)句不僅可以用于循環(huán)次數(shù)已經(jīng)確語(yǔ)句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況而只給出循環(huán)結(jié)束條件的情況for語(yǔ)句完全可以代替語(yǔ)句完全可以代替while語(yǔ)句語(yǔ)句printf(%d , i );i+i=100i=1for (i=1;i=100;i+) printf(%d , i ); i 100YNi=i+1i=1輸出輸出ifor語(yǔ)句的一般形式為語(yǔ)句的一般形式為
9、for(表達(dá)式表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3) 語(yǔ)句語(yǔ)句設(shè)置初始條件,只執(zhí)行一設(shè)置初始條件,只執(zhí)行一次。可以為零個(gè)、一個(gè)或次。可以為零個(gè)、一個(gè)或多個(gè)變量設(shè)置初值多個(gè)變量設(shè)置初值執(zhí)行執(zhí)行for語(yǔ)句的一般形式為語(yǔ)句的一般形式為 for(表達(dá)式表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3) 語(yǔ)句語(yǔ)句循環(huán)條件表達(dá)式,用來(lái)判定是否繼續(xù)循環(huán)條件表達(dá)式,用來(lái)判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)for語(yǔ)句的一般形式為語(yǔ)句的一般形式為 for(表達(dá)式表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3) 語(yǔ)句語(yǔ)
10、句作為循環(huán)的調(diào)整器,例如作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的執(zhí)行完循環(huán)體后才進(jìn)行的for語(yǔ)句的執(zhí)行過(guò)程語(yǔ)句的執(zhí)行過(guò)程:(1) 先求解表達(dá)式先求解表達(dá)式1(2) 求解表達(dá)式求解表達(dá)式2,若,若其其值為真,執(zhí)行循環(huán)體,值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第轉(zhuǎn)到第(5)步步(3) 求解表達(dá)式求解表達(dá)式3(4) 轉(zhuǎn)回上面步驟轉(zhuǎn)回上面步驟(2)繼續(xù)執(zhí)行繼續(xù)執(zhí)行(5) 循環(huán)結(jié)束,執(zhí)行循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句語(yǔ)句下面的一個(gè)語(yǔ)句for(i=1;i=100;i+) sum=su
11、m+i;等價(jià)于等價(jià)于i=1;while(i=100) sum=sum+i; i+;用用for語(yǔ)句語(yǔ)句更更簡(jiǎn)單、方便簡(jiǎn)單、方便for(表達(dá)式表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3) 語(yǔ)句語(yǔ)句一個(gè)或兩個(gè)或三個(gè)一個(gè)或兩個(gè)或三個(gè)表達(dá)式均可以省略表達(dá)式均可以省略for (sum=0 ; i=100; i+) sum=sum+i; 與循環(huán)變量無(wú)關(guān)與循環(huán)變量無(wú)關(guān)合法合法for(sum=0,i=1 ; i=100; i+) sum=sum+i; 逗號(hào)表達(dá)式逗號(hào)表達(dá)式合法合法for(i=0,j=100 ; i=j; i+,j- ) k=i+j; for(i=0; (c=getchar()!=n; i+=c
12、) ; 合法合法for( ; (c=getchar()!=n; ) printf(%c,c); 一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為結(jié)構(gòu),稱(chēng)為循環(huán)的嵌套循環(huán)的嵌套內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)多層循環(huán)3種循環(huán)種循環(huán)(while循環(huán)、循環(huán)、dowhile循環(huán)和循環(huán)和for循環(huán)循環(huán))可以互相嵌套可以互相嵌套(1)一般情況下一般情況下,3種循環(huán)可以互相代替種循環(huán)可以互相代替(2) 在在while和和do-while循環(huán)中,循環(huán)體循環(huán)中,循環(huán)體應(yīng)應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句。包含使循環(huán)趨于結(jié)束的語(yǔ)句。(3) 用用wh
13、ile和和do-while循環(huán)時(shí),循環(huán)變循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在量初始化的操作應(yīng)在while和和do-while語(yǔ)句之前完成。而語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。中實(shí)現(xiàn)循環(huán)變量的初始化。5.7.1 用用break語(yǔ)句提前終止循環(huán)語(yǔ)句提前終止循環(huán)5.7.2 用用continue語(yǔ)句提前結(jié)束本次循環(huán)語(yǔ)句提前結(jié)束本次循環(huán)5.7.3 break語(yǔ)句和語(yǔ)句和continue語(yǔ)句的區(qū)別語(yǔ)句的區(qū)別break語(yǔ)句可以用來(lái)從循環(huán)體內(nèi)跳出語(yǔ)句可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句循環(huán)下面的語(yǔ)句 例例
14、5.4 在全系在全系1000學(xué)生中,征集慈善學(xué)生中,征集慈善募捐,當(dāng)總數(shù)達(dá)到募捐,當(dāng)總數(shù)達(dá)到10萬(wàn)元時(shí)就結(jié)束,萬(wàn)元時(shí)就結(jié)束,統(tǒng)計(jì)此時(shí)捐款的人數(shù),以及平均每人統(tǒng)計(jì)此時(shí)捐款的人數(shù),以及平均每人捐款的數(shù)目。捐款的數(shù)目。編程思路:編程思路:u循環(huán)次數(shù)不確定,循環(huán)次數(shù)不確定,但最多循環(huán)但最多循環(huán)1000次次l在循環(huán)體中累計(jì)捐款總數(shù)在循環(huán)體中累計(jì)捐款總數(shù)l用用if語(yǔ)句檢查是否達(dá)到語(yǔ)句檢查是否達(dá)到10萬(wàn)元萬(wàn)元l如果達(dá)到就不再繼續(xù)執(zhí)行循環(huán),終止累加如果達(dá)到就不再繼續(xù)執(zhí)行循環(huán),終止累加u計(jì)算計(jì)算人均捐款數(shù)人均捐款數(shù)編程思路:編程思路:u變量變量amount,用來(lái)存放捐款數(shù),用來(lái)存放捐款數(shù)u變量變量total,用
15、來(lái)存放累加后的總捐款數(shù),用來(lái)存放累加后的總捐款數(shù)u變量變量aver,用來(lái)存放人均捐款數(shù),用來(lái)存放人均捐款數(shù)u定義符號(hào)常量定義符號(hào)常量SUM代表代表100000#include #define SUM 100000int main() float amount,aver,total; int i; for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“ ,i,aver); return 0;指定符號(hào)常量指定符號(hào)常量SUM代表代表100000#include #define SUM 100000int
16、 main() float amount,aver,total; int i; for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“ ,i,aver); return 0;應(yīng)該執(zhí)行應(yīng)該執(zhí)行1000次次#include #define SUM 100000int main() float amount,aver,total; int i; for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“ ,i,
17、aver); return 0;達(dá)到達(dá)到10萬(wàn),萬(wàn),提前結(jié)束循環(huán)提前結(jié)束循環(huán)#include #define SUM 100000int main() float amount,aver,total; int i; for (i=1,total=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“ ,i,aver); return 0;實(shí)際捐款人數(shù)實(shí)際捐款人數(shù)#include #define SUM 100000int main() float amount,aver,total; int i; for (i=1,total
18、=0;i=SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“ ,i,aver); return 0;只能用于循環(huán)語(yǔ)句和只能用于循環(huán)語(yǔ)句和switch語(yǔ)句之中,而不能語(yǔ)句之中,而不能單獨(dú)單獨(dú)使用使用有時(shí)并不希望終止整個(gè)循環(huán)的操作,而有時(shí)并不希望終止整個(gè)循環(huán)的操作,而只希望提前結(jié)束本次循環(huán),而接著執(zhí)行只希望提前結(jié)束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時(shí)可以用下次循環(huán)。這時(shí)可以用continue語(yǔ)句語(yǔ)句 例例5.5 要求輸出要求輸出100200之間的不能之間的不能被被3整除的數(shù)。整除的數(shù)。編程思路:編程思路:u對(duì)對(duì)100到到200之間的每一
19、個(gè)整數(shù)進(jìn)行檢查之間的每一個(gè)整數(shù)進(jìn)行檢查u如果不能被如果不能被3整除,輸出,整除,輸出,否則否則不輸出不輸出u無(wú)論是否輸出此數(shù),都要接著檢查下一個(gè)無(wú)論是否輸出此數(shù),都要接著檢查下一個(gè)數(shù)數(shù)(直到直到200為止為止)。Nn=100n200Yn能被能被3整除整除Nn=n+1輸出輸出nYfor(n=100;n=200;n+) if (n%3=0) continue; printf(%d ,n); continue語(yǔ)句只結(jié)束本次循環(huán),而不語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行是終止整個(gè)循環(huán)的執(zhí)行break語(yǔ)句結(jié)束整個(gè)循環(huán)過(guò)程,不再判語(yǔ)句結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立斷執(zhí)行循環(huán)的條件
20、是否成立N表達(dá)式表達(dá)式1Y表達(dá)式表達(dá)式2NYN表達(dá)式表達(dá)式1Y表達(dá)式表達(dá)式2NYbreak語(yǔ)句語(yǔ)句continue語(yǔ)句語(yǔ)句強(qiáng)行退出循環(huán)強(qiáng)行退出循環(huán)只結(jié)束本次循環(huán)只結(jié)束本次循環(huán)例例5.6 輸出以下輸出以下4*5的矩陣。的矩陣。 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20解題思路:解題思路:u可以用循環(huán)的嵌套來(lái)處理此問(wèn)題可以用循環(huán)的嵌套來(lái)處理此問(wèn)題u用外循環(huán)來(lái)輸出一行數(shù)據(jù)用外循環(huán)來(lái)輸出一行數(shù)據(jù)u用內(nèi)循環(huán)來(lái)輸出一列數(shù)據(jù)用內(nèi)循環(huán)來(lái)輸出一列數(shù)據(jù)u按按矩陣的格式矩陣的格式(每行每行5個(gè)數(shù)據(jù)個(gè)數(shù)據(jù))輸出輸出#include int main() int i,j
21、,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;累計(jì)輸出數(shù)據(jù)的個(gè)數(shù)累計(jì)輸出數(shù)據(jù)的個(gè)數(shù)控制控制一行內(nèi)一行內(nèi)輸輸出出5個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;雙重循環(huán)雙重循環(huán)#include int m
22、ain() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;控制輸出控制輸出4行行#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;控制每行中輸控制每行中輸出出5個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)#include int mai
23、n() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;i=1時(shí)時(shí)j由由1變到變到5i*j的值是的值是1,2,3,4,5#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;i=2時(shí)時(shí)j也也由由1變到變到5i*
24、j的值是的值是2,4,6,8,10如何修改程序,不輸如何修改程序,不輸出第一行的空行?出第一行的空行?#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;if (i=3 & j=1) break; 遇到第遇到第3行第行第1列,列,終止內(nèi)循環(huán)終止內(nèi)循環(huán)#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+
25、) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;if (i=3 & j=1) continue; 原來(lái)第原來(lái)第3行第行第1個(gè)個(gè)數(shù)據(jù)數(shù)據(jù)3沒(méi)有輸出沒(méi)有輸出 例例5.7用用 公式求公式求 的的近似值,直到發(fā)現(xiàn)某一項(xiàng)的絕對(duì)值小于近似值,直到發(fā)現(xiàn)某一項(xiàng)的絕對(duì)值小于10-6 為止為止(該項(xiàng)不累計(jì)加該項(xiàng)不累計(jì)加)。71513114解題思路:解題思路:u求求 近似近似值的值的方法方法很多,本題是很多,本題是一種一種u其他方法:其他方法:2222213121116n722)2() 1(75665344312222nnn每項(xiàng)的分子
26、都是每項(xiàng)的分子都是1后一項(xiàng)的分母是前一項(xiàng)的分母加后一項(xiàng)的分母是前一項(xiàng)的分母加2第第1項(xiàng)的符號(hào)為正,從第項(xiàng)的符號(hào)為正,從第2項(xiàng)起,每一項(xiàng)的符項(xiàng)起,每一項(xiàng)的符號(hào)與前一項(xiàng)的符號(hào)相反號(hào)與前一項(xiàng)的符號(hào)相反71513114n121nsign=1,pi=0,n=1,term=1當(dāng)當(dāng)term 10-6pi=pi+termn=n+1sing=-signterm=sign/npi=pi*4輸出輸出pi#include #include int main() int sign=1; double pi=0,n=1,term=1; while(fabs(term)=1e-6) pi=pi+term; n=n+2; s
27、ign=-sign; term=sign/n; pi=pi*4; printf(pi=%10.8fn,pi); return 0;求絕對(duì)值的函數(shù)求絕對(duì)值的函數(shù)只保證前只保證前5位小數(shù)是準(zhǔn)確的位小數(shù)是準(zhǔn)確的#include #include int main() int sign=1; double pi=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.8fn,pi); return 0;改為改為1e-8 例例5.8 求費(fèi)波那西求費(fèi)波那西
28、(Fibonacci)數(shù)列的數(shù)列的前前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2兩個(gè)數(shù)為兩個(gè)數(shù)為1、1。從第。從第3個(gè)數(shù)開(kāi)始,該數(shù)個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和。即是其前面兩個(gè)數(shù)之和。即:) 3()2(1) 1(12121nFFFnFnFnnn這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題:這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題:u有一對(duì)兔子,從出生后第有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生個(gè)月起每個(gè)月都生一對(duì)兔子。一對(duì)兔子。u小兔子長(zhǎng)到第小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子。個(gè)月后每個(gè)月又生一對(duì)兔子。u假設(shè)所有兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為假設(shè)所有兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?多少?
29、第幾第幾個(gè)月個(gè)月小兔子小兔子對(duì)數(shù)對(duì)數(shù)中兔子中兔子對(duì)數(shù)對(duì)數(shù)老兔子老兔子對(duì)數(shù)對(duì)數(shù)兔子兔子總數(shù)總數(shù)110012010131012411135212563238753513輸出輸出f1,f2For i=1 to 38f3=f1+f2輸出輸出f3f1=f2f2=f3f1=1,f2=1#include int main() int f1=1,f2=1,f3; int i; printf(%12dn%12dn,f1,f2); for(i=1; i=38; i+) f3=f1+f2; printf(%12dn,f3); f1=f2; f2=f3; return 0;代碼可改進(jìn)代碼可改進(jìn)#include int
30、 main() int f1=1,f2=1; int i; for(i=1; i=20; i+) printf(%12d %12d ,f1,f2); if(i%2=0) printf(n); f1=f1+f2; f2=f2+f1; return 0; 例例5.9輸入一個(gè)大于輸入一個(gè)大于3的整數(shù)的整數(shù)n,判定它,判定它是否素?cái)?shù)是否素?cái)?shù)(prime,又稱(chēng)質(zhì)數(shù),又稱(chēng)質(zhì)數(shù))。解題思路:解題思路:u讓讓n被被i整整除除(i的值從的值從2變到變到n-1)u如果如果n能被能被2(n-1)之中任何一個(gè)整數(shù)整除之中任何一個(gè)整數(shù)整除,則表示,則表示n肯定不是素?cái)?shù),不必再繼續(xù)被后面肯定不是素?cái)?shù),不必再繼續(xù)被后面的整
31、數(shù)除,因此,可以提前結(jié)束循環(huán)的整數(shù)除,因此,可以提前結(jié)束循環(huán)u注意:此時(shí)注意:此時(shí)i的值必然小于的值必然小于nNNYi=i+1輸入輸入ni=2i n-1Yn被被i整除整除i n輸出不是素?cái)?shù)輸出不是素?cái)?shù)Y輸出是素?cái)?shù)輸出是素?cái)?shù)N#include int main() int n,i; printf(“n=?); scanf(%d,&n); for (i=2;i=n-1;i+) if(n%i=0) break; if(in) printf(%d is notn,n); else printf(%d isn,n); return 0;#include int main() int n,i; print
32、f(“n=?); scanf(%d,&n); for (i=2;i=n-1;i+) if(n%i=0) break; if(in) printf(%d is notn,n); else printf(%d isn,n); return 0;nk=sqrt(n);#include int main() int n,i,k; printf(“n=?); scanf(%d,&n); for (i=2; i=k; i+) if(n%i=0) break; if(in) printf(%d is notn,n); else printf(%d isn,n); return 0;k=sqrt(n);#in
33、clude #include int main() int n,i,k; printf(“n=?); scanf(%d,&n); for (i=2; i=k; i+) if(n%i=0) break; if(i=k) printf(%d is notn,n); else printf(%d isn,n); return 0;k=sqrt(n);#include 例例5.10 求求100200間的全部素?cái)?shù)。間的全部素?cái)?shù)。解題思路:解題思路:u使用使用例例5.9的的算法算法u在在例例5.9程序中程序中只要增加一個(gè)外循環(huán),先后對(duì)只要增加一個(gè)外循環(huán),先后對(duì)100200間的全部整數(shù)一一進(jìn)行判定即可間的全
34、部整數(shù)一一進(jìn)行判定即可 for(n=101;n=200;n=n+2) k=sqrt(n); for (i=2;i=k+1) printf(%d ,n); m=m+1; if(m%10=0) printf(“n”); 只對(duì)奇數(shù)進(jìn)行檢查只對(duì)奇數(shù)進(jìn)行檢查控制每行輸出控制每行輸出10個(gè)數(shù)據(jù)個(gè)數(shù)據(jù) 例例5.11 譯密碼。為使電文保密,往往按譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。定的規(guī)律將其譯回原文。A B C D E F G W X Y Z非字母字符保持原狀不變非字母字符保持原狀不變輸入一行字符,要求輸出其相應(yīng)的密碼輸入
35、一行字符,要求輸出其相應(yīng)的密碼解題思路:?jiǎn)栴}的關(guān)鍵有兩個(gè):解題思路:?jiǎn)栴}的關(guān)鍵有兩個(gè): (1) 決定哪些字符不需要改變,哪些字符需要決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個(gè)字符改變,如果需要改變,應(yīng)改為哪個(gè)字符u處理的方法是:輸入一個(gè)字符給字符變量處理的方法是:輸入一個(gè)字符給字符變量c,先判定它是否字母先判定它是否字母(包括大小寫(xiě)包括大小寫(xiě)),若不是字母,若不是字母,不改變,不改變c的值;若是字母,則還要檢查它是的值;若是字母,則還要檢查它是否否W到到Z的范圍內(nèi)的范圍內(nèi)(包括大小寫(xiě)字母包括大小寫(xiě)字母)。如不。如不在此范圍內(nèi),則使變量在此范圍內(nèi),則使變量c的值改變?yōu)槠浜?/p>
36、第的值改變?yōu)槠浜蟮?個(gè)個(gè)字母。如果在字母。如果在W到到Z的范圍內(nèi),則應(yīng)將它轉(zhuǎn)的范圍內(nèi),則應(yīng)將它轉(zhuǎn)換為換為AD(或或ad)之一的字母。之一的字母。c=getchar(); 解題思路:?jiǎn)栴}的關(guān)鍵有兩個(gè):解題思路:?jiǎn)栴}的關(guān)鍵有兩個(gè): (1) 決定哪些字符不需要改變,哪些字符需要決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應(yīng)改為哪個(gè)字符改變,如果需要改變,應(yīng)改為哪個(gè)字符u處理的方法是:輸入一個(gè)字符給字符變量處理的方法是:輸入一個(gè)字符給字符變量c,先判定它是否字母先判定它是否字母(包括大小寫(xiě)包括大小寫(xiě)),若不是字母,若不是字母,不改變,不改變c的值;若是字母,則還要檢查它是的值;若是字母,則還要檢查它是否否W到到Z的范圍內(nèi)的范圍內(nèi)(包括大小寫(xiě)字母包括大小寫(xiě)字母)。如不。如不在此范圍內(nèi),則使變量在此范圍內(nèi),則使變量c的值改變?yōu)槠浜蟮诘闹蹈淖優(yōu)槠浜蟮?個(gè)個(gè)字母。如果在字母。如果在W到到Z的范圍內(nèi),則應(yīng)將它轉(zhuǎn)的范圍內(nèi),則應(yīng)將它轉(zhuǎn)換為換為AD(或或ad)之一的字母。之一的字母。if(c=a & c=A & c=W & c=w & c=a & c=A & c=W & c=w & c=A & c=a & c=Z & cz) c=c-26; printf(%c,c); 不能少不能少
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案