版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第4 4章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 4.1 4.1 循環(huán)概述循環(huán)概述 4.2 4.2 用用gotogoto語句和語句和ifif語句構(gòu)成循環(huán)語句構(gòu)成循環(huán) 4.3 while4.3 while語句語句 4.4 do-while4.4 do-while語句語句 4.5 for4.5 for語句語句 4.6 4.6 循環(huán)的嵌套循環(huán)的嵌套 4.7 4.7 幾種循環(huán)的比較幾種循環(huán)的比較 4.8 break4.8 break和和continuecontinue語句語句 4.9 4.9 程序舉例程序舉例 4.1 4.1 循環(huán)概述循環(huán)概述 所謂循環(huán)即反復(fù)的意思,在C語言中指反復(fù)執(zhí)行某些相同的操作。
2、循環(huán)分為當(dāng)型循環(huán)和直到型循環(huán)。其傳統(tǒng)的流程圖如圖4-1(a)和(b)所示。 其相應(yīng)的N-S流程圖如圖4-2(a)和(b)所示.當(dāng)型循環(huán)指當(dāng)條件成立時(shí)反復(fù)執(zhí)行語句,即先判斷后執(zhí)行;而直到型循環(huán)指先執(zhí)行語句然后判斷條件是否成立,當(dāng)成立時(shí)再執(zhí)行語句,即先執(zhí)行后判斷。在C語言中可以用以下四種方法來實(shí)現(xiàn)循環(huán):1. 用goto語句和if語句構(gòu)成循環(huán);2. 用while語句;3. 用do-while語句;4. 用for語句。其中while語句和 for語句可以實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu)。 do-while語句可以實(shí)現(xiàn)直到型循環(huán)結(jié)構(gòu),而用goto語句和if語句既可以實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu)也可以實(shí)現(xiàn)直到型循環(huán)結(jié)構(gòu)。4.24.2
3、用用gotogoto語句和語句和ifif語句構(gòu)成循環(huán)語句構(gòu)成循環(huán) 用goto語句和if語句構(gòu)成循環(huán)有兩種格式:格式一:語句標(biāo)號:if(條件表達(dá)式) goto 語句標(biāo)號; 【例4.1】 這種用goto語句和if語句構(gòu)成循環(huán)的語句執(zhí)行過程為:先計(jì)算條件表達(dá)式的值,當(dāng)條件表達(dá)式成立(非0)時(shí),執(zhí)行大括號中的語句或語句組,執(zhí)行到goto 語句時(shí)使程序又回到語句標(biāo)號所指向的if語句,使得大括號中的語句反復(fù)執(zhí)行,當(dāng)計(jì)算出的條件表達(dá)式的值不成立(為0)時(shí),程序跳出循環(huán),執(zhí)行大括號以下的語句。從它的執(zhí)行過程,我們可以看出,它是一種當(dāng)型循環(huán)。格式二:語句標(biāo)號: if(條件表達(dá)式) goto 語句標(biāo)號; 這種用g
4、oto語句和if語句構(gòu)成循環(huán)的語句執(zhí)行過程為:先執(zhí)行大括號中的語句或語句組,當(dāng)執(zhí)行到if語句,先計(jì)算條件表達(dá)式的值,當(dāng)條件表達(dá)式成立(非0)時(shí),goto 語句使程序又回goto 語句所指向的語句標(biāo)號所指向的語句,然后又執(zhí)行大括號中的語句,使得大括號中的語句反復(fù)執(zhí)行,當(dāng)計(jì)算出的條件表達(dá)式的值為0時(shí),程序跳出循環(huán),執(zhí)行大括號以下的語句。雖然它執(zhí)行循環(huán)體的條件是條件表達(dá)式成立,從這一點(diǎn)看,它與一般的直到型循環(huán)不同,但從它的執(zhí)行過程,我們可以看出,它也屬于一種直到型循環(huán)。用這種結(jié)構(gòu)編寫程序,例題4.1可以改寫為:main() int i,sum=0; i=1; loop: sum=sum+i; /*標(biāo)
5、號名為loop*/ i=i+1; if (i=100) goto loop; printf(sum=%d,sum); 程序執(zhí)行結(jié)果為:sum=5050sum=5050 【例4.2】 使用格式一和格式二的循環(huán)不同點(diǎn)在于,第一種格式的循環(huán),循環(huán)體內(nèi)的語句可以不執(zhí)行,而第二種格式的循環(huán),循環(huán)體內(nèi)的語句至少要執(zhí)行一次。這里的循環(huán)體指語句標(biāo)號和goto 語句標(biāo)號及中間所有語句組成的一個(gè)集合。其中語句標(biāo)號是按標(biāo)識符規(guī)定書寫的符號(它的命名規(guī)則與變量名的命名規(guī)則相同,這在前面已經(jīng)介紹過,語句標(biāo)號放在某一語句行的前面,標(biāo)號后加冒號(:)。語句標(biāo)號起標(biāo)識語句的作用,語句標(biāo)號必須與goto語句同處于一個(gè)函數(shù)中。C
6、語言不限制程序中使用標(biāo)號的次數(shù),但各標(biāo)號不得重名。 在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用goto語句控制循環(huán)結(jié)構(gòu), 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。一個(gè)使用goto語句較為合理的用法是跳出單循環(huán)或從多層的嵌套中跳出循環(huán)體。 4.3 while4.3 while語句語句 While語句可以實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu)。其一般形式如下: while(表達(dá)式)語句 省略號代表的是循環(huán)體語句。當(dāng)循環(huán)體是一條語句時(shí),可以不用大括號,但當(dāng)循環(huán)體是兩條或兩條以上語句時(shí),一定要用大括號。 其傳統(tǒng)的流程圖和N-S流程圖分別如圖4-3(a)和(b)所示。 執(zhí)行過程如下: 先計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí),
7、執(zhí)行循環(huán)體語句,執(zhí)行完循環(huán)語句后,再返回計(jì)算機(jī)表達(dá)式的值,直到表達(dá)式的值為假(0)時(shí),退出循環(huán),執(zhí)行while語句的下一條語句。其語句可以為空語句、簡單語句或作為循環(huán)體部分的復(fù)合語句。 【例4.3】【例4.4】 【例4.5】 在使用while語句時(shí),應(yīng)注意以下幾點(diǎn):(1)while語句中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán); (2)循環(huán)體如包括有一個(gè)以上的語句,則必須用 括起來,組成復(fù)合語句;(3)應(yīng)注意循環(huán)條件的選擇以避免死循環(huán);(4)允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。 4.4 do-while4.4 do-while語句
8、語句 do-while語句可以實(shí)現(xiàn)直到型循環(huán)結(jié)構(gòu)。其一般形式如下: do while(表達(dá)式)語句; 省略號代表的是循環(huán)體語句,表達(dá)式是循環(huán)條件。 其傳統(tǒng)的流程圖和N-S流程圖分別如圖4-1(b)和4-2(b)所示。循環(huán)是在循環(huán)的尾部檢驗(yàn)它的條件,而不是在頭部。 其執(zhí)行過程如下: 先執(zhí)行循環(huán)體語句一次,再判斷表達(dá)式的值,若為真(非0),則繼續(xù)執(zhí)行循環(huán)體語句,直到表達(dá)式的值為假(0)時(shí)才退出循環(huán)。do-while語句和while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此,do-while語句至少要執(zhí)行一次循環(huán)體語句。而while語句是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語句也不執(zhí)行
9、。一般用while語句所編寫的程序也可以用do-while來編寫?!纠?.6】對于do-while語句還應(yīng)注意以下幾點(diǎn): (1)在if語句,while語句中, 表達(dá)式后面都不能加分號, 而在 do-while語句的表達(dá)式后面則必須加分號; (2)do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套; (3)在do和while之間的循環(huán)體由多個(gè)語句組成時(shí),也必須用 括起來組成一個(gè)復(fù)合語句; (4)do-while和while語句相互替換時(shí),要注意修改循環(huán)控制條件。 4.5 for4.5 for語句語句 for語句是C語言中所提供的功能最強(qiáng)、使用最為靈活的一種循環(huán)語句。特別適
10、用于循環(huán)次數(shù)固定而循環(huán)條件不確定的情況。 4.5.1 for語句的一般形式語句的一般形式 for語句的一般形式如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) (1)表達(dá)式1通常是用來給循環(huán)變量賦初值,一般是賦值表達(dá)式。也允許在for語句之外給循環(huán)變量賦初值,此時(shí)可省略該表達(dá)式; (2)表達(dá)式2通常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其它表達(dá)式; (3)表達(dá)式3通??捎脕硇薷难h(huán)變量的值,一般是賦值表達(dá)式。 三個(gè)表達(dá)式都是可選項(xiàng),都可以省略。但特別提請注意的是,表達(dá)式1和表達(dá)式2后的分號“;”不能省略。 for語句的執(zhí)行過程如下: (1)首先計(jì)算表達(dá)式1的值; (2)再計(jì)算表達(dá)式2的
11、值,若值為真(非0)則執(zhí)行循環(huán)體語句一次,否則跳出循環(huán); (3)循環(huán)體語句執(zhí)行完后,再計(jì)算表達(dá)式3的值,轉(zhuǎn)(2)步去執(zhí)行。在整個(gè)for循環(huán)過程中,表達(dá)式1只計(jì)算一次,表達(dá)式2和表達(dá)式3則可能計(jì)算多次。 for語句的流程圖見圖4-6。 有一點(diǎn)需要指出:for循環(huán)的條件檢驗(yàn)總是在循環(huán)的頭部進(jìn)行的。這也就是說,當(dāng)開始時(shí)條件為不成立(0)時(shí),不執(zhí)行循環(huán)體,例如程序段: x=10; for(y=10;y!=x,+y) printf ( %d , y); printf ( %d ,y); 進(jìn)入循環(huán)中,由于x等于y,循環(huán)沒有被執(zhí)行。由于條件表達(dá)式為假,因此不論循環(huán)體還是循環(huán)控制變量的一目加都沒有被執(zhí)行,所以
12、y仍然是賦給它的值10,且在屏幕上顯示值為10。 for語句最主要的特點(diǎn)是:特別適合已知循環(huán)次數(shù)的循環(huán)語句,下面介紹一下for語句中循環(huán)次數(shù)的計(jì)算方法。根據(jù)for循環(huán)的循環(huán)變量的變化情況。循環(huán)次數(shù)的計(jì)算可以用公式進(jìn)行計(jì)算: n=(int)(終值-初值+步長)/步長) 其中,初值指循環(huán)變量的初始值,終值指循環(huán)變量滿足條件的最終值,步長指循環(huán)變量每循環(huán)一次所變化的量。 例如:循環(huán)語句for(n=1;n=100;n+)(設(shè)n為整形變量)控制循環(huán)體反復(fù)執(zhí)行的次數(shù)為 n=(int)(100-1+1)/1)=100 又如:循環(huán)語句for(n=100;n0;n=n-2)(設(shè)n為整形變量)控制循環(huán)體反復(fù)執(zhí)行的
13、次數(shù)為 n=(int)(1-100-2)/(-2))=50 4.5.2 for4.5.2 for循環(huán)的變量循環(huán)的變量 最常用的一種變量是使用逗號運(yùn)算符使得兩個(gè)或兩個(gè)以上的變量共同實(shí)現(xiàn)對循環(huán)的控制。例如,下面例子使用變量x和y共同來控制循環(huán),這兩個(gè)變量都是在for語句的內(nèi)部被初始化。for(x=0,y=0;x+y10;+x) y=getchar(); y=y-0;/*subtract the ASCII code for 0 from y*/ 這里逗號分隔了兩個(gè)初始化語句。每次x增加1,重復(fù)循環(huán),y值由鍵盤輸入。x和y之和大于或等于10時(shí),才能中止循環(huán)。這就需要將y值初始化為零,以便在第一次計(jì)算
14、條件表達(dá)式的值時(shí),它的值已經(jīng)被定義了。如果y沒有被定義,也許碰巧(或前面的程序用到過),它的值是10 或大于10,這就使得條件為false,并退出循環(huán)。 for循環(huán)還有另一種極有用的變體。在前面所提到的for語句的三個(gè)部分可以是C語言中任何有效的表達(dá)式。實(shí)際上,不必注意這些部分是用來干什么的。有些main中的for循的每個(gè)部分是由調(diào)用函數(shù)組成的,它們分別可以是提示用戶的信息或從鍵盤上輸入一個(gè)數(shù)。 4.5.3 無限循環(huán)無限循環(huán) for循環(huán)最有價(jià)值的一種用法是建立無限循環(huán)。由于構(gòu)成for循環(huán)的三個(gè)表達(dá)式都是沒有被要求,因此可以運(yùn)用空的條件表達(dá)式而使得循環(huán)無休止地進(jìn)行下去,例如: for(;) pr
15、intf(”this loop will run forever.n”) 有一點(diǎn)必須強(qiáng)調(diào):for循環(huán)中的語句可以是空語句,但不能省略分號,即for語句必須有兩個(gè)分號。4.5.4 無循環(huán)體無循環(huán)體for循環(huán)循環(huán) 正像C語言句法所定義的那樣,一條語句可以是空語句。這就是說,for循環(huán)體(或其他循環(huán)形式)都可以是空語句。這個(gè)事實(shí)可用來改善某些算法的效率以及產(chǎn)生時(shí)間延遲循環(huán)。 在編程過程中經(jīng)常需要給一個(gè)輸入流保留空間。例如,一個(gè)數(shù)據(jù)庫可能要求查詢一條信息,如“show all balance less than 40000”。那么,數(shù)據(jù)庫需要查詢每個(gè)字符,這些字符是無空格地逐個(gè)被放置在這條信息中的。即
16、,數(shù)據(jù)庫輸入處理程序識別“show”而不是“show”為一條命令?!纠?.7】 【例4.8】【例4.9】在使用for語句中要注意以下幾點(diǎn):(1)for語句中的各表達(dá)式都可省略,但分號間隔符不能少;如:for(;表達(dá)式;表達(dá)式)省去了表達(dá)式1;for(表達(dá)式;表達(dá)式)省去了表達(dá)式2;for(表達(dá)式;表達(dá)式;)省去了表達(dá)式3;for(;)省去了全部表達(dá)式。 (2)在循環(huán)變量已賦初值時(shí),可省去表達(dá)式1。如省去表達(dá)式2或表達(dá)式3則將造成無限循環(huán),這時(shí)應(yīng)在循環(huán)體內(nèi)設(shè)法結(jié)束循環(huán)。 (3)循環(huán)體可以是空語句。例如:從鍵盤輸入一行字符然后逐個(gè)輸出每一個(gè)字符。 (4)for語句也可與while,do-while
17、語句相互嵌套,構(gòu)成多重循環(huán)。4.6 循環(huán)的嵌套循環(huán)的嵌套 一個(gè)循環(huán)體內(nèi)的語句又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。如果內(nèi)嵌的循環(huán)體中還包含完整的循環(huán),這就構(gòu)成了多層循環(huán)。 三種循環(huán)語句(while,for,do-while)可以相互嵌套。例如,以下幾種均為合法的循環(huán)嵌套。 (1)for語句和while語句構(gòu)成的循環(huán)嵌套;for() while() (2)do-while語句和for語句構(gòu)成的循環(huán)嵌套;do for( ) while(); (3)do-while語句和while語句構(gòu)成的循環(huán)嵌套;while() do() while(); (4)for語句和for語句構(gòu)成的循環(huán)嵌套。 for
18、( ) for() 【例4.10】【例4.11】4.7 幾種循環(huán)的比較幾種循環(huán)的比較 (1)四種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。但一般不提倡使用goto型循環(huán)語句; (2)while和do-while循環(huán),只在while后面指定循環(huán)條件,在循環(huán)體中包括應(yīng)反復(fù)執(zhí)行的操作語句,包括使循環(huán)趨于結(jié)束的語句(如i+,或i=i+1等)。 for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。 (3)用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成。而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。 (4)while和for循環(huán)是先判斷表達(dá)式,后執(zhí)行語句;而do-while循環(huán)相反,是先執(zhí)行語句,后判斷表達(dá)式,而goto循環(huán)則兩者兼有。 (5)對while循環(huán)、do-while循環(huán)和for循環(huán),可以用break語句跳出循環(huán),用con
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生態(tài)環(huán)保渣土資源化利用承包合同4篇
- 2025年農(nóng)業(yè)大棚租賃與蔬菜種植一體化服務(wù)合同4篇
- 2025年度照明燈具代加工服務(wù)合同模板4篇
- 2025年度校園食堂炊事員職務(wù)聘用合同書3篇
- 2025年度智慧城市基礎(chǔ)設(shè)施大包工程合同4篇
- 2024版建設(shè)工程借款合同范本簡單
- 2025年度文化創(chuàng)意產(chǎn)業(yè)園租賃合同示范文本4篇
- 2025年度安保應(yīng)急響應(yīng)預(yù)案制定合同范本3篇
- 2024物業(yè)房屋裝修工程合同工程量清單
- 2024版酒類專賣店加盟的合同
- 物業(yè)民法典知識培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識點(diǎn)詳解
- 2024-2025學(xué)年山東省德州市高中五校高二上學(xué)期期中考試地理試題(解析版)
- 《萬方數(shù)據(jù)資源介紹》課件
- 麻風(fēng)病病情分析
- 《急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)》
- 第一章-地震工程學(xué)概論
- JJF(陜) 063-2021 漆膜沖擊器校準(zhǔn)規(guī)范
- 《中國糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- TSGD7002-2023-壓力管道元件型式試驗(yàn)規(guī)則
- 2024年度家庭醫(yī)生簽約服務(wù)培訓(xùn)課件
評論
0/150
提交評論