版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章
循環(huán)結構實現(xiàn)語句——循環(huán)結構程序設計5.1while語句5.2do_while語句5.3for語句5.4用循環(huán)嵌套實現(xiàn)多重循環(huán)5.5改變循環(huán)控制的語句5.6循環(huán)結構程序設計實訓任務九
熟悉循環(huán)結構控制語句實訓任務十
學習循環(huán)結構程序設計的方法 5.1while語句
何謂當型循環(huán)?怎樣實現(xiàn)當型循環(huán)?
循環(huán)結構程序從控制流程上可分為當型循環(huán)和直到型循環(huán)。while語句是實現(xiàn)當型循環(huán)結構的語句。
while語句的一般形式為
while(表達式)
循環(huán)體語句;
其中,表達式用于控制循環(huán)是否進行,可以是關系表達式和邏輯表達式。當表達式的值為“真”(表達式的值為“非0”)時,即循環(huán)條件成立,則執(zhí)行循環(huán)體語句;當表達式的值為“假”(表達式的值為“0”)時,即循環(huán)條件不成立,則結束循環(huán)。圖5.1while語句的執(zhí)行流程
while語句的執(zhí)行流程如圖5.1所示。while語句執(zhí)行時,先計算表達式的值,其值為“真”則執(zhí)行循環(huán)體語句,為“假”則不執(zhí)行循環(huán)體語句(結束循環(huán))。
構造循環(huán)控制表達式是循環(huán)結構程序設計的關鍵。表達式構造不當,就不可能按預期的規(guī)律循環(huán)。極端情況下,當進入循環(huán)時,表達式的值就為“0”,則循環(huán)體一次也不會被執(zhí)行;表達式的值在循環(huán)中不變化,永遠保持“非0”,就會產生死循環(huán)。這兩種情況都應避免。
循環(huán)體語句必須是一個語句的形式。實際使用中循環(huán)體往往有多個語句,這就需要用一對花括號把這些語句括起來,構成復合語句。
例5.1
編寫程序,實現(xiàn)求
的值。
編程思路:定義一個變量i,初值為1,每加一次其值增1,既是累加次數(shù)的計數(shù),作為循環(huán)控制變量,又形成了每次要累加的數(shù)。再定義一個累加和變量sum,初值設置為0,相當于將變量單元清零。因為變量代表一個存儲器單元,如不清0,會將該單元中原來未知的數(shù)帶進累加和中,造成結果不正確。其算法流程如圖5.2所示。
圖5.2例5.1算法流程運行結果:
分析:循環(huán)體語句被執(zhí)行100次,實現(xiàn)了1~100中的整數(shù)累加。
思考:在循環(huán)體外,把語句“i=1;”改為語句“i=0;”,循環(huán)體被執(zhí)行多少次?執(zhí)行結果會正確嗎?
5.2do_while語句
何謂直到型循環(huán)?怎樣實現(xiàn)直到型循環(huán)?
do_while語句是實現(xiàn)直到型循環(huán)結構的語句。
do_while語句的一般形式為
do
循環(huán)體語句;
while(表達式)
其中,表達式的作用和循環(huán)體語句的組成形式同while語句。只是循環(huán)控制流程與while語句有所差別。其執(zhí)行流程如圖5.3所示。do_while語句是先執(zhí)行循環(huán)體語句,然后計算表達式的值,其值為“真”時執(zhí)行循環(huán)體語句,為“假”則結束循環(huán)。也就是說,循環(huán)體語句至少要被執(zhí)行一次。圖5.3do_while語句的執(zhí)行流程
例5.2
用do_while語句實現(xiàn)求
的值。
編程思路:該例的編程思路基本與例5.1相同。其算法流程如圖5.4所示。
圖5.4例5.2算法流程分析:本例的執(zhí)行結果同例5.1。先執(zhí)行循環(huán)體語句,對i的當前值累加,再使i加1,當i的值增加到101時結束循環(huán)。
思考:與例5.1比較,程序結構有何異同?程序執(zhí)行時的循環(huán)控制過程相同嗎?循環(huán)結束時,變量i的值應是多少?
5.3for語句
5.3.1for語句的形式與執(zhí)行流程
for語句的一般形式為
for(表達式1;表達式2;表達式3)
循環(huán)體語句;
其執(zhí)行流程如圖5.5所示。從流程圖可以看出,for語句的執(zhí)行步驟如下:
(1)求解表達式1的值。
(2)求解表達式2的值,若其值為非0(“真”),則執(zhí)行for語句中的循環(huán)體語句,然后執(zhí)行下面第(3)步。若值為0(“假”),則結束循環(huán)。
(3)求解表達式3的值。
(4)轉回上面第(2)步繼續(xù)執(zhí)行。
for語句中三個表達式分別有不同的作用:
表達式1有給循環(huán)提供初值的作用,可以是算術表達式、賦值表達式和逗號表達式。
表達式2起控制循環(huán)的作用,可以是C語言中的各種表達式,只要表達式的值為“非0”,即為邏輯“真”,控制循環(huán)繼續(xù)進行;表達式的值為“0”,即為邏輯“假”,立即結束循環(huán)。表達式3起改變循環(huán)控制條件的作用,使循環(huán)向結束靠近。如果沒有表達式3,或表達式不合適,就可能導致死循環(huán)。在一些規(guī)律明顯的循環(huán)中,可以把表達式3稱為步長表達式。
需注意的是,三個表達式之間必須用“;”作為分隔符。
圖5.5for語句執(zhí)行流程
例5.3
為了便于三種循環(huán)語句的比較,仍以求值為
例,用for循環(huán)來實現(xiàn)。
編程思路:同前。
源程序:
分析:運行結果同前。與while、do_while實現(xiàn)程序相比,本例的程序結構簡單緊湊。i賦初值可用for語句的表達式1來實現(xiàn),變量i的值增1可用表達式3來實現(xiàn)。
5.3.2for語句中三個表達式的靈活使用
for語句靈活運用的關鍵是三個表達式的設置。
(1)三個表達式都可以采用多種表達式。如for(i=1,sum=0;i<=100;i++,j++)中,表達式1和表達式2是逗號表達式。
(2)表達式1可以省略,但應在循環(huán)體外給循環(huán)控制變量賦初值,否則會導致死循環(huán)。如例5.3中,在循環(huán)體外給變量賦初值,則循環(huán)語句可改為
for(;i<=100;i++)sum=sum+i;
(3)從語言規(guī)則來說,表達式2也可以缺省,例如:
for(i=1;;i++)sum=sum+i;
但執(zhí)行時將變?yōu)樗姥h(huán),因此是不正確的循環(huán)。
5.4用循環(huán)嵌套實現(xiàn)多重循環(huán)
何謂多重循環(huán)?怎樣實現(xiàn)多重循環(huán)?
C語言中把循環(huán)結構作為一個語句。既然循環(huán)結構是一個語句,當然可以出現(xiàn)在循環(huán)體語句中。這樣,在循環(huán)體中就包含了一個完整的循環(huán)結構語句,稱為循環(huán)嵌套,即循環(huán)中套循環(huán)。如此,可以形成多重循環(huán)。C語言中對循環(huán)嵌套層數(shù)沒有限制,但實際上,循環(huán)嵌套層數(shù)越多,程序越不容易理解,出錯的機會也就越多。實際應用中,兩層以上的循環(huán)嵌套不多見。下面只對兩重循環(huán)嵌套的情況作一介紹。
三種循環(huán)結構語句可以相互嵌套,形成如下6種嵌套關系。
通常,把外層循環(huán)稱為外循環(huán),內層循環(huán)稱為內循環(huán)。兩重循環(huán)嵌套中,內循環(huán)作為外循環(huán)的一個語句,外循環(huán)每循環(huán)一次,內循環(huán)要循環(huán)一遍。設外循環(huán)執(zhí)行i次,內循環(huán)執(zhí)行j次,則內循環(huán)體要被執(zhí)行i?×?j次。
程序中,循環(huán)嵌套要求內循環(huán)必須被完全包含在外層循環(huán)的循環(huán)體中,不允許出現(xiàn)內外層循環(huán)體交叉的情況。如圖5.6所示,在do_while循環(huán)體內開始while()循環(huán),但是do-while循環(huán)結束在while()循環(huán)體內,它們互相交叉,這是非法結構。
圖5.6循環(huán)交叉為非法結構
5.5改變循環(huán)控制的語句
5.5.1break語句
break語句的一般形式為
break;
前面已經介紹,break語句可用在switch結構中,使執(zhí)行流跳出switch結構。break語句也可用在循環(huán)結構中,使執(zhí)行流跳出所在的循環(huán),即提前結束循環(huán)。
例5.5
使用break語句來改變循環(huán)控制。
運行結果:
分析:for循環(huán)中缺省了三個表達式,應該是一個死循環(huán)。但在程序中使用了“if(i>100)break;”語句,使i達到101時就結束循環(huán)。這也是循環(huán)程序設計中,巧用break語句的一種方法。
5.5.2continue語句
continue語句的一般形式為
continue;
其功能是結束本次循環(huán),即跳過循環(huán)體中continue語句后面尚未執(zhí)行的循環(huán)體語句,轉向循環(huán)頭部,檢測是否進行下一次循環(huán)。
例5.6
輸出100以內能被9整除的數(shù)。
編程思路:逐一檢測9~100的整數(shù)能否被9整除,如能整除則輸出該數(shù),不能整除則不輸出。
分析:“if(n%9!=0)continue;”語句判斷當前數(shù)是否能被9整除,若能整除,不執(zhí)行“continue;”語句,則執(zhí)行printf函數(shù)調用,輸出該數(shù);若不能整除,則執(zhí)“continue;”語句而跳過printf函數(shù)調用,不輸出該數(shù),結束本次循環(huán),返回循環(huán)頭部,開始下一次循環(huán),直到滿足循環(huán)結束條件。
例5.7
編寫程序,從鍵盤輸入字符后顯示,按Enter鍵,則結束字符輸入;按Esc鍵,則放棄當前輸入的字符。運行結果:
分析:程序中使用字符輸入/輸出庫函數(shù),程序開頭要使用預處理命令#include<conio.h>。for(;;)不控制循環(huán),是通過兩個if語句來實現(xiàn)對循環(huán)的控制。當按Enter鍵時,執(zhí)行“break;”語句,立即結束字符輸入;當按Esc鍵時,執(zhí)行“continue;”語句,跳過“putchar(ch);”語句,返回循環(huán)頭部,輸入下一個字符。
5.6循環(huán)結構程序設計
循環(huán)結構程序設計時應考慮哪些問題?如何準確地設計循環(huán)結構程序?
一般來說,循環(huán)結構程序在設計時需考慮以下幾方面的問題:
(1)循環(huán)初始化問題。循環(huán)初始化包括對循環(huán)控制變量設置初值和對循環(huán)體中相關變量設置初值。循環(huán)控制變量初值設置得恰當與否,關系到循環(huán)規(guī)律能否實現(xiàn)。如例5.1~例5.3中,如果循環(huán)控制變量i的初值設置為0,則要循環(huán)101次,第一次循環(huán)累加和變量加0,毫無意義。如果設置為大于1的數(shù),循環(huán)次數(shù)不到100次,造成累加和不正確。給循環(huán)體中操作變量設置初值,需要根據(jù)具體問題具體分析。一般來說,要給加法和變量清零,乘積變量置1,以防未知數(shù)據(jù)帶入,導致結果不正確。
(2)循環(huán)控制條件設置問題。按循環(huán)控制方式,循環(huán)可有計數(shù)控制和條件控制。計數(shù)控制循環(huán)是循環(huán)次數(shù)已知,一般用關系表達式作循環(huán)控制條件。對于循環(huán)次數(shù)未知的循環(huán),一般要認真分析循環(huán)控制過程,找出規(guī)律,列出邏輯表達式。
(3)循環(huán)控制量改變問題。循環(huán)控制變量要在循環(huán)過程中加以改變,使循環(huán)控制條件向循環(huán)結束方面轉變。循環(huán)控制變量的改變方式要依據(jù)循環(huán)規(guī)律來確定。
(4)循環(huán)體結構問題。循環(huán)體語句是循環(huán)問題的重復執(zhí)行部分,可包含三種結構語句。復雜循環(huán)體語句一定要注意結構語句的嵌套層次,嵌套層次之間不能相互交叉,即一個結構語句必須完全包含在另一個結構語句中。
(5)循環(huán)控制變量的引用問題。循環(huán)控制量可以在循環(huán)結束后引用,但要注意量值的準確性。如例5.1~例5.3中,循環(huán)控制變量i在循環(huán)結束時值是101,而不是100。
循環(huán)結構程序設計要比順序結構和選擇結構程序設計復雜一些,一定要認真分析規(guī)律和算法,然后選擇便于實現(xiàn)的循環(huán)語句。
例5.8
編寫程序,計算s=1-3+5-7…-99+101。
編程思路:這個問題可看成數(shù)的累加,相加數(shù)是1~101之間的質數(shù),且一個為正數(shù),一個為負數(shù),即累加數(shù)的符號在交替變化。找出這個規(guī)律,可以設置一個符號變量flag,初值設置為1,在循環(huán)中使用flag=-flag,即可實現(xiàn)符號的交替變換。算法可依照數(shù)的累加。
例5.9
用for循環(huán)語句求n!。
編程思路:可用迭代公式n!=n*(n-1)!。利用循環(huán)很容易實現(xiàn)迭代計算問題。設置變量i,既作循環(huán)控制變量i(1≤i≤n),又作本次循環(huán)求階乘的數(shù),用變量fac存放i!,初始化為fac=1。第i次循環(huán)前,fac中存放(i-1)!,第i次循環(huán)后,fac中存放i!,實現(xiàn)了相繼兩次的迭代??捎胒or語句實現(xiàn)。
運行結果:
分析:fac作為循環(huán)中的乘積變量,在循環(huán)外賦初值1,在循環(huán)中實現(xiàn)1?×?2?×?…?×?n求值運算,即求得n的階乘值。
例5.10
編寫程序求1~1000之間滿足“用3除余2,用5除余3,用7除余2”的數(shù),且一行只打印5個數(shù)。
編程思路:求余數(shù)用取模運算符%。3個條件是“與”的關系。一行打印5個數(shù),可以通過計數(shù)到5再回車換行。用do_while循環(huán)來實現(xiàn)。
運行結果:
分析:變量i既作循環(huán)控制變量,又是當前要檢測的數(shù),取1~1000之間的整數(shù)。變量j用于輸出數(shù)據(jù)的計數(shù),控制一行輸出5個數(shù)。
例5.11
編程實現(xiàn)電文加密。電文加密規(guī)律為:將字母變成其后面的第4個字母,其他字符保持不變。例如,a→e,A→E,W→A。編寫一個程序,輸入一行字符,要求轉換成加密電文輸出。
編程思路:電文的加密規(guī)律如圖5.7所示。輸入字符賦給變量ch,如果是字符,則其ASCII碼值加4,即ch?=?ch+4。加密后判斷ch的值是否超出字母的范圍,如果超過,則
ch?=?ch-26。如輸入x,其ASCII碼值是120,加4得124,大于z的ASCII碼值122,減26后得98,是b的ASCII碼值,即把x轉換成b。從鍵盤輸入字符并轉換為循環(huán)實現(xiàn),循環(huán)控制條件為ch!='\n'。
圖5.7例5.11的電文加密規(guī)律運行結果:
分析:用while循環(huán)實現(xiàn)從鍵盤上輸入一個電文字符序列,每輸入一個字符按加密規(guī)律進行加密轉換,一直到輸入“回車”鍵結束。第1層if語句中的條件表達式“ch>='a'&&ch<='z'||(ch>='A')&&ch<='Z'”判斷輸入的字符是否是26個大寫或小寫字母,是則進行ASCII碼加4轉換,不是則不轉換。第2層if語句中的條件表達式“(ch>'Z'&&ch<'a')||(ch>'z')”判斷字母ASCII碼加4轉換后是否越界,如果越界則按加密循環(huán)規(guī)律,將其減26。
例5.12
編寫程序,求出100~1000之間各位數(shù)字之和是5的數(shù),一行輸出5個數(shù),并統(tǒng)計個數(shù)。
編程思路:該問題要對100~1000中的每一數(shù)逐一進行判定,而且每一數(shù)要進行逐位求和,是一個雙重循環(huán)問題。取遍100~1000之間的所有數(shù)可選用for循環(huán)結構語句來解決。但在判定100~1000之間的每一個數(shù)其各位數(shù)字之和是否為5時,由于循環(huán)次數(shù)隨數(shù)位的變化而不同,宜選用while循環(huán)結構語句。
運行結果:
分析:程序采用雙重循環(huán),外循環(huán)用for語句,內循環(huán)用while語句。在內循環(huán)實現(xiàn)對每位數(shù)字分離并累加?!皊=s+k%10;”語句的作用是分離出當前數(shù)的低位并累加,“k=k/10;”語句的作用是截取當前數(shù)的高位部分,作為下一次要分離的數(shù)。例如123,第1次循環(huán)分離出低位數(shù)字3,截取高位部分12;第2次循環(huán)分離出低位數(shù)字2,截取高位部分1;第3次循環(huán)分離出低位數(shù)字1,截取高位部分0,循環(huán)結束。外循環(huán)利用變量i依次產生100~1000之間的一個整數(shù),根據(jù)內循環(huán)計算各位數(shù)字之和是否為5,確定是否輸出,并進行計數(shù)。
例5.13
編寫程序,找出3~500之間的全部素數(shù)并輸出,在一行輸出15個數(shù)。
編程思路:
(1)素數(shù)是除1和它本身之外不能被任何一個整數(shù)整除的自然數(shù)(1除外)。如2,3,5,7是素數(shù),1,4,6,8,10不是素數(shù)。判斷某數(shù)i是否為素數(shù)的一個簡單辦法是用2,3,4,…,i-1這些數(shù)據(jù)逐個去除i,只要被其中的一個數(shù)整除了,則i就不是素數(shù)。數(shù)學上已證明,對于自然數(shù)i只需用2,3,4,…,i1/2測試。
(2)需要判定3~500之間的每一數(shù)是否為素數(shù)。判定一個數(shù)是否是素數(shù),又要用2,3,4,…,i1/2逐一進行測試,測試到被其中的某一個數(shù)整除,則可判定不是素數(shù),就不需要再進行測試了。顯然這是一個雙重循環(huán)問題。為了結束內循環(huán)時能方便識別當前判定的數(shù)是否為素數(shù),設置一個標志變量flag,在內循環(huán)外設初值0,在內循環(huán)中遇到能被整除的測試,使flag賦值1。程序流程如圖5.8所示。
圖5.8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療健康保險產品設計
- 2026年衡水職業(yè)技術學院高職單招職業(yè)適應性測試模擬試題有答案解析
- 2026年河北軟件職業(yè)技術學院單招綜合素質筆試備考試題帶答案解析
- 醫(yī)療保險風險管理
- 呼吸系統(tǒng)疾病治療與康復技術
- 2026年河南林業(yè)職業(yè)學院高職單招職業(yè)適應性測試模擬試題有答案解析
- 醫(yī)院保衛(wèi)人員禮儀與安全管理實踐
- 小學入學拼音題庫及答案
- 腫瘤護理新進展解讀
- 人工智能在兒科疾病診斷中的應用
- 個人投資收款收據(jù)
- 太陽能路燈可行性研究報告
- 華為在歐洲市場分析報告
- 中國工藝美術館招聘筆試試卷2021
- 申論范文寶典
- DB32T 3695-2019房屋面積測算技術規(guī)程
- 貴州省納雍縣水東鄉(xiāng)水東鉬鎳礦采礦權評估報告
- GB 8270-2014食品安全國家標準食品添加劑甜菊糖苷
- 易制毒化學品日常管理有關問題權威解釋和答疑
- 湖北省高等教育自學考試
- 企業(yè)三級安全生產標準化評定表(新版)
評論
0/150
提交評論