




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本章主要內容本章主要內容概述概述用用while語句實現循環語句實現循環用用dowhile語句實現循環語句實現循環用用for語句實現循環語句實現循環循環的嵌套循環的嵌套幾種循環語句的比較幾種循環語句的比較break語句和語句和continue語句語句程序舉例程序舉例 第六章 循環控制6.1 概述 循環結構循環結構: 程序設計中程序設計中, 經常需要重復相同的經常需要重復相同的計算或處理過程。計算或處理過程。例如:全班有例如:全班有50個學生,統計各學生三個學生,統計各學生三 門課的平均成績。門課的平均成績。scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)
2、/3;printf(“aver=%7.2f”,aver); 輸入學生輸入學生1的三門課成績,并計算平均值后輸出的三門課成績,并計算平均值后輸出scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver); 輸入學生輸入學生2的三門課成績,并計算平均值后輸出的三門課成績,并計算平均值后輸出要對要對50個學生進行相同操作個學生進行相同操作重復重復50次次循環結構兩大要素:循環結構兩大要素:循環體循環體 可重復執行的語句或語句組可重復執行的語句或語句組循環條件循環條件 條件表達式,指出什么時候執行循環體,條件表達式
3、,指出什么時候執行循環體,什么時候結束循環。什么時候結束循環。循環體語句條件表達式循環體語句條件表達式真假while的后續語句1形式形式 : while(條件表達式)(條件表達式)循環體語句循環體語句 6.3 while語句語句例例0:用:用 while 語句實現在屏幕上輸出語句實現在屏幕上輸出10行行“i love programming!”。分析分析: 設計變量并賦初值設計變量并賦初值 用用int型變量型變量i表示行數,初值為表示行數,初值為1設計循環條件設計循環條件 i10設計循環體設計循環體 printf(“i love programming!n”); i+;用循環語句實現用循環語句
4、實現void main() int i; i=1; while(i=10) printf(“i love programming!n”); i+; 循環變量循環變量賦初值賦初值循環變量循環變量增值增值循環條件循環條件循環體循環體條件表達式條件表達式必須加括號,括必須加括號,括號后不能有;號后不能有;循環體包含多條語循環體包含多條語句時,句時, 不能少不能少例例1:用:用 while 語句實現語句實現 1+2+3+100分析分析: 設計變量并賦初值設計變量并賦初值 1. 用用int型變量型變量sum存放和,初值為存放和,初值為0 2. 用用int型變量型變量i表示累加變量,初值為表示累加變量,初
5、值為1設計循環體設計循環體 sum=sum+i; i+;設計循環條件設計循環條件 i100用循環語句實現用循環語句實現程序流程圖:程序流程圖:開始初始化 sum=0; i=1;判斷:i=100 ?sum=sum+i;i=i+1;輸出 sum結束真假真sum=sum+i;i=i+1;判斷:i=100 ?#include void main() int i, sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環結束后循環結束后,i的的值是多少?值是多少?101使用說明:使用說明:1) 在在while的循環體中一定要有使循環趨于結束的的循
6、環體中一定要有使循環趨于結束的語句;否則將形成語句;否則將形成死循環死循環;2) 注意循環操作的范圍、花括號、分號的使用;注意循環操作的范圍、花括號、分號的使用;3) 注意給循環變量賦初值的位置及初值的正確性;注意給循環變量賦初值的位置及初值的正確性;#include void main( ) int sum=0, i=1; while (i=100) sum=sum+i; i+; printf(sum%dn,sum); 程序程序: i+; sum+=i;i=0;100例例 2求求1到到100之間的奇數之和,偶數之積之間的奇數之和,偶數之積 。sum=0 mul=1 i=100 i能整除能整除
7、2?yesnomul=mul*isum=sum+i輸出輸出sum, muli+;i=1main( ) double mul=1; int i=1, sum=0; while (i=100) if (i%2=0) mul=mul*i; else sum=sum+i; i+; printf(sum=%dn,sum); printf(mul=%en,mul); main( ) int i,k1,k2,k; i=1;k1=1;k2=2; while (i=5) k=k1+k2; k1=k2; k2=k; i+; printf(%5d,k); 例例 3讀程序練習:讀程序練習: 3 5 8 13 21 1
8、形式:形式:do 語句語句 while(表達式)(表達式); 6.4 do-while語句語句循環體語句條件表達式循環體語句條件表達式真假例例 1用用do_while 語句實現語句實現 1+2+3+100分析分析: 設計變量并賦初值設計變量并賦初值 1. 用用int型變量型變量sum存放和,初值為存放和,初值為0 2. 用用int型變量型變量i表示累加變量,初值為表示累加變量,初值為1設計循環體設計循環體 sum=sum+i; i+;設計循環條件設計循環條件 i100用循環語句實現用循環語句實現void main( ) int i,sum=0; i=1; do sum=sum+i; i+; w
9、hile (i=1e-3); printf(sum=%fn,sum); while循環與循環與do_while循環小結循環小結:1. 循環體內必須有使循環趨于終止的條件循環體內必須有使循環趨于終止的條件 while (i=100) sum=sum+i; i+;do sum=sum+i; i+; while (i=100);2. 注意循環初值與循環條件注意循環初值與循環條件i=1;while (i=100) sum=sum+i; i+;i=0;while (i100) i+; sum=sum+i;3. do_while 循環的循環體至少執行一循環的循環體至少執行一 次次, while循環的循環體
10、可能一次循環的循環體可能一次 也不執行。也不執行。 4. 在循環體至少執行一次的前提下,在循環體至少執行一次的前提下, do_while與與while 循環等價。循環等價。 例例3: 求求 n! main( ) int i=1,n; double m=1; scanf(%d,&n); while(i=n) m=m*i; i+; printf(%10.0fn,m); printf(“i=%dn”,i); main( ) int i=1,n; double m=1; scanf(%d,&n); do m=m*i; i+; while(i=n); printf(%10.0fn,m); printf(
11、“i=%dn”,i); 1. 一般形式:一般形式: for (表達式表達式1; 表達式表達式2; 表達式表達式3) 語句語句 for 的循環體的循環體括號不可少括號不可少分號不可少分號不可少 6.5 for語句語句求表達式求表達式1判表達式判表達式2語句語句求表達式求表達式3for語句的下一語句的下一個語句個語句 真真,非非0假假,值為值為0for語句執行過程示意for (表達式表達式1; 表達式表達式2; 表達式表達式3) 語句語句表達式表達式1只執只執行行1次;次;表達式表達式2、3和內嵌語句執和內嵌語句執行多次行多次通常:通常:表達式表達式1用于用于對循環變量賦初值對循環變量賦初值;表達
12、式表達式2給出給出循環條件循環條件; 表達式表達式3使使循環變量增值循環變量增值;循環類型:循環類型:當型當型for語句等價于下列語句:語句等價于下列語句:表達式表達式1;while (表達式(表達式2) 語句;語句; 表達式表達式3;例例:#include void main()int i, sum=0;for (i=1;i=100;i+) sum=sum+i;printf(“sum=%dn”,sum);例:例:for(i=0; i=10; i=i+2) printf(“%3d”, i); printf(“ni=%d”, i); 運行結果:運行結果:0 2 4 6 8 10 i=12例:例:
13、for(i=10; i; i-) printf(“%d,”, i); 運行結果:運行結果:10,9,8,7,6,5,4,3,2,1,例:例:for(i=1, j=6; ij; i+, j-) printf(“%d*%d=%dn”, i, j, i*j);運行結果:運行結果:1*6=6 2*5=10 3*4=12 3. 說明說明 : 1)表達式)表達式1可省略,但分號不能省可省略,但分號不能省 ;如如 :int i=1,sum=0; for (;i=100;i+) sum=sum+i; 2)若表達式)若表達式2省略,循環條件永遠為真省略,循環條件永遠為真 ;如如: for(i=1; ;i+)pr
14、intf(“%d,”,i); 死循環死循環3)表達式)表達式3也可省略,但應設法保證循環正常結束也可省略,但應設法保證循環正常結束 ;如如 : for (i=1;i=100;) sum=sum+i; i+; 4)可只給循環條件)可只給循環條件;i=1; for (;i=100;) sum=sum+i; i+; 5)三個表達式都可省)三個表達式都可省 ; for (;) 相當于相當于 while (1) 6)表達式)表達式1和表達式和表達式3可以是逗號表達式可以是逗號表達式 ;如如 : for (i=1,sum=0;i=100;i+) sum=sum+i;7)表達式)表達式2一般為關系表達式或邏
15、輯表達式,但一般為關系表達式或邏輯表達式,但也可以是數值表達式或字符表達式,只要其值為也可以是數值表達式或字符表達式,只要其值為非零非零就執行循環體就執行循環體 。 如如: for (;(c=getchar( )!=n;) printf(%c,c);注注: 盡量避免用盡量避免用實型變量實型變量控制循環次數。控制循環次數。在循環體內盡量避免改變循環變量的值在循環體內盡量避免改變循環變量的值, 否否則將難以預知循環次數。則將難以預知循環次數。例:例:void main( ) int i; for(i=1;i=20;i+) i=i+5; printf(%5d,i); printf(n);運行結果為:
16、運行結果為: 6 12 18 24修改了循環變量修改了循環變量 概念概念 :一個循環體內又包含另一個完整的循環結構:一個循環體內又包含另一個完整的循環結構 。 6.6 循環的嵌套循環的嵌套例:do-while嵌套 例:do-while、for混合嵌套 do do do for(e1;e2;e3) while(e1); while(e); while(e); 外循環外循環 內循環內循環 外循環外循環 內循環內循環1 內循環內循環2三重循環三重循環錯誤的循環交叉形式:錯誤的循環交叉形式: 說明說明 :1)三種循環可以互相嵌套)三種循環可以互相嵌套 2)嵌套可以是多層的)嵌套可以是多層的 * * *
17、 * * * * * * * * * * * * * * * * * * * * * *main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5;j+) printf (*); printf(n); 1. 四種循環一般可互相代替四種循環一般可互相代替 3. while和和do-while循環的循環體中應包括使循循環的循環體中應包括使循環趨于結束的語句。環趨于結束的語句。4. 6. while和和for循環是當型循環循環是當型循環, do-while循環是直到型循環循環是直到型循環 6.7 幾種循環的比較幾種循環的比較一、一、break語句語句 作用作用 :
18、1) 從循環體內跳出,即提前結束循環從循環體內跳出,即提前結束循環 ,接著,接著執行循環下面的語句執行循環下面的語句 ; 2) break語句語句只能只能 用于用于循環語句和循環語句和 switch 語語句句 。6.8 break語句和語句和continue語句語句#include void main( )int r; float area; for(r=1; r100) break; printf(“r=%d,area=%-7.2fn”, r, area); printf(“r=%d”,r);計算半徑為計算半徑為1 1到到1010的的各圓面積,直到面各圓面積,直到面積大于積大于100100為
19、止。為止。 r= 6 注意:注意: 在循環中使用了在循環中使用了break語句后,循環語句的結束可語句后,循環語句的結束可能有兩種:能有兩種:1. 正常結束(正常出口);由于循環條件表達式為假正常結束(正常出口);由于循環條件表達式為假2. 非正常結束(異常出口):由非正常結束(異常出口):由break語句引起。語句引起。使用說明:使用說明:1) 內循環中的內循環中的break僅跳出內循環結構;僅跳出內循環結構; if(e) break;2) 被循環語句嵌套的被循環語句嵌套的switch中出現的中出現的break,僅,僅跳出跳出switch;switch(e) break; 二、二、conti
20、nue 語句語句作用作用 :結束:結束本次本次循環,即跳過循環體中語句中下面尚循環,即跳過循環體中語句中下面尚未執行的語句,接著執行下一次是否執行循環的判定。未執行的語句,接著執行下一次是否執行循環的判定。 for (n=100;n=200;n+) if (n%3= =0) continue; printf(“%d”,n); if (n%3!=0) printf(“%d”,n);例:for中用 continue 例:while中用continue for(e1; e2; e3 ) while( e1 ) if (e) continue; if(e) continue; 三、三、break語句和
21、語句和continue語句的區別是語句的區別是 : 1)continue 語句只結束語句只結束本次循環本次循環,不終止整,不終止整個循環的執行;個循環的執行; 2)break 語句是語句是終止整個循環終止整個循環的執行,不再的執行,不再進行條件判斷。進行條件判斷。 例:例: 從鍵盤上任意輸入一個正整數,判斷其是否為素數。從鍵盤上任意輸入一個正整數,判斷其是否為素數。素數:除了素數:除了1和它本身之外沒有其他因子的數。換句和它本身之外沒有其他因子的數。換句話說只要有因子(除了話說只要有因子(除了1和它本身之外)則該數一定和它本身之外)則該數一定不是素數不是素數判斷判斷m是否素數:是否素數:(窮舉
22、法窮舉法) for(i=2;im-1void main( ) int m,i; scanf(%d,&m); for(i=2;im-1) printf(%d is a prime,m); else printf(%d is not a prime,m); 非正常出口非正常出口方法方法1main( ) int m, i, k=1; scanf(%d,&m); for(i=2;i=m-1;i+) if(m%i= =0) k=0;break; if(k) printf(%d is a prime,m); else printf(%d is not a prime,m);方法方法2標志變量標志變量例用公
23、式求例用公式求的近似值,直到最后一項的的近似值,直到最后一項的絕對值小于絕對值小于10-6為止為止 。 /41-1/3+1/5-1/7+算法分析:算法分析: 1. 循環累加循環累加 pi=pi+t; 2. 交替改變符號交替改變符號 s= -s; 3. 每項分子為每項分子為 1 ,分母分母 n=n+2; 6.9 程序舉例程序舉例 #include void main( ) int s; float n,t,pi; t=1;pi=0;n=1;s=1; while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s*1.0/n; printf(pi=%10.6fn,4*
24、pi); 程序程序 :例例 求求fibonacci數列:數列:1,1,2,3,5,8,.的前的前40個數個數 。 f1 f2 1 1f1=f1+f2; f2=f2+f1; fi=fi-1+fi-2f12f23. void main( ) long int f1,f2; int i; f1=1; f2=1; for (i=1;i=20;i+) printf(%12ld %12ld,f1,f2); if (i%2= =0) printf(n); f1=f1+f2; f2=f2+f1; 與此解題方法類似的有與此解題方法類似的有:(迭代法迭代法)1、編寫求、編寫求 20+21+22+23+263 的程
25、序的程序 。2、求、求1!+2!+3!+20!。3、有一個分數序列、有一個分數序列 2/1,3/2,5/3,8/5,13/8,21/13求出這個數列的前求出這個數列的前20項之和項之和4、求、求: sn=a+aa+aaa+aaaaaa,其中其中a是一是一個數字個數字,n表示表示a的位數,的位數,n要求由鍵盤輸入。要求由鍵盤輸入。等等。等等。void main( ) int i,j,m=0; for(j=100;j=200;j+) for(i=2;ij-1) printf(%5d,j); m+; if(m%10=0) printf(n); printf( m=%dn,m);例:求例:求10020
26、0之間的所有素數及素數的個數。之間的所有素數及素數的個數。輸出輸出10個素數后換行個素數后換行與此解題方法類似的有與此解題方法類似的有:(窮舉法、列舉法窮舉法、列舉法)1、輸出所有的水仙花數。、輸出所有的水仙花數。2、找出、找出11000之間的全部同構數之間的全部同構數 。一個數等于。一個數等于它的平方數的右端,就稱為同構數。如它的平方數的右端,就稱為同構數。如 :5的平方的平方是是25,25的平方是的平方是625。3、編程找出、編程找出1000之內的所有完數。一個數恰好等之內的所有完數。一個數恰好等于它的因子之和,這個數就稱為于它的因子之和,這個數就稱為“完數完數”。例如:。例如:6的因子為
27、的因子為1,2,3,而,而6=1+2+3,因此,因此6是完數。是完數。同構數同構數 : 一個數等于它的平方數的右端。一個數等于它的平方數的右端。 如如 :5的平方是的平方是25 25的平方是的平方是625 例例 :找出找出11000之間的全部同構數之間的全部同構數 。分析:分析:1. 用用i表示表示11000之間的數之間的數 2. 用用n表示表示i的位數的位數 3. 同構數的條件同構數的條件: i*i%(int)pow(10,n) = = im=i;n=0;do n+; m=m/10; while(m!=0); #include math.h main( ) int n,m; long i;
28、for(i=1;i=1000;i+) m=i;n=0; do n+; m=m/10; while(m!=0); if(i*i%(int)pow(10,n)=i) printf(%5ld,i); printf(n); 一個數恰好等于它的因子之和,這個數一個數恰好等于它的因子之和,這個數就稱為就稱為“完數完數”。例如:例如:6的因子為的因子為1,2,3,而,而6=1+2+3,因,因此此6是完數。是完數。編程找出編程找出1000之內的所有完數,并按之內的所有完數,并按下面格式輸出其因子下面格式輸出其因子6 its factors are 1,2,3 例 main( ) int i,j,k; for
29、(i=2;i=1000;i+) k=0; for (j=1;j=i/2;j+) if (i%j=0) k=k+j; if (i=k) printf(“%d its factors are %d”,i,1); for (j=2;j=i/2;j+) if (i%j=0) printf(“,%d”,j); printf(“n”); 程序 :例:從鍵盤輸入字符直到輸入字符例:從鍵盤輸入字符直到輸入字符#為止,并統計為止,并統計 輸入字母的個數。輸入字母的個數。特點:特點:循環次數事先無法確定循環次數事先無法確定#include void main( ) char ch; int count=0; do
30、 ch=getchar( ); if(ch=a&ch=a&ch=z) count+; while(ch!=# ); printf(”count=%dn”, count); 例:從鍵盤輸入字符直到輸入字符例:從鍵盤輸入字符直到輸入字符#為止,并統計為止,并統計 輸入字母的個數。方法輸入字母的個數。方法2:#include void main( ) char ch; int count=0; while(1) ch=getchar( ); if(ch=a&ch=a&ch=z) count+; if(ch= =#) break; printf(”count=%dn”, count); 例例: 在屏幕
31、上輸出以下圖形。在屏幕上輸出以下圖形。 * * * *分析:(設分析:(設n=5n=5)第第1 1行:行: 4 4個空格個空格 1 1個個“* *” 換行換行符符 第第2 2行:行: 3 3個空格個空格 3 3個個“* *” 換行換行符符第第3 3行:行: 2 2個空格個空格 5 5個個“* *” 換行換行符符第第4 4行:行: 1 1個空格個空格 7 7個個“* *” 換行換行符符第第5 5行:行: 0 0個空格個空格 9 9個個“* *” 換行換行符符由此歸納出:第由此歸納出:第i i行的空格數行的空格數5-i5-i個;個; 第第i i行的行的“* *”數是數是2i-12i-1個。個。 v
32、oid main( ) int i, j; for(i=1;i=5;i+) for (j=1;j=5-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); 本章小結 本章介紹的內容本章介紹的內容 介紹了介紹了while、dowhile、for三種循環結構三種循環結構的使用和它們之間的區別,以及的使用和它們之間的區別,以及break、continue的用法的用法 要求達到的目標要求達到的目標 掌握掌握while、dowhile、for語句的用法語句的用法 會使用這三種結構進行循環程序設計會使用這三種結構進行循環程序設計 理解理解 b
33、reak 和和 continue在程序控制中的作用在程序控制中的作用圖形圖形 1:(法一):(法一)main( ) int i; for (i=1;i=5;i+) printf (“ * * * * *n”); * * * * * * * * * * * * * * * * * * * * * * * * *圖形圖形 1:(法二):(法二)main( ) int i; for (i=1;i=25;i+) if (i%5=0) printf (“ *n”); else printf (“ *”); * * * * * * * * * * * * * * * * * * * * * * * * *
34、圖形圖形 2:(法三):(法三)main( ) int i,j; for (i=1;i=5;i+) for ( j=1;j=i;j+) printf ( “ “); printf (“ * * * * *n”); * * * * * * * * * * * * * * * * * * * * * * * * *圖形圖形 2:(法三):(法三)main( ) int i,j; for (i=1;i=5;i+) for ( j=1;j5+i;j+) if (ji) printf ( “ “); else printf (“ *”); printf(“n”); * * * * * * * * * *
35、 * * * * * * * * * * * * * * *圖形圖形 3:main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5-i:j+) printf ( “ “); for (j=1;j=5;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * *圖形圖形 4 :main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * 圖形圖形 4 :main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * 圖形圖形 5:(法一):(法一)main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5-i;j+) printf (“ “); for (j=1;j=i;j+) printf (“ *”); printf(“n”); * * * * * * * * * * *
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 牧場畜牧養殖委托管理及農業人才培養合作協議
- 建筑工程合同數字化合同管理績效評估與改進協議
- 基于綠色建筑標準的項目環保合規責任保證書
- 企業專利布局與知識產權戰略布局實施合同
- 離婚與知識產權歸屬明確合作協議
- 汽車融資租賃質押擔保補充協議
- 網紅奶茶連鎖品牌原物料統一配送與運營管理合作協議
- 創意產業藝術品收藏與交易有限合伙協議
- 婚姻忠誠協議書簽訂技巧與法律效力解析
- 校招郵政考試題庫及答案
- 鈹箔及鈹合金箔行業行業發展趨勢及投資戰略研究分析報告
- “崗課賽證”綜合育人模式下高職活頁式教材的建設研究
- 2024年中考地理專項復習:材料分析題(解析版)
- 基于項目式學習的思政教學實踐探索
- 寄生蟲病診斷與治療
- 2020-2021學年四川省涼山州八年級(下)期末物理試卷
- 《(近)零碳園區評價技術規范》
- 2024-2025學年中考數學專項復習:函數之新定義問題(含答案)
- 鶴壁市第一屆職業技能大賽 保健按摩師項目技術工作文件
- 中建室外景觀園林專項施工方案
- 鍋爐生產單位質量安全員、安全總監-特種設備考試題庫
評論
0/150
提交評論