c語(yǔ)言 03operators and expressions_第1頁(yè)
c語(yǔ)言 03operators and expressions_第2頁(yè)
c語(yǔ)言 03operators and expressions_第3頁(yè)
c語(yǔ)言 03operators and expressions_第4頁(yè)
c語(yǔ)言 03operators and expressions_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、運(yùn)算符與表達(dá)式2007年秋1提綱變量的定義與賦初值運(yùn)算符與表達(dá)式概述算術(shù)運(yùn)算符與算術(shù)表達(dá)式基本算術(shù)運(yùn)算符自增、自減運(yùn)算符幾點(diǎn)說(shuō)明賦值運(yùn)算符與賦值表達(dá)式類型轉(zhuǎn)換逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式運(yùn)算符小結(jié)結(jié)束2變量的定義與賦初值變量定義的一般形式類型名 變量名1, 變量名2, ;變量定義的位置:在所有函數(shù)之外或在塊內(nèi)的開(kāi)頭部分程序中經(jīng)常要對(duì)一些變量預(yù)先設(shè)置初值。C語(yǔ)言允許在定義變量的同時(shí)執(zhí)行變量初始化。如,int a=3; int a, b, c=5; 這樣將使得程序更為簡(jiǎn)潔。返回正確的例子:int g;main() int a; a=1; printf(a=%dn, a);錯(cuò)誤的例子1:main() in

2、t a; a=1; printf(a=%dn, a);錯(cuò)誤的例子2:main() printf(errorn); int a; a=1; printf(a=%dn, a);3運(yùn)算符與表達(dá)式概述(1)回顧:定義了變量的類型,不但定義了變量所擁有的存儲(chǔ)單位的大小,同時(shí)也定義了變量所能參與的運(yùn)算。這些運(yùn)算就是通過(guò)運(yùn)算符來(lái)實(shí)現(xiàn)的。C運(yùn)算符范圍很寬,除控制語(yǔ)句以外的幾乎所有基本操作都由運(yùn)算符表示。C語(yǔ)言的一個(gè)特點(diǎn):運(yùn)算符豐富運(yùn)算符一般要攜帶若干運(yùn)算對(duì)象,運(yùn)算對(duì)象稱為操作數(shù)。根據(jù)操作數(shù)的個(gè)數(shù),運(yùn)算符可以分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。常量、變量或函數(shù)調(diào)用4運(yùn)算符與表達(dá)式概述(2)表達(dá)式由運(yùn)算符和相

3、應(yīng)的操作數(shù)及用于描述運(yùn)算先后次序的括號(hào)構(gòu)成。為了表達(dá)式的書寫方便(可以少寫一些括號(hào)),C引進(jìn)了運(yùn)算符優(yōu)先級(jí)和結(jié)合方向的概念。在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行。運(yùn)算符的結(jié)合方向(結(jié)合性)規(guī)定了同優(yōu)先級(jí)運(yùn)算符相遇時(shí)候的運(yùn)算次序。C運(yùn)算符有兩種結(jié)合方向:自左向右結(jié)合(左結(jié)合性),即運(yùn)算對(duì)象先與左面的運(yùn)算符結(jié)合;自右向左結(jié)合(右結(jié)合性),即運(yùn)算對(duì)象先與左面的運(yùn)算符結(jié)合返回5運(yùn)算符與表達(dá)式概述(3)在學(xué)習(xí)這部分內(nèi)容的時(shí)候,注意:對(duì)于運(yùn)算符要掌握適用對(duì)象、優(yōu)先級(jí)(通過(guò)與其他運(yùn)算符的比較來(lái)體現(xiàn))和結(jié)合方向;對(duì)于表達(dá)式,一定要注意拷問(wèn)下表達(dá)式的值。6基本算術(shù)運(yùn)算符C語(yǔ)言中的基本算術(shù)運(yùn)算符有6個(gè)

4、:+、-(減)、*、/、%(求模)、-(取負(fù))除了負(fù)號(hào)運(yùn)算符是單目運(yùn)算符外,基本算術(shù)運(yùn)算符號(hào)都是二目運(yùn)算符。%運(yùn)算符的兩個(gè)操作數(shù)均要求為整型或字符型數(shù)據(jù)兩個(gè)整數(shù)相除的結(jié)果亦為整數(shù),相應(yīng)小數(shù)部分將被舍棄。這樣,5/3的結(jié)果為1。(但-5/3的結(jié)果是-1或-2將取決于不同的系統(tǒng))六個(gè)基本算術(shù)運(yùn)算符的優(yōu)先級(jí)如下:-(取負(fù))*、/、%+、-(減)除了負(fù)號(hào)運(yùn)算符是“右結(jié)合性”外,基本算術(shù)運(yùn)算符號(hào)都是“左結(jié)合性”的。返回7自增、自減運(yùn)算符自增、自減運(yùn)算符的形式是+和-,其作用分別是使其操作數(shù)的值增1或減1。自增、自減運(yùn)算符只能用于變量,而不能用于常量或表達(dá)式。例如:5+,a+,+a都是錯(cuò)的。自增、自減運(yùn)算

5、符均有前置和后置兩種形式,當(dāng)采用前置形式時(shí),將先對(duì)變量執(zhí)行自增(減)操作再取變量值為表達(dá)式的值;而采用后置形式時(shí),將先取變量值為表達(dá)式的值再對(duì)變量執(zhí)行自增(減)操作。例子自增、自減運(yùn)算符的優(yōu)先級(jí)和負(fù)號(hào)運(yùn)算符相同,其結(jié)合方向也和負(fù)號(hào)運(yùn)算符相同(“自右至左”),因此表達(dá)式-i+將等價(jià)于-(i+)。自增、自減運(yùn)算符常用于循環(huán)語(yǔ)句,指針移動(dòng)中,原因是:簡(jiǎn)潔;高效。返回8幾點(diǎn)說(shuō)明(1)C標(biāo)準(zhǔn)并沒(méi)有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序。如,下面代碼在不同C編譯系統(tǒng)中的輸出可能不同:main() int i=3, j; j=(i+)+(i+)+(i+); printf(i=%d, j=%dn, i, j);

6、 在調(diào)用函數(shù)時(shí),實(shí)參的求值順序,C標(biāo)準(zhǔn)也沒(méi)有統(tǒng)一的規(guī)定。如,下面代碼在不同C編譯系統(tǒng)中的輸出可能不同:main() int i=3; printf(%d, %dn, i, i+); TC和VC的輸出為i=6, j=9多數(shù)系統(tǒng)輸出4, 3。原因是多數(shù)系統(tǒng)中的參數(shù)傳遞順序是從右到左的;但是VC的輸出是3,39幾點(diǎn)說(shuō)明(2)出現(xiàn)可能產(chǎn)生歧義的運(yùn)算符組合時(shí),C編譯系統(tǒng)在處理時(shí)盡可能多地(自左而右)將若干字符組成一個(gè)運(yùn)算符。例:i+j(i+)+j。-i-(-i)為了提高程序的可讀性,更明確地表達(dá)程序的意圖,應(yīng)該注意如下幾點(diǎn):適當(dāng)引入括號(hào)以取消可能出現(xiàn)的運(yùn)算符組合歧義避免表達(dá)式和函數(shù)調(diào)用的運(yùn)算結(jié)果對(duì)子表達(dá)

7、式或函數(shù)參數(shù)求值次序的依賴性。返回這是一個(gè)錯(cuò)誤的表達(dá)式,為什么?10賦值運(yùn)算符與賦值表達(dá)式(1)賦值符號(hào)“=”就是賦值運(yùn)算符,作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。例;注意:如果原來(lái)a中有值,賦值后會(huì)如何?在賦值符“=”前加上其它運(yùn)算符,可以構(gòu)成復(fù)合賦值符。凡是二目運(yùn)算符,都可以與賦值符一起組合成復(fù)合賦值符。目前常用的有:+=,-=,*=,/=,%=。引進(jìn)復(fù)合賦值運(yùn)算符是為了使程序更簡(jiǎn)潔。但在閱讀程序時(shí)要注意如何“翻譯”?賦值運(yùn)算符的優(yōu)先級(jí)比算術(shù)運(yùn)算符低。11賦值運(yùn)算符與賦值表達(dá)式(2)由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱為“賦值表達(dá)式”。一般形式為:變量 賦值運(yùn)算符 表達(dá)式賦值表達(dá)式的

8、求解過(guò)程表達(dá)式是要有值的:賦值表達(dá)式的值是被賦值的變量的最終值。賦值運(yùn)算符是“自右而左”結(jié)合的,因而下面兩行等價(jià)的:a=b=5a=(b=5)同理,下面兩行也是等價(jià)的a+=a-=a*aa+=(a-=a*a)變量的初始化基本上相當(dāng)于一次賦值。例如,下面兩行是等價(jià)的int a=3;int a; a=3;若a=12,則a+=a-=a*a的運(yùn)算流程如下:首先計(jì)算a=a-(a*a) ,得到a=-132然后計(jì)算a=a+(a-=a*a),得到a=-264返回12類型轉(zhuǎn)換(1):混合運(yùn)算數(shù)值類型之間、數(shù)值類型和字符類型之間的數(shù)據(jù)可混合運(yùn)算。運(yùn)算時(shí),不同類型數(shù)據(jù)先轉(zhuǎn)換為同類型,再進(jìn)行運(yùn)算類型轉(zhuǎn)換符合下圖其中,橫向

9、向左的箭頭表示必定的轉(zhuǎn)換,縱向箭頭表示當(dāng)運(yùn)算對(duì)象為不同類型時(shí)轉(zhuǎn)換的方向。類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的!一個(gè)示例doublefloatlongunsignedintchar, short高低13類型轉(zhuǎn)換(2):強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換符可以將一個(gè)表達(dá)式轉(zhuǎn)換為所需類型需要注意:在強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需類型的中間變量,原來(lái)變量的類型未發(fā)生變化強(qiáng)制類型轉(zhuǎn)換表達(dá)式的一般形式為:(目標(biāo)類型名) 表達(dá)式強(qiáng)制類型轉(zhuǎn)換通常用于自動(dòng)類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時(shí)。強(qiáng)制類型轉(zhuǎn)換通常也用于保證函數(shù)調(diào)用的實(shí)參和形參類型一致(這時(shí)并不發(fā)生自動(dòng)類型轉(zhuǎn)換)。強(qiáng)制類型轉(zhuǎn)換符是“自右至左”強(qiáng)制類型轉(zhuǎn)換符的優(yōu)先級(jí)很高(高于算術(shù)運(yùn)算符)

10、,因而對(duì)整個(gè)表達(dá)式(比如算術(shù)表達(dá)式)進(jìn)行類型轉(zhuǎn)換時(shí),必須將表達(dá)式用括號(hào)括起。 當(dāng)x, y均為float型時(shí),下面兩行是不同的(int)x+y(int)(x+y)當(dāng)f為float型時(shí),要使f%3合法必須使用(int)f%3這種形式14類型轉(zhuǎn)換(3):賦值當(dāng)賦值運(yùn)算符兩側(cè)的類型不一致但都是字符或數(shù)值型時(shí),賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。int=float、double:舍棄實(shí)數(shù)的小數(shù)部分。float、double=int:數(shù)值不變,補(bǔ)足有效數(shù)字,以浮點(diǎn)形式存儲(chǔ)。float=double:數(shù)值范圍不溢出時(shí)截取前7位有效數(shù)字,否則出錯(cuò)。double=float:數(shù)值不變,有效位數(shù)擴(kuò)展。int=unsigned

11、char:以char的8位為int的低8位,高8位補(bǔ)0。int=char:以char的8位為int的低8位,char的符號(hào)位擴(kuò)展為高8位。char=int、short或long:取其低8位。long=int:效果類似int=char。long=unsigned int:效果類似int=unsigned char。 int=long:取其低16位。占用同樣字節(jié)數(shù)的整型相互賦值,效果是原樣拷貝字節(jié)內(nèi)容。返回15逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式逗號(hào)運(yùn)算符,又稱“順序求值運(yùn)算符”,用它可以將兩個(gè)表達(dá)式連接起來(lái)。逗號(hào)表達(dá)式的一般形式為表達(dá)式1 , 表達(dá)式2,表達(dá)式3逗號(hào)表達(dá)式的求值過(guò)程就是順序求值各個(gè)表達(dá)式。逗號(hào)

12、表達(dá)式的值為最后一個(gè)表達(dá)式的值。注意:前面表達(dá)式對(duì)某個(gè)值的修改,將影響后后面表達(dá)式的運(yùn)算例子:a=a*5,a*4逗號(hào)運(yùn)算符的優(yōu)先級(jí)是所有運(yùn)算符中最低的。所以下面兩行是不同的:x=(a=3, 6*3)x=a=3, 6*3返回16運(yùn)算符小結(jié)返回高低17示例:混合運(yùn)算如果有變量定義為:int i; float f; double d; long e;則表達(dá)式10+a+i*f-d/e中涉及的類型轉(zhuǎn)換可以如圖 返回intcharintfloatdoublelongintdoubledoubledoubledoubleintdoubledoubledoubledouble+*-/18C語(yǔ)言運(yùn)算符的類型算術(shù)運(yùn)算符賦值運(yùn)算符強(qiáng)制類型轉(zhuǎn)換符逗號(hào)運(yùn)算符關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符下標(biāo)運(yùn)算符函數(shù)調(diào)用運(yùn)算符

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論