版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章語(yǔ)句結(jié)構(gòu) 本章要點(diǎn): 掌握C語(yǔ)言中3個(gè)基本循環(huán)結(jié)構(gòu)的特點(diǎn)和應(yīng)用。 掌握循環(huán)結(jié)構(gòu)中的無(wú)條件控制語(yǔ)句(主要是break和continue)的應(yīng)用。 掌握怎樣避免“無(wú)限循環(huán)”。 掌握循環(huán)結(jié)構(gòu)的嵌套使用。285.1 概述循環(huán)結(jié)構(gòu)中也有個(gè)“條件”,它是用來(lái)決定是否要 “循環(huán)”,所謂循環(huán)就是要程序重復(fù)執(zhí)行某一個(gè)模塊。循環(huán)結(jié)構(gòu)也是結(jié)構(gòu)化程序設(shè)計(jì)的基本成分之一。循環(huán)結(jié)構(gòu)中根據(jù)表達(dá)式的兩個(gè)狀態(tài)(非0或0)決定 循環(huán)是否繼續(xù)。這些被重復(fù)執(zhí)行的語(yǔ)句或模塊,稱為 循環(huán)體。假定在循環(huán)過(guò)程中,循環(huán)結(jié)構(gòu)中的條件始終 得不到改變,或者是在改變,但始終不可能從一個(gè)狀 態(tài)跳到另一個(gè)狀態(tài),那么這種循環(huán)稱為無(wú)限循環(huán),或 稱“死
2、循環(huán)”。一個(gè)合理的循環(huán)結(jié)構(gòu),最終會(huì)使循環(huán) 條件由一個(gè)狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€(gè)狀態(tài),使循環(huán)正常終止。在C語(yǔ)言中,主要有以下三種循環(huán)結(jié)構(gòu): while循環(huán)結(jié)構(gòu);do-while循環(huán)結(jié)構(gòu);for循環(huán)結(jié)構(gòu)。5.2 while循環(huán)結(jié)構(gòu)程序運(yùn)行到while循環(huán)結(jié)構(gòu)時(shí),先判該結(jié)構(gòu)中的條件,若條件為“真”執(zhí)行循環(huán)體,條件為“假”不執(zhí)行循環(huán)體。它的一般形式如下:while(表達(dá)式)語(yǔ)句(循環(huán)體)圖5.1以圖示的方式表示while循環(huán)結(jié)構(gòu)的執(zhí)行過(guò)程, 其中(a)為常用流程圖,而(b)為N_S結(jié)構(gòu)化流程圖。表達(dá)式的值為非0(真)時(shí),執(zhí)行循環(huán)體,循環(huán)體可以 是簡(jiǎn)單句,也可以是復(fù)合句。每執(zhí)行一次循環(huán)體以 后,都要判別一下表達(dá)式
3、(條件)的值,看是否從一個(gè) 狀態(tài)跳到另一狀態(tài),若仍是非0,再執(zhí)行循環(huán)體,如 此循環(huán)執(zhí)行,一直到表達(dá)式的值為0(假)時(shí),不執(zhí)行循環(huán)體,循環(huán)終止。此后程序執(zhí)行進(jìn)入循環(huán)結(jié)構(gòu)的下一條語(yǔ)句。(講解例5.1、例5.2 、例5.3 、例5.4 、例5.5)while(表達(dá)式)循環(huán)體表達(dá)式(a)循環(huán)體(b)圖5.1while循環(huán)結(jié)構(gòu)流程圖例5.1補(bǔ)充說(shuō)明:循環(huán)控制變量c在有符號(hào)字符型和無(wú)符號(hào)字符型情況下內(nèi)存中代碼(內(nèi)碼,即補(bǔ)碼或機(jī)器碼)的變化,從中也可看出出現(xiàn)無(wú)限循環(huán)的原因,如下表所示:表達(dá)式c+內(nèi)碼的變化 無(wú)符號(hào)十進(jìn)制 有符號(hào)十進(jìn)制0 0 0 0 0 0 0 0000 1 1 1 1 1 1 1127127
4、1 0 0 0 0 0 0 0128-1281 0 0 0 0 0 0 1129-1271 1 1 1 1 1 1 1255-10 0 0 0 0 0 0 000例5.2:求12+22+32+.+1002的和main( )執(zhí)行當(dāng)c=100時(shí),循環(huán)之初的c與sum值long sum=0; int c=1 ; while(cp時(shí),結(jié)束循環(huán)執(zhí)行當(dāng)c=p時(shí),sum+=(n+c)*(n+c) ; c+ ;c是一個(gè)大于p的值 while(c=p); printf(“%d,%ldn”,c,sum) ;5.4 for循環(huán)結(jié)構(gòu)for循環(huán)結(jié)構(gòu)的一般形式是:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句(循環(huán)體)表達(dá)
5、式1也稱初始化表達(dá)式,用來(lái)設(shè)定循環(huán)控制變量或其他變量的初值,若有多個(gè)變量需要初始化時(shí), 表達(dá)式1要使用逗號(hào)表達(dá)式。表達(dá)式2也稱循環(huán)條件表達(dá)式,用來(lái)決定是否執(zhí)行循環(huán)體。當(dāng)表達(dá)式值為非0時(shí),執(zhí)行循環(huán)體,當(dāng)表達(dá)式的值為0時(shí)循環(huán)終止。表達(dá)式3也稱增量表達(dá)式,執(zhí)行一次循環(huán)體后,求 解一次表達(dá)式3的值,目的是對(duì)表達(dá)式2進(jìn)行一次修正。表達(dá)式3也可用逗號(hào)表達(dá)式。 for循環(huán)結(jié)構(gòu)的執(zhí)行過(guò)程如圖5.5所示。求解表達(dá)式1求解表達(dá)式1當(dāng)表達(dá)式2為真時(shí)循環(huán)體求解表達(dá)式3表達(dá)式2非00(a)求解表達(dá)式3循環(huán)體圖5.5for循環(huán)結(jié)構(gòu)流程圖(b)for循環(huán)也可寫(xiě)成while循環(huán)的形式: 表達(dá)式1語(yǔ)句while(表達(dá)式2)循環(huán)
6、體(含表達(dá)式3語(yǔ)句)由此可見(jiàn),for循環(huán)結(jié)構(gòu)實(shí)質(zhì)上跟while循環(huán)結(jié)構(gòu)差不多,它們都是先判條件,后決定是否執(zhí)行循環(huán)體。由 此,一些教科書(shū)上稱它們?yōu)椤爱?dāng)”型循環(huán),意思是當(dāng) 條件成立時(shí)執(zhí)行循環(huán)。在完成同樣功能的情況下,for 循環(huán)結(jié)構(gòu)簡(jiǎn)潔、方便,而while循環(huán)結(jié)構(gòu)的可讀性較好, 各有長(zhǎng)處,讀者可根據(jù)自已的具體情況選用。(講解例5.11、例5.12 、例5.13)又例:輸入n和p,求n2+(n+1)2+(n+2)2+(n+p)2的和(用while循環(huán))。main( )long sum=0;int n,p ,c=0; scanf(“%d%d”,&n,&p); while(c=p)sum+=(n+c)
7、*(n+c) ; c+ ;printf(“%d,%ldn”,c,sum) ;又例:輸入n和p,求n2+(n+1)2+(n+2)2+(n+p)2的和(用for循環(huán))。main( )long sum=0;int n,p ,c=0; scanf(“%d%d”,&n,&p); for(c=0;c=p;c+)sum+=(n+c)*(n+c) ; printf(“%d,%ldn”,c,sum) ;補(bǔ)充例題:鍵盤(pán)輸入一個(gè)長(zhǎng)整數(shù)x,用while循環(huán)求x是一個(gè)幾位數(shù),且把每一位數(shù)反向放入數(shù)組a的元素中,再用for循環(huán)輸出a數(shù)組的元素。分析:由表2.1可知長(zhǎng)整型數(shù)的最長(zhǎng)位數(shù)是10 位,則數(shù)組a定義為10個(gè)元素;除
8、10取余(用運(yùn)算符%)可提取個(gè)位數(shù),除10取整(用運(yùn)算符/) 可去掉個(gè)位數(shù),兩個(gè)運(yùn)算符的交替應(yīng)用即可取出x的每一位數(shù)。通過(guò)循環(huán)計(jì)數(shù)獲得x是一個(gè)幾位數(shù)。程序設(shè)計(jì)如下:運(yùn)行結(jié)果是63 2 6 5 4 6 8 1 #includestdio.h main() long int x; int i,n=0,a10; scanf(%ld,&x); while(x) an=x%10;/*提取個(gè)位數(shù)*/ n+;/*計(jì)數(shù)*/ x=x/10;/*去掉個(gè)位數(shù)*/ printf(“n=%dn”,n);/* x是一個(gè)幾位數(shù)*/ for(i=0;in;i+)printf(%2d,ai);/*反向
9、輸出x的每一位數(shù)*/ 當(dāng)然上述程序不用數(shù)組也可以處理: #includestdio.h運(yùn)行結(jié)果是:18645623122132654681 main() long int x, y=0 ; int i,n=0 ; scanf(%ld,&x); while(x) y=y*10+x%10;/*提取個(gè)位數(shù)累加到y(tǒng)中*/ n+;/*計(jì)數(shù)*/ x=x/10;/*去掉個(gè)位數(shù)*/ printf(“n=%dn”,n);/* x是一個(gè)幾位數(shù)*/ printf(%ld,y ) ;/*y就是x的反向數(shù)*/5.5 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套應(yīng)用很多,while循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含while循環(huán);do_whil
10、e循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含do_while循環(huán);for循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含for循環(huán)。此外,這幾種循環(huán)結(jié)構(gòu)之間還可以相互嵌套。一般循環(huán)體中的循環(huán)稱為“內(nèi)循環(huán)”,包含內(nèi)循環(huán)的循環(huán)稱為“外循環(huán)”,當(dāng)然,這只是指二重循環(huán)。另外還有多層嵌套的情況,這屬于多重循環(huán)。(講解例5.14、例5.15 、例5.16 、例5.17)5.6 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句(或稱無(wú)條件控制語(yǔ)句)是指當(dāng)程序執(zhí)行到該語(yǔ)句時(shí),程序無(wú)條件轉(zhuǎn)移到程序的某個(gè)地方執(zhí)行,至于轉(zhuǎn)移到什么地方,要看使用何種無(wú)條件控制語(yǔ)句。C語(yǔ)言提供三個(gè)無(wú)條件控制語(yǔ)句: break語(yǔ)句,continue語(yǔ)句和goto語(yǔ)句。break語(yǔ)句主要用于循環(huán)
11、結(jié)構(gòu)和switch語(yǔ)句結(jié)構(gòu)中。continue語(yǔ)句主要用于循環(huán)結(jié)構(gòu)中。結(jié)構(gòu)化程序設(shè)計(jì)要求少用或盡量不用goto語(yǔ)句。1. break語(yǔ)句break語(yǔ)句由關(guān)鍵字break后加分號(hào)“;”組成。它的一般形式是:break;上一章介紹switch多分支結(jié)構(gòu)時(shí),我們巳經(jīng)遇到過(guò)break語(yǔ)句,它是用來(lái)跳出switch結(jié)構(gòu),使程序繼續(xù)執(zhí)行該結(jié)構(gòu)下面的一個(gè)語(yǔ)句。這里我們介紹用在循環(huán)結(jié)構(gòu)中的break語(yǔ)句,它被用來(lái)跳出循環(huán)體,提前結(jié)束循環(huán),把程序流程無(wú)條件轉(zhuǎn)移到循環(huán)結(jié)構(gòu)的下一句繼續(xù)執(zhí)行。注意:break語(yǔ)句只能用于switch結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中。(講解例5.18、例5.19 、例5.20)2. continue語(yǔ)
12、句continue語(yǔ)句是由關(guān)鍵字continue后面加分號(hào)“;” 構(gòu)成。它的一般形式是:continue;它的作用是用來(lái)結(jié)束本次循環(huán)(即跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句)。要注意break語(yǔ)句和continue語(yǔ)句的區(qū)別,break語(yǔ)句是跳出整個(gè)循環(huán)結(jié)構(gòu),不再在循環(huán)結(jié)構(gòu)中做任何事情。而continue語(yǔ)句只是結(jié)束本次循環(huán),繼續(xù)執(zhí)行循環(huán)過(guò)程中的其它步驟,即循環(huán)還是繼續(xù)進(jìn)行。 循環(huán)體中若滿足某條件,執(zhí)行continue 語(yǔ)句后三個(gè)基本循環(huán)結(jié)構(gòu)程序流程圖中循環(huán)體部分可作如下修正:循環(huán)體If(條件) continue;滿足某條件,循環(huán)體中執(zhí)行continue語(yǔ)句后三個(gè)基本循環(huán)結(jié)構(gòu)流程圖的修正。也就是說(shuō),對(duì)于
13、while或do_while循環(huán)體中執(zhí)行continue語(yǔ)句后直接進(jìn)行循環(huán)條件的判斷來(lái)決定循環(huán)是否繼續(xù);而對(duì)于for循環(huán), 執(zhí)行continue語(yǔ)句后,還應(yīng)執(zhí)行增量表達(dá)式(表達(dá)式3)后再進(jìn)行循環(huán)條件的判斷來(lái)決定循環(huán)是否繼續(xù)。 (講解例5.21)3. goto語(yǔ)句 (略)5.7 應(yīng)用舉例數(shù)學(xué)上的遞推(recurence)方法在程序設(shè)計(jì)中應(yīng)用很多。遞推方法解題的關(guān)鍵是確定遞推公式和初始條件。根據(jù)初始條件的不同,遞推又可分為“順推”和“倒推” 兩種形式:順推是數(shù)列后面的值要根據(jù)前面的值才能推算出來(lái)。如例5.13求 Fibonacci 數(shù)列屬順推。倒推是數(shù)列前面的值要根據(jù)后面的值才能推算出來(lái)。例5.23“猴子吃桃” 問(wèn)題屬倒推。遞推方法在程序設(shè)計(jì)中通過(guò)變量的迭代(iterate)方法來(lái)實(shí)現(xiàn)。(講解例5.23、例5.24)應(yīng)用舉例補(bǔ)充題:“猴子吃桃”問(wèn)題新編。猴子第一天摘下1534個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。問(wèn)到第十天早上想吃時(shí), 還剩幾個(gè)桃子。分析:新編的“猴子吃桃”問(wèn)題成了順推的問(wèn)題了,設(shè)某天的桃子數(shù)為a個(gè),那么過(guò)了一天后的桃子數(shù)應(yīng)該是a-
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026湖北隨州市紀(jì)委監(jiān)委機(jī)關(guān)專項(xiàng)招聘以錢(qián)養(yǎng)事工作人員3人備考題庫(kù)附答案
- 2026湖南長(zhǎng)沙市公安局巡特警支隊(duì)招聘普通雇員13人備考題庫(kù)附答案
- 2026福建海峽企業(yè)管理服務(wù)有限公司聯(lián)通外包項(xiàng)目實(shí)習(xí)生招聘?jìng)淇碱}庫(kù)附答案
- 2026福建省面向武漢大學(xué)選調(diào)生選拔工作考試備考題庫(kù)附答案
- 2026福建龍巖連城縣委黨校公開(kāi)選拔工作人員2人備考題庫(kù)附答案
- 2026西藏那曲市嘉黎縣委政法委補(bǔ)招專職網(wǎng)格員1人參考題庫(kù)附答案
- 2026重慶涪陵區(qū)人民政府義和街道選聘4人備考題庫(kù)附答案
- 2026陜西省面向大連理工大學(xué)招錄選調(diào)生參考題庫(kù)附答案
- 公務(wù)員考試語(yǔ)句表達(dá)真題300道附參考答案【達(dá)標(biāo)題】
- 北京市大興區(qū)殘疾人聯(lián)合會(huì)招聘臨時(shí)輔助用工1人備考題庫(kù)附答案
- 食品生產(chǎn)余料管理制度
- 2026年中國(guó)航空傳媒有限責(zé)任公司市場(chǎng)化人才招聘?jìng)淇碱}庫(kù)有答案詳解
- 2026年《全科》住院醫(yī)師規(guī)范化培訓(xùn)結(jié)業(yè)理論考試題庫(kù)及答案
- 2026北京大興初二上學(xué)期期末語(yǔ)文試卷和答案
- 專題23 廣東省深圳市高三一模語(yǔ)文試題(學(xué)生版)
- 2026年時(shí)事政治測(cè)試題庫(kù)100道含完整答案(必刷)
- 重力式擋土墻施工安全措施
- 葫蘆島事業(yè)單位筆試真題2025年附答案
- 2026年公平競(jìng)爭(zhēng)審查知識(shí)競(jìng)賽考試題庫(kù)及答案(一)
- 置業(yè)顧問(wèn)2025年度工作總結(jié)及2026年工作計(jì)劃
- 金華市軌道交通控股集團(tuán)有限公司招聘筆試題庫(kù)2026
評(píng)論
0/150
提交評(píng)論