




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第2章章 程序控制結(jié)構(gòu)程序控制結(jié)構(gòu)2.1 順序結(jié)構(gòu)順序結(jié)構(gòu) 2.2 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 2.4 控制轉(zhuǎn)向語(yǔ)句控制轉(zhuǎn)向語(yǔ)句 2.5 程序?qū)嵗绦驅(qū)嵗?2o 按照語(yǔ)句出現(xiàn)的先后順序依次執(zhí)行。按照語(yǔ)句出現(xiàn)的先后順序依次執(zhí)行。2.1 順序結(jié)構(gòu)順序結(jié)構(gòu) 語(yǔ)句語(yǔ)句1語(yǔ)句語(yǔ)句2圖圖2.1 順序結(jié)構(gòu)流程圖順序結(jié)構(gòu)流程圖32.1.1 定義語(yǔ)句定義語(yǔ)句 在在C+C+程序中,一個(gè)標(biāo)識(shí)符(變量名、常程序中,一個(gè)標(biāo)識(shí)符(變量名、常量名、函數(shù)名、對(duì)象名等)在使用之前必須先定量名、函數(shù)名、對(duì)象名等)在使用之前必須先定義。義。定義語(yǔ)句定義語(yǔ)句是在給出其特征同時(shí),并通知編譯是在給出其特征同時(shí),并通知
2、編譯器為其分配存儲(chǔ)空間,而器為其分配存儲(chǔ)空間,而說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句僅告訴編譯器僅告訴編譯器它的存在及其特征。它的存在及其特征。o例如:例如:int x=1,y=2;/定義語(yǔ)句const double PI=3.14159;/定義語(yǔ)句float score303; /定義語(yǔ)句42.1.2 表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句o 形式:形式: ;o 可以進(jìn)行的操作通常包括賦值操作,復(fù)合賦值操可以進(jìn)行的操作通常包括賦值操作,復(fù)合賦值操作,增量、減量操作,函數(shù)調(diào)用操作和輸入輸出作,增量、減量操作,函數(shù)調(diào)用操作和輸入輸出操作。操作。o 例如:例如:n+;-m;abs(x);cinxy;coutx+y;s=x+y;m=n=
3、t;a=10,b=20;z*=w;52.1.3 復(fù)合語(yǔ)句復(fù)合語(yǔ)句o形式:形式: 1 2 n o作用:作用:當(dāng)程序中某個(gè)位置在語(yǔ)法上只允許一條語(yǔ)當(dāng)程序中某個(gè)位置在語(yǔ)法上只允許一條語(yǔ)句,而在語(yǔ)義上要執(zhí)行多條語(yǔ)句才能完成某個(gè)操作句,而在語(yǔ)義上要執(zhí)行多條語(yǔ)句才能完成某個(gè)操作時(shí),需要使用復(fù)合語(yǔ)句時(shí),需要使用復(fù)合語(yǔ)句。例如:例如:if(x=0)if(x=0) couta; couta; coutb; coutb; 62.1.4 空語(yǔ)句空語(yǔ)句o形式:形式: ; o作用:作用: 當(dāng)程序中某個(gè)位置在語(yǔ)法上需要當(dāng)程序中某個(gè)位置在語(yǔ)法上需要一條語(yǔ)句,而在語(yǔ)義上又不一條語(yǔ)句,而在語(yǔ)義上又不 要求執(zhí)行任要求執(zhí)行任何動(dòng)作
4、時(shí),可放上一條空語(yǔ)句。何動(dòng)作時(shí),可放上一條空語(yǔ)句。o一般適用于在循環(huán)語(yǔ)句中做空循環(huán)體一般適用于在循環(huán)語(yǔ)句中做空循環(huán)體o例如:例如: for (m = 0; m1000; m+) ; for (m = 0; m1000; m+) ;72.1.5 基本輸入輸出基本輸入輸出o 在在C+C+中,所有輸入輸出是通過(guò)中,所有輸入輸出是通過(guò)輸入輸出流輸入輸出流來(lái)實(shí)現(xiàn)的。來(lái)實(shí)現(xiàn)的。o 在在C+C+中,將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的流動(dòng)抽中,將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的流動(dòng)抽象為象為“流流”。在。在iostreamiostream庫(kù)中包含一個(gè)標(biāo)準(zhǔn)輸入流庫(kù)中包含一個(gè)標(biāo)準(zhǔn)輸入流對(duì)象對(duì)象cincin和一個(gè)標(biāo)準(zhǔn)輸出流
5、對(duì)象和一個(gè)標(biāo)準(zhǔn)輸出流對(duì)象coutcout,分別用來(lái)實(shí)現(xiàn),分別用來(lái)實(shí)現(xiàn)從鍵盤(pán)讀取數(shù)據(jù),以及將數(shù)據(jù)在屏幕上輸出。從鍵盤(pán)讀取數(shù)據(jù),以及將數(shù)據(jù)在屏幕上輸出。o 要使用要使用cincin和和coutcout,需要在,需要在C+C+程序開(kāi)頭加上如下包程序開(kāi)頭加上如下包含命令:含命令:#include #include / / 新標(biāo)準(zhǔn)中的頭文件名新標(biāo)準(zhǔn)中的頭文件名using namespace std;using namespace std; / / 引入引入stdstd名字空間中的標(biāo)識(shí)符名字空間中的標(biāo)識(shí)符81. 1. 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流cincino cincin負(fù)責(zé)從鍵盤(pán)讀取數(shù)據(jù),使用負(fù)責(zé)從鍵盤(pán)讀取數(shù)
6、據(jù),使用提取運(yùn)算符提取運(yùn)算符“”就可以將鍵盤(pán)鍵入的數(shù)據(jù)讀入到變量中。就可以將鍵盤(pán)鍵入的數(shù)據(jù)讀入到變量中。o 語(yǔ)法格式:語(yǔ)法格式: cincin變量變量11變量變量22變量變量n;n; 變量可以是任意數(shù)據(jù)類型,輸入時(shí)各個(gè)數(shù)據(jù)之間變量可以是任意數(shù)據(jù)類型,輸入時(shí)各個(gè)數(shù)據(jù)之間用空格鍵、用空格鍵、TabTab鍵或鍵或EnterEnter鍵分隔。鍵分隔。o 例如:例如:int x,y;int x,y;cinxy;cinxy;鍵盤(pán)上輸入:鍵盤(pán)上輸入:5 588x x5鍵盤(pán)鍵盤(pán)y y8鍵盤(pán)鍵盤(pán)92. 2. 標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流coutcouto 負(fù)責(zé)將數(shù)據(jù)輸出到屏幕上,使用負(fù)責(zé)將數(shù)據(jù)輸出到屏幕上,使用插入運(yùn)算
7、符插入運(yùn)算符“”就可以將數(shù)據(jù)顯示在屏幕上當(dāng)前光標(biāo)所就可以將數(shù)據(jù)顯示在屏幕上當(dāng)前光標(biāo)所在位置。在位置。o 語(yǔ)法格式:語(yǔ)法格式: coutcout表達(dá)式表達(dá)式11表達(dá)式表達(dá)式22表達(dá)式表達(dá)式n;n; 表達(dá)式可以是任意類型的,數(shù)據(jù)輸出的格式由表達(dá)式可以是任意類型的,數(shù)據(jù)輸出的格式由系統(tǒng)自動(dòng)決定。系統(tǒng)自動(dòng)決定。101112【例例2.12.1】 cout cout應(yīng)應(yīng)用示例用示例#include #include using namespace std;using namespace std;int main()int main() int x=12,y=83;int x=12,y=83; double
8、 pai_1=3.14159265;double pai_1=3.14159265; float pai_2=3.141f; float pai_2=3.141f; char ch1=a,ch2=b;char ch1=a,ch2=b; bool ok=true; bool ok=true; coutx=xendl;coutx=xendl; couty=yendl; couty=yendl; coutpai_1=pai_1,pai_2=pai_2endl;coutpai_1=pai_1,pai_2=pai_2endl; coutch1=ch1,ch2=ch2endl;coutch1=ch1,ch
9、2=ch2endl; coutok=okendl; coutok=okendl; cout!ok=!okendl; cout!ok=!okendl; return 0; return 0; x=12y=83pai_1=3.14159,pai_2=3.141ch1=a,ch2=bok=1!ok=013【例【例2.2】 使用格式控制符輸出數(shù)據(jù)使用格式控制符輸出數(shù)據(jù)#include #include #include #include using namespace std;using namespace std;int main()int main() int a=35;int a=35; dou
10、ble b=21.3456789; double b=21.3456789; cout1234567890123endl; cout1234567890123endl; coutdeca hexa octaendl; coutdeca hexa octaendl; coutbendl; coutbendl; coutsetprecision(4)bendl; coutsetprecision(4)bendl; coutsetw(10)bendl; coutsetw(10)bendl; coutsetw(10)setfill( coutsetw(10)setfill(* *)bendl;)ben
11、dl; coutsetiosflags(ios:scientific)bendl;coutsetiosflags(ios:scientific)bendl; coutsetprecision(3)bendl;coutsetprecision(3)bendl; coutsetprecision(2)bendl; coutsetprecision(2)bb,則將,則將a、b交換,否則不交換。兩數(shù)交換,否則不交換。兩數(shù)交換可采用借助于第三個(gè)變量間接交換的方法交換可采用借助于第三個(gè)變量間接交換的方法 if(ab)t=a;a=b;b=t;17#include #include using namespa
12、ce std;using namespace std;int main()int main() int a,b,t;int a,b,t;coutcout請(qǐng)輸入兩個(gè)整數(shù)請(qǐng)輸入兩個(gè)整數(shù)a,b:endl;a,b:ab; cinab; if(ab)if(ab)t=a;a=b;b=t; t=a;a=b;b=t; coutabendl;coutabendl; return 0; return 0; a=a+b;b=a-b;a=a-b; 請(qǐng)輸入兩個(gè)整數(shù)請(qǐng)輸入兩個(gè)整數(shù)a,b:85 404085a=ab;b=ab;a=ab; 182 2if- elseif- else語(yǔ)句(雙分支)語(yǔ)句(雙分支) if( if(
13、表達(dá)式表達(dá)式) ) 語(yǔ)句語(yǔ)句1 1 else else 語(yǔ)句語(yǔ)句2 2truetrue表達(dá)表達(dá)式式語(yǔ)句語(yǔ)句1 1falsefalse語(yǔ)句語(yǔ)句2 2雙分支雙分支ifif語(yǔ)句流程圖語(yǔ)句流程圖19【例【例2.4】輸入一個(gè)年份,判斷是否為閏年?!枯斎胍粋€(gè)年份,判斷是否為閏年。o 分析分析 閏年的年份可以被閏年的年份可以被4整除而不能被整除而不能被100整除,整除,或者能被或者能被400整除。整除。 #include using namespace std;int main() int year; coutyear; if(year%4=0 & year%100 !=0)|(year%400=0
14、) coutyear年是閏年年是閏年endl; else coutyear年不是閏年年不是閏年endl; return 0;203 3if- else if if- else if 語(yǔ)句(多分支)語(yǔ)句(多分支)if(if(表達(dá)式表達(dá)式1)1) 語(yǔ)句語(yǔ)句1 1 else if( else if(表達(dá)式表達(dá)式2) 2) 語(yǔ)句語(yǔ)句2 2 else if ( else if (表達(dá)式表達(dá)式n)n) 語(yǔ)句語(yǔ)句n n else else 語(yǔ)句語(yǔ)句n+1n+1falsfalse efalsfalse efalsfalse et r ut r ue et r ut r ue e表達(dá)式表達(dá)式1 1表達(dá)式表達(dá)式2
15、 2表達(dá)式表達(dá)式n n語(yǔ)句語(yǔ)句n n語(yǔ)句語(yǔ)句n+1n+1語(yǔ)句語(yǔ)句2 2語(yǔ)句語(yǔ)句1 1t r ut r ue e21【例例2.52.5】根據(jù)x的值,計(jì)算分段函數(shù)y的值。y的計(jì)算公式為:5cos(79 )lnxxexyxxx(x x0 0)(00 x x1515)(1515x x3030)(x x3030)22#include #include #include #include using namespace std;using namespace std;int main()int main() double x,y; double x,y; cout coutx; cinx; if(x0)
16、if(x0) y=fabs(x); y=fabs(x); else if(x15) else if(x15) y=exp(x) y=exp(x)* *cos(cos(x x); ); else if(x30)else if(x30) y=pow(x,5); y=pow(x,5); else else y=(7+9 y=(7+9* *x)x)* *log(x); log(x); couty=yendl; couty=y0) if(y0) coutx與與y均大于均大于0; else coutx大于大于0,y小于等于小于等于0;v注意:注意:如何使之與如何使之與第一個(gè)第一個(gè)ifif配配對(duì)?對(duì)?25【
17、例【例2.62.6】從鍵盤(pán)上輸入兩個(gè)字符,比較其大小,輸出大】從鍵盤(pán)上輸入兩個(gè)字符,比較其大小,輸出大于、等于和小于的判斷結(jié)果。于、等于和小于的判斷結(jié)果。#include #include using namespace std;using namespace std;int main()int main() char ch1,ch2;char ch1,ch2;coutcoutch1ch2;cinch1ch2;if(ch1!=ch2)if(ch1!=ch2) if(ch1ch2)if(ch1ch2) coutch1 coutch1大于大于ch2endl;ch2endl; else else c
18、outch1 coutch1小于小于ch2endl;ch2endl;elseelsecoutch1coutch1等于等于ch2endl;ch2endl; return 0; return 0; 請(qǐng)輸入兩個(gè)字符:請(qǐng)輸入兩個(gè)字符:h dh大于大于d請(qǐng)輸入兩個(gè)字符:請(qǐng)輸入兩個(gè)字符:X YX小于小于Y請(qǐng)輸入兩個(gè)字符:請(qǐng)輸入兩個(gè)字符:& &等于等于&262.2.2 switch2.2.2 switch語(yǔ)句語(yǔ)句switch (switch (表達(dá)式表達(dá)式) ) case case 常量表達(dá)式常量表達(dá)式1: 1: 語(yǔ)句語(yǔ)句組組1 1 case case 常量表達(dá)式常量表達(dá)式2: 2:
19、 語(yǔ)句語(yǔ)句組組2 2 case case 常量表達(dá)式常量表達(dá)式n: n: 語(yǔ)句語(yǔ)句組組n n default: default: 語(yǔ)句語(yǔ)句組組n+1n+1 注意:表達(dá)式只能是整型、注意:表達(dá)式只能是整型、字符型或枚舉型字符型或枚舉型注意:常量表達(dá)注意:常量表達(dá)式式1n1n的值必須各的值必須各不相同。不相同。27有有無(wú)無(wú)無(wú)無(wú)falsfalse e有有無(wú)無(wú)falsefalsetruetrue計(jì)算表達(dá)式的值計(jì)算表達(dá)式的值常量表達(dá)式常量表達(dá)式1 1語(yǔ)句語(yǔ)句1 1breakbreak常量表達(dá)式常量表達(dá)式2 2語(yǔ)句語(yǔ)句2 2breakbreak無(wú)無(wú)有有falsefalse常量表達(dá)式常量表達(dá)式n ntrue
20、true語(yǔ)句語(yǔ)句n nbreakbreakdefaultdefault語(yǔ)句語(yǔ)句n+1n+1truetrue有有switchswitch語(yǔ)句執(zhí)行流程語(yǔ)句執(zhí)行流程28【例【例2.72.7】將輸入的百分制成績(jī)按以下規(guī)定轉(zhuǎn)】將輸入的百分制成績(jī)按以下規(guī)定轉(zhuǎn)換成相應(yīng)的等級(jí):換成相應(yīng)的等級(jí): 成成 績(jī)績(jī) 等級(jí)等級(jí)10090 優(yōu)秀優(yōu)秀 8980 良好良好 7970 中等中等 6960 及格及格 590 不及格不及格 29#include #include using namespace std;using namespace std;int main()int main() float score;float
21、 score;coutcoutscore;cinscore;if(score=0 & score=0 & score=100)switch(int(score)/10)switch(int(score)/10) case 10: case 10: case 9: coutscore case 9: coutscore分:優(yōu)秀分:優(yōu)秀endl;break;endl;break; case 8: coutscore case 8: coutscore分:良好分:良好endl;break;endl;break; case 7: coutscore case 7: coutscore分
22、:中等分:中等endl;break;endl;break; case 6: coutscore case 6: coutscore分:及格分:及格endl;break;endl;break; default:coutscore“ default:coutscore“分:不及格分:不及格”endl; ”endl; else else cout cout輸入數(shù)據(jù)有誤輸入數(shù)據(jù)有誤!endl;!endl; return 0; return 0; 共用同一個(gè)語(yǔ)句組共用同一個(gè)語(yǔ)句組 思考:若省去思考:若省去break語(yǔ)句,情況語(yǔ)句,情況會(huì)怎樣?會(huì)怎樣? 302.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)o 按照給定規(guī)則重復(fù)地執(zhí)
23、行程序中的語(yǔ)句按照給定規(guī)則重復(fù)地執(zhí)行程序中的語(yǔ)句 2.3.1 while 語(yǔ)句語(yǔ)句while (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句falsefalsetrtru ue e表達(dá)表達(dá)式式語(yǔ)句語(yǔ)句圖圖2.14 while2.14 while語(yǔ)句流程圖語(yǔ)句流程圖循環(huán)體循環(huán)體當(dāng)型循環(huán)當(dāng)型循環(huán)31【例例2.82.8】求求 1+2+3+1001+2+3+100#include using namespace std;int main()int i(1),sum(0); /定義變量,初始化定義變量,初始化while(i=100) /構(gòu)造循環(huán)構(gòu)造循環(huán) sum+=i; / 循環(huán)體,多次執(zhí)行循環(huán)體,多次執(zhí)行 i+; /循環(huán)變
24、量循環(huán)變量coutsum=sumendl; return 0;0112真真33真真64真真105真真真真100真真101真真50505050假假sumsum505050500sumsum1i i123364100 050505050101101循環(huán)結(jié)束循環(huán)結(jié)束!實(shí)際上是將實(shí)際上是將i i不停地累加到一起不停地累加到一起32【例例2.92.9】求出滿足不等式的最小求出滿足不等式的最小n n值:值:5131211n#include using namespace std;int main() int i=0; double s=0; while(s8) s+=double(1)/+i;/i-循環(huán)變
25、量循環(huán)變量 coutn=iendl; return 0;8332.3.2 do-whiledo-while語(yǔ)句語(yǔ)句dodo 語(yǔ)句語(yǔ)句while (while (表達(dá)式表達(dá)式) ); ;falsfalse etruetrue表達(dá)表達(dá)式式語(yǔ)句語(yǔ)句圖圖2.15 do-while2.15 do-while語(yǔ)句流程圖語(yǔ)句流程圖直到型循環(huán)直到型循環(huán)34【例【例2.102.10】 求自然數(shù)求自然數(shù)1 1100100之和,要求用之和,要求用do-do-whilewhile語(yǔ)句實(shí)現(xiàn)。語(yǔ)句實(shí)現(xiàn)。#include #include using namespace std;using namespace std;in
26、t main()int main() int i(1),sum(0);int i(1),sum(0); dodo sum+=i;sum+=i; i+;/i-i+;/i-循環(huán)變量循環(huán)變量 while(i=100); while(i=100); coutsum=sumendl;coutsum=sumendl; return 0; return 0; int i(1),sum(0); while(i2)while(12) cout”I like C+!”endl; cout”I like C+!”endl; / / 相當(dāng)于一個(gè)空操作語(yǔ)句相當(dāng)于一個(gè)空操作語(yǔ)句do do cout”I like C+!”
27、endl; cout”I like C+!”2); while(12); / / 輸出一行文字信息輸出一行文字信息注意:注意: dowhiledowhile首先執(zhí)行循環(huán)體,然后再判斷表達(dá)式,至首先執(zhí)行循環(huán)體,然后再判斷表達(dá)式,至少執(zhí)行一次循環(huán)體。少執(zhí)行一次循環(huán)體。當(dāng)?shù)谝淮窝h(huán)表達(dá)式的值為真時(shí),當(dāng)?shù)谝淮窝h(huán)表達(dá)式的值為真時(shí),whilewhile與與dowhiledowhile的結(jié)果完全一樣,否則結(jié)果不相同。的結(jié)果完全一樣,否則結(jié)果不相同。36【例【例2.11】輸入一個(gè)自然數(shù),將該數(shù)的每一位數(shù)字按反】輸入一個(gè)自然數(shù),將該數(shù)的每一位數(shù)字按反序輸出。例如:輸入序輸出。例如:輸入12345,輸出,輸出5
28、4321。#include #include using namespace std;using namespace std;void main()void main() unsigned long int num,dgt;unsigned long int num,dgt; cout coutnum; cinnum; cout” cout”倒置結(jié)果為:倒置結(jié)果為:”;”; do do dgt=num%10; dgt=num%10; coutdgt; cout0); while(num0); coutendl; coutendl; 37for(for(表達(dá)式表達(dá)式1;1;表達(dá)式表達(dá)式2;2;表
29、達(dá)式表達(dá)式3 3 ) ) 表達(dá)式表達(dá)式2執(zhí)行執(zhí)行 非非0 00 0退出退出循環(huán)循環(huán)表達(dá)式表達(dá)式1表達(dá)式表達(dá)式3表達(dá)式表達(dá)式1;while(while(表達(dá)式表達(dá)式2 2) ) ; 表達(dá)式表達(dá)式3 3; ; 2.3.3 for 語(yǔ)句語(yǔ)句計(jì)數(shù)型循環(huán)計(jì)數(shù)型循環(huán)38【例【例2.122.12】求自然數(shù)】求自然數(shù)1 1100100之和,要求用之和,要求用forfor語(yǔ)句實(shí)現(xiàn)。語(yǔ)句實(shí)現(xiàn)。#include #include using namespace std;using namespace std;int main()int main() int i,sum(0);int i,sum(0);for(i=1
30、;i=100;i+)for(i=1;i=100;i+)sum+=i;sum+=i;coutsum=sumendl;coutsum=sumendl; return 0; return 0; 39【例【例2.13自學(xué)自學(xué)】 一個(gè)小球從一個(gè)小球從100米高處米高處落下,每次落地后反彈回原高度的一半,落下,每次落地后反彈回原高度的一半,再落下。求它在第再落下。求它在第10次落地時(shí)共經(jīng)過(guò)多少次落地時(shí)共經(jīng)過(guò)多少米?第米?第10次反彈多高?次反彈多高?o分析:分析:第第1 1次落地后反彈高度為次落地后反彈高度為h=100/2h=100/2第第2 2次落地時(shí)經(jīng)過(guò)的米數(shù)為次落地時(shí)經(jīng)過(guò)的米數(shù)為s=100+hs=1
31、00+h* *2 2第第2 2次落地后反彈高度為次落地后反彈高度為h=h/2h=h/2第第3 3次落地時(shí)經(jīng)過(guò)的米數(shù)為次落地時(shí)經(jīng)過(guò)的米數(shù)為s=s+hs=s+h* *2 240#include #include #include #include using namespace std;using namespace std;int main()int main() float s=100.0,h=s/2;float s=100.0,h=s/2;for(int i=2;i=10;i+)for(int i=2;i=10;i+) s=s+hs=s+h* *2;2; h=h/2;h=h/2; couts
32、etiosflags(ios:fixed)setprecision(3); coutsetiosflags(ios:fixed)setprecision(3);coutcout第第1010次落地時(shí),共經(jīng)過(guò)次落地時(shí),共經(jīng)過(guò)ss米;米;反彈的高反彈的高度是度是hh米米endl;endl; return 0; return 0; 思考思考 該小球反彈多少該小球反彈多少次才能靜止下來(lái)?次才能靜止下來(lái)? 41注意:注意:forfor語(yǔ)句中的三個(gè)表達(dá)式可以部分省略或全部省略,但語(yǔ)句中的三個(gè)表達(dá)式可以部分省略或全部省略,但 ; 不能省略,若省略表達(dá)式不能省略,若省略表達(dá)式2 2,則表示循環(huán)條件為真。,則表示
33、循環(huán)條件為真。for( ;i=100) break ; / break語(yǔ)句用于跳出循環(huán)語(yǔ)句用于跳出循環(huán) int sum=0;for(int i=1; i100)break; if(i100)break; 三個(gè)表達(dá)式都可以是任何類型的三個(gè)表達(dá)式都可以是任何類型的C+表達(dá)式。表達(dá)式。int i,sum;for(i=1,sum=0;i=100;sum+=i,i+); 表達(dá)式表達(dá)式1可以是變量定義語(yǔ)句,即循環(huán)控制變量可在其中定義??梢允亲兞慷x語(yǔ)句,即循環(huán)控制變量可在其中定義。int sum=0;for(int i=1;i=100;i+) sum+=i;432.3.4 多重循環(huán)多重循環(huán)o 循環(huán)嵌套:循
34、環(huán)循環(huán)嵌套:循環(huán)體內(nèi)體內(nèi)包含另一個(gè)包含另一個(gè)完整的完整的循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)。o 三種循環(huán)語(yǔ)句皆三種循環(huán)語(yǔ)句皆可以相互嵌套可以相互嵌套 。for() while() do while();44【例例2.14】 編程顯示輸出九九乘法表 圖圖2.19 九九乘法表運(yùn)行界面九九乘法表運(yùn)行界面45trutrue efalsfalse ei=1i=1i =i =9 ?9 ?truetruefalsefalsej=1j=1j =j =9 ?9 ?顯示顯示i i* *j j表達(dá)表達(dá)式式j(luò)+j+i+i+#include using namespace std;int main() coutttt九九 九九 乘乘 法
35、法 表表endl; coutttt-endl; for(int i=1;i=9;i+) for(int j=1;j=9;j+)coutij=i*jt; coutendl; return 0;外層:外循環(huán)外層:外循環(huán) 內(nèi)層:內(nèi)循環(huán)內(nèi)層:內(nèi)循環(huán)46圖圖2.21 下三角的九九乘法表下三角的九九乘法表圖圖2.22 上三角的九九乘法表上三角的九九乘法表思考:思考:打印上三角或下三角程序如何改動(dòng)?打印上三角或下三角程序如何改動(dòng)?47注意:注意:(1 1)內(nèi)循環(huán)控制變量與外循環(huán)控制變量不能同名。)內(nèi)循環(huán)控制變量與外循環(huán)控制變量不能同名。(2 2)外循環(huán)必須完全包含內(nèi)循環(huán),不能交叉外循環(huán)必須完全包含內(nèi)循環(huán),不
36、能交叉。(3 3)若循環(huán)體內(nèi)有若循環(huán)體內(nèi)有ifif語(yǔ)句,或語(yǔ)句,或ifif語(yǔ)句內(nèi)有循環(huán)語(yǔ)句,語(yǔ)句內(nèi)有循環(huán)語(yǔ)句,也不能交叉。也不能交叉。(4 4)利用)利用gotogoto語(yǔ)句可以從循環(huán)體內(nèi)轉(zhuǎn)向循環(huán)體外,語(yǔ)句可以從循環(huán)體內(nèi)轉(zhuǎn)向循環(huán)體外,但絕對(duì)不允許從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi)。但絕對(duì)不允許從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi)。(5 5)當(dāng)嵌套使用各種循環(huán)語(yǔ)句時(shí),特別需要嚴(yán)格按)當(dāng)嵌套使用各種循環(huán)語(yǔ)句時(shí),特別需要嚴(yán)格按照縮進(jìn)規(guī)則來(lái)書(shū)寫(xiě)程序。有時(shí)還應(yīng)適當(dāng)配以注釋,以照縮進(jìn)規(guī)則來(lái)書(shū)寫(xiě)程序。有時(shí)還應(yīng)適當(dāng)配以注釋,以保持清晰易辯的結(jié)構(gòu)特征。保持清晰易辯的結(jié)構(gòu)特征。482.4 控制轉(zhuǎn)向語(yǔ)句控制轉(zhuǎn)向語(yǔ)句2.4.1 break2.
37、4.1 break語(yǔ)句語(yǔ)句僅可用于以下兩種情況:僅可用于以下兩種情況:(1)用于)用于switch語(yǔ)句中,保證多分支情況的正確語(yǔ)句中,保證多分支情況的正確運(yùn)行運(yùn)行(2)用于循環(huán)語(yǔ)句中,以便在某一適當(dāng)時(shí)刻及位)用于循環(huán)語(yǔ)句中,以便在某一適當(dāng)時(shí)刻及位置終止執(zhí)行循環(huán)體中的語(yǔ)句,并使流程控制退出該置終止執(zhí)行循環(huán)體中的語(yǔ)句,并使流程控制退出該循環(huán)控制結(jié)構(gòu),轉(zhuǎn)去執(zhí)行該循環(huán)語(yǔ)句的下一條語(yǔ)句。循環(huán)控制結(jié)構(gòu),轉(zhuǎn)去執(zhí)行該循環(huán)語(yǔ)句的下一條語(yǔ)句。49【例【例 2.15 2.15】 break break語(yǔ)句應(yīng)用示例。已知圓的半徑為不大于語(yǔ)句應(yīng)用示例。已知圓的半徑為不大于1010的正的正整數(shù),要求輸出所有不大于整數(shù),要
38、求輸出所有不大于100100的圓面積值。的圓面積值。#include #include using namespace std;using namespace std;const float PI=3.14159;const float PI=3.14159;int main()int main() int r; int r; float area; float area; cout cout半徑不大于半徑不大于1010且面積不大于且面積不大于100100的圓,其面積如下:的圓,其面積如下:endl;endl; for(r=1;r=10;r+)for(r=1;r100) if(area100)
39、 break; / break; /如果面積大于如果面積大于100100,則跳出循環(huán),則跳出循環(huán) coutcout圓半徑圓半徑=r=r,面積,面積=areaendl;=areaendl; return 0; return 0; 502.4.2 continue 2.4.2 continue 語(yǔ)句語(yǔ)句o格式:格式: continue; continue;o功能:只用在循環(huán)體中,用來(lái)功能:只用在循環(huán)體中,用來(lái)提前結(jié)束該提前結(jié)束該次循環(huán)而進(jìn)入下一輪循環(huán)次循環(huán)而進(jìn)入下一輪循環(huán)。在循環(huán)體中遇到在循環(huán)體中遇到continuecontinue語(yǔ)句時(shí),本次循環(huán)語(yǔ)句時(shí),本次循環(huán)結(jié)束,回到循環(huán)條件判斷是否執(zhí)行下一
40、次循結(jié)束,回到循環(huán)條件判斷是否執(zhí)行下一次循環(huán)。環(huán)。51o 在在whilewhile和和do-whiledo-while循環(huán)結(jié)構(gòu)中,循環(huán)結(jié)構(gòu)中,continuecontinue語(yǔ)語(yǔ)句將使執(zhí)行流程直接跳轉(zhuǎn)到循環(huán)條件的判定部句將使執(zhí)行流程直接跳轉(zhuǎn)到循環(huán)條件的判定部分,然后決定循環(huán)是否繼續(xù)進(jìn)行。分,然后決定循環(huán)是否繼續(xù)進(jìn)行。o 在在forfor循環(huán)結(jié)構(gòu)中,當(dāng)遇到循環(huán)結(jié)構(gòu)中,當(dāng)遇到continuecontinue時(shí),執(zhí)行時(shí),執(zhí)行流程將跳過(guò)循環(huán)體中余下的語(yǔ)句,而轉(zhuǎn)去執(zhí)行流程將跳過(guò)循環(huán)體中余下的語(yǔ)句,而轉(zhuǎn)去執(zhí)行forfor語(yǔ)句中的表達(dá)式語(yǔ)句中的表達(dá)式3 3,然后根據(jù)表達(dá)式,然后根據(jù)表達(dá)式2 2進(jìn)行進(jìn)行循環(huán)條
41、件的判定以決定是否繼續(xù)執(zhí)行循環(huán)條件的判定以決定是否繼續(xù)執(zhí)行forfor循環(huán)循環(huán)體。體。52while(i=100)while(i=100) break;break; coutsumendl;coutsumendl;while(i=100)while(i=100) continue; continue; breakbreak和和continuecontinue語(yǔ)句的區(qū)別語(yǔ)句的區(qū)別53例例2.162.16】continuecontinue語(yǔ)句應(yīng)用示例。請(qǐng)寫(xiě)出下列程序的運(yùn)語(yǔ)句應(yīng)用示例。請(qǐng)寫(xiě)出下列程序的運(yùn)行結(jié)果。行結(jié)果。#include #include using namespace std;usi
42、ng namespace std;int main()int main() int i,s; int i,s; for(i=1,s=0;i=10;+i) for(i=1,s=0;i=10;+i) if(i%2=0) if(i%2=0) continue; continue; if(i%10=7) if(i%10=7) break; break; s+=i; s+=i; couts=s; couts=s; return 0; return 0; s=9該程序的功能:求出該程序的功能:求出110所有奇數(shù)的和且當(dāng)遇到所有奇數(shù)的和且當(dāng)遇到某數(shù)除以某數(shù)除以10的余數(shù)為的余數(shù)為7時(shí)提前結(jié)束求和。時(shí)提前結(jié)束
43、求和。542.4.3 goto2.4.3 goto語(yǔ)句語(yǔ)句goto goto 標(biāo)號(hào)標(biāo)號(hào); ;標(biāo)號(hào)標(biāo)號(hào): : 語(yǔ)句語(yǔ)句; ;標(biāo)號(hào)語(yǔ)句標(biāo)號(hào)語(yǔ)句將流程轉(zhuǎn)到標(biāo)號(hào)所將流程轉(zhuǎn)到標(biāo)號(hào)所指定的標(biāo)號(hào)語(yǔ)句處。指定的標(biāo)號(hào)語(yǔ)句處。55【例例2.17】利用利用goto語(yǔ)句實(shí)現(xiàn)求一個(gè)自然數(shù)的階乘并輸出結(jié)果。語(yǔ)句實(shí)現(xiàn)求一個(gè)自然數(shù)的階乘并輸出結(jié)果。#include using namespace std;int main() int i=1,m,s=1; coutm; loop: s*=i; +i; if(i=m) goto loop; couts=sendl; return 0;56說(shuō)明:說(shuō)明:(1)如果不加限制地使用)如
44、果不加限制地使用goto語(yǔ)句轉(zhuǎn)來(lái)轉(zhuǎn)去,則會(huì)破壞程序自語(yǔ)句轉(zhuǎn)來(lái)轉(zhuǎn)去,則會(huì)破壞程序自上而下的執(zhí)行順序而降低程序的可讀性,不符合結(jié)構(gòu)化程序設(shè)計(jì)上而下的執(zhí)行順序而降低程序的可讀性,不符合結(jié)構(gòu)化程序設(shè)計(jì)的思想。因此應(yīng)盡量避免使用的思想。因此應(yīng)盡量避免使用goto語(yǔ)句;語(yǔ)句;(2)特殊場(chǎng)合使用)特殊場(chǎng)合使用goto將簡(jiǎn)化程序表達(dá)。將簡(jiǎn)化程序表達(dá)。int i,j,k;for(i=1;i10;+i) for(j=1;j10;+j) for(k=1;k10;+k) if(i*j*k=125) goto End;End:couti*j*kn(2) m除以除以n得余數(shù)得余數(shù)r(3) 若若r=0,則,則n為最大公約數(shù)
45、,結(jié)束;否則執(zhí)行為最大公約數(shù),結(jié)束;否則執(zhí)行(4)(4) mn,n r,再重復(fù)執(zhí)行,再重復(fù)執(zhí)行(2)m m n r n r 12 12 5 2 5 25 5 2 2 1 1 2 2 1 1 0 0 輾轉(zhuǎn)相除法輾轉(zhuǎn)相除法while (r=m % n)!=0)while (r=m % n)!=0) m=n;n=r; m=n;n=r; coutn; coutn; 58#include #include using namespace std;using namespace std;int main()int main() int m,n,r,t;int m,n,r,t; cout coutmn; c
46、inmn; t=m t=m* *n; if(mn)n; if(mn) r=m;m=n;n=r; r=m;m=n;n=r; while(r=m%n)!=0) while(r=m%n)!=0) m=n; m=n; n=r; n=r; cout cout最大公約數(shù):最大公約數(shù): nendl; nendl; cout cout最小公倍數(shù):最小公倍數(shù): t/nendl; t/nendl; return 0;return 0; 最小公倍數(shù)的計(jì)算方法為:最小公倍數(shù)的計(jì)算方法為:m 與與n 的最小公倍數(shù)的最小公倍數(shù)=( mn)(m與與n 的最大公約數(shù))的最大公約數(shù))59【例【例2.19】順序輸出】順序輸出31
47、00之間的所有素?cái)?shù),并計(jì)算輸出素之間的所有素?cái)?shù),并計(jì)算輸出素?cái)?shù)之和。數(shù)之和。分析:分析:(1 1)素?cái)?shù):一個(gè)大于)素?cái)?shù):一個(gè)大于1 1的除了它自身和的除了它自身和1 1以外,不能被其它任何正整數(shù)所整除以外,不能被其它任何正整數(shù)所整除的整數(shù)。判別某數(shù)的整數(shù)。判別某數(shù)m m是否為素?cái)?shù),最簡(jiǎn)單的方法是:用是否為素?cái)?shù),最簡(jiǎn)單的方法是:用i=2i=2,3 3,m-1m-1逐個(gè)除,逐個(gè)除,只要有一個(gè)能整除,m就不是素?cái)?shù),可以用break提前結(jié)束循環(huán);若都不能整除,則m是素?cái)?shù)。(2 2)如果m不是素?cái)?shù),則必然能被分解為兩個(gè)因子a和b,并且其中之一必然小于等于 sqrt(m) ,另一個(gè)必然大于等于sqrt(m
48、) 。所以要判斷m是否為素?cái)?shù),可簡(jiǎn)化為判斷它能否被能否被2 2至至sqrt(m)sqrt(m)之間的數(shù)整除之間的數(shù)整除即可。因?yàn)槿鬽不能被2至sqrt(m)之間的數(shù)整除,則必然也不能被sqrt(m)至m-1之間的數(shù)整除。(3 3)在退出循環(huán)以后,如果是因?yàn)檎业搅艘粋€(gè)能整除m的數(shù)而通過(guò)break退出循環(huán)的,則i=sqrt(m) ;反之,如果是正常退出循環(huán)的,則i=sqrt(m)+1。因此,在循環(huán)結(jié)束后,只要判斷判斷i i是否大于是否大于sqrt(m)sqrt(m),若是,則表明m是素?cái)?shù),輸出該素?cái)?shù)。(4 4)要判斷多個(gè)素?cái)?shù)是否為素?cái)?shù),需要使用雙重循環(huán)。外循環(huán)每循環(huán)一次提供一個(gè)數(shù),由內(nèi)循環(huán)通過(guò)多次
49、除法判斷其是否為素?cái)?shù)。60#include #include #include #include using namespace std;using namespace std;int main()int main() cout3 cout3100100之間的素?cái)?shù)是:之間的素?cái)?shù)是:endl;endl; int m,i,s=0; int m,i,s=0; for(m=3;m100;m+=2) for(m=3;m100;m+=2) int k=int(sqrt(m); int k=int(sqrt(m); for(i=2;i=k;i+) for(i=2;ik) if(ik) coutmt; cou
50、tmt; s+=m; s+=m; cout”n3 cout”n3100100之間的素?cái)?shù)之和之間的素?cái)?shù)之和=”s;=”s; coutendl; coutendl; return 0; return 0; 61【例【例 2.20 2.20】 輸入輸入x x,計(jì)算,計(jì)算sin(x)sin(x)。計(jì)算公式為:。計(jì)算公式為:當(dāng)?shù)诋?dāng)?shù)趎 n項(xiàng)的絕對(duì)值小于項(xiàng)的絕對(duì)值小于1010-6-6時(shí)結(jié)束。時(shí)結(jié)束。分析:關(guān)鍵是找部分級(jí)數(shù)和的分析:關(guān)鍵是找部分級(jí)數(shù)和的通項(xiàng)通項(xiàng):),(,ntnnxtnn7531) 2)(1(2262int n=1;int n=1;double x,double x,t t, ,sinxsin
51、x(0); (0); / / 變量變量t t保存每一項(xiàng)的值;給保存每一項(xiàng)的值;給sinxsinx變量賦初值變量賦初值0 0coutcoutx;cinx;t=x;t=x; / / 將求和式的第一項(xiàng)值將求和式的第一項(xiàng)值x x賦給賦給t twhile(fabs(t)=0.000001)while(fabs(t)=0.000001) sinx+=t;sinx+=t; t=-tt=-t* *x x* *x/(n+1)x/(n+1)* *(n+2);(n+2); n+=2;n+=2; coutcout編程求得的編程求得的sin(x)=sinxendl;sin(x)=sinxendl;coutcout調(diào)用標(biāo)準(zhǔn)函數(shù)求得的調(diào)用標(biāo)準(zhǔn)函數(shù)求得的sin(x)=sin(x)endl;sin(x)=sin(x)endl; 63【例【例 2.21 2.21】 求求“水仙花數(shù)水仙花數(shù)”。所謂。所謂“水仙花數(shù)水仙花數(shù)”是指一個(gè)是指一個(gè)三位正整數(shù),其各位數(shù)字的立方和等于該數(shù)本身。三位正整數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)生實(shí)習(xí)協(xié)議書(shū)范本完整版
- 2025年建筑工程施工授權(quán)協(xié)議示例
- 2025年陳思婚姻協(xié)議書(shū)模板
- 2025年無(wú)債務(wù)房產(chǎn)轉(zhuǎn)讓男方離婚策劃協(xié)議書(shū)
- 2025年授權(quán)代付服務(wù)協(xié)議樣本
- 2025年品牌聯(lián)合推廣協(xié)議模板
- 2025年公園綠化維護(hù)服務(wù)協(xié)議樣本
- 2025年十堰市汽車銷售協(xié)議書(shū)
- 2025年珠寶訂購(gòu)協(xié)議樣式
- 2025年廣告公司共榮發(fā)展協(xié)議范本
- 2025-2030中國(guó)管式爐行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析研究報(bào)告
- 軟件開(kāi)發(fā)需求文檔模板
- 2025年重慶三峰環(huán)境產(chǎn)業(yè)集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 組織學(xué)與胚胎學(xué)知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春浙江中醫(yī)藥大學(xué)
- 綠化工程投標(biāo)方案(技術(shù)標(biāo))
- 民兵反恐維穩(wěn)培訓(xùn)
- 國(guó)家教育部卓越工程師教育培養(yǎng)計(jì)劃高校學(xué)科專業(yè)名單(第一二三批)
- 2024年全國(guó)中小學(xué)生《學(xué)游泳、防溺水、懂自救》教育知識(shí)試題庫(kù)與答案
- 排水管道工程施工方案(兩篇)
- 《溺水急救方法》課件
- 熱性驚厥的健康宣教
評(píng)論
0/150
提交評(píng)論