C++程序設計-北京林業大學3-第03章 Cplusplus的控制語句_第1頁
C++程序設計-北京林業大學3-第03章 Cplusplus的控制語句_第2頁
C++程序設計-北京林業大學3-第03章 Cplusplus的控制語句_第3頁
C++程序設計-北京林業大學3-第03章 Cplusplus的控制語句_第4頁
C++程序設計-北京林業大學3-第03章 Cplusplus的控制語句_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第三章C+的控制語句 2本章主要內容l 理解和領會C+程序的三種基本結構:順序、選擇和循環結構。l 熟練掌握兩種選擇語句:if語句和switch語句。l 熟練掌握三種循環語句:while循環語句、do-while循環語句和for循環語句。l 熟練掌握跳轉語句break和繼續語句continue。33.1 C+語句概述 l 語句(statement)是程序中最小的可執行單位。l 一條語句可以完成一種基本操作,若干條語句組合在一起就能實現某種特定的功能。l C+中語句可以分為以下4種形式:l 1聲明語句 對變量或對象等進行定義的語句稱為聲明語句 。它可以放在函數的任何位置。如:double a,b

2、; l 2單一語句 完成一定操作的一條語句稱為單一語句。按照完成的功能,又可分為以下三類: 4(1)控制語句 l完成一定的控制功能的語句稱為控制語句。lC+中主要的控制語句: 其中,語句的()中為條件,其中,語句的()中為條件,表示內嵌的語句。例如,表示內嵌的語句。例如,for(i=1; i=100; i+) n=n+i;5(2)調用語句)調用語句l一次函數或流對象調用后加一個分號構成一條調用語一次函數或流對象調用后加一個分號構成一條調用語句。句。如:如: f() ; cout“n=”nb?a:b;6l 3空語句 僅由單個分號構成的語句 ,空語句不進行任何操作 。l 4復合語句 復合語句是用一

3、對花括號“ ”括起來的語句塊。復合語句在語法上等效于一個單一語句,在程序中凡是可以使用單一語句的地方都可以使用復合語句。使用復合語句應注意:l(1)花括號必須配對使用。l(2)花括號外不要加分號。例如,下面是一個復合語句: n=n+i;i+;coutn=nendl; 73.2 C+程序的3種基本結構 l 在程序設計中,語句可以按照結構化程序設計的思想構成3種基本結構,它們分別是順序結構、分支結構和循環結構,如圖3-1所示。 順序結構 分支結構 循環結構 語句A 語句B 條件P 語句A 語句B 真 假 條件P 語句A 8l 1順序結構 在順序結構中,程序是按照語句的書寫順序依次執行,語句在前的先

4、執行,語句在后的后執行 。【例3-1】計算直角三角形斜邊的長度。 l 2分支結構 在分支結構中,程序根據判斷條件是否成立選擇執行不同的程序段。也就是說,這種程序結構能有選擇地執行程序中的不同程序段。因此,這種結構也可稱為選擇結構。 C+能夠實現分支結構的語句有if語句、ifelse語句、ifelse if語句和switch語句。 9l3循環結構 在循環結構中,程序根據判斷條件是否成立決定是否重復執行某個程序段。這樣可以避免重復書寫需要多次執行的語句,從而減小了程序的長度,提高了重復處理的能力。 C+中可以實現循環結構的語句有while循環語句、 do-while循環語句和for循環語句。 10

5、3.3 if 語句 lif語句是最常用的一種分支語句,也稱為條件語句。l它可以根據所給定條件的滿足與否選擇執行不同的程序段。 if語句有3種形式:單分支if 語句、雙分支if語句和多分支if語句。11l3.3.1 單分支if 語句 最簡單的if語句形式: if(表達式) 語句 先計算關鍵字if后面的表達式的值。若為真,則執行if后的“語句”部分,否則跳過該“語句”部分。不管是否執行“語句”部分,最后都要跳到“語句”部分的后面繼續執行程序的其他部分。 12注意:(1)表達式外的括號不能省略。(2)在if(表達式)后不能加分號“;”。(3)關鍵字if的后面的表達式可以是任意的表達式,只要表達式的值

6、為非0,C+就將表達式的值當真值處理,否則當假值處理。(4)if語句的內嵌語句可以是單一語句,也可以是多條語句。(5)書寫程序時,盡量使if語句的內嵌語句比if語句縮進,這是良好的編程書寫風格。如:int x=1,y=2;if(x=0) y+;coutxscore80為良,80score70為中等,70score60為及格,score60為不及格。 17l3.3.4 if語句的嵌套 前面介紹的三種if語句的語句部分中又可包含另外一個或多個if語句,這種情況稱為if語句的嵌套。一般形式如下:18l使用if語句的嵌套時應注意以下幾個問題:(1)內嵌if語句必須完全包含在外層的if子句或else子句

7、中,即外層if語句和內層if語句間的關系是包含與被包含的關系,不能出現交叉的情況。(2)通常情況下,else子句總是與上面離它最近的、尚未配對的if語句相匹配。(3)如果if與else的數目不一樣,為實現程序設計者的意圖,可以加大括號來確定if與else的配對關系。19l【例3-4】設有以下分段函數:編寫一程序,輸入自變量x的值,輸出函數y的值。(1)利用多分支if語句的方法編寫程序。(2)利用if語句嵌套的方法編寫程序。 203.4 switch語句 lswitch語句是多分支語句。l雖然多分支if語句也可以實現多分支結構,但當需要判斷的條件較多時,程序顯得過于冗長,而且可讀性差。l在C+中

8、,使用switch語句可以更方便、更簡潔地實現多分支結構。 21lswitch語句:語句: switch(表達式表達式) case 常量表達式常量表達式1:語句:語句1; case 常量表達式常量表達式2:語句:語句2; case 常量表達式常量表達式n:語句:語句n; default:語句:語句n+1 22lswitch語句的執行過程是: 計算switch語句后面的表達式的值,當表達式的值與某一個case后面的常量的值相等時,就執行此case后面的語句,若所有的case中的常量的值都沒有與表達式的值匹配的,就執行default后面的語句,當沒有default語句時,則什么都不執行。(2)ca

9、se語句與default并不會改變控制流程。執行完一個case后面的語句后,程序執行的流程轉移到下一個case繼續執行。“case 常數”只是起語句標號作用,并不是在該處進行條件判斷。在執行switch語句時,根據switch后面表達式的值找到匹配的入口標號,就從此標號開始執行下去,不再進行判斷。 23l 說明:(1)switch后括號中的表達式可以是任意一個合法的C+表達式,但其值只能是字符型或整型。 (2)常量表達式1常量表達式n必須互不相同,而且不能是變量或表達式,每一常數后面要有冒號“:”,常量表達式相同時會產生編譯錯誤。例如,下面的語句將會產生編譯錯誤。case 69:coutIt

10、is 69endl;case E:coutIt is Escore80為良,80score70為中等,70score60為及格,score60為不及格(用switch語句實現)。l分析:程序可以利用switch語句對用戶輸入的一個百分制成績值進行分情況處理,對于每一種情況輸出對應的成績等級,顯然,對于每一種情況輸出一個成績等級后應跳出switch語句,因此,在case子句中應使用break語句完成跳出的功能。 253.5 循環語句 lC+提供了3種循環結構:while循環語句do-while循環語句for循環語句3.5.1 while循環語句 while(表達式) 循環體語句 26l該語句的執

11、行過程是:首先判斷while后面的表達式的值,若表達式的值為真,則執行while的內嵌語句(即循環體),執行完畢后,程序自動跳回到while再次判斷while后面的表達式的值,若為真,則再次執行循環體,然后重復以上過程,直到while后面的表達式的值為假時,才退出循環,接著執行循環體語句后面的其他程序語句。while循環語句的流程圖如圖3-3所示。 表達式 語句 假 真 27l注意:(1)循環體語句如果包含多條語句,應該用大括號括起來,表示每執行一次循環,則大括號內的所有語句都要被執行。(2)循環體中應包含使循環趨向于結束的語句,若沒有,則循環會一直執行下去。28【例3-7】將輸入的整數反向顯

12、示。l 分析:反向顯示一個整數時,首先顯示的是個位數,可以通過將該數對10取余得到。然后將數字除以10,得到的新的數字保留了除個位數在內的其他位數,再將它對10取余,即可得到輸入整數的十位數;依次執行下去,就可以得到輸入整數的各個位數。 29l3.5.2 do-while 循環語句 do 循環體語句 while(表達式) ;30l該語句的執行過程為:首先執行do-while的內嵌語句(即循環體語句)一次,然后再判斷while后面的表達式的值,若表達式的值為真,則程序自動返回到do繼續重復執行do-while的內嵌語句,如此反復,直到表達式的值為假時,循環結束,執行while后面的語句。whil

13、e循環語句的流程圖如圖3-4所示。 表 達 式 語 句 假 真 31l 說明:在循環體相同的情況下,while和do-while語句的功能基本相同。二者的區別在于:當循環條件一開始就為假時,do-while語句中的循環體至少會被執行一次,而while語句則一次都不執行。【例3-9】求解滿足12+22+32+i21000的i的最大值。l 分析:程序中利用變量i表示某個從1開始的整數,利用循環將從1開始的整數i的平方進行累加,累加的各數的平方和用變量n表示,并以n1000作為循環的判斷條件;當有某個整數i的值可以使得循環條件n1000不滿足時,則i-1為滿足條件的最大值。32程序程序1程序程序2#

14、includeusing namespace std;int main() int i,sum1=0;cini;while(i=10)sum1=sum1+i;i+; coutsum1endl; return 0;#includeusing namespace std;int main() int i,sum2=0;cini;dosum2=sum2+i;i+;while(i=10);coutsum2endl; return 0;33l3.5.3 for 循環語句 for(表達式1; 表達式2; 表達式3) 循環體語句 或者 for(循環變量賦初值; 循環條件; 循環變量變化) 循環體語句34l該

15、語句的執行過程是:(1)計算for后面的表達式1。(2)計算表達式2。若表達式2的值為真,則執行for語句的內嵌語句(即循環體語句),然后執行第(3)步;若表達式2的值為假,則循環結束,執行第(5)步。(3)計算表達式3。(4)返回繼續執行第2步。(5)循環結束,執行for語句的循環體后面的語句。 表達式 2 求解表達式 1 假 真 語句 求解表達式 3 循環體后面 的其他語句 35l在for循環語句的使用中需注意以下幾點:(1)表達式1一般會為循環變量賦值,也可以是與循環無關的其它表達式。表達式3也可以是與循環無關的任意表達式。表達式1和表達式3可以是一個簡單的表達式,可以是包含一個以上的簡

16、單表達式,中間用逗號間隔。例如,for (z=0,y=1; y=100; y+, z+) coutzyendl;(2)表達式1、表達式2和表達式3均可省略,但表達式后面的分號不能省略。 省略表達式1,應在for語句之前給循環變量賦值。 省略表達式2,則不判斷循環條件,循環將一直執行下去,即認為表達式2始終為真。 省略表達式3時,為了使循環能進行下去,應當在循環體中對循環變量進行改變。36 當3個表達式都省略時,這時循環語句變為for(; ; )語句,這樣,循環將一直執行下去,該循環為無限循環(即死循環)。 l【例3-11】求11000之間的完全數。l分析:完全數是指一個數恰好等于它的包括1在內

17、的所有不同因子之和。例如,6為完全數,因為6=1+2+3。 37l3.5.4 循環嵌套在一個循環的循環體中又包含另一個循環語句,稱為循環嵌套。C+的3種循環語句可以相互嵌套,構成循環嵌套。以下幾種都是合法的循環嵌套: 38l3.5.5 3種循環的比較 (1)3種循環可以相互代替,且都可以使用break和continue語句限定循環轉向。 (2)while和for語句是先判斷條件、后執行循環體;do-while語句是先執行循環體、后判斷條件。 (3)for語句功能最強,可以完全取代while和do-while語句。(4)while和do-while語句中循環變量初始化應該在循環前提前完成,如i=

18、1;,并在while后指定循環條件,如while(i=100)。循環體中要包含使循環趨于結束的語句,如i+;。而for循環可把這些操作一起放在for語句當中,如for(i=1; i=100; i+)sum=sum+i;。 393.6 限定轉向語句 l在前面介紹的C+的3種循環語句中,都是以表達式的值為假作為循環結束條件的。但在程序設計中,有時希望能夠直接控制程序流程的轉移,這就需要用到限定轉向語句。C+提供了跳轉語句break和繼續語句continue40l3.6.1 break語句 (1)在switch結構中,當某個case子句執行完后,使用break語句跳出switch結構。 (2)用在循環結構中,用break語句來結束循環。在嵌套循環中,break語句只能結束其所在的那層循環。也就是說,它只能跳出一層循環。 l【例3-12】 41l3.6.2 continue語句 該語句只能用在循環結構中。當在循環結構中遇到continue語句時,則跳過continue語句后的其他語句結束本次循環,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論