版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),順序結(jié)構(gòu) 選擇(分支)結(jié)構(gòu) 循環(huán)結(jié)構(gòu),一段有限時(shí)間內(nèi)去做一件或一系列有規(guī)律的重復(fù)性事情循環(huán)。,#include #include void main() float a,b,c,s,area; printf(請(qǐng)輸入三角形的三條邊 a,b,c:); scanf(%f,%f,%f, ,4.1 引例,實(shí)現(xiàn)求三角形面積題目的交互反復(fù)運(yùn)行。,while(a!=0|b!=0|c!=0) ,scanf(%f,%f,%f,4.1 引例,例4-2 一行打印60個(gè)*,程序代碼: include void main() int i; i=1; while(i=60) /*重復(fù)輸出*60次循
2、環(huán)*/ printf(“*”); i+;/*作用同前例中的scanf,使循環(huán)能結(jié)束*/ printf(“n”); ,循環(huán)結(jié)構(gòu)的組成:循環(huán)條件和循環(huán)體,一段有限時(shí)間內(nèi)去做一件或一系列有規(guī)律的重復(fù)性事情循環(huán)。,C 語言提供了while、do-while和 for 三種循環(huán)語句,例:4-2 計(jì)算 1+2+3+ . . +100 。(用 while ) P47,設(shè):n為數(shù)列項(xiàng)變量和循環(huán)控制變量,snm為累加和變量 。,#include void main( ) int n, sum; n=1; /為循環(huán)計(jì)數(shù)變量賦初值。 sum=0; while (n100時(shí),循環(huán)結(jié)束。 sum=sum+n; n+;
3、/n+為使循環(huán)結(jié)束的語句。 printf(“sum=%d n”,sum); ,sum=385,練習(xí)4-2:計(jì)算12+22+102。,1)while語句的循環(huán)體中一定要有使循環(huán)結(jié)束的語句,否則一旦進(jìn)入循環(huán),循環(huán)永不結(jié)束,出現(xiàn)“死循環(huán)”。 編程時(shí)應(yīng)避免出現(xiàn)這些情況。 2)while(1),條件永遠(yuǎn)為真“死循環(huán)”。 3)while語句的作用范圍。循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括號(hào)括起來,否則while循環(huán)體的作用范圍只到while后面的第一個(gè)分號(hào)處。 4)”;”的問題,使用while循環(huán)注意: P46,程序循環(huán)與否取決于循環(huán)條件判斷表達(dá)式值的真與假,真循環(huán),假不循環(huán)。,必須樹立的概念:,wh
4、ile(a1) ; a+; ,采用窮舉法求解 #include void main() int i=300,sum=0;/*設(shè)循環(huán)控制變量初值為300 */ while(i=800)/*循環(huán)條件;小于800*/ if ( i % 7 = 0) /*尋找7的倍數(shù),進(jìn)行篩選*/ sum=sum+i;/*循環(huán)主體:累加求和*/ i=i+1;/*修改循環(huán)變量*/ printf(“sum=%dn”,sum); ,例4-3 求300800之間7的倍數(shù)和 P48,練習(xí)4-1:求100以內(nèi)奇數(shù)的倒數(shù)和;,例4-6 依次輸入一批正數(shù),并求正數(shù)之和,當(dāng)輸入負(fù)數(shù)或0時(shí)結(jié)束 (用do-while) P49,#incl
5、ude void main() float x,sum; sum=0.0; scanf(“%f”, ,1、do-while循環(huán)語句中,while(e)之后的分號(hào)不要忘寫。 2、do-while循環(huán)語句中,不管循環(huán)體是否為單一語句,習(xí)慣上都用花括號(hào)把它括起來,并把while(e)直接寫在“”的后面,以免把while(e)部分誤認(rèn)為一個(gè)新的while循環(huán)的開始。,注意:,#include #include void main( ) float n, s, t, pi; t=1; pi=1; n=1.0; s=1; do n=n+2; s= -s;/*求符號(hào)位s,正負(fù)號(hào)變化 */ t=s*1/n;/
6、*求一個(gè)數(shù)列項(xiàng)的值t */ pi=pi+t; /*累加t */ while(fabs(t)=1e-6); /* fabs(t)絕對(duì)值函數(shù)*/ pi=pi*4; printf(“pi=%fn”,pi); ,例4-7:利用公式如下公式求的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。 P49,for語句是比 while 語句功能更強(qiáng)而且更加靈活的一種循環(huán)結(jié)構(gòu)。,4.4. for 循環(huán)語句,e1:循環(huán)變量賦初值 e2:循環(huán)條件判斷 e3:改變循環(huán)變量值,例:4-2 計(jì)算 1+2+3+ . . +100 。(用for) P51,#include void main( ) int n, sum; sum
7、=0; for(n=1;n100時(shí),循環(huán)結(jié)束。 sum=sum+n; n+; /n+為使循環(huán)結(jié)束的語句。 printf(“sum=%d n”,sum); ,1.e1、e2、e3三個(gè)表達(dá)式均可省略,但其中的分號(hào)“ ; ”不能省略。 此時(shí), 完全等同于 while ( 1 ),無終止地執(zhí)行循環(huán)體。,for ( ; ; ) . s ; ,2.只省略表達(dá)式e2,即 for ( e1; ; e3 ),省略循環(huán)判斷的條件,也將無終止地執(zhí)行循環(huán)體。 3.如果只有表達(dá)式e2,即 for ( ; e2 ; ),則完全等同于 while (e) 語句。,注意,規(guī)則是: 當(dāng)n=1或n=2時(shí),F(xiàn)(n)=1; 當(dāng)n2時(shí)
8、,F(n)=F(n-1)+F(n-2) 即: n=1, F(1)=1; n=2, F(2)=1; n=3, F(3)=F(2)+f(1)=2; n=4, F(4)=F(3)+F(2)=3; . . n2, F(n)=F(n-1)+F(n-2)。,例4-8 Fibonacci(斐波納契)數(shù)列問題:編寫程序,打印其前20項(xiàng),(它是意大利數(shù)學(xué)家Fibonacci提出的)。 P52,#include “stdio.h” main( ) int n, f1=1,f2=1,f3; printf(“%10d%10d”,f1,f2); for(n=3;n=20;n+) f3=f1+f2; printf(“%1
9、0d”,f3); f1=f2; f2=f3; ,迭代問題:用循環(huán)來解決數(shù)學(xué)上的遞推數(shù)列問題(由遞推關(guān)系和初始條件確定的數(shù)列)迭代的過程。,C 語言的三種循環(huán)語句都可以相互嵌套,并且被嵌入的循環(huán)又可以嵌套循環(huán),稱之為多重循環(huán)。 循環(huán)嵌套的原則:被嵌套的一定是一個(gè)完整的循環(huán)結(jié)構(gòu),即兩個(gè)循環(huán)結(jié)構(gòu)不能相互交叉。,4.5 循環(huán)嵌套(多重循環(huán)),循環(huán)嵌套的執(zhí)行過程:,例:打?。?,1)(9,9)所構(gòu)成的矩形區(qū)域中的每個(gè)整數(shù)坐標(biāo)點(diǎn)對(duì)應(yīng)的坐標(biāo)。,注意: 嵌套循環(huán)的循環(huán)控制變量不可同名, 并列循環(huán)的循環(huán)控制變量可以同名;,#include main() int i,j; for(i=1;i=9;i+) for(
10、j=1;j=9;j+) printf(%d,%d),i,j); printf(n); ,練習(xí):99乘法表(矩形、三角陣),例4-11:百錢買百雞問題:公雞1只5元,母雞1只3元,小雞3只1元。(窮舉法) P55,main()/*法二*/ int x,y,z; for (x=0;x=20;x+) for (y=0;y=33;y+) z=100-x-y; if (15*x+9*y+z=300) printf(%d %d %dn,x,y,z); ,main()/*法一*/ int x,y,z; for (x=0;x=100;x+) for (y=0;y=100;y+) for (z=0;z=100;
11、z+) if (x+y+z=100 ,改錯(cuò):x+y+z=100 int n=20,m,i; for(i=1;i=n;i+) t=1; for(m=1;m=i;m+) t*=m; s+=t; printf(“1!+2!+3!+.+n!=%en”,s); ,例 :用for循環(huán)語句計(jì)算 1! + 2! + 3! +.+ n! 。,n 循環(huán)控制變量;s 為累加和變量;t 為階乘變量。,1!+2!+3!+.+n!=2.56133e+018,main( ) float t=1,s=0; int n=20,i; for(i=1;i=n;i+) t*=i; s+=t; printf(“1!+2!+3!+.+n
12、!=%en”,s); ,例4-9 :用for循環(huán)語句計(jì)算 1! + 2! + 3! +.+ n! 。 P53,n 循環(huán)控制變量;s 為累加和變量;t 為階乘變量。,for(s=0, t=1 , i=1;i=n;i+) t*=i; s+=t; ,C語言的三種循環(huán),都是根據(jù)循環(huán)判斷表達(dá)式為0時(shí)來控制循環(huán)結(jié)束,這種結(jié)束是正規(guī)結(jié)束。 在實(shí)際應(yīng)用中,有時(shí)還要求在循環(huán)的中途退出循環(huán),這是一種非正規(guī)的循環(huán)退出可以用break 、continue語句實(shí)現(xiàn)。,4.6 break 、continue 語句,功能:退出當(dāng)前循環(huán)或當(dāng)前switch結(jié)構(gòu),不能用于其他語句。 作用:跳出當(dāng)前的循環(huán)或switch語句轉(zhuǎn)向它們
13、之后的語句執(zhí)行。,1) break 語句,注意: 若break語句處于多重循環(huán)中,break語句只是跳出當(dāng)前層循環(huán)。,例4-12 韓信點(diǎn)兵:韓信有一隊(duì)兵,他想知道有多少人,便讓士兵排隊(duì)報(bào)數(shù):按從1至5報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為1;按從1至6報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為5;按從1至7報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為4;最后再按從1至11報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為10。下面程序的主要功能是計(jì)算韓信至少有多少兵。 P56,程序代碼: #include void main( ) int x; for (x=1; ; x+) if (x%5=1 ,例4-13:編一個(gè)程序,判斷一個(gè)數(shù)m是否為素?cái)?shù)。 P57,分析:
14、素?cái)?shù)就是只能被1和它們自身整除的數(shù)。判斷一個(gè)數(shù)是不是素?cái)?shù),是用此數(shù)之前的所有數(shù)來試除,看其是否能被整除,如果都不能被整除,則認(rèn)為該數(shù)是素?cái)?shù),否則不是素?cái)?shù)。,#include main( ) int i,k; scanf(“%d”, ,例:編程,求出2和100之間的素?cái)?shù)。,#include main( ) int i,k; for(k=3;k=100;k+) for(i=2;ik;i+) if(k%i=0) break; if(i=k) printf(“%d”,k); ,3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83
15、89 97,功能: 結(jié)束本次循環(huán)。只適用于循環(huán)語句。不能用于switch及其它語句。 作用:結(jié)束本次循環(huán)轉(zhuǎn)向下一次循環(huán)條件的判斷。如果循環(huán)條件的判斷結(jié)果為真,則繼續(xù)循環(huán),否則結(jié)束循環(huán)。,2) continue語句,例9 :編一個(gè)程序。求輸入的10個(gè)數(shù)中正數(shù)的個(gè)數(shù)及平均值。 P58,main( ) int i,n=0; float sum=0,f; printf(“Enter a real number:n ”); for(i=1;i=10;i+) scanf(“%f”, ,continue與break的區(qū)別: continue結(jié)束本次循環(huán),轉(zhuǎn)向下一次循環(huán)條件的判斷,判斷結(jié)果為真,則繼續(xù)下一次循
16、環(huán);判斷結(jié)果為假,則結(jié)束循環(huán)。 break是結(jié)束整個(gè)當(dāng)前層循環(huán)結(jié)構(gòu),跳出循環(huán)體,不再進(jìn)行循環(huán)條件的判斷。,scanf(“%f”, ,goto語句是一個(gè)無條件轉(zhuǎn)向語句。 功能:將程序轉(zhuǎn)移到指定的位置繼續(xù)執(zhí)行。 格式:goto 語句標(biāo)號(hào);,4.7 goto語句,語句標(biāo)號(hào):語句標(biāo)號(hào)是一個(gè)標(biāo)識(shí)符,它標(biāo)識(shí)程序的一個(gè)特定位置。,不能用整數(shù)做標(biāo)號(hào),4.8 循環(huán)應(yīng)用,例4-15 求兩個(gè)非負(fù)整數(shù)的最大公約數(shù)。,分析: 1.一般方法(略) 2.采用相除取余的迭代算法。 已知:兩正整數(shù) x、y,兩數(shù)的余數(shù)為 r,若設(shè)gcd()為求公約數(shù)函數(shù) 根據(jù)數(shù)學(xué)原理,則有: gcd(x,y)=gcd(y,r) 如此反復(fù)迭代,直
17、到第r為0,y即為最大公約數(shù)。 例如: (24,9)= (9,6)= (6,3)= (3,0)=3,#include void main() int x, y, r; scanf(“%d%d”, ,由此,可繼續(xù)求出最小公倍數(shù):x*y/最大公約數(shù),程序代碼:,例4-16 牛頓迭代法(切線法),用曲線弧一端的切線來代替曲線弧,從而求出方程實(shí)根的近似值的方法。,牛頓迭代公式: f(x0)=(0-f(x0)/(x1-x0) x1=x0-f(x0)/f(x0),例4-16 用牛頓迭代法求下面方程在1.5 附近的根。2x3-4x2+3x-6=0。精度為1e-5,#include #include main
18、() float x,x0,f,f1; x=1.5; do x0=x; f=(2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x=x0-f/f1; printf(“%fn”,x);/輸出中間結(jié)果 while(fabs(x-x0)1e-5); printf(The root of equation is %5.2fn,x); ,分析: Ai = (f (xi)+f (xi + h )/2 *h AREA =,例4-18 用等距梯形法計(jì)算定積分 ,f (x) = x2 +12x +4,x 的取值范圍是1,4。,程序代碼: #include void main() float x,a,b, h,f1,f2,area; int i,n; scanf(“%f%f%d”, ,例4-19 生成兩個(gè)(09)的隨機(jī)數(shù),完成兩個(gè)隨機(jī)數(shù)的算術(shù)四則運(yùn)算,#include #include #include void main() char op; int a=1,b=2,c; srand
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年裝修公司工程款支付合同
- 家禽生理基礎(chǔ)知識(shí)課件
- 2026屆新高考英語沖刺復(fù)習(xí)過去完成時(shí)
- 2023企業(yè)文化年度峰會(huì)-孫兵:讓企業(yè)文化有用的關(guān)鍵舉措
- 新入廠安全培訓(xùn)內(nèi)容
- 圣馬丁介紹課件
- 隨機(jī)事件與概率 同步練習(xí)(含答案)
- 周口市課件介紹
- 統(tǒng)編版語文三年級(jí)下冊(cè)第二單元預(yù)習(xí)資料 知識(shí)清單
- 化工安全技術(shù)培訓(xùn)中心課件
- 北京市2025-2026學(xué)年高二(上)期末物理適應(yīng)卷C(含答案)
- 2026年黑龍江高職單招考試高考語文試卷試題(含答案)
- 完整版老舊小區(qū)改造工程施工組織設(shè)計(jì)方案
- 全球隱球菌病指南(2024版):診斷與管理課件
- 市場(chǎng)營銷策劃實(shí)踐實(shí)習(xí)報(bào)告范例
- 2026年中央廣播電視總臺(tái)招聘124人備考筆試題庫及答案解析
- 擔(dān)保取消協(xié)議書
- 2025國家統(tǒng)計(jì)局濱海新區(qū)調(diào)查隊(duì)輔助調(diào)查員招聘3人備考筆試試題及答案解析
- 星羅棋布的港口課件
- 2025天津市機(jī)電工藝技師學(xué)院招聘派遣制社會(huì)化21人(第二批)考試題庫附答案
- 統(tǒng)一頂新食品成品倉庫管理的手冊(cè)
評(píng)論
0/150
提交評(píng)論