第04章-控制結(jié)構(gòu)_第1頁
第04章-控制結(jié)構(gòu)_第2頁
第04章-控制結(jié)構(gòu)_第3頁
第04章-控制結(jié)構(gòu)_第4頁
第04章-控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第第4章章 控制結(jié)構(gòu)控制結(jié)構(gòu)程序的基本控制結(jié)構(gòu)程序的基本控制結(jié)構(gòu)表達(dá)式語句表達(dá)式語句函數(shù)調(diào)用語句函數(shù)調(diào)用語句空語句空語句復(fù)合語句復(fù)合語句if語句、語句、if-else語句、語句、switch語句語句while語句、語句、do-while語句、語句、for語句語句continue語句、語句、break語句、語句、goto語句、語句、return語句語句2程序的基本控制結(jié)構(gòu)程序的基本控制結(jié)構(gòu)順序結(jié)構(gòu):常用的語句有表達(dá)式語句和順序結(jié)構(gòu):常用的語句有表達(dá)式語句和 復(fù)合語句。復(fù)合語句。選擇結(jié)構(gòu):選擇結(jié)構(gòu):if語句、語句、if-else語句、語句、 switch語句。語句。循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu):while

2、語句、語句、do-while語句、語句、 for語句。語句。其它:空語句、其它:空語句、continue語句、語句、break語句語句 、goto語句、語句、return語句語句。3表達(dá)式語句表達(dá)式語句表達(dá)式語句的形式如下:表達(dá)式語句的形式如下: 表達(dá)式表達(dá)式; 表達(dá)式語句表達(dá)式語句示例:示例:a = a + 3;/ 賦值語句賦值語句x = y = z = 0; / 多重賦值語句多重賦值語句t = 2,t + x + a; / 逗號表達(dá)式語句逗號表達(dá)式語句z = i j ? x : x + y ;/ 條件表達(dá)式語句條件表達(dá)式語句f1(); /函數(shù)調(diào)用語句且函數(shù)調(diào)用語句且f1f1有返回值有返回值

3、x1 = exp(x); / 函數(shù)表達(dá)式語句,計(jì)算函數(shù)表達(dá)式語句,計(jì)算 exx2 = pow(x, y); /函數(shù)表達(dá)式語句,計(jì)算函數(shù)表達(dá)式語句,計(jì)算xy其功能是計(jì)算號前表達(dá)式的結(jié)果4函數(shù)調(diào)用語句函數(shù)調(diào)用語句函數(shù)調(diào)用語句的形式如下:函數(shù)調(diào)用語句的形式如下: 函數(shù)調(diào)用函數(shù)調(diào)用 ; 如前例所講的如前例所講的 average函數(shù)函數(shù) 的調(diào)用。的調(diào)用。注:對有返回值的函數(shù)調(diào)用所構(gòu)成的語句實(shí)際注:對有返回值的函數(shù)調(diào)用所構(gòu)成的語句實(shí)際上也是表達(dá)式語句上也是表達(dá)式語句5空語句空語句空語句的形式如下:空語句的形式如下: ; /僅僅起到標(biāo)識作用僅僅起到標(biāo)識作用表達(dá)式語句和空語句表達(dá)式語句和空語句示例:示例:a

4、= a + 3;/ 賦值語句賦值語句; / 空語句空語句6復(fù)合語句復(fù)合語句 復(fù)合語句的語法定義如下:復(fù)合語句的語法定義如下: 復(fù)合語句復(fù)合語句示例:示例:a = a + 3; x = y = z = 0; t = 2,t + x + a; z = i j ? x : x + y ;7【例【例4_1】 計(jì)算圓的周長和面積。計(jì)算圓的周長和面積。#include #include #define PI 3.14int main()double radius, area; /說明語句說明語句 radius = 3.0 ; double perimeter; /說明語句說明語句 perimeter =

5、PI * 2 * radius; cout The perimeter is : “ perimeter n ; /復(fù)合語句復(fù)合語句 area = PI * pow(radius,2); cout The area of the circle is : “ area n ; return 0;8if 語句語句 一般形式為一般形式為: if ( ) 可以是任意表達(dá)式可以是任意表達(dá)式 (一般為邏輯表達(dá)式)(一般為邏輯表達(dá)式)ifif語句語句示例:示例: if (grade=60) cout passed n;語義:語義:計(jì)算計(jì)算的值,若非零,的值,若非零,則執(zhí)行則執(zhí)行 ,然后按順序繼續(xù)執(zhí)行,然后按

6、順序繼續(xù)執(zhí)行ifif語語句的下一條語句(有例外)。否則,跳過句的下一條語句(有例外)。否則,跳過 ,直接執(zhí)行,直接執(zhí)行ifif語句的下一條語句。語句的下一條語句。if (grade60) return;cout passed n;9if-else 語句語句(1)(1) 一般形式為一般形式為: if ( ) else注:注:else和和必須可分離,即在有些情況下必須可分離,即在有些情況下else和和之間的空格或換行符是必須的之間的空格或換行符是必須的10qif-else 語句示例: if (grade = 60) cout Passed !n; else cout Failed !n;(錯(cuò):el

7、secout 20|x-10) if(yx)Printf(“Good”); else printf(“bad”);解釋1: 解釋2: 12測試13if-else 語句語句( (3 3) ) qif 或if-else的嵌套: if 或if-else 中嵌套 if 或if-else if(grade=90)printf(“A”); else if (grade=80)printf(“B”); else if (grade=70)printf(“C”); else if (grade=60)printf(“D”); else printf(“F”);1415switch switch 語句語句一般形

8、式一般形式switch ( ) case : case : case : default: 多個(gè)多個(gè)case 分支和可選的分支和可選的 default 分支分支的值為整數(shù)類型(的值為整數(shù)類型(int,char,)每個(gè)每個(gè)的最后一個(gè)語句一般為的最后一個(gè)語句一般為break語語句句,每個(gè)每個(gè)也可以為空也可以為空switch 語句(1)16falsetrue計(jì)算條件表達(dá)式的值計(jì)算條件表達(dá)式的值條件表達(dá)式的值條件表達(dá)式的值 = 常量表達(dá)式常量表達(dá)式1語句序列語句序列1falsetrue條件表達(dá)式的值條件表達(dá)式的值 = 常量表達(dá)式常量表達(dá)式2語句序列語句序列2falsetrue條件表達(dá)式的值條件表達(dá)式的

9、值 = 常量表達(dá)式常量表達(dá)式n語句序列語句序列n語句序列語句序列n+1switch 語句(語句(2)17【例【例4_7】用】用switch語句實(shí)現(xiàn)成績轉(zhuǎn)換語句實(shí)現(xiàn)成績轉(zhuǎn)換 #include int main() int score;scorePhrase; cout score; if (score 100) cout The score is illegal!; return 0; /不是最好的實(shí)現(xiàn),有多出口不是最好的實(shí)現(xiàn),有多出口 / 計(jì)算分?jǐn)?shù)段計(jì)算分?jǐn)?shù)段 scorePhrase = score / 10;18/ 判斷并輸出等級判斷并輸出等級switch ( scorePhrase )ca

10、se 10: case 9: coutGrade is A. endl; break; case 8: coutGrade is B. endl; break; case 7: coutGrade is C. endl; break; case 6: coutGrade is D. endl; break;19 / 判斷并輸出等級判斷并輸出等級 case 0: case 1: case 2: case 3: case 4: case 5: coutGrade is E. endl; break; default: coutThe score is illegal! endl; return 0

11、;2020循環(huán)型程序設(shè)計(jì)概述C+ 語言可實(shí)現(xiàn)循環(huán)的語句:l用goto 和 if 構(gòu)成循環(huán)lwhile 語句ldo while 語句lfor 語句goto語句及用goto構(gòu)成循環(huán)vgoto語句一般格式: goto 語句標(biāo)號語句標(biāo)號; .標(biāo)號:語句標(biāo)號:語句; 2121v功能:無條件轉(zhuǎn)移語句v說明:l不能用整數(shù)作標(biāo)號l只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一l只能加在可執(zhí)行語句前面l限制使用goto語句2222例 用if 和goto語句構(gòu)成循環(huán),求1001nn#include main() int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop;

12、coutsum;sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體2323課堂練習(xí)課堂練習(xí):從鍵盤輸入一組數(shù)據(jù),以0結(jié)束輸入,求數(shù)據(jù)和#include main() int number,sum=0; read_loop: cinnumber; if(!number) goto print_sum; sum+=number; goto read_loop;print_sum: cout“The total sum =“sum;2424while語句v一般形式:while(表達(dá)式) 循環(huán)體語句;v執(zhí)行流程:

13、expr循環(huán)體假(0)真(非0)whilev特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體v說明:l循環(huán)體有可能一次也不執(zhí)行l(wèi)循環(huán)體可為任意類型語句l下列情況,退出while循環(huán)u條件表達(dá)式不成立(為零)u循環(huán)體內(nèi)遇break,return,gotol無限循環(huán): while(1) 循環(huán)體;2525例 用while循環(huán)求 1001nn#include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; coutsum;循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體2626課堂練習(xí) 顯示110的平方#include void main() int i=1; wh

14、ile(i=10) couti*i=i*iendl; i+; 1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=1002727dowhile語句v一般形式:do 循環(huán)體語句; while(表達(dá)式);v執(zhí)行流程:do循環(huán)體expr假(0)真(非0)whilev特點(diǎn):先執(zhí)行循環(huán)體, 后判斷表達(dá)式v說明:l至少執(zhí)行一次循環(huán)體ldowhile可轉(zhuǎn)化成while結(jié)構(gòu)2828例例 用用dowhile循環(huán)求循環(huán)求 1001nn#include main() int i,sum=0; i=1; do sum+=i;i+; while(i=100)

15、; coutsum;2929例 while和dowhile比較#include void main() int i,sum=0; i=0; do sum+=i;i+; while(i=10); coutsum;#include void main() int i,sum=0; i=0; while(i=10) sum+=i;i+; coutsum;求:1+2+3+10的值3030for語句v一般形式:for(expr1 ; expr2 ; expr3) 循環(huán)體語句;v執(zhí)行流程:expr2循環(huán)體假(0)真(非0)forexpr1expr33131例 用for循環(huán)求 1001nn#include

16、main() int i,sum=0; for(i=1;i=100;i+) sum+=i; coutsum;3232v說明:lfor語句中expr1, expr2 ,expr3 類型任意,都可省略,但分號“;”不可省l無限循環(huán): for(;)lfor語句可以轉(zhuǎn)換成while結(jié)構(gòu)expr1;while(expr2)循環(huán)體語句;expr3;3333#include main( ) int i=0; for(i=0;i10;i+) couta+i;運(yùn)行結(jié)果:abcdefghij#includevoid main( ) int i=0; for(;i10;i+) couta+i;#includevoi

17、d main( ) int i=0; for(;i10;) couta+(i+); #includevoid main( ) int i=0; for(;i10;couta+i,i+) ;3434循環(huán)的嵌套v三種循環(huán)可互相嵌套,層數(shù)不限v外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉v嵌套循環(huán)的執(zhí)行流程(1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)v嵌套循環(huán)的跳轉(zhuǎn)禁止:l從外層跳入內(nèi)層l跳入同層的

18、另一循環(huán)3535例例 循環(huán)嵌套,輸出九九表循環(huán)嵌套,輸出九九表1234567891234567892468101214161836912151821242791827364554637281.ij#include main() int i,j; for(i=1;i10;i+) coutsetw(4)i; coutendl; cout“=n”; for(i=1;i10;i+) for(j=1;j10;j+) if (j=9) coutsetw(4)i*jendl; else coutsetw(4)i*j; 3636i10Cout假(0)真(非0)i=1j+j=1j10真(非0)假(0)i+for

19、(i=1;i10;i+) for(j=1;j10;j+) if (j=9) coutsetw(4)i*jendl; else coutsetw(4)i*j; 外循環(huán)內(nèi)循環(huán)37371. 嵌套的循環(huán)控制變量不應(yīng)同名,以免造成混亂。2. 內(nèi)循環(huán)變化快,外循環(huán)變化慢。例如:for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%ld*%1d=%2d ,i,j,i*j); printf(n); 3. 循環(huán)體的確定要慎重。循環(huán)嵌套的說明循環(huán)嵌套的說明:3838while(表達(dá)式) 循環(huán)體語句do 循環(huán)體語句while(表達(dá)式); for(表達(dá)式1;表達(dá)式2;表達(dá)式3;) 循環(huán)體語句

20、循環(huán)控制條件循環(huán)控制條件也可在循環(huán)體內(nèi)改變循環(huán)控制變量值改變循環(huán)控制變量值循環(huán)控制變量循環(huán)控制變量初始化初始化也可在for前1. 不提倡用不提倡用goto構(gòu)成循環(huán)。構(gòu)成循環(huán)。2. 關(guān)于循環(huán)的控制:關(guān)于循環(huán)的控制:39393. 一種循環(huán)可以解決的問題,使用另外兩種同樣可行,只是方便程度不同。4. while循環(huán)一般用于循環(huán)次數(shù)不定的情況,for循環(huán)一般用于循環(huán)次數(shù)確定的情況(也可以用于循環(huán)次數(shù)不定的情況),do-while循環(huán)一般用于至少需要執(zhí)行一次的情況。5. for循環(huán)和while循環(huán)是先判斷條件是否為真,再執(zhí)行循環(huán)體,因此,可出現(xiàn)循環(huán)一次也不執(zhí)行的情況;do-while循環(huán)是先執(zhí)行循環(huán)體,

21、再判斷條件是否為真,因此,循環(huán)體至少執(zhí)行一次。6. while循環(huán)、 do-while循環(huán)、 for循環(huán),可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)。4040輔助控制語句4141exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while4242expr2break;.假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;.const 1const 2const ndefaultcase 4343例例 分析下列程序運(yùn)行結(jié)果:注意分析下列程序運(yùn)行

22、結(jié)果:注意break語句的作用語句的作用#include#define PI 3.14159main() int r; float area; for(r=1;r100) break; cout“r=“r“ area=“area; coutendl; 運(yùn)行結(jié)果運(yùn)行結(jié)果 r=1 area=3.14159 r=2 area=12.5664 r=3 area=28.2743 r=4 area=50.2654 r=5 area=78.53974444#include main()char c;while(1) cinc;if(c=a & c=z)cout(char)(c-a+A)endl; e

23、lse break;return 0;4545exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3使用使用for continuefor continue語句完語句完成成1-1001-100中偶數(shù)的求和中偶數(shù)的求和4646功能:功能: 從鍵盤輸入個(gè)整數(shù),求正整數(shù)的個(gè)數(shù),和以及其平均值從鍵盤輸入個(gè)整數(shù),求正整數(shù)的個(gè)數(shù),和以及其平均值 4747Ch5_6.c為止最后一項(xiàng)的絕對值小于的近似值,直到公式求用例610171513114:1n程序設(shè)計(jì)舉例4848為止最后一

24、項(xiàng)的絕對值小于的近似值,直到公式求用例610171513114:1n分子:1,-1,1,-1分母:1,3,5,7,.s-分子n-分母t-右邊某一項(xiàng)值pi-右邊所有項(xiàng)的和n=1;pi=0;s=1;t=s/n;while( )pi=pi+t;s=-s; n=n+2 t=s/n;4949#include #include main() int s; /分子分子 float n,t,pi;/n分母,分母,t每一項(xiàng)的值,每一項(xiàng)的值,pi等式右邊的值等式右邊的值 t=1; pi=0; n=1.0; s=1; while(fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n;

25、pi=pi*4; cout“pi=”piendl;5050#include #include main() int m,i,k; cinm; k=sqrt(m); for(i=2;i=m) coutm“ 是素?cái)?shù)n; else coutm“ 不是素?cái)?shù)n;5151例例3 打印圖形:打印圖形:分析:1.每行的起始位置不同,空格數(shù):5-row2.每行的字符數(shù)不同,字符數(shù):2*row-13.用二重循環(huán)實(shí)現(xiàn): 外循環(huán)控制輸出行數(shù); 兩個(gè)并列內(nèi)循環(huán)控制輸出每行的空格數(shù)和字符數(shù)main( )int row, col; for(row=1;row=5;row+) for (col=1;col=5-row;col

26、+)printf( ); for (col=1;col=2*row-1;col+)printf(*); printf(n); 5252課堂練習(xí):課堂練習(xí):求求Fibonacci數(shù)列:數(shù)列:1,1,2,3,5,8,的前的前40個(gè)數(shù)個(gè)數(shù),并按下列格式輸出并按下列格式輸出)3()2(12) 1(1121nFFFnFnFnnn 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269

27、 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 1023341555353#include #include #include main() int n,f1,f2,f; f1=1,f2=1; for(n=1;n=40;n+) if(n=1)f=f1; else if(n=2) f=f2; else f=f1+f2; f1=f2; f2=f; coutsetw(12)f; if(n%4=0) coutendl; 核心算法核心算法難點(diǎn):輸出格式難點(diǎn):輸出格式每行四個(gè)數(shù),因每行四個(gè)數(shù),因此當(dāng)此當(dāng)n%4=0時(shí),

28、輸出回車換時(shí),輸出回車換行符行符5454搬磚問題:搬磚問題: 36塊磚塊磚36人搬,男搬人搬,男搬4女搬女搬3、小孩兩個(gè)、小孩兩個(gè)抬抬1磚,要求一次全搬完,問男、女、小孩各若干?磚,要求一次全搬完,問男、女、小孩各若干?分析:設(shè)男人、女人、小孩人數(shù)各為men,women,children,則可得如下方程: 4*men+3*women+children/2=36 men+women+children=36下面考慮如何尋找另外的約束條件: 按常識,men、women、children都應(yīng)為正整數(shù),且它們的取值范圍分別應(yīng)為: men:08 (假設(shè)36塊磚全由men搬,最多需8人) women:011

29、(假設(shè)36塊磚全由women搬,最多需11人) children:036(假設(shè)36塊磚全由children搬,最多為36人)窮舉法5555本題的細(xì)化過程如下: 首先從1開始,列舉men的各個(gè)可能值,在每個(gè)men值下找滿足兩個(gè)方程的一組解。 算法如下: for(men=1;men=8;men+) s1:找滿足兩個(gè)方程的解的women,children s2:輸出一組解 下面進(jìn)一步用細(xì)化法來表現(xiàn)S1: for(women=1;women=11;women+) s1.1 找滿足方程的一個(gè)children s1.2 輸出一組解 搬磚問題:搬磚問題: 36塊磚塊磚36人搬,男搬人搬,男搬4女搬女搬3、小孩兩個(gè)、小

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論