程序設計基礎:ch04 循環(huán)程序設計_第1頁
程序設計基礎:ch04 循環(huán)程序設計_第2頁
程序設計基礎:ch04 循環(huán)程序設計_第3頁
程序設計基礎:ch04 循環(huán)程序設計_第4頁
程序設計基礎:ch04 循環(huán)程序設計_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、n循環(huán)程序循環(huán)程序sum=0;k=1;讀入一科成績讀入一科成績 msum =sum+m;k = k+1 ; 開始開始k = n結束結束FT輸出輸出 sum / n運行結果演示運行結果演示這就是循環(huán)程序循環(huán)程序有:先判斷條件的循環(huán)后判斷條件的循環(huán)本程序是后判斷條件的循環(huán)同樣問題還可以描述成先判斷條件的循環(huán)sum=0;k=1;讀入一科成績讀入一科成績 msum =sum+m;k = k+1 ; 開始開始k = n結束結束FT輸出輸出 sum / nnC 有三種不同的重復性語句有三種不同的重復性語句, 它們是它們是 while 語句語句 先判斷條件的循環(huán);先判斷條件的循環(huán); do 語句語句 后判斷條

2、件的循環(huán);后判斷條件的循環(huán); for 語句語句 先判斷條件的循環(huán)。先判斷條件的循環(huán)。n需要弄清楚的需要弄清楚的 循環(huán)控制方式是什么?循環(huán)控制方式是什么? 控制條件是什么?控制條件是什么? 重復執(zhí)行部分(稱為重復執(zhí)行部分(稱為循環(huán)體循環(huán)體)是什么?)是什么?SeTdo-while eS其中: e是條件; S是語句,是要重復執(zhí)行的操作。其含義是:n1) 執(zhí)行語句列Sn2) 計算條件表達式e,n3) 若e的值為true,轉向步驟1)再次執(zhí)行語句S; 否則轉向步驟4)結束循環(huán)。n4)循環(huán)結束,向后執(zhí)行其后繼操作。do-while k=nsum=0;k=1;讀入一科成績讀入一科成績 msum =sum+

3、m;k = k+1 ; 輸出輸出 sum / n開始開始結束結束sum=0;k=1;讀入一科成績讀入一科成績 msum =sum+m;k = k+1 ; 開始開始k = n結束結束FT輸出輸出 sum / nn一般形式一般形式do Swhile ( e );例例4.2 計算數(shù)列的計算數(shù)列的ak=1/(k*(k+1) 的前的前 n 項和項和 sum = 0 ; k = 1 ; do-while k= n結束結束開始開始輸出輸出 sumsum +=1/(k*(k+1);k = k+1#include stdio.hvoid main ( ) int n,k ; float sum ; printf

4、 (please input n :); scanf(%d,&n); sum = 0 ; k = 1 ; do sum + = 1.0/(k*(k+1); k+ ; while ( k 0yy = yy+4開始開始結束結束求求 yy 后第一個閏年后第一個閏年yy 是閏年是閏年輸出輸出yyn= n-1/*PROGRAM find leap year*/#include stdio.hvoid main()int yy,n;printf(please input begin year:);scanf(%d,&yy);printf(please input the number of

5、 the leap year:);scanf(%d,&n);yy=(yy/4+1)*4;doif( (yy%4=0)&(yy%100!=0)|(yy%400=0) )printf(year %dt,yy);n-;yy=yy+4;while(n0);運行結果演示運行結果演示g (x) = 0 x = f (x)等價變換等價變換n采用迭代法方法求解采用迭代法方法求解x=f(x)方程的根方程的根 選定一個選定一個 x的初值的初值 x0 ; 以以 x0 代入右端計算出一個值代入右端計算出一個值 x1=f(x0) 若若 x1 等于等于x0 ,顯然,顯然 x0 為根,轉向為根,轉向 否則若

6、否則若 x1x0 則令則令 x0=x1 ,轉向,轉向 結束,停止計算結束,停止計算f (x)y=xf (x0)x0 x1f (x1)x*x2可以使用簡單迭代的情況可以使用簡單迭代的情況f (x2)f (x)y=xf (x1)x2x1f (x0)x*x0不可以使用簡單迭代的情況不可以使用簡單迭代的情況f (x2)n簡單迭代方法使用條件簡單迭代方法使用條件 對于方程對于方程xf(x),當任意,當任意x (a, b) 存在存在0 L 1,使,使 |f(x)|L1 則方程則方程x = f(x)在在(a, b)上有唯一的根上有唯一的根x* 且對任意初值且對任意初值x0 (a, b)時時 迭代序列迭代序列

7、xk+1=f (xk) (k = 0, 1, )收斂于收斂于x*n在實際工作中,決大部分計算都是近似計算,只要在實際工作中,決大部分計算都是近似計算,只要求求 X1X0 即即X1 - X0X0 = X1X1 = f(X0)開始開始結束結束#include stdio.h#include math.h#define eps 1e-6void main() float x0,x1; x0=0.0; x1=0.0; do x0=x1; x1=2*x0*x0*x0 +0.5*x0*x0 +0.093; while(fabs(x1-x0)eps); printf(x=%fn,x0);運行結果演示運行結果

8、演示sum=0;k=1;讀入一科成績讀入一科成績 msum =sum+m;k = k+1 ; 開始開始k = n結束結束FT輸出輸出 sum / nsum=0;k=1;讀入一科成績讀入一科成績 msum =sum+m;k = k+1 ; 開始開始k = n結束結束FT輸出輸出 sum / nSeFwhile eS其中: e是條件; S是語句,是要重復執(zhí)行的操作。其含義是:n1) 計算條件表達式e,n2) 若e的值為true,轉向步驟3)繼續(xù)循環(huán); 否則轉向步驟5)結束循環(huán)。n3) 執(zhí)行語句Sn4)轉向步驟1)n5)循環(huán)結束,向后執(zhí)行其后繼操作。n一般形式一般形式while ( e ) S其中:

9、其中: while 是保留字,起引導和分隔作用,是保留字,起引導和分隔作用, 指明此語句是指明此語句是while循環(huán)語句。循環(huán)語句。 e 、S的意義,如上述圖的意義,如上述圖4.11的的PAD。while語句的執(zhí)行過程當然也如上述語句的執(zhí)行過程當然也如上述PAD。 同同do語句一樣,這里也要特別指出,實際應用中,語句語句一樣,這里也要特別指出,實際應用中,語句S往往不是一個簡單的語句,也經(jīng)常是個結構語句。往往不是一個簡單的語句,也經(jīng)常是個結構語句。 while k=nsum=0;k=1;讀入一科成績讀入一科成績 msum =sum+m;k = k+1 ; 輸出輸出 sum / n開始開始結束結

10、束#include #define n 40void main(void) float sum ; int k , m; k1; sum0; while ( k epse=e+r ; 開始開始結束結束r=r*1/n ;n=n+1;#include stdio.h#define eps 1e-5void main( ) int n ; float e,r ; e=1.0; n=1; r=1.0; while ( reps ) e=e+r; n=n+1; r=r/n; printf ( e=%fn,e) ; e=1.0; n=1; r=1.0;e=2.0; n=2; r=0.5;e=2.5; n=

11、3; r=0.1667;e=2.6667; n=4; r=0.0417;.運行結果演示運行結果演示 while num != 100i=0; j=0; k=0;輸出輸出 i,j,k開始開始結束結束輸入一個數(shù)輸入一個數(shù) numi+j+k+num-101輸入一個數(shù)輸入一個數(shù) num運行結果演示運行結果演示 表達式表達式 v+ v+ 是先求表達式的值,后對是先求表達式的值,后對v v加加1 1 。結果表達式。結果表達式的值是對的值是對v v進行加進行加1 1之前的之前的v v值,即值,即v0 v0 。 表達式表達式 +v +v 是先對是先對v v加加1 1 ,后求表達式的值。結果表達式,后求表達式的

12、值。結果表達式的值是對的值是對v v進行加進行加1 1之后的之后的v v值,即值,即v0+1 v0+1 。 “r=1.0”“r=1.0”是循環(huán)控制的初值;是循環(huán)控制的初值;“repsreps”是循環(huán)控制;是循環(huán)控制;“r=r/nr=r/n”是對循環(huán)控制條件的修正。是對循環(huán)控制條件的修正。 由于這種程序模式在程序設計中經(jīng)常出現(xiàn),由于這種程序模式在程序設計中經(jīng)常出現(xiàn),C C為這種程序模為這種程序模式提供一種簡寫形式式提供一種簡寫形式forfor語句語句 sum = 0 ;k = 1 ;while( k=n ) sum = sum + 1.0/(k*(k+1) ; k+ ;sum = 0 ;for

13、( k=1 ; k=n; k+ ) sum = sum + 1.0/(k*(k+1) ;n一般形式一般形式 for ( e1; e2 ; e3) Se1初值表達式初值表達式 用于設置該循環(huán)開始的一些初值用于設置該循環(huán)開始的一些初值e2終值表達式終值表達式 用于控制循環(huán)結束用于控制循環(huán)結束e3增量表達式增量表達式 用于每次循環(huán)體執(zhí)行后對控制條件的修正用于每次循環(huán)體執(zhí)行后對控制條件的修正 語句語句e1e2Se3F結束結束for ( e1 ; e2 ;e3 )S例例4.8 編程序求向量內積。由終端輸入兩個編程序求向量內積。由終端輸入兩個n維向量維向量X,Y. 計算其內積計算其內積XY 。xy = 0

14、 for( i=1;i=n ;i+) scanf(%f%f, &xi, &yi )開始開始結束結束輸出輸出 xy xy = xy + xi*yi運行結果演示運行結果演示 求和程序模式求和程序模式結束?結束?S=0S=S+Tk1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81* 1 2 3 4 5 6 7 8 9 打印前打印前 9 行行打印底行打印底行開始開始結束結束*

15、1 2 3 4 5 6 7 8 9打印底行打印底行打印底行打印底行結束結束 for (i=1;i=9;i+)印印 i印印 *1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81打印前打印前9行行打印前打印前9行行結束結束打印第打印第 i 行行 for (i=1;i=9;i+)打印第打印第i行行6 6 12 18 24 30 369 9 18 27 36 45 54 63 72 81行號行

16、號本行數(shù)值本行數(shù)值打印第打印第i行行結束結束打印行標打印行標 i for(j=1;j=i;j+)打印打印 i*j9 9 18 27 36 45 54 63 72 816 6 12 18 24 30 36打印第打印第i行行6 6 12 18 24 30 369 9 18 27 36 45 54 63 72 81行號行號本行數(shù)值本行數(shù)值打印第打印第i行行結束結束打印行標打印行標 i for(j=1;j=i;j+)打印打印 i*j9 9 18 27 36 45 54 63 72 816 6 12 18 24 30 36打印前打印前 9 行行打印底行打印底行開始開始結束結束 for (i=1;i=9;

17、i+)印印 i印印 *打印第打印第 i 行行 for (i=1;i=9;i+)打印行標打印行標 i for(j=1;j=i;j+)打印打印 i*j#include stdio.hvoid main() int i,j; for(i=1;i10;i+) printf(%4d,i); for(j=1;j=i;j+) printf(%4d,i*j); printf(n); printf(%4c,*); for(i=1;i10;i+) printf(%4d,i);運行結果演示運行結果演示該程序中含有循環(huán)套循環(huán)的結構該程序中含有循環(huán)套循環(huán)的結構各種循環(huán)程序的循環(huán)體都可能是個結構語句。如果一個循環(huán)結各種循

18、環(huán)程序的循環(huán)體都可能是個結構語句。如果一個循環(huán)結構的循環(huán)體仍然是一個循環(huán),便構成循環(huán)嵌套,稱多重循環(huán)。構的循環(huán)體仍然是一個循環(huán),便構成循環(huán)嵌套,稱多重循環(huán)。 for (i=2;i=2;j-)flag = true i%j = 0 for (i=2; i=2; j-)flag = true i % j = 0運行結果演示運行結果演示 解:該問題應該用兩個變量解:該問題應該用兩個變量u u、v v分別保存已經(jīng)生成的兩項,分別保存已經(jīng)生成的兩項,用一個變量用一個變量w w保存當前正生成的一項。然后一項一項的生成,生保存當前正生成的一項。然后一項一項的生成,生成一項輸出一項。在生成一項并輸出之后,要考

19、慮為生成下一成一項輸出一項。在生成一項并輸出之后,要考慮為生成下一項做準備,應該把后邊的項向前串,項做準備,應該把后邊的項向前串, k=20開始開始u=1v=1k=3k=k+1wv+u輸出輸出wu=vv=w結束結束輸出輸出u ,v運行結果演示運行結果演示開始開始結束結束r=vr!=0r=u%vu=vv=r輸出輸出u輸入輸入u、v#include stdio.hvoid main( ) int u,v,r ; printf(pleace input u 、v:); scanf(%d%d,&u,&v); r=v ; while ( r!=0 ) r = u%v ; u = v ; v = r ; printf ( gcd(u,v) = %5dnu );運行結果演示運行結果演示開始開始結束結束輸入輸入NN!=0r=N%10N=N/10S=S+r!輸出輸出SS=0r!PP=1u=rP=P*uu=u+1u=1開始開始結束結束輸入輸入NN!=0r=N%10N=N/10輸出輸出SS=0P=1u=rP=P*uu=u+1u=1S=S+P運行結果演示運行結果演示與求和程序類似,所有計算連乘積的程

溫馨提示

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

評論

0/150

提交評論