版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第5章 循環(huán)結(jié)構(gòu)程序設(shè)計5.1 為什么需要循環(huán)控制5.2 用while語句實現(xiàn)循環(huán)5.3 用do-while語句實現(xiàn)循環(huán)5.4 用for 語句實現(xiàn)循環(huán)5.5 循環(huán)的嵌套5.6 幾種循環(huán)的比較5.7 改變循環(huán)執(zhí)行的狀態(tài)5.8 循環(huán)程序舉例15.1為什么需要循環(huán)控制在日常生活中或是在程序所處理的問題中常常遇到需要重復(fù)處理的問題要向計算機輸入全班50個學(xué)生的成績分別統(tǒng)計全班50個學(xué)生的平均成績求30個整數(shù)之和教師檢查30個學(xué)生的成績是否及格25.1為什么需要循環(huán)控制例如:全班有50個學(xué)生,統(tǒng)計各學(xué)生三門課的平均成績。3scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2
2、+s3)/3;printf(“aver=%7.2f”,aver); 輸入學(xué)生1的三門課成績,并計算平均值后輸出scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver); 輸入學(xué)生2的三門課成績,并計算平均值后輸出要對50個學(xué)生進行相同操作重復(fù)50次4大多數(shù)的應(yīng)用程序都會包含循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu),它們是各種復(fù)雜程序的基本構(gòu)造單元55.2用while語句實現(xiàn)循環(huán)全班有50個學(xué)生,統(tǒng)計各學(xué)生三門課的平均成績。6i=1i0輸入一個學(xué)生成績求一個學(xué)生平均成績輸出一個學(xué)生
3、平均成績i增1YN用while循環(huán)結(jié)構(gòu)實現(xiàn)while(i=50) scanf ; aver= ; printf ; i+;7 while語句的一般形式如下: while (表達式) 語句循環(huán)體8 while語句的一般形式如下: while (表達式) 語句“真”時執(zhí)行循環(huán)體語句“假”時不執(zhí)行循環(huán)條件表達式while循環(huán)的特點是:先判斷條件表達式,后執(zhí)行循環(huán)體語句9例5.1求1+2+3+100,即解題思路:這是累加問題,需要先后將100個數(shù)相加要重復(fù)100次加法運算,可用循環(huán)實現(xiàn)后一個數(shù)是前一個數(shù)加1而得加完上一個數(shù)i后,使i加1可得到下一個數(shù)10#include int main() int
4、i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); return 0;復(fù)合語句不能少11#include int main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); return 0;不能丟,否則循環(huán)永不結(jié)束125.3用do-while語句實現(xiàn)循環(huán)do-while語句的特點:先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立do-while語句的一般形式為: do 語句 while (表達式);表達式Y(jié)N循環(huán)體語句135.3用do-whi
5、le語句實現(xiàn)循環(huán) 例5.2 用dowhile語句求: 1+2+3+100,即145.3用do-while語句實現(xiàn)循環(huán)解題思路:i 100YNsum=sum+ii=i+1sum=0i=1 i=1; sum=0; do sum=sum+i; i+; while(i=100); 15#include int main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(sum=%dn,sum); return 0;16例5.3 while和do-while循環(huán)的比較。int i,sum=0;printf(“i=?”);scanf(“%d”,
6、&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);當while后面的表達式的第一次的值為“真”時,兩種循環(huán)得到的結(jié)果相同;否則不相同175.4用for 語句實現(xiàn)循環(huán)for語句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況for語句完全可以代替while語句18printf(%d , i );i+i=100i=15.4用for
7、 語句實現(xiàn)循環(huán)for (i=1;i=100;i+) printf(%d , i ); i 100YNi=i+1i=1輸出i195.4用for 語句實現(xiàn)循環(huán)for語句的一般形式為 for(表達式1;表達式2;表達式3) 語句設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€、一個或多個變量設(shè)置初值執(zhí)行205.4用for 語句實現(xiàn)循環(huán)for語句的一般形式為 for(表達式1;表達式2;表達式3) 語句循環(huán)條件表達式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達式,決定是否繼續(xù)執(zhí)行循環(huán)215.4用for 語句實現(xiàn)循環(huán)for語句的一般形式為 for(表達式1;表達式2;表達式3) 語句作為循環(huán)的調(diào)整器,例如
8、使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進行的225.4用for 語句實現(xiàn)循環(huán)for語句的執(zhí)行過程:(1) 先求解表達式1(2) 求解表達式2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步(3) 求解表達式3(4) 轉(zhuǎn)回上面步驟(2)繼續(xù)執(zhí)行(5) 循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句235.4用for 語句實現(xiàn)循環(huán)for(i=1;i=100;i+) sum=sum+i;等價于i=1;while(i=100) sum=sum+i; i+;用for語句更簡單、方便245.4用for 語句實現(xiàn)循環(huán)for(表達式1;表達式2;表達式3) 語句一個或兩個或三個表達
9、式均可以省略255.4用for 語句實現(xiàn)循環(huán)for (sum=0 ; i=100; i+) sum=sum+i; 與循環(huán)變量無關(guān)合法265.4用for 語句實現(xiàn)循環(huán)for(sum=0,i=1 ; i=100; i+) sum=sum+i; 逗號表達式合法for(i=0,j=100 ; i=j; i+,j- ) k=i+j; 275.4用for 語句實現(xiàn)循環(huán)for(i=0; (c=getchar()!=n; i+=c) ; 合法for( ; (c=getchar()!=n; ) printf(%c,c); 285.5循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套內(nèi)嵌的循環(huán)中還可
10、以嵌套循環(huán),這就是多層循環(huán)3種循環(huán)(while循環(huán)、dowhile循環(huán)和for循環(huán))可以互相嵌套295.6幾種循環(huán)的比較(1)一般情況下,3種循環(huán)可以互相代替(2) 在while和do-while循環(huán)中,循環(huán)體應(yīng)包含使循環(huán)趨于結(jié)束的語句。(3) 用while和do-while循環(huán)時,循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成。而for語句可以在表達式1中實現(xiàn)循環(huán)變量的初始化。305.7 改變循環(huán)執(zhí)行的狀態(tài)5.7.1 用break語句提前終止循環(huán)5.7.2 用continue語句提前結(jié)束本次循環(huán)5.7.3 break語句和continue語句的區(qū)別315.7.1 用brea
11、k語句提前終止循環(huán)break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句325.7.1 用break語句提前終止循環(huán) 例5.4 在全系1000學(xué)生中,征集慈善募捐,當總數(shù)達到10萬元時就結(jié)束,統(tǒng)計此時捐款的人數(shù),以及平均每人捐款的數(shù)目。335.7.1 用break語句提前終止循環(huán)編程思路:循環(huán)次數(shù)不確定,但最多循環(huán)1000次在循環(huán)體中累計捐款總數(shù)用if語句檢查是否達到10萬元如果達到就不再繼續(xù)執(zhí)行循環(huán),終止累加計算人均捐款數(shù)345.7.1 用break語句提前終止循環(huán)編程思路:變量amount,用來存放捐款數(shù)變量total,用來存放累加后的總捐款數(shù)變量aver,用來
12、存放人均捐款數(shù)定義符號常量SUM代表10000035#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;指定符號常量SUM代表10000036#include #define SUM 100000int main() float amount,aver,total; int i; for (i=1,total=0;i=
13、SUM) break; aver=total / i ; printf(“num=%dnaver=%10.2fn“ ,i,aver); return 0;應(yīng)該執(zhí)行1000次37#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;達到10萬,提前結(jié)束循環(huán)38#include #define SUM 100000int m
14、ain() 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ù)39#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); r
15、eturn 0;只能用于循環(huán)語句和switch語句之中,而不能單獨使用405.7.2 用continue語句提前結(jié)束本次循環(huán)有時并不希望終止整個循環(huán)的操作,而只希望提前結(jié)束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時可以用continue語句415.7.2 用continue語句提前結(jié)束本次循環(huán) 例5.5 要求輸出100200之間的不能被3整除的數(shù)。編程思路:對100到200之間的每一個整數(shù)進行檢查如果不能被3整除,輸出,否則不輸出無論是否輸出此數(shù),都要接著檢查下一個數(shù)(直到200為止)。42Nn=100n200Yn能被3整除Nn=n+1輸出nYfor(n=100;n=200;n+) if (n%3=0
16、) continue; printf(%d ,n); 435.7.3 break語句和continue語句的區(qū)別continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行break語句結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立44N表達式1Y表達式2NYN表達式1Y表達式2NYbreak語句continue語句強行退出循環(huán)只結(jié)束本次循環(huán)45例5.6 輸出以下4*5的矩陣。 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 2046解題思路:可以用循環(huán)的嵌套來處理此問題用外循環(huán)來輸出一行數(shù)據(jù)用內(nèi)循環(huán)來輸出一列數(shù)據(jù)按矩陣的格式(每行5個數(shù)據(jù))輸出47#i
17、nclude 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;累計輸出數(shù)據(jù)的個數(shù)控制一行內(nèi)輸出5個數(shù)據(jù)48#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)49#include
18、 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;控制輸出4行50#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個數(shù)據(jù)51#include int main() i
19、nt 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時j由1變到5i*j的值是1,2,3,4,552#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時j也由1變到5i*j的值是2,4,6,8,10如
20、何修改程序,不輸出第一行的空行?53#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)54#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)
21、; printf(n); return 0;if (i=3 & j=1) continue; 原來第3行第1個數(shù)據(jù)3沒有輸出555.8循環(huán)程序舉例 例5.7用 公式求 的近似值,直到發(fā)現(xiàn)某一項的絕對值小于10-6 為止(該項不累計加)。565.8循環(huán)程序舉例解題思路:求 近似值的方法很多,本題是一種其他方法:575.8循環(huán)程序舉例每項的分子都是1后一項的分母是前一項的分母加2第1項的符號為正,從第2項起,每一項的符號與前一項的符號相反585.8循環(huán)程序舉例sign=1,pi=0,n=1,term=1當term 10-6pi=pi+termn=n+1sing=-signterm=sign/npi
22、=pi*4輸出pi59#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;求絕對值的函數(shù)只保證前5位小數(shù)是準確的60#include #include int main() int sign=1; double pi=0,n=1,term=1; while(fabs(term)=1e-6) pi=pi+t
23、erm; n=n+2; sign=-sign; term=sign/n; pi=pi*4; printf(pi=%10.8fn,pi); return 0;改為1e-861 例5.8 求費波那西(Fibonacci)數(shù)列的前40個數(shù)。這個數(shù)列有如下特點:第1、2兩個數(shù)為1、1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:62這是一個有趣的古典數(shù)學(xué)問題:有一對兔子,從出生后第3個月起每個月都生一對兔子。小兔子長到第3個月后每個月又生一對兔子。假設(shè)所有兔子都不死,問每個月的兔子總數(shù)為多少?63第幾個月小兔子對數(shù)中兔子對數(shù)老兔子對數(shù)兔子總數(shù)110012010131012411135212563238
24、75351364輸出f1,f2For i=1 to 38f3=f1+f2輸出f3f1=f2f2=f3f1=1,f2=165#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;代碼可改進66#include int main() int f1=1,f2=1; int i; for(i=1; i=20; i+) printf(%12d %12d ,f1,f2); if(i
25、%2=0) printf(n); f1=f1+f2; f2=f2+f1; return 0; 67 例5.9輸入一個大于3的整數(shù)n,判定它是否素數(shù)(prime,又稱質(zhì)數(shù))。解題思路:讓n被i整除(i的值從2變到n-1)如果n能被2(n-1)之中任何一個整數(shù)整除,則表示n肯定不是素數(shù),不必再繼續(xù)被后面的整數(shù)除,因此,可以提前結(jié)束循環(huán)注意:此時i的值必然小于n68NNYn=i+1輸入ni=2i n-1Yn被i整除i a輸出不是素數(shù)Y輸出是素數(shù)N69#include int main() int n,i; printf(“n=?); scanf(%d,&n); for (i=2;i=n-1;i+)
26、if(n%i=0) break; if(in) printf(%d is notn,n); else printf(%d isn,n); return 0;70#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;k=sqrt(n);71#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);#include 72#include int main() int n,i,k; printf(“n=?); scanf(%d,&n); for (i=2; i=k; i+) if(
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度生態(tài)旅游服務(wù)合同標準文本4篇
- 2025年度高性能鋁合金產(chǎn)品批量采購銷售合同4篇
- 二零二五版?;愤\輸車輛燃油消耗優(yōu)化合同3篇
- 2025年蝦苗養(yǎng)殖基地飼料國際物流與清關(guān)服務(wù)合同范本3篇
- 二零二五版?;愤\輸安全管理協(xié)議3篇
- 2025年度水利工程漏水應(yīng)急響應(yīng)與免責(zé)合同4篇
- 二零二五年度煤矸石破碎再生建材訂購協(xié)議3篇
- 二零二五年度國際航運服務(wù)合同4篇
- 二零二五年度高端住宅認籌合同范本2篇
- 2025年訴訟保全擔保流程執(zhí)行與合規(guī)審查合同3篇
- 2024版塑料購銷合同范本買賣
- 【高一上】【期末話收獲 家校話未來】期末家長會
- JJF 2184-2025電子計價秤型式評價大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 二年級下冊加減混合豎式練習(xí)360題附答案
- 自帶藥物治療告知書
- 房產(chǎn)中介門店6S管理規(guī)范
- 吞咽解剖和生理研究
- TSG11-2020 鍋爐安全技術(shù)規(guī)程
- 汽輪機盤車課件
- 異地就醫(yī)備案個人承諾書
評論
0/150
提交評論