C第2版(第5章循環(huán)結構)_第1頁
C第2版(第5章循環(huán)結構)_第2頁
C第2版(第5章循環(huán)結構)_第3頁
C第2版(第5章循環(huán)結構)_第4頁
C第2版(第5章循環(huán)結構)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序設計教程

(第2版)第5章循環(huán)結構1

第5章循環(huán)結構本章主要內容1.

for循環(huán)語句結構2.

while循環(huán)語句結構3.

do-while循環(huán)結構4.

break和continue語句的作用5.循環(huán)結構的嵌套6.案例分析2第1章引言2024/5/6第5章循環(huán)結構

循環(huán)就是重復地執(zhí)行某些語句。

程序中的循環(huán)次數(shù)是有限的,由循環(huán)條件決定可以確定循環(huán)次數(shù)。

C語言提供了3種循環(huán)結構語句: ①for語句 ②while語句 ③do_while語句3第1章引言2024/5/65.1for語句

for語句是一種計數(shù)循環(huán)。循環(huán)次數(shù)由循環(huán)變量來控制。

for語句的一般形式為:

for(<初始表達式>;<條件表達式>;<循環(huán)表達式>) { <循環(huán)體語句> }

for語句的3個重要的組成部分: 1.初始表達式——初始化循環(huán)控制變量。 2.條件表達式——測試循環(huán)條件。 3.循環(huán)表達式——更新循環(huán)控制變量的值。4第1章引言2024/5/65.1for語句

for語句的語法功能:1.計算<初始表達式>的值。該表達式是對循環(huán)控制變量進行初始化。2.判斷<條件表達式>的值。該表達式就是循環(huán)條件,若該表達式的值為“假”,則退出循環(huán),執(zhí)行循環(huán)結構外的語句;若該表達式的值為“真”,則執(zhí)行<循環(huán)體語句>。3.計算<循環(huán)表達式>的值。該表達式更新循環(huán)控制變量的值。4.轉第2步。for(<初始表達式>;<條件表達式>;<循環(huán)表達式>){ <循環(huán)體語句>}5第1章引言2024/5/65.1for語句

for語句的流程圖:

注意:①若<循環(huán)體語句>中有多條語句,則構成復合語句,被包含在一對花括號中。②若<循環(huán)體語句>只有一條,可以不使用花括號。6第1章引言2024/5/65.1for語句例1:編寫程序,求幾何級數(shù)之和:分析:該數(shù)學表達式為1+2+3+…+100。設:sum為級數(shù)的和(初值為零);i為循環(huán)變量;將i從1按步長為1增加到100,循環(huán)計算:

sum=sum+i;求得該級數(shù)的和。程序:example5_1.c

7第1章引言2024/5/65.1for語句

for語句所具有的特性。1.<初始表達式>可以省略,但須保留分號(;),同時在for之前必須給循環(huán)控制變量賦值,形式為:

<初始表達式>;for(;<條件表達式>;<循環(huán)表達式>)

<循環(huán)體語句>2.<條件表達式>一般不可省略,否則為無限循環(huán)。例如:

for(i=1;;i++)

sum=sum+i;相當于條件總為真,程序會一直不停地執(zhí)行直到“數(shù)據(jù)溢出”。8第1章引言2024/5/65.1for語句3.<循環(huán)表達式>亦可省略,但在循環(huán)語句體中必須有語句來修改循環(huán)變量,以使條件表達式的值在某一時刻為假,使程序能正常結束循環(huán)。例如:for(sum=0,i=1;i<=100;){sum=sum+i;

i++;}4.3個表達式均省略,即for(;;),為無限循環(huán),程序中要避免這種情況的發(fā)生。9第1章引言2024/5/65.1for語句5.條件表達式可以是關系表達式、數(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;i<=100;i=i+2)7.for循環(huán)也可以嵌套,執(zhí)行時是先執(zhí)行最里層的循環(huán),再執(zhí)行其外一層的循環(huán)。10第1章引言2024/5/65.1for語句例2:編寫程序,從鍵盤輸入兩個不等于零的正整數(shù)a、b(a<b),求它們之間的幾何級數(shù)的和,數(shù)學表達式為:分析:

①所求級數(shù)和的初值和終值由鍵盤任意輸入;②題目要求初值a<b,并且a>0,b>0;③如果a>b,或者輸入的值為負數(shù),則程序提示輸入錯誤,不進行任何計算,直接退出程序。11第1章引言2024/5/65.1for語句

程序流程圖:程序:example5_2.c

思考:①該算法的缺點;②設計更好的算法。③假如輸入的數(shù)可以為任意整數(shù),如果a≤b,計算

;如果a>b,則計算

。請設計算法并編寫程序驗證。12第1章引言2024/5/65.1for語句例3:編寫程序,從鍵盤輸入m和n的值,用符號“*”在屏幕上打印出如下所示具有m行n列的矩形圖案。********************************************************分析:

①圖案有規(guī)律,共有m行,每行有n個*號。②可采用循環(huán)嵌套的方式:第1層(外層)控制行數(shù),用i來表示,輸出m行“*”;第2層(內層)控制列數(shù),用j來表示,輸出n列“*”

。13第1章引言2024/5/65.1for語句

算法流程圖如圖所示:虛線框內是內層循環(huán),用來輸出每一行的n個*號。程序:

example5_3.c思考:怎樣利用for循環(huán)的嵌套,輸出更多有規(guī)律的平面圖案。

關鍵:找出圖案的規(guī)律。14第1章引言2024/5/65.1for語句例4:編寫一個可以為小學生提供加法、減法和乘法的二元算術運算練習的程序,計算100以內的兩個數(shù)的和、兩個數(shù)的差和兩個數(shù)得的積,每次測試10個題目,依次由學生輸入答案,并由計算機判斷輸入的答案是否正確,最后由計算機給出簡單評價。分析:①根據(jù)題意,組成算術表達式的操作符有3種形式:

+、?、*,分別用1、2、3來代表。②用ops表示操作符,a,b分別代表兩個操作數(shù);③a,b和ops由計算機隨機生成,并計算表達式的值result;④用戶輸入表達式的結果input;⑤將input與result進行比較;⑥通過比較的結果,給出對計算結果的評價。15第1章引言2024/5/65.1for語句

程序算法流程圖如圖所示:程序:example5_4.c

程序特別處理:如果(a>b),計算(a?b);否則計算(b?a)。思考:1.如果每次測試的題目不止10個,需要怎樣修改算法和程序?2.如果要求程序在結束了一組測試之后,可以繼續(xù)進行測試,需要怎樣修改算法和程序?3.如果要加入兩位數(shù)的除法計算,需要怎樣修改算法和程序?16第1章引言2024/5/65.2while語句

while語句的一般形式為:

while(<循環(huán)表達式>)

{

循環(huán)語句;

循環(huán)變量表達式;

}

<循環(huán)語句>和<循環(huán)變量表達式>一起構成循環(huán)體語句。

while語句的語法功能:1.計算<循環(huán)表達式>的值,若該值為“假”,則跳出循環(huán),執(zhí)行循環(huán)體后面的語句;若該值為“真”,則執(zhí)行循環(huán)體語句。2.重復步驟1的操作。

while語句的流程圖如圖所示17第1章引言2024/5/65.2while語句

while(<循環(huán)表達式>)

{

循環(huán)語句;

循環(huán)變量表達式;

}

關于while語句的幾點說明。1.<循環(huán)變量表達式>不可缺少,其作用是更新計算循環(huán)變量的值,使循環(huán)能正常結束。2.若沒有<循環(huán)變量表達式>,則有可能會使程序出現(xiàn)無限循環(huán)而發(fā)生錯誤。3.由于while循環(huán)是先判斷<循環(huán)表達式>的值,后決定是否執(zhí)行<循環(huán)體語句>,因此,<循環(huán)體語句>有可能一次也沒有執(zhí)行。18第1章引言2024/5/65.2while語句例5:改寫程序,將例5-1所示的簡單幾何級數(shù)求和問題用while語句來實現(xiàn)。

(閱讀、思考、比較)19第1章引言2024/5/65.2while語句例6:編寫程序,從鍵盤輸入一個正整數(shù)n,求n!。分析:n!=n*(n?1)*(n?2)*…*2*1(約定:n≥0,0!=1)計算機在計算階乘時,是從1開始計算直到n為止。用i代表循環(huán)變量,s代表n!的結果值,則循環(huán)計算表達式:s=s*i,即可求得n!。

算法流程圖如圖所示。程序:

example5_6.c

思考:能否用for循環(huán)實現(xiàn)?20第1章引言2024/5/65.2while語句例7:編寫程序,統(tǒng)計從鍵盤輸入的字符個數(shù)(回車換行符也是一個字符),當遇到結束標志時程序結束。分析:關鍵是循環(huán)計數(shù)。設置一個累加器count(初值為0),每次從鍵盤輸入一個字符,只要該字符的值不等于結束標志,累加器的值就增1:count=count+1;

算法流程圖如圖所示。程序:

example5_7.c21第1章引言2024/5/65.2while語句例8:

閱讀練習:【例5-8】編寫程序,進行學生某門課程成績的分類統(tǒng)計。從鍵盤輸入每位學生的成績等級,以大小寫的A、B、C、D和E表示成績等級,A為最高,D為最低。統(tǒng)計出總人數(shù)及各成績段的人數(shù),忽略回車鍵和空格鍵,以EOF作為輸入結束。

思考:算法流程圖的其他表示方法。22第1章引言2024/5/65.3do-while語句

do_while語句的一般形式為:

do

{

<循環(huán)體語句>

}while(<條件表達式>);

do_while語句的語法功能:1.執(zhí)行<循環(huán)體語句>,2.計算<條件表達式>;若該表達式的值為“真”,則執(zhí)行步驟1;若該表達式的值為“假”,則退出循環(huán)語句結構。

do_while語句的流程圖如圖所示

注意:要避免出現(xiàn)無限循環(huán)而發(fā)生錯誤。23第1章引言2024/5/65.3do-while語句

集中循環(huán)的特點比較:①do_while與while和for循環(huán)的區(qū)別:

do_while循環(huán)中的<循環(huán)體語句>至少會執(zhí)行一次;而while和for循環(huán)中的<循環(huán)體語句>有可能一次也不被執(zhí)行。②

for循環(huán)和while循環(huán)的算法流程圖描述是一致的。③for循環(huán)適合于循環(huán)次數(shù)確定的情況。④對大多數(shù)問題,do_while、while和for循環(huán)是可以互換的。24第1章引言2024/5/65.3do-while語句例9:求幾何級數(shù)的和:用do_while語句的形式實現(xiàn)。分析:循環(huán)變量i的值從1~100遞增,i的初值為1、終值為100,累加器sum的初值為0循環(huán)計算:sum=sum+i。

算法流程圖如圖所示。程序:exam5_9.c25第1章引言2024/5/65.3do-while語句例10:編寫程序,從鍵盤輸入x的值,求

,直到最后一項絕對值小于le?7(即10?7)為止(注:x為弧度值)。分析:關鍵是對多項式進行分解計算。①第1項為x;②從第2項開始,每一項都是前一項乘以一個因子:

(n=3,5,7,9……)③用s代表sinx的值,s的初值為0;

用t代表每一項的值,t的初值為x;從第2項開始,后面每1項的值為:(n=3,5,7,9……)④循環(huán)計算表達式:s=s+t;直到t的值滿足精度要求為止。26第1章引言2024/5/65.3do-while語句

算法流程圖如圖所示。程序:

example5_10.c

思考:①程序怎樣控制計算的精度?②可否用while和for循環(huán)來實現(xiàn)?③其他算法。27第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句1.break語句

break語句可用于分支結構和循環(huán)語句結構。

break語句的作用:跳出當前的控制結構。

在循環(huán)語句中,要謹慎使用break語句。常用于循環(huán)語句體內某一個if條件分支的語句中,用來表示在循環(huán)過程中滿足某一條件時,結束循環(huán)。28第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句例11:編寫程序,求圓面積在100平方米為以內的半徑,輸出所有滿足條件的半徑值和圓面積的值,并輸出第1個大于100的圓半徑和圓面積。分析:計算圓面積的表達式為:

r2。①依次取半徑為1,2,3…,循環(huán)計算圓的面積area;②當area>100時結束。

算法流程圖如圖所示,外層虛線框為循環(huán)結構,內層虛線框為if結構。程序:

example5_1129第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句①循環(huán)結構中若采用了break語句,其算法結構屬于非結構化的設計。②用于結束當前循環(huán)語句的break語句都可以修改成不使用break語句的形式。③應盡量避免使用break語句,滿足結構化的要求。

思考:怎樣修改例11的程序,使其成為結構化的程序。提示30第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句2.continue語句

continue語句的一般形式為:

continue;

continue的語法規(guī)則:

結束本次循環(huán),提前進入下一輪循環(huán)。注意:①continue語句不會跳出循環(huán)結構,而是提前進行下一個循環(huán)。②while語句和do_while語句遇到continue時,程序會立刻轉到條件表達式,開始下一輪循環(huán);而在for語句中遇到continue時,程序會立刻轉到〈循環(huán)表達式〉,更新循環(huán)變量,開始下一輪循環(huán)。31第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句例12:編寫程序,輸出在50~100中不能被3整除的數(shù)。分析:對任意正整數(shù)n,若n%3≠0,則輸出該數(shù)n;

如果n%3=0,則不輸出該數(shù)n。

算法流程圖如圖所示:程序:example5_12.c思考:不使用continue語句,怎樣修改程序?32第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句

continue語句同break語句一樣,也有可能會破壞程序的結構化,使程序成為非結構化的程序,因此,應當盡量避免使用continue語句。提示33第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句例13:編寫程序,循環(huán)地從鍵盤輸入整數(shù),計算并輸出數(shù)的個數(shù)、總和以及算術平均值,若輸入了數(shù)字0,則不計入總數(shù),以結束標志作為輸入的結束。分析:假設從鍵盤輸入的整數(shù)為n,數(shù)據(jù)的個數(shù)為count,數(shù)據(jù)的總和為sum,算術平均值為average。①如果n=0,則計數(shù)count的值不增加,不計入總和;否則count的值增1,總合sum=sum+n。②最后的算術平均值為average=sum/n。

算法流程圖如圖所示:程序:example5_

13.c思考:不使用continue語句,怎樣修改程序?34第1章引言2024/5/65.4用于循環(huán)中的break語句和continue語句比較break語句和continue語句的區(qū)別:例14:閱讀程序:

example5_14.c和example5_14a.c。比較break語句和continue語句在程序中的區(qū)別。注意:為確保算法的結構化,清盡量不用或少用break和continue語句。35第1章引言2024/5/65.5循環(huán)結構的嵌套

循環(huán)結構的嵌套,指的是在某一種循環(huán)結構的語句中包含有另一個循環(huán)結構。

理論上,循環(huán)嵌套的深度不受限制,但實際中不提倡使用嵌套層次太多的循環(huán)結構。

循環(huán)結構嵌套時,要注意:①嵌套的層次不能交叉;②嵌套的內外層循環(huán)不能使用同名的循環(huán)變量;③并列結構的內外層循環(huán)允許使用同名的循環(huán)變量。36第1章引言2024/5/65.5循環(huán)結構的嵌套例15:編寫程序,在屏幕上輸出階梯形式的乘法口訣表。分析;乘法口訣表可以由9行9列來表示,其中第i行有i列。

利用循環(huán)嵌套,算法流程圖如圖所示:程序:

example5_15.c37第1章引言2024/5/65.6goto語句

goto語句是一種無條件轉向語句,可以用在程序的任何地方。

goto語句的一般形式為:

goto<語句標號>;

goto語句的作用:轉到標號語句所在的地方繼續(xù)執(zhí)行。說明:①

<語句標號>為任何合法的標識符;②

<語句標號>放在某個語句前面并加上冒號“:”作為語句的標號;③

<語句標號>只對goto語句有意義,帶有標號的語句被稱作標號語句。例如:error:、end:、exp:等均為合法的語句的標號。38第1章引言2024/5/65.6goto語句

goto語句是一種非結構化的語句。

goto語句會破壞結構化程序的邏輯結構,嚴重時會造成程序錯誤,因此,在程序設計中應盡量少用或不用goto語句。

goto語句常用于在深層嵌套的情況下從里層完全退出到嵌套的最外層。特別提示如:

for(){for(){for(){……;if(mistake)gotoerror;}}}……;error:……;39第1章引言2024/5/65.6goto語句例16:閱讀【例5-16】,用

goto語句計算簡單幾何級數(shù)的和?;仡櫾搯栴}的其他解決方案。例17:編寫程序,輸出40以內的能同時被3和4整除的數(shù)。

分別給出兩種算法:①使用goto語句。40第1章引言2024/5/65.6goto語句

算法流程圖:算法為非結構化的或:程序:example5_17.c41第1章引言2024/5/65.6goto語句②不使用goto語句來實現(xiàn)。

算法流程圖:程序:

example5_18.c比較例5-17和例5-18的算法。思考結構化算法的思想。42第1章引言2024/5/65.7程序范例【例5-19】編寫程序,輸出ASCⅡ序列中從33~127(十進制)的字符對照表。算法核心:簡單的循環(huán)輸出。【例5-20】設公雞每只5元,母雞每只3元,小雞每元

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論