版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、5.1 概述概述 循環(huán)結(jié)構(gòu)是高級語言中一個重要的基本結(jié) 構(gòu),它可以利用很少的語句簡單方便地重復(fù) 執(zhí)行一些操作,因此應(yīng)用很廣。 1、基本概念 (1)循環(huán)條件:控制循環(huán)的條件。 (2)循環(huán)變量:確定循環(huán)條件的變量。 (3)循環(huán)體:程序中需要重復(fù)執(zhí)行的語句。 第第5章章 循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計 2、循環(huán)的種類 (1)當(dāng)型循環(huán):先判斷條件,當(dāng)條件成立時執(zhí)行循環(huán) 體,條件不成立循環(huán)體一次也不執(zhí)行。 (2)直到型循環(huán):先執(zhí)行循環(huán)體,后判斷條件,當(dāng)條 件成立時繼續(xù)循環(huán),條件不成立結(jié)束循環(huán)(至少執(zhí)行 循環(huán)體一次)。 3、C語言中實現(xiàn)循環(huán)結(jié)構(gòu)的四種語句: while 語句 (當(dāng)型) dowhile 語
2、句 (直到型) for 語句 (當(dāng)型) goto語句和if 語句結(jié)合形成循環(huán)結(jié)構(gòu)(容易形成非結(jié) 構(gòu)化,可以不用) 5.2 goto語句以及用goto語句構(gòu)成循環(huán) 一、自由轉(zhuǎn)向語句goto 1、一般形式 或: 標(biāo)號:語句 goto 標(biāo)號 goto 標(biāo)號 標(biāo)號: 語句 (形成循環(huán)結(jié)構(gòu)) (不形成循環(huán)結(jié)構(gòu)) 2、說明 (1)標(biāo)號為合法的標(biāo)識符,不能是數(shù)字等。可加在任 何語句的前面。 (2)goto語句是造成程序非結(jié)構(gòu)化的重要原因,因此 盡量不用(C語言中完全可以不用)。 二、用goto語句構(gòu)成循環(huán):在上面第一種形式中,將 “goto 標(biāo)號”改為: if(條件) goto 標(biāo)號; 例 用if 和got
3、o語句構(gòu)成循環(huán),求 100 1n n main() int i,sum=0; i=1; loop: if(i=100) sum+=i; i+; goto loop; printf(%d,sum); sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050 循環(huán)初值 循環(huán)終值 循環(huán)變量增值 循環(huán)條件 循環(huán)體 5.3 while 5.3 while 語句語句 1、while 語句的一般形式 while (條件) 循環(huán)體語句 2、說明 (1)while 是關(guān)鍵字,“while (條件)”的意 思 為“當(dāng)條件成立時執(zhí)行”; (2)“條件”為關(guān)系表達式、
4、邏輯表達式和任 意 合法的表達式,其兩端的圓括號不能少; (3)循環(huán)體為一條語句或復(fù)合語句,可執(zhí)行多 次,也可能一次也不執(zhí)行。 3、while循環(huán)的執(zhí)行過程: 計算表達式(條件) 值為假(0) 值為真 (非0) 執(zhí)行循環(huán)體 例例 計算計算1100之間所有之間所有3的倍數(shù)的數(shù)的和。的倍數(shù)的數(shù)的和。 main() int i,s; i=1;s=0; while(i=100) if (i%3=0) s=s+i; i+; printf(“s=%dn”,s); 5.4 dowhile 5.4 dowhile 語句語句 1、dowhile 語句的一般形式 do 循環(huán)體語句 while (條件); 2、說明
5、 (1)do、while是C語言的關(guān)鍵字; (2)循環(huán)體是一條語句或復(fù)合語句; (3)“條件”為關(guān)系表達式、邏輯表達式和任 意合法的表達式,兩端的圓括號不能少,其 后的“;”表示dowhile語句的結(jié)束,也不 能少。 3、do-while循環(huán)的執(zhí)行過程: 執(zhí)行循環(huán)體 計算表達式(條件) 值為假(0) 值為真 (非0) 例例 求兩個整數(shù)求兩個整數(shù)m和和n最大公約數(shù)最大公約數(shù) main() int m,n,a,b,r; scanf(“%d%d”, a=m;b=n; dor=a%b; a=b; b=r;while(r!=0); printf(“the greatest common divide o
6、f”); printf(“%d,%d is %dn”,m,n,a); 5.5 for 5.5 for 語句語句 1、for語句的一般形式 for(初始化表達式;條件表達式;修正表達式) 循環(huán)體語句 2、說明 (1)for為C語言的關(guān)鍵字; (2)for后圓括號中的三個表達式可以是任意表達式,它們的作 用如下: 初始化表達式:對循環(huán)變量等賦初值??墒?,此時初始化在 for語句前進行; 條件表達式:控制循環(huán)的條件,為關(guān)系表達式、邏輯表達式 或任意合法的表達式。一般不能省,若省,可能產(chǎn)生死循環(huán); 修正表達式:對循環(huán)變量進行修正??墒?,此時對循環(huán)變量 的修正在循環(huán)體中或在條件表達式中進行。 (3)循環(huán)
7、體語句為一條語句或復(fù)合語句 3、for循環(huán)結(jié)構(gòu)的執(zhí)行過程,可用下圖表示: 假 (0) for(初始化表達式; 條件(表達式); 修正表達式) 真 (非0 ) 循環(huán)體語句 例1:求sum=1+2+3+100 sum=0; for(i=1;i=100;i+)sum+=i; 其中i為循環(huán)變量。此程序段可改寫成很多形式,例如: (1) for(sum=0,i=1;i=100;sum+=i,i+); /*無循環(huán)體,含在修正表達式中*/ (2) sum=0; i=1; /*初始化放在for語句之前*/ for(;i=100;i+)sum+=i; (3) sum=0;i=0; for(;+i=100;)su
8、m+=i; /*條件表達式同時起到修正表達式的作用*/ (4) sum=0; i=1; for(;i=100;)sum+=i;i+; /*對循環(huán)變量的修正放在循環(huán)體中*/ 可見for語句的用法相當(dāng)靈活,功能很強,用途很廣。 例例2:2:寫出下面程序的運行結(jié)果寫出下面程序的運行結(jié)果 main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); 例例3 打印所有的打印所有的“水仙花數(shù)水仙花數(shù)“。所謂。所謂” 水仙花數(shù)水仙花數(shù)”是指一個是指一個3位數(shù),其各位位數(shù),其各位 數(shù)字的立方和等于該數(shù)本身。例如,數(shù)字的立方
9、和等于該數(shù)本身。例如, 153是一個是一個“水仙花數(shù)水仙花數(shù)“,因為,因為 153=13+53+33 main() int i,j,k,n; printf(“水仙花水仙花“數(shù)是數(shù)是:”); for (n=100;n1000;n+) i=n/100; j=n/10-i*10; k=n%10; if (n=i*i*i+j*j*j+k*k*k) printf(“%4d”,n); printf(“n”); 5.6 5.6 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套 由于循環(huán)體可以是任意語句,因此也可以是循環(huán) 語句,這就構(gòu)成循環(huán)結(jié)構(gòu)的嵌套。既可以是同種循環(huán) 語句嵌套,也可以是不同循環(huán)語句相互嵌套。 嵌套循環(huán)的特點:外
10、循環(huán)變量每取一個值,內(nèi)循環(huán)要 循環(huán)一周。 例:百雞問題:百錢買百雞,公雞三塊錢一只,母雞 兩塊錢一只,小雞一塊錢買三只,問共買公雞、母 雞和小雞各多少只? 分析:可用窮舉算法,公雞不超過33只,母雞不超過 49只,小雞=100-公雞-母雞??捎们短椎膚hile或 do-while或for循環(huán)編程。嵌套的while循環(huán)如下: main( ) int cock=0,hen,chick; while(cock=33) hen=0; while(hen=49) chick=100-cock-hen; if(3*cock+2*hen+chick/3=100 hen+; cock+; 5.7 流程限定轉(zhuǎn)向
11、語句:流程限定轉(zhuǎn)向語句:break和和continue 5.7.1 break(中斷)語句。前面學(xué)過它的作用有: 1、跳出當(dāng)層switch結(jié)構(gòu) 2、循環(huán)體中的break語句,使流程跳出當(dāng)層循環(huán) 語句。 注意:循環(huán)體中的break語句應(yīng)作為 if 語句的一 個分支,即是在一定條件下才跳出循環(huán)。 例例1 1:對于整數(shù)半徑的圓,求面積大于:對于整數(shù)半徑的圓,求面積大于100100的最小的面的最小的面 積。積。 #define PI 3.14159 main( ) int r; float area; for(r=1;r100) break; printf(“area=%fn, area); 5.7.
12、2 continue(繼續(xù))語句 1、一般形式 continue; 2、放置位置:循環(huán)體中,一般也是作為if語句 的一個分支,以防出現(xiàn)死語句。 3、作用:(結(jié)束本次循環(huán))跳過循環(huán)體中余下 的語句,然后: 對while循環(huán)和dowhile循環(huán):繼續(xù)計 算(條件)表達式以確定是否繼續(xù)循環(huán); 對for循環(huán):計算修正表達式,然后計算 條件表達式以確定是否繼續(xù)循環(huán)。 例1 寫出下面程序的運行結(jié)果 main( ) int k=0, s=0, i; for(i=1;i5)printf(*i=%d,s=%d,k=%dn,i,s,k); continue; k=k+s; printf(i=%d,s=%d,k=%
13、dn,i,s,k); 當(dāng)s5時,由于continue語句的作用,for循環(huán)中循環(huán)體的 最后兩條語句不再執(zhí)行。程序輸出四行信息: i=1, s=1, k=1 i=2, s=3, k=4 * i=3, s=6, k=4 * i=4, s=10, k=4 4、continue語句與break語句比較。 實驗五實驗五 1、利用公式求、利用公式求cosx的近似值(精度為的近似值(精度為0.01) 2、每個蘋果、每個蘋果 0.8元,第一天買元,第一天買2個蘋果,第二個蘋果,第二 天開始,每天買前一天的天開始,每天買前一天的2倍,直到購買的蘋倍,直到購買的蘋 果個數(shù)達到不超過果個數(shù)達到不超過100的最大值。
14、編寫程序求的最大值。編寫程序求 每天平均花多少錢?每天平均花多少錢? )!2( ) 1(. ! 6! 4! 2 1cos 2 0 642 n xxxx x n n n 3、編寫程序,從鍵盤輸入、編寫程序,從鍵盤輸入6名學(xué)生的名學(xué)生的5門成績,門成績, 分別統(tǒng)計出每個學(xué)生的平均成績。分別統(tǒng)計出每個學(xué)生的平均成績。 4、試編寫程序,找出、試編寫程序,找出1至至99之間的全部同構(gòu)數(shù)。之間的全部同構(gòu)數(shù)。 同構(gòu)數(shù)是這樣一組數(shù):它出現(xiàn)在平方數(shù)的右同構(gòu)數(shù)是這樣一組數(shù):它出現(xiàn)在平方數(shù)的右 邊。例如:邊。例如:5是是25右邊的數(shù),右邊的數(shù),25是是625右邊的右邊的 數(shù),數(shù),5和和25都是同構(gòu)數(shù)。都是同構(gòu)數(shù)。
15、5、打印形狀為直角三角形的九九乘法表。、打印形狀為直角三角形的九九乘法表。 習(xí)題課習(xí)題課 例例1 已知正弦值近似計算公式為:已知正弦值近似計算公式為: 輸入輸入x和和eps,按上述公式計算,按上述公式計算sinx的近似的近似 值,要求計算誤差小于給定的值,要求計算誤差小于給定的eps. . )!12 ( ) 1(. ! 7! 5! 3 sin 12753 n xxxx xx n n #include main() float x,eps,s,m=0.0,mo; int n=0,i=1,j,t; printf(“enter float x scanf(“%f%f”, do t=s=1; mo=m
16、; for (j=1;jeps); printf(“%d,sin(%f)=%fn”,n,x,m); 例例2 打印輸出下列圖案打印輸出下列圖案 * * * * * * * main() int i,j; for (i=1;i=4;i+) for (j=1;j=4-i;j+) printf(“ “); for (j=1;j=2*i-1;j+) printf(“*”); printf(“n”); for (i=1;i=3;i+) for (j=1;j=i;j+) printf(“ “); for (j=1;j=7-2*i;j+) printf(“*”); printf(“n”); 例例3 一個正整數(shù)如果恰好等于它的因子之和(除一個正整數(shù)如果恰好等于它的因子之和(除 自身外),則稱該數(shù)為完全數(shù),例如:自身外),則稱該數(shù)為完全數(shù),例如: 6=1+2+3,6為完全數(shù)。編程求為完全數(shù)。編程求1000以內(nèi)的所以內(nèi)的所 有完全數(shù)。有完全數(shù)。 main() int a,i,m; for (a=1;a=1000;a+) for (m=0,i=1 ;i=a/2;i+) if (!(
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河道管理協(xié)議
- 水果購銷合同范本版示例
- 三亞市購房協(xié)議示例
- 聘請財務(wù)顧問協(xié)議書樣本
- 借款糾紛起訴狀范本法律維權(quán)攻略
- 書柜購買合約
- 保安服務(wù)合同鞏固
- 型材安裝工程項目招標(biāo)
- 簡化勞務(wù)分包協(xié)議范本
- 酒店協(xié)議價格合同的四大誤解
- 苯-乙苯連續(xù)精餾塔的設(shè)計
- GB/T 7027-2002信息分類和編碼的基本原則與方法
- 中考語文非連續(xù)性文本閱讀10篇專項練習(xí)及答案
- GB 25431.1-2010橡膠塑料擠出機和擠出生產(chǎn)線第1部分:擠出機的安全要求
- 防雷接地電阻測試記錄表
- 余角補角課件
- 國開作業(yè)《建筑制圖基礎(chǔ)》學(xué)習(xí)過程表現(xiàn)參考(含答案)533
- 免費施工方案大全
- 幼兒園小班社會:《紅綠燈》 課件
- 滅火戰(zhàn)術(shù)教案(2010版)
- 三副職務(wù)行為重點標(biāo)準
評論
0/150
提交評論