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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、 在調(diào)用函數(shù)時,實參的求值順序,C標準也沒有統(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幾點說明(2)出現(xiàn)可能產(chǎn)生歧義的運算符組合時,C編譯系統(tǒng)在處理時盡可能多地(自左而右)將若干字符組成一個運算符。例:i+j(i+)+j。-i-(-i)為了提高程序的可讀性,更明確地表達程序的意圖,應該注意如下幾點:適當引入括號以取消可能出現(xiàn)的運算符組合歧義避免表達式和函數(shù)調(diào)用的運算結(jié)果對子表達

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

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

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

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

11、char:以char的8位為int的低8位,高8位補0。int=char:以char的8位為int的低8位,char的符號位擴展為高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逗號運算符和逗號表達式逗號運算符,又稱“順序求值運算符”,用它可以將兩個表達式連接起來。逗號表達式的一般形式為表達式1 , 表達式2,表達式3逗號表達式的求值過程就是順序求值各個表達式。逗號

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

溫馨提示

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

評論

0/150

提交評論