C語言程序設(shè)計教程(第5版)_第5章_循環(huán)結(jié)構(gòu)_第1頁
C語言程序設(shè)計教程(第5版)_第5章_循環(huán)結(jié)構(gòu)_第2頁
C語言程序設(shè)計教程(第5版)_第5章_循環(huán)結(jié)構(gòu)_第3頁
C語言程序設(shè)計教程(第5版)_第5章_循環(huán)結(jié)構(gòu)_第4頁
C語言程序設(shè)計教程(第5版)_第5章_循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計教程(第5版)人民郵電出版社第5章 循環(huán)結(jié)構(gòu) 李麗娟 2019年8月第5章 循環(huán)結(jié)構(gòu)本章主要內(nèi)容1. for循環(huán)語句結(jié)構(gòu)2. while循環(huán)語句結(jié)構(gòu)3. do-while循環(huán)結(jié)構(gòu)4. break和continue語句的作用5. 循環(huán)結(jié)構(gòu)的嵌套6. 案例分析第5章 循環(huán)結(jié)構(gòu)循環(huán)就是重復(fù)地執(zhí)行某些語句。程序中的循環(huán)次數(shù)是有限的,由循環(huán)條件決定可以確定循環(huán)次數(shù)。 C語言提供了3種循環(huán)結(jié)構(gòu)語句: for語句 while語句 do_while語句5.1 for語句for語句是一種計數(shù)循環(huán)。循環(huán)次數(shù)由循環(huán)變量來控制。 for語句的一般形式為:for (;) for語句的3個重要的組成部分:1

2、初始表達式初始化循環(huán)控制變量。2條件表達式測試循環(huán)條件。3循環(huán)表達式更新循環(huán)控制變量的值。5.1 for語句for語句的語法功能:1計算的值。該表達式是對循環(huán)控制變量進行初始化。2判斷的值。該表達式就是循環(huán)條件,若該表達式的值為“真”,則執(zhí)行; 若該表達式的值為“假”,則退出循環(huán),執(zhí)行循環(huán)結(jié)構(gòu)外的語句。3計算的值。該表達式更新循環(huán)控制變量的值。4轉(zhuǎn)第2步。for (;) 5.1 for語句for語句的流程圖:注意:若中有多條語句,則構(gòu)成復(fù)合語句,被包含在一對花括號中。若只有一條,可以不使用花括號。5.1 for語句例1:編寫程序,求幾何級數(shù)之和:分析:該數(shù)學(xué)表達式為123100。設(shè):sum為級

3、數(shù)的和(初值為零); i為循環(huán)變量; 將i從1按步長為1增加到100,循環(huán)計算: sum=sum+i; 求得該級數(shù)的和。程序:example5_1.c 5.1 for語句 for語句所具有的特性。1可以省略,但須保留分號(;),同時在for之前必須給循環(huán)控制變量賦值,形式為: ; for(;) 2一般不可省略,否則為無限循環(huán)。例如: for(i=1; i+) sum =sum+i;相當于條件總為真,程序會一直不停地執(zhí)行直到“數(shù)據(jù)溢出”。5.1 for語句3亦可省略,但在循環(huán)語句體中必須有語句來修改循環(huán)變量,以使條件表達式的值在某一時刻為假,使程序能正常結(jié)束循環(huán)。 例如:for(sum=0, i

4、=1; i=100;) sum = sum +i; i+;43個表達式均省略,即for(;),為無限循環(huán),程序中要避免這種情況的發(fā)生。5.1 for語句5條件表達式可以是關(guān)系表達式、數(shù)值表達式。只要表達式的值不等于零,就執(zhí)行循環(huán)體語句。 如: for( i=0; (c=getchar()!=n;i+=c);6初始表達式、循環(huán)表達式可以是逗號表達式,用來完成逗號表達式中各表達式的功能。例如: for (sum=0, i=1; i=100; i+, i+)相當于: sum=0; for(i=1; i0,b0; 如果ab,或者輸入的值為負數(shù),則程序提示輸入錯誤,不進行任何計算,直接退出程序。 5.1

5、 for語句程序流程圖:程序:example5_2.c 思考:該算法的缺點;設(shè)計更好的算法。假如輸入的數(shù)可以為任意整數(shù), 如果ab,計算 ; 如果ab,則計算 。 請設(shè)計算法并編寫程序驗證。5.1 for語句例3:編寫程序,從鍵盤輸入m和n的值,用符號“*”在屏幕上打印出如下所示具有m行n列的矩形圖案。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *分析: 圖案有規(guī)律,共有m行,每行有n個*號。 可采用循環(huán)嵌套的方式: 第1層(外層)控制行數(shù),用i來

6、表示,輸出m行“*” ; 第2層(內(nèi)層)控制列數(shù),用j來表示,輸出n列“*” 。5.1 for語句算法流程圖如圖所示: 虛線框內(nèi)是內(nèi)層循環(huán),用來輸出每一行的n個*號。程序: example5_3.c 思考: 怎樣利用for循環(huán)的嵌套,輸出更多有規(guī)律的平面圖案。關(guān)鍵:找出圖案的規(guī)律。5.1 for語句例4:編寫一個可以為小學(xué)生提供加法、減法和乘法的二元算術(shù)運算練習(xí)的程序,計算100以內(nèi)的兩個數(shù)的和、兩個數(shù)的差和兩個數(shù)得的積,每次測試10 個題目,依次由學(xué)生輸入答案,并由計算機判斷輸入的答案是否正確,最后由計算機給出簡單評價。分析:根據(jù)題意,組成算術(shù)表達式的操作符有3種形式: +、*,分別用1、2

7、、3來代表。用ops表示操作符,a,b分別代表兩個操作數(shù); a,b和ops由計算機隨機生成,并計算表達式的值result ;用戶輸入表達式的結(jié)果input;將input與result進行比較;通過比較的結(jié)果,給出對計算結(jié)果的評價。5.1 for語句程序算法流程圖如圖所示:程序:example5_4.c程序特別處理:如果(ab), 計算(ab);否則計算(ba)。思考:1如果每次測試的題目不止10個,需要怎樣修改算法和程序?2如果要求程序在結(jié)束了一組測試之后,可以繼續(xù)進行測試,需要怎樣修改算法和程序?3如果要加入兩位數(shù)的除法計算,需要怎樣修改算法和程序?5.2 while語句while語句的一般

8、形式為: while() 循環(huán)語句; 循環(huán)變量表達式; 和一起構(gòu)成循環(huán)體語句。while語句的語法功能:1計算的值,若該值為“假”,則跳出循環(huán),執(zhí)行循環(huán)體后面的語句;若該值為“真”,則執(zhí)行循環(huán)體語句。2重復(fù)步驟1的操作。while語句的流程圖如圖所示5.2 while語句 while() 循環(huán)語句; 循環(huán)變量表達式; 關(guān)于while語句的幾點說明。1不可缺少,其作用是更新計算循環(huán)變量的值,使循環(huán)能正常結(jié)束。2若沒有,則有可能會使程序出現(xiàn)無限循環(huán)而發(fā)生錯誤。3由于while循環(huán)是先判斷的值,后決定是否執(zhí)行,因此,有可能一次也沒有執(zhí)行。5.2 while語句例5:改寫程序,將例5-1所示的簡單幾何

9、級數(shù)求和問題用while語句來實現(xiàn)。 (閱讀、思考、比較)5.2 while語句例6:編寫程序,從鍵盤輸入一個正整數(shù)n,求n!。分析:n!=n*(n1)*(n2)*2*1 (約定:n0,0!=1) 計算機在計算階乘時,是從1開始計算直到n為止。 用i代表循環(huán)變量,s代表n!的結(jié)果值,則循環(huán)計算表達式:s=s*i,即可求得n!。算法流程圖如圖所示。 程序: example5_6.c思考:能否用for循環(huán)實現(xiàn)?5.2 while語句例7:編寫程序,統(tǒng)計從鍵盤輸入的字符個數(shù)(回車換行符也是一個字符),當遇到結(jié)束標志時程序結(jié)束。分析:關(guān)鍵是循環(huán)計數(shù)。 設(shè)置一個累加器count(初值為0),每次從鍵盤輸

10、入一個字符,只要該字符的值不等于結(jié)束標志,累加器的值就增1:count=count+1;算法流程圖如圖所示。程序: example5_7.c5.2 while語句例8:閱讀練習(xí):【例5-8】 編寫程序,進行學(xué)生某門課程成績的分類統(tǒng)計。從鍵盤輸入每位學(xué)生的成績等級,以大小寫的A、B、C、D和E表示成績等級,A為最高,D為最低。統(tǒng)計出總?cè)藬?shù)及各成績段的人數(shù),忽略回車鍵和空格鍵,以EOF作為輸入結(jié)束。思考:算法流程圖的其他表示方法。5.3 do-while語句do_while語句的一般形式為: do while();do_while語句的語法功能:1執(zhí)行,2計算; 若該表達式的值為“真”,則執(zhí)行步驟

11、1; 若該表達式的值為“假”,則退出循環(huán)語句結(jié)構(gòu)。do_while語句的流程圖如圖所示注意:要避免出現(xiàn)無限循環(huán)而發(fā)生錯誤。5.3 do-while語句集中循環(huán)的特點比較: do_while與while和for循環(huán)的區(qū)別: do_while循環(huán)中的至少會執(zhí)行一次; 而while和for循環(huán)中的有可能一次也不被執(zhí)行。 for循環(huán)和while循環(huán)的算法流程圖描述是一致的。 for循環(huán)適合于循環(huán)次數(shù)確定的情況。 對大多數(shù)問題,do_while、while和for循環(huán)是可以互換的。5.3 do-while語句例9:求幾何級數(shù)的和: 用do_while語句的形式實現(xiàn)。分析:循環(huán)變量i的值從1100遞增,i

12、的初值為1、終值為100, 累加器sum的初值為0 循環(huán)計算:sum=sum+i。算法流程圖如圖所示。 程序:exam5_9.c5.3 do-while語句例10:編寫程序,從鍵盤輸入x的值,求 ,直到最后一項絕對值小于le7(即107)為止(注:x為弧度值)。分析:關(guān)鍵是對多項式進行分解計算。 第1項為x;從第2項開始,每一項都是前一項乘以一個因子: (n=3,5,7,9)用s代表sin x的值,s的初值為0; 用t代表每一項的值,t的初值為x; 從第2項開始,后面每1項的值為: (n=3,5,7,9)循環(huán)計算表達式:s=s+t;直到t的值滿足精度要求為止。5.3 do-while語句算法流

13、程圖如圖所示。 程序: example5_10.c思考: 程序怎樣控制計算的精度? 可否用while和for循環(huán)來實現(xiàn)? 其他算法。5.4 用于循環(huán)中的break語句和continue語句1break語句break語句可用于分支結(jié)構(gòu)和循環(huán)語句結(jié)構(gòu)。break語句的作用: 跳出當前的控制結(jié)構(gòu)。 在循環(huán)語句中,要謹慎使用break語句。 常用于循環(huán)語句體內(nèi)某一個if條件分支的語句中,用來表示在循環(huán)過程中滿足某一條件時,結(jié)束循環(huán)。5.4 用于循環(huán)中的break語句和continue語句例11:編寫程序,求圓面積在100平方米為以內(nèi)的半徑,輸出所有滿足條件的半徑值和圓面積的值,并輸出第1個大于100的

14、圓半徑和圓面積。分析:計算圓面積的表達式為:r2。 依次取半徑為1,2,3,循環(huán)計算圓的面積area; 當area100時結(jié)束。算法流程圖如圖所示,外層虛線框為循環(huán)結(jié)構(gòu),內(nèi)層虛線框為if結(jié)構(gòu)。程序: example5_115.4 用于循環(huán)中的break語句和continue語句循環(huán)結(jié)構(gòu)中若采用了break語句,其算法結(jié)構(gòu)屬于非結(jié)構(gòu)化的設(shè)計。用于結(jié)束當前循環(huán)語句的break語句都可以修改成不使用break語句的形式。應(yīng)盡量避免使用break語句,滿足結(jié)構(gòu)化的要求。思考: 怎樣修改例11的程序,使其成為結(jié)構(gòu)化的程序。提示5.4 用于循環(huán)中的break語句和continue語句2continue語句

15、continue語句的一般形式為: continue;continue的語法規(guī)則: 結(jié)束本次循環(huán),提前進入下一輪循環(huán)。注意: continue語句不會跳出循環(huán)結(jié)構(gòu),而是提前進行下一個循環(huán)。while語句和do_while語句遇到continue時,程序會立刻轉(zhuǎn)到條件表達式,開始下一輪循環(huán);而在for語句中遇到continue時,程序會立刻轉(zhuǎn)到循環(huán)表達式,更新循環(huán)變量,開始下一輪循環(huán)。5.4 用于循環(huán)中的break語句和continue語句例12:編寫程序,輸出在50100中不能被3整除的數(shù)。分析:對任意正整數(shù)n,若n%30,則輸出該數(shù)n; 如果n%30,則不輸出該數(shù)n。算法流程圖如圖所示:程序

16、:example5_12.c 思考:不使用continue語句,怎樣修改程序?5.4 用于循環(huán)中的break語句和continue語句 continue語句同break語句一樣,也有可能會破壞程序的結(jié)構(gòu)化,使程序成為非結(jié)構(gòu)化的程序,因此,應(yīng)當盡量避免使用continue語句。提示5.4 用于循環(huán)中的break語句和continue語句例13:編寫程序,循環(huán)地從鍵盤輸入整數(shù),計算并輸出數(shù)的個數(shù)、總和以及算術(shù)平均值,若輸入了數(shù)字0,則不計入總數(shù),以結(jié)束標志作為輸入的結(jié)束。分析:假設(shè)從鍵盤輸入的整數(shù)為n,數(shù)據(jù)的個數(shù)為count,數(shù)據(jù)的總和為sum,算術(shù)平均值為average。如果n=0,則計數(shù)cou

17、nt的值不增加,不計入總和;否則count的值增1,總合sum=sum+n。最后的算術(shù)平均值為average=sum/n。算法流程圖如圖所示:程序:example5_ 13.c 思考:不使用continue語句,怎樣修改程序?5.4 用于循環(huán)中的break語句和continue語句比較break語句和continue語句的區(qū)別:例14:閱讀程序: example5_14.c 和example5_14a.c。比較break語句和continue語句在程序中的區(qū)別。注意: 為確保算法的結(jié)構(gòu)化,清盡量不用或少用break和continue語句。5.5 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套,指的是在某一種循環(huán)

18、結(jié)構(gòu)的語句中包含有另一個循環(huán)結(jié)構(gòu)。理論上,循環(huán)嵌套的深度不受限制,但實際中不提倡使用嵌套層次太多的循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)嵌套時,要注意: 嵌套的層次不能交叉; 嵌套的內(nèi)外層循環(huán)不能使用同名的循環(huán)變量; 并列結(jié)構(gòu)的內(nèi)外層循環(huán)允許使用同名的循環(huán)變量。5.5 循環(huán)結(jié)構(gòu)的嵌套例15:編寫程序,在屏幕上輸出階梯形式的乘法口訣表。分析;乘法口訣表可以由9行9列來表示,可用i代表行,j代表列。 其中:第1行有1列 第2行有2列 第i行有i列利用循環(huán)嵌套,算法流程圖如圖所示:程序: example5_15.c 5.6 goto語句goto語句是一種無條件轉(zhuǎn)向語句,可以用在程序的任何地方。goto語句的一般形式為:

19、 goto ;goto語句的作用:轉(zhuǎn)到標號語句所在的地方繼續(xù)執(zhí)行。說明: 為任何合法的標識符; 放在某個語句前面并加上冒號“:”作為語句的標號; 只對goto 語句有意義,帶有標號的語句被稱作標號語句。例如:error:、end:、exp:等均為合法的語句的標號。5.6 goto語句 goto語句是一種非結(jié)構(gòu)化的語句。goto語句會破壞結(jié)構(gòu)化程序的邏輯結(jié)構(gòu),嚴重時會造成程序錯誤,因此,在程序設(shè)計中應(yīng)盡量少用或不用goto語句。 goto語句常用于在深層嵌套的情況下從里層完全退出到嵌套的最外層。特別提示如: for() for() for() ; if (mistake) goto error;

20、 ;error: ;5.6 goto語句例16:閱讀【例5-16】,用 goto語句計算簡單幾何級數(shù)的和。回顧該問題的其他解決方案。例17:編寫程序,輸出40以內(nèi)的能同時被3和4整除的數(shù)。分別給出兩種算法:使用goto語句。5.6 goto語句算法流程圖: 算法為非結(jié)構(gòu)化的或:程序:example5_17.c 5.6 goto語句不使用goto語句來實現(xiàn)。算法流程圖: 程序: example5_18.c 比較例5-17和例5-18的算法。思考結(jié)構(gòu)化算法的思想。5.7 程 序 范 例【例5-19】 編寫程序,輸出ASC序列中從33127(十進制)的字符對照表。算法核心:簡單的循環(huán)輸出。【例5-20】 設(shè)公雞每只5元,母雞每只3元,小雞每

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論