版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),5.1 循環(huán)語(yǔ)句概述5.2 for語(yǔ)句和while語(yǔ)句5.3 直到型循環(huán)do-while語(yǔ)句5.4 break語(yǔ)句與continue語(yǔ)句 5.5 應(yīng)用舉例 良好的源程序書寫習(xí)慣注釋(續(xù)) Return,5.1 循環(huán)語(yǔ)句概述,求1100的累計(jì)和。 根據(jù)已有的知識(shí),可以用“1+2+100”來(lái)求解,但顯然很繁瑣?,F(xiàn)在換個(gè)思路來(lái)考慮: 首先設(shè)置一個(gè)累計(jì)器sum,其初值為0,利用sum += n來(lái)計(jì)算(n依次取1、2、100),只要解決以下3個(gè)問(wèn)題即可: (1)將n的初值置為1; (2)每執(zhí)行1次“sum += n”后,n增1; (3)當(dāng)n增到101時(shí),停止計(jì)算。此時(shí),sum的
2、值就是1100的累計(jì)和。 根據(jù)已有的知識(shí),單獨(dú)實(shí)現(xiàn)每一步都不難。但是,由于需要經(jīng)常使用這種重復(fù)計(jì)算結(jié)構(gòu)(稱為循環(huán)結(jié)構(gòu)),C語(yǔ)言提供了3條循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),以簡(jiǎn)化、并規(guī)范循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。 在語(yǔ)言中,可用以下語(yǔ)句實(shí)現(xiàn)循環(huán): (1)用for語(yǔ)句。 (2)用do-while語(yǔ)句。 (3)用while語(yǔ)句。,(4)用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán)。使用goto語(yǔ)句實(shí)現(xiàn)求解1100累計(jì)和的程序可以如下: main() int n=1, sum=0; loop: sum += n; n+; if (n=100) goto loop; printf(“sum=%dn”, sum); 其中“l(fā)oop:”為語(yǔ)句標(biāo)
3、號(hào)(格式:標(biāo)號(hào): 語(yǔ)句行),其命名遵循標(biāo)識(shí)符命名規(guī)則。goto語(yǔ)句格式:goto 標(biāo)號(hào),功能為:使系統(tǒng)轉(zhuǎn)向標(biāo)號(hào)所在的語(yǔ)句行執(zhí)行。 注意:結(jié)構(gòu)化程序設(shè)計(jì)方法,主張限制使用goto語(yǔ)句。因?yàn)闉E用goto語(yǔ)句,將會(huì)導(dǎo)致程序結(jié)構(gòu)無(wú)規(guī)律、可讀性差。 另外,從功能上說(shuō),for語(yǔ)句可完全代替當(dāng)型循環(huán)語(yǔ)句while,所以該語(yǔ)句也不是必需的。 Return,5.2 for語(yǔ)句和while語(yǔ)句,在3條循環(huán)語(yǔ)句中,for語(yǔ)句最為靈活,不僅可用于循環(huán)次數(shù)已經(jīng)確定的情況,也可用于循環(huán)次數(shù)雖不確定、但給出了循環(huán)繼續(xù)條件的情況。案例5.1 求1100的累計(jì)和。/*案例代碼文件名:AL5_1.C*/*程序功能:求1100的累
4、計(jì)和*/main() int i,sum=0; /*將累加器sum初始化為0*/ for(i=1; i=100; i+) sum += i;/*實(shí)現(xiàn)累加*/ printf(sum=%dn,sum); 程序演示 程序運(yùn)行情況如下: sum=5050,案例5.2 求n的階乘n!(n!=1*2*n)。/*案例代碼文件名:AL5_2.C*/*程序功能:求n!*/main() int i, n; long fact=1; /*將累乘器fact初始化為1*/ printf(“Input n: ”); scanf(“%d”, 程序演示 程序運(yùn)行情況如下:Input n: 55 ! = 120,1for語(yǔ)句的
5、一般格式 for(變量賦初值;循環(huán)繼續(xù)條件;循環(huán)變量增值) 循環(huán)體語(yǔ)句組; 2for語(yǔ)句的執(zhí)行過(guò)程 執(zhí)行過(guò)程如圖5-1所示。 (1)求解“變量賦初值”表達(dá)式。 (2)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值非0,執(zhí)行(3);否則,轉(zhuǎn)至(4)。 (3)執(zhí)行循環(huán)體語(yǔ)句組,并求解“循環(huán)變量增值”表達(dá)式,然后轉(zhuǎn)向(2)。 (4)執(zhí)行for語(yǔ)句的下一條語(yǔ)句。 3說(shuō)明 (1)“變量賦初值”、“循環(huán)繼續(xù)條件”和“循環(huán)變量增值”部分均可缺省,甚至全部缺省,但其間的分號(hào)不能省略。,(2)當(dāng)循環(huán)體語(yǔ)句組僅由一條語(yǔ)句構(gòu)成時(shí),可以不使用復(fù)合語(yǔ)句形式,如上例所示。 (3)“循環(huán)變量賦初值”表達(dá)式,既可以是給循環(huán)變量賦初值的
6、賦值表達(dá)式,也可以是與此無(wú)關(guān)的其它表達(dá)式(如逗號(hào)表達(dá)式)。 例如,for(sum=0;i=100;i+) sum += i; for(sum=0,i=1;i=100;i+) sum += i; (4)“循環(huán)繼續(xù)條件”部分是一個(gè)邏輯量,除一般的關(guān)系(或邏輯)表達(dá)式外,也允許是數(shù)值(或字符)表達(dá)式。,4while語(yǔ)句 (1)一般格式 while(循環(huán)繼續(xù)條件) 循環(huán)體語(yǔ)句組; (2)執(zhí)行過(guò)程 執(zhí)行過(guò)程如圖5-2所示。 1)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值為非0,轉(zhuǎn)2);否則轉(zhuǎn)3)。 2)執(zhí)行循環(huán)體語(yǔ)句組,然后轉(zhuǎn)1)。 3)執(zhí)行while語(yǔ)句的下一條。 顯然,while循環(huán)是for循環(huán)的一種簡(jiǎn)化
7、形式(缺省“變量賦初值”和“循環(huán)變量增值”表達(dá)式)。,案例5.3 用while語(yǔ)句求1100的累計(jì)和。/*案例代碼文件名:AL5_3.C*/*程序功能:求1100的累計(jì)和*/main() int i=1,sum=0; /*初始化循環(huán)控制變量i和累計(jì)器sum*/ while( i=100 ) sum += i;/*實(shí)現(xiàn)累加*/ i+;/*循環(huán)控制變量i增1*/ printf(“sum=%dn”,sum); 程序演示 程序運(yùn)行情況如下:sum=5050,5循環(huán)嵌套 (1)循環(huán)語(yǔ)句的循環(huán)體內(nèi),又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。循環(huán)嵌套的概念,對(duì)所有高級(jí)語(yǔ)言都是一樣的。 (2)for語(yǔ)句和w
8、hile語(yǔ)句允許嵌套,do-while語(yǔ)句也不例外。 Return,5.3 直到型循環(huán)do-while語(yǔ)句,1一般格式 do 循環(huán)體語(yǔ)句組; while(循環(huán)繼續(xù)條件);/*本行的分號(hào)不能缺省*/ 當(dāng)循環(huán)體語(yǔ)句組僅由一條語(yǔ)句構(gòu)成時(shí),可以不使用復(fù)合語(yǔ)句形式。 2執(zhí)行過(guò)程 執(zhí)行過(guò)程如圖5-3所示。 (1)執(zhí)行循環(huán)體語(yǔ)句組。 (2)計(jì)算“循環(huán)繼續(xù)條件”表達(dá)式。如果“循環(huán)繼續(xù)條件”表達(dá)式的值為非 0(真),則轉(zhuǎn)向(1)繼續(xù)執(zhí)行;否則,轉(zhuǎn)向(3)。 (3)執(zhí)行do-while的下一條語(yǔ)句。 do-while循環(huán)語(yǔ)句的特點(diǎn)是:先執(zhí)行循環(huán)體語(yǔ)句組,然后再判斷循環(huán)條件。,案例5.4 用do-while語(yǔ)句求解
9、1100的累計(jì)和。/*案例代碼文件名:AL5_4.C*/*程序功能:求1100的累計(jì)和*/main() int i=1, sum=0; /*定義并初始化循環(huán)控制變量,以及累計(jì)器*/ do sum += i; /*累加*/ i+; while(i=100);/*循環(huán)繼續(xù)條件:i=100*/ printf(“sum=%dn”,sum); 程序演示 do-while語(yǔ)句比較適用于處理:不論條件是否成立,先執(zhí)行1次循環(huán)體語(yǔ)句組的情況。除此之外,do-while語(yǔ)句能實(shí)現(xiàn)的,for語(yǔ)句也能實(shí)現(xiàn),而且更簡(jiǎn)潔。 Return,5.4 break語(yǔ)句與continue語(yǔ)句,為了使循環(huán)控制更加靈活,語(yǔ)言提供了b
10、reak語(yǔ)句和continue語(yǔ)句。 1一般格式: break; continue; 2功能 (1)break:強(qiáng)行結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)語(yǔ)句的下一條語(yǔ)句。 (2)continue:對(duì)于for循環(huán),跳過(guò)循環(huán)體其余語(yǔ)句,轉(zhuǎn)向循環(huán)變量增量表達(dá)式的計(jì)算;對(duì)于while和do-while循環(huán),跳過(guò)循環(huán)體其余語(yǔ)句,但轉(zhuǎn)向循環(huán)繼續(xù)條件的判定。 3break和continue語(yǔ)句對(duì)循環(huán)控制的影響如圖5-4所示。 4說(shuō)明 (1)break能用于循環(huán)語(yǔ)句和switch語(yǔ)句中,continue只能用于循環(huán)語(yǔ)句中。 (2)循環(huán)嵌套時(shí),break和continue只影響包含它們的最內(nèi)層循環(huán),與外層循環(huán)無(wú)關(guān)。 Retu
11、rn,5.5 應(yīng)用舉例,例5.5 求Fibonacci數(shù)列的前40個(gè)數(shù)。該數(shù)列的生成方法為:F1=1,F(xiàn)2=1,F(xiàn)n=Fn-1+Fn-2(n=3),即從第3個(gè)數(shù)開(kāi)始,每個(gè)數(shù)等于前2個(gè)數(shù)之和。 算法設(shè)計(jì),請(qǐng)參見(jiàn)第2章第1節(jié)(2.1)。參考源程序如下:/*案例代碼文件名:AL5_5.C*/main() long int f1=1,f2=1; /*定義并初始化數(shù)列的頭2個(gè)數(shù)*/ int i=1;/*定義并初始化循環(huán)控制變量i*/ for( ; i=20; i+ ) /*1組2個(gè),20組40個(gè)數(shù)*/ printf(“%15ld%15ld”, f1, f2); /*輸出當(dāng)前的2個(gè)數(shù)*/ if(i%2=0
12、) printf(“n”); /*輸出2次(4個(gè)數(shù)),換行*/ f1 += f2; f2 += f1; /*計(jì)算下2個(gè)數(shù)*/ 程序演示,例5.6 輸出10100之間的全部素?cái)?shù)。所謂素?cái)?shù)n是指,除1和n之外,不能被2(n-1)之間的任何整數(shù)整除。 算法設(shè)計(jì)要點(diǎn): (1)顯然,只要設(shè)計(jì)出判斷某數(shù)n是否是素?cái)?shù)的算法,外面再套一個(gè)for循環(huán)即可。 (2)判斷某數(shù)n是否是素?cái)?shù)的算法:根據(jù)素?cái)?shù)的定義,用2(n-1)之間的每一個(gè)數(shù)去整除n,如果都不能被整除,則表示該數(shù)是一個(gè)素?cái)?shù)。 判斷一個(gè)數(shù)是否能被另一個(gè)數(shù)整除,可通過(guò)判斷它們整除的余數(shù)是否為0來(lái)實(shí)現(xiàn)。 參考源程序如下: main() int i=11, j, counter=0; for( ; i=100; i+=2) /*外循環(huán):為內(nèi)循環(huán)提供一個(gè)整數(shù)i*/, for(j=2; j= i ) /*整數(shù)i是素?cái)?shù):輸出,計(jì)數(shù)器加1*/ printf(“%6d”,i); counter+; 程序演示 思考題:外循環(huán)控制變量i的初值從11開(kāi)始、增量為2的作法有什么好處?為提高運(yùn)行速度,如何優(yōu)化內(nèi)循環(huán)?(提示:從減少計(jì)算次數(shù)角度來(lái)考慮) Return,良好的源程序書寫習(xí)慣注釋(續(xù)),(3)循環(huán)結(jié)構(gòu) 在C語(yǔ)言中,循環(huán)結(jié)構(gòu)由循環(huán)語(yǔ)句for、while和do.while來(lái)實(shí)現(xiàn)。 作為注釋,應(yīng)在它們的前面說(shuō)明其功能,在循環(huán)
溫馨提示
- 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四川攀枝花市仁和區(qū)公益性崗位安置考試參考試題及答案解析
- 2026江西安源路橋集團(tuán)有限公司外聘人員招聘2人備考題庫(kù)及答案詳解一套
- 2025西藏林芝市工布江達(dá)縣人民醫(yī)院招聘公益性崗位消毒供應(yīng)室人員1人備考題庫(kù)及答案詳解(奪冠系列)
- 2026山東第一醫(yī)科大學(xué)附屬腫瘤醫(yī)院第二批招聘?jìng)淇碱}庫(kù)參考答案詳解
- 2026年語(yǔ)言文化比較研究與分析技巧測(cè)試題
- 2026年企業(yè)人力資源試題庫(kù)員工培訓(xùn)與招聘技術(shù)問(wèn)題
- 2026年臨沂市榮軍優(yōu)撫醫(yī)院(臨沂市心理醫(yī)院)公開(kāi)招聘綜合類崗位工作人員備考題庫(kù)(2人)及1套完整答案詳解
- 2025銅川市新區(qū)審判庭招聘筆試成績(jī)查詢及資格復(fù)審、面試、速錄 技能測(cè)試備考題庫(kù)完整參考答案詳解
- 2025四川德陽(yáng)市第二人民醫(yī)院考核招聘專業(yè)技術(shù)人員20人備考題庫(kù)及參考答案詳解
- 2026年國(guó)際經(jīng)濟(jì)與貿(mào)易實(shí)務(wù)知識(shí)綜合練習(xí)題
- 2026陜西氫能產(chǎn)業(yè)發(fā)展有限公司所屬單位招聘(29人)備考題庫(kù)附答案
- 智慧旅游建設(shè)培訓(xùn)班課件
- 特發(fā)性肺纖維化個(gè)體化治療中的營(yíng)養(yǎng)支持策略
- 2026年度黑龍江省生態(tài)環(huán)境廳所屬事業(yè)單位公開(kāi)招聘工作人員57人考試參考試題及答案解析
- (2025年)鐵路行車組織培訓(xùn)考試題附答案
- 血液儲(chǔ)存和出入庫(kù)管理制度
- 社區(qū)干部法律培訓(xùn)課件
- 2025年兩種人考試題庫(kù)附答案
- 貴州省貴陽(yáng)市2024-2025學(xué)年高一上學(xué)期期末監(jiān)測(cè)物理試卷(含解析)
- 稅收說(shuō)理式執(zhí)法課件
- 山東煙草招聘筆試題庫(kù)2026
評(píng)論
0/150
提交評(píng)論