第04章 運算符.ppt_第1頁
第04章 運算符.ppt_第2頁
第04章 運算符.ppt_第3頁
第04章 運算符.ppt_第4頁
第04章 運算符.ppt_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 運算符和表達式,4.1 算術(shù)運算與算術(shù)表達式 4.2 賦值運算與賦值表達式 4.3 C語言特有的運算和運算符 4.4 關(guān)系運算及其表達式 4.5 邏輯運算及其表達式,4.1 算術(shù)運算與算術(shù)表達式,在語言中,除控制語句和輸入輸出函數(shù)外,其它所有基本操作都作為運算符處理。 1.七種基本算術(shù)運算符 +、-(減法/取負)、*、/、%(求余數(shù))、+(自增1)、-(自減1)。 (1)關(guān)于除法運算/ C語言規(guī)定:兩個整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄。例如,5 / 2 = 2。 (2)關(guān)于求余數(shù)運算 要求兩側(cè)的操作數(shù)均為整型數(shù)據(jù),否則出錯。,2.表達式和算術(shù)表達式 (1)表達式的概念 用運算符和括

2、號將運算對象(常量、變量和函數(shù)等)連接起來的、符合語言語法規(guī)則的式子,稱為表達式。 (2)算術(shù)表達式的概念 表達式中的運算符都是算術(shù)運算符。例如,3 + 6 * 9、(x + y) / 2 - 1等,都是算術(shù)表達式。 3.運算符的優(yōu)先級與結(jié)合性 (1)語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。 所謂結(jié)合性是指,當一個操作數(shù)兩側(cè)的運算符具有相同的優(yōu)先級時,該操作數(shù)是先與左邊的運算符結(jié)合,還是先與右邊的運算符結(jié)合。,自左至右的結(jié)合方向,稱為左結(jié)合性。反之,稱為右結(jié)合性。 結(jié)合性是語言的獨有概念。除單目運算符、賦值運算符和條件運算符是右結(jié)合性外,其它運算符都是左結(jié)合性。 (2)表達式求值 1)按運算符的優(yōu)先

3、級高低次序執(zhí)行。例如,先乘除后加減。 2)如果在一個運算對象(或稱操作數(shù))兩側(cè)的運算符的優(yōu)先級相同,則按語言規(guī)定的結(jié)合方向(結(jié)合性)進行。 例如,算術(shù)運算符的結(jié)合方向是“自左至右”,即:在執(zhí)行“a b + c”時,變量b先與減號結(jié)合,執(zhí)行“a - b”;然后再執(zhí)行加c的運算。,4.數(shù)據(jù)類型轉(zhuǎn)換 (1) 在語言中,整型、實型和字符型數(shù)據(jù)間可以混合運算(因為字符數(shù)據(jù)與整型數(shù)據(jù)可以通用)。 如果一個運算符兩側(cè)的操作數(shù)的數(shù)據(jù)類型不同,則系統(tǒng)按“先轉(zhuǎn)換、后運算”的原則,首先將數(shù)據(jù)自動轉(zhuǎn)換成同一類型,然后在同一類型數(shù)據(jù)間進行運算。轉(zhuǎn)換規(guī)則如圖2-5所示。 1)橫向向左的箭頭,表示必須的轉(zhuǎn)換。char和sh

4、ort 型必須轉(zhuǎn)換成 int 型,float型必須轉(zhuǎn)換成double型。 2)縱向向上的箭頭,表示不同類型的轉(zhuǎn)換方向。 例如,int型與double型數(shù)據(jù)進行混合運算,則先將int型數(shù)據(jù)轉(zhuǎn)換成double型,然后在兩個同類型的數(shù)據(jù)間進行運算,結(jié)果為double型。 注意:箭頭方向只表示數(shù)據(jù)類型由低向高轉(zhuǎn)換,不要理解為int型先轉(zhuǎn)換成unsigned型,再轉(zhuǎn)換成long型,最后轉(zhuǎn)換成double型。,(2)除自動轉(zhuǎn)換外,語言也允許強制轉(zhuǎn)換。 數(shù)據(jù)類型強制轉(zhuǎn)換的一般格式為: (要轉(zhuǎn)換成的數(shù)據(jù)類型)(被轉(zhuǎn)換的表達式) 當被轉(zhuǎn)換的表達式是一個簡單表達式時,外面的一對圓括號可以缺省。 例如, (doub

5、le)a (等價于(double)(a) /*將變量a的值轉(zhuǎn)換成double型*/ (int)(x + y) /*將x+y的結(jié)果轉(zhuǎn)換成int型*/ (float)5 / 2(等價于(float)(5)/2) /*將5轉(zhuǎn)換成實型,再除以2(=2.5)*/ (float)(5 / 2) /*將5整除2的結(jié)果(2)轉(zhuǎn)換成實型(2.0)*/ 注意:強制轉(zhuǎn)換類型得到的是一個所需類型的中間量,原表達式類型并不發(fā)生變化。例如,(double)a 只是將變量a的值轉(zhuǎn)換成一個double型的中間量,其數(shù)據(jù)類型并未轉(zhuǎn)換成double型。 Return,4.1 自增和自減,4.1 自增(+)、自減(-)運算 1.作

6、用 自增運算使單個變量的值增,自減運算使單個變量的值減。 2.用法與運算規(guī)則 自增、自減運算符都有兩種用法: (1)前置運算運算符放在變量之前:變量名、變量名 先使變量的值增(或減),然后再以變化后的值參與其它運算,即先增減、后運算。 (2)后置運算運算符放在變量之后:變量名、變量名 變量先參與其它運算,然后再使變量的值增(或減),即先運算、后增減。,案例2.4 自增、自減運算符的用法與運算規(guī)則示例。 /*案例代碼文件名:AL2_4.C*/ /*程序功能:自增、自減運算符的用法與運算規(guī)則示例*/ main() int x=6, y; printf(x=%dn,x); /*輸出x的初值*/ y

7、= +x; /*前置運算*/ printf(y=+x: x=%d,y=%dn,x,y); y = x-; /*后置運算*/ printf(y=x-: x=%d,y=%dn,x,y); 程序運行結(jié)果: x=6 y=+x: x=7,y=7 y=x-: x=6,y=7 程序演示,思考題:如果將案例“y=+x;”語句中的前置運算改為后置(y=x+;),“y=x-;”語句中的后置運算改為前置(y=-x;),程序運行結(jié)果會如何? 3.說明 (1)自增、自減運算,常用于循環(huán)語句中,使循環(huán)控制變量加(或減),以及指針變量中,使指針指向下(或上)一個地址。 (2)自增、自減運算符,不能用于常量和表達式。 例如,

8、5+、-(a+b)等都是非法的。 (3)在表達式中,連續(xù)使同一變量進行自增或自減運算時,很容易出錯,所以最好避免這種用法。,2.8 賦值運算與賦值表達式,1.賦值運算 賦值符號“=”就是賦值運算符,它的作用是將一個表達式的值賦給一個變量。 賦值運算符的一般形式為: 變量 = 賦值表達式 例如,x = 5 y = (float)5 / 2 如果表達式值的類型,與被賦值變量的類型不一致,但都是數(shù)值型或字符型時,系統(tǒng)自動地將表達式的值轉(zhuǎn)換成被賦值變量的數(shù)據(jù)類型,然后再賦值給變量。 思考題:假設(shè)變量num的數(shù)據(jù)類型為float,其值為2.5,則執(zhí)行“num = (int)num”后,num的值等于多少

9、?,2.復(fù)合賦值運算 復(fù)合賦值運算符是由賦值運算符之前再加一個雙目運算符構(gòu)成的。 復(fù)合賦值運算的一般格式為: 變量 雙目運算符 = 表達式 復(fù)合賦值運算符 它等價于:變量 = 變量 雙目運算符 (表達式)。 當表達式為簡單表達式時,表達式外的一對圓括號才可缺省,否則可能出錯。 例如,x += 3 /* 等價于x=x+3 */ y *= x + 6/* 等價于y=y*(x+6),而不是y=y*x+6 */ C語言規(guī)定的10種復(fù)合賦值運算符如下: +=,-=,*=,/=,%=; /*復(fù)合算術(shù)運算符(5個)*/ &=,=,|=,=;/*復(fù)合位運算符(5個)*/,3.賦值表達式 由賦值運算符或復(fù)合賦值

10、運算符,將一個變量和一個表達式連接起來的表達式,稱為賦值表達式。 (1)一般格式 變量 (復(fù)合)賦值運算符 表達式 (2)賦值表達式的值 任何一個表達式都有一個值,賦值表達式也不例外。被賦值變量的值,就是賦值表達式的值。 例如,“a = 5”這個賦值表達式,變量a的值“”就是它的值。 Return,4.3 逗號運算(,)及其表達式 語言提供一種用逗號運算符“,”連接起來的式子,稱為逗號表達式。逗號運算符又稱順序求值運算符。 1.一般形式 表達式, 表達式, , 表達式n 2.求解過程 自左至右,依次計算各表達式的值,“表達式n” 的值即為整個逗號表達式的值。 例如,逗號表達式“a = 3 *

11、5, a * 4”的值=60:先求解a = 3 * 5,得a=15;再求a * 4 = 60,所以逗號表達式的值=60。 又例如,逗號表達式“(a = 3 * 5, a * 4), a + 5”的值=20:先求解a = 3 * 5,得a=15;再求a * 4=60;最后求解a + 5=20,所以逗號表達式的值=20。 注意:并不是任何地方出現(xiàn)的逗號,都是逗號運算符。很多情況下,逗號僅用作分隔符。 a=a+,a+5 Return,4.3 C語言特有的運算符,4.4 關(guān)系運算及其表達式,所謂“關(guān)系運算”實際上就是“比較運算”,即將兩個數(shù)據(jù)進行比較,判定兩個數(shù)據(jù)是否符合給定的關(guān)系。 例如,“a b”

12、中的“”表示一個大于關(guān)系運算。如果a的值是5,b的值是3,則大于關(guān)系運算“”的結(jié)果為“真”,即條件成立;如果a的值是2,b的值是3,則大于關(guān)系運算“”的結(jié)果為“假”,即條件不成立。 4.4.1 關(guān)系運算符及其優(yōu)先次序 1關(guān)系運算符 C語言提供6種關(guān)系運算符: (大于), =(大于或等于), =(等于), !=(不等于) 注意:在語言中,“等于”關(guān)系運算符是雙等號“= =”,而不是單等號“= ”(賦值運算符)。,2優(yōu)先級 (1)在關(guān)系運算符中,前4個優(yōu)先級相同,后2個也相同,且前4個高于后2個。 (2)與其它種類運算符的優(yōu)先級關(guān)系 關(guān)系運算符的優(yōu)先級,低于算術(shù)運算符,但高于賦值運算符。 4.4.

13、2 關(guān)系表達式 1關(guān)系表達式的概念 所謂關(guān)系表達式是指,用關(guān)系運算符將兩個表達式連接起來,進行關(guān)系運算的式子。 例如,下面的關(guān)系表達式都是合法的: ab,a+bc-d,(a=3)=b,(ab)= =(bc) 2關(guān)系表達式的值邏輯值(非“真”即“假”)。 由于語言沒有邏輯型數(shù)據(jù),所以用整數(shù)“”表示“邏輯真”,用整數(shù)“”表示“邏輯假”。,例如,假設(shè)num1=3,num2=4,num3=5,則: (1)num1num2的值=0。 (2)(num1num2)!=num3的值=1。 (3)num1num2num3的值=1。 思考題:任意改變num1或num2的值,會影響整個表達式的值嗎?為什么? (4)

14、(num1num2)+num3的值=6,因為num1num2的值=1,1+5=6。 再次強調(diào):C語言用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。所以,關(guān)系表達式的值,還可以參與其它種類的運算,例如算術(shù)運算、邏輯運算等。 Return,4.5 邏輯運算及其表達式,關(guān)系表達式只能描述單一條件,例如“x=0”。如果需要描述“x=0”、同時“x10”,就要借助于邏輯表達式了。 4.5.1 邏輯運算及其優(yōu)先次序 邏輯運算符及其運算規(guī)則 (1)C語言提供三種邏輯運算符: &邏輯與(相當于“同時”) |邏輯或(相當于“或者”) !邏輯非(相當于“否定”),例如,下面的表達式都是邏輯表達式: (x

15、=0) & (x5) ,! (x= =0), (year%4=0)&(year%100!=0)|(year%400=0) (2)運算規(guī)則 1)&:當且僅當兩個運算量的值都為“真”時,運算結(jié)果為“真”,否則為“假”。 2) | :當且僅當兩個運算量的值都為“假”時,運算結(jié)果為“假”,否則為“真”。 3) ! :當運算量的值為“真”時,運算結(jié)果為“假”;當運算量的值為“假”時,運算結(jié)果為“真”。 例如,假定x=5,則(x=0) & (x5)的值為“假”。,2邏輯運算符的運算優(yōu)先級 (1)邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低,即: ?。ǚ牵?&(與) |(或) (2)與其它種類運算符的優(yōu)先關(guān)系

16、 ! 算術(shù)運算 關(guān)系運算 & | 賦值運算 4.5.2 邏輯表達式 1邏輯表達式的概念 所謂邏輯表達式是指,用邏輯運算符將1個或多個表達式連接起來,進行邏輯運算的式子。在C語言中,用邏輯表達式表示多個條件的組合。 例如,(year%4=0)&(year%100!=0)|(year%400=0)就是一個判斷一個年份是否是閏年的邏輯表達式。,邏輯表達式的值也是一個邏輯值(非“真”即“假”)。 2邏輯量的真假判定和非 語言用整數(shù)“”表示“邏輯真”、用“”表示“邏輯假”。但在判斷一個數(shù)據(jù)的“真”或“假”時,卻以和非為根據(jù):如果為,則判定為“邏輯假”;如果為非,則判定為“邏輯真”。 例如,假設(shè)num=12,則: !num的值= ,num=1 num31的值=1。 3說明 (1)邏輯運算符兩側(cè)的操作數(shù),除可以是和非的整數(shù)外,也可以是

溫馨提示

  • 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

提交評論