C語言課件第03章_第1頁
C語言課件第03章_第2頁
C語言課件第03章_第3頁
C語言課件第03章_第4頁
C語言課件第03章_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 運算符和表達式3.1 表 達 式3.2 運算符及表達式3.3 運算符優(yōu)先級和結(jié)合性第3章 運算符和表達式3.1 表 達 式3.1 表 達 式C語言的表達式分為基本表達式和復(fù)雜表達式?;颈磉_式是由以下單項構(gòu)成的,即:標識符、常量、字符串字面量和用圓括號括起來的表達式。將基本表達式通過運算符連接在一起,就構(gòu)成復(fù)雜表達式。例如:28,ab,(xy)/a等。由表達式還可組成更大的表達式。例如: x(ab) 103.1 表 達 式C語言的表達式分為基本表達式和復(fù)3.2 運算符及表達式運算符是在一個數(shù)學(xué)運算中表示相應(yīng)運算動作的一種符號。運算符所作用的對象稱作運算分量。3.2 運算符及表達式運算符

2、是在一個數(shù)學(xué)運算中表示相應(yīng)3.2.1 算術(shù)運算符和算術(shù)表達式在C語言中,基本算術(shù)運算符有5個,它們是:(加) (減) *(乘) /(除) (取模)算術(shù)運算符和運算分量組成的求值序列稱作算術(shù)表達式。要注意運算符“/” 和 “” 的區(qū)別。運算符 “/” 可以作用于算術(shù)類型。運算符“”卻只能作用于整型量。a/b表示兩個整數(shù)進行整除,其結(jié)果是舍棄余數(shù)后所得到的商值。是取整數(shù)除法的余數(shù),而不管商的值是多少。3.2.1 算術(shù)運算符和算術(shù)表達式例3-1:算術(shù)運算符應(yīng)用示例。/* arithmetic practice */#include void main() int a99; int b5; int c

3、11; int d3; int result; resultab;例3-1:算術(shù)運算符應(yīng)用示例。 printf(abdn,result); resultb*c; printf(b*cdn,result); resulta/b; printf(a/bdn,result); resultab; printf(abdn,result); resultadb/c; printf(adb/cdn,result); printf(abdn,result);輸出結(jié)果是:ab94b*c55a/b19ab4adb/c0輸出結(jié)果是:例3-2:計算有多個算術(shù)運算符的算術(shù)表達式。#include void main(

4、) int x,a3; float y; x2025/5*2; printf(1)xdn,x); x25/2*2; printf(2)xdn,x); xa4*56;例3-2:計算有多個算術(shù)運算符的算術(shù)表達式。 printf(3)xdn,x); xa456; printf(4)xdn,x); x3*46/5; printf(5)xdn,x); x(76)5/2; printf(6)xdn,x); y25.0/2.0*2.0; printf(7)yfn,y); printf(3)xdn,x);輸出結(jié)果是:(1)x30 (2)x24(3)x11(4)x1(5)x0(6)x1(7)y25.000000

5、輸出結(jié)果是:3.2.2 賦值運算符和賦值表達式賦值運算符“”,其簡單的使用形式是: 變量表達式 這種形式的整個表達式稱作賦值表達式。在使用賦值表達式時應(yīng)注意以下幾點: 在賦值運算符左邊的量(通常稱為左值)必須是變量,不能是常量或用上述運算符結(jié)合起來的表達式。 int a,b; ab;b8;是正確的賦值形式; 6a;ab14;等形式都是不對的。3.2.2 賦值運算符和賦值表達式 賦值運算可連續(xù)進行。例如, abc0 a(b(c0) 賦值運算符的優(yōu)先級比上述運算符的優(yōu)先級都低。 a(b9)*(c7) 賦值表達式的值等于右邊表達式的值,而結(jié)果的類型由左邊變量的類型決定。 賦值運算可連續(xù)進行。例如,

6、除了上述基本的賦值運算符之外,C語言中還提供了另外10個賦值運算符,它們是: * & 這些運算符是把“運算”和“賦值”兩個動作結(jié)合在一起,往往把它們稱為復(fù)合賦值運算符。 x 2其等效形式是:xx2。表達式 x *y5的等效形式是:xx*(y5)。而表達式 x y10的等效形式是:xx(y10)復(fù)合賦值運算符右邊的表達式應(yīng)作為一個整體對待。 除了上述基本的賦值運算符之外,C語言中還提供了另外13.2.3 增量運算符和增量表達式自增運算符“”和自減運算符“”。它們都是單目運算符。當(dāng)出現(xiàn)在運算分量的前面時,例如i、i,就稱之為前綴運算符;當(dāng)出現(xiàn)在運算分量的后面時,例如x、y,就稱之為后綴運算符。由增

7、量運算符和運算分量構(gòu)成的表達式稱為增量表達式。1自增運算符 n這個表達式執(zhí)行后,n的值增1。還可采用“后綴加”的形式: n但必須指出,并非在任何情況下二者都等價。3.2.3 增量運算符和增量表達式例3-3:顯示前綴加和后綴加的區(qū)別。#include void main() int a,b,c; a9; ba;例3-3:顯示前綴加和后綴加的區(qū)別。 printf( (1) ad *bdn,a,b); a9; ca; printf( (2) ad *cdn,a,c);運行后輸出的結(jié)果是:(1)a10*b10(2)a10*c9 printf( (1) ad *bdn,執(zhí)行ba,這條語句等價于下述兩條語

8、句: ca1; ba;而改為后綴加形式,即:ca,這條語句等價于下述兩條語句: ca; aa1;簡而言之,在表達式中出現(xiàn)前綴加的情況下,前綴加所作用的運算分量值先增1,然后進行其他級別較低的運算;而在表達式中出現(xiàn)后綴加的情況下,先以其運算分量的當(dāng)前值參與其他級別較低的運算,最后該運算分量值才增1。執(zhí)行ba,這條語句等價于下述兩條語句:例3-4:復(fù)合賦值符和自增運算符“”的應(yīng)用。 Void main( ) int x2,y,z; x *32; printf(1)xdn,x); x *yz4; printf(2)xdn,x); xy1; zx 1;例3-4:復(fù)合賦值符和自增運算符“”的應(yīng)用。 pr

9、intf(3)xd*zdn,x,z); zx * y; printf(4)xd*yd*zdn,x,y,z); 輸出結(jié)果是: (1)x10 (2)x40 (3)x2*z0 (4)x3*y2*z4 printf(3)xd*zdn,x,z2自減運算符“n”就等價于: nn1它也分前綴減和后綴減兩種形式。mn;等價于:nn1; mn;而 mn;卻等價于:mn; nn1;2自減運算符在使用增量運算符時,還應(yīng)注意以下幾點: 增量運算符有副作用。就是說,增量運算符作用于運算分量時,如“a”,不僅可以向外提供一個值,而且還改變運算分量自身的值。例如: xii或者 xi(i) “”和“”是單個運算符,不是通常意

10、義上的兩個“加”號或者兩個“減”號。在使用增量運算符時,還應(yīng)注意以下幾點:xij;是理解成(i)j,還是i(j)呢?C語言詞法分析遵循“最長匹配” 原則,即:如果在兩個運算分量之間連續(xù)出現(xiàn)多個表示運算符的字符(中間沒有空格),那么,在保證有意義的條件下,就從左到右盡可能多地將若干個字符組成一個運算符。所以,表達式就解釋為(i)j,而不是i(j)。建議讀者在錄入程序時,在各個運算符之間加入空格,或者使用圓括號,把有關(guān)部分括起來,使之作為整體處理。xij; “”和“”只能作用在變量上,如“”,“”等,而不能用于常量和一般表達式(不是左值的表達式)。另外,增量運算符與運算分量結(jié)合在一起構(gòu)成的表達式帶

11、有自身賦值含義,但這種表達式不是左值,不能直接出現(xiàn)在賦值號左邊。 “”和“”只能作用在變量上,如“”,“3.2.4 關(guān)系運算符和關(guān)系表達式C語言有完整的一組關(guān)系運算符,用于比較兩個運算分量間的大小關(guān)系。這組運算符有6個,即: !用關(guān)系運算符將兩個運算分量連在一起構(gòu)成的表達式稱作關(guān)系表達式。根據(jù)運算符所作用的兩個運算分量之間的指定關(guān)系是否成立,分別得到關(guān)系表達式的“真”、“假”結(jié)果。3.2.4 關(guān)系運算符和關(guān)系表達式在C語言中,沒有表示“真”、“假”的邏輯量TRUE(真)和FALSE(假),就借用數(shù)值來表示。以數(shù)值0表示“假”,以非0值表示“真”。對于關(guān)系表達式來說,結(jié)果的真、假分別用1和0表示

12、。關(guān)系運算只判定兩個運算分量是否滿足指定的關(guān)系,而不理睬二者具體數(shù)值相差多少。應(yīng)注意,賦值號“”與全等比較運算符“”的區(qū)別。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符。 abcd應(yīng)理解為:(ab)(cd)前4個關(guān)系運算符的優(yōu)先級相同,后兩個相等比較運算符的優(yōu)先級也相同。但前者的優(yōu)先級恰好比后者高一級。在C語言中,沒有表示“真”、“假”的邏輯量TRUE(真)例3-4:分析下面程序的運算結(jié)果。1 void main()2 3 int a,b,c;4 abc10;5 ab c;6 printf( ad,bd,cdn,a,b,c);7 a (bc*2);8 printf( ad,bd,cdn,a,b,c);9

13、abc100;10 printf( ad,bd,cdn,a,b,c);11 例3-4:分析下面程序的運算結(jié)果。上述程序運行之后的輸出結(jié)果是:a1,b10,c10a1,b20,c11a0,b20,c11上述程序運行之后的輸出結(jié)果是:3.2.5 條件運算符和條件表達式C語言中提供的條件運算符“?:”是惟一的三目運算符。由條件運算符組成的表達式簡稱為條件表達式,或三目表達式。其一般構(gòu)成形式是:表達式1?表達式2:表達式 3決定條件表達式值的方法是:先計算表達式1的值;若該值不為0,則計算表達式2的值,并將表達式2的值作為整個條件表達式的值;否則,就計算表達式3的值,并將該值作為整個條件表達式的值。3

14、.2.5 條件運算符和條件表達式例如,要求出x和y中最大的一個,并賦予變量max。max(xy)?x:y;使用條件運算符時,還要注意以下幾點: 條件運算符的優(yōu)先級稍高于賦值運算符,但比其他運算符的優(yōu)先級都低。 三個運算分量不限于簡單的算術(shù)表達式,甚至可以是函數(shù)調(diào)用。 分析條件表達式時,關(guān)鍵是先找出“?”和“:”,把三個運算分量區(qū)分開,然后按一般方法進行計算。例如,要求出x和y中最大的一個,并賦予變量max。例3-5:分析下面程序運行的結(jié)果。1 void main()2 3 int a,b,c;4 abc1;5 a b;6 b c;7 c a;8 printf( (1)dn,ab? a:b);9

15、 printf( (2)dn,ac? a:c+);10 ( abc)? printf( AA):printf( CC);11 printf( n ad,bd,cdn,a,b,c);12 例3-5:分析下面程序運行的結(jié)果。3.2.6 逗號運算符和逗號表達式在C語言中,逗號的用途主要有兩種:一是作為分隔符,二是作為運算符。(1)逗號分隔符用來分開相應(yīng)的多個數(shù)據(jù)。int a,b,c;printf( Adt Bdn,a,b);3.2.6 逗號運算符和逗號表達式(2)逗號運算符逗號作為運算符時,是把兩個運算分量“連接”起來,使之構(gòu)成一個逗號表達式。逗號表達式的一般形式是:表達式1,表達式2它的執(zhí)行過程是

16、:先計算表達式1,然后計算表達式2。整個逗號表達式的值是表達式2的值。逗號表達式的擴展形式是:表達式1,表達式2,表達式n各個表達式必須從左到右順序執(zhí)行,而整個逗號表達式的值是其中最右邊表達式的值。x(i10,j5,i*j)逗號運算符在所有運算符中是級別最低的。(2)逗號運算符3.2.7 邏輯運算符和邏輯表達式C語言中邏輯運算符有3個,它們是:! 邏輯非(相當(dāng)于其他語言中的NOT)& 邏輯與 (相當(dāng)于其他語言中的AND)| 邏輯或 (相當(dāng)于其他語言中的OR)其中,“!”是單目運算符,而&和 | 是雙目運算符。3.2.7 邏輯運算符和邏輯表達式C語言課件第03章由邏輯運算符和運算分量構(gòu)成的表達式

17、稱為邏輯表達式。(1)邏輯非運算符! 作用在單個運算分量上,其結(jié)果是運算分量邏輯值的“反”。(2)邏輯與運算符& 作用在前后兩個運算分量上,其結(jié)果是:僅當(dāng)兩個運算分量同時為真時,結(jié)果才為真;否則,只要其中有一個為假,結(jié)果就為假。由邏輯運算符和運算分量構(gòu)成的表達式稱為邏輯表達式。(3)邏輯或運算符 |作用在前后兩個運算分量上,其結(jié)果是:只要其中有一個運算分量為真,結(jié)果就為真;僅當(dāng)二者同時為假時,結(jié)果才為假。這三個邏輯運算符的優(yōu)先級是:!的優(yōu)先級高于&的優(yōu)先級,&的優(yōu)先級又高于 | 的優(yōu)先級。(3)邏輯或運算符 |例3-7:判斷給定的某一年是否是閏年。什么是閏年呢?如果某年號能被4整除而不能被10

18、0整除,或者能被400整除,那么這年就是閏年;否則就是平年。下面的程序?qū)τ脩糨斎氲哪晏柵袆e是否是閏年。1 /* determing if a year is a leap year */2 #include 3例3-7:判斷給定的某一年是否是閏年。4 Void main()5 6 int year,leap;7 printf( Input your year . n);8 scanf ( d ,&year);9 leapyear40& year 100 ! 0 | year 4000;10 if (leap)11 printf ( d is a leap year . n,year);12 e

19、lse13 printf ( d is not a leap year . n,year);14 4 Void main()在使用邏輯運算符時應(yīng)注意以下幾點: 用邏輯運算符把運算分量連接起來就構(gòu)成邏輯表達式。其運算分量可以是關(guān)系表達式、算術(shù)表達式等,甚至還可以是邏輯表達式。 !的優(yōu)先級高于算術(shù)運算符的優(yōu)先級。運算符!的結(jié)合性是從右到左,而&和 | 的結(jié)合性是從左到右。 邏輯表達式的值只有兩個:0和1。以0代表邏輯結(jié)果為假;以1代表邏輯結(jié)果為真。在使用邏輯運算符時應(yīng)注意以下幾點: 運算符&和 | 保證左邊的運算分量優(yōu)先得到計算。就是說,由&和 | 構(gòu)成的邏輯表達式嚴格地從左到右進行計算,并且一旦

20、根據(jù)左分量的值就能確定整個邏輯表達式的值時,就不再執(zhí)行后面的運算。例如,xyz1;x | y&z;執(zhí)行之后,x、y和z的值分別是2,1,1。 運算符&和 | 保證左邊的運算分量優(yōu)先得到計算。3.2.8 位邏輯運算符和位邏輯表達式1二進制只用0和1兩個數(shù)字來表示所有的數(shù)。二進制數(shù)的基本規(guī)則是“逢二進一”。2八進制和十六進制八進制數(shù)是以8為基底的數(shù),用到的數(shù)字是0,1,2,7,一共8個。它的基本進位規(guī)則是“逢八進一”。八進制整常數(shù)是以數(shù)字0開頭的八進制數(shù)字串。二進制數(shù)與八進制數(shù)之間很容易進行轉(zhuǎn)換。對于一個二進制數(shù)來說,從右向左每三個數(shù)字為一組分開,把每組二進制數(shù)轉(zhuǎn)為八進制數(shù)表示。3.2.8 位邏輯

21、運算符和位邏輯表達式將八進制數(shù)轉(zhuǎn)換成二進制數(shù)時,只要將每位八進制數(shù)字用三位二進制數(shù)表示,串起來就是相應(yīng)的二進制數(shù)。十六進制數(shù)是以十六為基底的數(shù),它由數(shù)字0,1,2,9和字母A,B,C,D,E,F(xiàn)(或者a,b,c,d,e,f)來表示。其基本進位規(guī)則是“逢十六進一”。在C語言中,十六進制整常數(shù)是以0 x或0X開頭的十六進制數(shù)字串,例如0 x12、0X5a8。二進制與十六進制的轉(zhuǎn)換也很容易:對于一個二進制數(shù)來說,從右向左每四個數(shù)字為一組,把每組二進制數(shù)用十六進制數(shù)字表示。把十六進制數(shù)的每一位數(shù)字用四位二進制數(shù)表示,串起來就是相應(yīng)的二進制數(shù)。將八進制數(shù)轉(zhuǎn)換成二進制數(shù)時,只要將每位八進制數(shù)字用三位二3原

22、碼、反碼和補碼在計算機內(nèi)表示數(shù)值的方法是不同的,一般有:原碼、反碼和補碼。(1)原碼通常,整數(shù)用一個字長表示。一般用最左邊的一位(稱作最高位)表示數(shù)的符號:以0代表正,1代表負。二進制數(shù)的原碼表示形式是:最高位用于符號位,其余各位是數(shù)值的絕對值。3原碼、反碼和補碼(2)反碼正數(shù)的反碼與原碼相同。負數(shù)的反碼是:原碼除符號位外(仍為1),各位取反。(3)補碼正數(shù)的補碼與原碼相同。除最高位仍為1外,原碼的其余各位求反,最后再加1(2)反碼4位邏輯運算符和位邏輯表達式在C語言中,位邏輯運算符有以下4個:& ( 按位與 )| ( 按位或 ) ( 按位反 ) (按位異或 )它們都是按二進制一位一位地進行運

23、算,相鄰位之間不發(fā)生聯(lián)系,即沒有“進位”、“借位”等問題,所以稱為位邏輯運算符。4位邏輯運算符和位邏輯表達式各個位邏輯運算符的優(yōu)先級關(guān)系是:最高,其余3個運算符的優(yōu)先級從高到低依次是&、|,但三者都高于邏輯運算符而低于關(guān)系運算符。由位邏輯運算符和運算分量構(gòu)成的表達式稱作位邏輯表達式。位邏輯運算符與邏輯運算符之間的區(qū)別: 位邏輯運算符是針對二進制位的,而邏輯運算符是針對整個表達式的;位邏輯運算符要計算表達式的具體數(shù)值,而邏輯運算符只判別表達式的真與假。 位邏輯運算符&、|和 的兩個運算分量是可交換的;而邏輯運算符&和|的兩個運算分量都是不可交換的,并且它們嚴格從左到右運算。各個位邏輯運算符的優(yōu)先

24、級關(guān)系是:最高,其余3個運算符的3.2.9 移位運算符和移位表達式C語言中實現(xiàn)移位功能的運算符有兩個:(左移)和(右移)。它們都是雙目運算符,并且要求兩個運算分量都是整型量。由移位運算符和運算分量構(gòu)成的表達式稱作移位表達式。(1)左移運算符它的一般使用形式是: 表達式1表達式2它的功能是:把表達式1的值(以二進制形式表示)向左移動n位,n值由表達式2確定,并且表達式2的值必須是正整數(shù)。3.2.9 移位運算符和移位表達式例如,a 00001011,那么,移位表達式 a3的結(jié)果是01011000,即:把a的各二進位全部向左移3位,右邊空出的位補0,而左邊溢出的位被丟棄不管。例如,a 0000101

25、1,那么,移位表達式(2)右移運算符 它的一般使用形式是: 表達式1表達式2它的功能是:把表達式1的值(以二進制形式表示)向右移n位,n的值由表達式2確定(該值必須是正整數(shù))例如,a00001011,那么,移位表達式 a3的結(jié)果是00000001,即:把a的各二進位全都向右移3位,右邊溢出的位被丟棄,而左邊空出的位(在本例情況下)補0。在右移時,要注意符號位問題。(2)右移運算符 3.2.10 其他運算符(1)& 和 *單目運算符&用來取出其運算分量的地址,例如,int a,*p;p&a;“*”也是單目運算符,它是“&” 的逆運算。它把運算分量(應(yīng)是指針量)所指向的內(nèi)存單元中的內(nèi)容取出來。例如

26、,b*p;3.2.10 其他運算符(2)強制類型運算符( )一般使用形式是:(類型名)表達式它把表達式的類型強制轉(zhuǎn)換成圓括號中“類型名”所指定的類型。(double)a這是類型的臨時轉(zhuǎn)換方法。(3)sizeof單目運算符sizeof用來計算某種類型的變量或某種數(shù)據(jù)類型在計算機內(nèi)部表示時所占用的字節(jié)數(shù)。例如:sizeof(int)(2)強制類型運算符( )(4)單目加“”和單目減“”運算符單目加“”運算的結(jié)果仍是其運算分量的值負號()的運算結(jié)果是其運算分量的負值(5)基本運算符 ( ) 其中, 用于數(shù)組下標的表示,( )用于標識函數(shù),“”和“”用于存取結(jié)構(gòu)或聯(lián)合中的成員。它們的優(yōu)先級在所有運算符中是最高的。(4)單目加“”和單目減“”運算符3.3 運算符優(yōu)先級和結(jié)合性3.3 運算符優(yōu)先級和結(jié)合性C語言課件第

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論