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

下載本文檔

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

文檔簡介

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

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

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

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

5、t120;170setw(int n)設置數(shù)據輸出的寬度coutxsetw(3)y;x y(中間有2個空格)10編輯課件表2.1 常用格式控制符格式控制符說 明示 例語 句結 果setfill(char c)設置填充字符coutsetfill()setw(6)120;120setprecision(int n)設置浮點數(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應用示例#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應用示例12編輯課件【例2.2】 使用格式控制符輸出數(shù)據#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(表達式) 語句1 else 語句2true表達式語句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(表達式1) 語

10、句1 else if(表達式2) 語句2 else if (表達式n) 語句n else 語句n+1falsefalsefalsetruetrue表達式1表達式2表達式n語句n語句n+1語句2語句1true20編輯課件【例2.5】根據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】從鍵盤上輸入兩個字符,比較其大小,輸出大于、等于和小于的判斷結果。#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、表達式) case 常量表達式1: 語句1 case 常量表達式2: 語句2 case 常量表達式n: 語句n default: 語句序列n+1 注意:表達式只能是整型、字符型或枚舉型注意:常量表達式1n的值必須各不相同。26編輯課件有無無false有無falsetrue計算表達式的值常量表達式1語句1break常量表達式2語句2break無有false常量表達式ntrue語句nbreakdefault語句n+1true有圖2.12 switch語句執(zhí)行流程27編輯課件【例2.7】將輸入的百分制成績按以下規(guī)定轉換成相應的等級: 成 績 等級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ù)據有誤!endl; return 0;共用同一個語句組 思考:若省去break語句,情況會怎樣? 29編輯課件2.3 循環(huán)結構按照給定規(guī)則重復地執(zhí)行程序中的語句 2.3.1 while 語句while (表達式) 語句falsetrue表達式語句圖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) /構造循環(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)結束!實際上是將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 (表達式);falsetrue表達式語句圖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; / 相當于一個空操作語句do cout”I like C+!”2); / 輸出一行文字信息注意: dowhile首先執(zhí)

17、行循環(huán)體,然后再判斷表達式,至少執(zhí)行一次循環(huán)體。當?shù)谝淮窝h(huán)表達式的值為真時,while與dowhile的結果完全一樣,否則結果不相同。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(表達式1;表達式2;表達式3 ) 表達式2執(zhí)行非00退出循環(huán)表達式1表達式3表達式1;whil

18、e(表達式2) ; 表達式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次落地時共經過多少米?第10次反彈多高?分析:第1次落地后反彈高度為h=100/2第2次落地時經過的米數(shù)為s=100+h*2第2次落地后反彈高度為h=h/2第3次落地

19、時經過的米數(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次落地時,共經過s米;反彈的高度是h米endl; return 0;思考 該小球反彈多少次才能靜止下來? 40編輯課件注意:for語句中的三個表達式可以部分省略或全部省略,但;不能省略,若省略表達式2,則表示循環(huán)條件為真。for( ;i=100) brea

20、k ; / break語句用于跳出循環(huán) int sum=0;for(int i=1; i100)break;三個表達式都可以是任何類型的C+表達式。int i,sum;for(i=1,sum=0;i=100;sum+=i,i+); 表達式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)體內包含另一個完整的循環(huán)結構。三種循環(huán)語句皆可以相互嵌套 。for() while() do while();43編輯課件【例2.14】 編程顯示輸出九九乘法表 圖2.19 九九乘法表運行

21、界面44編輯課件truefalsei=1i=9 ?truefalsej=1j=9 ?顯示i*j表達式j+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)內循環(huán)控制變量與外循環(huán)控制變量不能同名。(2)外循環(huán)必須完全包含

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

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

24、環(huán)結構中,continue語句將使執(zhí)行流程直接跳轉到循環(huán)條件的判定部分,然后決定循環(huán)是否繼續(xù)進行。在for循環(huán)結構中,當遇到continue時,執(zhí)行流程將跳過循環(huán)體中余下的語句,而轉去執(zhí)行for語句中的表達式3,然后根據表達式2進行循環(huán)條件的判定以決定是否繼續(xù)執(zhí)行for循環(huán)體。51編輯課件while(i=100) break; coutsumendl;while(i=100) continue; break和continue語句的區(qū)別52編輯課件【例 2.16】 輸出100以內能夠被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 標號;標號: 語句;標號語句將流程轉到標號所指定的標號語句處。54編輯課件【例 2.17】利用goto語句實現(xiàn)計算前100個自然數(shù)之和并輸出結果#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ù),結束;否則執(zhí)行(4)(4) mn,n r,再重復執(zhí)行(2)m n r12 5 2 5 2 1 2 1 0 輾轉相除法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提前結束循環(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)結束后,只要判斷i是否大于sqrt(m),若是,則表明m是素數(shù),輸出該素數(shù)。(4)要判斷多個素數(shù)是否為素數(shù),需要使用雙重循環(huán)。外循環(huán)每循環(huán)一次提供一個數(shù),由內循環(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)。計算公式為:當?shù)趎項的絕對值小于10-6時結束。分析:關鍵是找部分級數(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調用標準函數(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內循環(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論