《《循環(huán)控制》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《循環(huán)控制》PPT課件.ppt(42頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第四章 語(yǔ)句和流程控制(2) 循環(huán)控制,計(jì)算機(jī)公共教學(xué)部,,4.2.1 概述 4.2.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán) 4.2.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 4.2.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán) 4.2.5 用for語(yǔ)句實(shí)現(xiàn)循環(huán) 4.2.6 循環(huán)的嵌套 4.2.7 幾種循環(huán)的比較 4.2.8 break語(yǔ)句與continue語(yǔ)句 4.2.9 程序舉例,教學(xué)目標(biāo),【教學(xué)目的與要求】 掌握三種循環(huán)語(yǔ)句的語(yǔ)法規(guī)則和功能,學(xué)會(huì)用循環(huán)方法進(jìn)行簡(jiǎn)單循環(huán)程序設(shè)計(jì),熟悉并掌握常用的幾種抽象循環(huán)的方法,能使用循環(huán)語(yǔ)句編寫(xiě)程序。 【教學(xué)重點(diǎn)與難點(diǎn)】 三種循環(huán)語(yǔ)句,break 與 continue
2、語(yǔ)句的基本作用。,4.2.1 概述,求1100的累計(jì)和。 根據(jù)已有的知識(shí),可以用“1+2++100”來(lái)求,但顯然很繁瑣?,F(xiàn)在換個(gè)思路來(lái)考慮: 首先設(shè)置一個(gè)累計(jì)器sum,其初值為0,利用sum += n來(lái)計(jì)算(n依次取1、2、、100),只要解決以下3個(gè)問(wèn)題即可: (1)將n的初值置為1; (2)每執(zhí)行1次“sum += n”后,n增1; (3)當(dāng)n增到101時(shí),停止計(jì)算。此時(shí),sum的值就是1100的累計(jì)和。,根據(jù)已有的知識(shí),單獨(dú)實(shí)現(xiàn)每一步都不難。但是,由于需要經(jīng)常使用這種重復(fù)計(jì)算結(jié)構(gòu)(稱為循環(huán)結(jié)構(gòu)),C語(yǔ)言提供了3條循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),以簡(jiǎn)化、并規(guī)范循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。 在語(yǔ)言中,可用以下語(yǔ)
3、句實(shí)現(xiàn)循環(huán): (1)goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán) (2)用while語(yǔ)句實(shí)現(xiàn)循環(huán) (3)用do-while語(yǔ)句實(shí)現(xiàn)循環(huán) (4)用for語(yǔ)句實(shí)現(xiàn)循環(huán),goto語(yǔ)句格式:goto 標(biāo)號(hào) 標(biāo)號(hào)的命名遵循標(biāo)識(shí)符命名規(guī)則 功能:使系統(tǒng)轉(zhuǎn)向標(biāo)號(hào)所在的語(yǔ)句行執(zhí)行。,4.2.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán),1100求和 用if 和goto語(yǔ)句構(gòu)成循環(huán),#include void main() int i,s=0; i=1; loop: if(i<=100) s+=i; i++; goto loop; printf(%d,s); ,s=0+1 s==1+2=3 s=3+3=6
4、 s=6+4 s=4950+100=5050,注意:結(jié)構(gòu)化程序設(shè)計(jì)方法,主張限制使用goto語(yǔ)句。因?yàn)闉E用goto語(yǔ)句,將會(huì)導(dǎo)致程序結(jié)構(gòu)無(wú)規(guī)律、可讀性差。,while語(yǔ)句 一般形式:,while(表達(dá)式) 循環(huán)體語(yǔ)句;,執(zhí)行流程:,4.2.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán),特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體 說(shuō)明: 循環(huán)體有可能一次也不執(zhí)行 循環(huán)體可為任意類型語(yǔ)句 下列情況,退出while循環(huán) 條件表達(dá)式不成立(為零) 循環(huán)體內(nèi)遇break,goto 無(wú)限循環(huán): while(1) 循環(huán)體;,P114例4.2.2 用while循環(huán)求,/*/* 1100求和 */ #include void
5、main() int i,sum=0; i=1; while(i<=100) sum=sum+i; i++; printf(%d,sum); ,do while語(yǔ)句 一般形式:,do 循環(huán)體語(yǔ)句; while(表達(dá)式);,執(zhí)行流程:,4.2.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán),特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式 說(shuō)明: 至少執(zhí)行一次循環(huán)體 dowhile可轉(zhuǎn)化成while結(jié)構(gòu),用dowhile循環(huán)1100求和,#include void main() int i,sum=0; i=1; do sum+=i; i++; while(i<=100); printf(%d,
6、sum); ,,while和do-while比較,/**/ #include void main() int i,sum=0; scanf(%d, ,#include void main() int i,sum=0; scanf(%d, ,復(fù)習(xí): 1.while循環(huán) 2.do while循環(huán),#include stdio.h main() int sum,i; sum=0; i=1; while(i<=100) sum=sum+i; i=i+2; printf(sum=%d,sum); ,例:計(jì)算1到100之內(nèi)的奇數(shù)和,本題的特點(diǎn)是對(duì)于是否要繼續(xù)執(zhí)行循環(huán), 由給出的條件決定的.適合w
7、hile循環(huán). 思考:計(jì)算前20個(gè)奇數(shù)之和, 給出循環(huán)次數(shù)的題目用什么?,while(表達(dá)式) 循環(huán)體語(yǔ)句;,do 循環(huán)體語(yǔ)句; while(表達(dá)式);,一般形式:,for(表達(dá)式1 ;表達(dá)式2 ;表達(dá)式3) 循環(huán)體語(yǔ)句;,執(zhí)行流程:,4.2.5 用for語(yǔ)句實(shí)現(xiàn)循環(huán),先求解表達(dá)式1 求解表達(dá)式2,值為真則執(zhí)行循環(huán)體,然后執(zhí)行第3步;值為假,則結(jié)束循環(huán),轉(zhuǎn)到第5步. 求解表達(dá)式3 轉(zhuǎn)回第2步繼續(xù)執(zhí)行 循環(huán)結(jié)束,執(zhí)行for語(yǔ)句后面的程序.,for語(yǔ)句一般應(yīng)用形式:,for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 循環(huán)體語(yǔ)句;,i=1; while(i<=100) sum=sum+i; i
8、=i+2;,For(i=1;i<=100;i=i+2)sum=sum+i;,解思考題:計(jì)算前20個(gè)奇數(shù)和.,例:#include main( ) int i=0; for(i=0;i<10;i++) putchar(a+i); ,,運(yùn)行結(jié)果:abcdefghij,例:#include main( ) int i=0; for(;i<10;i++) putchar(a+i); ,例:#include main( ) int i=0; for(;i<10;putchar(a+i),i++) ; ,說(shuō)明: for
9、語(yǔ)句中表達(dá)式1, 表達(dá)式2 ,表達(dá)式3 類型任意,都可省略,循環(huán)體也可省略,但分號(hào);不可省 無(wú)限循環(huán): for(;;) for語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu),例2:輸出所有的”水仙花數(shù)”,”水仙花數(shù)指的是一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)本身.,(1)循環(huán)語(yǔ)句的循環(huán)體內(nèi),又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。循環(huán)嵌套的概念,對(duì)所有高級(jí)語(yǔ)言都是一樣的。 (2)for語(yǔ)句和while語(yǔ)句允許嵌套,do-while語(yǔ)句也不例外。,4.2.6 循環(huán)的嵌套,循環(huán)的嵌套 三種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,1) while()
10、while() ... ,(2) do do while( ); ... while( );,3) while() do while( ); . ,(4) for( ; ;) do while(); while() ... ,嵌套循環(huán)的跳轉(zhuǎn) 禁止: 從外層跳入內(nèi)層 跳入同層的另一循環(huán) 向上跳轉(zhuǎn),,循環(huán)嵌套,輸出九九表,#include void main() int i,j; for(i=1;i<10;i++) printf(%4d,i)
11、; printf(n---------------------------------------n); for(i=1;i<10;i++) for(j=1;j<10;j++) printf(%4dn,i*j); printf(“n”) ,for(i=1;i<10;i++) for(j=1;j<10;j++) printf(%4dn,i*j);,4.2.7 幾種循環(huán)的比較 (1) 四種循環(huán)都可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替。 (2) while和dowhile循環(huán),只在while后面指定循環(huán)條件,在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句(如i++,或i=i+1等)。
12、 for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語(yǔ)句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。,(3) 用while和dowhile循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和dowhile語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。 (4) while循型、dowhile循環(huán)和for循環(huán),可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)。,,4.2.8 break語(yǔ)句和continue語(yǔ)句 break語(yǔ)句 功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并跳出循環(huán)體或開(kāi)關(guān)體 說(shuō)明:
13、break只能終止并跳出最近一層的結(jié)構(gòu) break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中,,,例 break舉例:輸出圓面積,面積大于100時(shí)停止,#define PI 3.14159 main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); ,,例 break舉例:小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母,直至輸入 非字母字符,#include main() int i,j; char c; while(1) c=getchar(); if(c=a ,continue
14、語(yǔ)句 功能:結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷 僅用于循環(huán)語(yǔ)句中,,例 求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值,#include main() int i,num=0,a; float sum=0; for(i=0;i<10;i++) scanf(%d, ,4.2.9 程序舉例,,分子:1,-1,1,-1 分母:1,3,5,7,...,/*求PI*/ #include #include main() int s; float n,t,pi; t=1; pi=0; n=1.0; s=1; while((fabs(t))=1e-6) pi=
15、pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); ,,例2求Fibonacci數(shù)列:1,1,2,3,5,8, 的前40個(gè)數(shù),/*例2求Fibonacci數(shù)列*/ #include main() long int f1,f2; int i; 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; ,,例3 判斷m是否素?cái)?shù),#include #include
16、 main() int m,i,k; scanf(%d,,例3 判斷m是否素?cái)?shù)源代碼,例4 求3200以內(nèi)素?cái)?shù),#include “stdio.h“ void main() int ni,nj; for(ni=3;ni=ni) printf(“t%d“,ni); ,,內(nèi)循環(huán),外循環(huán),例5 數(shù)字的倒序輸出,#include “stdio.h“ main() int a,r; scanf(“%d”, ,思考題,1、如何求20!?(20!=1*2*3**20) 2、如何求1!+2!+3!++20! 3、找出1100之間的全部“同構(gòu)數(shù)”,它們出現(xiàn)在它的平方數(shù)的右端。如:6的平方是36、6出現(xiàn)在36的右端,6就是一個(gè)同構(gòu)數(shù)。 4、用窮舉算法解百馬百擔(dān)問(wèn)題(有100匹馬馱100擔(dān)貨,大馬馱3擔(dān),中馬馱2 擔(dān),兩匹小馬馱1擔(dān),問(wèn)有大、中、小馬各多少),