第3章 順序、選擇和循環(huán)_第1頁
第3章 順序、選擇和循環(huán)_第2頁
第3章 順序、選擇和循環(huán)_第3頁
第3章 順序、選擇和循環(huán)_第4頁
第3章 順序、選擇和循環(huán)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第3 3章章 順序、選擇和循環(huán)順序、選擇和循環(huán)3.1 3.1 順序結(jié)構和塊順序結(jié)構和塊3.2 3.2 選擇結(jié)構選擇結(jié)構3.3 3.3 循環(huán)結(jié)構循環(huán)結(jié)構3.4 3.4 結(jié)構化程序設計應用結(jié)構化程序設計應用3.5 3.5 常見問題解答常見問題解答3.1 3.1 順序結(jié)構和塊順序結(jié)構和塊3.1.1 3.1.1 說明語句說明語句在C+中,把完成對數(shù)據(jù)結(jié)構的定義和描述、對變量或標識符常量的屬性說明(如初值、類型等)稱為說明語句說明語句或聲明語句聲明語句。說明語句的目的是用來在程序中引入一個新的標識符(變量名、函數(shù)名、數(shù)組名、類名、對象名、引用名以及類型名等),本身一般不執(zhí)行操作。例如:int a =

2、8, b;/ 變量定義int sum(int x, int y)/ 函數(shù)定義,函數(shù)的使用以后會討論return (x+y);class CStudent / 類聲明,以后還會討論 / ;3.1.2 表達式語句表達式語句是C+程序中最簡單也是最常用的語句。任何一個表達式加上分號就是一個表達式語句,例如:x + y;nNum = 5;在書寫格式上,可以將幾個簡單的表達式語句同時寫在一行上,但此時的語句之間必須插入一些空格以提高程序的可讀性。例如:a = 1; b = 2; c = a + b;3.1.3 塊語句塊語句塊語句,簡稱為塊(block),是由一對花括號“ ”括起來的語句,它又稱為復合語句

3、復合語句。例如:/ 塊開始int i = 2, j = 3, k = 4;coutijkendl;/ 輸出結(jié)果是2、3和4/ 塊結(jié)束3.1.3 塊語句事實上,任何合法的語句都可以出現(xiàn)在塊中,包括空語句。需要說明的是:(1)從整體上看,塊語句等效于一條語句。反過來說,若需要將兩條或兩條以上的語句作為一個整體單條語句時,則必須將它們用花括號括起來。(2)塊中的語句可以是0個、1個或多個語句。與空語句相類似,一個不含任何語句的塊,即僅由一對花括號構成,稱為空塊空塊,它也僅為語法的需要而設置,并不執(zhí)行任何動作。(3)在塊中定義的變量僅在塊中有效,塊執(zhí)行后,變量被釋放。例如:/ 塊開始int i = 2

4、, j = 3, k = 4;coutijkendl;/ 輸出結(jié)果是2、3和4/ 塊結(jié)束coutijkendl;/ 錯誤:i,j,k不再有效3.1.3 塊語句(4)一個塊中也可以再包含塊,這就形成了塊的嵌套,但此時外層塊與內(nèi)層塊之間具有不同的作用域。外層塊的變量可在內(nèi)層塊中使用,但內(nèi)層塊中的變量僅能內(nèi)層塊中使用。當外層塊和內(nèi)層塊中有同名變量定義時,則外層塊的同名變量在內(nèi)層塊中不起作用。例如:【例Ex_Blocks】塊語句的變量使用范圍#include using namespace std;int main()/ 外層塊開始int i = 5, j = 6;coutitjendl;/ 輸出的結(jié)

5、果是5和6/ 內(nèi)層塊開始int i = 2, j = 3, k = 4;coutitjtkendl;/ 輸出結(jié)果是2、3和4/ 內(nèi)層塊結(jié)束coutitjendl;/ 輸出的結(jié)果仍然是5和6,但不能使用kreturn 0;/ 外層塊結(jié)束程序運行的結(jié)果如下:程序運行的結(jié)果如下:5 62 3 45 63.2 3.2 選擇結(jié)構選擇結(jié)構3.2.1 3.2.1 條件的構成條件的構成1. 1. 關系運算符及其表達式關系運算符及其表達式關系運算是邏輯運算中比較簡單的一種。所謂關系運算關系運算實際上是比較兩個操作數(shù)是否符合給定的條件。在C+中,若符合條件,則關系表達式的值為bool型的true或非0(“真”),

6、否則為bool型的false或0 (“假”)。由于關系運算需要兩個操作數(shù),所以關系運算符都是雙目運算符,其結(jié)合性是從左至右。C+提供了下列6種關系運算符: 小于,若表達式小于,若表達式e1 e2e1 e2成立,則結(jié)果為成立,則結(jié)果為truetrue,否則為,否則為falsefalse=小于等于,若表達式小于等于,若表達式e1 = e2e1 大于,若表達式大于,若表達式e1 e2e1 e2成立,則結(jié)果為成立,則結(jié)果為truetrue,否則為,否則為falsefalse=大于等于,若表達式大于等于,若表達式e1 = e2e1 = e2成立,則結(jié)果為成立,則結(jié)果為truetrue,否則為,否則為fa

7、lsefalse=相等于,若表達式相等于,若表達式e1 = e2e1 = e2成立,則結(jié)果為成立,則結(jié)果為truetrue,否則為,否則為falsefalse!=!=不等于,若表達式不等于,若表達式e1 != e2e1 != e2成立,則結(jié)果為成立,則結(jié)果為truetrue,否則為,否則為falsefalse其中,前4種的優(yōu)先級相同且高于后面的兩種。例如,若有表達式:a = b c3.2.1 條件的構成2. 2. 邏輯運算符及其表達式邏輯運算符及其表達式C+提供了下列3種邏輯運算符:! !邏輯非邏輯非( (單目單目) )&邏輯與邏輯與( (雙目雙目) )|邏輯或邏輯或( (雙目雙目)

8、)邏輯非邏輯非“!”是指將true變false,false變true。邏輯與邏輯與“&”“&”是指當兩個操作數(shù)都是true時,結(jié)果才為true,否則為false。邏輯或邏輯或“|”是指當兩個操作數(shù)中有一個是true時,結(jié)果就為true,而只有當它們都為false時,結(jié)果才為false。3.2.1 條件的構成其表達式的運算過程是這樣的:因“!”優(yōu)先級最高,故先進行“!0”的運算,結(jié)果為1(true)。進行“4-1”運算,結(jié)果為3,這樣表達式變成“5 3 & 2 | 8 3”,結(jié)果為true(1)。處理“8 3”,結(jié)果為false(0)。這樣表達式變成“1 & 2

9、| 0”進行“1&2”的運算,因1和2都是不為0的數(shù),故結(jié)果為true。最后結(jié)果為true。3.2.2 if語句條件語句if具有下列一般形式:if (if () ) elseelse 這里的if、else是C+的關鍵字。注意,if后的一對圓括號不能省。當“表達式e”為true或不為0時,將執(zhí)行“語句s1”。當“表達式e”為false或0時,“語句s2”被執(zhí)行。其中,else可省略,即變成這樣的簡單的if語句:if (if () ) s3.2.2 if語句這樣,只有當“表達式e”為true或不為0時,“語句s”被執(zhí)行。【例Ex_Compare】輸入兩個整數(shù),比較兩者的大小#include

10、 using namespace std;int main()int nNum1, nNum2;coutnNum1nNum2;if (nNum1!=nNum2)if (nNum1nNum2)coutnNum1 nNum2endl;elsecoutnNum1 nNum2endl;elsecoutnNum1 = nNum2endl;return 0;程序運行的結(jié)果如下:程序運行的結(jié)果如下:Please input two integer numbers: 10 12310 1233.2.3 ?:運算符條件運算符“?:”是C+中惟一的一個三目運算符,它具有下列格式: ? ? :表達式e1、表達式e2

11、和表達式e3是條件運算符“?:”的三個操作數(shù)。其中,表達式e1是C+中可以產(chǎn)生true和false結(jié)果的任何表達式。其功能是:如果表達式e1的結(jié)果為true,則執(zhí)行表達式e2,否則執(zhí)行表達式e3。例如:nNum = (a b) ? 10 : 8;當(a b)為true時,則表達式(a b) ? 10 : 8的結(jié)果為10,從而nNum = 10;否則(a b) ? 10 : 8的結(jié)果為8,nNum = 8。3.2.4 switch語句switch語句又叫開關語句。當程序有多個條件判斷時,若使用if語句則可能使嵌套太多,降低了程序的可讀性。開關語句switch能很好地解決這種問題,它具有下列形式:

12、switch ( switch ( ) e ) case case : 語句語句s s1 1 case case : 語句語句s s2 2 .case case : 語句語句s sn n default default :語句:語句s sn+1n+1 3.2.4 switch語句其中switch、case、default都是關鍵字,當“表達式e”的值與case中某個常量表達式的值相等時,就執(zhí)行該case中“:”號后面的所有語句,直至遇到break語句跳出。若case中所有常量表達式的值都不等于“表達式e”的值,則執(zhí)行“default:”后面的語句,若default省略,則跳出switch 結(jié)構

13、。3.3 3.3 循環(huán)結(jié)構循環(huán)結(jié)構3.3.1 while3.3.1 while語句語句while循環(huán)語句具有下列格式:while (while ()e) s其中,while是C+的關鍵字,“語句s”是循環(huán)體,它可以是一條語句,也可以是多條語句。當為多條語句時,一定要用花括號(“ ”)括起來,使之成為塊語句,如果不加花括號,則while的循環(huán)體s只是緊跟while (e)后面的第1條語句。當“表達式e”為true或不為0時,便開始執(zhí)行while循環(huán)體中的“語句s”,然后反復執(zhí)行,每次執(zhí)行都會判斷表達式e是否為true或不為0,若為false或為0,則終止循環(huán)。3.3.1 while語句【例Ex_

14、SumWhile】求整數(shù)1到50的和#include using namespace std;int main()intnNum = 1, nTotal = 0;while (nNum=50) nTotal += nNum;nNum+;coutThe sum from 1 to 50 is: nTotaln;return 0;程序運行的結(jié)果如下:程序運行的結(jié)果如下:The sum from 1 to 50 is: 12753.3.2 dowhile語句do.while循環(huán)語句具有下列格式:do do swhile (while () ;e) ;其中do和while都是C+關鍵字,“語句s”是循

15、環(huán)體,它可以是一條語句,也可以是塊語句。程序從do開始執(zhí)行,然后執(zhí)行循環(huán)體“語句s”,當執(zhí)行到while時,將判斷“表達式e”是否為true,若是,則繼續(xù)執(zhí)行循環(huán)體“語句s”,直到下一次“表達式e”等于false為止。3.3.2 dowhile語句例如,用do.while循環(huán)語句求整數(shù)1到50的和?!纠鼸x_SumDoWhile】求整數(shù)1到50的和#include using namespace std;int main()intnNum = 1, nTotal = 0;donTotal += nNum;nNum+; while (nNum=50);coutThe sum from 1 to

16、50 is: nTotaln;return 0;程序運行的結(jié)果如下:程序運行的結(jié)果如下:The sum from 1 to 50 is: 12753.3.3 for語句for循環(huán)語句具有下列格式:for (for (表達式表達式e1; e1; 表達式表達式e2; e2; 表達式表達式e3) e3) s其中for是C+的關鍵字,“語句s”是循環(huán)體,它可以是一條語句,也可以是塊語句。一般情況下,“表達式e1”用作循環(huán)變量的初始化,“表達式e2”用作循環(huán)體的循環(huán)條件,當?shù)扔趖rue時,開始執(zhí)行循環(huán)體“語句s”,然后計算“表達式e3”,再判斷“表達式e2”的值是否為true,若是,再執(zhí)行循環(huán)體“語句s

17、”,再計算“表達式e3”,如此反復,直到“表達式e2”等于false或0為止。如圖3.1所示,圖中箭頭表示程序運行的方向,稱為流向流向,程序運行的次序稱為流程流程,這樣的圖稱為流程圖流程圖。3.3.3 for語句下面用for語句來改寫【例Ex_SumDoWhile】中的代碼?!纠鼸x_SumFor】求整數(shù)1到50的和#include using namespace std;int main()intnTotal=0;for (int nNum=1; nNum=50; nNum+)nTotal += nNum;coutThe sum from 1 to 50 is: nTotaln;return

18、 0;程序運行的結(jié)果如下:程序運行的結(jié)果如下:The sum from 1 to 50 is: 12753.3.4 break和continue在C+程序中,若需要跳出循環(huán)結(jié)構或提前結(jié)束本次循環(huán),就需要使用break和continue語句,其格式如下:break;break;continue;continue;continue是用于那些依靠條件判斷而進行循環(huán)的循環(huán)語句,如for、while、dowhile語句,它的目的是提前結(jié)束本次循環(huán)。對于while和dowhile語句來說,continue提前結(jié)束本次循環(huán)后,流程轉(zhuǎn)到while后面的表達式e。對于for語句來說,continue提前結(jié)束本次

19、循環(huán)后,其流程轉(zhuǎn)到for語句的表達式e3,然后轉(zhuǎn)到表達式e2。3.3.4 break和continue【例Ex_Continue】把1100之間的不能被7整除的數(shù)輸出#include using namespace std;int main()for (int nNum=1; nNum=100; nNum+)if (nNum%7 = 0) continue;coutnNum ;coutn;return 0;程序運行的結(jié)果如下:程序運行的結(jié)果如下:1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 22 23 24 2526 27 29 30 31 32

20、33 34 36 37 38 39 40 41 43 44 45 46 47 4850 51 52 53 54 55 57 58 59 60 61 62 64 65 66 67 68 69 71 7273 74 75 76 78 79 80 81 82 83 85 86 87 88 89 90 92 93 94 9596 97 99 1003.4 3.4 結(jié)構化程序設計應用結(jié)構化程序設計應用3.4.1 3.4.1 算法和流程圖算法和流程圖自然語言自然語言就是人們?nèi)粘J褂玫恼Z言,用自然語言描述算法,比較習慣和容易接受,但是敘述較繁瑣和冗長,容易出現(xiàn)“歧義性”,一般不采用這種方法。流程圖流程圖是用

21、一組幾何圖形表示各種類型的操作,在圖形上用扼要的文字和符號表示具體的操作,并用帶有箭頭的流程線表示操作的先后次序(流程),箭頭的方向表示流程的流向流向。用流程圖描述算法,能夠?qū)⒔鉀Q問題的步驟清晰、直觀地表示出來。表3.1列出了ANSI流程圖的基本符號及其含義。3.4.1 算法和流程圖(1)順序結(jié)構順序結(jié)構。如圖3.2所示,虛線框內(nèi)是一個順序結(jié)構,a表示入口點,b表示出口點。其中,A和B兩個框是順序執(zhí)行的。3.4.1 算法和流程圖(2)選擇結(jié)構選擇結(jié)構。如圖3.3(a)所示,虛線框內(nèi)是一個選擇結(jié)構。該結(jié)構中,必須含有一個判斷框,根據(jù)給定的條件e是否成立而選擇執(zhí)行A框或B框。要注意,只能執(zhí)行A或B

22、框之一,不可能既執(zhí)行A框又執(zhí)行B框。一旦執(zhí)行完畢,流程經(jīng)過出口點b,脫離該選擇結(jié)構。A或B兩個框中可以有一個是空,即不執(zhí)行任何操作,如圖3.3(b)所示。3.4.1 算法和流程圖(3)循環(huán)結(jié)構循環(huán)結(jié)構。它有兩種類型,如圖3.4所示。虛線框內(nèi)是一個循環(huán)結(jié)構,圖3.4(a)是先判斷條件e是否成立,如果成立,則執(zhí)行A框,執(zhí)行后再判斷條件e是否成立,如果仍成立,再執(zhí)行A框,如此反復執(zhí)行,直到條件e不成立為止,然后流程經(jīng)過出口點b,脫離該循環(huán)結(jié)構。圖3.4(b)是先執(zhí)行A框,然后判斷條件e是否成立,如果成立,再執(zhí)行A框,如此反復執(zhí)行,直到條件e不成立為止,然后流程經(jīng)過出口點b,脫離該循環(huán)結(jié)構。3.4.1

23、 算法和流程圖對于for語句來說,它實際上可看成是while循環(huán)結(jié)構的一種擴展,如圖3.5所示,A是循環(huán)體語句,e1、e2和e3是for中的表達式。3.4.2 自動出題器設定義的整型變量有x、y、a、b和s。其中,x和y表示產(chǎn)生的100以內(nèi)的兩個整數(shù),a和b分別是正確的答案和用戶回答的答案,s是用戶的得分。由于需要10道題,因此用for循環(huán)來實現(xiàn),具體算法如圖3.6的流程圖。根據(jù)算法可有下列程序。3.4.3 打印圖案這里以打印一幅倒三角形圖案為例,來說明這種圖案打印的一般方法。如圖3.7所示。3.4.3 打印圖案從圖中可以看出,打印圖案實質(zhì)上可看成是從上到下順序輸出一行字符,而每行字符又可分解

24、為輸出空格和圖案字符。因此,圖案打印可用外層的行循環(huán)和內(nèi)層的列循環(huán)來實現(xiàn)。如圖3.8是本圖案打印的流程圖,其中整型變量row、col和n分別表示行、列及行數(shù)。3.4.3 打印圖案根據(jù)算法流程圖可有下列程序?!纠鼸x_Print】打印圖案#include using namespace std;int main()int row, col, n = 6;/ 打印10行for (row=0; rown; row+)for (col=0; colrow; col+)/ A:輸出空格cout ;for (col=0; col2*(n-row)-1; col+)/ B:輸出字符cout#;cout5?+x:x5?+x:x=x+10;coutyendl;coutx5?+x:x5?+x:x=x+10;”中的“x5”是兩個條件運算符的共用操作數(shù),因此它相當于“y = x5?+x:(x5?+x:x=x+10);”。按其從從右向左右向左的結(jié)合性,應先運算“(x5?+x:x=x+10)”,由于“x5”此時為false,因而執(zhí)行“x=x+10”,即x=13。然后計算“y = x5?+x:13”,由于“x5”此時為true,因而執(zhí)行“+x”,這樣y=14。但實際結(jié)果:但實際結(jié)果:y=13y=13。上述理解是沒有錯誤的,只是C+對條件運算符進行了優(yōu)化,也就是說,當有:e1 ? e2 : e3只有當e1為t

溫馨提示

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

評論

0/150

提交評論