循環(huán)結(jié)構(gòu)程序設計,C語言程序設計課件,與中南大學出版社教材相配套_第1頁
循環(huán)結(jié)構(gòu)程序設計,C語言程序設計課件,與中南大學出版社教材相配套_第2頁
循環(huán)結(jié)構(gòu)程序設計,C語言程序設計課件,與中南大學出版社教材相配套_第3頁
循環(huán)結(jié)構(gòu)程序設計,C語言程序設計課件,與中南大學出版社教材相配套_第4頁
循環(huán)結(jié)構(gòu)程序設計,C語言程序設計課件,與中南大學出版社教材相配套_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第第4 4章章 循環(huán)結(jié)構(gòu)程序設計循環(huán)結(jié)構(gòu)程序設計 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)即反復的意思,在C語言中指反復執(zhí)行某些相同的操作。

2、循環(huán)分為當型循環(huán)和直到型循環(huán)。其傳統(tǒng)的流程圖如圖4-1(a)和(b)所示。 其相應的N-S流程圖如圖4-2(a)和(b)所示.當型循環(huán)指當條件成立時反復執(zhí)行語句,即先判斷后執(zhí)行;而直到型循環(huán)指先執(zhí)行語句然后判斷條件是否成立,當成立時再執(zhí)行語句,即先執(zhí)行后判斷。在C語言中可以用以下四種方法來實現(xiàn)循環(huán):1. 用goto語句和if語句構(gòu)成循環(huán);2. 用while語句;3. 用do-while語句;4. 用for語句。其中while語句和 for語句可以實現(xiàn)當型循環(huán)結(jié)構(gòu)。 do-while語句可以實現(xiàn)直到型循環(huán)結(jié)構(gòu),而用goto語句和if語句既可以實現(xiàn)當型循環(huán)結(jié)構(gòu)也可以實現(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)有兩種格式:格式一:語句標號:if(條件表達式) goto 語句標號; 【例4.1】 這種用goto語句和if語句構(gòu)成循環(huán)的語句執(zhí)行過程為:先計算條件表達式的值,當條件表達式成立(非0)時,執(zhí)行大括號中的語句或語句組,執(zhí)行到goto 語句時使程序又回到語句標號所指向的if語句,使得大括號中的語句反復執(zhí)行,當計算出的條件表達式的值不成立(為0)時,程序跳出循環(huán),執(zhí)行大括號以下的語句。從它的執(zhí)行過程,我們可以看出,它是一種當型循環(huán)。格式二:語句標號: if(條件表達式) goto 語句標號; 這種用g

4、oto語句和if語句構(gòu)成循環(huán)的語句執(zhí)行過程為:先執(zhí)行大括號中的語句或語句組,當執(zhí)行到if語句,先計算條件表達式的值,當條件表達式成立(非0)時,goto 語句使程序又回goto 語句所指向的語句標號所指向的語句,然后又執(zhí)行大括號中的語句,使得大括號中的語句反復執(zhí)行,當計算出的條件表達式的值為0時,程序跳出循環(huán),執(zhí)行大括號以下的語句。雖然它執(zhí)行循環(huán)體的條件是條件表達式成立,從這一點看,它與一般的直到型循環(huán)不同,但從它的執(zhí)行過程,我們可以看出,它也屬于一種直到型循環(huán)。用這種結(jié)構(gòu)編寫程序,例題4.1可以改寫為:main() int i,sum=0; i=1; loop: sum=sum+i; /*標

5、號名為loop*/ i=i+1; if (i=100) goto loop; printf(sum=%d,sum); 程序執(zhí)行結(jié)果為:sum=5050sum=5050 【例4.2】 使用格式一和格式二的循環(huán)不同點在于,第一種格式的循環(huán),循環(huán)體內(nèi)的語句可以不執(zhí)行,而第二種格式的循環(huán),循環(huán)體內(nèi)的語句至少要執(zhí)行一次。這里的循環(huán)體指語句標號和goto 語句標號及中間所有語句組成的一個集合。其中語句標號是按標識符規(guī)定書寫的符號(它的命名規(guī)則與變量名的命名規(guī)則相同,這在前面已經(jīng)介紹過,語句標號放在某一語句行的前面,標號后加冒號(:)。語句標號起標識語句的作用,語句標號必須與goto語句同處于一個函數(shù)中。C

6、語言不限制程序中使用標號的次數(shù),但各標號不得重名。 在結(jié)構(gòu)化程序設計中一般不主張使用goto語句控制循環(huán)結(jié)構(gòu), 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。一個使用goto語句較為合理的用法是跳出單循環(huán)或從多層的嵌套中跳出循環(huán)體。 4.3 while4.3 while語句語句 While語句可以實現(xiàn)當型循環(huán)結(jié)構(gòu)。其一般形式如下: while(表達式)語句 省略號代表的是循環(huán)體語句。當循環(huán)體是一條語句時,可以不用大括號,但當循環(huán)體是兩條或兩條以上語句時,一定要用大括號。 其傳統(tǒng)的流程圖和N-S流程圖分別如圖4-3(a)和(b)所示。 執(zhí)行過程如下: 先計算表達式的值,當值為真(非0)時,

7、執(zhí)行循環(huán)體語句,執(zhí)行完循環(huán)語句后,再返回計算機表達式的值,直到表達式的值為假(0)時,退出循環(huán),執(zhí)行while語句的下一條語句。其語句可以為空語句、簡單語句或作為循環(huán)體部分的復合語句。 【例4.3】【例4.4】 【例4.5】 在使用while語句時,應注意以下幾點:(1)while語句中的表達式一般是關(guān)系表達式或邏輯表達式,只要表達式的值為真(非0)即可繼續(xù)循環(huán); (2)循環(huán)體如包括有一個以上的語句,則必須用 括起來,組成復合語句;(3)應注意循環(huán)條件的選擇以避免死循環(huán);(4)允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。 4.4 do-while4.4 do-while語句

8、語句 do-while語句可以實現(xiàn)直到型循環(huán)結(jié)構(gòu)。其一般形式如下: do while(表達式)語句; 省略號代表的是循環(huán)體語句,表達式是循環(huán)條件。 其傳統(tǒng)的流程圖和N-S流程圖分別如圖4-1(b)和4-2(b)所示。循環(huán)是在循環(huán)的尾部檢驗它的條件,而不是在頭部。 其執(zhí)行過程如下: 先執(zhí)行循環(huán)體語句一次,再判斷表達式的值,若為真(非0),則繼續(xù)執(zhí)行循環(huán)體語句,直到表達式的值為假(0)時才退出循環(huán)。do-while語句和while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此,do-while語句至少要執(zhí)行一次循環(huán)體語句。而while語句是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語句也不執(zhí)行

9、。一般用while語句所編寫的程序也可以用do-while來編寫。【例4.6】對于do-while語句還應注意以下幾點: (1)在if語句,while語句中, 表達式后面都不能加分號, 而在 do-while語句的表達式后面則必須加分號; (2)do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套; (3)在do和while之間的循環(huán)體由多個語句組成時,也必須用 括起來組成一個復合語句; (4)do-while和while語句相互替換時,要注意修改循環(huán)控制條件。 4.5 for4.5 for語句語句 for語句是C語言中所提供的功能最強、使用最為靈活的一種循環(huán)語句。特別適

10、用于循環(huán)次數(shù)固定而循環(huán)條件不確定的情況。 4.5.1 for語句的一般形式語句的一般形式 for語句的一般形式如下:for(表達式1;表達式2;表達式3) (1)表達式1通常是用來給循環(huán)變量賦初值,一般是賦值表達式。也允許在for語句之外給循環(huán)變量賦初值,此時可省略該表達式; (2)表達式2通常是循環(huán)條件,一般為關(guān)系表達式或邏輯表達式,也可以是其它表達式; (3)表達式3通??捎脕硇薷难h(huán)變量的值,一般是賦值表達式。 三個表達式都是可選項,都可以省略。但特別提請注意的是,表達式1和表達式2后的分號“;”不能省略。 for語句的執(zhí)行過程如下: (1)首先計算表達式1的值; (2)再計算表達式2的

11、值,若值為真(非0)則執(zhí)行循環(huán)體語句一次,否則跳出循環(huán); (3)循環(huán)體語句執(zhí)行完后,再計算表達式3的值,轉(zhuǎn)(2)步去執(zhí)行。在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式3則可能計算多次。 for語句的流程圖見圖4-6。 有一點需要指出:for循環(huán)的條件檢驗總是在循環(huán)的頭部進行的。這也就是說,當開始時條件為不成立(0)時,不執(zhí)行循環(huán)體,例如程序段: x=10; for(y=10;y!=x,+y) printf ( %d , y); printf ( %d ,y); 進入循環(huán)中,由于x等于y,循環(huán)沒有被執(zhí)行。由于條件表達式為假,因此不論循環(huán)體還是循環(huán)控制變量的一目加都沒有被執(zhí)行,所以

12、y仍然是賦給它的值10,且在屏幕上顯示值為10。 for語句最主要的特點是:特別適合已知循環(huán)次數(shù)的循環(huán)語句,下面介紹一下for語句中循環(huán)次數(shù)的計算方法。根據(jù)for循環(huán)的循環(huán)變量的變化情況。循環(huán)次數(shù)的計算可以用公式進行計算: n=(int)(終值-初值+步長)/步長) 其中,初值指循環(huán)變量的初始值,終值指循環(huán)變量滿足條件的最終值,步長指循環(huán)變量每循環(huán)一次所變化的量。 例如:循環(huán)語句for(n=1;n=100;n+)(設n為整形變量)控制循環(huán)體反復執(zhí)行的次數(shù)為 n=(int)(100-1+1)/1)=100 又如:循環(huán)語句for(n=100;n0;n=n-2)(設n為整形變量)控制循環(huán)體反復執(zhí)行的

13、次數(shù)為 n=(int)(1-100-2)/(-2))=50 4.5.2 for4.5.2 for循環(huán)的變量循環(huán)的變量 最常用的一種變量是使用逗號運算符使得兩個或兩個以上的變量共同實現(xiàn)對循環(huán)的控制。例如,下面例子使用變量x和y共同來控制循環(huán),這兩個變量都是在for語句的內(nèi)部被初始化。for(x=0,y=0;x+y10;+x) y=getchar(); y=y-0;/*subtract the ASCII code for 0 from y*/ 這里逗號分隔了兩個初始化語句。每次x增加1,重復循環(huán),y值由鍵盤輸入。x和y之和大于或等于10時,才能中止循環(huán)。這就需要將y值初始化為零,以便在第一次計算

14、條件表達式的值時,它的值已經(jīng)被定義了。如果y沒有被定義,也許碰巧(或前面的程序用到過),它的值是10 或大于10,這就使得條件為false,并退出循環(huán)。 for循環(huán)還有另一種極有用的變體。在前面所提到的for語句的三個部分可以是C語言中任何有效的表達式。實際上,不必注意這些部分是用來干什么的。有些main中的for循的每個部分是由調(diào)用函數(shù)組成的,它們分別可以是提示用戶的信息或從鍵盤上輸入一個數(shù)。 4.5.3 無限循環(huán)無限循環(huán) for循環(huán)最有價值的一種用法是建立無限循環(huán)。由于構(gòu)成for循環(huán)的三個表達式都是沒有被要求,因此可以運用空的條件表達式而使得循環(huán)無休止地進行下去,例如: for(;) pr

15、intf(”this loop will run forever.n”) 有一點必須強調(diào):for循環(huán)中的語句可以是空語句,但不能省略分號,即for語句必須有兩個分號。4.5.4 無循環(huán)體無循環(huán)體for循環(huán)循環(huán) 正像C語言句法所定義的那樣,一條語句可以是空語句。這就是說,for循環(huán)體(或其他循環(huán)形式)都可以是空語句。這個事實可用來改善某些算法的效率以及產(chǎn)生時間延遲循環(huán)。 在編程過程中經(jīng)常需要給一個輸入流保留空間。例如,一個數(shù)據(jù)庫可能要求查詢一條信息,如“show all balance less than 40000”。那么,數(shù)據(jù)庫需要查詢每個字符,這些字符是無空格地逐個被放置在這條信息中的。即

16、,數(shù)據(jù)庫輸入處理程序識別“show”而不是“show”為一條命令。【例4.7】 【例4.8】【例4.9】在使用for語句中要注意以下幾點:(1)for語句中的各表達式都可省略,但分號間隔符不能少;如:for(;表達式;表達式)省去了表達式1;for(表達式;表達式)省去了表達式2;for(表達式;表達式;)省去了表達式3;for(;)省去了全部表達式。 (2)在循環(huán)變量已賦初值時,可省去表達式1。如省去表達式2或表達式3則將造成無限循環(huán),這時應在循環(huán)體內(nèi)設法結(jié)束循環(huán)。 (3)循環(huán)體可以是空語句。例如:從鍵盤輸入一行字符然后逐個輸出每一個字符。 (4)for語句也可與while,do-while

17、語句相互嵌套,構(gòu)成多重循環(huán)。4.6 循環(huán)的嵌套循環(huán)的嵌套 一個循環(huán)體內(nèi)的語句又包含另一個完整的循環(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)體中包括應反復執(zhí)行的操作語句,包括使循環(huán)趨于結(jié)束的語句(如i+,或i=i+1等)。 for循環(huán)可以在表達式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達式3中。因此for語句的功能更強,凡用while循環(huán)能完成的,用for循環(huán)都能實現(xiàn)。 (3)用while和do-while循環(huán)時,循環(huán)變量初始化的操作應在while和do-while語句之前完成。而for語句可以在表達式1中實現(xiàn)循環(huán)變量的初始化。 (4)while和for循環(huán)是先判斷表達式,后執(zhí)行語句;而do-while循環(huán)相反,是先執(zhí)行語句,后判斷表達式,而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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論