




已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2019/7/14,1,C語言程序設(shè)計(jì),第三章 表達(dá)式與運(yùn)算符,主講: 計(jì)算機(jī)學(xué)院 朱立華,2019/7/14,3,內(nèi)容提要,表達(dá)式體現(xiàn)對(duì)數(shù)據(jù)的處理,由運(yùn)算符和運(yùn)算對(duì)象組成 掌握每種運(yùn)算符的以下知識(shí): 對(duì)運(yùn)算對(duì)象的要求 運(yùn)算符的結(jié)合性 運(yùn)算符的優(yōu)先級(jí) 運(yùn)算結(jié)果的特性 有多種運(yùn)算符的復(fù)雜表達(dá)式的計(jì)算順序及計(jì)算結(jié)果 數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換規(guī)則及強(qiáng)制轉(zhuǎn)換的方法,2019/7/14,4,表達(dá)式的組成,表達(dá)式實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,每個(gè)表達(dá)式都有唯一的值 表達(dá)式由運(yùn)算對(duì)象和運(yùn)算符組成 運(yùn)算對(duì)象的種類:常量、變量、有返回值的函數(shù)調(diào)用、其它表達(dá)式 例:2 a rand() (2+a)*rand( ) 運(yùn)算符:共34種,分為15個(gè)不同的優(yōu)先級(jí),可以理解成是不帶運(yùn)算符的最簡單表達(dá)式,常量表達(dá)式,變量表達(dá)式,函數(shù)表達(dá)式,帶運(yùn)算符的表達(dá)式,2019/7/14,5,左值與右值,每個(gè)表達(dá)式都有唯一確定的值,表達(dá)式不是左值就是右值 右值:只能出現(xiàn)在賦值號(hào)(=)右邊的表達(dá)式 左值:不是右值的表達(dá)式就是左值 左值與右值的關(guān)系:右值只能出現(xiàn)在賦值號(hào)的右邊;而左值既可以出現(xiàn)在賦值號(hào)的左邊,又可以出現(xiàn)在賦值號(hào)的右邊。左值可以取地址,右值不可以取地址. 例: 2 a rand() (2+a)*rand( ) a=b,常量表達(dá)式只能作為右值 例:a=2;(右值),變量表達(dá)式為左值,既可在賦值號(hào)左邊也可以在右邊,例:a=5;(左邊) b=a;(右邊),此函數(shù)表達(dá)式為右值 例:a=rand( )右值),此表達(dá)式只能作為右值 例:b=(2+a)*rand( ); (右值),賦值表達(dá)式只能作為右值 例:c=a=b;(右值) (a=b)=c;(出錯(cuò)),2019/7/14,6,算術(shù)運(yùn)算符,算術(shù)運(yùn)算符主要完成數(shù)值計(jì)算問題,具體如下表所列,例:int a=3,b,c; a+的表達(dá)式結(jié)果是3,變量a的值是4; +a的表達(dá)式結(jié)果是4,變量a的值是4; 因此,c=a+執(zhí)行后, c的值是3,a的值是4 b=+a執(zhí)行后,b的值是4,a的值也是4,例:int a=3; -a結(jié)果為-3,但是變量a的值仍為3 -2.45是2.45的相反數(shù),例:int a=3,b,c; a-的表達(dá)式結(jié)果是3,變量a的值是2; -a的表達(dá)式結(jié)果是2,變量a的值是2; 因此,c=a-執(zhí)行后, c的值是3,a的值是2 b=-a執(zhí)行后,b的值是2,a的值也是2,例:int a=27,b=5,c; 表達(dá)式a/b結(jié)果是5,而不是5.4 表達(dá)式27.0/b結(jié)果是5.4 表達(dá)式27.0/5.0結(jié)果是5.4,例:int a=27,b=5,c; 表達(dá)式a%b結(jié)果是2, 表達(dá)式-a%b結(jié)果是-2 表達(dá)式27.0%b是錯(cuò)誤的,例:表達(dá)式2+3結(jié)果是5 表達(dá)式2+3.0結(jié)果是5.0 表達(dá)式2.0+3.0結(jié)果是5.0,例:表達(dá)式3-2結(jié)果是1 表達(dá)式3.0-2結(jié)果是1.0 表達(dá)式3.0-2.0結(jié)果是1.0,2019/7/14,7,算術(shù)運(yùn)算符,程序3.1 賦值表達(dá)式及算術(shù)運(yùn)算符示例 #include #include /包含隨機(jī)函數(shù)rand的聲明 int main( ) int a=5,b=6,c=7; printf(“%dn”,rand(); /顯示隨機(jī)數(shù) print(“%dn“,a*(b+c)/2-2); /顯示算術(shù)表達(dá)式的值 printf(“%dn“,a=b); /顯示賦值表達(dá)式即a的值 b=rand()%10; /混合表達(dá)式賦0至9之間的1個(gè)隨機(jī)數(shù) printf(“%dn”,c=a=b); /顯示賦值表達(dá)式的值即c的值 return 0; , 41 30 6 7,2019/7/14,8,關(guān)系運(yùn)算符,關(guān)系運(yùn)算符主要完成表達(dá)式間的比較,比較的結(jié)果非真即假,C語言中無邏輯類型,故用1表示真,0表示假 任何類型的值,只要不等于0,在需要作出真假判斷的場合就代表邏輯真。,結(jié)論:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,例:c(a+b) 可以寫成: ca+b,例:(ab)!=c 可以寫成: ab!=c,例:a=(bc)可以寫成: a=bc,例:(d=c)=(a+b)用括號(hào)表達(dá)式的含義清楚,2019/7/14,9,關(guān)系運(yùn)算符,程序3.2 關(guān)系運(yùn)算示例 #include #include /包含隨機(jī)函數(shù)rand的聲明 int main( ) int a=rand()%10; /產(chǎn)生3個(gè)09的隨機(jī)數(shù) int b=rand()%10; int c=rand()%10,d; printf(“a=%d,b=%d,c=%dn”,a,b,c); /輸出 printf(“%dn“,c=(a+b); return 0; , a=1,b=7,c=4 1 0,rand( )函數(shù)產(chǎn)生一個(gè)非負(fù)隨機(jī)整數(shù), 產(chǎn)生一個(gè)a,b范圍的非負(fù)隨機(jī)整數(shù)的方法是:a+rand( )%(b-a+1),2019/7/14,10,邏輯運(yùn)算符,邏輯運(yùn)算符主要完成更復(fù)雜的條件判斷 邏輯表達(dá)式的最終結(jié)果只有兩個(gè):1表示真,0表示假。 任何類型的值,只要不等于0,在需要作出真假判斷的場合就代表邏輯真,0代表邏輯假,幾種運(yùn)算符的優(yōu)先級(jí):單目-算術(shù)-關(guān)系-邏輯與-邏輯或,例:!A 結(jié)果為0, !(2+35)結(jié)果為1,例:(ab)&(xy) 可以寫成: ab&xy,例:(a=b)|(x=y) 可以寫成: a=b|x=y,例:(!a)|(a!=b) 可以寫成: !a|a!=b,例:表達(dá)字符變量ch是大寫字母的正確條件為:ch=A&ch=Z,而不是: A=ch=Z,例:表達(dá)整型變量y是閏年的正確條件為:y%400=0|y%4=0&y%100!=0,2019/7/14,11,邏輯運(yùn)算符,邏輯與、邏輯或運(yùn)算符具有短路功能當(dāng)?shù)谝贿\(yùn)算對(duì)象的結(jié)果就是表達(dá)式結(jié)果時(shí),第二運(yùn)算對(duì)象不作計(jì)算 邏輯運(yùn)算符的真值表及短路說明如下表所示:,邏輯與短路總結(jié):當(dāng)?shù)谝粚?duì)象的值為假時(shí),第二對(duì)象無需計(jì)算。因?yàn)?無論第二對(duì)象結(jié)果是什么,最終表達(dá)式的值肯定為假 邏輯或短路總結(jié):當(dāng)?shù)谝粚?duì)象的值為真時(shí),第二對(duì)象無需計(jì)算。因?yàn)?無論第二對(duì)象結(jié)果是什么,最終表達(dá)式的值肯定為真,2019/7/14,12,邏輯運(yùn)算符,假設(shè)已有定義:int a=5,b=6,c=7; 下表給出了&和|的短路功能,練習(xí): 設(shè)有語句:int a = 3 , b =5, m=0; 則執(zhí)行語句 a+b8&(m = a=3)后,m的值為_,整個(gè)表達(dá)式的值為_,2019/7/14,13,邏輯運(yùn)算符,程序3.3 邏輯運(yùn)算示例 #include #include /包含隨機(jī)函數(shù)rand的聲明 int main( ) int a=1+rand()%50, b=1+rand()%50; int x=rand()/a, y=rand()/b; printf(“%d,%d,%dn“,a,b,ab); printf(“%d,%d,%dn“,x,y,xy); printf(“%dn“,(ab) , 42,18,0 150,1472,1 0 0 1,rand( )函數(shù)產(chǎn)生一個(gè)非負(fù)隨機(jī)整數(shù), 產(chǎn)生一個(gè)a,b范圍的非負(fù)隨機(jī)整數(shù)的方法是:a+rand( )%(b-a+1),2019/7/14,14,自增自減運(yùn)算符,在算術(shù)運(yùn)算符中已提到單目運(yùn)算符自增(+)和自減(-) 自增自減運(yùn)算符的幾個(gè)特殊性: (1)這兩種運(yùn)算符專門用于改變一個(gè)變量自身的值(增或減1),因此實(shí)質(zhì)上具有賦值功能,運(yùn)算對(duì)象只能是一個(gè)變量。 (2)對(duì)變量變化的時(shí)機(jī)取決于運(yùn)算符與運(yùn)算對(duì)象的相對(duì)位置,有前后之分,+a和a為前+(-),a+和a為后+(-) (3)前+或前是指先改變變量的值,再用變化后的值參加運(yùn)算;后+或后是指先用未變化過的變量的值參加表達(dá)式的運(yùn)算,最后再改變變量的值。共同點(diǎn)就是變量值肯定改變 (4)需要區(qū)分表達(dá)式的值和變量的值,大部分情況下不是一回事,但是如果僅僅改變變量而不用它運(yùn)算,則前后無區(qū)別,2019/7/14,15,自增自減運(yùn)算符,假設(shè)已有定義:int x=8,i=2,j=4; 下表列出了有自增自減運(yùn)算符的表達(dá)式的值及變量的值,2019/7/14,16,自增自減運(yùn)算符,程序3.4 自增自減運(yùn)算示例 #include int main( ) int i=5,j=6,k; i+; +j; /相當(dāng)于i=i+1;j=j+1; printf(“i=%d,j=%dn“,i,j); i-; -j; /相當(dāng)于i=i-1;j=j-1; printf(“i=%d,j=%dn“,i,j); k=(i+)+(+j); /相當(dāng)于j=j+1;k=i+j; i=i+1; printf(“i=%d,j=%d,k=%dn“,i,j,k); k=(i-)+(-j); /相當(dāng)于j=j-1;k=i+j; i=i-1; printf(“i=%d,j=%d,k=%dn“,i,j,k); return 0; , i=6,j=7 i=5,j=6 i=6,j=7,k=12 i=5,j=6,k=12,2019/7/14,17,位運(yùn)算符,位運(yùn)算是對(duì)字節(jié)或字內(nèi)的二進(jìn)制數(shù)位進(jìn)行測試、抽取、設(shè)置或移位等操作,是C語言可對(duì)硬件編程的體現(xiàn)。運(yùn)算對(duì)象只能是int類型(包括char類型) C中提供6種位運(yùn)算符,其中的(按位取反為單目運(yùn)算符),其余5個(gè)為雙目運(yùn)算符,具體見下一頁 多種運(yùn)算符的優(yōu)先級(jí): 單目-算術(shù)乘除取余-算術(shù)加減-移位-關(guān)系-按位與-按位異或-按位或-邏輯與-邏輯或,2019/7/14,18,152 =60 00001111,00,相當(dāng)于15*22,152 =3 00001111,00,相當(dāng)于15/22,2019/7/14,19,5,條件運(yùn)算符,條件運(yùn)算符是C語言中唯一的1個(gè)三目運(yùn)算符 其格式為:表達(dá)式1?表達(dá)式2:表達(dá)式3 計(jì)算方法及運(yùn)算結(jié)果:先求表達(dá)式1得到非0表示真,得到0表示假。如果是真,則條件表達(dá)式的值等于表達(dá)式2的值(此時(shí)表達(dá)式3不計(jì)算);如果是假,則條件表達(dá)式的值等于表達(dá)式3的值(此時(shí)表達(dá)式2不計(jì)算)。 優(yōu)先級(jí):13級(jí),僅高于逗號(hào)和賦值運(yùn)算符的優(yōu)先級(jí) 結(jié)合方向:從右至左,當(dāng)有條件運(yùn)算符嵌套時(shí),按照從右至左的順序依次運(yùn)算。 例:int a=1,b=2,x; 則條件運(yùn)算表達(dá)式:ab?(x=6):(x=7)的值是? 對(duì)運(yùn)算對(duì)象的要求:可以是任何類型的表達(dá)式,2019/7/14,20,條件運(yùn)算符,程序3.5 條件運(yùn)算示例 #include #include int main( ) int a=rand()%10, b=rand()%10,c,d; c=ab?a:b; d=ab?a:b; printf(“a=%d,b=%dn“,a,b); printf(“c=%d,d=%dn“,c,d); return 0; , a=1,b=7 c=7,d=1,2019/7/14,21,賦值與復(fù)合賦值運(yùn)算符,賦值運(yùn)算符是C語言中使變量獲得值的運(yùn)算符,有兩大類復(fù)合賦值運(yùn)算符 : (1)雙目算術(shù)運(yùn)算與賦值運(yùn)算符一起,構(gòu)成算術(shù)復(fù)合賦值運(yùn)算符 (2)雙目位運(yùn)算與賦值運(yùn)算符一起,構(gòu)成位復(fù)合賦值運(yùn)算符 運(yùn)算對(duì)象:左邊只能是變量,右邊是一個(gè)表達(dá)式 計(jì)算方法及運(yùn)算結(jié)果:表示給該變量空間賦值或修改該變量空間中的值,此時(shí)變量也稱為左值。賦值運(yùn)算符右邊是一個(gè)表達(dá)式,其類型最好是與左值類型一致, 不一致時(shí)自動(dòng)類型轉(zhuǎn)換. 優(yōu)先級(jí):14級(jí),僅高于逗號(hào)的優(yōu)先級(jí) 結(jié)合方向:從右至左,在連續(xù)賦值時(shí),按從右至左的順序依次 例:設(shè)int a=1,b=2,c=5; 計(jì)算 a=b=c 和 (a=b)=c,先計(jì)算b=c,b獲得值5,該賦值表達(dá)式結(jié)果為b;此結(jié)果作為賦值表達(dá)式a=b=c的右值賦給a,因此a=5,最終a,b,c的值均為5,先計(jì)算a=b,a獲得b的值2,該賦值表達(dá)式結(jié)果為a;此結(jié)果作為賦值表達(dá)式(a=b)=c的左值獲得c的值,因此a=5,最終a,b,c的值分別為5,2,5,將復(fù)合賦值運(yùn)算符轉(zhuǎn)換為等效的普通賦值運(yùn)算符按以下3步: (1)將原復(fù)合賦值運(yùn)算符右邊的表達(dá)式加圓括號(hào)作為1個(gè)整體; (2)將原復(fù)合賦值運(yùn)算符左邊的變量名連同那個(gè)算術(shù)運(yùn)算符或位運(yùn)算符一起移到賦值號(hào)的右邊,作為賦值號(hào)右邊的第一部分置于原復(fù)合賦值運(yùn)算符右邊整體之前; (3)將原復(fù)合賦值運(yùn)算符左邊的變量名留下,直接跟賦值號(hào),去掉原來的算術(shù)運(yùn)算符或位運(yùn)算符。 例:a*=b+5 =a=a*(b+5),2019/7/14,22,賦值與復(fù)合賦值運(yùn)算符,程序3.6 賦值及復(fù)合賦值示例 #include int main( ) int a,b,c; a=b=c=7; /相當(dāng)于c=7;b=c;a=b c+=a+; /相當(dāng)于c=c+a; a+; printf(“a=%d,c=%dn“,a,c); c%=+a; /相當(dāng)于+a; c=c%a; printf(“a=%d,c=%dn“,a,c); c*=a-; /相當(dāng)于c=c*a; a-; printf(“a=%d,c=%dn“,a,c); return 0; , a=8,c=14 a=9,c=5 a=8,c=45,2019/7/14,23,逗號(hào)運(yùn)算符,逗號(hào)不僅是C語言源程序中的一種分隔符,還是一種運(yùn)算符。 逗號(hào)表達(dá)式的形式:表達(dá)式1,表達(dá)式2,,表達(dá)式n 運(yùn)算對(duì)象:可以是任何類型的表達(dá)式 計(jì)算方法及運(yùn)算結(jié)果:按從左到右的順序依次計(jì)算各表達(dá)式的值,最后一個(gè)表達(dá)式n的結(jié)果就是整個(gè)逗號(hào)表達(dá)式的結(jié)果. 優(yōu)先級(jí):15級(jí),優(yōu)先級(jí)最低,通常通過加括號(hào)提升其優(yōu)先級(jí) 結(jié)合方向:從左至右 例:設(shè)所有變量均為int型,計(jì)算 x=a=3,6*a 和 x=(a=3,6*a),這是一個(gè)逗號(hào)表達(dá)式,先計(jì)算賦值表達(dá)式x=a=3,該表達(dá)式的結(jié)果為x,變量x和a的值均為3,再計(jì)算第二個(gè)表達(dá)式6*a結(jié)果為18,因此逗號(hào)表達(dá)式最后結(jié)果為18,這是一個(gè)賦值表達(dá)式,先計(jì)算圓括號(hào)內(nèi)逗號(hào)表達(dá)a=3,6*a ,該表達(dá)式的結(jié)果為18,再將該結(jié)果賦值給變量x,因此賦值表達(dá)式最后結(jié)果為18,變量a的值為3,x的值為18,2019/7/14,24,內(nèi)部類型轉(zhuǎn)換,不同類型進(jìn)行混合運(yùn)算需要先轉(zhuǎn)換為同一種類型再計(jì)算,這個(gè)類型稱為目標(biāo)類型。C語言提供了3種方式的類型轉(zhuǎn)換。 (1)不同類型數(shù)據(jù)混合運(yùn)算時(shí),由編譯器自動(dòng)完成隱式類型轉(zhuǎn)換 float轉(zhuǎn)為double 短存儲(chǔ)型轉(zhuǎn)為長存儲(chǔ)型 有符號(hào)數(shù)據(jù)轉(zhuǎn)為無符號(hào)數(shù)據(jù) 整型轉(zhuǎn)為浮點(diǎn)型 (2)強(qiáng)制性數(shù)據(jù)類型轉(zhuǎn)換:根據(jù)用戶需要用語句進(jìn)行轉(zhuǎn)換,形式 (目標(biāo)類型名)待轉(zhuǎn)換表達(dá)式 例: int a=(int)3.14; /a=3 (float)a/4 = 3.0/4結(jié)果為0.75 (float)(a/4) = 3/4結(jié)果為0,然后float(0),結(jié)果0.0 變量a的類型仍為int型。強(qiáng)制類型轉(zhuǎn)換不會(huì)改變
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧中醫(yī)藥大學(xué)《幼兒美術(shù)作品賞析與創(chuàng)作》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古自治區(qū)呼和浩特市賽罕區(qū)達(dá)標(biāo)名校2024-2025學(xué)年初三第三次(4月)聯(lián)考英語試題試卷含答案
- 外貿(mào)船務(wù)知識(shí)培訓(xùn)課件
- 焦作工貿(mào)職業(yè)學(xué)院《中國通史上》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川省自貢市富順縣二中2024-2025學(xué)年高三3月教學(xué)質(zhì)量檢測試題化學(xué)試題含解析
- 泰州學(xué)院《中國古代文學(xué)史(3)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧省大石橋市2024-2025學(xué)年高中畢業(yè)班第一次調(diào)研測試生物試題含解析
- 南京信息職業(yè)技術(shù)學(xué)院《數(shù)值計(jì)算》2023-2024學(xué)年第一學(xué)期期末試卷
- 山西省懷仁市重點(diǎn)達(dá)標(biāo)名校2024-2025學(xué)年初三下期中考試綜合試題含解析
- 山西省忻州市定襄中學(xué)2025屆初三年級(jí)七校聯(lián)考物理試題含解析
- 《中型餐飲企業(yè)組織結(jié)構(gòu)》課件
- 2025年浙江紹興諸暨新城投資開發(fā)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年福建省福州市電子信息集團(tuán)有限公司招聘30人筆試參考題庫附帶答案詳解
- 校園景觀場所解讀課件
- 北師版九年級(jí)數(shù)學(xué)上冊(cè)-第1章-特殊平行四邊形中的旋轉(zhuǎn)、最值、動(dòng)點(diǎn)問題-專題訓(xùn)練-(含答案)
- 2023山東能源集團(tuán)建工集團(tuán)有限公司機(jī)關(guān)部分崗位公開招聘8人筆試參考題庫附帶答案詳解
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 英語試卷(含答案)
- NB/T 11446-2023煤礦連采連充技術(shù)要求
- 派力肯安全防護(hù)箱
- T∕CCES 23-2021 裝配式多層混凝土墻板建筑技術(shù)規(guī)程
- 教案 - 種子生活力測定
評(píng)論
0/150
提交評(píng)論