版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第五章循環(huán)結(jié)構(gòu)程序設計Ch5:循環(huán)結(jié)構(gòu)程序設計7/20/2022第1頁,共45頁。 主要內(nèi)容用while語句實現(xiàn)循環(huán)用do-while語句實現(xiàn)循環(huán)用for 語句實現(xiàn)循環(huán) 循環(huán)的嵌套幾種循環(huán)的比較break語句continue和語句程 序 舉 例Ch5:循環(huán)結(jié)構(gòu)程序設計7/20/2022第2頁,共45頁。 概述什么是循環(huán)?為什么要使用循環(huán)?問題1:問題2:求學生平均成績 分數(shù)相加后除以課數(shù) 在許多問題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、分支結(jié)構(gòu)共同作為各種復雜程序的基本構(gòu)造單元。7/20/2022第3頁,共45頁。 循環(huán)控制結(jié)構(gòu)在程序中是指對某段程序或某條語
2、句根據(jù)條件重復執(zhí)行。C語言可實現(xiàn)循環(huán)的語句:while 語句do while 語句for 語句7/20/2022第4頁,共45頁。 5.1 C語言的循環(huán)語句 5.1.1 用while語句實現(xiàn)循環(huán)while語句用來實現(xiàn)“當型”循環(huán)結(jié)構(gòu)。一般形式: while (表達式) 語句 當表達式為非0值時,執(zhí)行while語句中的內(nèi)嵌語句。其特點是:先判斷表達式,后執(zhí)行語句。7/20/2022第5頁,共45頁。特點:先判斷表達式,后執(zhí)行循環(huán)體說明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類型語句;循環(huán)體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現(xiàn)。 下列情況,退出while循環(huán)條件表達式不成
3、立(為零)循環(huán)體內(nèi)遇break,return,goto無限循環(huán): while(1) 循環(huán)體;在循環(huán)體中應有使循環(huán)趨向于結(jié)束的語句。7/20/2022第6頁,共45頁。例 用while循環(huán)求 /*ch5_1.c*/#include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體7/20/2022第7頁,共45頁。例 顯示110的平方/*ch5_2.c*/#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i
4、,i*i); i+; 運行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=1007/20/2022第8頁,共45頁。 5.1.2 用do-while語句實現(xiàn)循環(huán) do-while語句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。 一般形式: do 循環(huán)體語句 while (表達式);執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當表達式的值為非零(“真”) 時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于0為止,此時循環(huán)結(jié)束。7/20/2022第9頁,共45頁。特點:先執(zhí)行循環(huán)體,后判斷表達式說明:至少執(zhí)
5、行一次循環(huán)體dowhile可轉(zhuǎn)化成while結(jié)構(gòu)expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)7/20/2022第10頁,共45頁。while語句和用do-while語句的比較: 在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環(huán)體部分是一樣的,它們的結(jié)果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環(huán)的結(jié)果是不同的。7/20/2022第11頁,共45頁。例 while和dowhile比較main()int sum=0,i; scanf(%d,&i); while (i=10) sum=sum+i; i+; printf(sum=%d
6、n,sum);main()int sum=0,i; scanf(%d,&i); do sum=sum+i; i+; while (i=10) printf(sum=%dn,sum);當i10時, 兩程序的結(jié)果不同。首次條件為真,兩者等價;首次條件為假,dowhile執(zhí)行一次。7/20/2022第12頁,共45頁。 5.1.3 用for 語句實現(xiàn)循環(huán)C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。一般形式: for(表達式1;表達式2;表達式3) 語句7/20/2022第13頁,共45頁。
7、5.1.3 用for 語句實現(xiàn)循環(huán)for(表達式1;表達式2;表達式3) 語句for語句的執(zhí)行過程: (1) 先求解表達式1。 (2) 求解表達式2,若其值為真(值為非0),則執(zhí) 行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下 面第(3)步。若為假(值為0),則結(jié)束循環(huán), 轉(zhuǎn)到第(5)步。 (3) 求解表達式3。 (4) 轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5) 循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句 7/20/2022第14頁,共45頁。 5.1.4 for 語句的形式變化注意: C語言中的for語句比其他語言(如BASIC,PASCAL)中的FOR語句功能強得多。可以把循環(huán)體和一些與循環(huán)控制無關的
8、操作也作為表達式1或表達式3出現(xiàn),這樣程序可以短小簡潔。但過分地利用這一特點會使for語句顯得雜亂,可讀性降低,最好不要把與循環(huán)控制無關的內(nèi)容放到for語句中。7/20/2022第15頁,共45頁。for語句一般應用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體語句;說明:for語句可以轉(zhuǎn)換成while結(jié)構(gòu)#include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);expr1;while(expr2)循環(huán)體語句;expr3;for語句中expr1, expr2 ,expr3 類型任意,都可省略,但分號
9、;不可省若表達式1缺省,則從表達式2開始執(zhí)行。若表達式2缺省,則認為表達式2始終為真,循環(huán)無終止進行。7/20/2022第16頁,共45頁。例如: for ( ;i=100;i+) sum=sum+i; for (i=1; ;i+) sum=sum+i; for (i=1;i=100; ) sum=sum+i;i+; for ( ;i=100; ) sum=sum+i;i+; for ( ; ; ) 語句省略表達式1省略表達式2省略表達式3省略表達式1,3循環(huán)無終止進行7/20/2022第17頁,共45頁。三個表達式可以是語言的任意型表達式。例: for ( sum=0,i=1;i=100;i
10、+) sum=sum+i; for (i=0,j=100 ;i=j;i+,j-) k =i+j; for (i=0 ;(c=getchar()!=n;i+=c) ; 逗號表達式逗號表達式空語句7/20/2022第18頁,共45頁。例:#include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 運行結(jié)果:abcdefghij例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); 例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); 例:
11、#include main( ) int i=0; for(;i10;putchar(a+i),i+) ; 7/20/2022第19頁,共45頁。main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); #includemain() char c; for(;(c=getchar()!=n;) printf(%c ,c);#include main() int i,c; for(i=0;(c=getchar()!=n;i+=3)printf(%c ,i+c);7/20/2022第20頁,共45頁。三種循
12、環(huán)結(jié)構(gòu)用于反復的進行某個操作,直到條件不成立時為止。(1)while (表達式) 語句系列(2)do 語句系列 while (表達式);(3)for (表達式1;表達式2;表達式3) 語句系列使用循環(huán)語句要注意和數(shù)組的結(jié)合:關鍵在于找出數(shù)組下標和循環(huán)變量之間的關系。三種循環(huán)功能完全等價:(1),(2)兩種主要用于循環(huán)次數(shù)不定。而(3)主要用于循環(huán)次數(shù)確定的情況。7/20/2022第21頁,共45頁。 5.2 break語句和continue語句 5.2.1 break語句 break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句 一般形式: break;注意:brea
13、k只能終止并跳出最近一層的結(jié)構(gòu);break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。 7/20/2022第22頁,共45頁。exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while7/20/2022第23頁,共45頁。expr2break;.假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;.const 1const 2const ndefaultcase 7/20/2022第24頁,共45頁。 5.2 break語句和continue語句
14、 例: float pi=3.14159;for(r=1;r100) break; printf(r=%f,area=%fn,r,area); 程序的作用是計算r=1到r=10時的圓面積,直到面積area大于100為止。從上面的for循環(huán)可以看到:當area100時,執(zhí)行break語句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。7/20/2022第25頁,共45頁。 5.2 break語句和continue語句 5.2.2 continue語句 作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定.僅用于循環(huán)語句中.一般形式: continue;7/20/2
15、022第26頁,共45頁。exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr37/20/2022第27頁,共45頁。例 求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值/*ch5_3.c*/#include main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=0) continue;num+;sum+=a; printf(%d plus integers sum :%6.0fn,num
16、,sum); printf(Mean value:%6.2fn,sum/num);7/20/2022第28頁,共45頁。 5.2 break語句和continue語句 continue語句和break語句的區(qū)別 continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。 while(表達式1) for if(表達式2) continue; 07/20/2022第29頁,共45頁。 5.2 break語句和continue語句 continue和break的區(qū)別 break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。 while(表達式1) for if(表達式2) break
17、; 7/20/2022第30頁,共45頁。 5.3 循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu) 稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套 循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循 環(huán))可以互相嵌套。7/20/2022第31頁,共45頁。 5.3 循環(huán)的嵌套下面幾種都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); 7/20/2022第32頁,共45頁。 5.3 循環(huán)的嵌套(4) while( ) (5) for(;) (6) do do while(
18、 ) for(;) while( ) while( ) 7/20/2022第33頁,共45頁。幾種循環(huán)的比較(1)四種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。 (2)在while循環(huán)和do-while循環(huán)中,只在while后面的括號內(nèi)指定循環(huán)條件,因此為了使循環(huán)能正常結(jié)束,應在循環(huán)體中包含使循環(huán)趨于結(jié)束的語句(如i+,或i=i+1等)。7/20/2022第34頁,共45頁。幾種循環(huán)的比較 for循環(huán)可以在表達式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達式3中。因此for語句的功能更強,凡用while循環(huán)能完成的,用for循環(huán)都能實現(xiàn)。 (3)用while
19、和do-while循環(huán)時,循環(huán)變量初始化的操作應在while和do-while語句之前完成。而for語句可以在表達式1中實現(xiàn)循環(huán)變量的初始化。7/20/2022第35頁,共45頁。幾種循環(huán)的比較(4)while循環(huán)、do-while循環(huán)和for循環(huán),可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)(break語句和continue語句見下節(jié))。7/20/2022第36頁,共45頁。 5.4 循環(huán)程序設計 例: 用/41-1/3+1/5-1/7+公式求的近似值,直到某一項的絕對值小于10-6為止。N-S圖表示算法 7/20/2022第37頁,共45頁。# include # in
20、clude void main() int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)1e-6) pi=pi+t; n=n+2; s= -s; t=s/n;pi = pi*4;printf(pi=%10.6fn,pi);7/20/2022第38頁,共45頁。例: 求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下特點:第1,2兩個數(shù)為1,1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:F(1)=1 (n=1)F(2)=1 (n=2)F(n)=F(n-1)+F(n-2) (n3) 算法如圖所示: 5.4 循環(huán)程序設計 7/20/2022第39頁,共45頁。例: 判斷m是否素數(shù)。算法思想:讓m被2到sqrt(m)除,如果m能被2sqrt(m)之中任何一個整數(shù)整除,則提前結(jié)束循環(huán),此時i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年核苷類藥物項目提案報告范文
- 2024-2025學年邢臺市巨鹿縣數(shù)學三上期末考試模擬試題含解析
- 2024-2025學年新疆維吾爾昌吉州奇臺縣數(shù)學三年級第一學期期末達標檢測模擬試題含解析
- 去藥廠實習報告范文匯編5篇
- 2024-2025學年西安市碑林區(qū)三上數(shù)學期末學業(yè)質(zhì)量監(jiān)測試題含解析
- 2024年版企業(yè)勞動合同及員工勞動保障合同版B版
- 2025年板臥式電除塵器項目規(guī)劃申請報告模范
- 2024年期多邊投資補償協(xié)議樣本一
- 大學實習報告范文合集10篇
- 暑假銀行實習報告匯編十篇
- 云南省昆明市盤龍區(qū)2023-2024學年三年級上學期語文期末試卷
- 2024年貴州省六盤水市公開招聘警務輔助人員(輔警)筆試經(jīng)典練習卷(B)含答案
- 2024年醫(yī)院女工委工作計劃(6篇)
- 期末測試卷-2024-2025學年外研版(一起)英語六年級上冊(含答案含聽力原文無音頻)
- 人教版2025九年級道德與法治中考備考復習計劃
- 2024年度技術咨詢合同:某科技公司與某政府機構(gòu)關于技術咨詢服務的協(xié)議(2024版)2篇
- 醫(yī)療科研配色
- 2024年保安員資格考試題目及答案(共60題)
- 期末復習基礎卷(試題)-2024-2025學年一年級上冊數(shù)學人教版
- 第十章 專題 帶電粒子在電場中運動的綜合問題 集體備課說課稿模板 -2023-2024學年高二上學期物理人教版(2019)必修第三冊
- 高中數(shù)學64數(shù)列求和省公開課獲獎課件市賽課比賽一等獎課件
評論
0/150
提交評論