已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章 循環(huán)結(jié)構(gòu)程序設(shè)計,西南大學(xué) 計算機(jī)系,C 語言程序設(shè)計,2019/7/14,2,本章主要內(nèi)容,while循環(huán)控制 do-while循環(huán)控制 for循環(huán)控制 用goto語句實現(xiàn)循環(huán)控制 循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句 循環(huán)的嵌套 循環(huán)結(jié)構(gòu)程序設(shè)計舉例,2019/7/14,3,5.1 while循環(huán)控制,語句一般格式 while (表達(dá)式) 語句,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是C語言其他類型的合法表達(dá)式 用來控制循環(huán)體是否執(zhí)行,稱為內(nèi)嵌語句,可以是基本語句、控制語句,也可以是復(fù)合語句 是循環(huán)重復(fù)執(zhí)行的部分,2019/7/14,4,功能:,計算表達(dá)式的值,為非0(邏輯真)時,重復(fù)執(zhí)行內(nèi)嵌語句,每執(zhí)行一次,就判斷一次表達(dá)式的值,直到表達(dá)式的值為0 時結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while后面的語句。,循環(huán)控制條件,循環(huán)體,2019/7/14,5,例如:,【例5.1】編寫程序,求100個自然數(shù)的和 即: s=1+2+3+ +100,思路:尋找加數(shù)與求和的規(guī)律,加數(shù)i從1變到100,每循環(huán)一次,使i增1,直到i的值超過100。i的初值設(shè)為1。 求和設(shè)變量 sum 存放和,循環(huán)求sum=sum+i,直至i超過100。,2019/7/14,6,算法和程序:,main( ) int i,sum; i=1; sum=0; while (i=100) sum=sum+i; i+; printf(“sum=%dn“,sum); ,運(yùn)行jc5_1,程序輸出結(jié)果: sum=5050,i: 循環(huán)控制變量 sum: 累加器,2019/7/14,7,注意:,如果while的 (表達(dá)式) 值為0,則循環(huán)體一次也不執(zhí)行 (例如當(dāng)i的初值=101) 。 在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無限進(jìn)行(死循環(huán))。 在循環(huán)體中,語句的先后位置必須符合邏輯,否則會影響運(yùn)算結(jié)果。,思考程序段的輸出? while (i=100) i+; sum=sum+i; ,運(yùn)行后,輸出: sum=5150 原因是什么?,2019/7/14,8,注意(續(xù)):,為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意: 循環(huán)控制條件的描述 控制條件的初始狀態(tài)(初始值) 循環(huán)體內(nèi)部對控制條件的影響,2019/7/14,9,5.2 do-while語句,語句一般格式 do 語句 while (表達(dá)式); 功能: 先執(zhí)行內(nèi)嵌語句(循環(huán)體),之后計算表達(dá)式的值,不為0(邏輯真)時,再執(zhí)行循環(huán)體并判斷條件,直到表達(dá)式的值為 0 結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語句。,2019/7/14,10,do-while循環(huán)的算法,N-S結(jié)構(gòu)圖,main( ) int i=1,sum=0; do sum=sum+i; i+; while (i=100); printf(“%dn“,sum); ,用do-while語句 求100個自然數(shù)的和,2019/7/14,11,說明:,while和do-while都能實現(xiàn)循環(huán)控制,while結(jié)構(gòu)程序通常都可以轉(zhuǎn)換成do-while結(jié)構(gòu),區(qū)別: do- while 語句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次; while 語句先判斷條件再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行 dowhile循環(huán)體中一定要有能使表達(dá)式值趨于0的操作(如i+),否則會出現(xiàn)死循環(huán)。,2019/7/14,12,do-while語句的簡單應(yīng)用,【例5.3】用輾轉(zhuǎn)相除法求m和n的最大公約數(shù),2019/7/14,13,算法和程序:,main( ) int m,n,r; scanf(“%d, %d“, ,運(yùn)行jc5_3,程序運(yùn)行情況如下: 24, 60 12,2019/7/14,14,5.3 for語句,語句一般格式 for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,功能: 計算表達(dá)式1的值,再判斷表達(dá)式2,如果其值為非0(邏輯真),則執(zhí)行內(nèi)嵌語句(循環(huán)體),并計算表達(dá)式3;之后再去判斷表達(dá)式2,一直到其值為0時結(jié)束循環(huán),執(zhí)行后續(xù)語句。,循環(huán)初始條件,循環(huán)控制條件,循環(huán)體,2019/7/14,15,for語句的算法,例如: main( ) int i,sum; sum=0; for ( i=1; i=100; i+) sum=sum+i; printf(“sum=%dn“,sum); ,可部分或全部省略,但“;”不可省略,2019/7/14,16,省略for語句的表達(dá)式, 表達(dá)式1、2、3全省略,即: for ( ; ; ) 就等同于:while (1),會無限循環(huán)(死循環(huán)),注意:在省略某個表達(dá)式時,應(yīng)在適當(dāng)位置進(jìn)行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行, 省略表達(dá)式1和表達(dá)式3,即: for(;表達(dá)式2;) 就等同于:while( 表達(dá)式2 ) 省略表達(dá)式2,即: for(表達(dá)式1; ;表達(dá)式3) 就等同于:表達(dá)式1; while(1)表達(dá)式3;,2019/7/14,17,例如:, i=1; for ( ; i100) for (i=1; i100) i+; ,2019/7/14,18,說明:,所有用 while 語句實現(xiàn)的循環(huán)都可以用for 語句實現(xiàn)。,等價于:,for(表達(dá)式1;表達(dá)式2 ;表達(dá)式3) 語句;,表達(dá)式1; while (表達(dá)式2) 語句; 表達(dá)式3; ,2019/7/14,19,for語句的簡單應(yīng)用,【例5.4】求n! ,即計算p=123n的值。,思路:求階乘與求累加的運(yùn)算處理過程類似,只要將“+”變?yōu)椤?”。,設(shè)置: 乘數(shù)i ,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤輸入) 累乘器 p ,每次循環(huán)令p = p*i,2019/7/14,20,程序:,main( ) int i, n; long p; p=1; printf(“Enter n:“); scanf(“%d“, ,思考: 如何輸出1!, 2!, , n! ? 如何求s =1!+ 2!+ + n! ?,運(yùn)行jc5_4,2019/7/14,21,熟悉幾個循環(huán)語句,while (!x) x+; 當(dāng) x=0 時,執(zhí)行循環(huán)體x+;,while (c=getchar( ) != n) n=n+1; n 稱為計數(shù)器,作用是統(tǒng)計輸入字符的個數(shù) while (num+5); 先執(zhí)行循環(huán)體x*=-3,再判斷條件(x5) for (n=0; n26; n+) printf(“%c “, n+A); 作用是輸出26個大寫字母 for (sum=0, i=1; i=100; sum=sum+i, i+=2) ; 作用是計算100以內(nèi)的奇數(shù)和,2019/7/14,22,幾種循環(huán)語句的比較,while和do-while語句的表達(dá)式只有一個,for語句有三個。 while 和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。,while語句多用于循環(huán)次數(shù)不定的情況 do-while語句多用于至少要運(yùn)行一次的情況 for語句多用于要賦初值或循環(huán)次數(shù)固定的情況,2019/7/14,23,5.4 用goto語句實現(xiàn)循環(huán),有興趣的同學(xué)自學(xué) 不提倡使用goto語句,注意: goto語句能實現(xiàn)程序無條件轉(zhuǎn)移,為編程提供了便利。但是無限制地使用,會破壞程序的結(jié)構(gòu)化程度。因此應(yīng)限制使用。,2019/7/14,24,5.5 循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句,有如下三種語句實現(xiàn)跳轉(zhuǎn): continue語句 break語句 goto語句 在循環(huán)語句的循環(huán)體中使用,可以進(jìn)行循環(huán)的流程控制,2019/7/14,25,5.5.1 continue語句及應(yīng)用,功能: 中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。,while語句,do-while語句,for語句,2019/7/14,26,例如:, int x,n=0,s=0; while (n10) scanf(“%d“, int x,n=0,s=0; do scanf(“%d“, for (n=0,s=0; n10; n+) scanf(“%d“, ,2019/7/14,27,應(yīng)用舉例,【例5.7】把100200之間能被7整除的數(shù),以十個數(shù)為一行的形式輸出,最后輸出一共有多少個這樣的數(shù)。,2019/7/14,28,算法和程序,main( ) int n,j=0; for(n=100;n=200;n+) if (n%7!=0) continue; printf(“%6d“,n); j+; if (j%10=0) printf(“n“); printf(“ n j=%dn“,j); ,運(yùn)行jc5_7,2019/7/14,29,5.5.2 循環(huán)中break的應(yīng)用,功能: 利用break語句能夠強(qiáng)迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語句執(zhí)行。,while語句,do-while語句,for語句,2019/7/14,30,例如:, int x,n=0,s=0; while (n10) scanf(“%d“, int x,n=0,s=0; do scanf(“%d“, for (n=0,s=0; n10; n+ ) scanf(“%d“, ,2019/7/14,31,5.6 循環(huán)的嵌套,如果循環(huán)語句的循環(huán)體內(nèi)又包含了另一條循環(huán)語句,則稱為循環(huán)的嵌套 例如: #include main( ) int i, j; for ( i=1; i10; i+ ) for ( j=1; j=i; j+ ) printf (j=i)?“%4dn“:“%4d“,i*j); ,運(yùn)行jc5_a,外循環(huán)語句,內(nèi)循環(huán)語句,2019/7/14,32,注意:,while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。 多重循環(huán)程序執(zhí)行時,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。 例如:,for(a=1;a=10;a+) for (b=0;b=5;b+) ,外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次 循環(huán)正常結(jié)束時,內(nèi)循環(huán)執(zhí)行了106=60次,2019/7/14,33,5.7 循環(huán)結(jié)構(gòu)程序設(shè)計,【例5.5】按每行輸出5個數(shù)的形式輸出Fibonacci數(shù)列的前20項 。,思路:Fibonacci數(shù)列的前幾項是:1、1、2、3、5、8、13、21、34、。此數(shù)列的變化規(guī)律是:,設(shè)變量f1、f2和f3,并為f1和f2賦初值1,令f3=f1+f2得到第3項; 將f1f2, f2f3,再求f3=f1+f2得到第4項; 依此類推求第5項、第6項,這是一種遞推算法 應(yīng)采用循環(huán)實現(xiàn),2019/7/14,34,算法和程序,#define N 20 main( ) int i,f1,f2,f3; f1=f2=1; printf(“n%8d%8d“,f1,f2); for (i=3; i=N; i+) f3=f1+f2; f1=f2; f2=f3; printf(“%8d“,f3); if (i%5=0) printf(“n“); ,運(yùn)行jc5_5,2019/7/14,35,舉例2,【例5.12】判斷輸入的某個數(shù)m是否為素數(shù)。若是素數(shù),輸出“YES”,若不是,輸出“NO”。,思路:素數(shù)是指只能被1和它本身整除的數(shù),如5、7、11、17、等。,分別用2、3、,m-1嘗試能否整除整數(shù)m。如果m能被某個數(shù)整除,則m就不是素數(shù)。,這是一種窮舉算法 設(shè)除數(shù)為j,從2循環(huán)到m-1,2019/7/14,36,算法和程序:,#include “math.h“ main( ) int j,m,k; printf(“Enter an integer number: “); scanf(“%d“, ,運(yùn)行jc5_12,2019/7/14,37,程序的優(yōu)化,對于窮舉法來說,為了提高程序的效率,就要減少嘗試次數(shù)。,#include “math.h“ main( ) int j,m,k; printf(“Enter an integer number: “); scanf(“%d“, ,思考:如何輸出100200中所有的素數(shù),2019/7/14,38,舉例3,【例5.13】用牛頓迭代法求方程 2x3+4x2-7x-6=0 在x=1.5附近的根。,思路:設(shè)xn為一個接近xa的近似根,過(xn, f(xn) 點做切線,切線方程為:,即:,牛頓迭代公式,2019/7/14,39,算法基本步驟:, 先設(shè)一個方程近似根x0,求出方程f的值和方程導(dǎo)數(shù)f1的值; f=2x03+4x02-7x0-6 f1=6x02+8x0-7 用迭代公式x=x0-f/f1進(jìn)行迭代,求出x比x0要接近方程真實的根; 當(dāng)|x-x0|大于某個很小的數(shù)時(如10-6),認(rèn)為未找到,此時將xx0,再次求f、f1,并迭代,又求出一個新的更接近方程根的x; 一直到 |x-x0|10-6時得到方程近似根:x或x0。,這是一種迭代算法 用循環(huán)實現(xiàn),2019/7/14,40,算法和程序:,#include “math.h“ main( ) float x,x0,f,f1; x=1.5; do x0=x; f=2*x0*x0*x0+4*x0*x0-7*x0-6; f1=6*x0*x0+8*x0-7; x=x0-f/f1; while(fabs(x-x0)1e-6); printf(“%fn“,x); ,運(yùn)行jc5_13,2019/7/14,41,舉例4,【例5.11】編程序求210000以內(nèi)的完全數(shù)。,完全數(shù):一個數(shù)的因子(除了這個數(shù)本
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土地買賣居間合同簽訂與履行指導(dǎo)3篇
- 2025年度桶裝純凈水銷售數(shù)據(jù)分析與應(yīng)用合同
- 二零二五年度醫(yī)院布草用品消毒服務(wù)及質(zhì)量監(jiān)控合同3篇
- 二零二五年度商業(yè)場地租賃合同轉(zhuǎn)讓與租賃合同續(xù)簽協(xié)議2篇
- 二手房交易協(xié)議(2024版)
- 2025版事業(yè)單位聘用合同正規(guī)范本(含崗位調(diào)整)3篇
- 2025立醫(yī)院醫(yī)用控溫儀設(shè)備采購與安裝服務(wù)合同2篇
- 2025年度綠植種子研發(fā)與種植合同3篇
- 二零二五年度農(nóng)用貨車運(yùn)輸保險代理服務(wù)合同
- 二零二五年度土地承包經(jīng)營權(quán)租賃與農(nóng)村電商服務(wù)合同
- 山東省青島市2023-2024學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 墓地銷售計劃及方案設(shè)計書
- 從偏差行為到卓越一生3.0版
- 優(yōu)佳學(xué)案七年級上冊歷史
- 鋁箔行業(yè)海外分析
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項目 投標(biāo)方案(技術(shù)標(biāo))
- 【公司利潤質(zhì)量研究國內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國地區(qū)碼
評論
0/150
提交評論