運(yùn)算符與表達(dá)式_第1頁
運(yùn)算符與表達(dá)式_第2頁
運(yùn)算符與表達(dá)式_第3頁
運(yùn)算符與表達(dá)式_第4頁
運(yùn)算符與表達(dá)式_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式本章內(nèi)容:1. 變量賦初值 2. 各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 3. 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 4. 賦值運(yùn)算符和賦值表達(dá)式 5. 逗號運(yùn)算符和逗號表達(dá)式 變量賦初值 (1)語言允許在定義變量的同時使變量初始化如: int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點(diǎn)型變量,初值為.56 char c= a; / 指定為字符變量,初值為a (2)可以使被定義的變量的一部分賦初值。 如: int a,b,c=5; 表示指定、為整型變量,但只對初始化,c的初值為(3)如果對幾個變量賦以同一個初值。 如:int a=3,b=3,c=3;

2、 表示、的初值都是。 不能寫成 int a=b=c=3;各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 整型(包括int,short,long)、浮點(diǎn)型(包括float,double)可以混合運(yùn)算。在進(jìn)行運(yùn)算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.運(yùn)算符簡介 的運(yùn)算符有以下幾類:(1)算術(shù)運(yùn)算符 (+ - * / %)(2)關(guān)系運(yùn)算符 (?。?3)邏輯運(yùn)算符 (!|)(4)位運(yùn)算符 ( |)(5)賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符)(6)條件運(yùn)算符 (?:)(7)逗號運(yùn)算符 (,)(8)指針運(yùn)算符 (*和)(9)求字節(jié)數(shù)運(yùn)算符()(10)強(qiáng)制類

3、型轉(zhuǎn)換運(yùn)算符( (類型) )(11)分量運(yùn)算符(-)(12)下標(biāo)運(yùn)算符()(13)其他 (如函數(shù)調(diào)用運(yùn)算符()2. 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 (1)基本的算術(shù)運(yùn)算符: (加法運(yùn)算符,或正值運(yùn)算符。如:、) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如:、)* (乘法運(yùn)算符。如:*) (除法運(yùn)算符。如:) (模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如:的值為)。(2)算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性基本的算術(shù)運(yùn)算符用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。 例如: *.5a 是一個合法的表達(dá)式語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性

4、。 在表達(dá)式求值時,先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。 規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性) 算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇?,即先左后?。(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個表達(dá)式轉(zhuǎn)換成所需類型。 一般形式:(類型名)(表達(dá)式)例如:(double) 將轉(zhuǎn)換成double類型(int)(x+y) 將x+y的值轉(zhuǎn)換成整型(float)(5%3) 將5%3的值轉(zhuǎn)換成float型例3.8 強(qiáng)制類型轉(zhuǎn)換。 #include void() ; ; ; (); printf(x=%f, i=%dn,x,i);說明:有兩種類型轉(zhuǎn)換,一種是在運(yùn)算時不必用戶指定,系

5、統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換,如3+6.5。第二種是強(qiáng)制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時,可以用強(qiáng)制類型轉(zhuǎn)換。運(yùn)行結(jié)果: x3.600000, i=3(4) 自增、自減運(yùn)算符 作用是使變量的值增或減如: ,(在使用之前,先使的值加(減),(在使用之后,使的值加(減) i+與+i的區(qū)別: 是先執(zhí)行后,再使用的值; 是先使用的值后,再執(zhí)行。例如: ; i的值先變成4, 再賦給,j的值均為 ; 先將 i的值3賦給,的值為,然后變?yōu)樽⒁猓?(1)自增運(yùn)算符(),自減運(yùn)算符(),只能用于變量,而不能用于常量或表達(dá)式, (2)和的結(jié)合方向是“自右至左”。 (5) 有關(guān)表達(dá)式使用中的問題說明 ANSI C并沒

6、有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。 例如:對表達(dá)式 a = f1( )+f2( )并不是所有的編譯系統(tǒng)都先調(diào)用f1( ), 然后調(diào)用f2( )。有的情況下結(jié)果可能不同。有時會出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎。 語言中有的運(yùn)算符為一個字符,有的運(yùn)算符由兩個字符組成 ,為避免誤解,最好采取大家都能理解的寫法。 例如:不要寫成i+j的形式,而應(yīng)寫成 (i+)+j的形式 在調(diào)用函數(shù)時,實(shí)參數(shù)的求值順序,標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。例如:的初值為,如果有下面的函數(shù)調(diào)用: printf(,i+) 在有的系統(tǒng)中,從左至右求值,輸出“,”。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自

7、右而左,函數(shù)輸出的是“,”。以上這種寫法不宜提倡, 最好改寫成 j = i+; printf(%d, %d, j,i)賦值運(yùn)算符和賦值表達(dá)式 (1)賦值運(yùn)算符 賦值符號“”就是賦值運(yùn)算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量賦給變量。也可以將一個表達(dá)式的值賦給一個變量. (2)類型轉(zhuǎn)換 如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換。將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄浮點(diǎn)數(shù)的小數(shù)部分。如:為整型變量,執(zhí)行“i=3.56”的結(jié)果是使的值為,以整數(shù)形式存儲在整型變量中. 將整型數(shù)據(jù)賦給單、雙精度變量

8、時,數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中 如: 將賦給float變量,即執(zhí)行,先將轉(zhuǎn)換成,再存儲在中。 將賦給型變量,即執(zhí)行,則將補(bǔ)足有效位數(shù)字為,然后以雙精度浮點(diǎn)數(shù)形式存儲到變量中。 將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(4個字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。 如:float f;double d=123.456789e100; f=d; 就出現(xiàn)溢出的錯誤。 如果將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個字節(jié)存儲字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為個字節(jié)

9、,因此將字符數(shù)據(jù)(個二進(jìn)位)放到整型變量存儲單元的低位中。第一種情況: 如果所用系統(tǒng)將字符處理為無符號的字符類型,或程序已將字符變量定義為 型,則將字符的位放到整型變量低位,高位補(bǔ)零。例如:將字符賦給型變量第二種情況: 如果所用系統(tǒng)(如Turbo C+)將字符處理為帶符號的(即signed char),若字符最高位為,則整型變量高位補(bǔ);若字符最高位為,則高位全補(bǔ)。這稱為“符號擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量(字符)以整數(shù)形式輸出為,的值也是。將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。例如:int i=289

10、;char c=a;c=i; 賦值情況 :c的值為33, 如果用“%c”輸出c,將得到字符“!” (其ASCII碼為33)。 將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時,要進(jìn)行符號擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號位為),則long型變量的高16位補(bǔ);如果int型變量為負(fù)值(符號位為),則long型變量的高16位補(bǔ),以保持?jǐn)?shù)值不改變。 反之,若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截斷)。 例如:int a; long b;a=b 如果(八進(jìn)制數(shù)),則賦值后值為。將unsigned in

11、t型數(shù)據(jù)賦給long int型變量時,不存在符號擴(kuò)展問題,只需將高位補(bǔ)即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsigned int-int,unsigned long-long,unsigned short-short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。例如:unsigned int 65535; int b;; 將整個送到中,由于是int,第位是符號位,因此b成了負(fù)數(shù)。根據(jù)補(bǔ)碼知識可知,的值為-1。 將非unsigned型數(shù)據(jù)賦給長度相同的unsig

12、ned型變量,也是原樣照賦(連原有的符號位也作為數(shù)值一起傳送)。 例3.9 有符號數(shù)據(jù)傳送給無符號變量。 #include void () ; ; ; (n,);說明:“%u”是輸出無符號數(shù)時所用的格式符。如果為正值,且在32767之間,則賦值后數(shù)值不變。賦值情況見圖 運(yùn)行結(jié)果: (3) 復(fù)合的賦值運(yùn)算符 在賦值符“”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。例如: 等價于 * 等價于 *()不要錯寫成x=xy+8 等價于 以“”為例來說明,它相當(dāng)于使進(jìn)行一次自加()的操作。即先使加,再賦給。語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符:,*,| 注意:如果是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有括號。如: x

13、 %= y+3 x %= (y+3) |_ x = x %(y+3)(不要錯寫成x=x%y+3) 語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符:,*,| (4) 賦值表達(dá)式 由賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。一般形式為: 例如: “5”是一個賦值表達(dá)式 對賦值表達(dá)式求解的過程是: 求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值; 賦給賦值運(yùn)算符左側(cè)的變量。例如: 賦值表達(dá)式“=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。 注意: 一個表達(dá)式應(yīng)該有一個值 左值 (lvalue) : 賦值運(yùn)算符左側(cè)的標(biāo)識符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常變量也不能作為左值

14、, 右值 (lvalue) :出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式 左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值都可以作為右值。 賦值表達(dá)式中的“表達(dá)式”,又可以是一個賦值表達(dá)式.例如: a=(b=5) 分析:括弧內(nèi)的“b=5”是一個賦值表達(dá)式,它的值等于5。執(zhí)行表達(dá)式“a=(b=5)”相當(dāng)于執(zhí)行“b=5”和“ab”兩個賦值表達(dá)式。 賦值運(yùn)算符按照“自右而左”的結(jié)合順序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價.分析:先執(zhí)行括弧內(nèi)的運(yùn)算,將15賦給a,然后執(zhí)行4*3的運(yùn)算,得12,再把12賦給a。最后a的值為12,整個表達(dá)式的值為12??梢钥吹?a=3*5)出現(xiàn)在賦值

15、運(yùn)算符的左側(cè),因此賦值表達(dá)式(a=3*5)是左值。 注意:在對賦值表達(dá)式(a=3*5)求解后,變量a得到值15執(zhí)行(a=3*5)=4*3時,實(shí)際上是將4*3的積12賦給變量a,而不是賦給3*5。不能寫成:a=3*5=4*3請分析下面的賦值表達(dá)式(a=3*5)=4*3賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。 如:a+=a-=a*a分析:此賦值表達(dá)式的求解步驟如下 先進(jìn)行“*”的運(yùn)算, 它相當(dāng)于*,a的值為144132。再進(jìn)行“”的運(yùn)算,相當(dāng)于=a+(-132),a的值為132-132-264。 將賦值表達(dá)式作為表達(dá)式的一種,使賦值操作不僅可以出現(xiàn)在賦值語句中,而且可以以表達(dá)式形式出現(xiàn)在其他語句(如

16、輸出語句、循環(huán)語句等)中. 如:printf(%d,a=b); 分析:如果b的值為3, 則輸出a的值(也是表達(dá)式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。逗號運(yùn)算符和逗號表達(dá)式逗號運(yùn)算符:將兩個表達(dá)式連接起來,又稱為“順序求值運(yùn)算符” 如:5, 一般形式: 表達(dá)式,表達(dá)式求解過程: 先求解表達(dá)式,再求解表達(dá)式。整個逗號表達(dá)式的值是表達(dá)式的值。 逗號表達(dá)式 的值為14例:逗號表達(dá)式*5,* 分析:賦值運(yùn)算符的優(yōu)先級別高于逗號運(yùn)算符, 因此應(yīng)先求解*5. 一個逗號表達(dá)式又可以與另一個表達(dá)式組成一個新的逗號表達(dá)式 如:(*,*),先計算出的值等于,再進(jìn)行*的運(yùn)算得60(但值未變,仍為15),再進(jìn)行得,即整個表達(dá)式的值為。的值為5,然后求解*,得。整個逗號表達(dá)式的值為。逗號表達(dá)式的一般形式可以擴(kuò)展為 表達(dá)式,表達(dá)式,表達(dá)式,表達(dá)式

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論