C語言循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第1頁
C語言循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第2頁
C語言循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第3頁
C語言循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第4頁
C語言循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),5.1 概 述,為了方便地處理循環(huán)問題,C語言提供了3種用于循環(huán)控制的語句:while語句、do-while語句、for語句。,5.2 while語句 一般形式為: while(表達(dá)式) 循環(huán)體語句,表達(dá)式,語句,非0,0,例5.1 求1+2+3+.+10的和。,#include “stdio.h“ void main() int i=1,iSum=0; while(i=10) iSum=iSum+i; printf(“i=%2d,iSum=%2dn“,i,iSum); i+; printf(“1+2+3+.+10= %dn“,iSum); ,輸出結(jié)果: i=1,iSum=1 i=2,iSum=3 i=3,iSum=6 i=4,iSum=10 i=5,iSum=15 i=6,iSum=21 i=7,iSum=28 i=8,iSum=36 i=9,iSum=45 i=10,iSum=55 1+2+3+.+10=55,例5.2 利用格里高利公式求:/4 = 1 - 1/3 + 1/5 - 1/7 + .,直到最后一項(xiàng)的絕對值小于等于10- 6為止。,#include “stdio.h“ #include “math.h“ void main() double t=1.0,pi=0.0; /t表示通項(xiàng)公式中的每一項(xiàng) long int n=1,s=1; /n表示每一項(xiàng)中的分母,s表示每一項(xiàng)的符號 while(fabs(t) 1e-6) pi=pi+t; n=n+2; s=-s; t=(float)(s)/(float)(n); pi=pi*4; printf(“npi=%lfn“,pi); ,輸出結(jié)果: pi=3.141591,例5.3 求兩個正整數(shù)的最大公約數(shù)。,/*用Euclid(歐幾里得)算法求最大公約數(shù)*/ #include “stdio.h“ void main() int m,n,r; printf(“please input two positive integers:“); scanf(“%d%d“, ,輸出結(jié)果: please input two positive integers:64 24 Their greatest common divisor is 8.,例5.4 跳過輸入字符中的空白字符,輸出第一個非空白字符。,#include “stdio.h“ void main() char c; while(c=getchar()= |c=t|c=n) ; putchar(c); putchar(n); ,例5.5 不用空語句實(shí)現(xiàn)的例5.4。,5.3 do-while語句 一般形式為: do 循環(huán)體語句 while(表達(dá)式);,語句,表達(dá)式?,0,非0,例5.6 求1+2+3+.+10的和。,#include “stdio.h“ void main() int i=1,iSum=0; do iSum=iSum+i; printf(“i=%2d,iSum=%2dn“,i,iSum); i+; while(i=10); printf(“1+2+3+.+10= %dn“,iSum); ,輸出結(jié)果: i=1,iSum=1 i=2,iSum=3 i=3,iSum=6 i=4,iSum=10 i=5,iSum=15 i=6,iSum=21 i=7,iSum=28 i=8,iSum=36 i=9,iSum=45 i=10,iSum=55 1+2+3+.+10=55,例5.7 將一個給定的整數(shù)反序輸出。,#include “stdio.h“ void main() int i,r; printf(“nInput an integer:“); scanf(“%d“, ,輸出結(jié)果: Input an integer:1983 3891,例5.8 /*用while循環(huán)將一個給定的整數(shù)反序輸出*/ #include “stdio.h“ void main() int i,r; printf(“nInput an integer:“); scanf(“%d“, ,注意:循環(huán)體的有效范圍 例: i=1; while(i=100) putchar(*); i+;,程序段一: int k=1; while(!k= = 0) k=k+1; printf(“%dn”,k); ,程序段二 int k=0; while(k+=2) printf(“%dn”,k); (注:若在while后加;),程序段三: int x=3; do printf(“%3d”,x-=2); while(-x);,(2009.3)8.有以下程序 #include main() char c1,c2; scanf(“%c“, 程序運(yùn)行輸入65回車后,能否輸出結(jié)果,結(jié)束運(yùn)行(請回答能或不能)【 】,不能,(2009.9)(21)有以下程序 #include main() int n=2,k=0; while(k+ 程序運(yùn)行后的輸出結(jié)果是 A)0 2 B)1 3 C)5 7 D)1 2,D,(2009.9)(9)以下程序運(yùn)行后的輸出結(jié)果是 #include main() int a=1,b=7; do b=b/2;a+=b; while (b1); printf(“%dn”,a);,5,5.4 for語句,for語句的一般形式 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句,例5.9 求1+2+3+.+10的和。,#include “stdio.h“ void main() int i,iSum=0; for(i=1;i=10;i+) iSum=iSum+i; printf(“i=%2d,iSum=%2dn“,i,iSum); printf(“1+2+3+.+10= %dn“,iSum); ,輸出結(jié)果: i=1,iSum=1 i=2,iSum=3 i=3,iSum=6 i=4,iSum=10 i=5,iSum=15 i=6,iSum=21 i=7,iSum=28 i=8,iSum=36 i=9,iSum=45 i=10,iSum=55 1+2+3+.+10=55,例 5.10 輸入10個字符,輸出這10個字符中ASCII碼值最大的那個字符的ASCII碼值。,#include “stdio.h“ void main() int i,ch,max=0; for(i=1;imax) max=ch; printf(“The largest ASCII value is %d.n“,max); ,輸出結(jié)果: 12 AB9 Xab The largest ASCII value is 98.,例5.11 國王的許諾。相傳國際象棋是古印度舍罕王的宰相達(dá)依爾發(fā)明的。舍罕王十分喜歡象棋,決定讓宰相自己選擇何種賞賜。這位聰明的宰相指著88共64格的象棋盤說:陛下,請您賞給我一些麥子吧,在棋盤的第1個格子中放1粒,第2格放2粒,第3格中放4粒,以后每一格都比前一格增加一倍,依次放完棋盤上的64個格子,我就感恩不盡了。舍罕王讓人抗來一袋麥子,他要兌現(xiàn)的承諾。請問:國王能兌現(xiàn)他的承諾嗎?試編程計(jì)算舍罕王共要多少麥子賞賜他的宰相,這些麥子合多少立方米(已知1立方米麥子約1.42e8粒)?,#include “stdio.h“ #include “math.h“ void main() int n; double term,sum=0; for(n=1;n=64;n+) term=pow(2,n-1); sum=sum+term; printf(“Sum=%en“,sum); printf(“Volum=%en“,sum/1.42e8); ,輸出結(jié)果: Sum=1.844674e+019 Volum=1.299066e+011,#include “stdio.h“ void main() int n; double term=1,sum=1; for(n=2;n=64;n+) term=term*2; sum=sum+term; printf(“Sum=%en“,sum); printf(“Volum=%en“,sum/1.42e8); ,輸出結(jié)果: Sum=1.844674e+019 Volum=1.299066e+011,(2010.3)有以下程序 include(stdio.h) main() int a5=1,2,3,4,5,b50,2,1,3,0,i,s0; for(i0;i5;i+) ss+abi); printf(“%dn“, s); 程序運(yùn)行后的輸出結(jié)果是 A)6 B)10 C)11 D)15,C,(2009.3)22.設(shè)變量已正確定義,以下不能統(tǒng)計(jì)出一行中輸入字符個數(shù)(不包含回車符)的程序段是 A)n=0;while(ch=getchar()!=n) n+; B)n=0;while(getchar()!=n) n+; C)for(n=0;getchar()!=n;n+); D)n=0;for(ch=getchar();ch!=n;n+);,D,(2009.9)(10)有以下程序 main() int f,f1,f2,i; f1=0;f2=1; printf(“%d %d ”,f1,f2); for(i=3;i=5;i+) f=f1+f2; printf(“%d”,f); f1=f2; f2=f; printf(“n”); 程序運(yùn)行后的輸出結(jié)果是 【10】 。,0 1 123,5.5 循環(huán)的嵌套,5.5.1 二重循環(huán) 如果一個循環(huán)語句的循環(huán)體內(nèi)只包含一層循環(huán),這樣的嵌套循環(huán)叫作二重循環(huán)。對于一個二重循環(huán),如果外層循環(huán)的循環(huán)變量變化s次,內(nèi)層循環(huán)的循環(huán)變量變化t次,則外層循環(huán)每執(zhí)行1次,內(nèi)層循環(huán)就執(zhí)行t次,當(dāng)外層循環(huán)執(zhí)行了s次之后,內(nèi)層循環(huán)的循環(huán)體已經(jīng)執(zhí)行了st次。,例: 輸入nxn個字符 * main() int i,j,n=3; for(i=1;i=n;i+) for(j=1;j=n;j+) putchar(*); putchar(n); ,例:編寫程序輸出如下圖形。 * * * * *,main() int i,j,n=5; for(i=1;i=n;i+) for(j=1;j=i;j+) putchar(*); putchar(n); ,例5.12 求100以內(nèi)的全部素?cái)?shù)。,void main() int m,n,i,prime; i=0; for(m=2;m=100;m+) prime=1; for(n=2;nm;n+) if(m%n=0) prime=0; if(prime) printf(“%6d“,m); i+; if(i%5=0) printf(“n“); if(i%5!=0) printf(“n“); ,輸出結(jié)果: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97,5.5.2 多重循環(huán) 如果一個循環(huán)語句的循環(huán)體包含兩層甚至兩層以上的循環(huán)時,就構(gòu)成了多重循環(huán)。 例5.13 打印所有的“水仙花數(shù)”。所謂“水仙花數(shù)”,是指一個三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是“水仙花數(shù)”,因?yàn)?53=13+53+33。,void main() int n,x,y,z; printf(“The result is:“); for(x=1;x=9;x+) for(y=0;y=9;y+) for(z=0;z=9;z+) if(x*x*x+y*y*y+z*z*z=100*x+10*y+z) printf(“%dt“,100*x+10*y+z); printf(“n“); ,輸出結(jié)果: The result is:153 370 371 407,(2010.3)有以下程序 include(stdio.h main() int a1;b2; for(;a8;a+) b+=a;a+=2; printf(“%d,%dn“,a,b); 程序運(yùn)行后的輸出結(jié)果是 A)9,18 B)8,11 C)7,11 D)10,14,D,(2009.3)20.以下程序段中的變量已正確定義 for(i=0;i4;i+,j+) for(k=1;k3;k+); printf(“*“); 程序段的輸出結(jié)果是 A)* B)* C)* D)*,D,(2010.3)有以下程序 includestdio.h main() int i,j,m=1; for(i=1;i3;i+) for(j=3;j0;j-) if(i*j)3)break; m*=i*j; printf(“m=%dn“,m); 程序運(yùn)行后的輸出結(jié)果是 A)m=6 B)m=2 C)m=4 D)m=5,A,(2010.3)有以下程序 include main() int b 33=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0;i3;i+) for(j=i;j=i;j+) t+=bibji; printf(“%dn“,t); 程序運(yùn)行后的輸出結(jié)果是 A)1 B)3 C)4 D)9,C,5.6 流程的控制轉(zhuǎn)移,5.6.1 break語句 一般形式: break; void main() int s=0,i=1; for( ; ; ) s=s+i; i+; if(i100) break; printf(“s=%d”,s); ,其作用是跳出所在的循環(huán)結(jié)構(gòu),轉(zhuǎn)向執(zhí)行該循環(huán)結(jié)構(gòu)后面的語句,例5.14 讀入5個正整數(shù)并且顯示它們。當(dāng)程序讀入的數(shù)據(jù)為負(fù)數(shù)時,程序立即終止。本例的流程圖如圖5-20所示。,#include “stdio.h“ void main() int i,n; for(i=1;i=5;i+) printf(“Please enter n:“); scanf(“%d“, ,輸出結(jié)果: Please enter n:5 n=5 Please enter n:-5 Program is over!,5.6.2 continue語句 一般形式: continue; 如果我們將例5.14中的break語句改為continue語句,則流程圖如圖5-21所示,程序的功能變?yōu)椋鹤x入5個正整數(shù)并顯示它們。當(dāng)程序讀入的數(shù)據(jù)為負(fù)數(shù)時,程序并不終止,而是等待用戶輸入下一個數(shù)。,其作用跳過循環(huán)體中continue語句后面尚未執(zhí)行的循環(huán)體語句,繼續(xù)進(jìn)行下一次循環(huán)的條件判別。,輸出結(jié)果: Please enter n:5 n=5 Please enter n:-4 Please enter n:3 n=3 Please enter n:2 n=2 Please enter n:-1 Program is over!,5.6.3 goto語句 一般形式: goto 標(biāo)號語句; 標(biāo)號語句的形式: 標(biāo)號:語句 例:用goto語句來實(shí)現(xiàn)求平均成績的功能,break只能終止循環(huán)層,若要從多重循環(huán)的內(nèi)層一下轉(zhuǎn)移到最外層,可以使用goto,main() float score,average=0; int n=0; scanf(“%f“, ,5.6.4 exit()函數(shù) 雖然exit()函數(shù)只是標(biāo)準(zhǔn)庫函數(shù)而不是程序控制語句,但是它可以控制程序的流程。函數(shù)exit()的作用是終止整個程序的執(zhí)行,強(qiáng)制返回操作系統(tǒng)。當(dāng)執(zhí)行程序時所必需的條件不能滿足時,常常要用到exit()函數(shù)。調(diào)用該函數(shù)需要嵌入頭文件。函數(shù)exit(

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。