




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第4章章 c+表達式表達式與基本程序控制結構與基本程序控制結構 運算符是指用來表示在數據上執行運算符是指用來表示在數據上執行某些特定操作的符號。某些特定操作的符號。參與運算的數據稱為操作數。參與運算的數據稱為操作數。根據參與運算的操作數的個數是一根據參與運算的操作數的個數是一個、兩個或三個,運算符分為一元運算個、兩個或三個,運算符分為一元運算符、二元運算符和三元運算符。符、二元運算符和三元運算符。4 41 1 運算符與表達式運算符與表達式表達式表達式是指用運算符和圓括號把常量、變量用運算符和圓括號把常量、變量和函數等運算成分連接起來的有意義的式子和函數等運算成分連接起來的有意義的式子。單個常
2、量、變量和函數也都可以看成是一個單個常量、變量和函數也都可以看成是一個表達式。表達式。表達式經過計算后都會得到一個確定的表達式經過計算后都會得到一個確定的值,這個值就是表達式的值。值,這個值就是表達式的值。每個表達式都具有唯一確定的值每個表達式都具有唯一確定的值和唯一確定的類型。和唯一確定的類型。例如:例如:98.56 , (98.56) , x , 876-78 ,3*(2.5+5) ,sqrt(9)都是合法的表達式。都是合法的表達式。它們的值分別為它們的值分別為98.56、98.56、x的值、的值、794、22.5、3。其中其中sqrt()是一個計算平方根的標準函是一個計算平方根的標準函數
3、,包含在庫數,包含在庫math.h中。中。 c+中有一種表達式稱為逗號表達式,指中有一種表達式稱為逗號表達式,指的是用逗號分隔開的表達式序列。的是用逗號分隔開的表達式序列。比如:比如: x = 3 , y = 8 , x + y逗號表達式的求值次序是從左到右依次計逗號表達式的求值次序是從左到右依次計算各表達式的值,以最后一個表達式的值和類算各表達式的值,以最后一個表達式的值和類型作為整個逗號表達式的值和類型。比如上面型作為整個逗號表達式的值和類型。比如上面這個逗號表達式的值為這個逗號表達式的值為11。4.1.1 算術表達式算術表達式用算術運算符(用算術運算符(+、-、*、/)連接起)連接起來的
4、表達式就稱為算術表達式。來的表達式就稱為算術表達式。 用除法運算符進行整數除法與進行浮點用除法運算符進行整數除法與進行浮點數除法是不同的。用于整數時,表示整除,如數除法是不同的。用于整數時,表示整除,如果有余數,余數部分就被省略了。如:果有余數,余數部分就被省略了。如: 5 / 2 得到的結果為得到的結果為 2(int型)型) 8 / 5 得到的結果為得到的結果為 1(int型)型)而用于浮點數時:而用于浮點數時:5.0 / 2.0 得到的結果為得到的結果為 2.5(float型)型)8.0 / 5.0 得到的結果為得到的結果為 1.6(float型)型)取余運算符用于取整數除法的余數,是對取
5、余運算符用于取整數除法的余數,是對除法運算符的一個必要的補充。除法運算符的一個必要的補充。 如:如: 5 2 得到的結果為得到的結果為 1 8 5 得到的結果為得到的結果為 3在在/和和%運算中,注意除數不能為零,否則將運算中,注意除數不能為零,否則將產生溢出錯誤。產生溢出錯誤。在做在做+和和*運算特別是運算特別是*運算時,很容易出現運算時,很容易出現運算結果產生溢出的情況,要注意將數據定義為足運算結果產生溢出的情況,要注意將數據定義為足夠長度的類型。夠長度的類型。當賦值運算符的兩邊出現相同的變量時,當賦值運算符的兩邊出現相同的變量時,c+還提供了一個簡潔的表達方式:還提供了一個簡潔的表達方式
6、:x=。其中的。其中的x可可為為 +、-、*、/、等。、等。假定假定e1和和e2是表達式,那么是表達式,那么 e1 = (e1) x (e2)就等價于就等價于 e1 x = e2例如,表達式例如,表達式a=a+9可以用可以用+=寫成如下形式:寫成如下形式: a+=9 注意圍繞注意圍繞 e2 的括號。例如,表達式的括號。例如,表達式y-=x+1實際上是實際上是y=y-(x+1) + + 和和 - - 運算符運算符增增1運算符和減運算符和減1運算符分別對其操作數進行運算符分別對其操作數進行加加1和減和減1操作,它們既可以用在變量前,作為操作,它們既可以用在變量前,作為前綴運算符,例如:前綴運算符,
7、例如: int m, n; +m; -n; 又可用在變量后,作為后綴運算符。例如又可用在變量后,作為后綴運算符。例如: m+; n-; 前綴增(減)前綴增(減)1運算符在使用變量的值之運算符在使用變量的值之前就使變量值加前就使變量值加1或減或減1,后綴增(減)后綴增(減)1運算符在使用變量的值之運算符在使用變量的值之后才使變量值加后才使變量值加1或減或減1。例如,若例如,若n的值為的值為5,那么,那么 x = n +;先將先將n的值的值5賦給賦給x,即,即x的值為的值為5,再將,再將 n的值的值加加1,則,則n為為6。而。而 x = + n;先將先將n的值加的值加1得到得到6,再將,再將n的值
8、賦給的值賦給x,則,則x和和n的值都為的值都為6。4.1.2 關系運算關系運算c+的關系運算符都是二元的,有的關系運算符都是二元的,有、=、= 4 的值為的值為1,而表達式而表達式 67 != 67 的值為的值為0。例例4.1 關于關系運算的一個例子關于關系運算的一個例子# include void main()double x=45.3, y; couty; cout(xy)10) & (x20)例如,當例如,當 x=14 時,上述表達式為時,上述表達式為1; 當當 x=8 時,上述表達式為時,上述表達式為0。| 運算符左右兩邊的表達式只要有一個為運算符左右兩邊的表達式只要有一個為真(非真(
9、非0),整個表達式的值就為),整個表達式的值就為1。只有當其。只有當其左右兩邊的表達式都為左右兩邊的表達式都為0時,整個表達式的值時,整個表達式的值才為才為0。例如:例如: (x20)當當x=36時,此表達式的值為時,此表達式的值為1; x=8時,此表時,此表達式的值也為達式的值也為1; x=16 時,此表達式的值為時,此表達式的值為0。! 運算符用在表達式的前面,表示取表達運算符用在表達式的前面,表示取表達式的非。若表達式值為式的非。若表達式值為0,取非以后為,取非以后為1; 若表若表達式值為非達式值為非0,取非以后為,取非以后為0。例如:例如: !(32)的值為的值為0,因為,因為(32)
10、的值為的值為1。c+在計算邏輯表達式的值時,若從左到右計在計算邏輯表達式的值時,若從左到右計算到某處就已經能夠確定表達式的值,則不再繼續算到某處就已經能夠確定表達式的值,則不再繼續后面部分的求值。后面部分的求值。例如,形如例如,形如 e1 & e2 的表達式,的表達式,在已求得表在已求得表達式達式e1的值為的值為0的情況下,已經能夠確定整個邏輯表的情況下,已經能夠確定整個邏輯表達式的值為達式的值為0,c+就不再對就不再對e2求值。求值。同樣,形如同樣,形如 e1 | e2 的表達式,的表達式,如果已經求得如果已經求得e1的值為的值為1,則整個表達式的值一定為,則整個表達式的值一定為1,c+就不
11、再就不再對對e2求值。求值。4.1.4 條件運算符條件運算符條件運算符條件運算符?:是是c+中唯一的一個三元運算符。中唯一的一個三元運算符。條件運算符的表達式具有如下形式條件運算符的表達式具有如下形式: e1 ? e2 : e3 其中其中e1、e2、e3皆為表達式。皆為表達式。條件運算執行的操作是:先計算表達式條件運算執行的操作是:先計算表達式e1的值,如果為非的值,如果為非0,則計算表達式,則計算表達式 e2 的的值并把它作為整個表達式的值值并把它作為整個表達式的值; 而如果而如果e1的值為的值為0,則計算表達式,則計算表達式e3的值,并用它的值,并用它作為整個表達式的值。作為整個表達式的值
12、。例如,表達式例如,表達式 ( x y ) ? 10 : 20 如果如果x的值大于的值大于y的值,則表達式的值為的值,則表達式的值為10,否則表,否則表達式的值為達式的值為20。又如,在語句又如,在語句 max = (ab) ? a : b; 中,中,max將賦值將賦值為為a、b中較大的數。中較大的數。4.1.5 位運算位運算在計算機存儲器中,所有的數據都是以二進在計算機存儲器中,所有的數據都是以二進制形式存放的。位運算是對二進制機器數進行的制形式存放的。位運算是對二進制機器數進行的操作。操作。c+中的位運算符有中的位運算符有6種種: 按優先級順序為按優先級順序為 ,(),&,|。位運算符的運
13、算對象只能是整型(位運算符的運算對象只能是整型(int)或)或字符型(字符型(char),位運算不改變運算對象本身。),位運算不改變運算對象本身。例例4.2 下面的小程序將輸出下面的小程序將輸出: fedcba98 #includevoid main() int a=0 x01234567; /0000 0001 0010 0011 0100 0101 0110 0111 couthexaendl; /1111 1110 1101 1100 1011 1010 1001 1000(1)(按位求反):(按位求反):一元運算,將運算對象各位求反。一元運算,將運算對象各位求反。(2)(右移)(右移)
14、: 二元運算,左操作數為移位對象,右操作數為二元運算,左操作數為移位對象,右操作數為移動位數移動位數n。返回移位對象整體向右移動。返回移位對象整體向右移動n位,高位,高位用位用n個個0填補以后的值。(當移位對象為負數的填補以后的值。(當移位對象為負數的補碼時,高位用補碼時,高位用n個個1填補。)填補。)例例4.3 左移和右移左移和右移#includevoid main() int a=0 x0089abcd; /0000 0000 1000 1001 1010 1011 1100 1101int b=-100; /1111 1111 1111 1111 1111 1111 1001 1100
15、couthex(a5)endl; /0001 0001 0011 0101 0111 1001 1010 0000couthex5)endl;/0000 0000 0000 0100 0100 1101 0101 1110 couthex(b5)endl;/1111 1111 1111 1111 1111 0011 1000 0000couthex5)endl;/1111 1111 1111 1111 1111 1111 1111 1100程序輸出:程序輸出:113579a044d5efffff380fffffffc(4)&(按位與):(按位與):二元運算,將兩個運算對象按位相與。二元運算,將
16、兩個運算對象按位相與。(5)(按位異或):(按位異或):二元運算,將兩個運算對象按位異或。二元運算,將兩個運算對象按位異或。(6)|(按位或):(按位或):二元運算,將兩個運算對象按位相或。二元運算,將兩個運算對象按位相或。例例4.4 按位邏輯運算按位邏輯運算 #includevoid main() int a=0 x01234567; /0000 0001 0010 0011 0100 0101 0110 0111int b=0 x89abcdef; /1000 1001 1010 1011 1100 1101 1110 1111 couthex(a&b)endl; /0000 0001 0
17、010 0011 0100 0101 0110 0111couthex(ab)endl; /1000 1000 1000 1000 1000 1000 1000 1000 couthex(a|b)endl; /1000 1001 1010 1011 1100 1101 1110 1111程序輸出:程序輸出:12345678888888889abcdef4.1.6 求字節數運算求字節數運算求字節數運算為一元運算,用求字節數運算為一元運算,用sizeof()運算符。其功能是求變量或表達式的數據運算符。其功能是求變量或表達式的數據類型在內存中占據的字節數。待求字節數類型在內存中占據的字節數。待求字節
18、數的表達式放在括號中,返回值為整型。的表達式放在括號中,返回值為整型。例例4.5 求字節數運算求字節數運算#include#includevoid main() short a=-32768;float b=9.0;double c=5.7;char d=k;coutsizeof(a) ;coutsizeof(b) ;coutsizeof(c) ;coutsizeof(d) ;coutsizeof(sqrt(b) ;coutsizeof(a+b+c) . (類成員訪問)(類成員訪問) (數組下標)(數組下標) : : (作用域訪問)(作用域訪問) 左左2*(取內容取內容) &(取地址取地址)
19、! + - + (一元一元) - (一元一元) sizeof右右3*(乘乘) / %左左4+ -左左5左左6 =左左7= !=左左8& 左左9| 左左10? : (條件運算)(條件運算)右右11= += -= *= /= %= = &= |= = 右右12, 左左c+各運算符的優先級總的來說有如下規律各運算符的優先級總的來說有如下規律(按優先級從高到低):(按優先級從高到低):一元一元二元二元(除了賦值除了賦值)三元三元賦值賦值逗號逗號; 二元運算符又有如下規律:二元運算符又有如下規律:算術算術關系關系邏輯邏輯; 邏輯運算符有如下規律:邏輯運算符有如下規律:! & |。例例4.7 根據表達式的
20、求值次序,求下列表達式的值根據表達式的求值次序,求下列表達式的值假定有假定有 int x = 5 , y = 4 , z = 6 ; char a = s , b = t ; int w = 2 ; 表達式表達式 表達式的值表達式的值 z / y z / 4.0 z / y % z / x a b | y z a != b & z 6 a = b & ! ( y z ) a = b & ! y z x + 1 +z x + 1 z+ -x -y | x + y z & z % 3 = 0 ( x+ , x += y , x + y )11.50100110114按照結構化程序設計的思想,程序按
21、照結構化程序設計的思想,程序由三種單入口、單出口的基本結構組成:由三種單入口、單出口的基本結構組成:順序結構、選擇結構、循環結構。順序結構、選擇結構、循環結構。c+的控制流就是由這三種基本結的控制流就是由這三種基本結構組成的。構組成的。4 42 2 基本程序控制結構基本程序控制結構4.2.1 順序結構順序結構 順序結構的程序是指程序中的所有語句都是順序結構的程序是指程序中的所有語句都是按書寫順序逐一執行的,只有順序結構的程序功能按書寫順序逐一執行的,只有順序結構的程序功能有限。有限。例例4.8 計算球的體積計算球的體積 。已知球的體積公式為:已知球的體積公式為: 4r3v= 3# includ
22、e void main() float radius , bulk; cout radius ; / 輸入半徑輸入半徑 bulk = (4*3.1416* radius* radius* radius)/3; cout bulk = bulk endl; / 輸出體積輸出體積 選擇結構也稱為分支結構,用于處選擇結構也稱為分支結構,用于處理在程序中出現了兩條或更多執行路徑理在程序中出現了兩條或更多執行路徑可供選擇的情況。選擇結構可以用選擇可供選擇的情況。選擇結構可以用選擇語句來實現。選擇語句包括語句來實現。選擇語句包括 if 語句和語句和 switch 語句。語句。4.2.2 選擇結構選擇結構1
23、if 語句語句if語句有兩種格式。語句有兩種格式。格式格式1:if (條件表達式條件表達式) 語句語句功能:對條件表達式求值,若值為真(非功能:對條件表達式求值,若值為真(非0)則執行它后面的語句則執行它后面的語句; 否則什么也不做。否則什么也不做。若需要執行的語句用單條語句寫不下,就應若需要執行的語句用單條語句寫不下,就應該用復合語句。該用復合語句。例例4.9 將兩個數排序輸出將兩個數排序輸出 # include void main( ) float a , b , ls; cout ab; if (ab) ls = a; a = b; b = ls; couta b endl ; 格式格式
24、2: if (條件表達式條件表達式) 語句語句1 else 語句語句2功能:對條件表達式求值,若值為真功能:對條件表達式求值,若值為真(非(非0)執行其后的語句)執行其后的語句1; 否則執行否則執行else后后面的語句面的語句2。即根據條件表達式是否為真分。即根據條件表達式是否為真分別作不同的處理。別作不同的處理。4.10 用用if else 對例對例4.9的改寫的改寫 # include void main() loat a , b , ls; coutab; if (ab) couta bendl; else cout b a endl; 上一節介紹的條件運算符也可以用上一節介紹的條件運算
25、符也可以用if語語句來改寫。例如:句來改寫。例如: y = (ab)? a:b; 可以用下面這個可以用下面這個 if-else 語句來代替:語句來代替: if (ab) y=a; else y=b; if語句中也可以包含語句中也可以包含if 語句,這就語句,這就構成了構成了if語句的嵌套。語句的嵌套。例例4.11 某單位向職工按月發放醫療補貼的具體方案如某單位向職工按月發放醫療補貼的具體方案如下:職工工齡在下:職工工齡在10年以下的,醫療補貼為其基本工資的年以下的,醫療補貼為其基本工資的10% ; 工齡在工齡在10年以上年以上20年以下的,醫療補貼為其基本年以下的,醫療補貼為其基本工資的工資的
26、15% ; 工齡在工齡在20年以上年以上30年以下的,醫療補貼為年以下的,醫療補貼為其基本工資的其基本工資的20% ; 工齡在工齡在30年以上的,醫療補貼為其年以上的,醫療補貼為其基本工資的基本工資的30%。輸入某職工的工齡及基本工資,計算。輸入某職工的工齡及基本工資,計算他每月應得的醫療補貼。他每月應得的醫療補貼。# include void main() int seniority; double wages, allowance; coutseniority; /輸入工齡輸入工齡 coutwages; /輸入基本工資輸入基本工資 if (seniority10 ) /工齡在工齡在10年以
27、下年以下 allowance=wages*0.1; else if( seniority 20 ) /工齡在工齡在10年年19年年 allowance=wages*0.15; else if ( seniority 30 ) /工齡在工齡在20年年29年年 allowance=wages*0.2; else allowance=wages*0.3; /工齡在工齡在30年以上年以上 coutthe allowance is : allowanceendl ; #includevoid main() int seniority ; double wages , allowance ; cout s
28、eniority ; cout wages ; if ( seniority= 10 & seniority= 20 & seniority = 30 ) allowance = wages * 0.3 ; cout the allowance is : allowance 2 ) if ( x 4 ) x = 35 ; else x = 78 ; cout x 2 ) if ( x 2 ) if ( x 4 ) x = 35 ; else x = 78 ; 當當x2或者或者x4時,這兩種理解會導致兩個不同的答案。這時,這兩種理解會導致兩個不同的答案。這就叫產生了二義性。就叫產生了二義性。在絕
29、大多數的語言中,包括在絕大多數的語言中,包括c+,都,都采用最近匹配原則來解決這個問題。所謂采用最近匹配原則來解決這個問題。所謂最近匹配原則就是每個最近匹配原則就是每個else必須與離它最近必須與離它最近的那個沒有匹配的的那個沒有匹配的if相匹配。按照這個原相匹配。按照這個原則,上面的第二種理解是正確的。則,上面的第二種理解是正確的。2switch語句語句switch語句又稱為開關語句,其格式如下:語句又稱為開關語句,其格式如下: switch (表達式表達式) case 常量表達式常量表達式1 : 語句序列語句序列1 break ; case 常量表達式常量表達式2 : 語句序列語句序列2
30、break ; case 常量表達式常量表達式n : 語句序列語句序列n break ; default : 語句序列語句序列n+1 break ; 其中,其中,switch后后面的表達式的類型必須面的表達式的類型必須與與case后面的常量表達后面的常量表達式的類型一致,而且只式的類型一致,而且只能是字符型、整型或枚能是字符型、整型或枚舉型。舉型。case后面的表達后面的表達式必須是常量表達式,式必須是常量表達式,不能含有變量不能含有變量; 同一個同一個switch中不能有重復的中不能有重復的常量表達式。常量表達式。switch語句執行的過程如下:語句執行的過程如下:先計算先計算switch后
31、面的表達式的值,然后拿它后面的表達式的值,然后拿它與各與各case后面的常量表達式比較。當遇到某個后面的常量表達式比較。當遇到某個case中的常量表達式的值與它相等時,就執行那個中的常量表達式的值與它相等時,就執行那個case后的語句序列,直到遇到后的語句序列,直到遇到break語句或語句或switch語句結束時的右花括號語句結束時的右花括號“”時,才退出時,才退出switch語句,語句,去執行去執行switch后面的語句。如果沒有一個常量表后面的語句。如果沒有一個常量表達式與達式與switch后面的表達式值相等,就執行后面的表達式值相等,就執行default后的語句序列。后的語句序列。例例4
32、.13 根據一個代表星期的根據一個代表星期的0到到6之間的整數,在屏幕上打印之間的整數,在屏幕上打印出它代表的是星期幾出它代表的是星期幾# include void main( ) int w ; /代表星期的整數代表星期的整數 cout w ; switch ( w ) case 0 : cout its sunday . endl ; break ; case 1 : cout its monday . endl ; break ; case 2 : cout its tuesday . endl ; break ; case 3 : cout its wednesday . endl ;
33、 break ; case 4 : cout its thursday . endl ; break ; case 5 : cout its friday . endl ; break ; case 6 : cout its saturday . endl ; break ; default : cout invalid data ! endl ; default語句是可以缺省的。如果沒有語句是可以缺省的。如果沒有default,則當所有匹配都失敗時,將不執行,則當所有匹配都失敗時,將不執行任何操作。建議使用任何操作。建議使用default語句,除非語句,除非case語句已覆蓋了所有的可能,以
34、避免由于沒有語句已覆蓋了所有的可能,以避免由于沒有考慮到某種情況而給程序帶來的不利影響。考慮到某種情況而給程序帶來的不利影響。break語句在語句在switch中的作用是跳出整個中的作用是跳出整個switch語句。語句。在例在例4.13中,每個中,每個case的語句序列后都有一的語句序列后都有一個個break語句(最后一個語句(最后一個case或或default語句的語句的break可以省略)。在這種情況下,各個可以省略)。在這種情況下,各個case的排列次序的排列次序可以是任意,不會影響程序的結果。如果沒有可以是任意,不會影響程序的結果。如果沒有break,則執行完該,則執行完該case語句
35、的語句序列后,還將語句的語句序列后,還將接下去執行后面的接下去執行后面的case的語句序列。在這種情況下的語句序列。在這種情況下,各個,各個case排列的次序不同,就可能產生不同的結排列的次序不同,就可能產生不同的結果。果。例如,把例例如,把例4.7中的中的break都刪去(假定輸入的都刪去(假定輸入的w的值的值為為4),會出現什么情況呢?),會出現什么情況呢?如果是在有如果是在有break的情況下,的情況下,w應與第五個應與第五個case中的中的常量常量4匹配,從而在屏幕上打印出:匹配,從而在屏幕上打印出: its thursday .之后就該跳出之后就該跳出switch,到達程序末尾并結束
36、。然而,到達程序末尾并結束。然而,沒有了,沒有了break的的switch語句得到的結果與原來大不一樣。語句得到的結果與原來大不一樣。在打印了上面的字符串后,并不會跳出在打印了上面的字符串后,并不會跳出switch,而是依次,而是依次進入后面的進入后面的case及及default語句去執行打印語句,于是得到語句去執行打印語句,于是得到的輸出為:的輸出為: its thursday . its friday . its saturday . invalid data ! 如果多個如果多個case后的語句序列是相同的,即要做的后的語句序列是相同的,即要做的操作是一樣的,可采用下面的格式以避免重復書
37、寫:操作是一樣的,可采用下面的格式以避免重復書寫:switch (表達式表達式) case 常量表達式常量表達式1 : case 常量表達式常量表達式2 : case 常量表達式常量表達式i : 語句序列語句序列 break ; case 常量表達式常量表達式n : 語句序列語句序列n break ; default : 語句序列語句序列n+1 例例4.14 用用switch語句來實現例語句來實現例4.11 include void main( ) int seniority , s ; double wages , allowance ; cout seniority ; cout wage
38、s ; s = seniority / 10 ; /得到工齡的十位數字 switch ( s ) case 0 : /工齡在10年以下 allowance = wages * 0.1 ; break ; case 1 : / 工齡在10年19年 allowance = wages * 0.15 ; break ; case 2 : / 工齡在20年29年 allowance = wages * 0.2 ; break ; case 3 : / 工齡在30年49年 case 4 : allowance = wages * 0.3 ; break ; default : allowance = 0
39、 ; cout the allowance is : allowance endl ; c+中有三種循環語句可用來實現循中有三種循環語句可用來實現循環結構:環結構:while語句、語句、do_while語句和語句和for語語句句。這些語句各有各的特點,而且常常可。這些語句各有各的特點,而且常常可以互相替代。在編程時應根據題意選擇最以互相替代。在編程時應根據題意選擇最適合的循環語句。適合的循環語句。4.2.3 循環結構循環結構1while語句語句while語句的格式為:語句的格式為: while(條件表達式)(條件表達式) 語句語句 /循環體循環體while語句的執行過程:語句的執行過程:(1)
40、對條件表達式求值,如果值為真(非)對條件表達式求值,如果值為真(非0)則執)則執行步驟(行步驟(2),否則轉步驟(),否則轉步驟(4); (2)執行循環體中的語句)執行循環體中的語句; (3)返回()返回(1); (4)終止循環,去執行)終止循環,去執行while語句的下一語句。語句的下一語句。例例4.15 計算計算100之內的奇數之和之內的奇數之和#includevoid main() int n=1; int sum=0; while ( n 100 ) sum +=n; / 累加累加 n +=2; / 修改為下一個奇數修改為下一個奇數 cout the sum is : sum endl
41、 ;# include void main() int seniority ; double wages , allowance ; cout seniority ; /輸入第一個人的工齡輸入第一個人的工齡 while ( seniority != 0 ) /若工齡不為若工齡不為0則進入循環則進入循環 coutwages ; if(seniority=10 & seniority=20 & seniority=30) allowance = wages * 0.3 ; cout the allowance is : allowance endl ; cout seniority ; /輸入下一
42、人的工齡輸入下一人的工齡 例例4.16 將例將例4.12改進為可以重復改進為可以重復計算不同的人的醫療補貼(以計算不同的人的醫療補貼(以輸入的工齡為輸入的工齡為0作為結束條件)作為結束條件)break語句不僅可用于跳出語句不僅可用于跳出switch語句,語句,還可用于跳出循環(包括三種循環語句)。還可用于跳出循環(包括三種循環語句)。但它只能跳出它所在的循環語句或但它只能跳出它所在的循環語句或switch語句,不能跳出外層的循環語句或語句,不能跳出外層的循環語句或switch語句(如果有的話)。若想跳出外層語句,語句(如果有的話)。若想跳出外層語句,還要在外層中使用還要在外層中使用break。
43、例例4.17 從鍵盤接收從鍵盤接收10個整數,求它們的平方根。若遇個整數,求它們的平方根。若遇到負數就終止程序到負數就終止程序# include # include void main() int i=1, num; double root ; while ( i = 10 ) cout num ; if ( num 0 ) /若若num是負數則退出循環是負數則退出循環 break ; root = sqrt(num) ; cout root endl ; i+ ; 例例4.18 對例對例4.17的改進:遇到負數則忽略并重新輸入下一個數據的改進:遇到負數則忽略并重新輸入下一個數據# inclu
44、de# includevoid main() int i = 1, num; double root; while ( i = 10 ) cout num; if (num0) /若num是負數則回到循環開始處 cout valid number!; continue; root = sqrt(num); cout root endl; i+; continue語句用在循環體中,語句用在循環體中,它的作用是忽略循環體中位它的作用是忽略循環體中位于它之后的語句,重新回到于它之后的語句,重新回到條件表達式的判斷。條件表達式的判斷。2do_while循環語句循環語句while語句的特點是先判斷條件,
45、再確定是語句的特點是先判斷條件,再確定是否執行循環體,也即否執行循環體,也即“先判斷,后執行先判斷,后執行”;如果如果第一次對條件表達式求值時它就為假,則循環體第一次對條件表達式求值時它就為假,則循環體就一次也不被執行。就一次也不被執行。do_while語句是先執行一次循環體之后,語句是先執行一次循環體之后,再根據條件表達式的值確定是否還要繼續執行循再根據條件表達式的值確定是否還要繼續執行循環體,也即環體,也即“先執行,后判斷先執行,后判斷”,循環體至少會,循環體至少會被執行一次。被執行一次。do_while語句的格式為:語句的格式為: do 語句語句 /循環體循環體 while (條件表達式
46、條件表達式) ; 其中的條件表達式及語句的規定同其中的條件表達式及語句的規定同while 語句一樣。注意語句一樣。注意條件表達式后面的分號不能少,因為整個條件表達式后面的分號不能少,因為整個do_while語句實語句實際上相當于一條語句。際上相當于一條語句。do_while語句的執行過程如下:語句的執行過程如下:(1)執行一遍循環體)執行一遍循環體; (2) 對條件表達式求值,若為真(非對條件表達式求值,若為真(非0)則轉步驟)則轉步驟(1),否則轉步驟(),否則轉步驟(3); (3)終止循環,去執行)終止循環,去執行do_while語句的下一語句。語句的下一語句。 do_while和和whi
47、le語句在大多數情況下都可以相互替代語句在大多數情況下都可以相互替代(除非是有可能循環體一次也不被執行的情況)。例如,例(除非是有可能循環體一次也不被執行的情況)。例如,例4.9中是利用中是利用while語句來計算語句來計算100之內的奇數之和的,可以將之內的奇數之和的,可以將它改寫為用它改寫為用do_while語句來求和。語句來求和。例例4.19 用用do_while語句來改寫例語句來改寫例4.15 # include void main() int n=1; int sum=0; do sum+=n; / 累加累加 n +=2; / 修改為下一個奇數修改為下一個奇數 while(n100
48、); cout the sum is : sum endl ; 例例4.20 根據下面的公式求根據下面的公式求的值。計算到最后一項的絕對值小于的值。計算到最后一項的絕對值小于10-6時時停止:停止: /4 = 1 1/3 + 1/5 1/7 + # include void main( ) double pi=0, x=1; int s=1 ; do pi = pi + s / x ; x += 2 ; s = - s ; while(1/x =1e-6); pi=pi*4; coutpi= piendl; 3for語句語句當循環次數確定的時候,用當循環次數確定的時候,用 for 語句更為直語
49、句更為直觀。觀。for語句的格式如下:語句的格式如下:for ( 表達式表達式1; 表達式表達式2; 表達式表達式3 ) 語句語句 /循環體循環體其中的表達式其中的表達式1通常用于對循環控制變量進通常用于對循環控制變量進行初始化行初始化; 表達式表達式2用于表示循環是否結束的條件用于表示循環是否結束的條件; 表達式表達式3用于對循環控制變量作修改。用于對循環控制變量作修改。for語句執行的過程如下:語句執行的過程如下:(1)對表達式)對表達式1求值求值; (2) 對表達式對表達式2求值,若其值為真則執行步驟(求值,若其值為真則執行步驟(3),),否則轉步驟(否則轉步驟(6); (3) 執行循環體執行循環體; (4)對表達式)對表達式3求值求值; (5)轉步驟()轉步驟(2); (6)結束循環,去執行)結束循環,去執行for語句的下一語句。語句的下一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國感衡器項目投資可行性研究分析報告
- 2025年中國金屬眼鏡框行業市場全景分析及前景機遇研判報告
- 邯鄲防火玻璃項目可行性研究報告
- 工業生產統計培訓課件
- 中山空氣凈化器項目商業計劃書參考范文
- 2025年中國互聯網拉桿箱市場深度調查及發展前景研究預測報告
- 2021-2026年中國生食甜瓜種植行業全景評估及投資規劃建議報告
- 2025年中國貨架生產設備行業市場調查研究及投資前景展望報告
- 2025年 岳陽汨羅市人民醫院護理人員招聘考試筆試試題附答案
- 2025年中國試驗臺行業市場深度分析及投資策略咨詢報告
- 學校文印室外包服務 投標方案(技術方案)
- 福建省廈門市2023-2024學年高二上學期期末考試英語試題(解析版)
- 《霍亂時期的愛情》
- 出科小結口腔預防
- 關于殘疾人法律知識講座
- 高速公路改造與提升工作
- 如何實現銷售增長和突破
- 社會組織行政執法程序解讀及典型案例分析教材
- 2022年中國醫學科學院放射醫學研究所高層次人才引進筆試備考題庫及答案解析
- 工程地質學實習報告
- 大班幼兒自主建構游戲:搭雞窩 課件
評論
0/150
提交評論