c語言程序設(shè)計譚浩強-ch5-循環(huán)課件_第1頁
c語言程序設(shè)計譚浩強-ch5-循環(huán)課件_第2頁
c語言程序設(shè)計譚浩強-ch5-循環(huán)課件_第3頁
c語言程序設(shè)計譚浩強-ch5-循環(huán)課件_第4頁
c語言程序設(shè)計譚浩強-ch5-循環(huán)課件_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計用用whilewhile語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)用用do-whiledo-while語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)用用for for 語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán) 循環(huán)的嵌套循環(huán)的嵌套幾種循環(huán)的比較幾種循環(huán)的比較breakbreak語句語句continuecontinue和語句和語句程程 序序 舉舉 例例Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計32022-2-20什么是循環(huán)?什么是循環(huán)?為什么要使用循環(huán)?為什么要使用循環(huán)?1001nyn問題問題1 1:問題問題2:2: 在許多問題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的

2、基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、分支結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計42022-2-20 循環(huán)控制結(jié)構(gòu)在程序中是循環(huán)控制結(jié)構(gòu)在程序中是指指對某段對某段程序或某條語句根據(jù)條件重復(fù)執(zhí)行。程序或某條語句根據(jù)條件重復(fù)執(zhí)行。C語言可實現(xiàn)循環(huán)的語言可實現(xiàn)循環(huán)的語句語句:while 語句語句do while 語句語句for 語句語句Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計52022-2-20while語句用來實現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。一般形式:一般形式: while (while (表達式表達式) ) 語句語句 當(dāng)表達式為非0值時,執(zhí)行while語句中的內(nèi)嵌語句。其特

3、點是:先判斷表達式,后執(zhí)行語句。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計62022-2-20v特點:先判斷表達式,后執(zhí)行循環(huán)體v說明:l循環(huán)體有可能一次也不執(zhí)行l(wèi)循環(huán)體可為任意類型語句;循環(huán)體如果包含一個以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。 l下列情況,退出while循環(huán)u條件表達式不成立(為零)u循環(huán)體內(nèi)遇break,return,gotol無限循環(huán): while(1) 循環(huán)體;在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計72022-2-20例 用while循環(huán)求 /*ch5_1.c*/#include main() int i,sum=0;

4、 i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計82022-2-20例例 顯示顯示110的平方的平方/*ch5_2.c*/#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 運行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計92022-2-20 do-while語

5、句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。 一般形式一般形式: : do do 循環(huán)體語句 whilewhile (表達式);執(zhí)行過程:執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當(dāng)表達式的值為非零(“真”) 時,返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達式的值等于0為止,此時循環(huán)結(jié)束。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計102022-2-20v特點:先執(zhí)行循環(huán)體,后判斷表達式v說明:l至少執(zhí)行一次循環(huán)體ldowhile可轉(zhuǎn)化成while結(jié)構(gòu)expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計112022-2-20 在一般情況下,用

6、while語句和用do-while語句處理同一問題時,若二者的循環(huán)體部分是一樣的,它們的結(jié)果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環(huán)的結(jié)果是不同的。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計122022-2-20例例 while和和dowhile比較比較main()int sum=0,i; scanf(%d,&i); while (i=10) sum=sum+i; i+; printf(sum=%dn,sum);main()int sum=0,i; scanf(%d,&i); do sum=sum+i; i+; while (i=10) printf(sum=%dn

7、,sum);當(dāng)當(dāng)i10時,時, 兩程序的結(jié)果不同。兩程序的結(jié)果不同。首次條件為真,兩者等價;首次條件為假,首次條件為真,兩者等價;首次條件為假,dowhile執(zhí)行一次。執(zhí)行一次。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計132022-2-20 C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。 一般形式一般形式: : forfor(表達式1;表達式2;表達式3) 語句Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計142022-2-20forfor(表達式1;表達式2;表達式3) 語句forfor語句

8、的執(zhí)行過程:語句的執(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語句下面的一個語句 Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計152022-2-20注意注意: : C語言中的for語句比其他語言(如BASIC,PASCAL)中的FOR語句功能強得多??梢园蜒h(huán)體和一些與循環(huán)控制無關(guān)的操作也作為表達式1或表達式3出現(xiàn),這樣程序可以短小簡潔。但過分地利用這一特點

9、會使for語句顯得雜亂,可讀性降低,最好不要把與循環(huán)控制無關(guān)的內(nèi)容放到for語句中。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計162022-2-20vfor語句一般應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體語句;v說明:lfor語句可以轉(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;lfor語句中expr1, expr2 ,expr3 類型任意,都可省略,但分號;不可省l若表達式1缺省,則從表達式2開始執(zhí)

10、行。l若表達式2缺省,則認(rèn)為表達式2始終為真,循環(huán)無終止進行。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計172022-2-20例如:例如: 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)無終止進行循環(huán)無終止進行Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計182022-2-20l三個三個表達式

11、可以是語言的任意型表達式。表達式可以是語言的任意型表達式。例:例: for ( sum=0,i=1;i=100;i+) sum=sum+i; for (i=0,j=100 ;i=j;i+,j-) k =i+j; for (i=0 ;(c=getchar()!=n;i+=c) ; 逗號表達式逗號表達式逗號表達式逗號表達式空語句空語句Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計192022-2-20例:#include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 運行結(jié)果:abcdefghij例:#include main( ) int i=0; fo

12、r(;i10;i+) putchar(a+i); 例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); 例:#include main( ) int i=0; for(;i10;putchar(a+i),i+) ; Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計202022-2-20main() 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

13、);#include main() int i,c; for(i=0;(c=getchar()!=n;i+=3)printf(%c ,i+c);Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計212022-2-20三種循環(huán)結(jié)構(gòu)三種循環(huán)結(jié)構(gòu)用于反復(fù)的進行某個操作,直到條件不成立時為止。用于反復(fù)的進行某個操作,直到條件不成立時為止。(1 1)while (while (表達式表達式) ) 語句系列語句系列 (2 2)do do 語句系列語句系列 while ( while (表達式表達式); );(3 3)for (for (表達式表達式1;1;表達式表達式2;2;表達式表達式3) 3) 語句系列語句系列

14、 使用循環(huán)語句要注意和數(shù)組的結(jié)合:使用循環(huán)語句要注意和數(shù)組的結(jié)合:關(guān)鍵在于找出數(shù)組下標(biāo)和循環(huán)變量之間關(guān)鍵在于找出數(shù)組下標(biāo)和循環(huán)變量之間的關(guān)系。的關(guān)系。三種循環(huán)功能完全等價:三種循環(huán)功能完全等價:(1),(2)(1),(2)兩種主要用于循環(huán)次數(shù)不定。兩種主要用于循環(huán)次數(shù)不定。而而(3)(3)主要用于循環(huán)次數(shù)確定的情況。主要用于循環(huán)次數(shù)確定的情況。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計222022-2-205.2.1 break5.2.1 break語句語句 break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句 一般形式:一般形式: break;break;注意注意

15、: :break只能終止并跳出最近一層的結(jié)構(gòu);break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。 Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計232022-2-20exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)whileCh5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計242022-2-20expr2break;.假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;.const 1const 2const ndefaultcase Ch5:循環(huán)結(jié)構(gòu)程序設(shè)

16、計循環(huán)結(jié)構(gòu)程序設(shè)計252022-2-20例例: float pi=3.14159;for(r=1;r100) break; printf(r=%f,area=%fn,r,area); 程序的作用是計算程序的作用是計算r=1r=1到到r=10r=10時的圓面積,直到時的圓面積,直到面積面積areaarea大于大于100100為止。從上面的為止。從上面的forfor循環(huán)可以循環(huán)可以看到:當(dāng)看到:當(dāng)area100area100時,執(zhí)行時,執(zhí)行breakbreak語句,提前結(jié)語句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計2

17、62022-2-205.2.2 continue5.2.2 continue語句語句 作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定.僅用于循環(huán)語句中.一般形式:一般形式: continue;continue;Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計272022-2-20exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計282022-2-20例例 求輸入的十個整數(shù)中正數(shù)的個數(shù)及其

18、平均值求輸入的十個整數(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,sum); printf(Mean value:%6.2fn,sum/num);Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計292022-2-20continue語句和break語句的區(qū)別 continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。

19、 while(表達式1) for if(表達式2) continue; 0Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計302022-2-20 continue和break的區(qū)別 break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。 while(表達式1) for if(表達式2) break; Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計312022-2-20 一個循環(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))可以互相嵌套。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計3220

20、22-2-20 下面幾種都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計332022-2-20(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while( ) Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計342022-2-20(1)四種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。 (2)在while循環(huán)和do-while循環(huán)中,只在while后面的括號內(nèi)指定循環(huán)條件,因此

21、為了使循環(huán)能正常結(jié)束,應(yīng)在循環(huán)體中包含使循環(huán)趨于結(jié)束的語句(如i+,或i=i+1等)。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計352022-2-20 for循環(huán)可以在表達式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達式3中。因此for語句的功能更強,凡用while循環(huán)能完成的,用for循環(huán)都能實現(xiàn)。 (3)用while和do-while循環(huán)時,循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成。而for語句可以在表達式1中實現(xiàn)循環(huán)變量的初始化。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計362022-2-20(4)while循環(huán)、do-while循環(huán)和for循環(huán)

22、,可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)(break語句和continue語句見下節(jié))。Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計372022-2-20例:例: 用/41-1/3+1/5-1/7+公式求的近似值,直到某一項的絕對值小于10-6為止。N-SN-S圖表示算法圖表示算法 Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計382022-2-20 # include # include 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;

23、t=s/n; pi = pi*4; printf(pi=%10.6fn,pi); Ch5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計392022-2-20例:例: 求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) 算法如圖所示:1FCh5:循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計402022-2-20例例: 判斷判斷m m是否素數(shù)。是否素數(shù)。算法思想算法思想: :讓m被2到sqrt(m)除,如果m能被2sqrt(m)之中任何一個整數(shù)整除,則提前結(jié)束循環(huán),此時i必然小于或等于sqrt(m) ;如果m不能

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論