




已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章 循環(huán)結(jié)構(gòu),4.1 當(dāng)型循環(huán)與直到型循環(huán) 4.2 for 循 環(huán) 4.3 循環(huán)的嵌套與其他有關(guān)語句 4.4 程序舉例,4.1 當(dāng)型循環(huán)與直到型循環(huán),4.1.1 當(dāng)型循環(huán)結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu)的流程圖如圖4.1所示。,圖4.1 當(dāng)型循環(huán)結(jié)構(gòu)流程圖,返回目錄,在圖4.1中,條件在程序中一般是一個邏輯表達(dá)式,條件滿足是指邏輯表達(dá)式的值為真。循環(huán)體可以是單個語句,也可以是由若干可執(zhí)行語句組成的復(fù)合語句,它們是需要重復(fù)執(zhí)行的操作。 當(dāng)型循環(huán)的執(zhí)行過程是:當(dāng)條件滿足(即邏輯表達(dá)式的值為真)時,執(zhí)行循環(huán)體中所包括的操作,當(dāng)循環(huán)體執(zhí)行完后,將再次判斷條件,直到條件不滿足(即邏輯表達(dá)式的值為假)為止,從而退出循環(huán)結(jié)構(gòu)。,實現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu)的C語句形式為 while (表達(dá)式) 循環(huán)體語句 功能:當(dāng)表達(dá)式值0時,執(zhí)行循環(huán)體,執(zhí)行完后繼續(xù)判斷表達(dá)式值,只有當(dāng)表達(dá)式值0時才退出循環(huán)。,例4.2 從鍵盤輸入各學(xué)生成績,并對90分以上(包括90分)的學(xué)生人數(shù)進(jìn)行計數(shù),直到輸入的成績?yōu)樨?fù)為止,最后輸出成績在90分以上的學(xué)生人數(shù)。,圖4.3 例4.2的流程圖,其流程圖如圖4.3所示。其中變量count為整型,用于對90分以上的學(xué)生人數(shù)進(jìn)行計數(shù)。,相應(yīng)的C程序如下: #include “stdio.h“ main() int count; float grade; count0; scanf(“%f“,&grade); while (grade0.0) if (grade90.0) countcount1; scanf(“%f“,&grade); printf(“count%dn“,count); ,4.1.2 直到型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu)的流程圖如圖4.4所示。,圖4.4 直到型循環(huán)結(jié)構(gòu)流程圖,直到型循環(huán)的執(zhí)行過程是,首先執(zhí)行循環(huán)體,然后判斷條件(即計算邏輯表達(dá)式),如果條件滿足(即邏輯表達(dá)式值為真),則退出循環(huán)結(jié)構(gòu);如果條件不滿足(即邏輯表達(dá)式值為假),則繼續(xù)執(zhí)行循環(huán)體。 實現(xiàn)直到型循環(huán)結(jié)構(gòu)的C語句形式為 do 循環(huán)體語句 while(表達(dá)式); 功能:先執(zhí)行循環(huán)體,然后判斷表達(dá)式值,若表達(dá)式值0,則再次執(zhí)行循環(huán)體,如此循環(huán),直到表達(dá)式值0為止。,例4.3 計算并輸出下列級數(shù)和:,直到某項的絕對值小于 為止。,相應(yīng)的流程圖如圖4.5所示。其中f用于改變每一項的符號,因為這是一個各項符號相間的級數(shù)。,圖4.5 例4.3的流程圖,相應(yīng)的C程序如下: #include “stdio.h“ main() int k; double sum,d,f; sum1.0; k1;f1.0; do kk1;ff;d1.0/(k*(k1);sumsumf*d; while(d1.0e4); printf(“sum%lfn“,sum); ,4.1.3 當(dāng)型循環(huán)結(jié)構(gòu)與直到型循環(huán)結(jié)構(gòu)的區(qū)別與聯(lián)系 當(dāng)型循環(huán)結(jié)構(gòu)與直到型循環(huán)結(jié)構(gòu)既有共同之處,又有區(qū)別。主要體現(xiàn)在以下幾個方面。 (1)在當(dāng)型循環(huán)中,其循環(huán)體可以一次也不執(zhí)行(即執(zhí)行當(dāng)型循環(huán)結(jié)構(gòu)的一開始,其條件就不滿足)。 (2)不管是當(dāng)型循環(huán)結(jié)構(gòu)還是直到型循環(huán)結(jié)構(gòu),在循環(huán)體內(nèi)部必須要有能改變條件(即邏輯表達(dá)式值)的語句,否則將造成死循環(huán)。 (3)對于有些問題既可以用當(dāng)型循環(huán)結(jié)構(gòu)來處理,也可以用直到型循環(huán)結(jié)構(gòu)來處理。 (4)不管是當(dāng)型循環(huán)結(jié)構(gòu)還是直到型循環(huán)結(jié)構(gòu),其循環(huán)體如果包含一個以上的語句,應(yīng)以復(fù)合語句形式出現(xiàn)。,4.2 for 循 環(huán),C語言提供的for循環(huán)屬于當(dāng)型循環(huán)結(jié)構(gòu),其一般形式為 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句(組) 它等價于下列的當(dāng)型循環(huán)結(jié)構(gòu): 表達(dá)式1; while(表達(dá)式2) 循環(huán)體語句 表達(dá)式3; ,返回目錄,下面對for循環(huán)語句作幾點說明: (1)在for語句中,三個表達(dá)式中的任何一個表達(dá)式均可省略,但其中的兩個“;”不能省略。 (2)下列兩個循環(huán)都是死循環(huán): for(表達(dá)式1;表達(dá)式3) 循環(huán)體 與 for(;) 循環(huán)體 因為它們都沒有用于判斷循環(huán)是否結(jié)束的條件(即表達(dá)式2)。 (3)for循環(huán)本質(zhì)上也是當(dāng)型循環(huán)結(jié)構(gòu),只不過它對于事先可以確定循環(huán)次數(shù)的問題特別方便。 (4)在for循環(huán)中,循環(huán)體也可以是復(fù)合語句(即用一對花括號 括起來的語句組)。,4.3 循環(huán)的嵌套與其他有關(guān)語句,4.3.1 循環(huán)的嵌套 所謂循環(huán)的嵌套是指一個循環(huán)體內(nèi)又包含了另一個完整的循環(huán)結(jié)構(gòu)。C語言允許循環(huán)結(jié)構(gòu)嵌套多層。循環(huán)的嵌套結(jié)構(gòu)又稱為多重循環(huán)。,返回目錄,例4.6 計算并輸出10以內(nèi)(包括10)所有自然數(shù)的階乘值。即計算1!,2!,3!,4!,5!,6!,7!,8!,9!,10!。,采用的方法是,對于10以內(nèi)的每一個自然數(shù)分別求它們的階乘值。其流程圖如圖4.7所示。顯然,這是一個二重循環(huán)結(jié)構(gòu)。,圖4.7 例4.6的流程圖,相應(yīng)的C程序如下: #include “stdio.h“ main() int n,k; double s; for (n1; n10; nn1) s1.0; for (k1; kn; kk1) ss*k; printf(“%2d!%16.7fn “,n,s); ,4.3.2 break 語句 C語言中的break語句有以下兩個功能: (1)跳出 switch 結(jié)構(gòu); (2)退出當(dāng)前循環(huán)結(jié)構(gòu),包括 while 結(jié)構(gòu)、 dowhile 結(jié)構(gòu)和for循環(huán)結(jié)構(gòu)。,4.3.3 continue 語句 continue語句的功能是結(jié)束本次循環(huán)的執(zhí)行,但不退出循環(huán)結(jié)構(gòu)。 下面舉兩個例子來說明continue語句的使用。,例4.10 輸出100200之間所有能被7或9整除的自然數(shù)。 相應(yīng)的C程序如下: #include “stdio.h“ main() int n; for (n100; n200; nn1) if (n%7!0)&(n%9!0) continue; /*結(jié)束本次循環(huán),繼續(xù)進(jìn)行下次循環(huán)*/ printf(“%d n“,n); ,實際上,上述程序等價于 #include “stdio.h“ main() int n; for (n100; n200; nn1) if (n%70) | | (n%90) printf(“%d n“,n); ,4.4 程序舉例,4.4.1 列舉算法 所謂列舉算法,是指根據(jù)提出的問題,列舉所有可能的情況,并根據(jù)條件檢驗?zāi)男┦切枰?,哪些是不需要的?返回目錄,例4.11 某單位要在A,B,C,D,E,F(xiàn) 6人中選派若干人去執(zhí)行一項任務(wù),選人的條件如下: (1)若C不去,則B也不去; (2)C和D兩人中去一個; (3)D和E要么都去,要么都不去; (4)A,B,F(xiàn) 3人中要去兩個; (5)C和F不能一起去: (6)E和F兩人中至少去一個。 問應(yīng)該選哪幾個人去?,C程序如下: #include “stdio.h“ main() int a,b,c,d,e,f; for (a0; a1; a) for (b0; b1; b) for (c0; c1; c) for (d0; d1; d) for (e0; e1; e) for (f0; f1; f),if (bc0 | | c1) & (cd1) & (de0 | | de2) & (abf2) & (cf!2) & (ef1) printf(“A will %s be assigned.n“,a?“: “not“); printf(“B will %s be assigned.n“,b?“: “not“); printf(“C will %s be assigned.n“,c?“: “not“); printf(“D will %s be assigned.n“,d?“: “not“); printf(“E will %s be assigned.n“,e?“: “not“); printf(“F will %s be assigned.n“,f?“: “not“); ,4.4.2 密碼問題 在報文通信中,為使報文保密,發(fā)報人往往要按一定規(guī)律將其加密,收報人再按約定的規(guī)律將其解密(即將其譯回原文)。,例4.13 從鍵盤輸入一行字符,將其中的英文字母進(jìn)行加密輸出(非英文字母不用加密)。 C程序如下: #include “stdio.h“ main() char c; int k; printf(“input k:“); scanf(“%d“,&k); scanf(“%c“,&c); /*吃掉上次輸入的回車符*/ cgetchar(); while(c!n) if (ca & cz) | | (cA & cZ) cck; if (cz | | (cZ & cZk) cc26; printf(“%c“,c); cgetchar(); ,4.4.3 對分法求方程實根 設(shè)非線性方程為 f (x)0 用對分法求在區(qū)間a,b上的實根。 具體方法如下: 從區(qū)間端點x0a出發(fā),以h為步長,逐步往后進(jìn)行掃描。 對于每一個被掃描的子區(qū)間xi,xi1(其中xi1xih)作如下處理: 若在子區(qū)間兩個端點上的函數(shù)值f (xi)與f (xi1)同號,則說明在該子區(qū)間上沒有實根,將掃描下一個子區(qū)間;否則說明在該子區(qū)間上至少有一個實根。此時就可以在該子區(qū)間上采用對分法進(jìn)一步搜索實根。,對分法的基本過程如下: 取子區(qū)間xi,xi1的中點 如果f(x)與f(xi)同號,則令xix;否則令xi1x。 然后重復(fù)這個過程,直到滿足條件 為止。其中為事先給定的精度要求。,圖4.9 對分法求方程實根的流程圖,對分法求方程實根的流程圖如圖4.9所示。,例4.15 用對分法求方程 f (x)x26x10 在區(qū)間10,10上的實根,即A10,B10。取掃描步長H0.1,精度要求 。,相應(yīng)的C程序如下: #include “stdio.h“ main() int flag; double a10.0,b10.0,h0.1,x1,y1,x2,y2,x,y; x1a;y1x1*x16*x11.0; x2x1h;y2x2*x26*x21.0; while (x1b) if (y1*y20.0) x1x2;y1y2;x2x1h;y2x2*x26*x21.0; else flag0; while (flag0) x(x1x2)/2; if (fabs(x2x1)0.000001) printf(“x%11.7fn“,x); x1x0.5*h;y1x1*x16*x11.0; x2x1h;y2x2*x26*x21.0; flag1; ,else yx*x6*x1.0; if (y1*y0.0) x2x;y2y; else x1x;y1y; ,4.4.4 迭代法求方程實根 設(shè)非線性方程為 f (x)0 用迭代法求一個實根的基本方法如下: 首先將方程 f (x)0 改寫成便于迭代的格式 x(x) 然后初步估計方程實根的一個初值x0,作如下迭代: ,n0,1,2, 直到滿足條件 | | 或者迭代了足夠多的次數(shù)還不滿足這個條件為止。其中為事先給定的精度要求。,反映上述過程的流程圖如圖4.10所示。,圖4.10 迭代法求方程實根流程圖,例4.16 求非線性方程x1arctanx0 的一個實根。取初值x01.0,精度要求0.000001。并改寫成如下迭代格式:,相應(yīng)的C程序如下: #include “stdio.h“ #include “math.h“ main() int m; double x1.0,eps0.000001,x0; printf(“input m:“); scanf(“%d“,&m); /*輸入最大迭代次數(shù)*/ do x0x;x1.0atan(x0);mm1; while (m!0)&(fabs(xx0)eps); if (m0) printf(“FAIL!n “); else printf(“x%11.fn“,x); ,4.4.5 牛頓法求方程實根 設(shè)非線性方程為 f (x)0 在選取一個初值x0后,牛頓迭代格式為 實際上牛頓迭代格式是一種特殊的簡單迭代格式,相當(dāng)于 上述迭代過程一直進(jìn)行到滿足條件 | | 或者迭代了足夠多的次數(shù)還不滿足這個條件為止。其中為事先給定的精度要求。,反映上述過程的流程圖如圖4.11所示。,圖4.11 牛頓法求方程實根流程圖,例4.17 求非線性方程x1cosx0的一個實根。取初值x01.0,精度要求0.000001。其牛頓迭代格式為 其中f (xn)xn1cos xn,f (xn)1sin xn。,相應(yīng)的C程序如下: #include “stdio.h“ #include “math.h“ main() int m; double x1.0,eps0.000001,x0; printf(“input m:“); scanf(“%d“,&m); /*輸入最大迭代次數(shù)*/ do x0x;xx0(x01cos(x0)/(1.0sin(x0);mm1; while (m!0)&(fabs(xx0)eps); if (m0) printf(“FAIL!n “); else printf(“x%11.fn“,x); ,4.4.6 梯形法求定積分 設(shè)定積分為 由微積分的知識可以知道,該積分值的幾何意義是在區(qū)間a,b內(nèi)的曲線f (x)下的面積,如圖4.12所示。,圖4.12 定積分幾何意義,梯形法求定積分的基本思想是: 首先將積分區(qū)間a,bn等分,得到n個子區(qū)間xi, xi1(i0,1,2,n1),每一個子區(qū)間的長度為h(ba)/n,如圖4.12所示,其中xiaih。 然后在每一個子區(qū)間上用梯形的面積 來近似代替該子區(qū)間上小長條的面積。 最后將所有小長條的面積近似值Si累加就可得到積分值的近似值。即 S
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煉鐵工藝中的全過程信息管理與優(yōu)化考核試卷
- 電力施工項目質(zhì)量驗收標(biāo)準(zhǔn)考核試卷
- 絹紡和絲織的產(chǎn)業(yè)人才培養(yǎng)與激勵機(jī)制考核試卷
- 幼兒園小學(xué)防拐騙安全教育
- 社區(qū)康復(fù)護(hù)理與功能訓(xùn)練考核試卷
- 品質(zhì)清單管理
- 急救護(hù)理學(xué):中暑的預(yù)防與急救
- 航空餐食搭配與設(shè)計指南
- 八年級勞動教育實踐與探索
- 甲減的治療及護(hù)理
- 病例分型標(biāo)準(zhǔn)
- LongleyRice無線電波傳輸模型
- 幕墻工程重要環(huán)境因素及采取的措施方案
- 我的家鄉(xiāng)煙臺課件
- 二級板式換熱器熱網(wǎng)疏水回收的優(yōu)勢
- 2021屆高考英語887核心詞(打印、詞頻、出處、例句、背誦)
- 國外幾家氣壓盤式制動器的比較
- 培養(yǎng)初中學(xué)生的數(shù)學(xué)閱讀理解能力
- 卒中相關(guān)肺炎的指南解讀
- 六下統(tǒng)編版復(fù)習(xí)2形近字
- 硒知識科普手冊
評論
0/150
提交評論