![c語言課件10c循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁](http://file4.renrendoc.com/view/64adcfea443eef5573d423c152df3cd5/64adcfea443eef5573d423c152df3cd51.gif)
![c語言課件10c循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁](http://file4.renrendoc.com/view/64adcfea443eef5573d423c152df3cd5/64adcfea443eef5573d423c152df3cd52.gif)
![c語言課件10c循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁](http://file4.renrendoc.com/view/64adcfea443eef5573d423c152df3cd5/64adcfea443eef5573d423c152df3cd53.gif)
![c語言課件10c循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁](http://file4.renrendoc.com/view/64adcfea443eef5573d423c152df3cd5/64adcfea443eef5573d423c152df3cd54.gif)
![c語言課件10c循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁](http://file4.renrendoc.com/view/64adcfea443eef5573d423c152df3cd5/64adcfea443eef5573d423c152df3cd55.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第五章 循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)是指對某一程序段重復執(zhí)行若干次。在許多問題中需要用到循環(huán)控制。比如,求若干個數(shù)之和、迭代求根等。C語言提供以下幾種循環(huán)while 循環(huán)do while 循環(huán)for 循環(huán)5.1 while語句一般形式:while (條件表達式) 語句;若有多個語句參與循環(huán)則用 括起來組成復合語句。表達式循環(huán)體10流程圖例1:由1輸出到10 變量 num 012. . .9num=0;num= 0+1;num=num+1;num= 1+1;num= 2+1;num=num+1;num=num+ 1;num=num+1;num= 9+1;程序如下:#include void main(
2、)int num=0; while (num=9) num+; printf(“%dn”,num);num=1;num=2;num=3;num=10;我們在寫循環(huán)語句時,一定要有一個語句能使循環(huán)結(jié)束,否則循環(huán)會不停地做下去,造成死循環(huán)。123. . .10輸出 . . . . . . while (輸入字符不為?) if (ch為字母) sc=sc+1; if (ch為數(shù)字) sn=sn+1; . . . . . . 如果條件不滿足,循環(huán)體一次也不執(zhí)行 while(n=0) n+; printf(“%d”,n); 例2:輸入一串字符,以“?” 結(jié)束,統(tǒng)計輸出字母與數(shù)字的個數(shù).sc裝字母個數(shù),s
3、n裝數(shù)字個數(shù)。完整程序如下: #include void main( ) char ch; int sc,sn; sc=0;sn=0; while (ch=getchar()!=?) if (ch=a & ch=A&ch=0&ch=9) sn=sn+1; printf(“number of letter:%d,number of digit:%dn”,sc,sn); ?是我們自己加的控制循環(huán)結(jié)束的結(jié)束符,一般用該程序中不用的字符做結(jié)束符.例3、密碼程序:輸入密碼,判斷是否正確,若正確則顯示 e,若不正確則顯示password is wrong,允許用戶重新輸入二次,若三次仍不正確則顯示Than
4、ks并退出。輸入密碼顯示提示信息密碼正確否? ePassword is wrong計數(shù)器n+1計數(shù)器n=1n3thanks結(jié)束yN yN N y 提示輸入密碼輸入密碼if 密碼為1234 顯示 eelse 顯示密碼錯printf(tPlease input password:); a1=getch();putchar(*); a2=getch();putchar(*); a3=getch();putchar(*); a4=getch();putchar(*); getch( ); if(a1=1&a2=2&a3=3&a4=4) printf(nn en); else printf(nntpas
5、sword is wrong!n);# include stdio.h# include conio.hvoid main()變量定義,n賦初值 n3) printf(ntThanks!n);int a1,a2,a3,a4,n=1;while(n=3)break;n+; 迭代算法 在循環(huán)語句中有一種方法稱為迭代,它是一個不斷用新值取代變量舊值或者是由舊值遞推出變量新值的過程。例4.求s=1+2+3+4 . . . . . . i=0;s=0; while (i4) i+; s=s+i; . . . . . i i+ s 102312340+10+1+20+1+2+30+1+2+3+4si .
6、. . . . . i=0;s=1; while (in) i+; s=s*i; . . . . . 例 5、求n!=1*2*n 例 6、求xn . . . . . . y=1.0; i=0; while (in) i+; y=y*x; . . . . . i i+ s0 1 1*11 2 1*1*22 3 1*1*2*33 4 1*1*2*3*4 i i+ y0 1 1*x1 2 1*x*x2 3 1*x*x*x3 4 1*x*x*x*x 5.2 do while語句 語句格式: do 語句; while (條件表達式);流程圖循環(huán)體表達式10與while語句相比,它至少要執(zhí)行一次循環(huán)體.
7、#include void main( )int sum=0,i; scanf(“%d”, &i); while (i=10) sum=sum+i; i+; printf(“%d”,sum); #include void main( )int sum=0,i; scanf(“%d”, &i); do sum=sum+i; i+; while (i=10); printf(“%d”,sum); 請比較運行結(jié)果:while 語句 input: 1 output: 55 input: 11 output: 0 do 語句input: 1output: 55input: 11output: 11 例題
8、:(1)請用do while語句寫出程序由1輸出到10 #include void main( ) int num=0; do num+; printf(“%dn”,num); while (num=10); #include void main( ) int num=0; do num+; printf(“%dn”,num); while (num=9); #include void main( )int num=1; do printf(“%dn”,num); num+; while (num=10); (2)把輸入的整數(shù)按逆序輸出。例如:輸入1234,輸出4321 #include vo
9、id main( ) int number,digit; printf(“Enter an integer:n”); scanf(“%d”,&number); do digit=number%10; /* 1234%10=4 */ printf(“%d”,digit); number/=10; /* 1234/10=123 */ while (number!=0); printf(“n”); 5.3 for 語句 for語句與while、do while語句完全可以互換,只不過for語句更簡潔,功能更強大。語句格式: for (初始化表達式;條件表達式;修正表達式) 循環(huán)體語句 ;初始化exp
10、條件表達式循環(huán)體修正exp01請畫出下面for語句的流程圖for (i=1;i=100;i+) sum=sum+i; i=1; i=1000sum=sum+i;i+1i為控制循環(huán)的變量,我們稱它為循環(huán)變量。用for語句做循環(huán),顯得緊湊而清晰,實際上第三個表達式不僅限于修正循環(huán)變量,而可以是任何操作。該語句可以寫得更緊湊:for (i=1; i=100; sum=sum+i, i+); 逗號表達式for語句中“表達式1”可省略,其后分號不能省略 如: i=1; for(; i=10; i+) sum=sum+i;如果for語句中“表達式2”省略,此時系統(tǒng)認為“表達式2”始終為真,循環(huán)將無限執(zhí)行,
11、除非碰到break。注 意“表達式3”可以省略,此時應(yīng)在循環(huán)體內(nèi)修改循環(huán)變量,以使循環(huán)正常結(jié)束。 如:for(i=1; i=100;) sum=sum+i; i+; 可以省略“表達式1”和“表達式3”,只有“表達式2” 如: i=1; for (;i=100;) sum=sum+i;i+;三個表達式都可以省略,即將for 語句寫成: for(; ;); 這是一個無限循環(huán)的空語句。P84例# include void main( )int i, n=20;float a=2,b=1, t, s=0;for (i=1;i=n;i+) s=s+a/b; t=a; a=a+b; b=t; printf
12、(“sum=%9.6fn”,s); 有一分數(shù)序列2/1,3/2,5/3,8/5,13/8求該數(shù)列前20項之和。例 Fibonacci數(shù)列:1,1,2,3,5,8,. . . 的前20個數(shù),即 f1=1 (n=1) f2=1 (n=2) fn=fn-1+fn-2 #include void main( ) long int f1,f2; int i; f1=1;f2=1; for ( i=1;i=10;i+) printf(“%ld,%ld”,f1,f2); if (i%2= =0) printf(“n”); f1=f1+f2; f2=f2+f1; f1=1f2=1f1=f1+f2=2f2=f2
13、+f1=1+2F1: 1 F2: 1 F1: 1+1 F2: 1+(1+1) F1: 2+3 i=i=i=i=5.5. 循環(huán)的嵌套 當一個循環(huán)成為另一個循環(huán)的循環(huán)體時,形成了循環(huán)的嵌套,也稱多重循環(huán)。例 1:打印九九乘法表1 2 3 . 91 2 3 9j=123911121319ijijijij212223291239313233391239191239929399#include void main( ) int i, j; for (i=1; i=9; i+) for(j=1; j=9; j+) printf(“%d*%d=%2d ”, i,j,i*j); printf(“n”); 重點
14、!i=1j=1, 1*1=1j=2, 1*2=2j=3, 1*3=3j=4, 1*4=4j=5, 1*5=5j=6, 1*6=6j=7, 1*7=7j=8 , 1*8=8j=9, 1*9=9j=10,退出j循環(huán)i=2j=1, 2*1=2j=2, 2*2=4j=3, 2*3=6j=4, 2*4=8j=5, 2*5=10j=6, 2*6=12j=7, 2*7=14j=8 , 2*8=16j=9, 2*9=18j=10,退出j循環(huán)i=9j=1, 9*1=9j=2, 9*2=18j=3, 9*3=27j=4, 9*4=36j=5, 9*5=45j=6, 9*6=54j=7, 9*7=63j=8, 9*
15、8=72j=9, 9*9=81j=10,退出j循環(huán)i=10退出 i 循環(huán)#include void main( ) int i, j; for (i=1 ; i=9; i+) for( j=1; jj=1ii=2 2*1=2 2*2=4 j=12 -j=1ii=3 3*1=3 3*2=6 3*3=9 j=13 -j=1i . . . . . . i=9 9*1=9 9*2=18 . . . . . . 9*9=81 j=19 -j=1i#include void main( ) int i , j; for (i=1; i=9; i+) for(j=1; j=i; j+) printf(“%d
16、*%d=%2d ”, i,j,i*j); printf(“n”); 例 2 求s=11+22+33+nn . int i, n; float s=0, y; scanf(“%d”,&n); for (i=1;i=n;i+) s=s+y; . . . . . . j y j+ 1 1*i 2 2 1*i*i 3 . . . . . . i 1*i*i*i*i i+1 i s i+ 1 0+11 2 2 0+11+22 3 3 0+11+22+33 4 4 0+11+22+33+44 5 yy=1.0;for (j=1;j=i;j+) y=y*i;S+iiS+iiS+iiS+iiy*iy*iy*i
17、5.6 循環(huán)語句小結(jié) while語句、do-while語句和 for()語句在一般情況下可以互相代替,三種語句的循環(huán)體部分基本相同.while語句和 for()語句是先判別條件,由非0或0決定是否執(zhí)行循環(huán)體; do-while語句是先執(zhí)行循環(huán)體,然后判別條件,再由非0或0決定是否繼續(xù)執(zhí)行循環(huán)體. 例:有一個數(shù),用3除余2,用5除余3,用7除余2,請找出滿足條件的最小數(shù) n=7; while (!(n %3=2&n%5=3&n%7=2) n+ ; . for(n=7; ; n+ ) if ( n%3=2&n%5=3&n%7=2) break; . for(n=7; (n%3=2&n%5=3&n%
18、7=2); n+ ) ; . n=7; do n+ ; while (!(n%3=2&n%5=3&n%7=2); .!5.7 break和continue語句break語句:提前結(jié)束整個循環(huán),退出循環(huán)。continue語句:提前結(jié)束本次循環(huán),進入下一次循環(huán)。 語句101條件表達式continue語句2條件表達式10語句101條件表達式break 語句2條件表達式10例1:將100分成4個數(shù)之和,使第1個數(shù)加上4,第2個數(shù)減去4,第3個數(shù)除以4,第4個數(shù)乘以4 ,都相等。問這4個數(shù)各是多少? #include void main( ) int x,x1,x2,x3,x4; for (x=4; ;
19、x +) x1=x-4; x2=x+4; x3=x*4; x4=x/4; if (x1+x2+x3+x4= =100) break; printf(“x1=%d,x2=%d,x3=%d,x4=%dn”,x1,x2,x3,x4);例2:把100200之間的不能被3整除的數(shù)輸出。#include void main( )int n; for (n=100;n=200;n+) if (n%3= =0 ) continue; printf(“%d”,n); 01n=200continue輸出n=100能否被3整除 01n+ (1) 若 int a=5 ; 則執(zhí)行以下語句后的結(jié)果為_ do printf
20、(“%2dn”,a-); while(!a); A)5 B)4 C) 不打印任何內(nèi)容 D) 陷入死循環(huán)(2) 設(shè) int x,y; 則執(zhí)行以下語句后的結(jié)果為_ for(x=1;x5;x+=2) for(y=2;y5;y+) printf(“%2d”,x*y); if(y= =5) printf(“n”); (A) 2 3 4 B) 2 3 4 5 6 9 12 6 9 12 15 (C) 2 3 4 6 9 12 D) 2 3 4 6 9 12 10 15 20Ax=1: y=2 x=3: y=2 x=5: y=3 y=3 退出 y=4 y=4A 綜合練習 (3) 下面程序運行時輸入數(shù)據(jù): 2
21、473 其結(jié)果為: #include void main( ) char s; while(s=getchar()!=n) switch(s-2) case 0: case 1: putchar(s+4); case 2: putchar(s+4); break; case 3: putchar(s+3); default: putchar(s+2); break; printf(“n”);2473(s=2!=n)(0)66輸出:(s=4!=n)668(s=7!=n)6689(2)(5)(s=3!=n)(1)668977(4):void main( ) int i,j; for(i=0;i=0
22、;j- -) if (i+j)%2) j- -; printf(“*%d”,j); continue; -j; -j; printf(“%d”,j); printf(“n”); for (i=0;i=0;j- -)j=10(0+10)%2)( 0 )- -j;j=9- -j;j=8printf(“%d”,j);for (i=0;i=0;j- -)(0+7)%2)=1j=7j-;j=6printf(“*%d”,j);8*6continue;for (j=10;j=0;j- -)j=5(0+5)%2)=1j-;j=4printf(“*%d”,j);8*6*4continue;for (j=10;j
23、=0;j- -)j=3(0+3)%2)=1j-;j=2printf(“*%d”,j);8*6*4*2continue;for (j=10;j=0;j- -)j=1(0+1)%2)=1j-;j=0printf(“*%d”,j);8*6*4*2*0continue;for (j=10;j=0;j- -)j=-1printf(“n”);8*6*4*2*08*6*4*2*08*6*4*2*0printf(“n”);8*6*4*2*08*6*4*2*0for (i=0;i10;i+,i+)i=48*6*4*2*08*6*4*2*08*6*4*2*0printf(“n”);8*6*4*2*08*6*4*2
24、*08*6*4*2*0for (i=0;i10;i+,i+)i=68*6*4*2*08*6*4*2*08*6*4*2*08*6*4*2*0for (i=0;i已知條件:整數(shù) m ;2所求結(jié)果:判斷是否素數(shù)。3算法描述:素數(shù)是只能被 1及其本身除盡的數(shù)。根據(jù)已知條件寫輸入語句:scanf(“%d”,&m);所求結(jié)果用語句輸出:printf(“%d is a prime numbern”,m);printf(“%d is not a prime number n”,m);如果它能被2到m-1之間的任意一數(shù)整除,則不是素數(shù):for (i=2; i=m-1; i+) if (m%i= =0) brea
25、k;減少循環(huán)次數(shù)分析:以16為例,其因子有:1,2,4,8,16,其因子是以 為界,成對出現(xiàn)。程序如下: # include # include void main( ) int m, i , k; scanf(“%d”,&m); k=sqrt(m); for (i=2; i=k+1) printf(“%d is a prime numbern”,m); else printf(“%d is not a prime number n”,m); 如果循環(huán)結(jié)束后i計數(shù)超過k,則表示m未能被循環(huán)中i的任意一個取值除盡。例5.2 孿生素數(shù)是指兩個值相差為2的素數(shù),例如3和5,11和 13,試編寫一程序
26、找出10對孿生素數(shù)。先求兩個數(shù)m,m+2是否素數(shù)循環(huán)求10對孿生素數(shù)for (n=2; nm; n+) if ( m% n= =0 | (m+2) % n= =0 ) break ;if (n= =m) printf(“%d,%dn” , m, m+2);for (m=3; c=10; m+) c+; 完整程序: # include void main( ) int m, n, c=1; for (m=3; c=10; m+) for (n=2; nm; n+) if ( m% n=0 | (m+2) % n=0 ) break ; if (n=m) printf(“%d,%dn” , m,
27、m+2); c+; 例5.3 百雞問題: 一只大公雞值五文錢,一只母雞值三文錢,三只小雞值一文錢。現(xiàn)有一百文錢,要買一百只雞,請給出解,要求三種雞都有。 # include void main( ) int x,y,z; for (x=0;x=20;x+) for (y=0; y34; y+) z=100-x-y; if(15*x+9*y+z)=300) if (x&y&z) printf(cook=%d hen=%d chicken=%dn,x,y,z); 每種雞數(shù)目都不為0例5.4 整元換零錢問題: 把1元兌換成1分,2分,5分的硬幣, 共有幾種不同的換法? for (j=0; j=(10
28、0-i*5)/2 ; j+) printf(%d, %d, %d n, i, j, 100-5*i-2*j); if (m%10 = =0) printf(n); m+; #include void main( ) int i,j,m=0; for (i=0;i=20; i+) printf(“n m=%dn”,m);例5.5 打印一個直角三角形* * * * * * * *外循環(huán)i=1i=2i=3i=4j=1內(nèi)循環(huán)j=2j=3j=4j=11j=12j=13j=14j=1i換行換行換行換行換行應(yīng)在內(nèi)循環(huán)結(jié)束時輸出圖形問題# include void main( )int i,j,n; scanf(“%d”,&n); for (i=1;i=n;i+) for(j=1;j=i;j+) printf(“*”); printf(“n”); 輸入:3i=1j=1 輸出*輸出 nj=2 退出循環(huán)*i=2j=1 輸出*j=2 輸出 *j=3 退出循環(huán) * * i=3* * * * * * * * j=1 輸出* * * * * j=4 退出循環(huán) j=3 輸出 *j=2 輸出 *i=4輸出 n輸出 n打印輸出菱形# include void
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3411-2024超薄纖維板
- 人教版地理八年級上冊第二節(jié)《人口》聽課評課記錄3
- 粵教版道德與法治九年級上冊3.1.1《可持續(xù)發(fā)展戰(zhàn)略》聽課評課記錄
- 2025年運載火箭承力殼段合作協(xié)議書
- 環(huán)保清潔標準協(xié)議書(2篇)
- 【部編版】道德與法治九年級下冊5.1《走向世界大舞臺》聽課評課記錄
- 新版湘教版秋八年級數(shù)學上冊第四章一元一次不等式組課題一元一次不等式組聽評課記錄
- 新北師大版數(shù)學一年級下冊《數(shù)一數(shù)》聽評課記錄
- 人教版七年級道德與法治七年級上冊聽課評課記錄:第四單元生命的思考第八課探問生命第一課時《生命可以永恒嗎》
- 湘教版九年級數(shù)學下冊2.2圓心角、圓周角2.2.1圓心角聽評課記錄
- 醫(yī)院消防安全培訓課件
- 質(zhì)保管理制度
- 《00541語言學概論》自考復習題庫(含答案)
- 2025年機關(guān)工會個人工作計劃
- 2024年全國卷新課標1高考英語試題及答案
- 2024年10月自考13003數(shù)據(jù)結(jié)構(gòu)與算法試題及答案
- 華為經(jīng)營管理-華為激勵機制(6版)
- 2024年標準化工地建設(shè)管理實施細則(3篇)
- 江蘇省南京市、鹽城市2023-2024學年高三上學期期末調(diào)研測試+英語+ 含答案
- 2024護理不良事件分析
- 光伏項目的投資估算設(shè)計概算以及財務(wù)評價介紹
評論
0/150
提交評論