




已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1,第六章 循環(huán)控制,2,6.1 概述,循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是,在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。 給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。 語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。,3,用goto語句和if語句構(gòu)成循環(huán); 用while語句; 用do-while語句; 用for語句;,4,6.2 goto語句以及用goto語句構(gòu)成循環(huán),goto語句是一種無條件轉(zhuǎn)移語句, 使用格式為: goto 語句標(biāo)號(hào); 標(biāo)號(hào)是一個(gè)標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符加上一個(gè)“:”一起出現(xiàn)在函數(shù)內(nèi)某處, 執(zhí)行g(shù)oto語句后,程序?qū)⑻D(zhuǎn)到該標(biāo)號(hào)處并執(zhí)行其后的語句。 通常goto語句與if條件語句連用, 當(dāng)滿足某一條件時(shí), 程序跳到標(biāo)號(hào)處運(yùn)行。 goto語句通常不用,主要因?yàn)樗鼘⑹钩绦驅(qū)哟尾磺?且不易讀,但在多層嵌套退出時(shí), 用goto語句則比較合理。,5,例 用if 和goto語句構(gòu)成循環(huán),求,#include main() int i,sum=0; i=1; loop: if(i=100) sum+=i; i+; goto loop; printf(“%d“,sum); ,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,6,6.3 while語句,while語句的一般形式為: while(表達(dá)式)語句 其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。 while語句的語義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí), 執(zhí)行循環(huán)體語句。,7,其執(zhí)行過程可用下圖表示:,8,【例6.2】用while語句求,用傳統(tǒng)流程圖和N-S結(jié)構(gòu)流程圖表示算法:,9,例 用while循環(huán)求,/*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(“%d“,sum); ,10,【例6.3】統(tǒng)計(jì)從鍵盤輸入一行字符的個(gè)數(shù)。,#include main() int n=0; printf(“input a string:n“); while(getchar()!=n) n+; printf(“%d“,n); ,程序中循環(huán)條件為getchar()!=n,其意義是,只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)。循環(huán)體n+完成對(duì)輸入字符個(gè)數(shù)計(jì)數(shù)。程序?qū)崿F(xiàn)了對(duì)輸入一行字符的字符個(gè)數(shù)計(jì)數(shù)。,11,使用while語句應(yīng)注意以下幾點(diǎn):,while語句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。 循環(huán)體如包括有一個(gè)以上的語句,則必須用括起來,組成復(fù)合語句。,12,【6.4】,main() int a=0,n; printf(“n input n: “); scanf(“%d“, ,程序?qū)?zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達(dá)式a+*2的值。該表達(dá)式等效于(a*2;a+)。,13,6.4 do-while語句,do-while語句的一般形式為: do 語句 while(表達(dá)式); 這個(gè)循環(huán)與while循環(huán)的不同在于: 它先執(zhí)行循環(huán)中的語句,然后再判斷表達(dá)式是否為真, 如果為真則繼續(xù)循環(huán); 如果為假, 則終止循環(huán)。 do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。,14,其執(zhí)行過程可用下圖表示。,15,【例6.5】用do-while語句求,16,main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(“%dn“,sum); ,當(dāng)有許多語句參加循環(huán)時(shí),要用“”和“”把它們括起來.,17,【例6.6】while和do-while循環(huán)比較。,(1) main() int sum=0,i; scanf(“%d”, ,18,(2) main() int sum=0,i; scanf(“%d”,19,6.5 for語句,在C語言中,for語句使用最為靈活,它完全可以取代 while 語句。它的一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,20,其執(zhí)行過程可用下圖表示:,21,for語句最簡單的形式也是最容易理解的形式如下:,for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量) 語句 循環(huán)變量賦初值總是一個(gè)賦值語句, 它用來給循環(huán)控制變量賦初值; 循環(huán)條件是一個(gè)關(guān)系表達(dá)式,它決定什么時(shí)候退出循環(huán); 循環(huán)變量增量,定義循環(huán)控制變量每循環(huán)一次后按什么方式變化。 這三個(gè)部分之間用“;”分開。,22,例如:,for(i=1; i100時(shí),結(jié)束循環(huán)。,23,相當(dāng)于:,i=1; while(i=100) sum=sum+i; i+;,24,對(duì)于for循環(huán)中語句的一般形式,就是如下的while循環(huán)形式:,表達(dá)式1; while(表達(dá)式2) 語句 表達(dá)式3; ,25,注意:,for循環(huán)中的“表達(dá)式1(循環(huán)變量賦初值)”、“表達(dá)式2(循環(huán)條件)”和“表達(dá)式3(循環(huán)變量增量)”都是選擇項(xiàng), 即可以缺省,但“;”不能缺省。,26,省略了“表達(dá)式1(循環(huán)變量賦初值)”, 表示不對(duì)循環(huán)控制變量賦初值。,27,省略了“表達(dá)式2(循環(huán)條件)”, 則不做其它處理時(shí)便成為死循環(huán)。 例如: for(i=1;i+)sum=sum+i; 相當(dāng)于: i=1; while(1) sum=sum+i; i+;,28,省略了“表達(dá)式3(循環(huán)變量增量)”, 則不對(duì)循環(huán)控制變量進(jìn)行操作,這時(shí)可在語句體中加入修改循環(huán)控制變量的語句。 例如: for(i=1;i=100;) sum=sum+i; i+;,29,省略了“表達(dá)式1(循環(huán)變量賦初值)”和“表達(dá)式3(循環(huán)變量增量)”。 例如: for(;i=100;) sum=sum+i; i+; 相當(dāng)于: while(i=100) sum=sum+i; i+;,30,3個(gè)表達(dá)式都可以省略。 例如: for(;)語句 相當(dāng)于: while(1)語句,31,表達(dá)式1可以是設(shè)置循環(huán)變量的初值的賦值表達(dá)式,也可以是其他表達(dá)式。 例如: for(sum=0;i=100;i+)sum=sum+i;,32,表達(dá)式1和表達(dá)式3可以是一個(gè)簡單表達(dá)式也可以是逗號(hào)表達(dá)式。 for(sum=0,i=1;i=100;i+)sum=sum+i; 或: for(i=0,j=100; i=100; i+,j-)k=i+j;,33,表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可是數(shù)值表達(dá)式或字符表達(dá)式,只要其值非零,就執(zhí)行循環(huán)體。 例如: for(i=0;(c=getchar()!=n;i+=c); 又如: for(;(c=getchar()!=n;) printf(“%c”,c);,34,循環(huán)的嵌套 三種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,(1) while() 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),35,6.6循環(huán)的嵌套 【例6.7】,main() int i, j, k; printf(“i j kn“); for (i=0; i2; i+) for(j=0; j2; j+) for(k=0; k2; k+) printf(“%d %d %dn“, i, j, k); ,I j k 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1,36,6.7幾種循環(huán)的比較,四種循環(huán)都可以用來處理同一個(gè)問題,一般可以互相代替。但一般不提倡用goto型循環(huán)。 while和do-while循環(huán),循環(huán)體中應(yīng)包括使循環(huán)趨于結(jié)束的語句。for語句功能最強(qiáng)。 用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成,而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。,37,6.8 break和continue語句 6.8.1 break語句,break語句通常用在循環(huán)語句和開關(guān)語句中。當(dāng)break用于開關(guān)語句switch中時(shí),可使程序跳出switch而執(zhí)行switch以后的語句;如果沒有break語句,則將成為一個(gè)死循環(huán)而無法退出。break在switch 中的用法已在前面介紹開關(guān)語句時(shí)的例子中碰到,這里不再舉例。 當(dāng)break語句用于do-while、for、while循環(huán)語句中時(shí),可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句, 通常break語句總是與if語句聯(lián)在一起。即滿足條件時(shí)便跳出循環(huán)。,38,【例6.8】,main() int i=0; char c; while(1) c=0; while(c!=13 ,39,注意:,break語句對(duì)if-else的條件語句不起作用。 在多層循環(huán)中, 一個(gè)break語句只向外跳一層。,40,6.8.2 continue 語句,continue語句的作用是跳過循環(huán)體中剩余的語句而強(qiáng)行執(zhí)行下一次循環(huán)。continue語句只用在for、while、do-while等循環(huán)體中,常與if條件語句一起使用,用來加速循環(huán)。其執(zhí)行過程可用下圖表示。,41,1) while(表達(dá)式1) if(表達(dá)式2)break; ,2)while(表達(dá)式1) if(表達(dá)式2)continue; ,42,43,【例6.9】,main() char c; while(c!=13) c=getch(); if(c=0X1B) continue; printf(“%cn“, c); ,44,6.9程序舉例,【例6.10】用公式 求。,45,#include main() 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.6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 制作生意合同范本
- 2025年天津年貨運(yùn)從業(yè)資格證模擬考試
- 買裝修材料合同范本
- 與機(jī)關(guān)單位合作合同范例
- 村級(jí)修橋合同范本
- 產(chǎn)品研發(fā)定制合同范本
- 信息咨詢收費(fèi)合同范本
- 伙合合同范本
- 勞動(dòng)合同范本 銀川
- 代理注冊(cè)服務(wù)合同范本
- 《火力發(fā)電廠水處理技術(shù)概述》課件
- 春節(jié)后復(fù)工安全培訓(xùn)課件
- 全國電子工業(yè)版初中信息技術(shù)第二冊(cè)第2單元2.1活動(dòng)3《使用云盤備份數(shù)據(jù)》教學(xué)設(shè)計(jì)
- 3.1產(chǎn)業(yè)轉(zhuǎn)移對(duì)區(qū)域發(fā)展的影響(第1課時(shí)) 【知識(shí)精研】高二地理課件(湘教版2019選擇性必修2)
- 2025年醫(yī)院實(shí)習(xí)協(xié)議書樣本
- 2025年湖南工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 招標(biāo)代理服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 財(cái)務(wù)人員防騙技巧培訓(xùn)課件
- 2024年云南中煙工業(yè)有限責(zé)任公司招聘筆試真題
- 2024年山東輕工職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2022新教材蘇教版科學(xué)5五年級(jí)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論