C語言程序設(shè)計課件第3章課件_第1頁
C語言程序設(shè)計課件第3章課件_第2頁
C語言程序設(shè)計課件第3章課件_第3頁
C語言程序設(shè)計課件第3章課件_第4頁
C語言程序設(shè)計課件第3章課件_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-1-271高級語言程序設(shè)計 2022-1-272第三章 表達式與運算符主講主講: : 計算機學(xué)院計算機學(xué)院 朱立華朱立華n表達式體現(xiàn)對數(shù)據(jù)的處理,由運算符和運算對象組成表達式體現(xiàn)對數(shù)據(jù)的處理,由運算符和運算對象組成 n掌握每種運算符的以下知識:掌握每種運算符的以下知識:對運算對象的要求對運算對象的要求運算符的結(jié)合性運算符的結(jié)合性運算符的優(yōu)先級運算符的優(yōu)先級運算結(jié)果的特性運算結(jié)果的特性n有多種運算符的復(fù)雜表達式的計算順序及計算結(jié)果有多種運算符的復(fù)雜表達式的計算順序及計算結(jié)果n數(shù)據(jù)類型的自動轉(zhuǎn)換規(guī)則及強制轉(zhuǎn)換的方法數(shù)據(jù)類型的自動轉(zhuǎn)換規(guī)則及強制轉(zhuǎn)換的方法n表達式實現(xiàn)對數(shù)據(jù)的處理,每個表達式

2、都有唯一的值表達式實現(xiàn)對數(shù)據(jù)的處理,每個表達式都有唯一的值n表達式由表達式由運算對象運算對象和和運算符運算符組成組成n運算對象的種類:運算對象的種類:常量、變量、有返回值的函數(shù)調(diào)用常量、變量、有返回值的函數(shù)調(diào)用、其它表達式其它表達式n例:例:2 a rand() 2 a rand() (2+a)2+a)* *rand( )rand( )n運算符:共運算符:共3434種,分為種,分為1515個不同的優(yōu)先級個不同的優(yōu)先級可以理解成是不帶運算符的最簡單表達式可以理解成是不帶運算符的最簡單表達式常量表達式常量表達式變量表達式變量表達式函數(shù)表達式函數(shù)表達式帶運算符的表達式帶運算符的表達式n每個表達式都有

3、每個表達式都有唯一確定的值唯一確定的值, ,表達式不是左值就是表達式不是左值就是右值右值 n右值:右值:只能出現(xiàn)在賦值號(只能出現(xiàn)在賦值號(= =)右邊的表達式)右邊的表達式 n左值:左值:不是右值的表達式就是左值不是右值的表達式就是左值n左值與右值的關(guān)系:左值與右值的關(guān)系:右值只能出現(xiàn)在賦值號的右邊;右值只能出現(xiàn)在賦值號的右邊;而左值既可以出現(xiàn)在賦值號的左邊,又可以出現(xiàn)在賦而左值既可以出現(xiàn)在賦值號的左邊,又可以出現(xiàn)在賦值號的右邊。左值可以取地址值號的右邊。左值可以取地址, ,右值不可以取地址右值不可以取地址. .n例:例: 2 a rand() (2+a)*rand( ) a=b常量表達式只

4、能作為右值常量表達式只能作為右值例:例:a=a=2 2;(;(右值右值) )變量表達式為左值變量表達式為左值, ,既可在賦值號左邊也可以既可在賦值號左邊也可以在右邊在右邊, ,例:例:a a=5;(=5;(左邊左邊) b=b=a a;(;(右邊右邊)此函數(shù)表達式為右值此函數(shù)表達式為右值例:例:a a=rand( )=rand( )右值右值)此表達式只能作為右值此表達式只能作為右值例:例:b=(2+a)*rand( ); (右值右值) )賦值表達式只能作為右值賦值表達式只能作為右值例:例:c=a=b;(右值右值) (a=b)=c;(出錯出錯)算術(shù)運算符算術(shù)運算符主要完成數(shù)值計算問題,具體如下表所

5、列主要完成數(shù)值計算問題,具體如下表所列運算符運算符優(yōu)先優(yōu)先級級結(jié)合結(jié)合方向方向?qū)\算對象對運算對象的要求的要求運算結(jié)果特性運算結(jié)果特性特殊說明特殊說明- 取負取負2 2從右從右到左到左整、實型值整、實型值運算對象的相運算對象的相反數(shù)反數(shù)單目運算符單目運算符+ 自增自增整整,實實,字符字符,指針型指針型變量變量結(jié)果與變量的結(jié)果與變量的值可能一致值可能一致單目單目,分為前分為前+ 后后+- 自減自減單目單目,分為前分為前+ 后后- -* 乘乘3 3從左從左到右到右允許整型與允許整型與實型數(shù)混合實型數(shù)混合只要有只要有1個實對個實對象結(jié)果實型,象結(jié)果實型,否則整型結(jié)果否則整型結(jié)果/ 除除兩個整數(shù)相除只

6、能兩個整數(shù)相除只能得到得到整數(shù)商整數(shù)商% 取余取余僅限整型數(shù)僅限整型數(shù)整除的余數(shù)整除的余數(shù)正負號同第正負號同第1數(shù)數(shù)+ 加加4 4從左從左到右到右允許整型與允許整型與實型數(shù)混合實型數(shù)混合只要有只要有1個實對個實對象結(jié)果實型,象結(jié)果實型,否則整型結(jié)果否則整型結(jié)果- 減減例:例:int a=3,b,c; a+的表達式結(jié)果是的表達式結(jié)果是3,變量,變量a的值是的值是4;+a的表達式結(jié)果是的表達式結(jié)果是4,變量,變量a的值是的值是4;因此因此,c=a+執(zhí)行后,執(zhí)行后, c的值是的值是3,a的值是的值是4 b=+a執(zhí)行后,執(zhí)行后,b的值是的值是4,a的值也是的值也是4例:例:int a=3; -a結(jié)果為

7、結(jié)果為-3,但是變量,但是變量a的值仍為的值仍為3-2.45是是2.45的相反數(shù)的相反數(shù)例:例:int a=3,b,c; a-的表達式結(jié)果是的表達式結(jié)果是3,變量,變量a的值是的值是2;-a的表達式結(jié)果是的表達式結(jié)果是2,變量,變量a的值是的值是2;因此因此,c=a-執(zhí)行后,執(zhí)行后, c的值是的值是3,a的值是的值是2 b=-a執(zhí)行后,執(zhí)行后,b的值是的值是2,a的值也是的值也是2例:例:int a=27,b=5,c; 表達式表達式a/b結(jié)果是結(jié)果是5,而不是,而不是5.4表達式表達式27.0/b結(jié)果是結(jié)果是5.4表達式表達式27.0/5.0結(jié)果是結(jié)果是5.4例:例:int a=27,b=5,

8、c; 表達式表達式a%b結(jié)果是結(jié)果是2,表達式表達式-a%b結(jié)果是結(jié)果是-2 表達式表達式27.0%b是錯誤的是錯誤的例:例:表達式表達式2+3結(jié)果是結(jié)果是5表達式表達式2+3.0結(jié)果是結(jié)果是5.0表達式表達式2.0+3.0結(jié)果是結(jié)果是5.0例:例:表達式表達式3-2結(jié)果是結(jié)果是1表達式表達式3.0-2結(jié)果是結(jié)果是1.0表達式表達式3.0-2.0結(jié)果是結(jié)果是1.0n程序程序3.1 3.1 賦值表達式及算術(shù)運算符示例賦值表達式及算術(shù)運算符示例n#includen#include /包含隨機函數(shù)包含隨機函數(shù)rand的聲明的聲明nint main( )n int a=5,b=6,c=7;nprint

9、f(“%dn”,rand(); /顯示隨機數(shù)顯示隨機數(shù)nprint(%dn,a*(b+c)/2-2); /顯示算術(shù)表達式的值顯示算術(shù)表達式的值nprintf(%dn,a=b); /顯示賦值表達式即顯示賦值表達式即a的值的值nb=rand()%10; /混合表達式賦混合表達式賦0至至9之間的之間的1個隨機數(shù)個隨機數(shù)nprintf(“%dn”,c=a=b); /顯示賦值表達式的值即顯示賦值表達式的值即c的值的值n return 0;n413067動動態(tài)態(tài)演示演示過過程程關(guān)系運算符關(guān)系運算符主要完成表達式間的比較,比較的結(jié)果主要完成表達式間的比較,比較的結(jié)果非真即假非真即假,C C語語言中言中無邏輯

10、類型無邏輯類型,故,故用用1 1表示表示真真,0 0表示表示假假任何類型的值,只要任何類型的值,只要不等于不等于0 0,在需要作出真假判斷的場合就代表,在需要作出真假判斷的場合就代表邏輯真邏輯真。 運算符運算符優(yōu)先級優(yōu)先級結(jié)合結(jié)合方向方向?qū)\算對象的要求對運算對象的要求運算結(jié)果特性運算結(jié)果特性 大于大于6 6從左從左到右到右允許允許不同類型不同類型的值混合的值混合計算,運算對象計算,運算對象非非0就就表示表示真真值,值,0表示表示假假,當當類型不一致類型不一致時,會自時,會自動進行動進行類型轉(zhuǎn)換類型轉(zhuǎn)換為同一為同一種類型種類型 關(guān)系表達式的最終結(jié)關(guān)系表達式的最終結(jié)果只有兩個值:果只有兩個值:1

11、或或0,1表示真,表示真,0表示假表示假用用括號括號可以可以提升優(yōu)先提升優(yōu)先級,級,有時為了更清晰有時為了更清晰= 大于等于大于等于= 小于等于小于等于= 相等相等7 7!= 不相等不相等結(jié)論結(jié)論: :關(guān)系運算符的優(yōu)先級關(guān)系運算符的優(yōu)先級低于低于算術(shù)運算符算術(shù)運算符例:例:c(a+b)c(a+b) 可以可以寫成:寫成: ca+bcb)!=c(ab)!=c 可以寫可以寫成:成: ab!=cab!=c例:例:a=(bc)可以寫可以寫成:成: a=b=(a+b)用括號表達式的含用括號表達式的含義清楚義清楚n程序程序3.2 3.2 關(guān)系運算示例關(guān)系運算示例n#includen#include /包含隨

12、機函數(shù)包含隨機函數(shù)rand的聲明的聲明nint main( )n n int a=rand()%10; /產(chǎn)生產(chǎn)生3個個09的隨機數(shù)的隨機數(shù) n int b=rand()%10;n int c=rand()%10,d;n printf(“a=%d,b=%d,c=%dn”,a,b,c); /輸出輸出n printf(%dn,c=(a+b);n return 0;na=1,b=7,c=410rand( )函數(shù)產(chǎn)生一個非負隨機整數(shù),函數(shù)產(chǎn)生一個非負隨機整數(shù),產(chǎn)生一個產(chǎn)生一個a,b范圍的非負隨機整數(shù)的方范圍的非負隨機整數(shù)的方法是:法是:a+rand( )%(b-a+1) 動動態(tài)態(tài)演示演示過過程程邏輯運

13、算符邏輯運算符主要完成更復(fù)雜的條件判斷主要完成更復(fù)雜的條件判斷邏輯表達式的邏輯表達式的最終結(jié)果最終結(jié)果只有兩個:只有兩個:1 1表示表示真,真,0 0表示表示假假。任何類型的值,只要任何類型的值,只要不等于不等于0 0,在需要作出真假判斷的場合就代表在需要作出真假判斷的場合就代表邏輯真邏輯真,0 0代表代表邏輯假邏輯假運算符運算符優(yōu)先級優(yōu)先級 結(jié)合結(jié)合方向方向?qū)\算對象的對運算對象的要求要求運算結(jié)果特運算結(jié)果特性性說明說明! 邏輯非邏輯非2從右從右至左至左允許允許不同類型不同類型的值混合計算,的值混合計算,運算對象運算對象非非0就表示就表示真真值,值,0表示表示假假一定是整型,一定是整型,并且

14、只有兩并且只有兩個值個值1和和0,分別表示分別表示真真和假和假 單目運算符單目運算符,置,置反反運算對象真假運算對象真假& 邏輯與邏輯與11從左從左至右至右兩個對象兩個對象都為真都為真結(jié)果才為真結(jié)果才為真| 邏輯或邏輯或12兩個對象只要有兩個對象只要有1 1個真?zhèn)€真結(jié)果就為真結(jié)果就為真幾種運算符的幾種運算符的優(yōu)先級優(yōu)先級: :單目單目-算術(shù)算術(shù)-關(guān)系關(guān)系-邏輯與邏輯與-邏輯或邏輯或例:例:!A 結(jié)果為結(jié)果為0 0,!(2+35)!(2+35)結(jié)果為結(jié)果為1 1例:例:(ab)&(xy) 可可以寫成:以寫成: ab&x=A&ch=Z,而不是:而不是: A=ch=ZA=chb)&(c=c*2) 0

15、,c的值仍為的值仍為7 短路短路,因為因為ab的結(jié)果為的結(jié)果為0,故,故c=c*2不執(zhí)行不執(zhí)行 (ab)&(c=c*2) 1,c的值為的值為14 不短路不短路,因為,因為ab的結(jié)果為的結(jié)果為1,故,故c=c*2執(zhí)行執(zhí)行 (ab)&(c=c-7) 0,c的值為的值為0 不短路不短路,因為,因為ab的結(jié)果為的結(jié)果為1,故,故c=c-7執(zhí)行執(zhí)行(ab) )|(c=c*5) 1,c的值仍為的值仍為7 短路短路,因為,因為ab)|(c=c*5) 1,c的值為的值為35 不短路不短路,因為,因為ab的結(jié)果為的結(jié)果為0,故,故c=c*5執(zhí)行執(zhí)行 (ab)|(c=c-7)0,c的值為的值為0 不短路不短路,因

16、為,因為ab的結(jié)果為的結(jié)果為0,故,故c=c-7執(zhí)行執(zhí)行 假設(shè)假設(shè)已有定義:已有定義:int a=5,b=6,c=7; 下表給出了下表給出了&和和|的短路功能的短路功能練習(xí):練習(xí):設(shè)有語句:設(shè)有語句:int a = 3 , b =5, m=0; 則執(zhí)行語句則執(zhí)行語句a+b8&(m = a=3)后,后,m m的值為的值為_,_,整個表達式的值為整個表達式的值為_n程序程序3.3 3.3 邏輯運算示例邏輯運算示例 n#includen#include /包含隨機函數(shù)包含隨機函數(shù)rand的聲明的聲明nint main( )n n int a=1+rand()%50, b=1+rand()%50;n

17、int x=rand()/a, y=rand()/b;n printf(%d,%d,%dn,a,b,ab);n printf(%d,%d,%dn,x,y,xy);n printf(%dn,(ab)&(xy);n printf(%dn,(a=b)|(x=y);n printf(%dn,(!a)|(a!=b);n return 0;n42,18,042,18,0150,1472,1150,1472,10 00 01 1 rand( )函數(shù)產(chǎn)生一個非負隨機整數(shù),函數(shù)產(chǎn)生一個非負隨機整數(shù),產(chǎn)生一個產(chǎn)生一個a,b范圍的非負隨機整數(shù)的方范圍的非負隨機整數(shù)的方法是:法是:a+rand( )%(b-a+1)

18、動動態(tài)態(tài)演示演示過過程程n在算術(shù)運算符中已提到單目運算符在算術(shù)運算符中已提到單目運算符自增自增(+)(+)和和自減自減(-)(-)n自增自減運算符的幾個特殊性:自增自減運算符的幾個特殊性: (1)(1)這兩種運算符專門用于改變一個變量自身的值這兩種運算符專門用于改變一個變量自身的值( (增或減增或減1)1),因此實質(zhì)上具有因此實質(zhì)上具有賦值賦值功能,運算對象功能,運算對象只能是一個變量只能是一個變量。 (2)(2)對變量變化的時機取決于對變量變化的時機取決于運算符與運算對象的相對位置運算符與運算對象的相對位置,有有前后之分前后之分,+a+a和和aa為為前前+(-)+(-),a+a+和和aa為為

19、后后+(-)+(-) (3)(3)前前+或前或前是指是指先改變變量的值先改變變量的值,再用變化后的值參加運,再用變化后的值參加運算;算;后后+或后或后是指先用未變化過的變量的值參加表達式的是指先用未變化過的變量的值參加表達式的運算,運算,最后再改變變量的值。最后再改變變量的值。共同點就是共同點就是變量值肯定改變變量值肯定改變 (4)(4)需要區(qū)分需要區(qū)分表達式的值和變量的值,表達式的值和變量的值,大部分情況下不是一回大部分情況下不是一回事,但是如果事,但是如果僅僅改變變量而不用它運算,則前后無區(qū)別僅僅改變變量而不用它運算,則前后無區(qū)別表達式表達式等價表示等價表示 表達式的值表達式的值變量的值變

20、量的值x=i+; x=i; i=i+1; 2 2i i=3 3x=+j; j=j+1; x=j; 5j=5x=i-; x=i; i=i-1; 2i=1x=-j; j=j-1; x=j; 3j=3x=(i+)+(+j); j=j+1; x=i+j; i=i+1; 7i=3,j=5x=(i-)+(-j);j=j-1; x=i+j; i=i-1; 5i=1,j=3x=x+i+; x=x+i; i=i+1; 10i=3x=x+i; x=x+ i; x=x+1; 11i=2+(+i); i=i+1; i=i+1; 4i=4i+; 或或 +i; i=i+1; 3i=3假設(shè)假設(shè)已有定義:已有定義:int x

21、=8,i=2,j=4; 下表列出了下表列出了有自增自減運算符有自增自減運算符的表的表達式的值及變量的值達式的值及變量的值n程序程序3.4 3.4 自增自減運算示例自增自減運算示例 n#includenint main( )n int i=5,j=6,k;n i+; +j; /相當于相當于i=i+1;j=j+1;n printf(i=%d,j=%dn,i,j);n i-; -j; /相當于相當于i=i-1;j=j-1;n printf(i=%d,j=%dn,i,j);n k=(i+)+(+j); /相當于相當于j=j+1;k=i+j; i=i+1;n printf(i=%d,j=%d,k=%dn

22、,i,j,k);n k=(i-)+(-j); /相當于相當于j=j-1;k=i+j; i=i-1;n printf(i=%d,j=%d,k=%dn,i,j,k); n return 0;ni=6,j=7i=6,j=7i=5,j=6i=5,j=6i=6,j=7,k=12i=6,j=7,k=12i=5,j=6,k=12i=5,j=6,k=12 動動態(tài)態(tài)演示演示過過程程n位運算位運算是對字節(jié)或字內(nèi)的是對字節(jié)或字內(nèi)的二進制數(shù)位二進制數(shù)位進行測試、抽取、設(shè)置或進行測試、抽取、設(shè)置或移位等操作,是移位等操作,是C C語言語言可對硬件編程可對硬件編程的體現(xiàn)。運算對象只能是的體現(xiàn)。運算對象只能是intint類

23、型類型(包括(包括charchar類型類型) )nC C中提供中提供6 6種位運算符,其中的種位運算符,其中的 (按位取反為單目運算符按位取反為單目運算符),其),其余余5 5個為雙目運算符,具體見下一頁個為雙目運算符,具體見下一頁n多種運算符的優(yōu)先級:多種運算符的優(yōu)先級:n單目單目-算術(shù)乘除取余算術(shù)乘除取余-算術(shù)加減算術(shù)加減-移位移位-關(guān)系關(guān)系-按位與按位與-按位按位異或異或-按位或按位或-邏輯與邏輯與-邏輯或邏輯或運算符運算符優(yōu)先優(yōu)先級級結(jié)合結(jié)合方向方向運算基本方法運算基本方法特殊用途特殊用途特殊說特殊說明明 按位取反按位取反 2從右從右至左至左對運算對象每對運算對象每1個二進個二進制位制

24、位01取反取反按位取反運算經(jīng)常按位取反運算經(jīng)常被用于被用于加密和解密加密和解密 單目單目運運算符算符 右移位右移位5第第1操作數(shù)的每位按操作數(shù)的每位按向向左左依次平移第依次平移第2操作數(shù)操作數(shù)指定的位數(shù)指定的位數(shù)可快速地實現(xiàn)整數(shù)可快速地實現(xiàn)整數(shù)的的除法除法運算運算 ,有利,有利于算法的于算法的硬件實現(xiàn)硬件實現(xiàn) 相當于相當于除除2的的幾次方幾次方& 按位與按位與8兩個對象對應(yīng)二進制兩個對象對應(yīng)二進制位均為位均為1,本位才為本位才為1可對字節(jié)中某一或可對字節(jié)中某一或幾個幾個二進制位清二進制位清0 按位異或按位異或 9兩個對象對應(yīng)二進制兩個對象對應(yīng)二進制位相同為位相同為0相異為相異為1可判斷兩個數(shù)對

25、應(yīng)可判斷兩個數(shù)對應(yīng)二進制位的同或異二進制位的同或異 | 按位或按位或10兩個對象對應(yīng)二進制兩個對象對應(yīng)二進制位有位有1個為個為1則結(jié)果為則結(jié)果為1可對字節(jié)中某一或可對字節(jié)中某一或幾個幾個二進制位置二進制位置1 00000101 11111010152 =3 00001111 0 00 0相當于相當于15/215/22 2 00001101& 00000011 00000001 00000011 00000011 00000101 00000101 00000110 00000110 | 00111111 10111111n條件運算符條件運算符是是C C語言中語言中唯一唯一的的1 1個個三目運算

26、符三目運算符n其格式為其格式為:表達式:表達式1 1?表達式表達式2 2:表達式表達式3 3n計算方法及運算結(jié)果:計算方法及運算結(jié)果:先先求表達式求表達式1 1得到得到非非0 0表示表示真真,得到,得到0 0表示表示假假。如果是。如果是真真,則條件表達式的值等于,則條件表達式的值等于表達式表達式2 2的值的值( (此時此時表達表達式式3 3不計算不計算) );如果是假,則條件表達式的值等于表達式;如果是假,則條件表達式的值等于表達式3 3的值的值( (此時此時表達式表達式2 2不計算不計算) )。 n優(yōu)先級優(yōu)先級:1313級,僅高于級,僅高于逗號和賦值運算符逗號和賦值運算符的優(yōu)先級的優(yōu)先級n結(jié)

27、合方向結(jié)合方向:從右至左從右至左,當有條件運算符,當有條件運算符嵌套嵌套時,按照從時,按照從右至左右至左的順序結(jié)合。先計算第一對象的順序結(jié)合。先計算第一對象, ,根據(jù)結(jié)果再決定后面的運算根據(jù)結(jié)果再決定后面的運算n對運算對象的要求對運算對象的要求:可以是任何類型的表達式:可以是任何類型的表達式n例例:int a=1,b=2,x; 則條件運算表達式:則條件運算表達式:ab?(x=6):(x=7)的值是的值是?n解析解析: 以上條件表達式根據(jù)右結(jié)合原則實際上是以上條件表達式根據(jù)右結(jié)合原則實際上是: ab?(x=6):(x=7)n計算順序計算順序:先計算整個條件表達式的第一對象先計算整個條件表達式的第

28、一對象ab,結(jié)果為真結(jié)果為真,則則計算第二對象計算第二對象x=5,后面紅色括號內(nèi)的第三對象不再計算后面紅色括號內(nèi)的第三對象不再計算,因此整因此整個表達式的結(jié)果為個表達式的結(jié)果為5,變量變量x的值也是的值也是5.n注意注意: 結(jié)合方式與運算順序并不是一回事結(jié)合方式與運算順序并不是一回事!5 5n程序程序3.5 3.5 條件運算示例條件運算示例 n#includen#includenint main( )n n int a=rand()%10, b=rand()%10,c,d;n c=ab?a:b;n d=ab?a:b;n printf(a=%d,b=%dn,a,b);n printf(c=%d,

29、d=%dn,c,d); n return 0;na=1,b=7a=1,b=7c=7,d=1c=7,d=1動動態(tài)態(tài)演示演示過過程程n賦值賦值運算符運算符是是C C語言中語言中使變量獲得值使變量獲得值的運算符,有兩大類的運算符,有兩大類復(fù)合賦復(fù)合賦值運算符值運算符 : (1)(1)雙目算術(shù)運算與賦值運算符一起,構(gòu)成雙目算術(shù)運算與賦值運算符一起,構(gòu)成算術(shù)復(fù)合賦值運算符算術(shù)復(fù)合賦值運算符 (2)(2)雙目位運算與賦值運算符一起,構(gòu)成雙目位運算與賦值運算符一起,構(gòu)成位復(fù)合賦值運算符位復(fù)合賦值運算符n運算對象運算對象:左邊:左邊只能是變量只能是變量,右邊右邊是一個是一個表達式表達式n計算方法及運算結(jié)果:計

30、算方法及運算結(jié)果:表示給該表示給該變量空間賦值變量空間賦值或修改該變量空或修改該變量空間中的值,此時間中的值,此時變量變量也稱為也稱為左值左值。賦值運算符右邊是一個表達。賦值運算符右邊是一個表達式,其類型最好是與左值式,其類型最好是與左值類型一致類型一致, , 不一致時自動類型轉(zhuǎn)換不一致時自動類型轉(zhuǎn)換. .n優(yōu)先級優(yōu)先級:1414級,僅高于級,僅高于逗號逗號的優(yōu)先級的優(yōu)先級n結(jié)合方向結(jié)合方向:從右至左從右至左, ,在在連續(xù)連續(xù)賦值時,按賦值時,按從右至左從右至左的順序的順序依次依次 n例例: :設(shè)設(shè)int a=1,b=2,c=5; int a=1,b=2,c=5; 計算計算 a=b=c a=b

31、=c 和和 (a=b)=c(a=b)=c先計算先計算b=cb=c,b b獲得值獲得值5 5,該賦值表達式,該賦值表達式結(jié)果結(jié)果為為b b;此結(jié)果作為賦值表達式;此結(jié)果作為賦值表達式a=b=ca=b=c的的右右值賦給值賦給a a,因此,因此a=5,a=5,最終最終a,b,ca,b,c的值的值均為均為5 5 錯誤錯誤!a=b!a=b是表達式是表達式, ,不可以作為左值使用不可以作為左值使用! !將復(fù)合賦值運算符轉(zhuǎn)換為等效的普通賦值運算符按以下將復(fù)合賦值運算符轉(zhuǎn)換為等效的普通賦值運算符按以下3 3步:步:( (1) 1)將原復(fù)合賦值運算符將原復(fù)合賦值運算符右邊右邊的表達式的表達式加圓括號加圓括號作為

32、作為1 1個個整體整體;( (2)2)將原復(fù)合賦值運算符將原復(fù)合賦值運算符左邊左邊的的變量名連同那個算術(shù)運算符或變量名連同那個算術(shù)運算符或位運算符位運算符一起一起移到移到賦值賦值號的右邊號的右邊,作為,作為賦值賦值號右邊的號右邊的第一第一部分部分置于原復(fù)合賦值運算符右邊整體之前;置于原復(fù)合賦值運算符右邊整體之前;( (3)3)將原復(fù)合賦值運算符將原復(fù)合賦值運算符左邊的變量名留下左邊的變量名留下,直接跟賦值號直接跟賦值號,去掉原來的算術(shù)運算符或位運算符。去掉原來的算術(shù)運算符或位運算符。例:例:a a* *=b+5 =a=a=b+5 =a=a* *( (b+5b+5) )n程序程序3.6 3.6

33、賦值及復(fù)合賦值示例賦值及復(fù)合賦值示例 n#includenint main( )n n int a,b,c;n a=b=c=7;/相當于相當于c=7;b=c;a=bn c+=a+;/相當于相當于c=c+a; a+;n printf(a=%d,c=%dn,a,c);n c%=+a;/相當于相當于+a; c=c%a;n printf(a=%d,c=%dn,a,c);n c*=a-;/相當于相當于c=c*a; a-;n printf(a=%d,c=%dn,a,c);n return 0;na=8,c=14a=9,c=5a=8,c=45動動態(tài)態(tài)演示演示過過程程n逗號逗號不僅是不僅是C C語言源程序中的

34、一種語言源程序中的一種分隔符,分隔符,還是一種還是一種運算符運算符。n逗號表達式的形式:逗號表達式的形式:表達式表達式1 1,表達式,表達式2 2,,表達式表達式n nn運算對象運算對象:可以是任何類型的:可以是任何類型的表達式表達式n計算方法及運算結(jié)果:計算方法及運算結(jié)果:按按從左到右從左到右的順序依次計算各表達式的的順序依次計算各表達式的值,值,最后一個表達式最后一個表達式n n的結(jié)果的結(jié)果就是整個逗號表達式的結(jié)果就是整個逗號表達式的結(jié)果. .n優(yōu)先級優(yōu)先級:1515級,優(yōu)先級最低,通常級,優(yōu)先級最低,通常通過加括號通過加括號提升其優(yōu)先級提升其優(yōu)先級n結(jié)合方向結(jié)合方向:從左至右從左至右 n

35、例例: :設(shè)所有變量均為設(shè)所有變量均為intint型,計算型,計算 x=a=3,6x=a=3,6* *a a 和和 x=(a=3,6x=(a=3,6* *a)a) 這是一個這是一個逗號逗號表達式,先計算賦值表達式表達式,先計算賦值表達式x=a=3x=a=3,該表達式的結(jié)果為,該表達式的結(jié)果為x x,變量變量x x和和a a的的值均為值均為3 3,再計算第二個表達式,再計算第二個表達式6 6* *a a結(jié)果為結(jié)果為1818,因此逗號表達式最后結(jié)果為,因此逗號表達式最后結(jié)果為1818 這是一個這是一個賦值賦值表達式,先計算圓括號內(nèi)逗號表表達式,先計算圓括號內(nèi)逗號表達達a=3,6a=3,6* *a

36、a ,該表達式的結(jié)果為,該表達式的結(jié)果為1818,再將該,再將該結(jié)果賦值給變量結(jié)果賦值給變量x x,因此賦值表達式最后結(jié),因此賦值表達式最后結(jié)果為果為1818,變量,變量a a的值為的值為3 3,x x的值為的值為1818 C C語言中的括號也是運算符,處于第一優(yōu)先語言中的括號也是運算符,處于第一優(yōu)先級,用于提升其他運算符的優(yōu)先級,及級,用于提升其他運算符的優(yōu)先級,及作為函數(shù)參數(shù)表的起止標記作為函數(shù)參數(shù)表的起止標記n不同類型不同類型進行混合運算需要先轉(zhuǎn)換為進行混合運算需要先轉(zhuǎn)換為同一種類型同一種類型再計算,這個類再計算,這個類型稱為型稱為目標類型目標類型。C C語言提供了語言提供了3 3種種方

37、式的方式的類型轉(zhuǎn)換類型轉(zhuǎn)換。n(1)(1)不同類型數(shù)據(jù)混合運算時,不同類型數(shù)據(jù)混合運算時,由編譯器自動完成由編譯器自動完成隱式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換 float轉(zhuǎn)為轉(zhuǎn)為double 短存儲型轉(zhuǎn)為長存儲型短存儲型轉(zhuǎn)為長存儲型 有符號數(shù)據(jù)轉(zhuǎn)為無符號數(shù)據(jù)有符號數(shù)據(jù)轉(zhuǎn)為無符號數(shù)據(jù) 整型轉(zhuǎn)為浮點型整型轉(zhuǎn)為浮點型 n(2)(2)強制性數(shù)據(jù)類型轉(zhuǎn)換強制性數(shù)據(jù)類型轉(zhuǎn)換:根據(jù)用戶需要用語句進行轉(zhuǎn)換,形式:根據(jù)用戶需要用語句進行轉(zhuǎn)換,形式 (目標類型名目標類型名)待轉(zhuǎn)換表達式)待轉(zhuǎn)換表達式 n例例: : int a=(int)3.14; int a=(int)3.14; /a=3/a=3 n (float) (float)a a/4 = 3.0/4/4 = 3.0/4結(jié)果為結(jié)果為0.750.75n (float)( (float)(a/4a/4) = 3/4) = 3/4結(jié)果為結(jié)果為0,0,然后然后float(0)float(0),結(jié)果,結(jié)果0.00.0n 變量變量a a的類型仍為的類型仍為intint型。型。強制類型轉(zhuǎn)換不

溫馨提示

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

評論

0/150

提交評論