第3章表達(dá)式和語(yǔ)句_第1頁(yè)
第3章表達(dá)式和語(yǔ)句_第2頁(yè)
第3章表達(dá)式和語(yǔ)句_第3頁(yè)
第3章表達(dá)式和語(yǔ)句_第4頁(yè)
第3章表達(dá)式和語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第3章 表達(dá)式和語(yǔ)句2本章主要內(nèi)容o3.1 表達(dá)式o3.2 算術(shù)運(yùn)算和賦值o3.3 算術(shù)類型轉(zhuǎn)換o3.4 增量和減量o3.5 關(guān)系與邏輯運(yùn)算o3.6 if 語(yǔ)句o3.7 條件運(yùn)算符o3.8 逗號(hào)運(yùn)算符o3.9 求值次序與副作用o作業(yè)3o理解表達(dá)式和語(yǔ)句的概念o能夠使用表達(dá)式來(lái)描述語(yǔ)句和操作o掌握運(yùn)算符的功能與特點(diǎn)o理解運(yùn)算符的優(yōu)先級(jí)和結(jié)合性o能夠使用if和if/else語(yǔ)句來(lái)選擇動(dòng)作學(xué)習(xí)目標(biāo):43.1 表達(dá)式n表達(dá)式:一個(gè)序列,含操作符、操作數(shù),和標(biāo)點(diǎn)符號(hào),完成一個(gè)計(jì)算。n可以嵌套 2+3+(6*sizeof(int)/235n操作符和操作數(shù)必須匹配,但對(duì)編譯器有額外約定 例如:float

2、a=3.2; int b = a+12; /float與int做+操作n表達(dá)式中操作數(shù)需約定求值次序ch3.9n操作符有優(yōu)先級(jí),級(jí)別高者先操作 例如:2+3*6 中*優(yōu)先級(jí)高于+n操作符有結(jié)合性,決定同優(yōu)先級(jí)的操作次序 例如:b=5; a=b=3; /先做b=3,再做a=b o1.表達(dá)式概述53.1 表達(dá)式o2.左值和右值n左值是能出現(xiàn)在賦值表達(dá)式左邊的表達(dá)式。左值表達(dá)式具有存放數(shù)據(jù)的空間,并且存放是允許的。 例如: int a=3;n右值只能出現(xiàn)在賦值表達(dá)式的右邊。左值表達(dá)式也可以作為右值表達(dá)式。 例如:int a, b=6; const int c=5; a=b; /b是變量,所以是左值,

3、此處作為右值 a=8; /8是常量,只能作右值,不能作為左值 c=a; /c是常量,只能作右值6o3.優(yōu)先級(jí)和結(jié)合性n操作符有單目,雙目,三目之分n第2級(jí)都是單目運(yùn)算符(優(yōu)先級(jí)同級(jí))n第14級(jí)是三目運(yùn)算符(只有一個(gè))n第15級(jí)是賦值運(yùn)算符n注意:?jiǎn)文窟\(yùn)算,三目運(yùn)算,賦值運(yùn)算為右結(jié)合,其余都是左結(jié)合n詳見(jiàn)P35,表3-1 C+操作符的優(yōu)先級(jí)與結(jié)合性。3.1 表達(dá)式7 C+操作符的優(yōu)先級(jí)與結(jié)合性優(yōu)先級(jí) 操作符 結(jié)合性 1 ( ) - : . 左右 2 ! + - + - & * (強(qiáng)制類型轉(zhuǎn)換) sizeof new delete 右左 3 . * - * 左右 4 * / % 左右 5

4、+ - 左右 6 左右 7 = 左右 8 = != 左右 9 & 左右 10 左右 11 | 左右 12 & 左右 13 | 左右 14 ? : 右左 15 = *= /* += -= |= = %= &= = &= |= 右左 16 , 左右83.1 表達(dá)式o4.語(yǔ)句與塊nC+語(yǔ)言中,除了控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句外,幾乎所有的操作都是通過(guò)表達(dá)式進(jìn)行的。 n語(yǔ)句以分號(hào)( ; ) 結(jié)束 。n由表達(dá)式組成的語(yǔ)句稱為表達(dá)式語(yǔ)句,它由一個(gè)表達(dá)式后接一個(gè)分號(hào)“;”組成。p 例如:a=a+2;n塊(或稱復(fù)合語(yǔ)句)是指括在花括號(hào) 里的語(yǔ)句序列。從語(yǔ)法上來(lái)說(shuō),塊可以被認(rèn)為是單個(gè)語(yǔ)

5、句。塊也可以嵌套。n注意:在塊中定義的變量?jī)H在塊中有效。 int a = 2, b = 3, c = 4; coutab3)c=b+3; else c=d+6;n語(yǔ)句可以是空語(yǔ)句。n;103.2 算術(shù)運(yùn)算和賦值o1.算術(shù)運(yùn)算符:+ - * / % n+:加法或正號(hào)n-:減法或負(fù)號(hào)n*:乘法n/:除法n%:模(整除取余,操作符兩邊的操作數(shù)必須為整型數(shù)) 113.2 算術(shù)運(yùn)算和賦值o說(shuō)明:o(1)除法運(yùn)算“/ ” ,兩個(gè)整數(shù)相除,結(jié)果為整數(shù) ,否則為實(shí)數(shù)。n5/2=2 5.0/2=2.5n5/-2=-2 2/-3=0o(2)求余運(yùn)算“%”,或稱求模 ,要求參與運(yùn)算的兩個(gè)操作數(shù)都是整型,其結(jié)果是兩個(gè)

6、數(shù)相除的余數(shù) 。n5%2=1 4%2=0o(3)負(fù)值的求余運(yùn)算結(jié)果的符號(hào)與運(yùn)算符左邊的操作數(shù)的符號(hào)一致。n5%-2=1 -5%2=-1 -5%-2=-1 n 2%-3=2 -2%-3=-2123.2 算術(shù)運(yùn)算和賦值o2.賦值運(yùn)算符 n= += -= *= /= %=n復(fù)合賦值運(yùn)算符都是在賦值符“=”之前加上其他運(yùn)算符而構(gòu)成的。 a=a+6 與:a+=6等價(jià) 注意: a+=b+c 等價(jià)于:a=a+(b+c) (x=max(5,7)+=3; 等價(jià)于: x=max(5,7)+3; 133.2 算術(shù)運(yùn)算和賦值o3.溢出 n發(fā)生溢出是由于一個(gè)變量被賦予一個(gè)超出其數(shù)據(jù)類型表示范圍的數(shù)值。n數(shù)值溢出是不會(huì)引

7、起編譯錯(cuò)誤的,只要分母不為0就不會(huì)引起除0運(yùn)行故障,但會(huì)使運(yùn)行結(jié)果發(fā)生偏差。n例如:在16位機(jī)器上進(jìn)行下面的操作: int weight=42896; 得到的結(jié)果為:-22640(42896的補(bǔ)碼)。143.3 算術(shù)類型轉(zhuǎn)換o字符型、整型、實(shí)型之間可以進(jìn)行混合運(yùn)算。其中字符型數(shù)據(jù)以ASC碼的十進(jìn)制數(shù)參與運(yùn)算。運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。oC+采用兩種方法對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換:n一種是自動(dòng)轉(zhuǎn)換;另一種是強(qiáng)制轉(zhuǎn)換。153.3 算術(shù)類型轉(zhuǎn)換o自動(dòng)轉(zhuǎn)換 n轉(zhuǎn)換總是朝表達(dá)數(shù)據(jù)能力更強(qiáng)的方向,并且轉(zhuǎn)換總是逐個(gè)運(yùn)算符進(jìn)行的。n由于這種轉(zhuǎn)換不會(huì)丟失有效的數(shù)據(jù)位,因而是安全的。n類型轉(zhuǎn)

8、換由系統(tǒng)自動(dòng)完成。n也稱為隱式類型轉(zhuǎn)換。例如:如果: int i=9; long l=123; float f=9.9; double d=9.9; 則:i+a+ i*f - d/5 運(yùn)算結(jié)果為double型 163.3 算術(shù)類型轉(zhuǎn)換charshortintlong intunsigned charunsigned shortunsigned intunsigned longfloatlong doubledouble 類型轉(zhuǎn)換的方向類型轉(zhuǎn)換的方向173.3 算術(shù)類型轉(zhuǎn)換o強(qiáng)制轉(zhuǎn)換n強(qiáng)制轉(zhuǎn)換是在程序中通過(guò)指定數(shù)據(jù)類型來(lái)改變,將一個(gè)變量從其定義的類型人為地改變成為另一種類型。n由于這種轉(zhuǎn)換可能會(huì)

9、丟失有效的數(shù)據(jù)位,因而是不安全的。n系統(tǒng)不會(huì)自動(dòng)進(jìn)行此類轉(zhuǎn)換。n也稱為顯示類型轉(zhuǎn)換。183.3 算術(shù)類型轉(zhuǎn)換o強(qiáng)制轉(zhuǎn)換 n功能:將一個(gè)表達(dá)式的值轉(zhuǎn)換成某個(gè)類型n格式:(類型名)(表達(dá)式)n說(shuō)明: 括號(hào)必須,但是,如果表達(dá)式是單個(gè)操作數(shù),其括號(hào)可以省。 例如:(int)x (int)(x+y) 一般,系統(tǒng)對(duì)操作數(shù)自動(dòng)進(jìn)行類型轉(zhuǎn)換,但如果: a%b 要求a和b都是整型,如果不是,必須先進(jìn)行轉(zhuǎn)換: (int)a%b (int)a%(int)b 轉(zhuǎn)換后只得到一個(gè)中間變量,被轉(zhuǎn)換的變量的類型不變。 193.4 增量和減量o自增: +n+i :先加1后使用n i+ :先使用后加1 例:i=3; j1=+i

10、; j1=4 相當(dāng)于執(zhí)行:i=i+1; j1=i; j2=i+; j2=3 相當(dāng)于執(zhí)行:j2=i; i=i+1; 由于前增量操作返回的值即修改之后的變量值,所以返回的仍然是一個(gè)左值。 例如: int a=3; +(+a); /ok: +a是左值。a的值是5 +(a +); /error: a+不是左值 由于后增量操作返回的值是原先a的值,而后a的值已經(jīng)發(fā)生變化,故返回的不能是當(dāng)前a,只能是過(guò)去的a值,不能是左值203.4 增量和減量o自減: -n-i :先減1后使用ni- :先使用后減1 例:i=3; j1=-i; j1=2 相當(dāng)于執(zhí)行:i=i-1; j1=i; j2=i-; j2=3 相當(dāng)于

11、執(zhí)行:j2=i; i=i-1; n前減量是左值,后減量不是左值。o注意:n前增量和后增量如果單獨(dú)使用表現(xiàn)不出其區(qū)別;如:+i; i+;n只有將增量放在其它表達(dá)式中參與運(yùn)算時(shí)才表現(xiàn)出區(qū)別;如:j=+i; j=i+;213.5 關(guān)系與邏輯運(yùn)算o1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式n關(guān)系運(yùn)算符和優(yōu)先級(jí) 6種關(guān)系運(yùn)算符: = = != 同級(jí)(7級(jí)) 同級(jí)(8級(jí))n關(guān)系表達(dá)式:用關(guān)系運(yùn)算符把操作對(duì)象按語(yǔ)法要求聯(lián)系起來(lái)的式子n關(guān)系表達(dá)式的值 1代表“真” 0代表“假”n被連接的對(duì)象可以是常量、變量、表達(dá)式。n其中表達(dá)式可以是邏輯、賦值、關(guān)系表達(dá)式。223.5 關(guān)系與邏輯運(yùn)算n關(guān)系表達(dá)式的值為邏輯值(真 / 假),可

12、以參加運(yùn)算 1代表“真”n關(guān)系表達(dá)式的值 0代表“假” 例:如果:a=1 b=2 c=3 d=ab=ca+5 d=(ab)=(c(a+5) 結(jié)果:d=1 d=7/2+ac+1=bc-5 d=(7/2+a)(c+1)=(c(a-5) 結(jié)果:d=0233.5 關(guān)系與邏輯運(yùn)算o說(shuō)明n關(guān)系運(yùn)算符“=”不要誤寫(xiě)成賦值運(yùn)算符“=” 。n注意“ac1,則,則acb永真永真。例:x=2; if (x=3) /與 if (x=3) 不同 x=4; coutxendl; / 4例:cout32) 3 & 2 | 8 4 - ! 0 1 1 1 3 0 1 1o注意:“acb”應(yīng)該表示為:ac &

13、c13 & age17 (不能寫(xiě)成13age17)o判斷年齡小于12或大于65?age65263.5 關(guān)系與邏輯運(yùn)算o短路表達(dá)式na&b 只要a為假(0值),就不必判斷b的值;只有a為真(非0值),才需判斷b的值。例:int a=1,b=2,c=3,d=4; int m=2,n=2; (m=ab)&(n=cd); coutm“,”nendl; / 0 2273.5 關(guān)系與邏輯運(yùn)算o短路表達(dá)式na|b 只要a為真(非0值),就不必判斷b的值;只有a為假(0值),才需判斷b的值。例:int a=1,b=2,c=3,d=4; int m=2,n=2; (m=ad); cout

14、m“,”nendl; / 1 2283.6 if 語(yǔ)句o1.if 語(yǔ)句的三種形式 if(表達(dá)式) 語(yǔ)句 if(表達(dá)式) 語(yǔ)句1 else 語(yǔ)句2 if(表達(dá)式1) 語(yǔ)句1 else if(表達(dá)式2) 語(yǔ)句2 if() else if() else if(表達(dá)式n) 語(yǔ)句n . else 語(yǔ)句n+1 else293.6 if 語(yǔ)句o2.if語(yǔ)句的嵌套n若“語(yǔ)句”之一是if語(yǔ)句,就是if語(yǔ)句嵌套 例如,輸入兩個(gè)整數(shù),比較兩個(gè)數(shù)的大小。 #include int main( ) int x,y; coutxy; if (x!=y) if (xy) coutyendl; else coutxyendl

15、; else coutx=yendl; 運(yùn)行結(jié)果1:Enter x and y:5 8xy303.6 if 語(yǔ)句o3.解決二義性 else總是和離它最近的還沒(méi)有配對(duì)的可見(jiàn)的if匹配。 例如,寫(xiě)程序段表達(dá)下面的含義: 1 x0 y= 0 x=0 -1 x0) y=1;else if (x=0) y=0;else y=-1;if (x=0) if (x0) y=1; else y=0;else y=-1;y=0;if (x=0) if (x0) y=1; else y=-1; 1 x0y= 0 x=0 -1 x0y= 0 x=0 -1 x=0) if (x0) y=1;else y=-1;y=0;

16、if (x=0) if (x0) y=1; else ;else y=-1;323.7 條件運(yùn)算符o條件運(yùn)算符“?:”是C+中唯一的三目運(yùn)算符.n格式 : ? : n優(yōu)先級(jí)比較低14級(jí),僅高于賦值和逗號(hào),右結(jié)合。n條件表達(dá)式的值:e1為真,e2的值為條件表達(dá)式的值; e1為假,e3的值為條件表達(dá)式的值o例:nnum = a b ? 10 : 8 ;if () else if () return else return 或或if ( a b ) num = 10 ; else num = 8 ;33例: x=34?4:5/2 x=(34)?4:(5/2) 輸出a,b中的較大者;ab ? cout

17、a :coutnNum1nNum2nNum3;nMax = nNum1 nNum2 ? nNum2 : nNum1;nMax = nMax nNum3 ? nNum3 : nMax ;x=2343.7 條件運(yùn)算符o在一個(gè)條件運(yùn)算符的表達(dá)式中,如果后面兩個(gè)表達(dá)式的值類型相同,均為左值,則該條件運(yùn)算符表達(dá)式的值為左值表達(dá)式。例如:int x=5;long a,b;(x?a:b)=1; /ok:因?yàn)閍和b都是左值(x?x:a)=2; /error:x和a不同類型。 /編譯器將其理解為 (long)x 和 a(x=2?1:a)=3; /error:1不是左值o在C中,條件運(yùn)算符是不能作左值的。353.

18、8 逗號(hào)表達(dá)式o逗號(hào)運(yùn)算符n “ ,” :也稱:順序求值運(yùn)算符n 作用:連接表達(dá)式n 優(yōu)先級(jí)最低o逗號(hào)表達(dá)式n 格式:表達(dá)式1,表達(dá)式2,表達(dá)式nn 求解過(guò)程:先求表達(dá)式1,再求表達(dá)式2,最后求表達(dá)式n,整個(gè)表達(dá)式的值為表達(dá)式n的值363.8 逗號(hào)表達(dá)式例: 如果a=5,表達(dá)式 a=3*5,a*4 的值為 即:a=3*5,a*4 注意:表達(dá)式 a=3*5,a*4 與 a=(3*5,a*4) 的區(qū)別 如果a=5,表達(dá)式a=(3*5,a*4)的值為逗號(hào)表達(dá)式可以嵌套: 如果a=5,表達(dá)式 (a=3*5,a*4),a+5的值為 即:a=3*5,a*4 這時(shí)的a=15 所以:a+5 就等于602020

19、37例: 如果a=4: a=a*5,a*4,a=4?a/2:+a a=a*5,a*4,(a=4?a/2:+a) 執(zhí)行結(jié)果:表達(dá)式a=a*5,a*4,a=4?a/2:+a的值為:21, a的值也是21如果:表達(dá)式是a=a*5,a*4,a=4?a/2:+a 則執(zhí)行結(jié)果為10,a的值是10 如果 a=4: b=(a*5,a*4,a=4?a/2:+a) 執(zhí)行結(jié)果:表達(dá)式b=(a*5,a*4,a=4?a/2:+a) 的值為:2, a的值是4, b的值是:23.8 逗號(hào)表達(dá)式383.8 逗號(hào)表達(dá)式o在C+中,逗號(hào)表達(dá)式的最后一個(gè)表達(dá)式為左值,則該表達(dá)式為左值。 例如:(a=1,b,c+1,d)=5; /ok:即d=5o在C中,逗號(hào)表達(dá)式是不能作左值的。39運(yùn)算符優(yōu)先級(jí)括號(hào)()+,-,sizeof !*, /, %+, - =, !=&|?:賦值運(yùn)算=逗號(hào)運(yùn)算,低低高高403.9 求值次序與副作用o 在表達(dá)式中,各操作數(shù)的求值次序并沒(méi)

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論