C語言程序設(shè)計課件第2章 程序控制結(jié)構(gòu)_第1頁
C語言程序設(shè)計課件第2章 程序控制結(jié)構(gòu)_第2頁
C語言程序設(shè)計課件第2章 程序控制結(jié)構(gòu)_第3頁
C語言程序設(shè)計課件第2章 程序控制結(jié)構(gòu)_第4頁
C語言程序設(shè)計課件第2章 程序控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 程序控制結(jié)構(gòu)2.1 順序結(jié)構(gòu) 2.2 選擇結(jié)構(gòu) 2.3 循環(huán)結(jié)構(gòu) 2.4 控制轉(zhuǎn)向語句 2.5 程序?qū)嵗?1編輯課件按照語句出現(xiàn)的先后順序依次執(zhí)行。2.1 順序結(jié)構(gòu) 語句1語句2圖2.1 順序結(jié)構(gòu)流程圖2編輯課件2.1.1 定義語句說明語句在C+程序中,一個標(biāo)識符(變量名、常量名、函數(shù)名、對象名等)在使用之前必須先定義,通知編譯器為其分配存儲空間,或告訴編譯器它的存在及其特征。例如:int a=0,b=3; const double pi=3.14159;int sum(int,int);float score 503;3編輯課件2.1.2 表達(dá)式語句形式: ;可以進(jìn)行的操作通常包括賦

2、值操作,復(fù)合賦值操作,增量、減量操作,函數(shù)調(diào)用操作和輸入輸出操作。例如:i+;-j;abs(x);coutij;sum=a+b;a=b=c;i=1,j=2;b*=c;4編輯課件2.1.3 復(fù)合語句形式: 作用:當(dāng)程序中某個位置在語法上只允許一條語句,而在語義上要執(zhí)行多條語句才能完成某個操作時,需要使用復(fù)合語句。例如:if(x=0) couta; coutb; 5編輯課件2.1.4 空語句形式: ; 作用: 當(dāng)程序中某個位置在語法上需要一條語句,而在語義上又不 要求執(zhí)行任何動作時,可放上一條空語句。一般適用于在循環(huán)語句中做空循環(huán)體例如: for (m = 0; m1000; m+) ;6編輯課件

3、2.1.5 基本輸入輸出在C+中,所有輸入輸出是通過輸入輸出流來實現(xiàn)的。在C+中,將數(shù)據(jù)從一個對象到另一個對象的流動抽象為“流”。在iostream庫中包含一個標(biāo)準(zhǔn)輸入流對象cin和一個標(biāo)準(zhǔn)輸出流對象cout,分別用來實現(xiàn)從鍵盤讀取數(shù)據(jù),以及將數(shù)據(jù)在屏幕上輸出。要使用cin和cout,需要在C+程序開頭加上如下包含命令:#include / 新標(biāo)準(zhǔn)中的頭文件名using namespace std; / 引入std名字空間中的標(biāo)識符7編輯課件1. 標(biāo)準(zhǔn)輸入流cincin負(fù)責(zé)從鍵盤讀取數(shù)據(jù),使用提取運算符“”就可以將鍵盤鍵入的數(shù)據(jù)讀入到變量中。語法格式: cin變量1變量2變量n; 變量可以是任

4、意數(shù)據(jù)類型,輸入時各個數(shù)據(jù)之間用空格鍵、Tab鍵或Enter鍵分隔。 例如:int a,b;cinab;鍵盤上輸入:93a9鍵盤b3鍵盤8編輯課件2. 標(biāo)準(zhǔn)輸出流cout負(fù)責(zé)將數(shù)據(jù)輸出到屏幕上,使用插入運算符“”就可以將數(shù)據(jù)顯示在屏幕上當(dāng)前光標(biāo)所在位置。語法格式: cout表達(dá)式1表達(dá)式2表達(dá)式n; 表達(dá)式可以是任意類型的,數(shù)據(jù)輸出的格式由系統(tǒng)自動決定。9編輯課件表2.1 常用格式控制符格式控制符說 明示 例語 句結(jié) 果endl輸出換行符cout120endl240;120240dec十進(jìn)制表示coutdec120;120hex十六進(jìn)制表示couthex120;78oct八進(jìn)制表示coutoc

5、t120;170setw(int n)設(shè)置數(shù)據(jù)輸出的寬度coutxsetw(3)y;x y(中間有2個空格)10編輯課件表2.1 常用格式控制符格式控制符說 明示 例語 句結(jié) 果setfill(char c)設(shè)置填充字符coutsetfill()setw(6)120;120setprecision(int n)設(shè)置浮點數(shù)的精度(有效數(shù)字位數(shù)或小數(shù)位數(shù))coutsetprecision(5)12.3456;12.346setiosflags(ios:fixed)定點格式輸出coutsetiosflags(ios:fixed) 12.3456789;12.345679setiosflags(ios

6、:scientific)指數(shù)格式輸出coutsetiosflags(ios:scientific) 12.3456789;1.234568e+00111編輯課件【例2.1】 cout應(yīng)用示例#include using namespace std;int main()int m=2,n=8;double pai_1=3.14159265;float pai_2=3.141f;char ch1=A,ch2=B;bool ok=true;coutm=mendl;coutn=nendl;coutpai_1=pai_1 , pai_2=pai_2endl;coutch1=ch1 , ch2=ch2en

7、dl;coutok=okendl;cout!ok=!okendl; return 0;圖2.2 cout應(yīng)用示例12編輯課件【例2.2】 使用格式控制符輸出數(shù)據(jù)#include #include using namespace std;int main()int a=35;double b=12.3456789;cout1234567890123endl;coutdeca hexa octaendl; coutbendl;coutsetprecision(4)bendl; coutsetw(10)bendl; coutsetw(10)setfill(#)bendl;coutsetiosflag

8、s(ios:scientific)bendl; coutsetprecision(3)bendl;coutsetprecision(2)bb,則將a、b交換,否則不交換。兩數(shù)交換可采用借助于第三個變量間接交換的方法 if(ab)t=a;a=b;b=t;16編輯課件#include using namespace std;int main()int a,b,t;cout請輸入兩個整數(shù)a,b:ab; if(ab)t=a;a=b;b=t; coutabendl; return 0;a=a+b;b=a-b;a=a-b; a=a+b;b=a-b;a=a-b; 17編輯課件2if- else語句(雙分支)

9、 if(表達(dá)式) 語句1 else 語句2true表達(dá)式語句1false語句2圖2.7 雙分支if語句流程圖18編輯課件【例2.4】輸入一個年份,判斷是否為閏年。分析 閏年的年份可以被4整除而不能被100整除,或者能被400整除。 #include using namespace std;int main()int year;coutyear;if(year%4=0 & year%100 !=0)|(year%400=0) coutyear年是閏年endl;else coutyear年不是閏年endl; return 0;19編輯課件3if- else if 語句(多分支)if(表達(dá)式1) 語

10、句1 else if(表達(dá)式2) 語句2 else if (表達(dá)式n) 語句n else 語句n+1falsefalsefalsetruetrue表達(dá)式1表達(dá)式2表達(dá)式n語句n語句n+1語句2語句1true20編輯課件【例2.5】根據(jù)x的值,計算分段函數(shù)y的值。y的計算公式為:21編輯課件#include #include using namespace std;int main()double x,y;coutx;if(x0) y=fabs(x);else if(x10) y=exp(x)*sin(x);else if(x20) y=pow(x,3);else y=(3+2*x)*log(x

11、);couty=y0) if(y0) coutx與y均大于0; else coutx大于0,y小于等于0;注意:如何使之與第一個if配對?24編輯課件【例2.6】從鍵盤上輸入兩個字符,比較其大小,輸出大于、等于和小于的判斷結(jié)果。#include using namespace std;int main()char ch1,ch2;coutch1ch2;if(ch1!=ch2) if(ch1ch2) coutch1大于ch2endl; else coutch1小于ch2endl;elsecoutch1等于ch2endl; return 0;25編輯課件2.2.2 switch語句switch (

12、表達(dá)式) case 常量表達(dá)式1: 語句1 case 常量表達(dá)式2: 語句2 case 常量表達(dá)式n: 語句n default: 語句序列n+1 注意:表達(dá)式只能是整型、字符型或枚舉型注意:常量表達(dá)式1n的值必須各不相同。26編輯課件有無無false有無falsetrue計算表達(dá)式的值常量表達(dá)式1語句1break常量表達(dá)式2語句2break無有false常量表達(dá)式ntrue語句nbreakdefault語句n+1true有圖2.12 switch語句執(zhí)行流程27編輯課件【例2.7】將輸入的百分制成績按以下規(guī)定轉(zhuǎn)換成相應(yīng)的等級: 成 績 等級10090 優(yōu)秀 8980 良好 7970 中等 69

13、60 及格 590 不及格 28編輯課件#include using namespace std;int main()float score;coutscore;if(score=0 & score=100)switch(int(score)/10) case 10: case 9: coutscore分:優(yōu)秀endl;break; case 8: coutscore分:良好endl;break; case 7: coutscore分:中等endl;break; case 6: coutscore分:及格endl;break; default:coutscore“分:不及格”endl; els

14、e cout輸入數(shù)據(jù)有誤!endl; return 0;共用同一個語句組 思考:若省去break語句,情況會怎樣? 29編輯課件2.3 循環(huán)結(jié)構(gòu)按照給定規(guī)則重復(fù)地執(zhí)行程序中的語句 2.3.1 while 語句while (表達(dá)式) 語句falsetrue表達(dá)式語句圖2.14 while語句流程圖循環(huán)條件,其值為true(非0)、false(0)循環(huán)體30編輯課件【例2.8】求 1+2+3+100#include using namespace std;int main()int i(1),sum(0); /定義變量,初始化while(i=100) /構(gòu)造循環(huán) sum+=i; / 循環(huán)體,多次執(zhí)

15、行 i+; coutsum=sumendl; return 0;循環(huán)條件初值循環(huán)次數(shù)1234.99100101sumi0112真33真64真105真真100真101真5050假sum50500sum1i1233641005050101循環(huán)結(jié)束!實際上是將i不停地累加到一起31編輯課件【例2.9】求出滿足不等式的最小n值:#include using namespace std;int main() int i=0; double s=0;while(s5) s+=double(1)/+i;coutn=iendl; return 0;32編輯課件2.3.2 do-while語句do 語句whil

16、e (表達(dá)式);falsetrue表達(dá)式語句圖2.15 do-while語句流程圖33編輯課件【例2.10】 求自然數(shù)1100之和,要求用do-while語句實現(xiàn)。#include using namespace std;int main()int i(1),sum(0); dosum+=i; i+;while(i=100); coutsum=sumendl; return 0; int i(1),sum(0); while(i2) cout”I like C+!”endl; / 相當(dāng)于一個空操作語句do cout”I like C+!”2); / 輸出一行文字信息注意: dowhile首先執(zhí)

17、行循環(huán)體,然后再判斷表達(dá)式,至少執(zhí)行一次循環(huán)體。當(dāng)?shù)谝淮窝h(huán)表達(dá)式的值為真時,while與dowhile的結(jié)果完全一樣,否則結(jié)果不相同。35編輯課件【例2.11】輸入一個自然數(shù),將該數(shù)的每一位數(shù)字按反序輸出。例如:輸入12345,輸出54321。#include using namespace std;void main()unsigned long int num,digital;coutnum;dodigital=num%10; num/=10;cout0);coutendl;36編輯課件for(表達(dá)式1;表達(dá)式2;表達(dá)式3 ) 表達(dá)式2執(zhí)行非00退出循環(huán)表達(dá)式1表達(dá)式3表達(dá)式1;whil

18、e(表達(dá)式2) ; 表達(dá)式3;2.3.3 for 語句37編輯課件【例2.12】求自然數(shù)1100之和,要求用for語句實現(xiàn)。#include using namespace std;int main()int i,sum(0);for(i=1;i=100;i+)sum+=i;coutsum=sumendl; return 0;38編輯課件【例2.13】 一個小球從100米高處落下,每次落地后反彈回原高度的一半,再落下。求它在第10次落地時共經(jīng)過多少米?第10次反彈多高?分析:第1次落地后反彈高度為h=100/2第2次落地時經(jīng)過的米數(shù)為s=100+h*2第2次落地后反彈高度為h=h/2第3次落地

19、時經(jīng)過的米數(shù)為s=s+h*239編輯課件#include #include using namespace std;int main()float s=100.0,h=s/2;for(int i=2;i=10;i+)s=s+h*2;h=h/2; coutsetiosflags(ios:fixed)setprecision(3);cout第10次落地時,共經(jīng)過s米;反彈的高度是h米endl; return 0;思考 該小球反彈多少次才能靜止下來? 40編輯課件注意:for語句中的三個表達(dá)式可以部分省略或全部省略,但;不能省略,若省略表達(dá)式2,則表示循環(huán)條件為真。for( ;i=100) brea

20、k ; / break語句用于跳出循環(huán) int sum=0;for(int i=1; i100)break;三個表達(dá)式都可以是任何類型的C+表達(dá)式。int i,sum;for(i=1,sum=0;i=100;sum+=i,i+); 表達(dá)式1可以是變量定義語句,即循環(huán)控制變量可在其中定義。int sum=0;for(int i=1;i=100;i+) sum+=i;42編輯課件2.3.4 多重循環(huán)循環(huán)嵌套:循環(huán)體內(nèi)包含另一個完整的循環(huán)結(jié)構(gòu)。三種循環(huán)語句皆可以相互嵌套 。for() while() do while();43編輯課件【例2.14】 編程顯示輸出九九乘法表 圖2.19 九九乘法表運行

21、界面44編輯課件truefalsei=1i=9 ?truefalsej=1j=9 ?顯示i*j表達(dá)式j(luò)+i+#include using namespace std;int main() coutttt九 九 乘 法 表endl; coutttt-endl; for(int i=1;i=9;i+) for(int j=1;j=9;j+)coutij=i*jt; coutendl; return 0;45編輯課件圖2.21 下三角的九九乘法表圖2.22 上三角的九九乘法表思考:打印上三角或下三角程序如何改動?46編輯課件注意:(1)內(nèi)循環(huán)控制變量與外循環(huán)控制變量不能同名。(2)外循環(huán)必須完全包含

22、內(nèi)循環(huán),不能交叉。(3)若循環(huán)體內(nèi)有if語句,或if語句內(nèi)有循環(huán)語句,也不能交叉。(4)利用goto語句可以從循環(huán)體內(nèi)轉(zhuǎn)向循環(huán)體外,但絕對不允許從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi)。(5)當(dāng)嵌套使用各種循環(huán)語句時,特別需要嚴(yán)格按照縮進(jìn)規(guī)則來書寫程序。有時還應(yīng)適當(dāng)配以注釋,以保持清晰易辯的結(jié)構(gòu)特征。47編輯課件2.4 控制轉(zhuǎn)向語句2.4.1 break語句break;用于下列兩種情況:1、在開關(guān)語句中,其功能是退出開關(guān)語句,執(zhí)行其后的語句;2、在循環(huán)體中,其功能是用來退出該重循環(huán)48編輯課件【例 2.15】 從鍵盤上輸入若干個正整數(shù),直到輸入負(fù)整數(shù)為止,計算并輸出顯示已輸入的正整數(shù)之和。輸入的數(shù)不超過20個。

23、 #include using namespace std;const int M=20;int main()int i,n,sum=0;cout請輸入若干個正整數(shù)(輸入負(fù)數(shù)就結(jié)束輸入):endl;for(i=0;in;if(n0) break; / 當(dāng)輸入負(fù)數(shù)時,就退出循環(huán)sum+=n;cout 輸入的正整數(shù)之和為:sumendl; return 0;49編輯課件2.4.2 continue 語句格式: continue;功能:只用在循環(huán)體中,用來結(jié)束該次循環(huán)。在循環(huán)體中遇到continue語句時,本次循環(huán)結(jié)束,回到循環(huán)條件判斷是否執(zhí)行下一次循環(huán)。50編輯課件在while和do-while循

24、環(huán)結(jié)構(gòu)中,continue語句將使執(zhí)行流程直接跳轉(zhuǎn)到循環(huán)條件的判定部分,然后決定循環(huán)是否繼續(xù)進(jìn)行。在for循環(huán)結(jié)構(gòu)中,當(dāng)遇到continue時,執(zhí)行流程將跳過循環(huán)體中余下的語句,而轉(zhuǎn)去執(zhí)行for語句中的表達(dá)式3,然后根據(jù)表達(dá)式2進(jìn)行循環(huán)條件的判定以決定是否繼續(xù)執(zhí)行for循環(huán)體。51編輯課件while(i=100) break; coutsumendl;while(i=100) continue; break和continue語句的區(qū)別52編輯課件【例 2.16】 輸出100以內(nèi)能夠被7整除的所有整數(shù)。#include #include using namespace std;int main(

25、)for(int i=1;i=100;i+)if(i%7!=0) continue; /如果i不能被7整除,則退出本次循環(huán)coutsetw(5)i;coutendl; return 0;思考:(1)將continue改為break,則輸出有什么變化?(2)不采用continue語句,用其它方法如何實現(xiàn)?53編輯課件2.4.3 goto語句goto 標(biāo)號;標(biāo)號: 語句;標(biāo)號語句將流程轉(zhuǎn)到標(biāo)號所指定的標(biāo)號語句處。54編輯課件【例 2.17】利用goto語句實現(xiàn)計算前100個自然數(shù)之和并輸出結(jié)果#include using namespace std;int main()int i=1,sum=0;

26、loop: sum+=i; i+; if(i=100) goto loop; coutsum=sumn(2) m除以n得余數(shù)r(3) 若r=0,則n為最大公約數(shù),結(jié)束;否則執(zhí)行(4)(4) mn,n r,再重復(fù)執(zhí)行(2)m n r12 5 2 5 2 1 2 1 0 輾轉(zhuǎn)相除法while (r=m % n)!=0) m=n;n=r; coutn; 56編輯課件#include using namespace std;int main()int m,n,t,r;coutmn;if(m=nwhile(r=m%n)!=0)m=n;n=r;cout最大公約數(shù)為: nendl; return 0;57編

27、輯課件【例 2.19】 顯示輸出3100之間的所有素數(shù)。分析:(1)素數(shù):一個大于1的除了它自身和1以外,不能被其它任何正整數(shù)所整除的整數(shù)。判別某數(shù)m是否為素數(shù),最簡單的方法是:用i=2,3,m-1逐個除,只要有一個能整除,m就不是素數(shù),可以用break提前結(jié)束循環(huán);若都不能整除,則m是素數(shù)。(2)如果m不是素數(shù),則必然能被分解為兩個因子a和b,并且其中之一必然小于等于 sqrt(m) ,另一個必然大于等于sqrt(m) 。所以要判斷m是否為素數(shù),可簡化為判斷它能否被2至sqrt(m)之間的數(shù)整除即可。因為若m不能被2至sqrt(m)之間的數(shù)整除,則必然也不能被sqrt(m)至m-1之間的數(shù)整

28、除。(3)在退出循環(huán)以后,如果是因為找到了一個能整除m的數(shù)而通過break退出循環(huán)的,則i=sqrt(m) ;反之,如果是正常退出循環(huán)的,則i=sqrt(m)+1。因此,在循環(huán)結(jié)束后,只要判斷i是否大于sqrt(m),若是,則表明m是素數(shù),輸出該素數(shù)。(4)要判斷多個素數(shù)是否為素數(shù),需要使用雙重循環(huán)。外循環(huán)每循環(huán)一次提供一個數(shù),由內(nèi)循環(huán)通過多次除法判斷其是否為素數(shù)。58編輯課件#include #include using namespace std;int main()cout3100之間的素數(shù)是:endl; for(int m=3;m100;m+=2) int k=int(sqrt(m);

29、for(int i=2;ik) coutmt;coutendl; return 0;59編輯課件【例 2.20】 輸入x,計算sin(x)。計算公式為:當(dāng)?shù)趎項的絕對值小于10-6時結(jié)束。分析:關(guān)鍵是找部分級數(shù)和的通項:60編輯課件int n=1;double x,t,sinx(0); / 變量t保存每一項的值;給sinx變量賦初值0coutx;t=x; / 將求和式的第一項值x賦給twhile(fabs(t)=0.000001) sinx+=t; t=-t*x*x/(n+1)*(n+2); n+=2; cout編程求得的sin(x)=sinxendl;cout調(diào)用標(biāo)準(zhǔn)函數(shù)求得的sin(x)=

30、sin(x)endl; 61編輯課件【例 2.21】 求“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個三位正整數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如:153=13+53+33。方法1:利用三重循環(huán)編寫程序因為“水仙花數(shù)”是三位整數(shù),所以取值范圍為100999。外循環(huán)變量i控制百位數(shù)字從1變化到9中層循環(huán)變量j控制十位數(shù)字從0變化到9內(nèi)循環(huán)變量k控制個位數(shù)字從0變化到9。int i,j,k,n;cout水仙花數(shù):;for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) m=i*i*i+j*j*j+k*k*k; n=100*i+10*j+k; if(m=n) coutm ; 62編輯課件方法2:不使用循環(huán)嵌套,只用1個for語句編寫程序。int main()int i,j,k,n;cout水仙花數(shù):;for(n=100;n1000;n+) i=n/100; / i為百位數(shù)字 j=n/10-i*10; / j為十位數(shù)字 k=n%10; / k為個位數(shù)字 if(i*i*i+j*j*j+k*k*k=n) coutn ;63編輯課件【例 2.22】 用“枚舉法”求解百元買百雞

溫馨提示

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

評論

0/150

提交評論