第六章循環控制_第1頁
第六章循環控制_第2頁
第六章循環控制_第3頁
第六章循環控制_第4頁
第六章循環控制_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第6章 循環結構的程序設計v本章學習要點:v深入掌握各種循環語句的要點和使用方法v深入掌握break和continue語句在循環語句中的作用.v能夠靈活地運用各種循環語句進行綜合程序設計u循環結構:循環結構:l當型循環結構當型循環結構l直到型循環結構直到型循環結構PA假假真真當當P為真為真AAP假假真真A直到直到P為為假假注:注:A可以是一個簡單語句,也可以是一個基本結構可以是一個簡單語句,也可以是一個基本結構6.1 概述C語言可實現循環結構的語句:v用goto 和 if 構成循環vwhile 語句vdo while 語句vfor 語句goto語句一般格式:goto 語句標號語句標號;標號標號

2、:語句語句; u功能:無條件轉移語句功能:無條件轉移語句u說明:說明:只能加在可執行語句前面只能加在可執行語句前面限制使用限制使用gotogoto語句語句6.2 goto語句以及用goto語句構成循環語句標號語句標號:命名命名規則與變量名相規則與變量名相同同,有字母有字母,數字數字,下劃線開頭下劃線開頭,第第一個字符必須是一個字符必須是字母或者下劃線字母或者下劃線.例例 用用if 和和goto語句構成循環,求語句構成循環,求1001nn /*c5_1.c*/ #include main() int i,sum=0; i=1; loop: if(i=100) sum+=i; i+; goto l

3、oop; printf(%d,sum); 循環初值循環初值循環終值循環終值循環變量增值循環變量增值循環條件循環條件循環體循環體分析:分析:sum=sum+1=1sum=sum+2=1+2=3sum=sum+3=3+3=6sum=sum+4=6+4=10sum=sum+100=4950+100=5050u一般形式一般形式:while(表達式表達式) 循環體語句循環體語句u執行流程執行流程:表達式表達式循環體循環體假假(0)真真(非非0)while6.3 while語句u特點特點:先判斷表達式,后執行循環體(當型):先判斷表達式,后執行循環體(當型)u說明說明:循環體循環體有可能有可能一次也不執行

4、一次也不執行循環體可為任意類型語句循環體可為任意類型語句下列情況,退出下列情況,退出whilewhile循環循環:l條件表達式不成立(為零)條件表達式不成立(為零)l循環體內遇循環體內遇break,return,gotobreak,return,goto無限循環無限循環: : while(1) while(1) 循環體循環體; ;例例 用用while循環求循環求 1001nn /*c5_3.c*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環初值循環初值循環終值循環終值循環變量增值

5、循環變量增值循環條件循環條件循環體循環體例例 顯示顯示110的平方的平方/*c5_4.c*/#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 運行結果:運行結果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例題v main()vvInt i=0;vWhile(i4)vPrintf(“%d”,i+);vPrintf(“were out of the loop.n”);vv int k=0;v while(k=1) k+;vWhile 循

6、環的次數是_vA.無限次 vB.有語法錯誤,不能執行C.一次也不執行vD.執行一次改成改成i+1,會會出現什么樣出現什么樣的情況的情況?u一般形式:一般形式:do 循環體語句循環體語句 while(表達式表達式);u執行流程:執行流程: do循環體循環體表達式表達式假假(0)真真(非非0)while6.4 do-while語句此處此處有有;u特點:先執行循環體,后判斷表達式(直到型)特點:先執行循環體,后判斷表達式(直到型)u說明說明:至少執行一次循環體至少執行一次循環體do-whiledo-while可轉化成可轉化成whilewhile結構結構表達式循環體假(0)真(非0)循環體While循

7、環例例 用用dowhile循環求循環求 1001nn /*c5_5.c*/ #include main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%d,sum); 例例 while和和dowhile比較比較/*c5_6_1.c*/#include main() int i,sum=0; scanf(%d,&i); do sum+=i;i+; while(i=10);printf(%d,sum);/*c5_6_2.c*/#include main() int i,sum=0; scanf(%d,&i); while(i=10)

8、 sum+=i;i+; printf(%d,sum);結論:當結論:當 while后的表達式第一次的值為后的表達式第一次的值為“真真”時,兩種結果相同,否則不同。時,兩種結果相同,否則不同。1.比較輸出結果.v main()vv int i=0,sum=0;vi=101;vWhile(i=100)vsum=sum+I;v i+;vvPrintf(“%dn”,sum);vvmain()vv int i=0,sum=0;vi=101;vDovsum=sum+I;v i+;vwhile(i0&+x5)v y=y-1;vPrintf(“%d,%d,%dn”,x,y,z);vv main()v v in

9、t x=23;v dov printf(“%d”,x-);v while(!x);vv該程序的執行結果是_vA.321 B.23 C.不輸出任何內容D.陷入死循環例 1.顯示110的平方 2.以下能正確計算1*2*3*4*5*10的程序段 A. do i=1;s=1; s=s*i; i+; while(i=10); B. do i=1; s=0; s=s*i; i+; while(i=10); C. i=1;s=1; do s=s*i; i+; while(i=10); D. i=1; s=0; do s=s*i; i+; while(i=10); v例題:小明今年12歲,他母親比他大20歲,

10、編寫一個程序計算出小明的母親在幾年后比小明的年齡大一倍,那時他們兩人的年齡各是多少.v#include v main()vv int n,m,I;v n=12;m=n+20;v i=1;vWhile(m+i)!=2*(n+i)v i=i+1;vPrintf(“年數=%dn”,i);vPrintf(“小明的年齡=%dn”,n+i);vPrintf(“母親的年齡=%dn”,m+i);vv課后作業 v1.編寫一個程序,用來計算并顯示出2到30的偶數的和.v2.:每個蘋果0.8元,第一天買2個蘋果,從第二天開始,每一天買前一天的2倍,直至購買的蘋果數達到不超過100的最大值,編寫程序求每天平均花多少錢

11、.v1.v main()v v int i=2,s=0;v while(i=30)v s=s+i;v i=i+2;v v printf(“%d”,s);v n=2;m=0;vWhile(n=100)vv m=m+0.8*n;v n=2*n;v day+;vvAverage=m/day;u一般形式:一般形式:for(表達式表達式1;表達式表達式2;表達式表達式3 )循環體語句循環體語句u執行流程:執行流程:表達式表達式2循環體循環體假假(0)真真(非非0)for表達式表達式1表達式表達式36.5 for語句1.1.先求解表達式先求解表達式1 1;2.2.求解表達式求解表達式2 2,若其,若其值為

12、真值為真( (非非0)0),則執,則執行循環體的內容,行循環體的內容,然后執行第然后執行第3 3步。若步。若為假為假(0)(0),則結束循,則結束循環,執行環,執行forfor語句下語句下面一條語句。面一條語句。3.3.若表達式為真,執若表達式為真,執行指定的語句后,行指定的語句后,求解表達式求解表達式3 3。4.4.返回第返回第2 2步執行。步執行。此處無此處無;uforfor語句一般應用形式語句一般應用形式:for( 循環變量賦初值循環變量賦初值; 循環條件循環條件; 循環變量增值循環變量增值) 循環體語句循環體語句 u說明:說明: forfor語句中語句中表達式表達式1 1、表達式、表達

13、式2 2、表達式、表達式3 3類型任意,都類型任意,都可省略,但分號;不可省可省略,但分號;不可省 無限循環無限循環: for(;): for(;) forfor語句可以轉換成語句可以轉換成whilewhile結構結構表達式表達式1;1;while(while(表達式表達式2)2) 循環體語句;循環體語句; 表達式表達式3;3; 例例 用用for循環求循環求 1001nn#include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);此處無此處無;例:例:#include main( ) int i=0; for(i=

14、0;i10;i+) putchar(a+i); 運行結果:運行結果:abcdefghij例:例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); 例例: #include main( ) int i=0; for(;i10;) putchar(a+(i+); 例例: #include main( ) int i=0; for(;i10;putchar(a+i),i+) ; 省略表達式省略表達式 1省略表達式省略表達式1、3省略循環體省略循環體如果加上如果加上i+結果結果?/*c5_7.c*/main() int i,j,k; for(i=

15、0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); /*c5_8.c*/#includemain() char c; for(;(c=getchar()!=n;) printf(%c ,c);表達式表達式 1、3為為逗號表達式逗號表達式結論:結論:for語句的功能強大。語句的功能強大。如果要統計輸入的如果要統計輸入的字符的個數該如何字符的個數該如何修改程序修改程序?v2.一位百萬富翁遇到一陌生人,陌生人找他談一個換錢的計劃,該計劃如下,我每天給你10萬元,而你一天只需給我一分錢,第二天仍給你10萬,你給我二分錢,第三天我仍給你10萬,你給我四分

16、錢你每天給我的錢是前一天的兩倍,直到滿一個月(30),百萬富翁很高興,欣然接受了這個契約,請編寫一個程序計算這一個月中陌生人給了百萬富翁多少錢,百萬富翁給了陌生人多少錢.v設變量s,和t分別記錄百萬富翁給陌生人的錢,和陌生人給百萬富翁的錢.v 第一天:s=1,t=100000;k=1;v然后用for循環,k=2k;s=s+k; t=t+100000v#include v main()vv int ,n, i;vLong s ,t, k=1;vS=1;vT=100000;vFor(i=2;i=30;i+)vv k=2*k;v s=s+2*k;v t=t+100000;vvS=s/100;vPri

17、ntf(“百萬富翁給陌生人:%ld元n陌生人給百萬富翁:%ld元n”,s,t);vv講解課后習題:v6.5v6.8 v題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。v1.程序分析:采取逆向思維的方法,從后往前推斷。u三種循環可互相嵌套三種循環可互相嵌套, ,層數不限層數不限u外層循環可包含兩個以上內循環外層循環可包含兩個以上內循環, ,但不能相互交叉但不能相互交叉u嵌套循環的執行流程嵌套循環的執行流程(1)

18、 while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() . 內循環內循環外循環外循環內循環內循環u嵌套循環的跳轉嵌套循環的跳轉 禁止:禁止:從外層跳入內層從外層跳入內層跳入同層的另一循環跳入同層的另一循環向上跳轉向上跳轉6.6 循環的嵌套例 循環嵌套,輸出九九表12345678912436991827364554637281.例例 循環嵌套,輸出九九表循環嵌套,輸出九九表ij/*c5_10.c*/#include main() i

19、nt i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j=i;j+) printf(j=i)?%4dn:%4d,i*j);i=9printf假假(0)真真(非非0)i=1j+j=1j=9真真(非非0)假假(0)i+外循環外循環內循環內循環Printf(“n”);v例題:v 輸出如圖的圖案(星號個數與空格的個數)v *v *v *v*6.7 幾種循環的比較1.三種循環均可處理同一問題;2.for和while語句為先判斷后執行,do-while語句則先執行后判斷;3.do-while和while 語句

20、多用于循環次數不定的情況,循環次數確定的用for語句更方便;4.do-while語句更適合第一次肯定執行的情況;5.do-while和while語句只有一個表達式,用于控制循環是否進行。for語句有三個表達式,不僅可以控制循環是否進行,而且能為循環變量賦初值及不斷修改其值。故for語句功能更強,更靈活。 v6.8.1 break語句一般形式:break;功能:在循環語句和switch語句中,終止并跳出循環體或開關體說明:vbreak只能終止并跳出最近一層的結構vbreak不能用于循環語句和switch語句之外的任何其它語句之中6.8 break語句和continue語句dobreak;.表達式

21、表達式假假(0)真真(非非0)while表達式表達式break;假假(0)真真(非非0)whileswitch表達式表達式語句組語句組1break;語句組語句組2break;語句組語句組nbreak;語句組語句組break;.const 1const 2const ndefaultcase 表達式表達式2break;.假假(0)真真(非非0)for表達式表達式1表達式表達式3例例 break舉例:輸出圓面積,面積大于舉例:輸出圓面積,面積大于100時停止時停止(半徑的取值范圍在半徑的取值范圍在1到到10之間)之間)#include #define PI 3.14159main() int r;

22、 float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 例例 break舉例:舉例:循環輸入字符,如果是小寫字母則循環輸入字符,如果是小寫字母則轉換成大寫字母轉換成大寫字母,直至輸直至輸入非入非小寫小寫字母字母字符。字符。/*ch6-5-2.c*/#include main() char c; while(1) c=getchar(); if(c=a & c100)break; vB. for(;);vC. Int k=0;v do+k; while(k=0);vD. int s=36;v while(s) ;v -

23、-s;v6.8.2 continue語句一般形式:continue;功能:結束本次循環,跳過循環體中尚未執行的語句,進行下一次是否執行循環體的判斷說明:v僅用于循環語句中vcontinue 語句僅結束本次循環,但break語句則是結束整個循環過程。真真(非非0)docontinue;.表達式表達式假假(0)while表達式表達式2continue;.假假(0)真真(非非0)for表達式表達式1表達式表達式3表達式表達式continue;假假(0)真真(非非0)whilev1.求300以內能被17整除的所有整數.(用continue語句)#includestdio.hvoid main()int

24、 i;for(i=300;i0;i-) if(i%17!=0)continue;printf(“%5d”,i);/有無大括號的區別有無大括號的區別?v例題2.v 下面程序的運行結果是_v#include”stdio.h”v main()vv int I;v for(i=1;i=5;i+)v v if(i%2) printf(“*”);v else continue;v printf(“#”);v v printf(“$n”);v vA.*#*#*#$ B.#*#*#*$ C.*#*#$ D.#*#*$例例 求輸入的十個整數中正整數的個數及其和與平均值求輸入的十個整數中正整數的個數及其和與平均值

25、#include main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4輸出輸出pi分子:分子:1 1,-1-1, 1 1,-1-1分母:分母:1 1, 3 3, 5 5, 776.9 程序舉例v/*c5_11.c*/v#include v#include vmain()v int s;v float n,t,pi;v t=1; pi=0; n=1.0; s=1;v while(fabs(t)=1e-6)v pi=pi+t;v n=n+2;v s=

26、-s;v t=s/n;v v pi=pi*4;v printf(pi=%10.6fn,pi);v71513114例例6.6 用用 公式求公式求的近似值,直到最后一的近似值,直到最后一項的絕對值小于項的絕對值小于10-6為止為止 例例6.7 求求Fibonacci數列:數列:1,1,2,3,5,8,的前的前40個數個數。 F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3)1534233159710946750255142293524578241578171 18 85555377377258425841771117711121393121393832040832040570288757

溫馨提示

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

評論

0/150

提交評論