版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、41 運(yùn)算符與表達(dá)式運(yùn)算符與表達(dá)式運(yùn)算符是指用來(lái)表示在數(shù)據(jù)上執(zhí)行某些運(yùn)算符是指用來(lái)表示在數(shù)據(jù)上執(zhí)行某些特定操作的符號(hào)。參與運(yùn)算的數(shù)據(jù)稱為特定操作的符號(hào)。參與運(yùn)算的數(shù)據(jù)稱為操作數(shù)??梢苑謩e稱為單目、雙目和操作數(shù)??梢苑謩e稱為單目、雙目和三目運(yùn)算符。三目運(yùn)算符。表達(dá)式是指用運(yùn)算符和圓括號(hào)把常量、表達(dá)式是指用運(yùn)算符和圓括號(hào)把常量、變量和函數(shù)等運(yùn)算成分銜接起來(lái)的有意變量和函數(shù)等運(yùn)算成分銜接起來(lái)的有意義的式子。單個(gè)常量、變量和函數(shù)也可義的式子。單個(gè)常量、變量和函數(shù)也可以看成是一個(gè)表達(dá)式。以看成是一個(gè)表達(dá)式。例如: 98.56 , (98.56) , x , 876-78 ,3*(2.5+5) 都是表達(dá)式
2、,l 根本運(yùn)算符是指完成算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算、位運(yùn)根本運(yùn)算符是指完成算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算、位運(yùn)算的運(yùn)算符。算的運(yùn)算符。4.1.1 算術(shù)運(yùn)算算術(shù)運(yùn)算 5.3%2錯(cuò)錯(cuò)l C+中有如下單目運(yùn)算符: + - (正負(fù)號(hào))l C+中有如下雙目運(yùn)算符: + - * / %l 5 / 2 5.0 / 2 8 5 ?l 運(yùn)算符%的操作數(shù)只能是整型或字符型。當(dāng)賦值運(yùn)算符的兩邊出現(xiàn)一樣的變量時(shí),C+還提供了一個(gè)簡(jiǎn)約的表達(dá)方式:x =。其中的x可為 +、-、*、/、等。假定e1和e2是表達(dá)式,那么 e1 = (e1) x (e2)就等價(jià)于 e1 x = e2例如,表達(dá)式 a = a + 9 可以用+
3、=寫成如下方式: a + = 9 留意圍繞 e2 的括號(hào)。例如,表達(dá)式 y - = x + 1 實(shí)踐上是 y = y - ( x + 1 ) + + 和和 - - 運(yùn)算符運(yùn)算符增增1運(yùn)算符和減運(yùn)算符和減1運(yùn)算符分別對(duì)其操作數(shù)進(jìn)展加運(yùn)算符分別對(duì)其操作數(shù)進(jìn)展加1和減和減1操作,它們既可以用在變量前,作為前綴運(yùn)操作,它們既可以用在變量前,作為前綴運(yùn)算符,例如算符,例如 int m , n ; + m ; - n ; 又可用在變量后,作為后綴運(yùn)算符。例如又可用在變量后,作為后綴運(yùn)算符。例如: m + ; n - ; 在兩種情形下,在兩種情形下,m的值都將加的值都將加1而而n的值都將減的值都將減1。前綴
4、增減前綴增減1運(yùn)算符在運(yùn)用變量的值之前就使運(yùn)算符在運(yùn)用變量的值之前就使變量值加變量值加1或減或減1,后綴增減后綴增減1運(yùn)算符在運(yùn)用變量的值之后才使運(yùn)算符在運(yùn)用變量的值之后才使變量值加變量值加1或減或減1。例如,假設(shè)例如,假設(shè)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 關(guān)系運(yùn)算關(guān)系運(yùn)算
5、C+的關(guān)系運(yùn)算符都是二元的,有的關(guān)系運(yùn)算符都是二元的,有、=、= 4的值為的值為1,而表達(dá)式,而表達(dá)式 67 != 67的值為的值為0。例4.1 關(guān)于關(guān)系運(yùn)算的一個(gè)例子。 # include void main( ) double x = 45.3 , y ; cout y ; cout ( x y ) 10 ) & ( x 20 )例如,當(dāng)例如,當(dāng) x = 14 時(shí),上述表達(dá)式為時(shí),上述表達(dá)式為1; 當(dāng)當(dāng) x = 8 時(shí),時(shí),上述表達(dá)式為上述表達(dá)式為0。| 運(yùn)算符左右兩邊的表達(dá)式只需有一個(gè)為真非運(yùn)算符左右兩邊的表達(dá)式只需有一個(gè)為真非0,整個(gè)表達(dá)式的值就為,整個(gè)表達(dá)式的值就為1。只需當(dāng)
6、其左右兩邊的。只需當(dāng)其左右兩邊的表達(dá)式都為表達(dá)式都為0時(shí),整個(gè)表達(dá)式的值才為時(shí),整個(gè)表達(dá)式的值才為0。例如:例如: ( x 20 )當(dāng)當(dāng)x=36時(shí),此表達(dá)式的值為時(shí),此表達(dá)式的值為1; x=8時(shí),此表達(dá)式的時(shí),此表達(dá)式的值也為值也為1; x = 16 時(shí),此表達(dá)式的值為時(shí),此表達(dá)式的值為0。! 運(yùn)算符用在表達(dá)式的前面,表示取表達(dá)式的非。假設(shè)表達(dá)式值為0,取非以后為1; 假設(shè)表達(dá)式值為非0,取非以后為0。例如: !(32)的值為0,由于(32)的值為1。C+在計(jì)算邏輯表達(dá)式的值時(shí),假設(shè)從左到右計(jì)算到某處就曾經(jīng)可以確在計(jì)算邏輯表達(dá)式的值時(shí),假設(shè)從左到右計(jì)算到某處就曾經(jīng)可以確定表達(dá)式的值,那么不再繼
7、續(xù)后面部分的求值。定表達(dá)式的值,那么不再繼續(xù)后面部分的求值。例如,形如例如,形如 e1 & e2的表達(dá)式,在已求得表達(dá)式的表達(dá)式,在已求得表達(dá)式e1的值為的值為0的情況下,曾經(jīng)可以確定整個(gè)邏的情況下,曾經(jīng)可以確定整個(gè)邏輯表達(dá)式的值為輯表達(dá)式的值為0,C+就不再對(duì)就不再對(duì)e2求值。求值。同樣,形如同樣,形如 e1 | e2的表達(dá)式,假設(shè)曾經(jīng)求得的表達(dá)式,假設(shè)曾經(jīng)求得e1的值為的值為1,那么整個(gè)表達(dá)式的值一定為,那么整個(gè)表達(dá)式的值一定為1,C+就不再對(duì)就不再對(duì)e2求值。求值。4.1.4 條件運(yùn)算符條件運(yùn)算符條件運(yùn)算符條件運(yùn)算符?:是是C+中獨(dú)一的一個(gè)三元運(yùn)算符。中獨(dú)一的一個(gè)三元運(yùn)算符。條件
8、運(yùn)算符的表達(dá)式具有如下方式條件運(yùn)算符的表達(dá)式具有如下方式: e1 ? e2 : e3 其中其中e1、e2、e3皆為表達(dá)式。皆為表達(dá)式。條件運(yùn)算執(zhí)行的操作是:先計(jì)算表達(dá)式條件運(yùn)算執(zhí)行的操作是:先計(jì)算表達(dá)式e1的值,的值,假設(shè)為非假設(shè)為非0,那么計(jì)算表達(dá)式,那么計(jì)算表達(dá)式 e2 的值并把它作為整的值并把它作為整個(gè)表達(dá)式的值個(gè)表達(dá)式的值; 而假設(shè)而假設(shè)e1的值為的值為0,那么計(jì)算表達(dá)式,那么計(jì)算表達(dá)式e3的值,并用它作為整個(gè)表達(dá)式的值。的值,并用它作為整個(gè)表達(dá)式的值。例如,表達(dá)式例如,表達(dá)式 ( x y ) ? 10 : 20 假設(shè)假設(shè)x的值大于的值大于y的值,那么表達(dá)式的值為的值,那么表達(dá)式的值為
9、10,否,否那么表達(dá)式的值為那么表達(dá)式的值為20。又如,在語(yǔ)句又如,在語(yǔ)句 max = ( a b ) ? a : b ; 中,中,max將賦值為將賦值為a、b中較大的數(shù)。中較大的數(shù)。4.1.5 運(yùn)算符的優(yōu)先級(jí)和結(jié)合性運(yùn)算符的優(yōu)先級(jí)和結(jié)合性當(dāng)一個(gè)表達(dá)式中有多個(gè)運(yùn)算符時(shí),運(yùn)算符的優(yōu)先當(dāng)一個(gè)表達(dá)式中有多個(gè)運(yùn)算符時(shí),運(yùn)算符的優(yōu)先級(jí)和結(jié)合性就決議了表達(dá)式中各運(yùn)算的先后順序。級(jí)和結(jié)合性就決議了表達(dá)式中各運(yùn)算的先后順序。優(yōu)先級(jí)一樣時(shí),由結(jié)合性決議運(yùn)算次序。優(yōu)先級(jí)一樣時(shí),由結(jié)合性決議運(yùn)算次序。運(yùn)算符的結(jié)合性分為左結(jié)合從左到右計(jì)算和運(yùn)算符的結(jié)合性分為左結(jié)合從左到右計(jì)算和右結(jié)合從右到左計(jì)算。右結(jié)合從右到左計(jì)算。
10、例如,運(yùn)算符例如,運(yùn)算符+和和-優(yōu)先級(jí)一樣、為左結(jié)合,因此優(yōu)先級(jí)一樣、為左結(jié)合,因此表達(dá)式表達(dá)式 45+89-23按從左到右的順序計(jì)算,先做加法再做減法。按從左到右的順序計(jì)算,先做加法再做減法。而賦值運(yùn)算符而賦值運(yùn)算符=是右結(jié)合的,因此表達(dá)式是右結(jié)合的,因此表達(dá)式 x = y = 78的運(yùn)算次序?yàn)椋合葘⒌倪\(yùn)算次序?yàn)椋合葘?8賦給賦給y,再將,再將y賦給賦給x。 表4.1 C+常用運(yùn)算符的優(yōu)先級(jí)和結(jié)合性優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)運(yùn) 算算 符符結(jié)合性結(jié)合性1( ) - . 類成員訪問(wèn)類成員訪問(wèn) 數(shù)組下標(biāo)數(shù)組下標(biāo) : : 作用域訪問(wèn)作用域訪問(wèn) 左左2*(取內(nèi)容取內(nèi)容) &(取地址取地址) ! + - +
11、 (一元一元) - (一元一元) sizeof右右3*(乘乘) / %左左4+ -左左5左左6 =左左7= !=左左8& 左左9| 左左10? : 條件運(yùn)算條件運(yùn)算右右11= += -= *= /= %= = &= |= = 右右12, 左左C+各運(yùn)算符的優(yōu)先級(jí)總的來(lái)說(shuō)有如下規(guī)律各運(yùn)算符的優(yōu)先級(jí)總的來(lái)說(shuō)有如下規(guī)律按優(yōu)先級(jí)從高到低:按優(yōu)先級(jí)從高到低:一元一元二元二元(除了賦值除了賦值)三元三元賦值賦值逗號(hào)逗號(hào); 二元運(yùn)算符又有如下規(guī)律:二元運(yùn)算符又有如下規(guī)律:算術(shù)算術(shù)關(guān)系關(guān)系邏輯邏輯; 邏輯運(yùn)算符有如下規(guī)律:邏輯運(yùn)算符有如下規(guī)律:! & |。請(qǐng)分析以下表達(dá)式的求值次序。假
12、定有 int x = 5 , y = 4 , z = 6 ; char a = s , b = t ; int w = 2 ; 表達(dá)式 表達(dá)式的值 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 根本程序控制構(gòu)造根本程序控制構(gòu)造按照構(gòu)造化程序設(shè)計(jì)的思想,程序由三種按照構(gòu)造化程
13、序設(shè)計(jì)的思想,程序由三種單入口、單出口的根本構(gòu)造組成:順序構(gòu)造、單入口、單出口的根本構(gòu)造組成:順序構(gòu)造、選擇構(gòu)造、循環(huán)構(gòu)造。選擇構(gòu)造、循環(huán)構(gòu)造。C+的控制流就是這的控制流就是這三種根本構(gòu)造組成的。三種根本構(gòu)造組成的。4.2.1 順序構(gòu)造順序構(gòu)造 順序構(gòu)造的程順序構(gòu)造的程序是指程序中的一切序是指程序中的一切語(yǔ)句都是按書寫順序語(yǔ)句都是按書寫順序逐一執(zhí)行的,只需順逐一執(zhí)行的,只需順序構(gòu)造的程序功能有序構(gòu)造的程序功能有限。限。例例4.2 計(jì)算球的體積計(jì)算球的體積 。知球的體積公式為:。知球的體積公式為: 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 選擇構(gòu)造選擇構(gòu)造選擇構(gòu)造也稱為分支構(gòu)造,用于處置在程序中出現(xiàn)了選擇構(gòu)造也稱為分支構(gòu)造,用于處置在程序中出現(xiàn)了兩條或更多執(zhí)行途徑可供選擇的情況。選擇構(gòu)造可以用兩條或更多執(zhí)行途徑可供選擇的情況。選擇構(gòu)造可以用選擇語(yǔ)句來(lái)實(shí)現(xiàn)。選擇語(yǔ)句包括選擇語(yǔ)句來(lái)實(shí)現(xiàn)。選擇語(yǔ)句包括 if 語(yǔ)句和語(yǔ)句和 switch 語(yǔ)句。語(yǔ)句。1If 語(yǔ)句語(yǔ)句if語(yǔ)句有兩種格式。語(yǔ)句有兩種格式。格式一:格式一
15、:if (條件表達(dá)式條件表達(dá)式) 語(yǔ)句語(yǔ)句功能:對(duì)條件表達(dá)功能:對(duì)條件表達(dá)式求值,假設(shè)值為真式求值,假設(shè)值為真非非0那么執(zhí)行它那么執(zhí)行它后面的語(yǔ)句后面的語(yǔ)句; 否那么否那么什么也不做。什么也不做。假設(shè)需求執(zhí)行的語(yǔ)假設(shè)需求執(zhí)行的語(yǔ)句用單條語(yǔ)句寫不下句用單條語(yǔ)句寫不下,就應(yīng)該用復(fù)合語(yǔ)句,就應(yīng)該用復(fù)合語(yǔ)句。例例4.3 將兩個(gè)數(shù)排序輸出將兩個(gè)數(shù)排序輸出 。# 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 (條件表達(dá)式條件表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2格式二的格式二的if語(yǔ)句完成的功能:對(duì)條件表達(dá)式求值,假設(shè)語(yǔ)句完成的功能:對(duì)條件表達(dá)式求值,假設(shè)值為真非值為真非0執(zhí)行其后的語(yǔ)句執(zhí)行其后的語(yǔ)句1; 否那么執(zhí)行否那么執(zhí)行else后面的語(yǔ)后面的語(yǔ)句句2。即根據(jù)條件表達(dá)式能否為真分別作不同的處置。即根據(jù)條件表達(dá)式能否為真分別作不同的處置。下面用格式二的下面用格式二的if語(yǔ)句改寫例語(yǔ)句改寫例4.3。例例4.4 對(duì)例對(duì)例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é)引見的條件運(yùn)算符也可以用上一節(jié)引見的條件運(yùn)算符也可以用if語(yǔ)句語(yǔ)句來(lái)改寫。例如:來(lái)改寫。例如: y = ( a b ) ? a : b ; 可以用下面這個(gè)可以用下面這個(gè)if語(yǔ)句來(lái)替代:語(yǔ)句來(lái)替代: if ( a b ) y = a ; else y = b ; 條件表達(dá)式取值條件表達(dá)式取值false: 0true: 一切非一切非0值值例4.5 某單位向職工按月發(fā)放醫(yī)療補(bǔ)貼的詳細(xì)方案如下:職工工齡在10年以下的,醫(yī)療補(bǔ)貼為其根本工資的10
18、% ; 工齡在10年以上20年以下的,醫(yī)療補(bǔ)貼為其根本工資的15% ; 工齡在20年以上30年以下的,醫(yī)療補(bǔ)貼為其根本工資的20% ; 工齡在30年以上的,醫(yī)療補(bǔ)貼為其根本工資的30%。輸入某職工的工齡及根本工資,計(jì)算他每月應(yīng)得的醫(yī)療補(bǔ)貼。# 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 語(yǔ) 句 中語(yǔ) 句 中也可以包含也可以包含if 語(yǔ)句,這語(yǔ)句,這就構(gòu)成了就構(gòu)成了if語(yǔ)句的嵌套。語(yǔ)句的嵌套。例例4.5也可以不運(yùn)用嵌套的
20、也可以不運(yùn)用嵌套的if語(yǔ)句。借助邏輯運(yùn)算符,用幾個(gè)并語(yǔ)句。借助邏輯運(yùn)算符,用幾個(gè)并列的列的if語(yǔ)句來(lái)完成例語(yǔ)句來(lái)完成例4.5的功能:的功能:例4.6 對(duì)例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 ; 當(dāng)當(dāng)x2或者或者x4時(shí),這兩種了解會(huì)導(dǎo)致兩個(gè)不同的時(shí),這兩種了解會(huì)導(dǎo)致兩個(gè)不同的答案。這就叫產(chǎn)生了二義性。答案。這就叫產(chǎn)生了二義性。在絕大多數(shù)的言語(yǔ)中,包括在絕大多數(shù)的言語(yǔ)中,包括C+,都采用最近匹配,都采用最近匹配原那么來(lái)處理這個(gè)問(wèn)題。所謂最近匹配原那么就是原那么來(lái)處理這個(gè)問(wèn)題。所謂最近匹配原那么就是每個(gè)每個(gè)else必需與離它最近的那個(gè)沒有匹配的必需與離它最近的那個(gè)沒有匹配的if相匹配。相匹配。按
22、照這個(gè)原那么,上面的第二種了解是正確的。按照這個(gè)原那么,上面的第二種了解是正確的。2switch語(yǔ)句語(yǔ)句switch語(yǔ)句又稱為開關(guān)語(yǔ)句,其格式如下:語(yǔ)句又稱為開關(guān)語(yǔ)句,其格式如下: switch (表達(dá)式表達(dá)式) case 常量表達(dá)式常量表達(dá)式1 : 語(yǔ)句序列語(yǔ)句序列1 break ; case 常量表達(dá)式常量表達(dá)式2 : 語(yǔ)句序列語(yǔ)句序列2 break ; case 常量表達(dá)式常量表達(dá)式n : 語(yǔ)句序列語(yǔ)句序列n break ; default : 語(yǔ)句序列語(yǔ)句序列n+1 break ; 其中,其中,switch后面的表后面的表達(dá)式的類型必需與達(dá)式的類型必需與case后面的常量表達(dá)式的后面的
23、常量表達(dá)式的類型一致,而且只能類型一致,而且只能是字符型、整型或枚是字符型、整型或枚舉型留意不能是浮舉型留意不能是浮點(diǎn)型點(diǎn)型; case后面的表后面的表達(dá)式必需是常量表達(dá)達(dá)式必需是常量表達(dá)式,不能含有變量式,不能含有變量 ; 同同一個(gè)一個(gè)switch中不能有反中不能有反復(fù)的常量表達(dá)式。復(fù)的常量表達(dá)式。# include void main( ) int w ; /代表星期的整數(shù)代表星期的整數(shù) 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 根據(jù)一個(gè)代表星期的根據(jù)一個(gè)代表星期的0到到6之間的整數(shù),在屏幕上打印出它之間的整數(shù),在屏幕上打印出它代表的是星期幾。代表的是星期幾。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語(yǔ)句是可以缺省的。假設(shè)沒有語(yǔ)句是可以缺省的。假設(shè)沒有default,那么當(dāng)一,那么當(dāng)一切匹配都失敗時(shí),將不執(zhí)行任何操作。建議運(yùn)用切匹配都失敗時(shí),將不執(zhí)行任何操作。建議運(yùn)用default語(yǔ)語(yǔ)句,除非句,除非case語(yǔ)句已覆蓋了一切的能夠,以防止由于沒有語(yǔ)句已覆蓋了一切的能夠,以防止由于沒有思索到某種情況而給程序帶來(lái)的不利影響。思索到某種情況而給程序帶來(lái)的不利影響。break語(yǔ)句在語(yǔ)句在switch中的作用是跳出整個(gè)中的作用是跳出整個(gè)switch語(yǔ)句。在例語(yǔ)句。在例4.7中,每中,每個(gè)個(gè)case的語(yǔ)句序列后都有一個(gè)的語(yǔ)句序
26、列后都有一個(gè)break語(yǔ)句最后一個(gè)語(yǔ)句最后一個(gè)case或或default語(yǔ)句語(yǔ)句的的break可以省略。在這種情況下,各個(gè)可以省略。在這種情況下,各個(gè)case的陳列次序可以是恣意的陳列次序可以是恣意,不會(huì)影響程序的結(jié)果。假設(shè)沒有,不會(huì)影響程序的結(jié)果。假設(shè)沒有break,那么執(zhí)行完該,那么執(zhí)行完該case語(yǔ)句的語(yǔ)語(yǔ)句的語(yǔ)句序列后,還將接下去執(zhí)行后面的句序列后,還將接下去執(zhí)行后面的case的語(yǔ)句序列。在這種情況下,的語(yǔ)句序列。在這種情況下,各個(gè)各個(gè)case陳列的次序不同,就能夠產(chǎn)生不同的結(jié)果。陳列的次序不同,就能夠產(chǎn)生不同的結(jié)果。例如,把例例如,把例4.7中的中的break都刪去假定輸入的都刪去假
27、定輸入的w的值為的值為4,會(huì)出現(xiàn),會(huì)出現(xiàn)什么情況呢?。什么情況呢?。假設(shè)是在有假設(shè)是在有break的情況下,的情況下,w應(yīng)與第五個(gè)應(yīng)與第五個(gè)case中的常量中的常量4匹配,從而匹配,從而在屏幕上打印出:在屏幕上打印出: Its Thursday .之后就該跳出之后就該跳出switch,到達(dá)程序末尾并終了。然而,沒有了,到達(dá)程序末尾并終了。然而,沒有了break的的switch語(yǔ)句得到的結(jié)果與原來(lái)大不一樣。在打印了上面的字符串后,語(yǔ)句得到的結(jié)果與原來(lái)大不一樣。在打印了上面的字符串后,并不會(huì)跳出并不會(huì)跳出switch,而是依次進(jìn)入后面的,而是依次進(jìn)入后面的case及及default語(yǔ)句去執(zhí)行打印語(yǔ)
28、句去執(zhí)行打印語(yǔ)句,于是得到的輸出為:語(yǔ)句,于是得到的輸出為: Its Thursday . Its Friday . Its Saturday . Invalid data ! 假設(shè)多個(gè)case后的語(yǔ)句序列是一樣的,即要做的操作是一樣的,可采用下面的格式以防止反復(fù)書寫: switch (表達(dá)式) case 常量表達(dá)式1 : case 常量表達(dá)式2 : case 常量表達(dá)式i : 語(yǔ)句序列 break ; case 常量表達(dá)式n : 語(yǔ)句序列n break ; default : 語(yǔ)句序列n+1 # include void main( ) int seniority , s ; double
29、wages , allowance ; cout seniority ; cout wages ; s = seniority / 10 ; /得到工齡的十位數(shù)字 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語(yǔ)句來(lái)實(shí)現(xiàn)例4.5。這個(gè)程序是按工齡不會(huì)超越49年來(lái)設(shè)計(jì)的
30、。由于switch 不能象if語(yǔ)句那樣可以進(jìn)展大于、小于等判別,而只能判別能否相等,因此程序中取工齡的十位數(shù)字作為switch表達(dá)式。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)構(gòu)造循環(huán)構(gòu)造C+中有三種循環(huán)語(yǔ)句可用來(lái)實(shí)現(xiàn)循環(huán)構(gòu)造:中有三種循環(huán)語(yǔ)句可用來(lái)實(shí)現(xiàn)循環(huán)構(gòu)造:while語(yǔ)句、語(yǔ)句、do_while語(yǔ)句和語(yǔ)句和for語(yǔ)句。這些語(yǔ)句語(yǔ)句。這些語(yǔ)句各有各的特點(diǎn),而且
31、經(jīng)??梢韵嗷ヌ娲?。在編程各有各的特點(diǎn),而且經(jīng)??梢韵嗷ヌ娲?。在編程時(shí)應(yīng)根據(jù)題意選擇最適宜的循環(huán)語(yǔ)句。時(shí)應(yīng)根據(jù)題意選擇最適宜的循環(huán)語(yǔ)句。1while語(yǔ)句語(yǔ)句while語(yǔ)句的格式語(yǔ)句的格式為:為: 例4.9 計(jì)算100之內(nèi)的奇數(shù)之和。 # include void main( ) int n = 1 ; / 奇數(shù) int sum = 0 ; / 奇數(shù)的累加和 while ( n 100 ) / n不能超越100 sum += n ; / 累加 n += 2 ; / 修正為下一個(gè)奇數(shù) cout The sum is : sum endl ; while語(yǔ)句的執(zhí)行過(guò)程:語(yǔ)句的執(zhí)行過(guò)程: 對(duì)條件表達(dá)式求
32、值,假設(shè)值為真非對(duì)條件表達(dá)式求值,假設(shè)值為真非0那么執(zhí)行步驟那么執(zhí)行步驟,否那么轉(zhuǎn)步驟,否那么轉(zhuǎn)步驟; 執(zhí)行循環(huán)體中的語(yǔ)句執(zhí)行循環(huán)體中的語(yǔ)句; 前往前往 ; 終止循環(huán),去執(zhí)行終止循環(huán),去執(zhí)行while語(yǔ)句的下一語(yǔ)句。語(yǔ)句的下一語(yǔ)句。while 條件表達(dá)式條件表達(dá)式 語(yǔ)句語(yǔ)句 /循環(huán)體循環(huán)體例例4.10 將例將例4.6改良為可以反復(fù)計(jì)算不同的人的醫(yī)療補(bǔ)貼。改良為可以反復(fù)計(jì)算不同的人的醫(yī)療補(bǔ)貼。以輸入的工齡為以輸入的工齡為0作為終了條件。作為終了條件。 # include void main( ) int seniority ; double wages , allowance ; cout se
33、niority ; /輸入第一個(gè)人輸入第一個(gè)人的工齡的工齡 while ( seniority != 0 ) /假設(shè)工齡不假設(shè)工齡不為為0那么進(jìn)入循環(huán)那么進(jì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語(yǔ)句不僅可用于跳出語(yǔ)句不僅可用于跳出switch語(yǔ)句,還可用于跳出循
34、環(huán)包括三語(yǔ)句,還可用于跳出循環(huán)包括三種循環(huán)語(yǔ)句。但它只能跳出它所在的循環(huán)語(yǔ)句或種循環(huán)語(yǔ)句。但它只能跳出它所在的循環(huán)語(yǔ)句或switch語(yǔ)句,不能語(yǔ)句,不能跳出外層的循環(huán)語(yǔ)句或跳出外層的循環(huán)語(yǔ)句或switch語(yǔ)句假設(shè)有的話。假想象跳出外層語(yǔ)句假設(shè)有的話。假想象跳出外層語(yǔ)句,還要在外層中運(yùn)用語(yǔ)句,還要在外層中運(yùn)用break。例4.11 從鍵盤接納10個(gè)整數(shù),求它們的平方根。假設(shè)遇到負(fù)數(shù)就終止程序。# include # include void main( ) int i = 1 , num ; double root ; while ( i = 10 ) cout num ; if ( num 0
35、 ) /假設(shè)num是負(fù)數(shù)那么退出循環(huán) break ; root = sqrt(num) ; cout root endl ; i+ ; 這個(gè)程序有兩個(gè)出口。這個(gè)程序有兩個(gè)出口。每個(gè)輸入的數(shù)在計(jì)算其平每個(gè)輸入的數(shù)在計(jì)算其平方根之前都要判別它的正方根之前都要判別它的正負(fù),假設(shè)為負(fù)數(shù)就退出循負(fù),假設(shè)為負(fù)數(shù)就退出循環(huán),這是一個(gè)出口。另外環(huán),這是一個(gè)出口。另外,整型變量被用來(lái)實(shí)現(xiàn)記,整型變量被用來(lái)實(shí)現(xiàn)記數(shù)。數(shù)。i的初值為的初值為1,每執(zhí)行一,每執(zhí)行一次循環(huán)體就將它的值加次循環(huán)體就將它的值加1,當(dāng)它的值為當(dāng)它的值為11時(shí),表示循時(shí),表示循環(huán)體曾經(jīng)執(zhí)行了環(huán)體曾經(jīng)執(zhí)行了10次,于次,于是循環(huán)終止。這是第二個(gè)是
36、循環(huán)終止。這是第二個(gè)出口。這樣的程序可讀性出口。這樣的程序可讀性較差。較差。例例4.12 對(duì)例對(duì)例4.11的改良:遇到負(fù)數(shù)那么忽略并重新輸入下一個(gè)數(shù)據(jù)。的改良:遇到負(fù)數(shù)那么忽略并重新輸入下一個(gè)數(shù)據(jù)。 # include # include void main( ) int i = 1 , num ; double root ; while ( i = 10 ) cout num ; if ( num 0 ) /假設(shè)假設(shè)num是負(fù)數(shù)那么回到循環(huán)開場(chǎng)是負(fù)數(shù)那么回到循環(huán)開場(chǎng)處處 cout valid number! ; continue ; root = sqrt(num) ; cout root
37、endl ; i+ ; continue語(yǔ)句用在循環(huán)體中,它的作用是忽略循環(huán)體中位于它之后的語(yǔ)句,重新回到條件表達(dá)式的判別。2do_while循環(huán)語(yǔ)句循環(huán)語(yǔ)句while語(yǔ)句的特點(diǎn)是先判別條件,再確定能否執(zhí)語(yǔ)句的特點(diǎn)是先判別條件,再確定能否執(zhí)行循環(huán)體,也即行循環(huán)體,也即“先判別,后執(zhí)行先判別,后執(zhí)行;假設(shè)第一次對(duì)假設(shè)第一次對(duì)條件表達(dá)式求值時(shí)它就為假,那么循環(huán)體就一次也條件表達(dá)式求值時(shí)它就為假,那么循環(huán)體就一次也不被執(zhí)行。不被執(zhí)行。do_while語(yǔ)句是先執(zhí)行一次循環(huán)體之語(yǔ)句是先執(zhí)行一次循環(huán)體之后,再根據(jù)條件表達(dá)式的值確定能否還要繼續(xù)執(zhí)行后,再根據(jù)條件表達(dá)式的值確定能否還要繼續(xù)執(zhí)行循環(huán)體,也即循環(huán)
38、體,也即“先執(zhí)行,后判別,循環(huán)體至少會(huì)先執(zhí)行,后判別,循環(huán)體至少會(huì)被執(zhí)行一次。被執(zhí)行一次。do_while語(yǔ)句的格式為:語(yǔ)句的格式為: do 語(yǔ)句語(yǔ)句 /循環(huán)體循環(huán)體 while (條件表達(dá)式條件表達(dá)式) ; 其中的條件表達(dá)式及語(yǔ)句的規(guī)定同其中的條件表達(dá)式及語(yǔ)句的規(guī)定同while 語(yǔ)句一語(yǔ)句一樣。留意條件表達(dá)式后面的分號(hào)不能少,由于整個(gè)樣。留意條件表達(dá)式后面的分號(hào)不能少,由于整個(gè)do_while語(yǔ)句實(shí)踐上相當(dāng)于一條語(yǔ)句。語(yǔ)句實(shí)踐上相當(dāng)于一條語(yǔ)句。do_while語(yǔ)句的執(zhí)行過(guò)程如下:語(yǔ)句的執(zhí)行過(guò)程如下: 執(zhí)行一遍循環(huán)體執(zhí)行一遍循環(huán)體; 對(duì)條件表達(dá)式求值,假設(shè)為真非對(duì)條件表達(dá)式求值,假設(shè)為真非0那
39、么轉(zhuǎn)那么轉(zhuǎn)步驟步驟,否那么轉(zhuǎn)步驟,否那么轉(zhuǎn)步驟; 終止循環(huán),去執(zhí)行終止循環(huán),去執(zhí)行do_while語(yǔ)句的下一語(yǔ)句。語(yǔ)句的下一語(yǔ)句。 do_while和和while語(yǔ)句在大多數(shù)情況下都可以相互替代語(yǔ)句在大多數(shù)情況下都可以相互替代除非是有能夠循環(huán)體一次也不被執(zhí)行的情況。例如,例除非是有能夠循環(huán)體一次也不被執(zhí)行的情況。例如,例4.9中是利用中是利用while語(yǔ)句來(lái)計(jì)算語(yǔ)句來(lái)計(jì)算100之內(nèi)的奇數(shù)之和的,可以將之內(nèi)的奇數(shù)之和的,可以將它改寫為用它改寫為用do_while語(yǔ)句來(lái)求和。語(yǔ)句來(lái)求和。例4.13 用do_while語(yǔ)句來(lái)改寫例4.9 。 # include void main( ) int n
40、= 1 ; / 奇數(shù) int sum = 0 ; / 奇數(shù)的累加和 do sum += n ; / 累加 n += 2 ; / 修正為下一個(gè)奇數(shù) while ( n 100 ) ; cout The sum is : sum endl ; 例例4.14 根據(jù)下面的公式求根據(jù)下面的公式求的值。計(jì)算到最后一項(xiàng)的絕對(duì)值小于的值。計(jì)算到最后一項(xiàng)的絕對(duì)值小于10-6時(shí)停頓。時(shí)停頓。 /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語(yǔ)句語(yǔ)句當(dāng)循環(huán)次數(shù)確定的時(shí)候,當(dāng)循環(huán)次數(shù)確定的時(shí)候,用用 for 語(yǔ)句更為直觀。語(yǔ)句更為直觀。for語(yǔ)句的格式如下:語(yǔ)句的格式如下:for ( 表達(dá)式表達(dá)式1; 表達(dá)式表達(dá)式2; 表達(dá)式表達(dá)式3 ) 語(yǔ)句語(yǔ)句 /循環(huán)體循環(huán)體其中的表達(dá)式其中的表達(dá)式1通常用于通常用于對(duì)循環(huán)控制變量進(jìn)展初始化對(duì)循環(huán)控制變量進(jìn)展初始化; 表達(dá)式表達(dá)式2用于表示循環(huán)能否用于表示循環(huán)能否終了的條件終了的條件; 表達(dá)式表達(dá)式3用于對(duì)用于對(duì)循環(huán)控制變量作修正。循環(huán)控制變量作修正。for
42、語(yǔ)句執(zhí)行的過(guò)程如下:語(yǔ)句執(zhí)行的過(guò)程如下: 對(duì)表達(dá)式對(duì)表達(dá)式1求值求值; 對(duì)表達(dá)式對(duì)表達(dá)式2求值,假設(shè)求值,假設(shè)其值為真那么執(zhí)行步驟其值為真那么執(zhí)行步驟,否那么轉(zhuǎn)步驟否那么轉(zhuǎn)步驟; 執(zhí)行循環(huán)體執(zhí)行循環(huán)體; 對(duì)表達(dá)式對(duì)表達(dá)式3求值求值; 轉(zhuǎn)步驟轉(zhuǎn)步驟; 終了循環(huán),去執(zhí)行終了循環(huán),去執(zhí)行for語(yǔ)句的下一語(yǔ)句。語(yǔ)句的下一語(yǔ)句。例如:例如:int i ; for ( i = 1 ; i = 10 ; i+ ) cout $ ; 程序的運(yùn)轉(zhuǎn)結(jié)果是:程序的運(yùn)轉(zhuǎn)結(jié)果是:$for語(yǔ)句也屬于語(yǔ)句也屬于“先判別,先判別,后執(zhí)行的循環(huán)語(yǔ)句,可以后執(zhí)行的循環(huán)語(yǔ)句,可以用用while語(yǔ)句替代。語(yǔ)句替代。例如,上面這個(gè)程序段可例如,上面這個(gè)程序段可以改寫為:以改寫為:int i = 1 ; while (i = 10 ) cout $ ; i + ; C+中中for語(yǔ)句的方式很靈敏,語(yǔ)句的方式很靈敏,for后面的三個(gè)表達(dá)式均可以缺省但后面的三個(gè)表達(dá)式均可以缺省但中間的分號(hào)不能缺省。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告公司自由職業(yè)者合同模版
- 合同補(bǔ)充協(xié)議簽訂匯報(bào)
- 高中歷史第三章第二次世界大戰(zhàn)3.5二戰(zhàn)傷亡人數(shù)統(tǒng)計(jì)文本素材北師大版選修3
- 2025屆高考地理一輪復(fù)習(xí)第十五章區(qū)域發(fā)展與區(qū)域聯(lián)系36產(chǎn)業(yè)轉(zhuǎn)移-以東亞為例學(xué)案新人教版
- 2025屆高考?xì)v史一輪復(fù)習(xí)模塊一政治文明歷程專題一古代中國(guó)的政治制度第2講走向“大一統(tǒng)”的秦漢政治學(xué)案人民版
- 2024外墻涂料施工合同范本
- 2024餐飲店鋪轉(zhuǎn)讓合同文檔模板
- 2024新版銷售代理合同范本
- 2024全屋定制合同
- 2024戶外廣告經(jīng)營(yíng)權(quán)的轉(zhuǎn)讓合同
- 蒲公英總黃酮的提取及其抑菌性能
- jmeter性能測(cè)試及性能調(diào)優(yōu)
- 4gl語(yǔ)言開發(fā)原則及規(guī)范--簡(jiǎn)化版
- KGW船用起重機(jī)維護(hù)使用手冊(cè)
- 工程量確認(rèn)單樣本(管線)
- 區(qū)最新關(guān)于生活垃圾分類工作推進(jìn)會(huì)上的講話稿
- 除塵器安裝專業(yè)監(jiān)理實(shí)施細(xì)則
- 八年級(jí)黃金矩形(數(shù)學(xué)活動(dòng))ppt課件
- 銷售技巧個(gè)頂尖電梯銷售技巧
- 工程施工管理協(xié)議書(共7頁(yè))
- 《幼兒園衛(wèi)生保健后勤材料資料》幼兒園保健醫(yī)生每日檢查工作記錄表
評(píng)論
0/150
提交評(píng)論