第4章C表達式與基本程序控制結構-ppt課件_第1頁
第4章C表達式與基本程序控制結構-ppt課件_第2頁
第4章C表達式與基本程序控制結構-ppt課件_第3頁
第4章C表達式與基本程序控制結構-ppt課件_第4頁
第4章C表達式與基本程序控制結構-ppt課件_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、41 運算符與表達式運算符與表達式運算符是指用來表示在數據上執(zhí)行某些運算符是指用來表示在數據上執(zhí)行某些特定操作的符號。參與運算的數據稱為特定操作的符號。參與運算的數據稱為操作數??梢苑謩e稱為單目、雙目和操作數??梢苑謩e稱為單目、雙目和三目運算符。三目運算符。表達式是指用運算符和圓括號把常量、表達式是指用運算符和圓括號把常量、變量和函數等運算成分銜接起來的有意變量和函數等運算成分銜接起來的有意義的式子。單個常量、變量和函數也可義的式子。單個常量、變量和函數也可以看成是一個表達式。以看成是一個表達式。例如: 98.56 , (98.56) , x , 876-78 ,3*(2.5+5) 都是表達式

2、,l 根本運算符是指完成算術運算、關系運算、邏輯運算、位運根本運算符是指完成算術運算、關系運算、邏輯運算、位運算的運算符。算的運算符。4.1.1 算術運算算術運算 5.3%2錯錯l C+中有如下單目運算符: + - (正負號)l C+中有如下雙目運算符: + - * / %l 5 / 2 5.0 / 2 8 5 ?l 運算符%的操作數只能是整型或字符型。當賦值運算符的兩邊出現一樣的變量時,C+還提供了一個簡約的表達方式:x =。其中的x可為 +、-、*、/、等。假定e1和e2是表達式,那么 e1 = (e1) x (e2)就等價于 e1 x = e2例如,表達式 a = a + 9 可以用+

3、=寫成如下方式: a + = 9 留意圍繞 e2 的括號。例如,表達式 y - = x + 1 實踐上是 y = y - ( x + 1 ) + + 和和 - - 運算符運算符增增1運算符和減運算符和減1運算符分別對其操作數進展加運算符分別對其操作數進展加1和減和減1操作,它們既可以用在變量前,作為前綴運操作,它們既可以用在變量前,作為前綴運算符,例如算符,例如 int m , n ; + m ; - n ; 又可用在變量后,作為后綴運算符。例如又可用在變量后,作為后綴運算符。例如: m + ; n - ; 在兩種情形下,在兩種情形下,m的值都將加的值都將加1而而n的值都將減的值都將減1。前綴

4、增減前綴增減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的值賦給的值賦給x,那么,那么x和和n的值都為的值都為6。postincrement & preincrement4.1.2 關系運算關系運算

5、C+的關系運算符都是二元的,有的關系運算符都是二元的,有、=、= 4的值為的值為1,而表達式,而表達式 67 != 67的值為的值為0。例4.1 關于關系運算的一個例子。 # include void main( ) double x = 45.3 , y ; cout y ; cout ( x y ) 10 ) & ( x 20 )例如,當例如,當 x = 14 時,上述表達式為時,上述表達式為1; 當當 x = 8 時,時,上述表達式為上述表達式為0。| 運算符左右兩邊的表達式只需有一個為真非運算符左右兩邊的表達式只需有一個為真非0,整個表達式的值就為,整個表達式的值就為1。只需當

6、其左右兩邊的。只需當其左右兩邊的表達式都為表達式都為0時,整個表達式的值才為時,整個表達式的值才為0。例如:例如: ( x 20 )當當x=36時,此表達式的值為時,此表達式的值為1; x=8時,此表達式的時,此表達式的值也為值也為1; x = 16 時,此表達式的值為時,此表達式的值為0。! 運算符用在表達式的前面,表示取表達式的非。假設表達式值為0,取非以后為1; 假設表達式值為非0,取非以后為0。例如: !(32)的值為0,由于(32)的值為1。C+在計算邏輯表達式的值時,假設從左到右計算到某處就曾經可以確在計算邏輯表達式的值時,假設從左到右計算到某處就曾經可以確定表達式的值,那么不再繼

7、續(xù)后面部分的求值。定表達式的值,那么不再繼續(xù)后面部分的求值。例如,形如例如,形如 e1 & e2的表達式,在已求得表達式的表達式,在已求得表達式e1的值為的值為0的情況下,曾經可以確定整個邏的情況下,曾經可以確定整個邏輯表達式的值為輯表達式的值為0,C+就不再對就不再對e2求值。求值。同樣,形如同樣,形如 e1 | e2的表達式,假設曾經求得的表達式,假設曾經求得e1的值為的值為1,那么整個表達式的值一定為,那么整個表達式的值一定為1,C+就不再對就不再對e2求值。求值。4.1.4 條件運算符條件運算符條件運算符條件運算符?:是是C+中獨一的一個三元運算符。中獨一的一個三元運算符。條件

8、運算符的表達式具有如下方式條件運算符的表達式具有如下方式: e1 ? e2 : e3 其中其中e1、e2、e3皆為表達式。皆為表達式。條件運算執(zhí)行的操作是:先計算表達式條件運算執(zhí)行的操作是:先計算表達式e1的值,的值,假設為非假設為非0,那么計算表達式,那么計算表達式 e2 的值并把它作為整的值并把它作為整個表達式的值個表達式的值; 而假設而假設e1的值為的值為0,那么計算表達式,那么計算表達式e3的值,并用它作為整個表達式的值。的值,并用它作為整個表達式的值。例如,表達式例如,表達式 ( x y ) ? 10 : 20 假設假設x的值大于的值大于y的值,那么表達式的值為的值,那么表達式的值為

9、10,否,否那么表達式的值為那么表達式的值為20。又如,在語句又如,在語句 max = ( a b ) ? a : b ; 中,中,max將賦值為將賦值為a、b中較大的數。中較大的數。4.1.5 運算符的優(yōu)先級和結合性運算符的優(yōu)先級和結合性當一個表達式中有多個運算符時,運算符的優(yōu)先當一個表達式中有多個運算符時,運算符的優(yōu)先級和結合性就決議了表達式中各運算的先后順序。級和結合性就決議了表達式中各運算的先后順序。優(yōu)先級一樣時,由結合性決議運算次序。優(yōu)先級一樣時,由結合性決議運算次序。運算符的結合性分為左結合從左到右計算和運算符的結合性分為左結合從左到右計算和右結合從右到左計算。右結合從右到左計算。

10、例如,運算符例如,運算符+和和-優(yōu)先級一樣、為左結合,因此優(yōu)先級一樣、為左結合,因此表達式表達式 45+89-23按從左到右的順序計算,先做加法再做減法。按從左到右的順序計算,先做加法再做減法。而賦值運算符而賦值運算符=是右結合的,因此表達式是右結合的,因此表達式 x = y = 78的運算次序為:先將的運算次序為:先將78賦給賦給y,再將,再將y賦給賦給x。 表4.1 C+常用運算符的優(yōu)先級和結合性優(yōu)先級優(yōu)先級運運 算算 符符結合性結合性1( ) - . 類成員訪問類成員訪問 數組下標數組下標 : : 作用域訪問作用域訪問 左左2*(取內容取內容) &(取地址取地址) ! + - +

11、 (一元一元) - (一元一元) sizeof右右3*(乘乘) / %左左4+ -左左5左左6 =左左7= !=左左8& 左左9| 左左10? : 條件運算條件運算右右11= += -= *= /= %= = &= |= = 右右12, 左左C+各運算符的優(yōu)先級總的來說有如下規(guī)律各運算符的優(yōu)先級總的來說有如下規(guī)律按優(yōu)先級從高到低:按優(yōu)先級從高到低:一元一元二元二元(除了賦值除了賦值)三元三元賦值賦值逗號逗號; 二元運算符又有如下規(guī)律:二元運算符又有如下規(guī)律:算術算術關系關系邏輯邏輯; 邏輯運算符有如下規(guī)律:邏輯運算符有如下規(guī)律:! & |。請分析以下表達式的求值次序。假

12、定有 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.501001 1011442 根本程序控制構造根本程序控制構造按照構造化程序設計的思想,程序由三種按照構造化程

13、序設計的思想,程序由三種單入口、單出口的根本構造組成:順序構造、單入口、單出口的根本構造組成:順序構造、選擇構造、循環(huán)構造。選擇構造、循環(huán)構造。C+的控制流就是這的控制流就是這三種根本構造組成的。三種根本構造組成的。4.2.1 順序構造順序構造 順序構造的程順序構造的程序是指程序中的一切序是指程序中的一切語句都是按書寫順序語句都是按書寫順序逐一執(zhí)行的,只需順逐一執(zhí)行的,只需順序構造的程序功能有序構造的程序功能有限。限。例例4.2 計算球的體積計算球的體積 。知球的體積公式為:。知球的體積公式為: 4R3V= 3# include void main( ) float radius , bulk

14、 ; cout radius ; / 輸入半徑輸入半徑 bulk = 4*3.1416* radius* radius* radius/3 ; cout bulk = bulk endl ; / 輸出體輸出體積積 4.2.2 選擇構造選擇構造選擇構造也稱為分支構造,用于處置在程序中出現了選擇構造也稱為分支構造,用于處置在程序中出現了兩條或更多執(zhí)行途徑可供選擇的情況。選擇構造可以用兩條或更多執(zhí)行途徑可供選擇的情況。選擇構造可以用選擇語句來實現。選擇語句包括選擇語句來實現。選擇語句包括 if 語句和語句和 switch 語句。語句。1If 語句語句if語句有兩種格式。語句有兩種格式。格式一:格式一

15、:if (條件表達式條件表達式) 語句語句功能:對條件表達功能:對條件表達式求值,假設值為真式求值,假設值為真非非0那么執(zhí)行它那么執(zhí)行它后面的語句后面的語句; 否那么否那么什么也不做。什么也不做。假設需求執(zhí)行的語假設需求執(zhí)行的語句用單條語句寫不下句用單條語句寫不下,就應該用復合語句,就應該用復合語句。例例4.3 將兩個數排序輸出將兩個數排序輸出 。# include void main( ) float a , b , ls ; cout a b ; if ( a b ) ls = a ; / 以下三句的功能為交換以下三句的功能為交換a、b的的值值 a = b ; b = ls ; cout

16、a b endl ; 格式二格式二 if (條件表達式條件表達式) 語句語句1 else 語句語句2格式二的格式二的if語句完成的功能:對條件表達式求值,假設語句完成的功能:對條件表達式求值,假設值為真非值為真非0執(zhí)行其后的語句執(zhí)行其后的語句1; 否那么執(zhí)行否那么執(zhí)行else后面的語后面的語句句2。即根據條件表達式能否為真分別作不同的處置。即根據條件表達式能否為真分別作不同的處置。下面用格式二的下面用格式二的if語句改寫例語句改寫例4.3。例例4.4 對例對例4.3的改寫的改寫 。 # include void main( ) float a , b , ls ; cout a b ; if

17、( a b ) cout a b endl ; /先打印先打印a再打再打印印b else cout b a endl ; /先打印先打印b再打再打印印a 上一節(jié)引見的條件運算符也可以用上一節(jié)引見的條件運算符也可以用if語句語句來改寫。例如:來改寫。例如: y = ( a b ) ? a : b ; 可以用下面這個可以用下面這個if語句來替代:語句來替代: if ( a b ) y = a ; else y = b ; 條件表達式取值條件表達式取值false: 0true: 一切非一切非0值值例4.5 某單位向職工按月發(fā)放醫(yī)療補貼的詳細方案如下:職工工齡在10年以下的,醫(yī)療補貼為其根本工資的10

18、% ; 工齡在10年以上20年以下的,醫(yī)療補貼為其根本工資的15% ; 工齡在20年以上30年以下的,醫(yī)療補貼為其根本工資的20% ; 工齡在30年以上的,醫(yī)療補貼為其根本工資的30%。輸入某職工的工齡及根本工資,計算他每月應得的醫(yī)療補貼。# include void main( ) int seniority ; double wages , allowance ; cout seniority ; /輸入工齡輸入工齡 cout wages ; /輸入根本工資輸入根本工資 if ( seniority 10 ) / 工齡在工齡在10年以下年以下 allowance = wages * 0.1

19、 ; 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年以上年以上 cout The allowance is : allowance endl ; i f 語 句 中語 句 中也可以包含也可以包含if 語句,這語句,這就構成了就構成了if語句的嵌套。語句的嵌套。例例4.5也可以不運用嵌套的

20、也可以不運用嵌套的if語句。借助邏輯運算符,用幾個并語句。借助邏輯運算符,用幾個并列的列的if語句來完成例語句來完成例4.5的功能:的功能:例4.6 對例4.5的改寫。 # include void main( ) int seniority ; double wages , allowance ; cout seniority ; cout wages ; if ( seniority = 10 & seniority = 20 & seniority = 30 ) allowance = wages * 0.3 ; cout The allowance is : allow

21、ance 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時,這兩種了解會導致兩個不同的時,這兩種了解會導致兩個不同的答案。這就叫產生了二義性。答案。這就叫產生了二義性。在絕大多數的言語中,包括在絕大多數的言語中,包括C+,都采用最近匹配,都采用最近匹配原那么來處理這個問題。所謂最近匹配原那么就是原那么來處理這個問題。所謂最近匹配原那么就是每個每個else必需與離它最近的那個沒有匹配的必需與離它最近的那個沒有匹配的if相匹配。相匹配。按

22、照這個原那么,上面的第二種了解是正確的。按照這個原那么,上面的第二種了解是正確的。2switch語句語句switch語句又稱為開關語句,其格式如下:語句又稱為開關語句,其格式如下: switch (表達式表達式) case 常量表達式常量表達式1 : 語句序列語句序列1 break ; case 常量表達式常量表達式2 : 語句序列語句序列2 break ; case 常量表達式常量表達式n : 語句序列語句序列n break ; default : 語句序列語句序列n+1 break ; 其中,其中,switch后面的表后面的表達式的類型必需與達式的類型必需與case后面的常量表達式的后面的

23、常量表達式的類型一致,而且只能類型一致,而且只能是字符型、整型或枚是字符型、整型或枚舉型留意不能是浮舉型留意不能是浮點型點型; case后面的表后面的表達式必需是常量表達達式必需是常量表達式,不能含有變量式,不能含有變量 ; 同同一個一個switch中不能有反中不能有反復的常量表達式。復的常量表達式。# include void main( ) int w ; /代表星期的整數代表星期的整數 cout w ; switch ( w ) case 0 : cout Its Sunday . endl ; break ; case 1 : cout Its Monday . endl ; brea

24、k ; case 2 : cout Its Tuesday . endl ; break ; 例例4.7 根據一個代表星期的根據一個代表星期的0到到6之間的整數,在屏幕上打印出它之間的整數,在屏幕上打印出它代表的是星期幾。代表的是星期幾。case 3 : cout Its Wednesday . endl ; break ; case 4 : cout Its Thursday . endl ; break ; case 5 : cout Its Friday . endl ; break ; case 6 : cout Its Saturday . endl ; break ; defaul

25、t : cout Invalid data ! endl ; default語句是可以缺省的。假設沒有語句是可以缺省的。假設沒有default,那么當一,那么當一切匹配都失敗時,將不執(zhí)行任何操作。建議運用切匹配都失敗時,將不執(zhí)行任何操作。建議運用default語語句,除非句,除非case語句已覆蓋了一切的能夠,以防止由于沒有語句已覆蓋了一切的能夠,以防止由于沒有思索到某種情況而給程序帶來的不利影響。思索到某種情況而給程序帶來的不利影響。break語句在語句在switch中的作用是跳出整個中的作用是跳出整個switch語句。在例語句。在例4.7中,每中,每個個case的語句序列后都有一個的語句序

26、列后都有一個break語句最后一個語句最后一個case或或default語句語句的的break可以省略。在這種情況下,各個可以省略。在這種情況下,各個case的陳列次序可以是恣意的陳列次序可以是恣意,不會影響程序的結果。假設沒有,不會影響程序的結果。假設沒有break,那么執(zhí)行完該,那么執(zhí)行完該case語句的語語句的語句序列后,還將接下去執(zhí)行后面的句序列后,還將接下去執(zhí)行后面的case的語句序列。在這種情況下,的語句序列。在這種情況下,各個各個case陳列的次序不同,就能夠產生不同的結果。陳列的次序不同,就能夠產生不同的結果。例如,把例例如,把例4.7中的中的break都刪去假定輸入的都刪去假

27、定輸入的w的值為的值為4,會出現,會出現什么情況呢?。什么情況呢?。假設是在有假設是在有break的情況下,的情況下,w應與第五個應與第五個case中的常量中的常量4匹配,從而匹配,從而在屏幕上打印出:在屏幕上打印出: Its Thursday .之后就該跳出之后就該跳出switch,到達程序末尾并終了。然而,沒有了,到達程序末尾并終了。然而,沒有了break的的switch語句得到的結果與原來大不一樣。在打印了上面的字符串后,語句得到的結果與原來大不一樣。在打印了上面的字符串后,并不會跳出并不會跳出switch,而是依次進入后面的,而是依次進入后面的case及及default語句去執(zhí)行打印語

28、句去執(zhí)行打印語句,于是得到的輸出為:語句,于是得到的輸出為: Its Thursday . Its Friday . Its Saturday . Invalid data ! 假設多個case后的語句序列是一樣的,即要做的操作是一樣的,可采用下面的格式以防止反復書寫: switch (表達式) case 常量表達式1 : case 常量表達式2 : case 常量表達式i : 語句序列 break ; case 常量表達式n : 語句序列n break ; default : 語句序列n+1 # include void main( ) int seniority , s ; double

29、wages , allowance ; cout seniority ; cout wages ; 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 ; 例4.8 用switch語句來實現例4.5。這個程序是按工齡不會超越49年來設計的

30、。由于switch 不能象if語句那樣可以進展大于、小于等判別,而只能判別能否相等,因此程序中取工齡的十位數字作為switch表達式。case 3 : / 工齡在30年49年case 4 : allowance = wages * 0.3 ; break ; default : allowance = 0 ; cout The allowance is : allowance endl ; 4.2.3 循環(huán)構造循環(huán)構造C+中有三種循環(huán)語句可用來實現循環(huán)構造:中有三種循環(huán)語句可用來實現循環(huán)構造:while語句、語句、do_while語句和語句和for語句。這些語句語句。這些語句各有各的特點,而且

31、經??梢韵嗷ヌ娲T诰幊谈饔懈鞯奶攸c,而且經常可以相互替代。在編程時應根據題意選擇最適宜的循環(huán)語句。時應根據題意選擇最適宜的循環(huán)語句。1while語句語句while語句的格式語句的格式為:為: 例4.9 計算100之內的奇數之和。 # include void main( ) int n = 1 ; / 奇數 int sum = 0 ; / 奇數的累加和 while ( n 100 ) / n不能超越100 sum += n ; / 累加 n += 2 ; / 修正為下一個奇數 cout The sum is : sum endl ; while語句的執(zhí)行過程:語句的執(zhí)行過程: 對條件表達式求

32、值,假設值為真非對條件表達式求值,假設值為真非0那么執(zhí)行步驟那么執(zhí)行步驟,否那么轉步驟,否那么轉步驟; 執(zhí)行循環(huán)體中的語句執(zhí)行循環(huán)體中的語句; 前往前往 ; 終止循環(huán),去執(zhí)行終止循環(huán),去執(zhí)行while語句的下一語句。語句的下一語句。while 條件表達式條件表達式 語句語句 /循環(huán)體循環(huán)體例例4.10 將例將例4.6改良為可以反復計算不同的人的醫(yī)療補貼。改良為可以反復計算不同的人的醫(yī)療補貼。以輸入的工齡為以輸入的工齡為0作為終了條件。作為終了條件。 # include void main( ) int seniority ; double wages , allowance ; cout se

33、niority ; /輸入第一個人輸入第一個人的工齡的工齡 while ( seniority != 0 ) /假設工齡不假設工齡不為為0那么進入循環(huán)那么進入循環(huán) cout wages ; if ( seniority = 10 & seniority = 20 & seniority = 30 ) allowance = wages * 0.3 ; cout The allowance is : allowance endl ; cout seniority ; /輸入下一人輸入下一人的工齡的工齡 break語句不僅可用于跳出語句不僅可用于跳出switch語句,還可用于跳出循

34、環(huán)包括三語句,還可用于跳出循環(huán)包括三種循環(huán)語句。但它只能跳出它所在的循環(huán)語句或種循環(huán)語句。但它只能跳出它所在的循環(huán)語句或switch語句,不能語句,不能跳出外層的循環(huán)語句或跳出外層的循環(huán)語句或switch語句假設有的話。假想象跳出外層語句假設有的話。假想象跳出外層語句,還要在外層中運用語句,還要在外層中運用break。例4.11 從鍵盤接納10個整數,求它們的平方根。假設遇到負數就終止程序。# include # include void main( ) int i = 1 , num ; double root ; while ( i = 10 ) cout num ; if ( num 0

35、 ) /假設num是負數那么退出循環(huán) break ; root = sqrt(num) ; cout root endl ; i+ ; 這個程序有兩個出口。這個程序有兩個出口。每個輸入的數在計算其平每個輸入的數在計算其平方根之前都要判別它的正方根之前都要判別它的正負,假設為負數就退出循負,假設為負數就退出循環(huán),這是一個出口。另外環(huán),這是一個出口。另外,整型變量被用來實現記,整型變量被用來實現記數。數。i的初值為的初值為1,每執(zhí)行一,每執(zhí)行一次循環(huán)體就將它的值加次循環(huán)體就將它的值加1,當它的值為當它的值為11時,表示循時,表示循環(huán)體曾經執(zhí)行了環(huán)體曾經執(zhí)行了10次,于次,于是循環(huán)終止。這是第二個是

36、循環(huán)終止。這是第二個出口。這樣的程序可讀性出口。這樣的程序可讀性較差。較差。例例4.12 對例對例4.11的改良:遇到負數那么忽略并重新輸入下一個數據。的改良:遇到負數那么忽略并重新輸入下一個數據。 # include # include void main( ) int i = 1 , num ; double root ; while ( i = 10 ) cout num ; if ( num 0 ) /假設假設num是負數那么回到循環(huán)開場是負數那么回到循環(huán)開場處處 cout valid number! ; continue ; root = sqrt(num) ; cout root

37、endl ; i+ ; continue語句用在循環(huán)體中,它的作用是忽略循環(huán)體中位于它之后的語句,重新回到條件表達式的判別。2do_while循環(huán)語句循環(huán)語句while語句的特點是先判別條件,再確定能否執(zhí)語句的特點是先判別條件,再確定能否執(zhí)行循環(huán)體,也即行循環(huán)體,也即“先判別,后執(zhí)行先判別,后執(zhí)行;假設第一次對假設第一次對條件表達式求值時它就為假,那么循環(huán)體就一次也條件表達式求值時它就為假,那么循環(huán)體就一次也不被執(zhí)行。不被執(zhí)行。do_while語句是先執(zhí)行一次循環(huán)體之語句是先執(zhí)行一次循環(huán)體之后,再根據條件表達式的值確定能否還要繼續(xù)執(zhí)行后,再根據條件表達式的值確定能否還要繼續(xù)執(zhí)行循環(huán)體,也即循環(huán)

38、體,也即“先執(zhí)行,后判別,循環(huán)體至少會先執(zhí)行,后判別,循環(huán)體至少會被執(zhí)行一次。被執(zhí)行一次。do_while語句的格式為:語句的格式為: do 語句語句 /循環(huán)體循環(huán)體 while (條件表達式條件表達式) ; 其中的條件表達式及語句的規(guī)定同其中的條件表達式及語句的規(guī)定同while 語句一語句一樣。留意條件表達式后面的分號不能少,由于整個樣。留意條件表達式后面的分號不能少,由于整個do_while語句實踐上相當于一條語句。語句實踐上相當于一條語句。do_while語句的執(zhí)行過程如下:語句的執(zhí)行過程如下: 執(zhí)行一遍循環(huán)體執(zhí)行一遍循環(huán)體; 對條件表達式求值,假設為真非對條件表達式求值,假設為真非0那

39、么轉那么轉步驟步驟,否那么轉步驟,否那么轉步驟; 終止循環(huán),去執(zhí)行終止循環(huán),去執(zhí)行do_while語句的下一語句。語句的下一語句。 do_while和和while語句在大多數情況下都可以相互替代語句在大多數情況下都可以相互替代除非是有能夠循環(huán)體一次也不被執(zhí)行的情況。例如,例除非是有能夠循環(huán)體一次也不被執(zhí)行的情況。例如,例4.9中是利用中是利用while語句來計算語句來計算100之內的奇數之和的,可以將之內的奇數之和的,可以將它改寫為用它改寫為用do_while語句來求和。語句來求和。例4.13 用do_while語句來改寫例4.9 。 # include void main( ) int n

40、= 1 ; / 奇數 int sum = 0 ; / 奇數的累加和 do sum += n ; / 累加 n += 2 ; / 修正為下一個奇數 while ( n 100 ) ; cout The sum is : sum endl ; 例例4.14 根據下面的公式求根據下面的公式求的值。計算到最后一項的絕對值小于的值。計算到最后一項的絕對值小于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

41、= - s ; while ( 1 / x = 1e-6 ) ; pi = pi * 4 ; cout pi= pi endl ; 3for語句語句當循環(huán)次數確定的時候,當循環(huán)次數確定的時候,用用 for 語句更為直觀。語句更為直觀。for語句的格式如下:語句的格式如下:for ( 表達式表達式1; 表達式表達式2; 表達式表達式3 ) 語句語句 /循環(huán)體循環(huán)體其中的表達式其中的表達式1通常用于通常用于對循環(huán)控制變量進展初始化對循環(huán)控制變量進展初始化; 表達式表達式2用于表示循環(huán)能否用于表示循環(huán)能否終了的條件終了的條件; 表達式表達式3用于對用于對循環(huán)控制變量作修正。循環(huán)控制變量作修正。for

42、語句執(zhí)行的過程如下:語句執(zhí)行的過程如下: 對表達式對表達式1求值求值; 對表達式對表達式2求值,假設求值,假設其值為真那么執(zhí)行步驟其值為真那么執(zhí)行步驟,否那么轉步驟否那么轉步驟; 執(zhí)行循環(huán)體執(zhí)行循環(huán)體; 對表達式對表達式3求值求值; 轉步驟轉步驟; 終了循環(huán),去執(zhí)行終了循環(huán),去執(zhí)行for語句的下一語句。語句的下一語句。例如:例如:int i ; for ( i = 1 ; i = 10 ; i+ ) cout $ ; 程序的運轉結果是:程序的運轉結果是:$for語句也屬于語句也屬于“先判別,先判別,后執(zhí)行的循環(huán)語句,可以后執(zhí)行的循環(huán)語句,可以用用while語句替代。語句替代。例如,上面這個程序段可例如,上面這個程序段可以改寫為:以改寫為:int i = 1 ; while (i = 10 ) cout $ ; i + ; C+中中for語句的方式很靈敏,語句的方式很靈敏,for后面的三個表達式均可以缺省但后面的三個表達式均可以缺省但中間的分號不能缺省。

溫馨提示

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

評論

0/150

提交評論