版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.,第六章,循環(huán)控制,.,主要內(nèi)容,6.1 概述 6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán) 6.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 6.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán) 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán) 6.6 循環(huán)的嵌套 6.7 幾種循環(huán)的比較 6.8 break語(yǔ)句continue和語(yǔ)句 6.9 程 序 舉 例,.,6.1 概述,什么是循環(huán)? 為什么要使用循環(huán)?,問(wèn)題1:,問(wèn)題2:求學(xué)生平均成績(jī),.,循環(huán),.,生活中的例子: 擊鼓傳花:大家坐成一個(gè)圈,鼓聲響起的時(shí)候?qū)⒒ㄊ樞蚪坏较乱粋€(gè)人的手里,依次向下傳遞,當(dāng)鼓聲突然中斷時(shí)停止傳花,花束落在誰(shuí)的手里便成為輸家 4100米接力賽跑:第1個(gè)人
2、跑完100米后將接力棒傳給第2個(gè)人,第2個(gè)人再跑100米,然后是第3個(gè)人,直到第4個(gè)人跑完最后一個(gè)100米 共同點(diǎn): 都要完成相同的任務(wù):量變的重復(fù)內(nèi)容 都有結(jié)束條件:發(fā)生質(zhì)變的界限,.,6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán),goto語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 goto 語(yǔ)句標(biāo)號(hào); 語(yǔ)句標(biāo)號(hào)用標(biāo)識(shí)符表示, 例如:goto label_1; 合法; goto 123; 不合法.,.,【例6.1】 用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán), 計(jì)算sum=1+2+3+100 。 main() int i,sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loo
3、p; printf(%dn,sum); ,.,6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán),濫用goto語(yǔ)句將使程序流程無(wú)規(guī)律、可讀性差. 不建議使用goto語(yǔ)句。 一般來(lái)說(shuō),可以有兩種用途: (1) 與if語(yǔ)句一起構(gòu)成循環(huán)結(jié)構(gòu); (2) 從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外。,.,6.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán),while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。 一般形式: while (表達(dá)式) 語(yǔ)句 執(zhí)行過(guò)程:計(jì)算表達(dá)式值,若該值為非0時(shí),則執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句。然后重復(fù)上述步驟,直到表達(dá)式值為假(為0),則執(zhí)行while語(yǔ)句的下一條語(yǔ)句。 其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語(yǔ)句。,循環(huán)體語(yǔ)句,.,
4、6.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán),注意: 循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn)。 在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句。,.,1. 計(jì)算sum=1+2+3+100,.,第5章 循環(huán)程序設(shè)計(jì),1. 計(jì)算sum=1+2+3+100,循環(huán)體,循環(huán)控制條件,循環(huán)控制變量,循環(huán)的初始化,#include void main( ) int i=1, sum=0 ; while ( i = 100 ) sum = sum + i ; i+ ; printf ( “Sum = %d n”, sum ) ; ,.,第5章 循環(huán)程序設(shè)計(jì),2. 計(jì)算sum=2+4+6+100,循環(huán)體
5、,循環(huán)控制條件,循環(huán)控制變量,循環(huán)的初始化,#include void main( ) int i=2, sum=0 ; while ( i = 100 ) sum = sum + i ; i+=2 ; printf ( “Sum = %d n”, sum ) ; ,.,2. 計(jì)算sum=2+4+6+100,循環(huán)體,循環(huán)控制條件,循環(huán)控制變量,循環(huán)的初始化,#include void main( ) int i=2, sum=0 ; while ( i = 100 ) sum = sum + i ; i+=2 ; printf ( “Sum = %d n”, sum ) ; ,.,6.4 do
6、-while語(yǔ)句,do-while語(yǔ)句的特點(diǎn): 先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。 一般形式: do 循環(huán)體語(yǔ)句 while (表達(dá)式);,執(zhí)行過(guò)程:先執(zhí)行一次指定的循環(huán)體語(yǔ)句,然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”) 時(shí),返回重新執(zhí)行循環(huán)體語(yǔ)句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束。,.,6.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán),while語(yǔ)句和用do-while語(yǔ)句的比較: 二者是完全等價(jià)的。 do-while語(yǔ)句有可能一次也不執(zhí)行循環(huán)體。,.,循環(huán)的變化:sum=1+2+3+100,#include void main( ) int i=1, sum=0 ; whil
7、e ( i= 100 ) sum = sum + i; i+ ; printf ( “Sum = %d n”, sum ) ; ,#include void main( ) int i=1, sum=0 ; do sum = sum + i ; i+; while ( i= 100 ); printf ( “Sum = %d n”, sum ) ; ,.,順序打印1-10的階乘,即1!, 2!, , 10!,本題的關(guān)鍵是求階乘 數(shù)學(xué)上,n!=123(n-1)n,.,外循環(huán),內(nèi)循環(huán),對(duì)比程序:(更優(yōu)) #include void main( ) int i=1; float f = 1; whi
8、le( i = 10 ) f = f * i; printf( %2d! = %.0f n, i, f ); i + ; 思考一下:8-10的階乘,#include void main( ) int i=1, j ; float f ; while( i = 10 ) j = 1; f = 1; while( j = i ) f = f * j; j + ; printf( “ %2d! = %.0f n”, i, f ); i + ; ,.,6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),一般形式: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句,表達(dá)式1:初始化表達(dá)式,只執(zhí)行一次 表達(dá)式2:循環(huán)控制表達(dá)式,
9、控制循環(huán)的結(jié)束 表達(dá)式3:增量表達(dá)式 ,使表達(dá)式2趨向于假,.,6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),for語(yǔ)句的執(zhí)行過(guò)程: (1) 先求解表達(dá)式1。 (2) 求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第(3)步。若為假(值為0),則結(jié)束循環(huán)轉(zhuǎn)到第(5)步。 (3) 求解表達(dá)式3。 (4) 轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5) 循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句,.,任意輸入10個(gè)數(shù),求平均值,#include void main( ) int i ; float x, sum=0 ; printf( Enter 10 numbers one by one
10、: n ); for( i =1 ; i=10 ; i+) scanf( %f, ,.,例:順序打印1-10的階乘,即1!, 2!, 3!, , 10!,#include void main( ) int i, j ; float f ; for( i=1; i = 10 ; i+ ) f = 1; for( j=1; j = i ; j+ ) f = f * j; printf( %2d! = %.0f n, i, f ); ,#include void main( ) int i=1, j ; float f ; while( i = 10 ) j = 1; f = 1; while( j
11、 = i ) f = f * j; j + ; printf( “ %2d! = %.0f n”, i, f ); i + ; ,.,例:打印幾何圖形,對(duì)于這類(lèi)問(wèn)題,每行中星號(hào)的個(gè)數(shù)、總行數(shù)等都應(yīng)該用循環(huán)結(jié)構(gòu)進(jìn)行控制,而不是直接輸出若干行字符串,#include void main( ) int i, j ; for(i=1; i = 4; i+ ) for( j = 0; ji ; j+ ) putchar( ); for( j = 1; j=4 ; j+ ) putchar(*); putchar(n); ,.,for語(yǔ)句的變化形式,可以省略for語(yǔ)句的“表達(dá)式1”或“表達(dá)式3”,也可以都
12、省略(“退化為”while語(yǔ)句),例:將用鍵盤(pán)輸入的若干字符順序輸出到屏幕上,#include void main( ) char ch ; for( ; (ch=getchar( ) ) !=n ; ) putchar( ch ) ; ,.,6.6 循環(huán)的嵌套,一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu) 稱(chēng)為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套 循環(huán),這就是多層循環(huán)。 三種循環(huán)(while循環(huán)、do-while循環(huán)和for循 環(huán))可以互相嵌套。,.,6.6 循環(huán)的嵌套,下面幾種都是合法的形式: (1) while( ) (2) do (3) for(;) while( ) do for(;) wh
13、ile( ); while( );,.,6.6 循環(huán)的嵌套,(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while( ),.,錯(cuò)誤的嵌 套形式,循環(huán)必須是完整的,不允許內(nèi)外循環(huán)交叉嵌套 f = 1; while( i 10) i=1; do f = f * i; i +; while( i10 );,混亂的控 制條件,內(nèi)外循環(huán)的循環(huán)控制條件通常是分開(kāi)的,相對(duì)獨(dú)立的 i=1; s=0; while ( i 3 ) s = s + f; i = 1; f=1; while( i5) i +=2; f = f * i; i+
14、; ,.,6.7 幾種循環(huán)的比較,(1)四種循環(huán)都可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替。但一般不提倡用goto型循環(huán)。 (2)在while循環(huán)和do-while循環(huán)中,只在while后面的括號(hào)內(nèi)指定循環(huán)條件,因此為了使循環(huán)能正常結(jié)束,應(yīng)在循環(huán)體中包含使循環(huán)趨于結(jié)束的語(yǔ)句(如i+,或i=i+1等)。,.,6.7 幾種循環(huán)的比較,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和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-
15、while語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。,.,6.7 幾種循環(huán)的比較,(4)while循環(huán)、do-while循環(huán)和for循環(huán),可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)(break語(yǔ)句和continue語(yǔ)句見(jiàn)下節(jié))。而對(duì)用goto語(yǔ)句和if語(yǔ)句構(gòu)成的循環(huán),不能用 break語(yǔ)句和continue語(yǔ)句進(jìn)行控制。,.,6.8 break語(yǔ)句和continue語(yǔ)句,6.8.1 break語(yǔ)句 break語(yǔ)句可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句 一般形式: break; 注意:break語(yǔ)句不能用于循環(huán)語(yǔ)句和swi
16、tch語(yǔ)句之外的任何其他語(yǔ)句中。,.,6.8 break語(yǔ)句和continue語(yǔ)句,例:計(jì)算r=1到r=10時(shí)的圓面積,直到面積area大于100為止。 float pi=3.14159; for( ) area=pi*r*r; printf(r=%f,area=%fn,r,area); ,當(dāng)area100時(shí),執(zhí)行break語(yǔ)句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。,r=1;r=10;r+,r=1;r=10;r+,if(area100) break;,.,6.8 break語(yǔ)句和continue語(yǔ)句,6.8.2 continue語(yǔ)句 作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句
17、,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定. 一般形式: continue;,.,6.8 break語(yǔ)句和continue語(yǔ)句,continue語(yǔ)句和break語(yǔ)句的區(qū)別 continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。,while(表達(dá)式1) for if(表達(dá)式2) continue; ,.,6.8 break語(yǔ)句和continue語(yǔ)句,continue和break的區(qū)別 break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立。,while(表達(dá)式1) for if(表達(dá)式2) break; ,.,6.9 程序舉例,例6.6用/41-1/3+1/5-1/7+公式求的近似值
18、,直到某一項(xiàng)的絕對(duì)值小于為止。 N-S圖表示算法,.,fabs(t ()=1e-6,float s=1.0,pi=0; int s=1,n=1; while( ) pi+=t; n+=2; s=-s; t=s/n; pi*=4;,.,6.9 程序舉例,例6.7 求Fibonacci數(shù)列前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1,2兩個(gè)數(shù)為1,1。從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和。即: F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3) 算法如圖所示:,.,6.9 程序舉例,例6.8 判斷m是否素?cái)?shù)。 算法思想:讓m被2到除,如果m能被2之中任何一個(gè)整數(shù)整除,則提前結(jié)束循環(huán),此時(shí)i必然小于或等于k(即);如果m不能被2k(即)之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明未曾被2k之間任一整數(shù)整除過(guò),因此輸出“是素?cái)?shù)”。,.,.,float k; int m,i=2; scanf(“%d”, ,k=sqrt(m);,if (m%i=0) break;,ik+1,.,6.9 程序舉例,例6.10 譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。 思路:可以按以下規(guī)律將電文變成
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年自動(dòng)化立體倉(cāng)庫(kù)的電氣傳動(dòng)系統(tǒng)
- 2026年互聯(lián)網(wǎng)+土木工程智能化施工的探索
- 2026春招:行政主管題庫(kù)及答案
- 2026年建筑電氣設(shè)計(jì)的多樣化方案
- 2026春招:五糧液真題及答案
- 貼面課件教學(xué)課件
- 貨運(yùn)船舶相關(guān)知識(shí)培訓(xùn)課件
- 貨運(yùn)安全生產(chǎn)標(biāo)準(zhǔn)化培訓(xùn)課件
- 醫(yī)療物聯(lián)網(wǎng)設(shè)備與智慧醫(yī)院建設(shè)
- 護(hù)理護(hù)理安全管理與患者護(hù)理
- 山東省煙臺(tái)市2022-2023學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末試題(含答案)3
- 部編版道德與法治五年級(jí)上冊(cè)全冊(cè)復(fù)習(xí)選擇題100道匯編附答案
- 掘進(jìn)機(jī)整機(jī)行走的安全技術(shù)措施
- 建設(shè)工程檔案管理制度
- 少年宮乒乓球活動(dòng)記錄文本
- 2021-2022學(xué)年云南省曲靖市部編版六年級(jí)上冊(cè)期末考試語(yǔ)文試卷(原卷版)
- 參會(huì)人員名單(模板)
- 飛機(jī)大戰(zhàn)游戲設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)學(xué)課如何提高課堂教學(xué)容量
- 監(jiān)理規(guī)劃畢業(yè)設(shè)計(jì)(論文)
- 京港澳高速公路段改擴(kuò)建工程施工保通方案(總方案)
評(píng)論
0/150
提交評(píng)論