




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計v本章學習要點:v深入掌握各種循環(huán)語句的要點和使用方法v深入掌握break和continue語句在循環(huán)語句中的作用.v能夠靈活地運用各種循環(huán)語句進行綜合程序設(shè)計u循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu):l當型循環(huán)結(jié)構(gòu)當型循環(huán)結(jié)構(gòu)l直到型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)PA假假真真當當P為真為真AAP假假真真A直到直到P為為假假注:注:A可以是一個簡單語句,也可以是一個基本結(jié)構(gòu)可以是一個簡單語句,也可以是一個基本結(jié)構(gòu)6.1 概述C語言可實現(xiàn)循環(huán)結(jié)構(gòu)的語句:v用goto 和 if 構(gòu)成循環(huán)vwhile 語句vdo while 語句vfor 語句goto語句一般格式:goto 語句標號語句標號;標號標號
2、:語句語句; u功能:無條件轉(zhuǎn)移語句功能:無條件轉(zhuǎn)移語句u說明:說明:只能加在可執(zhí)行語句前面只能加在可執(zhí)行語句前面限制使用限制使用gotogoto語句語句6.2 goto語句以及用goto語句構(gòu)成循環(huán)語句標號語句標號:命名命名規(guī)則與變量名相規(guī)則與變量名相同同,有字母有字母,數(shù)字數(shù)字,下劃線開頭下劃線開頭,第第一個字符必須是一個字符必須是字母或者下劃線字母或者下劃線.例例 用用if 和和goto語句構(gòu)成循環(huán),求語句構(gòu)成循環(huán),求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); 循環(huán)初值循環(huán)初值循環(huán)終值循環(huán)終值循環(huán)變量增值循環(huán)變量增值循環(huán)條件循環(huán)條件循環(huán)體循環(huán)體分析:分析: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(表達式表達式) 循環(huán)體語句循環(huán)體語句u執(zhí)行流程執(zhí)行流程:表達式表達式循環(huán)體循環(huán)體假假(0)真真(非非0)while6.3 while語句u特點特點:先判斷表達式,后執(zhí)行循環(huán)體(當型):先判斷表達式,后執(zhí)行循環(huán)體(當型)u說明說明:循環(huán)體循環(huán)體有可能有可能一次也不執(zhí)行
4、一次也不執(zhí)行循環(huán)體可為任意類型語句循環(huán)體可為任意類型語句下列情況,退出下列情況,退出whilewhile循環(huán)循環(huán):l條件表達式不成立(為零)條件表達式不成立(為零)l循環(huán)體內(nèi)遇循環(huán)體內(nèi)遇break,return,gotobreak,return,goto無限循環(huán)無限循環(huán): : while(1) while(1) 循環(huán)體循環(huán)體; ;例例 用用while循環(huán)求循環(huán)求 1001nn /*c5_3.c*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環(huán)初值循環(huán)初值循環(huán)終值循環(huán)終值循環(huán)變量增值
5、循環(huán)變量增值循環(huán)條件循環(huán)條件循環(huán)體循環(huán)體例例 顯示顯示110的平方的平方/*c5_4.c*/#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 運行結(jié)果:運行結(jié)果: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、環(huán)的次數(shù)是_vA.無限次 vB.有語法錯誤,不能執(zhí)行C.一次也不執(zhí)行vD.執(zhí)行一次改成改成i+1,會會出現(xiàn)什么樣出現(xiàn)什么樣的情況的情況?u一般形式:一般形式:do 循環(huán)體語句循環(huán)體語句 while(表達式表達式);u執(zhí)行流程:執(zhí)行流程: do循環(huán)體循環(huán)體表達式表達式假假(0)真真(非非0)while6.4 do-while語句此處此處有有;u特點:先執(zhí)行循環(huán)體,后判斷表達式(直到型)特點:先執(zhí)行循環(huán)體,后判斷表達式(直到型)u說明說明:至少執(zhí)行一次循環(huán)體至少執(zhí)行一次循環(huán)體do-whiledo-while可轉(zhuǎn)化成可轉(zhuǎn)化成whilewhile結(jié)構(gòu)結(jié)構(gòu)表達式循環(huán)體假(0)真(非0)循環(huán)體While循
7、環(huán)例例 用用dowhile循環(huán)求循環(huán)求 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);結(jié)論:當結(jié)論:當 while后的表達式第一次的值為后的表達式第一次的值為“真真”時,兩種結(jié)果相同,否則不同。時,兩種結(jié)果相同,否則不同。1.比較輸出結(jié)果.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該程序的執(zhí)行結(jié)果是_vA.321 B.23 C.不輸出任何內(nèi)容D.陷入死循環(huán)例 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(“年數(shù)=%dn”,i);vPrintf(“小明的年齡=%dn”,n+i);vPrintf(“母親的年齡=%dn”,m+i);vv課后作業(yè) v1.編寫一個程序,用來計算并顯示出2到30的偶數(shù)的和.v2.:每個蘋果0.8元,第一天買2個蘋果,從第二天開始,每一天買前一天的2倍,直至購買的蘋果數(shù)達到不超過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 )循環(huán)體語句循環(huán)體語句u執(zhí)行流程:執(zhí)行流程:表達式表達式2循環(huán)體循環(huán)體假假(0)真真(非非0)for表達式表達式1表達式表達式36.5 for語句1.1.先求解表達式先求解表達式1 1;2.2.求解表達式求解表達式2 2,若其,若其值為
12、真值為真( (非非0)0),則執(zhí),則執(zhí)行循環(huán)體的內(nèi)容,行循環(huán)體的內(nèi)容,然后執(zhí)行第然后執(zhí)行第3 3步。若步。若為假為假(0)(0),則結(jié)束循,則結(jié)束循環(huán),執(zhí)行環(huán),執(zhí)行forfor語句下語句下面一條語句。面一條語句。3.3.若表達式為真,執(zhí)若表達式為真,執(zhí)行指定的語句后,行指定的語句后,求解表達式求解表達式3 3。4.4.返回第返回第2 2步執(zhí)行。步執(zhí)行。此處無此處無;uforfor語句一般應(yīng)用形式語句一般應(yīng)用形式:for( 循環(huán)變量賦初值循環(huán)變量賦初值; 循環(huán)條件循環(huán)條件; 循環(huán)變量增值循環(huán)變量增值) 循環(huán)體語句循環(huán)體語句 u說明:說明: forfor語句中語句中表達式表達式1 1、表達式、表達
13、式2 2、表達式、表達式3 3類型任意,都類型任意,都可省略,但分號;不可省可省略,但分號;不可省 無限循環(huán)無限循環(huán): for(;): for(;) forfor語句可以轉(zhuǎn)換成語句可以轉(zhuǎn)換成whilewhile結(jié)構(gòu)結(jié)構(gòu)表達式表達式1;1;while(while(表達式表達式2)2) 循環(huán)體語句;循環(huán)體語句; 表達式表達式3;3; 例例 用用for循環(huán)求循環(huán)求 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); 運行結(jié)果:運行結(jié)果: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省略循環(huán)體省略循環(huán)體如果加上如果加上i+結(jié)果結(jié)果?/*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為為逗號表達式逗號表達式結(jié)論:結(jié)論:for語句的功能強大。語句的功能強大。如果要統(tǒng)計輸入的如果要統(tǒng)計輸入的字符的個數(shù)該如何字符的個數(shù)該如何修改程序修改程序?v2.一位百萬富翁遇到一陌生人,陌生人找他談一個換錢的計劃,該計劃如下,我每天給你10萬元,而你一天只需給我一分錢,第二天仍給你10萬,你給我二分錢,第三天我仍給你10萬,你給我四分
16、錢你每天給我的錢是前一天的兩倍,直到滿一個月(30),百萬富翁很高興,欣然接受了這個契約,請編寫一個程序計算這一個月中陌生人給了百萬富翁多少錢,百萬富翁給了陌生人多少錢.v設(shè)變量s,和t分別記錄百萬富翁給陌生人的錢,和陌生人給百萬富翁的錢.v 第一天:s=1,t=100000;k=1;v然后用for循環(huán),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三種循環(huán)可互相嵌套三種循環(huán)可互相嵌套, ,層數(shù)不限層數(shù)不限u外層循環(huán)可包含兩個以上內(nèi)循環(huán)外層循環(huán)可包含兩個以上內(nèi)循環(huán), ,但不能相互交叉但不能相互交叉u嵌套循環(huán)的執(zhí)行流程嵌套循環(huán)的執(zhí)行流程(1)
18、 while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() . 內(nèi)循環(huán)內(nèi)循環(huán)外循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)u嵌套循環(huán)的跳轉(zhuǎn)嵌套循環(huán)的跳轉(zhuǎn) 禁止:禁止:從外層跳入內(nèi)層從外層跳入內(nèi)層跳入同層的另一循環(huán)跳入同層的另一循環(huán)向上跳轉(zhuǎn)向上跳轉(zhuǎn)6.6 循環(huán)的嵌套例 循環(huán)嵌套,輸出九九表12345678912436991827364554637281.例例 循環(huán)嵌套,輸出九九表循環(huán)嵌套,輸出九九表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+外循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)Printf(“n”);v例題:v 輸出如圖的圖案(星號個數(shù)與空格的個數(shù))v *v *v *v*6.7 幾種循環(huán)的比較1.三種循環(huán)均可處理同一問題;2.for和while語句為先判斷后執(zhí)行,do-while語句則先執(zhí)行后判斷;3.do-while和while 語句
20、多用于循環(huán)次數(shù)不定的情況,循環(huán)次數(shù)確定的用for語句更方便;4.do-while語句更適合第一次肯定執(zhí)行的情況;5.do-while和while語句只有一個表達式,用于控制循環(huán)是否進行。for語句有三個表達式,不僅可以控制循環(huán)是否進行,而且能為循環(huán)變量賦初值及不斷修改其值。故for語句功能更強,更靈活。 v6.8.1 break語句一般形式:break;功能:在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關(guān)體說明:vbreak只能終止并跳出最近一層的結(jié)構(gòu)vbreak不能用于循環(huán)語句和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舉例:舉例:循環(huán)輸入字符,如果是小寫字母則循環(huán)輸入字符,如果是小寫字母則轉(zhuǎn)換成大寫字母轉(zhuǎn)換成大寫字母,直至輸直至輸入非入非小寫小寫字母字母字符。字符。/*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;功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進行下一次是否執(zhí)行循環(huán)體的判斷說明:v僅用于循環(huán)語句中vcontinue 語句僅結(jié)束本次循環(huán),但break語句則是結(jié)束整個循環(huán)過程。真真(非非0)docontinue;.表達式表達式假假(0)while表達式表達式2continue;.假假(0)真真(非非0)for表達式表達式1表達式表達式3表達式表達式continue;假假(0)真真(非非0)whilev1.求300以內(nèi)能被17整除的所有整數(shù).(用continue語句)#includestdio.hvoid main()int
24、 i;for(i=300;i0;i-) if(i%17!=0)continue;printf(“%5d”,i);/有無大括號的區(qū)別有無大括號的區(qū)別?v例題2.v 下面程序的運行結(jié)果是_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.#*#*$例例 求輸入的十個整數(shù)中正整數(shù)的個數(shù)及其和與平均值求輸入的十個整數(shù)中正整數(shù)的個數(shù)及其和與平均值
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數(shù)列:數(shù)列:1,1,2,3,5,8,的前的前40個數(shù)個數(shù)。 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度拆除工程風險評估及應(yīng)急預案
- 2025年度新能源項目場站建設(shè)與運營管理合同
- 2025年度電池儲能系統(tǒng)設(shè)計與集成服務(wù)合同
- 2025年度商業(yè)秘密保護保密勞動合同及保密協(xié)議
- 2025年度城市道路臨時停車位租賃及交通管理合同
- 2025年度彩鋼板隔墻快速安裝服務(wù)合同
- 2025年度體育賽事贊助商提成協(xié)議
- 2025年冷墩鋼合作協(xié)議書
- 如何選擇理財顧問計劃
- 多元文化背景下的藝術(shù)教育計劃
- 電子備課教案(一二年級體育)
- 化學品安全員勞動合同
- 民政局版離婚協(xié)議書模板
- 腎病科血栓性微血管病診療規(guī)范2023版
- 2024年心理咨詢師考試題庫附參考答案(綜合題)
- 六年級英語完形填空60篇含答案及講解
- 銀行零星裝飾維修 投標方案(技術(shù)方案)
- 鎖骨骨折個案護理
- 農(nóng)民專業(yè)合作社財務(wù)報表(三張報表)
- 新時代中小學教師職業(yè)行為十項準則
- 《幼兒園英語口語》
評論
0/150
提交評論