C教材配套幻燈片第2章_第1頁(yè)
C教材配套幻燈片第2章_第2頁(yè)
C教材配套幻燈片第2章_第3頁(yè)
C教材配套幻燈片第2章_第4頁(yè)
C教材配套幻燈片第2章_第5頁(yè)
已閱讀5頁(yè),還剩128頁(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)介

第2章

數(shù)據(jù)類型、運(yùn)算符與表達(dá)式《C語(yǔ)言程序設(shè)計(jì)》

2學(xué)習(xí)目標(biāo)與要求1、掌握C語(yǔ)言中基本的數(shù)據(jù)類型2、理解并掌握程序中常量和變量的概念、定義及應(yīng)用3、掌握各類運(yùn)算符及其優(yōu)先級(jí)和結(jié)合性,能正確書(shū)寫(xiě)和計(jì)算各類表達(dá)式的值4、掌握常用庫(kù)函數(shù)的使用方法,會(huì)使用TC的幫助文件《C語(yǔ)言程序設(shè)計(jì)》

3本章要點(diǎn)C語(yǔ)言的數(shù)據(jù)類型常量與變量整型數(shù)據(jù)實(shí)型數(shù)據(jù)字符型數(shù)據(jù)運(yùn)算符和表達(dá)式常用庫(kù)函數(shù)的使用TC幫助文件的使用《C語(yǔ)言程序設(shè)計(jì)》

4C語(yǔ)言的數(shù)據(jù)類型所謂數(shù)據(jù)類型是按被說(shuō)明量的性質(zhì)、表示形式、占據(jù)存儲(chǔ)空間的多少、構(gòu)造特點(diǎn)來(lái)劃分的。C語(yǔ)言具有豐富的數(shù)據(jù)類型,各種數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型、構(gòu)造數(shù)據(jù)類型、指針類型、空類型四大類,如表2-1所示。《C語(yǔ)言程序設(shè)計(jì)》

5表2-1C語(yǔ)言的數(shù)據(jù)類型《C語(yǔ)言程序設(shè)計(jì)》

6基本類型又稱為簡(jiǎn)單類型,其值不可以再分解為其它類型;構(gòu)造類型又稱為復(fù)雜類型,是根據(jù)已定義的一個(gè)或多個(gè)數(shù)據(jù)類型用構(gòu)造的方法來(lái)定義的;指針類型是C語(yǔ)言特有的,具有重要作用的數(shù)據(jù)類型,其值用來(lái)表示某個(gè)量在內(nèi)存儲(chǔ)器中的地址;空類型也屬于簡(jiǎn)單類型,用于處理函數(shù)調(diào)用后不需要向調(diào)用者返回函數(shù)值的情況。在本章中,我們先介紹基本數(shù)據(jù)類型中的整型、浮點(diǎn)型和字符型。其余類型在以后各章中陸續(xù)介紹。《C語(yǔ)言程序設(shè)計(jì)》

7常量與變量標(biāo)識(shí)符命名在C語(yǔ)言中,標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列。C語(yǔ)言中規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字、下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。例如:ch1、ch2、add、_sum、Student_name、a_2_b、PI等都是合法的,而3a、a!、¥168、M.D.Tom、higha等都是非法的。《C語(yǔ)言程序設(shè)計(jì)》

8標(biāo)識(shí)符的長(zhǎng)度可以是一個(gè)或多個(gè)字符,大部分系統(tǒng),只取前8個(gè)字符,如下所示的四個(gè)標(biāo)識(shí)符Student_name、Student_number、Student_sex、Student_age將被看成同名。C語(yǔ)言中大寫(xiě)字母與小寫(xiě)字母是有區(qū)別的,如SUM、Sum、和sum是三個(gè)不同的標(biāo)識(shí)符。程序中的標(biāo)識(shí)符不能和C語(yǔ)言中的關(guān)鍵字相同,也不能和用戶自己編制的函數(shù)或庫(kù)函數(shù)同名。關(guān)鍵字又稱保留字,是一種C語(yǔ)言預(yù)先定義的、具有特殊意義的標(biāo)識(shí)符。所有關(guān)鍵詞中的字符都必須小寫(xiě),諸如if、else、int、float等?!禖語(yǔ)言程序設(shè)計(jì)》

9常量變量與常量是程序中所要處理的兩種基本數(shù)據(jù)對(duì)象。在程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱為常量。常量分為直接常量和符號(hào)常量。直接常量一般從其字面形式即可判別,如12、0、-3為整型常量,4.6、-1.23為實(shí)型常量,‘a(chǎn)’、‘d’為字符常量。符號(hào)常量是用一個(gè)標(biāo)識(shí)符代表一個(gè)常量,符號(hào)常量在使用之前必須先定義?!禖語(yǔ)言程序設(shè)計(jì)》

10其一般形式為:#define標(biāo)識(shí)符常量其功能是把該標(biāo)識(shí)符定義為其后的常量值。如#definePI3.14159以后程序中凡是出現(xiàn)PI的地方都用3.14159代替。習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫(xiě)字母,變量標(biāo)識(shí)符用小寫(xiě)字母,以示區(qū)別。常量可與數(shù)據(jù)類型結(jié)合起來(lái)分類。例如,可分為整型常量、浮點(diǎn)常量、字符常量、枚舉常量?!禖語(yǔ)言程序設(shè)計(jì)》

11變量在程序執(zhí)行過(guò)程中,取值可變的量稱為變量。變量名的命名必須遵循標(biāo)識(shí)符規(guī)則,在選擇變量名時(shí)采用見(jiàn)名知義的原則。如用sum表示和,average表示平均值,s表示圓面積。變量被區(qū)分為不同的類型,內(nèi)存中占用不同的存儲(chǔ)單元,如整型變量、浮點(diǎn)變量、字符變量、枚舉變量等,以便用來(lái)存放相應(yīng)變量的值。變量定義的一般格式為:存儲(chǔ)類型符數(shù)據(jù)類型符變量名表;《C語(yǔ)言程序設(shè)計(jì)》

12整型數(shù)據(jù)

整型常量整型常量就是整數(shù)。在C語(yǔ)言中,整數(shù)可用十進(jìn)制、八進(jìn)制和十六進(jìn)制三種來(lái)表示(1)十進(jìn)制整數(shù):十進(jìn)制整數(shù)沒(méi)有前綴。其中每個(gè)數(shù)字位必須為0~9。以下各數(shù)是合法的十進(jìn)制整常數(shù):235、-123、65535、1627;以下各數(shù)不是合法的十進(jìn)制整常數(shù):023(不能有前導(dǎo)0)、23D(含有非十進(jìn)制數(shù)碼)。《C語(yǔ)言程序設(shè)計(jì)》

13(2)八進(jìn)制整數(shù):八進(jìn)制整數(shù)必須以數(shù)字0開(kāi)頭(注意不是字母O),后面跟數(shù)字0~7表示。以下各數(shù)是合法的八進(jìn)制數(shù):017(十進(jìn)制為15)、0101(十進(jìn)制為65)、0177777(十進(jìn)制為65535);以下各數(shù)不是合法的八進(jìn)制數(shù):256(無(wú)前綴0)、03A2(包含了非八進(jìn)制數(shù)碼)。《C語(yǔ)言程序設(shè)計(jì)》

14(3)十六進(jìn)制整數(shù):十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為0~9,A~F或a~f。以下各數(shù)是合法的十六進(jìn)制整常數(shù):0X2A(十進(jìn)制為42)、0XA0(十進(jìn)制為160)、0XFFFF(十進(jìn)制為65535);以下各數(shù)不是合法的十六進(jìn)制整常數(shù):5A(無(wú)前綴0X)、0X3H(含有非十六進(jìn)制數(shù)碼)。《C語(yǔ)言程序設(shè)計(jì)》

15(4)整型常數(shù)的后綴:長(zhǎng)整型數(shù)是用后綴“L”或“l(fā)”來(lái)表示的。例如十進(jìn)制長(zhǎng)整數(shù):158L、358000L;八進(jìn)制長(zhǎng)整數(shù):012L、077L、0200000L;十六進(jìn)制長(zhǎng)整數(shù):0X15L、0XA5L、0X10000L。長(zhǎng)整數(shù)158L和基本整常數(shù)158在數(shù)值上并無(wú)區(qū)別。但對(duì)158L,因?yàn)槭情L(zhǎng)整型量,系統(tǒng)將為它分配4個(gè)字節(jié)存儲(chǔ)空間。而對(duì)158,因?yàn)槭腔菊?,只分?個(gè)字節(jié)的存儲(chǔ)空間?!禖語(yǔ)言程序設(shè)計(jì)》

16無(wú)符號(hào)數(shù)也可用后綴表示,整型常數(shù)的無(wú)符號(hào)數(shù)的后綴為“U”或“u”。如358u、0x38Au、235Lu均為無(wú)符號(hào)數(shù)。前綴,后綴可同時(shí)使用以表示各種類型的數(shù)。如0XA5Lu表示十六進(jìn)制無(wú)符號(hào)長(zhǎng)整數(shù)A5,其十進(jìn)制為165。《C語(yǔ)言程序設(shè)計(jì)》

17整數(shù)在內(nèi)存中的存放形式(補(bǔ)碼)數(shù)在計(jì)算機(jī)中是以二進(jìn)制的形式存放的。最高位為符號(hào)位,(0表示正,1表示負(fù))。(1)該數(shù)為正整數(shù)時(shí),補(bǔ)碼與原碼相同,如十進(jìn)制數(shù)15,對(duì)于16位的內(nèi)存單元來(lái)說(shuō),《C語(yǔ)言程序設(shè)計(jì)》

18(15)補(bǔ)=(15)原=0000000000001111,最前面的0為符號(hào)位,表示正數(shù)。(2)該數(shù)為負(fù)整數(shù)時(shí),求補(bǔ)碼口訣為“求反加一”。先求出該負(fù)數(shù)的二進(jìn)制表示,將其按位取反(符號(hào)位除外),再在最低位加1。如十進(jìn)制數(shù)-15,對(duì)于16位的內(nèi)存單元來(lái)說(shuō),(-15)原=1000000000001111,然后按位求反(符號(hào)位除外)得到1111111111110000,末位加1得(-15)補(bǔ)=1111111111110001,最前面的1為符號(hào)位,表示負(fù)數(shù)。《C語(yǔ)言程序設(shè)計(jì)》

20

整型變量整型變量的定義基本格式:int變量名1[,變量名2,…,變量名n];如:intx,y,z;整型變量的分類在基本類型符(int)前面增加兩類修飾符,一類用于控制變量的符號(hào),包括signed(有符號(hào))和unsigned(無(wú)符號(hào));另一類用于控制變量的取值范圍,包括short(短)和long(長(zhǎng)),形成了六種?!禖語(yǔ)言程序設(shè)計(jì)》

21(1)有符號(hào)基本型(int)在TC下這種變量占用2個(gè)字節(jié)(16位)的內(nèi)存單元,表示的數(shù)值范圍為(-32768~32767),《C語(yǔ)言程序設(shè)計(jì)》

22(2)無(wú)符號(hào)基本型(unsignedint)在TC下這種變量占用2個(gè)字節(jié)(16位)的內(nèi)存單元,因?yàn)樽罡呶皇菙?shù)據(jù)位,不是符號(hào)位,此類型的值是非負(fù)的,表示的數(shù)值范圍為(0~65535)《C語(yǔ)言程序設(shè)計(jì)》

23【例2-1】無(wú)符號(hào)數(shù)輸出的兩種形式。voidmain(){unsignedintm;m=65448;printf("\nm=%d\n",m);printf("m=%u\n",m);}程序運(yùn)行情況:m=-88m=65448《C語(yǔ)言程序設(shè)計(jì)》

24程序說(shuō)明:程序中定義m為無(wú)符號(hào)數(shù),并賦初值65448,對(duì)應(yīng)的二進(jìn)制編碼為1111111110101000。printf函數(shù)中的“%d”是輸出有符號(hào)整型數(shù)時(shí)指定的格式符,作為有符號(hào)數(shù)使用時(shí),最高為符號(hào)位,1表示負(fù)數(shù),存放數(shù)據(jù)1000000001011000(-88)的補(bǔ)碼。printf函數(shù)中的“%u”是輸出無(wú)符號(hào)整型數(shù)時(shí)指定的格式符,作為無(wú)符號(hào)數(shù)使用時(shí),最高為數(shù)據(jù)位,存放無(wú)符號(hào)的數(shù),值就是65448。《C語(yǔ)言程序設(shè)計(jì)》

25(3)有符號(hào)短整型(shortint或short)在TC中,該類型與int型等價(jià)。(4)無(wú)符號(hào)短整型(unsignedshortint或unsignedshort)在TC中,該類型與unsignedint型等價(jià)。(5)有符號(hào)長(zhǎng)整型(longint或long)在TC下這種變量占用4個(gè)字節(jié)(32位)的內(nèi)存單元,表示的數(shù)值范圍為-2147483648~2147483647(-231~231-1)?!禖語(yǔ)言程序設(shè)計(jì)》

26“%ld”是輸出有符號(hào)長(zhǎng)整型數(shù)時(shí)指定的格式符。(6)符號(hào)長(zhǎng)整型(unsignedlongint或unsignedlong)。在TC下這種變量占用4個(gè)字節(jié)(32位)的內(nèi)存單元,因?yàn)樽罡呶皇菙?shù)據(jù)位,不是符號(hào)位,此類型的值是非負(fù)的,表示的數(shù)值范圍為(0~4294967295)。《C語(yǔ)言程序設(shè)計(jì)》

27《C語(yǔ)言程序設(shè)計(jì)》

28實(shí)型數(shù)據(jù)1實(shí)型常量實(shí)型也稱為浮點(diǎn)型。實(shí)型常量又稱為實(shí)數(shù)或浮點(diǎn)數(shù),采用十進(jìn)制,有小數(shù)和指數(shù)兩種形式。(1)十進(jìn)制數(shù)形式:由數(shù)碼0~9和小數(shù)點(diǎn)組成。例如:0.0、25.0、5.678、0.12、5.0、300.、-123.4567等均為合法的實(shí)數(shù)。注意,必須有小數(shù)點(diǎn)或加后綴為“f”或“F”來(lái)表示該數(shù)為浮點(diǎn)數(shù)。如356f和356.是等價(jià)的。《C語(yǔ)言程序設(shè)計(jì)》

29(2)指數(shù)形式:由十進(jìn)制數(shù),加階碼標(biāo)志“e”或“E”以及階碼組成。其一般形式為:aEn表示a×10n。如:1.2E5(等于1.2×105)、3.8E-2(等于3.8×10-2)、0.5E5(等于0.5×105)、-4.1E-2(等于-4.1×10-2)以下不是合法的實(shí)數(shù):345(無(wú)小數(shù)點(diǎn))、E7(階碼標(biāo)志E之前無(wú)數(shù)字)、-5(無(wú)階碼標(biāo)志)、53.-E3(負(fù)號(hào)位置不對(duì))、2.7E(無(wú)階碼)《C語(yǔ)言程序設(shè)計(jì)》

30實(shí)數(shù)在內(nèi)存中的存放形式計(jì)算機(jī)中的實(shí)數(shù)是按整數(shù)部分為0的指數(shù)形式存放的,一般一個(gè)實(shí)數(shù)需要4個(gè)字節(jié)(32位)的內(nèi)存,最高位是符號(hào)位,存放該實(shí)數(shù)的符號(hào),后面31位,一部分存放實(shí)數(shù)的尾數(shù)部分,另一部分存放實(shí)數(shù)的階碼部分。尾數(shù)表示全為小數(shù)點(diǎn)右邊部分,沒(méi)有整數(shù)部分;具體的位數(shù)由各自的編譯器來(lái)決定。常用的浮點(diǎn)數(shù)的格式如表2-3所示?!禖語(yǔ)言程序設(shè)計(jì)》

31注意:對(duì)于浮點(diǎn)數(shù)來(lái)講,小數(shù)部分占的位數(shù)越多,它所能表示的精度越高,階碼部分占的位數(shù)越多,它所能表示的值越大。以浮點(diǎn)數(shù)562.5為例來(lái)看看它的的存放形式。562.5=0.5625×103則尾數(shù)a=(0.5625)10=(0.1001)2,階碼n=(3)10=(11)2《C語(yǔ)言程序設(shè)計(jì)》

322實(shí)型變量實(shí)型變量分為三類:?jiǎn)尉刃?float)、雙精度型(double)和長(zhǎng)雙精度型(longdouble)單精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為-3.4E-38~3.4E+38,有七位有效數(shù)字。雙精度型占8個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為-1.7E-308~1.7E+308,有16位有效數(shù)字。長(zhǎng)雙精度型占10個(gè)字節(jié)(80位)內(nèi)存空間,其數(shù)值范圍為-1.2E-4932~1.2E+4932,可提供18位有效數(shù)字?!禖語(yǔ)言程序設(shè)計(jì)》

33例如:floatx,y;(x,y為單精度實(shí)型量)doublea,b,c;(a,b,c為雙精度實(shí)型量)注意:實(shí)型常數(shù)在運(yùn)算時(shí)都按雙精度處理?!纠?-2】實(shí)型變量的精度。voidmain(){floata;doubleb;a=66666.66666;b=66666.1000000000066666;printf("%f\n%f\n",a,b);}《C語(yǔ)言程序設(shè)計(jì)》

34程序運(yùn)行情況:66666.66406266666.666667程序說(shuō)明:程序內(nèi)printf函數(shù)中的“%f”是輸出浮點(diǎn)數(shù)時(shí)指定的格式符。從本例可以看出,由于a是單精度浮點(diǎn)型,有效位數(shù)只有七位。而整數(shù)已占五位,故小數(shù)點(diǎn)后二位數(shù)字有效,后面四位數(shù)字是隨機(jī)的,沒(méi)有意義。b是雙精度型,有效位為十六位。但TurboC規(guī)定小數(shù)后最多保留六位,其余部分四舍五入?!禖語(yǔ)言程序設(shè)計(jì)》

35字符型數(shù)據(jù)字符型數(shù)據(jù)用來(lái)在計(jì)算機(jī)中表示英文字母、符號(hào)、和漢字等數(shù)據(jù)。1字符常量字符常量是用單引號(hào)括起來(lái)的一個(gè)字符。如‘a(chǎn)’,‘b’,‘=’,‘7’,‘?’都是合法字符常量。字符型數(shù)據(jù)占用一個(gè)字節(jié)(8位)的內(nèi)存單元,用于存放該字符號(hào)所對(duì)應(yīng)的ASCII碼的值(參見(jiàn)附錄1),從0~255,對(duì)應(yīng)256個(gè)字符。存放時(shí)與整型數(shù)據(jù)差別不大,只是數(shù)據(jù)表示的范圍小一些而已。《C語(yǔ)言程序設(shè)計(jì)》

36注意:字符常量只能用單引號(hào)括起來(lái),不能用雙引號(hào)或其它括號(hào)。字符可以是字符集中任意字符,但數(shù)字被定義為字符型之后存放的是該字符的ASCII碼。如'7'和7是不同的。2字符串常量字符串常量是由一對(duì)雙引號(hào)括起的字符序列。例如:“hello”,“Cprogram”,“$12.5”等都是合法的字符串常量?!禖語(yǔ)言程序設(shè)計(jì)》

37字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別:字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)。字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符??梢园岩粋€(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。在C語(yǔ)言中沒(méi)有相應(yīng)的字符串變量。但是可以用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串常量?!禖語(yǔ)言程序設(shè)計(jì)》

38字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個(gè)字節(jié)中存放字符'\0'(ASCII碼為0)。這是字符串結(jié)束的標(biāo)志,在輸出時(shí)從第一個(gè)字符開(kāi)始逐個(gè)輸出字符,遇到'\0'字符就停止輸出,注意'\0'是不可以顯示的字符,不能輸出?!禖語(yǔ)言程序設(shè)計(jì)》

39例如:字符串"hello"在內(nèi)存中存放形式如圖2-6所示:《C語(yǔ)言程序設(shè)計(jì)》

40字符常量'a'和字符串常量"a"雖然都只有一個(gè)字符,但在內(nèi)存中的情況是不同的。'a'在內(nèi)存中占一個(gè)字節(jié),可表示為:"a"在內(nèi)存中占二個(gè)字節(jié),可表示為:

aa\0《C語(yǔ)言程序設(shè)計(jì)》

413轉(zhuǎn)義字符轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜杠'\'開(kāi)頭,后跟一個(gè)或幾個(gè)特定的字符。轉(zhuǎn)義字符不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“\n”就是一個(gè)轉(zhuǎn)義字符,其意義不是“字母n”而是“回車(chē)換行”。轉(zhuǎn)義字符主要用來(lái)表示那些用一般字符不便于表示的控制代碼?!禖語(yǔ)言程序設(shè)計(jì)》

43表中的ddd和hh分別為八進(jìn)制和十六進(jìn)制的ASCII代碼。如果‘\’后面緊跟的三位數(shù)字字符是在000~377之間的,把他們當(dāng)做八進(jìn)制數(shù)來(lái)看待,如‘\101’表示字母‘A’,‘\134’表示反斜杠。注意:這三位字符的ASCII碼值應(yīng)該在0~255之間,超過(guò)255就出錯(cuò)。如'\1234'與'\411'均出錯(cuò)?!禖語(yǔ)言程序設(shè)計(jì)》

442、如果'\'后面跟的字符是8,9則不能表示八進(jìn)制。如"\81"表示'8'和'1'這2個(gè)字符。"\789"表示3個(gè)字符,其中'\7'表示蜂鳴聲,不作顯示。3、如果'\'后面緊跟的字符是x00~xFF之間的,則把他們當(dāng)做十六進(jìn)制數(shù)來(lái)看待;如'\x41'表示字符ASCII碼為65對(duì)應(yīng)的字符'A'。注意:x后最多只能跟兩位,超過(guò)就出錯(cuò)。如'\x41a'出錯(cuò)?!禖語(yǔ)言程序設(shè)計(jì)》

45【例2-3】轉(zhuǎn)義字符的使用。voidmain(){printf("\101\t\102\t\134\n");printf("\x41\\a3\b4\n");printf("\"Howdoyoudo!\'\n");printf("\789\n");printf("china\rC\n");}程序運(yùn)行情況:AB\A\a4"Howdoyoudo!'89China《C語(yǔ)言程序設(shè)計(jì)》

46程序說(shuō)明:程序的第一行輸出“A”之后就是“\t”,于是跳到下一制表位置(設(shè)制表位置間隔為8),在第9列顯示“B”,下面又遇到“\t”,又跳到下一制表位置,在第17列顯示“\t”,下面遇到“\n”,故回車(chē)換行;光標(biāo)移到下一行的開(kāi)頭。第二行輸出“A”之后就遇到是“\\”,輸出一個(gè)“\”,接著輸出“a3”后又遇到“\b”,使光標(biāo)從當(dāng)前位置后退一格。輸出的“4”將取代原來(lái)屏幕上該位置上顯示的字符“3”?!禖語(yǔ)言程序設(shè)計(jì)》

47第三行“\"”輸出的是“"”之后輸出“Howdoyoudo!”,接著又遇到“\'”,輸出的是“'”。第四行先輸出“china”,之后就遇到是“\r”,使光標(biāo)從當(dāng)前位置回到本行開(kāi)頭,接著輸出的字符“C”就取代原來(lái)屏幕上顯示的“c”,如后面還有字符就會(huì)繼續(xù)取代。就像黑板擦把原來(lái)的粉筆字擦掉一樣,不會(huì)留下痕跡?!禖語(yǔ)言程序設(shè)計(jì)》

48【例2-4】符號(hào)常量的使用。#definePI3.14159voidmain(){floats,r;r=5;s=PI*r*r;printf("s=%f\n",s);}程序運(yùn)行情況:s=78.539749《C語(yǔ)言程序設(shè)計(jì)》

495字符變量字符變量是用來(lái)存放一個(gè)字符常量的,字符變量的類型說(shuō)明符是char。例如:chara,b;每個(gè)字符變量被分配一個(gè)字節(jié)的內(nèi)存空間,字符值是以ASCII碼的形式存放在變量的內(nèi)存單元之中的。如x的十進(jìn)制ASCII碼是120,

y的十進(jìn)制ASCII碼是121。《C語(yǔ)言程序設(shè)計(jì)》

50對(duì)字符變量a,b賦予'x'和'y'值:a='x';b='y';實(shí)際上是在a,b兩個(gè)單元內(nèi)存放120和121的二進(jìn)制代碼:a:

01111000b:

01111001所以也可以把它們看成是整型量。C語(yǔ)言允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。整型量為二字節(jié)量,字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時(shí),只有低八位字節(jié)參與處理?!禖語(yǔ)言程序設(shè)計(jì)》

51【例2-5】字符變量的使用。voidmain(){chara,b;a=120;b=121;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序運(yùn)行情況:x,y120,121《C語(yǔ)言程序設(shè)計(jì)》

52【例2-6】大寫(xiě)字母換成小寫(xiě)字母。voidmain(){chara,b;a='X';b='Y';a=a+32;b=b+32;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序運(yùn)行情況:x,y120,121《C語(yǔ)言程序設(shè)計(jì)》

53運(yùn)算符和表達(dá)式運(yùn)算符可分為以下幾類:1、算術(shù)運(yùn)算符用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。2、關(guān)系運(yùn)算符用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六種?!禖語(yǔ)言程序設(shè)計(jì)》

543、邏輯運(yùn)算符用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。4、位操作運(yùn)算符參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種?!禖語(yǔ)言程序設(shè)計(jì)》

555、賦值運(yùn)算符用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。6、條件運(yùn)算符這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。7、逗號(hào)運(yùn)算符用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。《C語(yǔ)言程序設(shè)計(jì)》

568、指針運(yùn)算符用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。9、求字節(jié)數(shù)運(yùn)算符用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。10、特殊運(yùn)算符有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。《C語(yǔ)言程序設(shè)計(jì)》

57如果根據(jù)運(yùn)算符所帶的運(yùn)算對(duì)象的個(gè)數(shù)進(jìn)行分類,可以分為以下三類。1、單目運(yùn)算符:只需用一個(gè)運(yùn)算對(duì)象,例如:正(+)、負(fù)(-)運(yùn)算符,求字節(jié)運(yùn)算符等都是單目運(yùn)算符。2、雙目運(yùn)算符:需用兩個(gè)運(yùn)算對(duì)象,C語(yǔ)言的運(yùn)算符絕大部分都是雙目運(yùn)算符,例如:加(+)、減(-)、乘(*)、除(/)等都是雙目運(yùn)算符。3、三目運(yùn)算符:需用三個(gè)運(yùn)算對(duì)象,條件運(yùn)算符是C語(yǔ)言中唯一的三目運(yùn)算符?!禖語(yǔ)言程序設(shè)計(jì)》

58學(xué)習(xí)運(yùn)算符和表達(dá)式要抓住兩點(diǎn):優(yōu)先級(jí)和結(jié)合性。C語(yǔ)言中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15級(jí)。1級(jí)最高,15級(jí)最低。運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。C語(yǔ)言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左),例如算術(shù)運(yùn)算符的結(jié)合性是自左至右,而自右至左的結(jié)合方向稱為“右結(jié)合性”。最典型的右結(jié)合性運(yùn)算符是賦值運(yùn)算符?!禖語(yǔ)言程序設(shè)計(jì)》

59算術(shù)運(yùn)算符與算術(shù)表達(dá)式1、算術(shù)運(yùn)算符:(1)加法運(yùn)算符(“+”)雙目運(yùn)算符,如a+b,4+8等具有左結(jié)合性。(2)減法運(yùn)算符(“-”)雙目運(yùn)算符。但“-”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如-x,-5等具有右結(jié)合性。(3)乘法運(yùn)算符(“*”)雙目運(yùn)算,具有左結(jié)合性。(4)除法運(yùn)算符(“/”)雙目運(yùn)算具有左結(jié)合性?!禖語(yǔ)言程序設(shè)計(jì)》

60參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型?!纠?-7】除法運(yùn)算符的使用。voidmain(){printf("\n%d,%d\n",23/6,-23/6);printf("%f,%f\n",23.0/6,-23.0/6);}程序運(yùn)行情況:3,-33.833333,-3.833333《C語(yǔ)言程序設(shè)計(jì)》

61(5)求余運(yùn)算符(模運(yùn)算符“%”)雙目運(yùn)算,具有左結(jié)合性。要求參與運(yùn)算的量均為整型。余數(shù)的符號(hào)與被除數(shù)的符號(hào)相同?!纠?-8】求余運(yùn)算符的使用。voidmain(){printf("%d,%d\n",100%3,-100%3);printf("%d,%d\n",100%(-3),-100%(-3));}程序運(yùn)行情況:1,-11,-1《C語(yǔ)言程序設(shè)計(jì)》

62(6)自增運(yùn)算符(“++”)其功能是使變量的值自增1,為單目運(yùn)算,具有右結(jié)合性。有以下兩種形式:++ii自增1后再參與其它運(yùn)算。i++i參與運(yùn)算后,i的值再自增1。注意,它們都能使變量增加1,但當(dāng)它們參與其他運(yùn)算時(shí)作用不同。《C語(yǔ)言程序設(shè)計(jì)》

63如果當(dāng)a=5時(shí)①++a表達(dá)式的值為6,且a=6②a++表達(dá)式的值為5,且a=6③b=++a等價(jià)于a=a+1;b=a表達(dá)式的值為6,且a=6,b=6④b=a++等價(jià)于b=a;a=a+1表達(dá)式的值為5,且a=6,b=5⑤b=-a++等價(jià)于b=-a;a=a+1表達(dá)式的值為-5,且a=6,b=-5《C語(yǔ)言程序設(shè)計(jì)》

64(7)自減1運(yùn)算符(“--”)其功能是使變量值自減1,為單目運(yùn)算,具有右結(jié)合性。與自增運(yùn)算符類似,自減運(yùn)算符也有以下兩種形式:--aa自減1后再參與其它運(yùn)算。a--a參與運(yùn)算后,a的值再自減1。注意,它們都能使變量減小1,但當(dāng)它們參與其他運(yùn)算時(shí)作用不同。特別是當(dāng)它們出現(xiàn)在較復(fù)雜的表達(dá)式或語(yǔ)句中時(shí),常常難于弄清,因此應(yīng)仔細(xì)分析。《C語(yǔ)言程序設(shè)計(jì)》

65【例2-9】自增自減運(yùn)算符的混合使用。voidmain(){inta=8;printf("%d",++a);printf("%d",--a);printf("%d",a++);printf("%d",a--);printf("%d",-a++);printf("%d\n",-a--);}程序運(yùn)行情況:9889-8-9《C語(yǔ)言程序設(shè)計(jì)》

662、算術(shù)表達(dá)式算術(shù)表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符組合起來(lái)的式子。一個(gè)表達(dá)式有一個(gè)值及其類型。以下是算術(shù)表達(dá)式的例子:a+b、(a*2)/c、(x+r)*8-(a+b)/7、++i、sin(x)+sin(y)、(++i)-(j++)+(k--)算術(shù)表達(dá)中要注意多個(gè)運(yùn)算符的處理。如:a+++b在處理時(shí)自左至右的將若干個(gè)字符組成一個(gè)運(yùn)算符。即理解為(a++)+b,而不是a+(++b),為避免二義性,寫(xiě)時(shí)最好加上括號(hào),讓大家都能理解你的程序?!禖語(yǔ)言程序設(shè)計(jì)》

67在多數(shù)系統(tǒng)中,函數(shù)調(diào)用時(shí)的求值順序是自右至左的。如給a賦初值為8;則執(zhí)行語(yǔ)句printf("%d,%d",a,++a);后的輸出結(jié)果為9,9。執(zhí)行語(yǔ)句printf("%d,%d,%d,%d\n",a,++a,a++,--a);后的輸出結(jié)果為9,9,7,7。但這種寫(xiě)法不宜提倡,為了不至于讓別人難于理解,最好改寫(xiě)成:b=++a;c=a++;d=--a;printf("%d,%d,%d,%d\n",a,b,c,d);《C語(yǔ)言程序設(shè)計(jì)》

68【例2-10】分析程序的輸出結(jié)果,注意其中的算術(shù)表達(dá)式。voidmain(){inti=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf("%d,%d,%d,%d",p,q,i,j);}程序運(yùn)行情況:15,24,8,8《C語(yǔ)言程序設(shè)計(jì)》

69【例2-11】上例程序的改寫(xiě)。voidmain(){inti=5,j=5,a,b,c,p,q;a=i++;b=i++;c=i++;p=a+b+c;a=++j;b=++j;c=++j;q=a+b+c;printf("%d,%d,%d,%d",p,q,i,j);}程序運(yùn)行情況:18,21,8,8《C語(yǔ)言程序設(shè)計(jì)》

703賦值運(yùn)算符與賦值表達(dá)式1、簡(jiǎn)單賦值運(yùn)算符及表達(dá)式簡(jiǎn)單賦值運(yùn)算符記為“=”。由“=”連接的式子稱為賦值表達(dá)式。其一般形式為:變量=表達(dá)式例如:x=3、x=a+b賦值運(yùn)算符具有右結(jié)合性。因此a=b=c=5可理解為a=(b=(c=5))。《C語(yǔ)言程序設(shè)計(jì)》

71凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。例如,式子x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a(bǔ),b相加,和賦予x,故x應(yīng)等于13。按照C語(yǔ)言規(guī)定,任何表達(dá)式在其未尾加上分號(hào)就構(gòu)成為語(yǔ)句。因此如x=8;a=b=c=5;都是賦值語(yǔ)句,在前面各例中我們已大量使用過(guò)了?!禖語(yǔ)言程序設(shè)計(jì)》

722、復(fù)合賦值符及表達(dá)式在賦值符“=”之前加上其它二目運(yùn)算符可構(gòu)成復(fù)合賦值符??梢允褂?0種復(fù)合運(yùn)算符:即+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。構(gòu)成復(fù)合賦值表達(dá)式的一般形式為:變量運(yùn)算符=表達(dá)式它等效于變量=變量運(yùn)算符表達(dá)式例如:a+=5等價(jià)于a=a+5;

x*=y+7等價(jià)于x=x*(y+7)

r%=p等價(jià)于r=r%p《C語(yǔ)言程序設(shè)計(jì)》

73【例2-12】賦值表達(dá)式的使用。voidmain(){inta=8,b=10;printf("%d\t",a+=a%=a%3);printf("%d\n",b*=b+=b/=b);}程序運(yùn)行情況:04《C語(yǔ)言程序設(shè)計(jì)》

74注意:1、賦值語(yǔ)句“=”左邊必須是變量名,不能是常量或表達(dá)式。例如:30=x和y+2=9;都是錯(cuò)誤的。2、賦值語(yǔ)句中的“=”表示賦值,不是數(shù)學(xué)中的相等的意思,表示相等要用到關(guān)系運(yùn)算符“==”表示。二者不要混淆?!禖語(yǔ)言程序設(shè)計(jì)》

754數(shù)據(jù)的類型轉(zhuǎn)換C語(yǔ)言變量的數(shù)據(jù)類型可以相互轉(zhuǎn)換,轉(zhuǎn)換的方法有兩種,一種是自動(dòng)轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。自動(dòng)轉(zhuǎn)換如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號(hào)右邊的類型換成左邊的類型。具體規(guī)定如下:(1)實(shí)型與整型相互轉(zhuǎn)換:①實(shí)型賦予整型,舍去小數(shù)部分?!禖語(yǔ)言程序設(shè)計(jì)》

76②整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。(2)double型與float型相互轉(zhuǎn)換:①double型賦予float型,截取前面7位有效數(shù)字,因?yàn)閐ouble型表示的范圍大,轉(zhuǎn)換成float時(shí)應(yīng)注意只有在float型表示的范圍(-3.4E-38~3.4E+38)內(nèi)才能轉(zhuǎn)換,否則出現(xiàn)數(shù)值溢出錯(cuò)誤。②float型賦予double型,數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)存放?!禖語(yǔ)言程序設(shè)計(jì)》

77(3)字符型與整型相互轉(zhuǎn)換①字符型賦予整型,將字符的ASCII碼值放到整型量的低八位中,高八位分兩種情況。如果系統(tǒng)將字符處理為無(wú)符號(hào)的字符類型,整型變量高八位全補(bǔ)0;如果系統(tǒng)將字符處理為帶符號(hào)的字符類型,此時(shí)若字符的最高位為0,則高八位全補(bǔ)0;此時(shí)若字符的最高位為1,則高八位全補(bǔ)1。《C語(yǔ)言程序設(shè)計(jì)》

78也就是說(shuō):字符作為無(wú)符號(hào)數(shù)時(shí),整型變量的值與該字符的ASCII碼相同;作為有符號(hào)數(shù)時(shí),字符的ASCII碼在0~127之間時(shí),整型變量與該字符的ASCII碼相同;字符的ASCII碼在128~255之間時(shí),整型變量的值為該字符的ASCII碼減去256,范圍在-128~-1之間。【例2-13】字符變量的使用。程序示例《C語(yǔ)言程序設(shè)計(jì)》

79②整型賦予字符型,高八位截去,只把低八位賦予字符量?!纠?-14】大于255的整數(shù)賦予字符變量。voidmain(){chara,b;a=376;b=889;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序運(yùn)行情況:x,y120,121《C語(yǔ)言程序設(shè)計(jì)》

80【例2-15】小于0的整數(shù)賦予字符變量。(4)無(wú)符號(hào)整型與有符號(hào)整型的相互轉(zhuǎn)換①無(wú)符號(hào)整型賦予有符號(hào)整型,原樣賦值,將數(shù)值中的高位當(dāng)做符號(hào)位處理。②有符號(hào)整型賦予無(wú)符號(hào)整型,原樣賦值,把原來(lái)的符號(hào)位也作為數(shù)值一起傳送?!纠?-16】無(wú)符號(hào)整型與有符號(hào)整型的相互轉(zhuǎn)換。程序示例程序示例《C語(yǔ)言程序設(shè)計(jì)》

81(5)int型和long型的相互轉(zhuǎn)換①int型賦予long型,在內(nèi)存中以4個(gè)字節(jié)存放,數(shù)值低16位不變,正數(shù)高16位補(bǔ)0,負(fù)數(shù)高16位補(bǔ)1,以保持?jǐn)?shù)值不變。②long型賦予int型,只把低16位送到int型變量中?!纠?-17】自動(dòng)類型轉(zhuǎn)換的綜合使用。程序示例《C語(yǔ)言程序設(shè)計(jì)》

82【例2-18】例2-17的改寫(xiě)。voidmain(){inta,b=322;floatx,y=8.88;charc1='k',c2;printf("%d,%f,%d,%c",a=y,x=b,a=c1,c2=b);}程序運(yùn)行情況:107,322.000000,107,B《C語(yǔ)言程序設(shè)計(jì)》

832、強(qiáng)制轉(zhuǎn)換其一般形式為:(類型說(shuō)明符)(表達(dá)式)其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說(shuō)明符所表示的類型。例如:(float)a把a(bǔ)轉(zhuǎn)換為實(shí)型(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型注意:(1)類型說(shuō)明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào)),如把(int)(x+y)寫(xiě)成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。《C語(yǔ)言程序設(shè)計(jì)》

84(2)無(wú)論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說(shuō)明時(shí)對(duì)該變量定義的類型。【例2-19】強(qiáng)制轉(zhuǎn)換的使用。voidmain(){floatf=5.75;printf("f=%f,(int)f=%d,(int)f%%2=%d\n",f,(int)f,(int)f%2);}程序運(yùn)行情況:f=5.750000,(int)f=5,(int)f%2=1《C語(yǔ)言程序設(shè)計(jì)》

85各類數(shù)值型數(shù)據(jù)之間的混合運(yùn)算各類型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換時(shí)遵循以下規(guī)則:按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時(shí),先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算?!禖語(yǔ)言程序設(shè)計(jì)》

86char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入?!禖語(yǔ)言程序設(shè)計(jì)》

87《C語(yǔ)言程序設(shè)計(jì)》

88【例2-20】不同類型數(shù)據(jù)之間的混合運(yùn)算。voidmain(){charch='a';inti=4;floatf=3.567;doubled=1.2345;printf("%f\n",ch/i+f*d-(f+i));}程序運(yùn)行情況:20.836461《C語(yǔ)言程序設(shè)計(jì)》

89

關(guān)系運(yùn)算符和表達(dá)式1、關(guān)系運(yùn)算符在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在C語(yǔ)言提供的關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為自左至右。《C語(yǔ)言程序設(shè)計(jì)》

90表2-5C語(yǔ)言的關(guān)系運(yùn)算符《C語(yǔ)言程序設(shè)計(jì)》

91在六個(gè)關(guān)系運(yùn)算符中,<=,>=,==和!=都由兩個(gè)字符組成,之間不能有空格。<,<=,>,>=的優(yōu)先級(jí)相同,高于==和!=,==和!=的優(yōu)先級(jí)相同。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。要注意區(qū)別“==”和“=”《C語(yǔ)言程序設(shè)計(jì)》

922、關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)運(yùn)算對(duì)象連接起來(lái)的式子稱為關(guān)系表達(dá)式。其中運(yùn)算對(duì)象可以是常量、變量或表達(dá)式。關(guān)系表達(dá)式的一般形式為:表達(dá)式關(guān)系運(yùn)算符表達(dá)式關(guān)系表達(dá)式的運(yùn)算結(jié)果有兩種:“真”和“假”,分別用“1”和“0”表示。如:5>0的值為“真”(1)。(a=3)>(b=5)由于3>5不成立,故其值為假(0)。《C語(yǔ)言程序設(shè)計(jì)》

93【例2-21】若有如下定義:charc='d';inta=2,b=5;floatx=3.1415,y=0.00001;求下列各表達(dá)式的值。(1)a+3>=b-2(2)'a'+1<c(3)a=b>c(4)a==2<x(5)b>a>110001《C語(yǔ)言程序設(shè)計(jì)》

94

邏輯運(yùn)算符和表達(dá)式1、邏輯運(yùn)算符C語(yǔ)言中提供了三種邏輯運(yùn)算符:(1)&&與運(yùn)算(2)||或運(yùn)算(3)!非運(yùn)算“&&”和“||”均為雙目運(yùn)算符。具有左結(jié)合性?!?”為單目運(yùn)算符,具有右結(jié)合性。《C語(yǔ)言程序設(shè)計(jì)》

95邏輯運(yùn)算符按“!(非)→&&(與)→||(或)”的優(yōu)先次序,其中“!”的優(yōu)先級(jí)為三者最高,并且“!”高于算術(shù)運(yùn)算符,“&&”和“||”低于關(guān)系運(yùn)算符。《C語(yǔ)言程序設(shè)計(jì)》

96按照運(yùn)算符的優(yōu)先順序可以得出:a>b&&c>d等價(jià)于(a>b)&&(c>d)!b==c||d<a等價(jià)于((!b)==c)||(d<a)a+b>c&&x+y<b等價(jià)于((a+b)>c)&&((x+y)<b)2、邏輯運(yùn)算的值邏輯運(yùn)算的值也為“真”和“假”兩種,用“1”和“0”來(lái)表示。其求值規(guī)則如下:《C語(yǔ)言程序設(shè)計(jì)》

97(1)與運(yùn)算&&:參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。例如:5>0&&4>2結(jié)果為真。(2)或運(yùn)算||:參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。例如:5>0||5>8結(jié)果也為真。(3)非運(yùn)算!:參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(5>0)的結(jié)果為假?!禖語(yǔ)言程序設(shè)計(jì)》

98C語(yǔ)言規(guī)定,以“0”代表“假”,以非“0”的數(shù)值作為“真”。例如:5&&3的值為"真",即為1。又如:5||0的值為“真”,即為1。3、邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。邏輯表達(dá)式的一般形式為:表達(dá)式邏輯運(yùn)算符表達(dá)式《C語(yǔ)言程序設(shè)計(jì)》

99其中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。例如:(a&&b)&&c根據(jù)邏輯運(yùn)算符的左結(jié)合性,該式也可寫(xiě)為:a&&b&&c邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。《C語(yǔ)言程序設(shè)計(jì)》

100【例2-22】求邏輯表達(dá)式的值。voidmain(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}程序運(yùn)行情況:0,01,00,1《C語(yǔ)言程序設(shè)計(jì)》

101注意:在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行。例如:(1)a&&b&&c,當(dāng)a為假(0)時(shí),表達(dá)式的值已確定為假,此時(shí)就不必判斷b和c。當(dāng)a為真(非0)時(shí),才需用判斷b的值,如果b為假(0)時(shí),表達(dá)式的值已確定為假,此時(shí)就不必判斷c;如果b為真(非0)時(shí),才需用判斷C。(2)a||b||c,當(dāng)a為真(非0)時(shí),就不必判斷b和c。當(dāng)a為假(0)時(shí),才判斷b,a和b為假才判斷c?!禖語(yǔ)言程序設(shè)計(jì)》

102也就是說(shuō),對(duì)運(yùn)算符&&來(lái)說(shuō),只有第一項(xiàng)非0,才繼續(xù)后面的運(yùn)算;對(duì)運(yùn)算符||來(lái)說(shuō),只有第一項(xiàng)為0,才繼續(xù)后面的運(yùn)算。因此如果有下面的邏輯表達(dá)式:++a||++b&&++c;已知a=b=c=1且均為int類型變量,因?yàn)閍的值為1,++a的值為非0,此時(shí)后面運(yùn)算不被執(zhí)行,變量b的值仍為1?!禖語(yǔ)言程序設(shè)計(jì)》

103條件運(yùn)算符與條件表達(dá)式條件運(yùn)算符是由字符“?”和“:”組成,要求有三個(gè)參與運(yùn)算的量,是C語(yǔ)言里唯一一個(gè)三目運(yùn)算符。由條件運(yùn)算符組成條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。《C語(yǔ)言程序設(shè)計(jì)》

104【例2-23】輸入兩個(gè)數(shù),輸出較大的一個(gè)。voidmain(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);printf("max=%d",a>b?a:b);}程序運(yùn)行情況:inputtwonumbers:

6,9↙max=9《C語(yǔ)言程序設(shè)計(jì)》

105使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):1、條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值運(yùn)算符。因此max=(a>b)?a:b可以去掉括號(hào)而寫(xiě)為max=a>b?a:b2、條件運(yùn)算符?和:是一對(duì)運(yùn)算符,不能分開(kāi)單獨(dú)使用。3、條件運(yùn)算符的結(jié)合方向是自右至左。如:a>b?a:c>d?c:d理解為:a>b?a:(c>d?c:d)這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條件表達(dá)式。《C語(yǔ)言程序設(shè)計(jì)》

106【例2-24】輸入一個(gè)字符,判別它是否大寫(xiě)字母,如果是,將它轉(zhuǎn)換成小寫(xiě)字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。voidmain(){charch;printf("\ninputchar:");scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("\noutputchar:%c\n",ch);}}程序運(yùn)行情況:inputchar:Woutputchar:w《C語(yǔ)言程序設(shè)計(jì)》

107逗號(hào)運(yùn)算符其一般形式為:表達(dá)式1,表達(dá)式2,……表達(dá)式n逗號(hào)運(yùn)算符的優(yōu)先級(jí)是最低的,并且具有左結(jié)合性。表達(dá)式的求值順序是從左向右依次計(jì)算用逗號(hào)分隔的各表達(dá)式的值,以最后一個(gè)表達(dá)式的值作為整個(gè)逗號(hào)表達(dá)式的值。例如:(1)a=4,b=a++,b++的值為4;(2)a=4,b=a++,++b的值為5;(3)(a=4,a*4),a++的值為4;(4)a=(a=4,a*4),++a的值為17;《C語(yǔ)言程序設(shè)計(jì)》

108對(duì)于逗號(hào)表達(dá)式還要說(shuō)明兩點(diǎn):1、程序中使用逗號(hào)表達(dá)式,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值,此種情況最常用于循環(huán)語(yǔ)句中。2、并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說(shuō)明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。例如:printf("%d,%d,%d",a,b,c);中"a,b,c"是函數(shù)的參數(shù),不是逗號(hào)表達(dá)式。《C語(yǔ)言程序設(shè)計(jì)》

109求字節(jié)數(shù)運(yùn)算符C語(yǔ)言提供了一個(gè)能獲取變量和數(shù)據(jù)類型所占內(nèi)存大小(字節(jié)數(shù))的運(yùn)算符sizeof。其使用格式為:sizeof表達(dá)式或sizeof(數(shù)據(jù)類型名或表達(dá)式)例如:sizeof(int)的值為2;sizeof(float)的值為4;sizeof1.0的值為8;表明浮點(diǎn)型常量當(dāng)做雙精度處理。注意:sizeof運(yùn)算的優(yōu)先級(jí)較高,與++,--運(yùn)算同級(jí),且sizeof之間沒(méi)有空格。《C語(yǔ)言程序設(shè)計(jì)》

110位運(yùn)算符C語(yǔ)言提供了六種位運(yùn)算符:包括按位與(&)、按位或(|)、按位取反(~)、按位異或(^)、左移(<<)、右移(>>)。1、按位與運(yùn)算按位與運(yùn)算符“&”是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相與。只有對(duì)應(yīng)的兩個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為1,否則為0。參與運(yùn)算的數(shù)以補(bǔ)碼方式出現(xiàn)。如:9&5=1?!禖語(yǔ)言程序設(shè)計(jì)》

1112、按位或運(yùn)算按位或運(yùn)算符“|"是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。參與運(yùn)算的兩個(gè)數(shù)均以補(bǔ)碼出現(xiàn)。例如:可見(jiàn)9|5=13。3、按位異或運(yùn)算按位異或運(yùn)算符“^”是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相異或,當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1。參與運(yùn)算數(shù)仍以補(bǔ)碼出現(xiàn),例如9^5=12?!禖語(yǔ)言程序設(shè)計(jì)》

1124、求反運(yùn)算求反運(yùn)算符“~”為單目運(yùn)算符,具有右結(jié)合性。其功能是對(duì)參與運(yùn)算的數(shù)的各二進(jìn)位按位求反。例如:~9的運(yùn)算為:~(1000000000001001)結(jié)果為:

1000000000010110(十進(jìn)制65526)《C語(yǔ)言程序設(shè)計(jì)》

1135、左移運(yùn)算左移運(yùn)算符“<<”是雙目運(yùn)算符。其功能把“<<”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。《C語(yǔ)言程序設(shè)計(jì)》

114如:a<<4指把a(bǔ)的各二進(jìn)位向左移動(dòng)4位。如a=00000011(十進(jìn)制3),左移4位后為00110000(十進(jìn)制48)。6、右移運(yùn)算右移運(yùn)算符“>>”是雙目運(yùn)算符。其功能是把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動(dòng)的位數(shù)。例如:設(shè)a=15,則a>>2表示把000001111右移為00000011(十進(jìn)制3)。《C語(yǔ)言程序設(shè)計(jì)》

1157、位運(yùn)算賦值運(yùn)算符位運(yùn)算符與賦值運(yùn)算符可以組成復(fù)合賦值運(yùn)算符,有<<=,>>=,&=,^=,|=5種。例如:a&=b相當(dāng)于a=a&b;a>>=2相當(dāng)于a=a>>2。《C語(yǔ)言程序設(shè)計(jì)》

116【例2-25】位運(yùn)算綜合實(shí)例。voidmain(){charb='b',c='a';intx,y,d;x=12;y=(x<<4)|b;c&=y;d=(~c&0xff00)>>8;printf("x=%dy=%dc=%dd=%d\n",x,y,c,d);}程序運(yùn)行情況:x=12y=226c=96d=255《C語(yǔ)言程序設(shè)計(jì)》

117注意:1、移位運(yùn)算符“>>”和“<<”兩邊必須都是整型數(shù),否則非法;每左移一位相當(dāng)于“>>”左邊的值乘以2,每右移一位相當(dāng)于“<<”左邊的值除以2。2、位運(yùn)算是C語(yǔ)言的一種特殊運(yùn)算功能,它是以二進(jìn)制位為單位進(jìn)行運(yùn)算的。位運(yùn)算符只有邏輯運(yùn)算和移位運(yùn)算兩類。位運(yùn)算符可以與賦值符一起組成復(fù)合賦值符。如&=,|=,^=,>>=,<<=等。3、利用位運(yùn)算可以完成匯編語(yǔ)言的某些功能,如置位,位清零,移位等。還可進(jìn)行數(shù)據(jù)的壓縮存儲(chǔ)和并行運(yùn)算?!禖語(yǔ)言程序設(shè)計(jì)》

118運(yùn)算符的優(yōu)先級(jí)和結(jié)合性在計(jì)算表達(dá)式的值時(shí),先操作優(yōu)先級(jí)高的運(yùn)算符,當(dāng)優(yōu)先級(jí)相同時(shí),還要根據(jù)運(yùn)算符的結(jié)合性確定計(jì)算的先后順序。表2-6列出了本章所介紹的運(yùn)算符的優(yōu)先級(jí)及其結(jié)合性。有了優(yōu)先級(jí)的知識(shí),就可以準(zhǔn)確地判斷表達(dá)式0XF0F0&0X1020+0X0B0B<<5/2的值。該表達(dá)式等價(jià)于(0XF0F0&((0X1020+0X0B0B)<<(5/2))),《C語(yǔ)言程序設(shè)計(jì)》

120常用庫(kù)函數(shù)的使用庫(kù)是函數(shù)的一個(gè)集合。一個(gè)庫(kù)文件中存放著每個(gè)函數(shù)的名稱、參數(shù)、該函數(shù)的目標(biāo)代碼,以及連接過(guò)程所必需的重新定位信息。1、文件包含方法:在程序開(kāi)頭用以下預(yù)編譯命令:#include

"頭文件名"或#include<頭文件名>。例如:#include"stdio.h"或#include"math.h"文件包含命令的功能是把指定的文件插入該命令行位置取代該命令行,從而把指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件?!禖語(yǔ)言程序設(shè)計(jì)》

121說(shuō)明包含命令中的文件名可以用雙引號(hào)括起來(lái),也可以用尖括號(hào)括起來(lái)。#include"s

溫馨提示

  • 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)論