第2章數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式1_第1頁(yè)
第2章數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式1_第2頁(yè)
第2章數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式1_第3頁(yè)
第2章數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式1_第4頁(yè)
第2章數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式1_第5頁(yè)
已閱讀5頁(yè),還剩79頁(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)介

本章導(dǎo)讀

數(shù)據(jù)是程序處理的對(duì)象,是程序設(shè)計(jì)中的重要組成部分。C語(yǔ)言提供了豐富的數(shù)據(jù)類(lèi)型和運(yùn)算符及語(yǔ)法規(guī)則。內(nèi)容:C語(yǔ)言的基本數(shù)據(jù)類(lèi)型、標(biāo)識(shí)符和關(guān)鍵字、常量和變量,運(yùn)算符與表達(dá)式以及數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換等。要求:掌握C語(yǔ)言數(shù)據(jù)和數(shù)據(jù)類(lèi)型的相關(guān)知識(shí),熟練掌握運(yùn)算符和表達(dá)式的使用方法。2.1.1數(shù)據(jù)類(lèi)型概述整型(int)數(shù)據(jù)類(lèi)型基本類(lèi)型整型單精度型(float)字符型(char)長(zhǎng)整型(long)短整型(short)實(shí)型雙精度型(double)枚舉類(lèi)型(enum)(第9章)共用體類(lèi)型(union)(第9章)構(gòu)造類(lèi)型結(jié)構(gòu)體類(lèi)型(struct)(第9章)數(shù)組類(lèi)型(第6章)空類(lèi)型(void)指針類(lèi)型(*)(第8章)§2.1

數(shù)據(jù)類(lèi)型2.1.2整型

根據(jù)存儲(chǔ)長(zhǎng)度的不同,C語(yǔ)言中的整型又可分為:基本整型:int無(wú)符號(hào)基本整型:unsignedint短整型:short/shortint無(wú)符號(hào)短整型:unsignedshort/unsignedshortint長(zhǎng)整型:long/longint無(wú)符號(hào)長(zhǎng)整型:unsignedlong/unsignedlongint§2.1

數(shù)據(jù)類(lèi)型表2-1整數(shù)類(lèi)型類(lèi)型字節(jié)數(shù)取值范圍int2-32768~

32767即

-215~(215–1)unsignedint20~

65535即

0~(216–1)short2-32768~

32767即

-215~(215-1)unsignedshort20~

65535即

0~(216-1)long4-2147483648~2147483647即

-231~(231-1)unsignedlong40~4294967295即

0~(232-1)§2.1.3實(shí)型

實(shí)數(shù)類(lèi)型的數(shù)據(jù)即通常的實(shí)型數(shù)據(jù),例如123.45、-36.9、0.6等。

由于計(jì)算機(jī)中存儲(chǔ)實(shí)型數(shù)據(jù)時(shí)小數(shù)點(diǎn)位置不確定,C語(yǔ)言中實(shí)型數(shù)據(jù)又稱(chēng)浮點(diǎn)型數(shù)據(jù)。TurboC提供了三種表示實(shí)數(shù)的類(lèi)型:?jiǎn)尉雀↑c(diǎn)數(shù)類(lèi)型float;雙精度浮點(diǎn)數(shù)類(lèi)型double;長(zhǎng)雙精度類(lèi)型longdouble。

所有整數(shù)類(lèi)型和實(shí)數(shù)類(lèi)型統(tǒng)稱(chēng)為算術(shù)類(lèi)型。表2-2實(shí)數(shù)類(lèi)型類(lèi)型字節(jié)數(shù)有效數(shù)字?jǐn)?shù)值范圍float47-3.4×10-38~

3.4×1038double816-1.7×10-308~

1.7×10308longdouble1019-3.4×10-4932~

3.4×104932以上數(shù)據(jù)為理論上的參考數(shù)據(jù),實(shí)際上不同機(jī)器可能有差異,例如在有的機(jī)器上測(cè)試為:-1.2E-38~3.4E+38(float)-2.3E-308~1.7E+308(double)-9.0E-4928~6.3E+4931(longdouble)。注意:在TurboC2.0中默認(rèn)輸出6位小數(shù),輸出double時(shí)加l修飾,輸出longdouble加L修飾。

§2.1.4字符型字符類(lèi)型的數(shù)據(jù)即通常的字符。C語(yǔ)言中字符數(shù)據(jù)的書(shū)寫(xiě)形式是用單引號(hào)括起的單個(gè)字符,例如用‘a(chǎn)’、‘B’、‘4’分別表示a、B、4字符等,以與源程序中所用的字符相區(qū)別。

字符數(shù)據(jù)主要用于表示信息,例如程序的輸入和輸出信息。

字符類(lèi)型的數(shù)據(jù)包括計(jì)算機(jī)所用編碼字符集中的所有字符。常用的ASCII字符集,其中的字符包括所有大小寫(xiě)英文字母、數(shù)字、各種標(biāo)點(diǎn)符號(hào)字符,還有一些控制字符,一共128個(gè)。擴(kuò)展的ASCII字符集包括ASCII字符集中的全部字符和另外的128個(gè)字符,總共256個(gè)字符。

字符類(lèi)型數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是它的ASCII碼編碼值,例如'A'和'8'分別存儲(chǔ)ASCII值65和56。一個(gè)字符通常占用內(nèi)存一個(gè)字節(jié)。§2.1.4字符型ASCII的相關(guān)知識(shí)美國(guó)標(biāo)準(zhǔn)信息交換標(biāo)準(zhǔn)碼

(AmericanStandardCodeforInformationInterchange,ASCII)

在計(jì)算機(jī)中,所有的數(shù)據(jù)在存儲(chǔ)和運(yùn)算時(shí)都要使用二進(jìn)制數(shù)表示(因?yàn)橛?jì)算機(jī)比較傻,只有0和1兩位數(shù)的二進(jìn)制比較適合于它使用),同樣的,象a、b、c、d這樣的52個(gè)字母(包括大寫(xiě))、以及0、1、2等數(shù)字還有一些常用的符號(hào)(例如*、#、@等)在計(jì)算機(jī)中存儲(chǔ)時(shí)也要使用二進(jìn)制數(shù)來(lái)表示,而具體用哪個(gè)數(shù)字表示哪個(gè)符號(hào),當(dāng)然每個(gè)人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通訊而不造成混亂,那么大家就必須使用相同的編碼規(guī)則,于是美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織就出臺(tái)了所謂的ASCII編碼,統(tǒng)一規(guī)定了上述常用符號(hào)用哪個(gè)二進(jìn)制數(shù)來(lái)表示。ASCII碼使用指定的7位或8位二進(jìn)制數(shù)組合來(lái)表示128或256種可能的字符。標(biāo)準(zhǔn)ASCII碼也叫基礎(chǔ)ASCII碼,使用7位二進(jìn)制數(shù)來(lái)表示所有的大寫(xiě)和小寫(xiě)字母,數(shù)字0到9、標(biāo)點(diǎn)符號(hào),以及在美式英語(yǔ)中使用的特殊控制字符。其中:

0~31及127(共33個(gè))是控制字符或通訊專(zhuān)用字符,如控制符:LF(換行)、CR(回車(chē))等;

32~126(共95個(gè))是字符(32是空格),其中48~57為0到9十個(gè)阿拉伯?dāng)?shù)字;

65~90為26個(gè)大寫(xiě)英文字母,97~122號(hào)為26個(gè)小寫(xiě)英文字母,其余為一些標(biāo)點(diǎn)符號(hào)、運(yùn)算符號(hào)等。

字符數(shù)據(jù)與整型數(shù)據(jù)是相似的。C語(yǔ)言規(guī)定字符類(lèi)型與整型基本一致,即也有有符號(hào)和無(wú)符號(hào)兩種類(lèi)型:有符號(hào)類(lèi)型用char(-128~127)表示;無(wú)符號(hào)類(lèi)型用unsignedchar(0~255)表示;類(lèi)型字節(jié)數(shù)取值范圍char1-128~

127即

-27~(27–1)unsignedchar10~

255即

0~(28-1)§2.1.4字符型§2.2標(biāo)識(shí)符、常量與變量2.2.1標(biāo)識(shí)符1.標(biāo)識(shí)符是指程序中的變量、符號(hào)常量、數(shù)組、函數(shù)、類(lèi)型、文件等對(duì)象的名字。

在C語(yǔ)言中,標(biāo)識(shí)符只能由字母、數(shù)字和下劃線組成,且第一個(gè)字符必須為字母或下劃線。使用標(biāo)識(shí)符的具體規(guī)則如下:1.標(biāo)識(shí)符使用規(guī)則(1)只能由下劃線、0~9與大小寫(xiě)字母a~z,A~Z構(gòu)成。TurboC最多識(shí)別由32個(gè)字符組成的標(biāo)識(shí)符。

(2)首字符必須是字母或下劃線,而不能是數(shù)字或其它符號(hào)。

(3)在標(biāo)識(shí)符中,大寫(xiě)字母和小寫(xiě)字母代表不同的意義。

(4)標(biāo)識(shí)符不能使用系統(tǒng)的關(guān)鍵字,因?yàn)殛P(guān)鍵字是系統(tǒng)保留的,它們已有特定的含義。(5)系統(tǒng)預(yù)定義標(biāo)識(shí)符,如預(yù)編譯命令名(define、include)、系統(tǒng)函數(shù)名(scanf、printf、getchar、putchar)等可作為用戶標(biāo)識(shí)符,但建議不作它用。(6)盡量作到“見(jiàn)名知義”,例如max、score等。(7)避免使用易混字符,如1、l、i;0、o;2、z等。1.標(biāo)識(shí)符使用規(guī)則2.關(guān)鍵字關(guān)鍵字是指系統(tǒng)預(yù)定義的保留標(biāo)識(shí)符,又稱(chēng)之為保留字。它們有特定的含義,不能再作其它用途使用。ANSIC定義的關(guān)鍵字共32個(gè):autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifwhilestatic§2.2.2常量1.整型常量(1)十進(jìn)制整數(shù):如256、-565、6523。十進(jìn)制寫(xiě)法中除非要寫(xiě)的整數(shù)本身就是0否則第一個(gè)數(shù)字字符不能為0。如果是十進(jìn)制無(wú)符號(hào)整數(shù)則在數(shù)據(jù)后加u或U,如65535u,12345U等。(2)八進(jìn)制整數(shù):以0開(kāi)頭,由0~7八個(gè)數(shù)字組成的數(shù)是八進(jìn)制數(shù)。如0101、-045等是合法的八進(jìn)制數(shù),其中0101相當(dāng)于十進(jìn)制數(shù)65。而0185、-02a3是錯(cuò)誤的,不能表示八進(jìn)制數(shù)(3)十六進(jìn)制整數(shù):以0x或0X開(kāi)頭的數(shù)字序列表示十六進(jìn)制數(shù)。如0x12為十六進(jìn)制數(shù),它相當(dāng)于十進(jìn)制數(shù)18。在十六進(jìn)制寫(xiě)法中需要16個(gè)數(shù)字,超過(guò)9的數(shù)字不能用單個(gè)數(shù)字表示,C語(yǔ)言采用字母a~f或A~F表示其余的6個(gè)十六進(jìn)制數(shù)字,其對(duì)應(yīng)關(guān)系如表2-4所示:字母a,Ab,Bc,Cd,De,Ef,F表示的數(shù)字101112131415表2-4十六進(jìn)制數(shù)字的表示方法§2.2.2常量注意1.八進(jìn)制、十進(jìn)制和十六進(jìn)制只是整數(shù)的不同書(shū)寫(xiě)形式,可以根據(jù)需要選擇適當(dāng)?shù)臅?shū)寫(xiě)方式。計(jì)算機(jī)中存儲(chǔ)的數(shù)據(jù)都是以二進(jìn)制表示的.2.長(zhǎng)整型常量的表示方法:在上述方法表示的整數(shù)后面后附一個(gè)字母l或L作后綴,即可表示該數(shù)據(jù)的類(lèi)型是長(zhǎng)整型的。例如65L、-234234L表示十進(jìn)制有符號(hào)長(zhǎng)整型數(shù),345678lu,35LU等表示十進(jìn)制無(wú)符號(hào)長(zhǎng)整型數(shù)。

C中,一般只使用無(wú)符號(hào)的八進(jìn)制與十六進(jìn)制數(shù),不使用有符號(hào)的八進(jìn)制與十六進(jìn)制數(shù)。因此沒(méi)有專(zhuān)門(mén)的無(wú)符號(hào)八進(jìn)制和十六進(jìn)制標(biāo)識(shí)符。

3.65與65L相同嗎?§2.2.2常量2.實(shí)型常量在C語(yǔ)言中,把帶小數(shù)的數(shù)稱(chēng)為實(shí)數(shù)或浮點(diǎn)數(shù)。實(shí)型常量只能用十進(jìn)制形式表示。表示方法:(1)小數(shù)形式。如3.14159、-0.12、.5、2.等都是合法的實(shí)數(shù)形式。(2)指數(shù)形式。由一個(gè)整數(shù)或小數(shù)后面跟有一個(gè)指數(shù)部分組成,指數(shù)部分以e或E開(kāi)頭跟一個(gè)正的或負(fù)的整數(shù),表示以10為底的指數(shù)。如:3.4e-4/3.4E-4表示3.4×10-4,1.23E4、1.23E+4、1.23e4或1.23e+4均表示1.23×104?!?.2.2常量注意:①字母e/E之前(即尾數(shù)部分)必須有數(shù)字,如E2是不合法的表示。②e/E后面的指數(shù)部分必須是整數(shù),指數(shù)部分無(wú)整數(shù)或?yàn)樾?shù)均是錯(cuò)誤的,例如1.0e和4e-4.5均是不合法的表示。

3.14159可表示為:0.0314159×102

、C語(yǔ)言可表示為0.0314159e+2、3141.59e-3

尾數(shù)部分有且僅有一位非零整數(shù)的表示方法叫做科學(xué)計(jì)數(shù)法(規(guī)范化指數(shù)形式)?!?.2.2常量3.字符常量

由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符構(gòu)成。

例如:‘a(chǎn)’、‘B’、‘2’等一個(gè)字符型常量的存儲(chǔ)值是該字符集中對(duì)應(yīng)的ASCII編碼值。常用字符的ASCII編碼值如下:‘A’~‘Z’(65~90),‘a(chǎn)’~‘z’(97~122),‘0’~‘9’(48~57),空格字符(32)??梢钥闯觯捍髮?xiě)字母、小寫(xiě)字母、數(shù)字字符ASCII編碼值都是連續(xù)的。§2.2.2常量

除了可見(jiàn)字符以外,還有一些特殊的控制字符無(wú)法直接寫(xiě)出,例如換行符等。C語(yǔ)言為它們規(guī)定了特殊寫(xiě)法:以反斜杠(\)開(kāi)頭的一個(gè)字符或一個(gè)數(shù)字序列,這類(lèi)字符稱(chēng)為轉(zhuǎn)義字符.

如:‘\n’、‘\214’等

,具體見(jiàn)下表。轉(zhuǎn)義字符§2.2.2常量字符形式功

能\n換行,將光標(biāo)從當(dāng)前位置移到下一行開(kāi)頭\t橫向跳格,光標(biāo)跳到下一個(gè)水平制表位\b退格\r回車(chē),將光標(biāo)從當(dāng)前位置移到本行開(kāi)頭\f換頁(yè),將光標(biāo)從當(dāng)前位置移到下一頁(yè)開(kāi)頭\\反斜杠字符“\”\'單引號(hào)字符“'”\"雙引號(hào)字符“"”\ddd1到3位8進(jìn)制數(shù)所代表的字符\xhh1到2位16進(jìn)制數(shù)所代表的字符§2.2.2常量4.字符串常量字符串常量是由一對(duì)雙引號(hào)括起的字符序列.例如“abc”、“a”等,其中“a”的存儲(chǔ)形式:

字符串常量與字符常量的區(qū)別:

(1)

字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)(2)

字符常量只占一個(gè)字節(jié)的內(nèi)存空間,字符串常量存儲(chǔ)串中所有字符和串結(jié)束標(biāo)記'\0',其ASCII值為0(3)

字符常量只能表示單個(gè)字符;而字符串常量則可以含一個(gè)或多個(gè)字符,甚至還可以沒(méi)有字符。

a\0§2.2.2常量5.符號(hào)常量

符號(hào)常量就是使用標(biāo)識(shí)符定義一個(gè)常量,例如可用如下方法定義PI代表3.14159:

#definePI3.14159

這種常量定義在C語(yǔ)言中被稱(chēng)之為“宏定義”,具體方法將在本書(shū)第11章中介紹。

§2.2.2常量#definePI3.14159main(){floatr,c,s;scanf("%f",&r);c=2*PI*r;s=PI*r*r;printf("r=%f,c=%f,s=%f\n",r,c,s);}【例2-1】輸入圓的半徑,計(jì)算周長(zhǎng)和面積§2.2.3變量變量是指在程序運(yùn)行過(guò)程中其值可以被改變的量

三個(gè)要素:①變量名②變量的存儲(chǔ)單元③變量(存儲(chǔ)單元存放)的值。

1.變量的定義類(lèi)型變量名[=初值],變量名[=初值],……;例如下面的兩條變量定義語(yǔ)句

inta;floatf;

inta,b,c,max;inta=1,b=2,c=3,max;不能用

inta=b=c=3;inta=3,b=3,c=3;注意普通變量的初始化不是在編譯階段完成的,而是在程序運(yùn)行執(zhí)行到本函數(shù)時(shí)才給變量賦以初值。§2.2.3變量(1)編譯系統(tǒng)將根據(jù)定義檢測(cè)函數(shù)中的變量名。

例如在語(yǔ)句:maxx=3;

中變量max錯(cuò)寫(xiě)成了maxx,編譯系統(tǒng)將提示maxx沒(méi)有被定義的錯(cuò)誤信息。(2)編譯系統(tǒng)將對(duì)每一個(gè)變量根據(jù)它被定義的類(lèi)型分配相應(yīng)的存儲(chǔ)單元。例如對(duì)上述被定義的變量a、b、c和max分別分配2字節(jié)的整型存儲(chǔ)單元,對(duì)變量f分配4字節(jié)的單精度實(shí)型存儲(chǔ)單元。§2.2.3變量定義的作用

可以用長(zhǎng)度運(yùn)算符sizeof()求出任意類(lèi)型變量存儲(chǔ)單元的字節(jié)數(shù)。例如對(duì)int型變量a和float型變量f,sizeof(a)和sizeof(f)的值分別為2和4。也可以用sizeof()作用到類(lèi)型標(biāo)識(shí)符上,如:sizeof(int)和sizeof(float)得到同樣的結(jié)果?!?.2.3變量定義的作用§2.2.3變量定義的作用(3)編譯系統(tǒng)根據(jù)變量被定義的類(lèi)型檢查該變量進(jìn)行運(yùn)算的合法性。例如上述整型變量a、b、c和max均可以參與求余運(yùn)算,例如b對(duì)c求余的結(jié)果賦給a:

a=b%c;是合法的,而實(shí)型變量f參加求余運(yùn)算將是非法的。(4)可以給變量賦初始值。如果沒(méi)有賦初值,普通變量將存儲(chǔ)隨機(jī)值,直到給它賦值為止。定義變量應(yīng)注意以下問(wèn)題:(1)變量名可以是任何合法的標(biāo)識(shí)符。例如a、b2、c_1、_3y等均是合法的變量名,而#abc、.com、¥b1、5fd2、for等均是不合法的變量名。.見(jiàn)名知義

.區(qū)分大小寫(xiě)字母(2)在一個(gè)函數(shù)中,同一個(gè)變量不能被定義兩次?!?.2.3變量定義的作用2.變量的賦值

變量的賦值就是給變量的存儲(chǔ)單元存儲(chǔ)一定的值。賦值操作由賦值運(yùn)算符“=”實(shí)現(xiàn)。賦值方式:(1)在定義變量時(shí)給變量初始化賦值

(2)在程序運(yùn)行時(shí)用賦值語(yǔ)句給變量賦值,如:

int

a,b,c;

a=2;b=5;c=10;

與初始化賦值不同,用賦值語(yǔ)句給多個(gè)變量賦相同的值可以采用連續(xù)賦值的形式。如:

a=b=c=10;3.整型數(shù)據(jù)的存儲(chǔ)

C中整數(shù)有6種,可按有符號(hào)、無(wú)符號(hào)分為兩大類(lèi)無(wú)符號(hào)整數(shù)的存儲(chǔ)較簡(jiǎn)單,存儲(chǔ)單元的每個(gè)二進(jìn)制位存放的0、1均表示數(shù)。有符號(hào)整數(shù),C中用補(bǔ)碼表示,以解決計(jì)算機(jī)不能直接表示負(fù)數(shù)的問(wèn)題。有符號(hào)整數(shù):首位為0表示正整數(shù),為1表示負(fù)整數(shù)。3.整型數(shù)據(jù)的存儲(chǔ)補(bǔ)碼216-|a|(-32768≤a<0)a的補(bǔ)碼=a(0≤a≤32767)4.整型數(shù)據(jù)的溢出

由于在計(jì)算機(jī)中只能用有限的二進(jìn)制位存放數(shù)據(jù),數(shù)據(jù)的存儲(chǔ)會(huì)有溢出問(wèn)題。對(duì)整型數(shù)據(jù)的存儲(chǔ),溢出的情況有:

(1)由于存儲(chǔ)的位數(shù)有限,絕對(duì)值大于存儲(chǔ)范圍的數(shù)在存儲(chǔ)時(shí)將溢出;

(2)由于有符號(hào)的數(shù)用補(bǔ)碼存儲(chǔ),當(dāng)存儲(chǔ)的補(bǔ)碼改變到表示負(fù)數(shù)范圍時(shí)將表示負(fù)數(shù)。main(){inta,b,c;a=32767;b=a+1;printf("%d,%d\n",a,b,);}結(jié)果:32767,-32768【例2-2】整型數(shù)據(jù)的溢出4.整型數(shù)據(jù)的溢出(3)絕對(duì)值大的整數(shù)存入無(wú)符號(hào)整型變量a原數(shù)為正數(shù):原數(shù)以2的16次方(65536)為模求得的余數(shù)即為溢出結(jié)果原數(shù)為負(fù)數(shù):原數(shù)加2的16次方(65536)的倍數(shù),使結(jié)果在[0,65535]內(nèi),此即溢出后a的值(4)絕對(duì)值大的整數(shù)存入有符號(hào)整型變量a原數(shù)為正數(shù):原數(shù)以65536為模求得的余數(shù),余數(shù)為a的補(bǔ)碼,當(dāng)余數(shù)為>32767的整數(shù)時(shí)為負(fù)數(shù)的補(bǔ)碼,即存儲(chǔ)結(jié)果a為負(fù)數(shù)原數(shù)為負(fù)數(shù):原數(shù)加65536的倍數(shù),使結(jié)果在

[-32768,32767]內(nèi),此即溢出后a的值5.實(shí)型數(shù)據(jù)的存儲(chǔ)

為了擴(kuò)大表示數(shù)的范圍,實(shí)型數(shù)據(jù)是按指數(shù)形式存儲(chǔ)的。以微機(jī)中存儲(chǔ)float型數(shù)據(jù)為例,float型數(shù)據(jù)在內(nèi)存中占據(jù)4個(gè)字節(jié)即32位二進(jìn)制信息,分別存放符號(hào)位、規(guī)格化的尾數(shù)、階符位和階碼。6.實(shí)型數(shù)據(jù)的舍入誤差

除了溢出以外,整數(shù)存儲(chǔ)是沒(méi)有誤差的。由于實(shí)型變量是用有限的存儲(chǔ)單元存儲(chǔ)較大范圍的實(shí)數(shù),提供的有效數(shù)字總是有限的,尾數(shù)在有效位以外的部分將被舍去,因此實(shí)型數(shù)據(jù)是有誤差的。

(1)一個(gè)比較小的數(shù)與一個(gè)比較大的數(shù)求和,和的有效位數(shù)超過(guò)允許的范圍,最后的結(jié)果是比較小的數(shù)沒(méi)起作用。(2)4.0/3.0*3.0,按數(shù)學(xué)常識(shí)結(jié)果應(yīng)等于4.0,然而由于舍入誤差,其結(jié)果并不一定等于4.0。/*EX2-3.C*/main(){floatx,y;x=123456.789E5;y=x+30.0;printf("x=%f,y=%f\n",x,y);}【例2-3】實(shí)型數(shù)據(jù)的舍入誤差7.字符數(shù)據(jù)的存儲(chǔ)與使用

字符類(lèi)型數(shù)據(jù)的存儲(chǔ)與整型數(shù)據(jù)的存儲(chǔ)十分相似,也分成有符號(hào)和無(wú)符號(hào)兩種,只是用一個(gè)字節(jié)8位二進(jìn)制信息存儲(chǔ)字符類(lèi)型數(shù)據(jù)。

01000001c(0≤c≤127)28-|c|(-128≤c<0)c的補(bǔ)碼=字符‘A’main(){charch1,ch2;inti;ch1='a';i=ch1;ch2=97;printf("%dis%c\n",i,i);printf("%cis%d\n",ch1,ch1);printf("%cis%d\n",ch2,ch2);}【例2-4】字符與整數(shù)的通用main(){charc1,c2;c1='a';c2='B';c1=c1-32;

/*'a'的ASCII碼值為97,減去32得'A'的ASCII碼值*/

c2=c2+32;

/*'B'的ASCII碼值為66,加上32得'b'的ASCII碼值*/

printf("%c,%c",c1,c2);}【例2-5】大小寫(xiě)字母的轉(zhuǎn)換main(){charc;c=0362;/*八進(jìn)制數(shù),相當(dāng)于十進(jìn)制數(shù)242*/printf("%c%d\n",c,c);}【例2-6】字符數(shù)據(jù)的補(bǔ)碼§2.3運(yùn)算符與表達(dá)式C語(yǔ)言的運(yùn)算符共有13類(lèi)45個(gè)運(yùn)算符

1.算術(shù)運(yùn)算符+-*/%++--2.關(guān)系運(yùn)算符>>=<<===!=3.邏輯運(yùn)算符!&||4.位運(yùn)算符<<>>~|^&5.賦值類(lèi)運(yùn)算符=及自反賦值運(yùn)算符

6.條件運(yùn)算符?:7.逗號(hào)運(yùn)算符,

8.指針及求地址運(yùn)算符*&9.求存儲(chǔ)單元字節(jié)數(shù)運(yùn)算符sizeof10.類(lèi)型轉(zhuǎn)換運(yùn)算符(類(lèi)型)11.結(jié)構(gòu)體成員運(yùn)算符.

->12.下標(biāo)運(yùn)算符[]13.其他運(yùn)算符如函數(shù)調(diào)用運(yùn)算符()等學(xué)習(xí)運(yùn)算符要注意幾個(gè)方面問(wèn)題:(1)運(yùn)算符的功能;(2)運(yùn)算符與操作對(duì)象的關(guān)系:①操作數(shù)的個(gè)數(shù)(單目、雙目、三目);②操作數(shù)的類(lèi)型(如求余運(yùn)算符%要求操作數(shù)是整型);③結(jié)合方向(操作數(shù)到運(yùn)算符):左結(jié)合、右結(jié)合;(3)運(yùn)算符的優(yōu)先級(jí);(4)運(yùn)算結(jié)果的數(shù)據(jù)類(lèi)型:不同類(lèi)型數(shù)據(jù)運(yùn)算將發(fā)生類(lèi)型轉(zhuǎn)換§2.3運(yùn)算符與表達(dá)式2.3.1算術(shù)運(yùn)算符與算術(shù)表達(dá)式1.基本算數(shù)運(yùn)算符C語(yǔ)言中基本的算術(shù)運(yùn)算符共有5個(gè),分別為:

+(加),-(減),*(乘),/(除),%(取模,或稱(chēng)求余)(1)雙目運(yùn)算符,結(jié)合方向均為從左到右。(2)%(取模)運(yùn)算符僅用于整型變量或整型常量的運(yùn)算,a%b結(jié)果為a除以b的余數(shù),余數(shù)的符號(hào)與被除數(shù)相同如:7%3的值為1;17%-3的結(jié)果為2;-19%4的結(jié)果為-3。§2.3運(yùn)算符與表達(dá)式§2.3運(yùn)算符與表達(dá)式(3)+、-、*、/運(yùn)算符的兩個(gè)操作數(shù)既可以是整數(shù),也可以是實(shí)數(shù)。所有實(shí)數(shù)均按double型計(jì)算。(4)/(除法)運(yùn)算符,兩個(gè)整型的數(shù)據(jù)相除時(shí)結(jié)果為整數(shù)。如:7/3,其值為2,舍去小數(shù)部分,相當(dāng)于整除操作;當(dāng)操作數(shù)中有一個(gè)為負(fù)數(shù)時(shí),整除結(jié)果取整為向0靠攏如:-5/3=-1。2.基本算術(shù)表達(dá)式基本算術(shù)表達(dá)式:

基本算術(shù)運(yùn)算符、括號(hào)以及操作對(duì)象組成的符合C語(yǔ)言語(yǔ)法規(guī)則的表達(dá)式.§2.3.1算術(shù)運(yùn)算符與算術(shù)表達(dá)式優(yōu)先級(jí):(*、/、%)同級(jí)較高,(+、-)同級(jí)較低結(jié)合方向:當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別不同時(shí),應(yīng)遵循優(yōu)先級(jí)高的先處理的規(guī)則。當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別相同時(shí),應(yīng)遵循運(yùn)算符的結(jié)合方向。算術(shù)運(yùn)算符的結(jié)合方向是從左至右。

有時(shí)為了達(dá)到某種目的,需要將一個(gè)表達(dá)式的類(lèi)型轉(zhuǎn)變成所需的類(lèi)型,這時(shí)就要用到強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符。作用形式:

(類(lèi)型)(表達(dá)式)將表達(dá)式的值轉(zhuǎn)換成相應(yīng)類(lèi)型例如:(double)a(int)(x+y)(float)5/3優(yōu)先級(jí):同所有單目運(yùn)算符,高于基本算術(shù)運(yùn)算符。3.強(qiáng)制類(lèi)型轉(zhuǎn)換(顯式轉(zhuǎn)換)運(yùn)算符3.強(qiáng)制類(lèi)型轉(zhuǎn)換(顯式轉(zhuǎn)換)運(yùn)算符注意:①表達(dá)式一定要加括號(hào)(強(qiáng)制類(lèi)型轉(zhuǎn)換是單目運(yùn)算,優(yōu)先級(jí)高),例如上面最后一個(gè)表達(dá)式中只是將5轉(zhuǎn)變成float型,而不是將5/3轉(zhuǎn)變成float型。②若對(duì)變量實(shí)行顯式轉(zhuǎn)換,將得到新類(lèi)型的一個(gè)值,原變量的類(lèi)型及其存儲(chǔ)值均不變。/*EX2-7.C*/main(){floatx=3.6;printf("%d,",(int)x);printf("%f\n",x);}【例2-7】強(qiáng)制類(lèi)型轉(zhuǎn)換

由于求余(取模)運(yùn)算只能針對(duì)整型數(shù)據(jù),因此經(jīng)常用強(qiáng)制類(lèi)型轉(zhuǎn)換的辦法將一個(gè)實(shí)型量(變量或常量)變換成整型,然后才能進(jìn)行取模運(yùn)算,例如:(int)5.5%3。4.自增自減運(yùn)算符:++和--

自增自減運(yùn)算符++和--是C語(yǔ)言中最常用也最難掌握的兩個(gè)單目運(yùn)算符,具有右結(jié)合性。他們的作用是:只作用于變量,使變量的值自增1或自減1。如++i相當(dāng)于i=i+1;--j相當(dāng)于j=j-1,因此++、--實(shí)質(zhì)也有賦值作用。不能對(duì)常量或表達(dá)式賦值,3++,(a+b)--等都是錯(cuò)誤的。4.自增自減運(yùn)算符:++和--++和--運(yùn)算符的前綴運(yùn)算與后綴運(yùn)算

(1)前綴運(yùn)算++i:相當(dāng)于i=i+1且表達(dá)式的值與i的值相同(i先加1,再使用i的值);同樣,--j相當(dāng)于j=j-1且表達(dá)式的值與j的值相同

(j先減1,再使用j的值)(2)后綴運(yùn)算i++:先取i的值作為表達(dá)式的值,i再自增1(先使用i的值,再使i增1);同樣,j--:先取j的值作為表達(dá)式的值,j再自減1(先使用j的值,再使j減1)。4.自增自減運(yùn)算符:++和--自增自減運(yùn)算符使用中的若干問(wèn)題(TURBOC中的規(guī)定):(1)連續(xù)自增問(wèn)題例:inti=3;(i++)+(i++)+(i++)的值為9,而i的值為6

(統(tǒng)一取值后逐步自增)

inti=3;(++i)+(++i)+(++i)的值為18,而i的值為6(先逐步自增后統(tǒng)一取值)(2)連續(xù)自增作為printf()函數(shù)輸出項(xiàng)問(wèn)題例:inti=3;printf(“%d\n”,(i++)+(i++)+(i++))輸出12(逐步取值并自增)

inti=3;printf(“%d\n”,(++i)+(++i)+(++i))輸出15(逐步自增并取值)(3)printf()中多輸出項(xiàng)計(jì)算問(wèn)題(從右向左運(yùn)算)例:inti=3;printf(“%d,%d\n”,i+2,i++)輸出6,3/*EX2-8.C*/main(){inti=5,j;j=++i+i++;printf("i=%d,j=%d\n",i,j);i=5;j=(++i)+(++i)+(i++);printf("i=%d,j=%d\n",i,j);printf("%d%d\n",i+j,j++);}【例2-8】輸出下面程序中i、j的值§2.3.2賦值運(yùn)算符與賦值表達(dá)式1.賦值運(yùn)算符

C語(yǔ)言中賦值運(yùn)算符為“=”,它的作用的一般形式為:

變量=表達(dá)式即將“=”右邊的表達(dá)式的值賦給其左邊的變量。如:

a=5;

/*表示把一個(gè)常量5賦給變量a*/

x=a+5;

/*表示將表達(dá)式a+5的值賦給變量x*/

如果賦值運(yùn)算符兩側(cè)的類(lèi)型不一致,在賦值時(shí)要將表達(dá)式值的類(lèi)型轉(zhuǎn)換成變量的類(lèi)型,然后再賦給變量

幾點(diǎn)說(shuō)明:(1)“=”是賦值運(yùn)算符,不是等于號(hào)(等于號(hào)是==)。(2)賦值運(yùn)算方向?yàn)樽杂蚁蜃蟆?3)賦值運(yùn)算的過(guò)程:先計(jì)算表達(dá)式,然后將計(jì)算結(jié)果轉(zhuǎn)換成變量的類(lèi)型后存到變量的存儲(chǔ)單元中,該變量原有的值被覆蓋。(4)賦值運(yùn)算符左邊只能是變量,不能是常量或表達(dá)式,如2=a和a+b=c都是錯(cuò)誤的。(5)賦值運(yùn)算符的優(yōu)先級(jí)較低(只高于逗號(hào)運(yùn)算符),因此一般情況下表達(dá)式無(wú)須加括號(hào),如a=2+7/3將值4賦給變量a。(6)賦值運(yùn)算是一個(gè)表達(dá)式,其值即賦值后變量的值,可賦給其它變量。如b=(a=3+5)§2.3.2賦值運(yùn)算符與賦值表達(dá)式C語(yǔ)言允許在賦值運(yùn)算符“=”之前加上其他運(yùn)算符以構(gòu)成復(fù)合的賦值運(yùn)算符。基本算術(shù)運(yùn)算符和位運(yùn)算符。有:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=

2.復(fù)合賦值運(yùn)算符a+=5等價(jià)于a=a+5c-=d等價(jià)于c=c-da*=b+5等價(jià)于a=a*(b+5)g/=h-f等價(jià)于g=g/(h-f)a%=5等價(jià)于a=a%5

3.賦值類(lèi)運(yùn)算符的副作用及限制

(1)費(fèi)解,易于誤解。(2)不定解:因機(jī)器不同得到不同的結(jié)果。

(3)注意:對(duì)賦值類(lèi)運(yùn)算符,交換律不成立c=b*=a+2;

j=3;i=(k=j+1)+(j=5);若先算后面括號(hào),結(jié)果為i=11;若先算前面括號(hào),結(jié)果為i=9;(TC規(guī)定從左到右計(jì)算)i=(j=5)+(k=j+1);4.算術(shù)表達(dá)式的計(jì)算

優(yōu)先級(jí)類(lèi)型運(yùn)算符結(jié)合性1結(jié)構(gòu)類(lèi)()2單目+、-、++、--、sizeof()3雙目*、/、%4雙目+、-5賦值類(lèi)=、+=、-=、*=、/=、%=1.圓括號(hào)優(yōu)先級(jí)最高,有多層圓括號(hào)從內(nèi)向外運(yùn)算2.(類(lèi)型名)(表達(dá)式)為強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算;3.先按運(yùn)算符的優(yōu)先級(jí)由高到低進(jìn)行,如5*-2相當(dāng)于5*(-2),結(jié)果為-10;同級(jí)的運(yùn)算符按結(jié)合方向進(jìn)行例:設(shè)有變量聲明floata=3.0;intb=2;

計(jì)算表達(dá)式:2+sqrt(1.0+a)*b++/2解:

2+sqrt(1.0+a)*b++/22+sqrt(4.0)*b++/22+2.0*2/22+4.0/22+2.04.0

即表達(dá)式的值為4.0,同時(shí)b的值變?yōu)?,a的值不變。

4.算術(shù)表達(dá)式的計(jì)算

§2.3.3逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式1.逗號(hào)運(yùn)算符用逗號(hào)運(yùn)算符可以將兩個(gè)表達(dá)式連接起來(lái)。如:

2+3,2+52.逗號(hào)表達(dá)式用逗號(hào)運(yùn)算符連接兩個(gè)或兩個(gè)以上表達(dá)式所形成的新表達(dá)式就是逗號(hào)表達(dá)式,其一般形式為:(表達(dá)式1),(表達(dá)式2),…,(表達(dá)式n)求值過(guò)程:先求表達(dá)式1的值,再求表達(dá)式2的值,…,最后求表達(dá)式n的值。表達(dá)式n的值就是整個(gè)逗號(hào)表達(dá)式的值。

一個(gè)逗號(hào)表達(dá)式可以與另一個(gè)表達(dá)式構(gòu)成一個(gè)新的逗號(hào)表達(dá)式。例如:

(a=2+3,a*5),a+10

優(yōu)先級(jí):逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的.結(jié)合性:逗號(hào)表達(dá)式的結(jié)合性為自左向右的。

§2.3.3逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式/*EX2-9.C*/main(){inty=3,x=3,z=1;printf("%d%d\n",(++x,y++),z+2);}【例2-9】分析下面程序的運(yùn)行結(jié)果§2.4數(shù)據(jù)類(lèi)型轉(zhuǎn)換2.4.1類(lèi)型轉(zhuǎn)換概述

三種方式:

類(lèi)型自動(dòng)轉(zhuǎn)換、賦值類(lèi)型轉(zhuǎn)換和強(qiáng)制類(lèi)型轉(zhuǎn)換

1.不同數(shù)據(jù)類(lèi)型的差異

(1)float<double(2)(char,short,int,long)<(float,double)(3)char<short<int<long(4)signed<unsigned2.數(shù)據(jù)類(lèi)型轉(zhuǎn)換產(chǎn)生的6種效果(1)數(shù)據(jù)類(lèi)型提升與降格(2)為保持?jǐn)?shù)值不變,整型短數(shù)據(jù)轉(zhuǎn)換成整型長(zhǎng)數(shù)據(jù)時(shí)將產(chǎn)生符號(hào)位擴(kuò)展與零擴(kuò)展。(3)最高位失去符號(hào)位功能(signed型轉(zhuǎn)換成unsigned型)與變成符號(hào)位(unsigned型轉(zhuǎn)換成signed型):長(zhǎng)度不變,數(shù)值可能改變(4)丟失精度(5)截去高位(溢出)產(chǎn)生數(shù)值的變化:發(fā)生在長(zhǎng)的整型數(shù)據(jù)轉(zhuǎn)換成較短類(lèi)型的整型數(shù)據(jù)時(shí)。(6)給實(shí)數(shù)賦值,float型只能接受7位有效數(shù)字,double型只能接受16位有效數(shù)字,多給無(wú)效?!?.4數(shù)據(jù)類(lèi)型轉(zhuǎn)換系統(tǒng)自動(dòng)按運(yùn)算順序?qū)⒌图?jí)的數(shù)據(jù)直接轉(zhuǎn)換成高級(jí)的數(shù)據(jù),以保證運(yùn)算的精度,具體規(guī)則為:

(1)float

在運(yùn)算時(shí)自動(dòng)轉(zhuǎn)換成double;

(2)char和short在運(yùn)算時(shí)自動(dòng)轉(zhuǎn)換成整型數(shù)據(jù)int;

(3)int和unsignedint混合運(yùn)算時(shí),將整型數(shù)據(jù)轉(zhuǎn)換成無(wú)符號(hào)整型數(shù)據(jù),即是用補(bǔ)碼參加運(yùn)算,不會(huì)影響結(jié)果的正確性;

(4)int或unsignedint與long混合運(yùn)算時(shí),都轉(zhuǎn)換成long型。

(5)int、unsigned、long與浮點(diǎn)型數(shù)據(jù)混合運(yùn)算時(shí),都轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù)(double)。§2.4.2

自動(dòng)類(lèi)型轉(zhuǎn)換

高doublefloatlongchar,shortunsigned低自動(dòng)類(lèi)型轉(zhuǎn)換規(guī)則int§2.4.2

自動(dòng)類(lèi)型轉(zhuǎn)換§2.4.3

賦值類(lèi)型轉(zhuǎn)換

賦值運(yùn)算時(shí),如果賦值運(yùn)算符兩側(cè)的類(lèi)型(指基本類(lèi)型)不一致,系統(tǒng)自動(dòng)將表達(dá)式的值轉(zhuǎn)換成變量的類(lèi)型存到變量的存儲(chǔ)單元,轉(zhuǎn)換的結(jié)果可能會(huì):(1)當(dāng)整型數(shù)據(jù)賦給浮點(diǎn)型變量時(shí),數(shù)值上不發(fā)生任何變化,但有效位增加。如:

float

f;f=4;

/*內(nèi)存中變量f的值為4.000000*/§2.4.3

賦值類(lèi)型轉(zhuǎn)換

(2)當(dāng)單、雙精度浮點(diǎn)型數(shù)據(jù)賦給整型變量時(shí),浮點(diǎn)數(shù)的小數(shù)部分將被舍棄。如:

intx=4.35;/*內(nèi)存中變量x的值為4,精度丟失。如果賦的值絕對(duì)值很大則將溢出。*/(3)將字符型數(shù)據(jù)賦給整型變量時(shí),由于字符型數(shù)據(jù)在運(yùn)算時(shí)根據(jù)其ASCII碼值自動(dòng)轉(zhuǎn)化為整型數(shù)據(jù),所以將字符型數(shù)據(jù)的ASCII碼值存儲(chǔ)到變量中。如:

intx;x='a';/*內(nèi)存中變量x的值為97*/(4)將有符號(hào)的整型數(shù)據(jù)賦給長(zhǎng)整型變量,系統(tǒng)要進(jìn)行符號(hào)位擴(kuò)展。將無(wú)符號(hào)的整型數(shù)據(jù)賦給長(zhǎng)整型變量時(shí),只需0擴(kuò)展即可。(5)將長(zhǎng)整型數(shù)據(jù)賦給整型變量或?qū)⒄蛿?shù)據(jù)賦給字符型變量,都有可能溢出。例如:

charch=321;溢出后ch的值為'A'?!?.4.3

賦值類(lèi)型轉(zhuǎn)換

(6)同長(zhǎng)度有符號(hào)整型數(shù)據(jù)賦給無(wú)符號(hào)整型變量時(shí),數(shù)據(jù)將失去符號(hào)位功能。例如:

unsignedintu=-1;則u的值為65535。(7)同長(zhǎng)度無(wú)符號(hào)整型數(shù)據(jù)賦給有符號(hào)整型變量時(shí),數(shù)據(jù)將得到符號(hào)位功能。

溫馨提示

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