五、循環(huán)結構程序設計_第1頁
五、循環(huán)結構程序設計_第2頁
五、循環(huán)結構程序設計_第3頁
五、循環(huán)結構程序設計_第4頁
五、循環(huán)結構程序設計_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、五、循環(huán)結構程序設計5.1 概述5.2 while 循環(huán)結構5.3 do - while 循環(huán)結構5.4 for 循環(huán)結構5.5 無條件控制語句 break, continue, goto 5.6 應用舉例5.1 概述 循環(huán)結構 根據循環(huán)條件決定是否要重復執(zhí)行某一模 塊(循環(huán)體)。 C語言中主要有三種循環(huán)結構: while結構 do-while結構 for結構5.2 while 循環(huán)結構 一般形式 執(zhí)行流程 while ( 表達式表達式 ) 語句語句 ( 循環(huán)體 ) while循環(huán)結構 是一種當型循環(huán)結構語 句表達式0(假)非0(真)【例 3.7】用while循環(huán),把26個大寫字母顯示出來。

2、main ( ) char i = A; while ( i = Z) printf (%c, i ); i+; 打印ii=i+1iZFTi=A例1:統(tǒng)計輸入鍵盤的字符、數(shù)字、空白鍵(空格、回車、制表)及其它字符的個數(shù)。設:nletter 為鍵入字符個數(shù), ndigit 為鍵入數(shù)字個數(shù), nwhite 為鍵入空白鍵個數(shù) (含 、t、 n), nother 為鍵入其它字符個數(shù)。又:中定義EOF為復合鍵 ctrl+z, 將此動作視為鍵入字符的結束。# include main ( ) int nl, nd, nw, no, c; nl= nd = nw = no = 0; while (c=get

3、char( )!= EOF) if (a=c&c=z|A=c&c=Z) nl +; else if (0=c&c=9) nd +; else if (c= |c=t|c=n) nw+; else no+; printf(nletter=%d,ndigit=%dn,nl,nd); printf(nwhite=%d,nother=%dn,nw,no);例2:已知s=1!+2!+3!+n! ,求當s首次超過 2,000,000時的n和s的值main() int n=0;long s=0 ,an=1;while(s2000000) n+; an=an*n;s=s+an; printf(s=%ld n=

4、%dn,s,n);例3:給一個不多于5位的正整數(shù),求出它是幾位數(shù), 并按逆序打印出各個位上的數(shù)字。 (上機題cp32) main() long a; int i=0; printf(Enter a data:n); scanf(%ld,&a); while(a!=0) printf(%d,a%10); a=a/10; i+; printf(n%dn,i);5.3 do - while循環(huán)結構 一般形式 執(zhí)行流程 do 語句語句(循環(huán)體) while (表達式)(表達式); do-while循環(huán)結構 是一種直到型循環(huán)結構表達式語句FT【例 3.11】用do - while 循環(huán),把26個大寫字母

5、按 順序顯示出來main ( ) char i = A; do printf (%c, i ) i +; while ( i=p1);0margorPCp1p2例1:用 公式求 的 近似值,直到余項的首項絕對值小于10-4為止。#include main ( ) float PI=0., m=1., i=1.; int j= -1; do PI=PI+m; i=i+2; m=j/i; j= - j; while (fabs (m)= 0.0001); PI=4*PI; printf(PI=%fn, PI);.71513114int j=1;do PI=PI+j/i; i=i+2; j= - j

6、; while (1/i= 0.0001);例2:求 的部分和。 直到余項的首項的值小于1.0e-4。 有第 n 項 un=xn/n!, 第 n+1 項 un+1= xn+1/(n+1)! 及 un+1 = un(x/(n+1) 程序:main ( ) float x, u=1., s=0.; int n=0; scanf(%f, &x); do s+ = u;u*= x/(n+1); n+; while (u=1.e-4); printf(exp(x)=%fn, s ); .!.! 212nxxxenx5.4 for 循環(huán)結構 一般形式 for (表達式(表達式1;表達式;表達式2;表達式;

7、表達式3) 語句語句(循環(huán)體) 其中: 表達式表達式1 - 初始化表達式??捎脕碓O定循環(huán)控制變 量或循環(huán)體中變量的初始值,可以是逗號表達式逗號表達式。 表達式表達式2 - 循環(huán)條件表達式。其值為邏輯量,為非 0時繼續(xù)循環(huán),為0時循環(huán)終止 表達式表達式3 - 增量表達式。用來對循環(huán)控制變量進行 修正,也可用逗號表達式逗號表達式包含一些本來可放在循環(huán) 體中執(zhí)行的其他表達式 上述表達式可以缺省,但分號不可缺少上述表達式可以缺省,但分號不可缺少 執(zhí)行過程求解表達式1求解表達式3語 句表達式2TF例1:求和 s=sin1+sin2+.+sin50#include math.hmain ( ) int n

8、; float s; for ( s=0., n=1; n=50; n+;) s+=sin(n); printf (s=%fn,s );【例3.20】百錢百雞問題。 公雞5文錢1只, 母雞3文錢1只, 小雞一文錢3只。 100文錢如何賣100只雞?分析:設買 x 只公雞,y 只母雞,z 只小雞,則有: x+y+z=100 5x+3y+z/3=100 隱含條件: x、y、z 都是整數(shù);x20;y33。 用窮舉法窮舉法,即把x、y、x所有可能的各種組合都一 一判斷是否符合上述不定方程組,具體是: 把x可能值020和y可能值033用二重循環(huán)來組合, 每個x和y組合都可得到z值,即z=100-x-y,

9、若x、y、 z值使5x+3y+z/3=100成立,則該組x、y、z即為一 組所求值。main( ) int x, y, z, j=1; printf(Possible solutions to buy 100 fowls whith 100 wen:n); for (x=0; x=20; x+) for (y=0; y=33; y+) z=100-x-y; if (z%3=0&5*x+3*y+z/3=100) printf(%2d:cock=%-2d hen=%-2d chicken=%-2dn, j, x, y, z); j+; 運行結果:Possible solutions to buy

10、100 fowls whith 100 wen: 1: cock=0 hen=25 chicken=75 2: cock=4 hen=18 chicken=78 3: cock=8 hen=11 chicken=81 4: cock=12 hen=4 chicken=84例2:打印出所有的“水仙花數(shù)”。所謂“水仙花 數(shù)”是指一個三位正整數(shù),其各位數(shù)字的立方和 等于該數(shù)本身,例如:153=13+53+33 。 分析: 可用窮舉法窮舉法,即把所有的三位正整數(shù)100999按 題意一一進行判斷,如果一個三位正整數(shù)n的百位、 十位、個位上的數(shù)字分別為i、j、k,則判斷式為: n = i3 + j3 +

11、k3 如何分解三位數(shù)n的百位、十位、個位: 百位:i = n/100; 十位:j = ( n/10 )%10; 個位:k = n%10;#include stdio.hmain() int n,i,j,k; for( n=100; n=999; n+ ) i = n /100; j = ( n / 10 ) % 10 ; k = n % 10 ; if ( n= i*i*i + j*j*j + k*k*k ) printf(%d = %d3 + %d3 + %d3n,n,i,j,k); 運行結果:153 13 + 53 + 33370 33 + 73 + 03371 33 + 73 + 134

12、07 43 + 03 + 73例3:寫出下列程序的輸出結果main() int i,s=0,t=0;for(i=1;i10;i+)switch(i6) case 0: t+=i; break; case 1: s+=i; break; printf(t=%d,s=%dn;t,s);結果:t=30,s=15例4:寫出下列程序的輸出結果#include “stdio.h”main() int n,a,x; char cc=#;scanf(%d, &n); /* n=4*/for(x=0;x0;a-) putchar(cc); for(a=0;an;a+) printf(%c,97+a); prin

13、tf(n); #abcd#abcd#abcdabcd5.5 無條件控制語句5.5.1 break 語句5.5.2 continue 語句5.5.3 goto 語句及其構成的循環(huán)5.5.1 break語句 形式:break; 作用:跳出循環(huán)體, 提前結束循環(huán), 無條件轉移到 循環(huán)結構的下一句繼續(xù)執(zhí)行。 使用場合:只能用在 switch 結構和循環(huán)結構中。 【例3.23】求300330之間的全部素數(shù)。 一個只能被1和自己整除的數(shù)稱為素數(shù)。 決定一個數(shù) 是否是素數(shù),只要讓 被2除到被 除就可以,如果不能被2到 中的任何一個數(shù)整除, 就定 為素數(shù)mmmmm#include math.hmain( )

14、int m, i, k; for(m=301;m=330;m=m+2) k=sqrt(m); for(i=2; ik) printf(%d is a prime numbern, m); 運行結果:307 is a prime number311 is a prime number313 is a prime number317 is a prime number例:閱讀如下程序,寫出運行結果main() int i,s=0; for(i=1;i10) break; printf(i=%d,s=%dn,i,s); 結果:結果:i=3, s=145.5.2 continue 語句 形式:cont

15、inue; 作用:用來結束本次循環(huán)(即跳出循環(huán)體中尚未 執(zhí)行的語句)直接進行循環(huán)條件的判斷 使用場合:用于循環(huán)結構中。 【例3.23】求100150之間和400450之間能被9 整除的數(shù)。main( ) int n; for( n=100; n150&n400) continue; if (n%9=0) printf(%5d, n); printf(n);運行結果:108 117 126 135 144 405 414 423 432 441 450例1:求100200之間的不能被3整除的數(shù)main() int n; for(n=100;n=200;n+) if(n%3=0) continue

16、; printf(%dn,n); 例2:閱讀如下程序,寫出運行結果main( ) int i, s=0, n=0; for( i=1; i10; i+) if( i%2=0 | i%3=0) continue; n+; s+=i; printf(n=%d, s=%dn, n, s);結果:n=3,s=135.5.3 goto語句及其構成的循環(huán) 形式: goto 語句標號語句標號; 其中語句標號用標識符表示。 與goto語句相對應,程序中必有一個帶語 句標號的語句,形式為: 語句標號:語句語句標號:語句 作用: 程序無條件地轉移到具有該語句標號的語 句上繼續(xù)執(zhí)行。 說明: goto語句不是一個必

17、要的語句; 與if結構配合構成條件轉移或循環(huán)。【例3.25】求1100間的奇數(shù)和,即求1+3+5+99main() int i=1,sum=0; loop: sum=sum+i; i=i+2; if(i100) goto loop; printf(sum=%dn,sum);運行結果:sum=2500for (i=1;i1) a=2*(a+1); i-; printf(a=%dn,a);運行結果:a=1534main() /*用for循環(huán)*/ int i,a; for(i=10,a=1;i1;i-) a=2*(a+1); printf(a=%dn,a);【例3.28】求兩整數(shù)的最大公約數(shù)和最小公

18、倍數(shù)。求最大公約數(shù)算法求最大公約數(shù)算法: 有兩整數(shù)a和b: a%b得余數(shù)c 若c=0,則b即為兩數(shù)的最大公約數(shù) 若c0,則a=b,b=c,再回去執(zhí)行 例如求27和15的最大公約數(shù)過程為: 2715 余 12 1512 余 3 123 余 0 因此,3即為最大公約數(shù)求最小公倍數(shù)算法求最小公倍數(shù)算法: 最小公倍數(shù)=兩整數(shù)的乘積最大公約數(shù)main() int m,n,a,b,t,c; prinf(Input two integer numbers:n); scanf(%d%d,&a,&b); m=a; n=b; c=a%b; while(c!=0) a=b; b=c; c=a%b; printf(T

19、he largest common divisor:%dn,b); printf(The least common multiple:%dn,m*n/b);while(b) c=a%b; a=b; b=c; b=a;例:有一頭母牛每年年初生一頭小母牛,每 頭小母牛從第4個年頭起,每年年初也生一 頭小母牛。求在第20年時,共有多少頭牛。 這是個“順推順推”問題。設:第n年時的母牛數(shù)為Xn,則: X12,X23,X34,X4X3+X1, X5X4+X2,可得到,當n4時有: XnXn-1 + Xn-3已知: X12,X23,X34main() int i, a, b, c, d; a=2; b;=3; c=4; /* 即 x1=2, x2=3, x3=4 */ for(i=4; i=20; i+) d=c+a; /* 即 xn=xn-1 + xn-3 */ a=b; b=c; c=d; printf(20 years of cow total amount is %dn, d);結果:20 years of cow total amount is 2745上機實驗41. 計算在國民生產年增長率分別

溫馨提示

  • 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

提交評論