3(循環(huán)結構).ppt_第1頁
3(循環(huán)結構).ppt_第2頁
3(循環(huán)結構).ppt_第3頁
3(循環(huán)結構).ppt_第4頁
3(循環(huán)結構).ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 循環(huán)結構程序設計,順序結構 選擇(分支)結構 循環(huán)結構,一段有限時間內去做一件或一系列有規(guī)律的重復性事情循環(huán)。,#include #include void main() float a,b,c,s,area; printf(請輸入三角形的三條邊 a,b,c:); scanf(%f,%f,%f, ,4.1 引例,實現(xiàn)求三角形面積題目的交互反復運行。,while(a!=0|b!=0|c!=0) ,scanf(%f,%f,%f,4.1 引例,例4-2 一行打印60個*,程序代碼: include void main() int i; i=1; while(i=60) /*重復輸出*60次循

2、環(huán)*/ printf(“*”); i+;/*作用同前例中的scanf,使循環(huán)能結束*/ printf(“n”); ,循環(huán)結構的組成:循環(huán)條件和循環(huán)體,一段有限時間內去做一件或一系列有規(guī)律的重復性事情循環(huán)。,C 語言提供了while、do-while和 for 三種循環(huán)語句,例:4-2 計算 1+2+3+ . . +100 。(用 while ) P47,設:n為數(shù)列項變量和循環(huán)控制變量,snm為累加和變量 。,#include void main( ) int n, sum; n=1; /為循環(huán)計數(shù)變量賦初值。 sum=0; while (n100時,循環(huán)結束。 sum=sum+n; n+;

3、/n+為使循環(huán)結束的語句。 printf(“sum=%d n”,sum); ,sum=385,練習4-2:計算12+22+102。,1)while語句的循環(huán)體中一定要有使循環(huán)結束的語句,否則一旦進入循環(huán),循環(huán)永不結束,出現(xiàn)“死循環(huán)”。 編程時應避免出現(xiàn)這些情況。 2)while(1),條件永遠為真“死循環(huán)”。 3)while語句的作用范圍。循環(huán)體如果包含一個以上的語句,應該用花括號括起來,否則while循環(huán)體的作用范圍只到while后面的第一個分號處。 4)”;”的問題,使用while循環(huán)注意: P46,程序循環(huán)與否取決于循環(huán)條件判斷表達式值的真與假,真循環(huán),假不循環(huán)。,必須樹立的概念:,wh

4、ile(a1) ; a+; ,采用窮舉法求解 #include void main() int i=300,sum=0;/*設循環(huán)控制變量初值為300 */ while(i=800)/*循環(huán)條件;小于800*/ if ( i % 7 = 0) /*尋找7的倍數(shù),進行篩選*/ sum=sum+i;/*循環(huán)主體:累加求和*/ i=i+1;/*修改循環(huán)變量*/ printf(“sum=%dn”,sum); ,例4-3 求300800之間7的倍數(shù)和 P48,練習4-1:求100以內奇數(shù)的倒數(shù)和;,例4-6 依次輸入一批正數(shù),并求正數(shù)之和,當輸入負數(shù)或0時結束 (用do-while) P49,#incl

5、ude void main() float x,sum; sum=0.0; scanf(“%f”, ,1、do-while循環(huán)語句中,while(e)之后的分號不要忘寫。 2、do-while循環(huán)語句中,不管循環(huán)體是否為單一語句,習慣上都用花括號把它括起來,并把while(e)直接寫在“”的后面,以免把while(e)部分誤認為一個新的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;/*求符號位s,正負號變化 */ t=s*1/n;/

6、*求一個數(shù)列項的值t */ pi=pi+t; /*累加t */ while(fabs(t)=1e-6); /* fabs(t)絕對值函數(shù)*/ pi=pi*4; printf(“pi=%fn”,pi); ,例4-7:利用公式如下公式求的近似值,直到最后一項的絕對值小于10-6為止。 P49,for語句是比 while 語句功能更強而且更加靈活的一種循環(huán)結構。,4.4. for 循環(huán)語句,e1:循環(huán)變量賦初值 e2:循環(huán)條件判斷 e3:改變循環(huán)變量值,例:4-2 計算 1+2+3+ . . +100 。(用for) P51,#include void main( ) int n, sum; sum

7、=0; for(n=1;n100時,循環(huán)結束。 sum=sum+n; n+; /n+為使循環(huán)結束的語句。 printf(“sum=%d n”,sum); ,1.e1、e2、e3三個表達式均可省略,但其中的分號“ ; ”不能省略。 此時, 完全等同于 while ( 1 ),無終止地執(zhí)行循環(huán)體。,for ( ; ; ) . s ; ,2.只省略表達式e2,即 for ( e1; ; e3 ),省略循環(huán)判斷的條件,也將無終止地執(zhí)行循環(huán)體。 3.如果只有表達式e2,即 for ( ; e2 ; ),則完全等同于 while (e) 語句。,注意,規(guī)則是: 當n=1或n=2時,F(xiàn)(n)=1; 當n2時

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項,(它是意大利數(shù)學家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ù)學上的遞推數(shù)列問題(由遞推關系和初始條件確定的數(shù)列)迭代的過程。,C 語言的三種循環(huán)語句都可以相互嵌套,并且被嵌入的循環(huán)又可以嵌套循環(huán),稱之為多重循環(huán)。 循環(huán)嵌套的原則:被嵌套的一定是一個完整的循環(huán)結構,即兩個循環(huán)結構不能相互交叉。,4.5 循環(huán)嵌套(多重循環(huán)),循環(huán)嵌套的執(zhí)行過程:,例:打?。?,1)(9,9)所構成的矩形區(qū)域中的每個整數(shù)坐標點對應的坐標。,注意: 嵌套循環(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); ,練習: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 ,改錯: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)語句計算 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)語句計算 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),都是根據循環(huán)判斷表達式為0時來控制循環(huán)結束,這種結束是正規(guī)結束。 在實際應用中,有時還要求在循環(huán)的中途退出循環(huán),這是一種非正規(guī)的循環(huán)退出可以用break 、continue語句實現(xiàn)。,4.6 break 、continue 語句,功能:退出當前循環(huán)或當前switch結構,不能用于其他語句。 作用:跳出當前的循環(huán)或switch語句轉向它們

13、之后的語句執(zhí)行。,1) break 語句,注意: 若break語句處于多重循環(huán)中,break語句只是跳出當前層循環(huán)。,例4-12 韓信點兵:韓信有一隊兵,他想知道有多少人,便讓士兵排隊報數(shù):按從1至5報數(shù),最末一個士兵報的數(shù)為1;按從1至6報數(shù),最末一個士兵報的數(shù)為5;按從1至7報數(shù),最末一個士兵報的數(shù)為4;最后再按從1至11報數(shù),最末一個士兵報的數(shù)為10。下面程序的主要功能是計算韓信至少有多少兵。 P56,程序代碼: #include void main( ) int x; for (x=1; ; x+) if (x%5=1 ,例4-13:編一個程序,判斷一個數(shù)m是否為素數(shù)。 P57,分析:

14、素數(shù)就是只能被1和它們自身整除的數(shù)。判斷一個數(shù)是不是素數(shù),是用此數(shù)之前的所有數(shù)來試除,看其是否能被整除,如果都不能被整除,則認為該數(shù)是素數(shù),否則不是素數(shù)。,#include main( ) int i,k; scanf(“%d”, ,例:編程,求出2和100之間的素數(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,功能: 結束本次循環(huán)。只適用于循環(huán)語句。不能用于switch及其它語句。 作用:結束本次循環(huán)轉向下一次循環(huán)條件的判斷。如果循環(huán)條件的判斷結果為真,則繼續(xù)循環(huán),否則結束循環(huán)。,2) continue語句,例9 :編一個程序。求輸入的10個數(shù)中正數(shù)的個數(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結束本次循環(huán),轉向下一次循環(huán)條件的判斷,判斷結果為真,則繼續(xù)下一次循

16、環(huán);判斷結果為假,則結束循環(huán)。 break是結束整個當前層循環(huán)結構,跳出循環(huán)體,不再進行循環(huán)條件的判斷。,scanf(“%f”, ,goto語句是一個無條件轉向語句。 功能:將程序轉移到指定的位置繼續(xù)執(zhí)行。 格式:goto 語句標號;,4.7 goto語句,語句標號:語句標號是一個標識符,它標識程序的一個特定位置。,不能用整數(shù)做標號,4.8 循環(huán)應用,例4-15 求兩個非負整數(shù)的最大公約數(shù)。,分析: 1.一般方法(略) 2.采用相除取余的迭代算法。 已知:兩正整數(shù) x、y,兩數(shù)的余數(shù)為 r,若設gcd()為求公約數(shù)函數(shù) 根據數(shù)學原理,則有: gcd(x,y)=gcd(y,r) 如此反復迭代,直

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 牛頓迭代法(切線法),用曲線弧一端的切線來代替曲線弧,從而求出方程實根的近似值的方法。,牛頓迭代公式: 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);/輸出中間結果 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 用等距梯形法計算定積分 ,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 生成兩個(09)的隨機數(shù),完成兩個隨機數(shù)的算術四則運算,#include #include #include void main() char op; int a=1,b=2,c; srand

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論