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