版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 表達(dá)式和語句,授課教師:馮廣慧,2021/3/14,2,3.1 表達(dá)式 3.2 算術(shù)運(yùn)算和賦值 3.3 算術(shù)類型轉(zhuǎn)換 3.4 增量和減量 3.5 關(guān)系與邏輯運(yùn)算 3.6 if語句 3.7 條件運(yùn)算符 3.8 逗號(hào)表達(dá)式 3.9 求值次序與副作用 注:紅色重點(diǎn)必講,藍(lán)色一般講授,黑色可不提,第三章 表達(dá)式和語句,2021/3/14,3,學(xué)習(xí)目標(biāo),理解表達(dá)式和語句的概念 掌握運(yùn)算符的功能與特點(diǎn) 理解運(yùn)算符的優(yōu)先級(jí)和結(jié)合性 理解解決問題的逐步描述方式 理解自頂向下、逐步求精的方法 能夠使用if和if/else語句來選擇動(dòng)作 能夠使用表達(dá)式來描述語句和操作,2021/3/14,4,3.1 表達(dá)
2、式,1. 表達(dá)式概述 定義:表達(dá)式是操作符、操作數(shù)和標(biāo)點(diǎn)符號(hào)組成的序列,其目的是用來說明一個(gè)計(jì)算過程。 表達(dá)式根據(jù)某些約定、求值次序、結(jié)合和優(yōu)先級(jí)規(guī)則來進(jìn)行計(jì)算。 約定:即類型轉(zhuǎn)換的約定。例如: float a; a = 5 / 2 ; /a得到值為2.0 5 /2 是整數(shù)除法取整,因?yàn)?和2都是整數(shù),不會(huì)由于a是float型而輕易改變運(yùn)算的性質(zhì),2021/3/14,5,求值次序:是指表達(dá)式中各個(gè)操作數(shù)的求值次序視編譯器不同而不同。 優(yōu)先級(jí):是指不同優(yōu)先級(jí)的操作符,總是先做優(yōu)先級(jí)高的操作。例如: d = a + b * c ; / 乘法優(yōu)先級(jí)比加法高 結(jié)合性:是指表達(dá)式中出現(xiàn)同等優(yōu)先級(jí)的操作符
3、時(shí),該先做哪個(gè)操作的規(guī)定,1. 表達(dá)式概述,2021/3/14,6,2.左值和右值(了解,左值是能出現(xiàn)在賦值表達(dá)式左邊的表達(dá)式。左值表達(dá)式具有存放數(shù)據(jù)的空間,并且存放是允許的。例如: int a = 3 ; /a是變量,所以a是左值 const int b = 4 ; /b是常量,所以b不是左值 顯然常量不是左值,因?yàn)镃+規(guī)定常量的值一旦確定是不能更改的,2021/3/14,7,3.優(yōu)先級(jí)和結(jié)合性 -共有16個(gè)等級(jí),如下表所示,2021/3/14,8,4、語句與復(fù)合語句,語句:C+中所有的操作運(yùn)算符都是通過表達(dá)式來實(shí)現(xiàn)的,由表達(dá)式組成的語句稱為表達(dá)式語句,它是由一個(gè)表達(dá)式后接一個(gè)分號(hào)“;” 組
4、成。 語句用來規(guī)定程序執(zhí)行的控制流,在沒有跳轉(zhuǎn)或分支的情況下,語句將按照其在程序中出現(xiàn)的次序順序執(zhí)行。 空語句:是只有一個(gè)分號(hào)而沒有表達(dá)式的語句,其形式為: ; 它不產(chǎn)生任何操作運(yùn)算,只作為形式上的語句,被填充在控制結(jié)構(gòu)中。例如,if( x 9 ) ; else cout“not larger than 9n,2021/3/14,9,復(fù)合語句:也稱為塊(Block),是指用一對(duì)花括號(hào)括起來的語句序列。從語法上,復(fù)合語句可以被認(rèn)為是單個(gè)語句。例如: 上面兩條執(zhí)行語句必須放在花括號(hào)中,因?yàn)閕f與else之間只能容納一條語句,或一個(gè)語句塊。而else后面的花括號(hào)則可以省略,if(x9) cout “
5、The number is perfect .n”; cout “It is larger than 9n”; else cout “not larger than 9n”;,3、語句與復(fù)合語句,2021/3/14,10,3.2 算術(shù)運(yùn)算和賦值,1.操作符種類 算術(shù)運(yùn)算符 單目 (負(fù)) + +(自增) (自減) 雙目 + , ,* ,/ ,% 注意: 除法 /對(duì)于整型數(shù)則為除法取整操作。 如:5/2得到結(jié)果2 除法 /對(duì)于浮點(diǎn)數(shù)則為通常意義的除法。 如:5.0/2.0得到結(jié)果為2.5 取余 只能對(duì)整數(shù)取余數(shù),不能對(duì)浮點(diǎn)數(shù)取余數(shù)。如52得到結(jié)果為1 -27%8 = -3,2021/3/14,11
6、,2.賦值縮寫 算術(shù)表達(dá)式的賦值表示為: int x , y , z ; x = y * z ; x = y / z ; x = y + z ; x = y z ; x = y % z ; 當(dāng)一個(gè)變量既出現(xiàn)在表達(dá)式的左邊又出現(xiàn)在右邊時(shí),可以縮寫。例如: (1) int x = 17, y = 3; x%=y; x值為2 (2)(x=max(5,7)+=3; 等價(jià)于 x=(x=max(5,7)+3,3.2 算術(shù)運(yùn)算和賦值,x = x * y ; 縮寫為: x * = y ; x = x + y ; 縮寫為: x + = y ; x = x - y ; 縮寫為: x - = y ; x = x /
7、 y ; 縮寫為: x / = y ; x = x % y ; 縮寫為: x % = y,2021/3/14,12,賦值運(yùn)算的類型轉(zhuǎn)換,賦值操作會(huì)發(fā)生類型轉(zhuǎn)換:將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的 將實(shí)型賦給整型,舍去小數(shù)部分 將整型賦給實(shí)型,小數(shù)部分自動(dòng)補(bǔ)0 將字符型賦給整型,將字符的8位,放在整型的低8位,其余各位補(bǔ)零 將int、short、long型賦給char型,只將其低8位原封不動(dòng)地送到char型中,2021/3/14,13,3.溢出 當(dāng)一個(gè)變量被賦于一個(gè)超出其數(shù)據(jù)類型的取值范圍的數(shù)值時(shí)產(chǎn)生溢出。數(shù)值溢出不引起編譯錯(cuò)誤,但使運(yùn)算結(jié)果出錯(cuò),3.2 算術(shù)運(yùn)算和賦值,2021/3
8、/14,14,3.3 算術(shù)運(yùn)算的類型轉(zhuǎn)換,當(dāng)表達(dá)式中不同類型數(shù)據(jù)進(jìn)行運(yùn)算時(shí),C+將自動(dòng)進(jìn)行類型轉(zhuǎn)換,再進(jìn)行運(yùn)算。 轉(zhuǎn)換原則是朝表達(dá)數(shù)據(jù)的精確度更高的方向(存儲(chǔ)長度 長)轉(zhuǎn)換,并且轉(zhuǎn)換是逐個(gè)運(yùn)算進(jìn)行的。 自動(dòng)轉(zhuǎn)換也稱為隱式轉(zhuǎn)換,C+中類型轉(zhuǎn)換方向,2021/3/14,15,強(qiáng)制類型轉(zhuǎn)換又稱顯示轉(zhuǎn)換 轉(zhuǎn)換格式: (類型名)變量或數(shù)值 or 類型名(變量或數(shù)值) 例如: double a, b, c; c = a%b; /錯(cuò)誤 c=(int)a%(int)b; /正確,3.3 算術(shù)運(yùn)算的類型轉(zhuǎn)換,2021/3/14,16,又如: cout 234*456/6endl; / 若int型占2字節(jié) /16
9、位機(jī)器或其他編譯器 /溢出,數(shù)據(jù)錯(cuò)誤 cout 234*456l/6endl; / 正確 上例的輸出可表示為: cout (long)234*456/6 endl; cout long(234)*456/6 endl; 下面是錯(cuò)誤表達(dá)式: cout (long )(234*456)/6 endl; / 溢出 / 234*456求值后再強(qiáng)制類型轉(zhuǎn)換,3.3 算術(shù)運(yùn)算的類型轉(zhuǎn)換,2021/3/14,17,3.4自增和自減,自增操作符 + 表示變量自增1; 自減操作符 - 表示變量自減1; a+ 等價(jià)于 a=a+1; (后綴) +a 等價(jià)于 a=a+1; (前綴) a- 等價(jià)于 a=a-1; (后綴
10、) -a 等價(jià)于 a=a-1; (前綴) 前綴自增或前置自減操作:表示先修改操作數(shù)使之增1或減1,然后取修改后的操作數(shù)的值作為表達(dá)式的值。 后綴自增或后置自減操作:表示在表達(dá)式中先取操作數(shù)的值,然后再將操作數(shù)值增1或減1。 由于增量與減量操作包含有賦值操作,所以操作數(shù)不能是常量,它必須是一個(gè)左值表達(dá)式。 例如: 3+ ; /error,2021/3/14,18,include void main() int a = 5; int b; b = -a; couta=atb=bendl; b = a-; couta=atb=bendl;,2021/3/14,19,include void main
11、() int a = 5; int b; b = +a; couta=atb=bendl; b = a+; couta=atb=bendl;,2021/3/14,20,在表達(dá)式中如果有2個(gè)以上的“+”或“-”連寫在一起,則編譯器首先識(shí)別前面兩個(gè)+或-為自增或自減操作符(編譯的貪吃特征) 例如: int a=1 , b=5, c; c=a+b; /正確:c=6 c=a+b; /錯(cuò)誤:a+b + 不是雙目運(yùn)算符 c=a+b; /正確:a+ + b c=a+b; /錯(cuò)誤:a+ +b c=a+b; /錯(cuò)誤:a+ + +b,2021/3/14,21,3.5關(guān)系與邏輯運(yùn)算,1、運(yùn)算符 關(guān)系運(yùn)算符 = =
12、等于 ! = 不等于 大于 = 大于等于 邏輯運(yùn)算符 ! 非 if(x = = 9) /判等 cout“x is 9”; 若 if (x = 9) /賦值 cout“x is not 0n,3.5關(guān)系與邏輯運(yùn)算,符號(hào)“=”是關(guān)系運(yùn)算符,表示檢驗(yàn)左右兩個(gè)量之間是否具有“等于、相等”的關(guān)系 符號(hào)“=”是賦值運(yùn)算符,賦值要“寫內(nèi)存”,表示把右邊的表達(dá)式值賦給左邊的變量,寫入該變量的內(nèi)存空間中,2021/3/14,23,問題】以下程序片段 int main ( ) int x=6,y=2,z=5; if (x=y+z) coutx; else couty; 請(qǐng)說明這段程序的作用,然后判斷: A)有語法
13、錯(cuò)誤,不能通過編譯 B)輸出:6 C)輸出:7 D) 輸出:2 如果將if (x=y+z) 改為if (x=y+z) 輸出什么結(jié)果? 答案C,2021/3/14,24,3、不等于運(yùn)算符 != int x = 3; if ( x!=9 ) cout “not 9n” ; /判斷不等于 if ( x=!9 ) cout “possiblen” ; /!9賦值給x 請(qǐng)看下面程序的運(yùn)行結(jié)果,3.5關(guān)系與邏輯運(yùn)算,include void main() int x=3; if ( x=!9 ) cout possiblen ; else cout impossiblen ;,2021/3/14,25,條
14、件表達(dá)式(e!=0)與(e)等同,如: int x = 3; if ( x != 0 ) cout x ; if ( x ) cout x,2021/3/14,26,4.嵌入賦值 有時(shí)候,需要將一個(gè)函數(shù)值賦給一個(gè)變量,然后比較該變量的值與預(yù)定值是否相等。例如: x=func(); if(xsomevalue) 上面的代碼與下面的代碼等價(jià): if(x=func()somevalue) 這里,由于 操作比操作優(yōu)先級(jí)高,所以需要額外加一個(gè)括號(hào),3.5關(guān)系與邏輯運(yùn)算,2021/3/14,27,5.邏輯非運(yùn)算符 ?。ㄟ壿嫹牵└淖儣l件表達(dá)式的真假值。 !0 為1 !1 為0 !x 為0 (其中x為不等于0
15、的數(shù)) 再如: if(!(x=9) cout“x is not 9.n”; 注意:由于!(邏輯非)的優(yōu)先級(jí)較高 !x=9 被理解為 (!x)=9 因此,想先判斷x=9應(yīng)給它加上括號(hào),3.5關(guān)系與邏輯運(yùn)算,2021/3/14,28,6、邏輯運(yùn)算 例如: int temp = 90, humi = 80; if(temp = 80 輸出結(jié)果,it is hot! The room is uncomfortable,3.5關(guān)系與邏輯運(yùn)算,2021/3/14,29,問題】下述表達(dá)式中,可以正確表示數(shù)學(xué)關(guān)系0 x1的是 。 A)(x=0) m = 6 ; if (n 4,又如:int temp = 90
16、,humi = 80; if(temp=80,輸出結(jié)果:m = 6,輸出結(jié)果為: wow,it is hot! the room is uncomfortable,2021/3/14,31,3.6 if語句,程序通常是由順序、分支(選擇)和循環(huán)三種控制結(jié)構(gòu)組成。 C+中條件選擇控制語句(Selection statement)包括: 1、if 語句(簡(jiǎn)單分支,if(條件表達(dá)式) 語句塊,2、空語句 if(條件表達(dá)式),if(條件表達(dá)式) 語句,或,2021/3/14,32,3、 if.else語句(雙重分支) if(條件表達(dá)式) 語句1; else 語句2,3.6 if語句,include #
17、include void main ( ) cout “please input the b key to hear a bell .n”; char ch = getche( ); if (ch = = b) cout a; else if(ch = = n) cout “what a boring select on n”; else cout “bye!n”;,2021/3/14,33,4、注意二義性:if語句嵌套時(shí),應(yīng)注意二義性。 if else配對(duì)原則是:else與其緊靠的沒有配對(duì)的且為可見的if配對(duì),3.6 if語句,再如:int x = 20; if ( x = 0) if (
18、x =0 且 x50 else cout “ x is not okn”; /x0,例如: int x = 20; if (x = 0) if (x =0 且 x=0 且 x=50,2021/3/14,34,3.7條件運(yùn)算符,條件運(yùn)算符 ? : 為三目運(yùn)算符 語法: (條件表達(dá)式)?(條件為真時(shí)的表達(dá)式) : (條件為假的表達(dá)式) 例如: x = a b ? a : b; /將a,b中較小數(shù)賦x 事實(shí)上,三目運(yùn)算操作是簡(jiǎn)單if語句的另一種表達(dá)方式。 if (a b) x = a; else x = b; 例如: if(x) a = 327981; else b = 327981; 可表示為:
19、x ? a=327981 : b=327981; 如果a和b為同類型,則還可以: (x?a:b) = 327981,2021/3/14,35,注意使用圓括號(hào) cout b ? a : b )y)? ”greater than”:(x = = y)? ”equal to”: ” less than”,3.7條件運(yùn)算符,2021/3/14,36,3.8 逗號(hào)表達(dá)式,由逗號(hào)操作符連接的表達(dá)式稱為逗號(hào)表達(dá)式,語法為: 表達(dá)式1,表達(dá)式2,表達(dá)式n C+順序計(jì)算表達(dá)式1至n的值,取表達(dá)式n的值作為整個(gè)表達(dá)式的值。 例如: int a , b , c , d ; d = ( a = 1, b = a+2,
20、 c = b+3); cout d endl; 結(jié)果為:6 逗號(hào)表達(dá)式可用于循環(huán)語句中的表達(dá)式和函數(shù)調(diào)用中的參數(shù)。 for ( n = 1 , j = 20 ; nj ; n+ , j-) func( n , ( j = 1 , j + 4 ) , k,2021/3/14,37,3.9求值次序與副作用(了解,表達(dá)式的值 由操作數(shù)和操作符決定. 操作符決定對(duì)操作數(shù)施加的操作 操作的先后由優(yōu)先級(jí)和結(jié)合性作主 訪問操作數(shù)的先后,語言沒有明確規(guī)定 表達(dá)式的副作用 表達(dá)式的值因?yàn)樵L問操作數(shù)先后順序不同而不同所引起,2021/3/14,38,9、求值次序與副作用,使結(jié)合律失效 int a = 3, b =
21、 5 ; c = a*b+ +b; d = +b + a*b; / c與d不同 /c為21,d 為24 或反之使括號(hào)失效 int a = 3 , b = 5 ; int c = +b * ( a+b ) ; /可能為54,2021/3/14,39,2021/3/14,40,9、求值次序與副作用,副作用的根源:表達(dá)式中,多于一個(gè)的實(shí)體值發(fā)生改變 int a = 3, b = 5 ; c = a*b+b ; / c和b改變 此時(shí),若其中一個(gè)實(shí)體被訪問兩次以上,則副作用可能發(fā)生 a = ( b=25 ) += 5 ; / a和b改變,但都被訪問1次 a = ( b=25 ) + b ; / 副作用:
22、 a,b改變,b被訪問2次,2021/3/14,41,9、求值次序與副作用,消除副作用分開語句寫,如: c = a*b+b ; 可以寫成: c = b + a*b ; b+ ; 或者 b+ ; c = b + a*b,2021/3/14,42,總結(jié):常用運(yùn)算符優(yōu)先級(jí),2021/3/14,43,總結(jié):運(yùn)算符的結(jié)合性,單目、條件和賦值運(yùn)算符具有右結(jié)合性,如: 單目運(yùn)算符:!a+ !(a+) 單目運(yùn)算符: k=-i+ k=-(i+) 因?yàn)檫壿嫹?、?fù)號(hào)和自增運(yùn)算符優(yōu)先級(jí)相同,哪一個(gè)正確就得看結(jié)合方向。他們的結(jié)合方向都是從右向左。 條件運(yùn)算符:a ? b : c ? d : e a ? b : (c ?
23、 d : e) 賦值運(yùn)算符:a = b = c a = (b = c) 其它運(yùn)算符左結(jié)合,如: 算術(shù)運(yùn)算符:a + b - c (a + b) - c,2021/3/14,44,本章小結(jié),C+為每個(gè)運(yùn)算符規(guī)定了優(yōu)先級(jí)和結(jié)合性,以控制各運(yùn)算的順序,確保表達(dá)式計(jì)算的一致性,利用括號(hào)可以改變表達(dá)式的運(yùn)算順序。 如果運(yùn)算結(jié)果超過了該數(shù)據(jù)類型能夠表達(dá)的范圍,則C+進(jìn)行截?cái)嗵幚怼?參加運(yùn)算的兩個(gè)操作數(shù)類型不同時(shí),C+將自動(dòng)作隱式類型轉(zhuǎn)換,也可作強(qiáng)制類型轉(zhuǎn)換。 前綴自增(自減)操作符要求C+編譯器先自增(自減)變量的值,然后再使用變量。 后綴自增(自減)操作符要求編譯器先使用變量,然后再自增(自減)變量的值
24、。 邏輯運(yùn)算符 int i = 5,j = 7,k = 0; a1 = !k; a2 = i!= j; couta1 =a1t a2 =a2endl;,2021/3/14,46,2. #include void main() int x,y,z; x = 1; y = 1; z = 1; x = x|y,2021/3/14,47,3. #include void main() int a,b,c; int s,w,t; s = w = t = 0; a = -1; b = 3; c = 3; if(c0) s = a + b; if(a 0) if(c 0) w = a - b; else t
25、 = c; couts, w,tendl;,2021/3/14,48,4. #include void main() int a,b,c,d,x; a = c = 0; b = 1; d = 20; if(a) d = d - 10; else if(!b) if(!c) x = 15; else x = 25; coutdendl;,2021/3/14,49,二、編程 1.輸入年份,判別該年是否為閏年 年份year為閏年的條件為 能夠被4整除,但不能被100整除的年份 能夠被400整除的年份 設(shè)定標(biāo)志變量leap,只要符合其中一個(gè)條件的就是閏年,令 leap =1;否則令 leap=0 【問題】如何判斷year能否被4整除? year%4=0 能整除 year%100!=0 不能整除,2021/3/14,50,include void main() int year, leap ; cin year; if(year%4 = 0,2021/3/14,51,2、批發(fā)某商品,小于50件不打折,5099件打9.5折,100299件打9折,300499件打8.5折,5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2182-2024農(nóng)灌機(jī)井取水量計(jì)量監(jiān)測(cè)方法
- JJF 2165-2024實(shí)驗(yàn)室振動(dòng)式液體密度儀校準(zhǔn)規(guī)范
- 2024年度網(wǎng)絡(luò)游戲虛擬物品交易合同
- 2024年度建筑工程施工承包合同標(biāo)的明細(xì)
- 2024城市地下綜合管廊建設(shè)項(xiàng)目融資合同
- 2024年度放心簽建材銷售合同模板
- 2024年工程質(zhì)量檢測(cè)與環(huán)保評(píng)估合同
- 2024年度廣告發(fā)布合同標(biāo)的廣告內(nèi)容與投放時(shí)間
- 2024小產(chǎn)權(quán)房買賣合同糾紛
- 地理教學(xué)課件教學(xué)課件
- 2024年入團(tuán)知識(shí)考試題庫及答案
- 腫瘤化療導(dǎo)致的中性粒細(xì)胞減少診治中國專家共識(shí)(2023版)解讀
- 《新能源汽車概論》課件-6新能源汽車空調(diào)系統(tǒng)結(jié)構(gòu)及工作原理
- 2024年共青團(tuán)入團(tuán)考試題庫(附答案)
- 田徑運(yùn)動(dòng)會(huì)各種記錄表格
- 產(chǎn)科新生兒疫苗接種課件
- 企業(yè)信息管理概述課件
- 室外健身器材投標(biāo)方案(技術(shù)方案)
- 足浴店店長聘用合同范本
- tubeless胸科手術(shù)麻醉
- 電商免責(zé)聲明范本
評(píng)論
0/150
提交評(píng)論