第2章 數(shù)據(jù)類型和表達(dá)式_第1頁(yè)
第2章 數(shù)據(jù)類型和表達(dá)式_第2頁(yè)
第2章 數(shù)據(jù)類型和表達(dá)式_第3頁(yè)
第2章 數(shù)據(jù)類型和表達(dá)式_第4頁(yè)
第2章 數(shù)據(jù)類型和表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩107頁(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ù)類型和表達(dá)式2.1標(biāo)識(shí)符、常量和變量2.2基本數(shù)據(jù)類型2.3運(yùn)算符和表達(dá)式習(xí)題22.1標(biāo)識(shí)符、常量和變量 2.1.1標(biāo)識(shí)符 1.標(biāo)識(shí)符的定義 編寫程序,需要使用相應(yīng)的計(jì)算機(jī)語(yǔ)言,而語(yǔ)言主要是由它所限定的符號(hào)表示一些字、詞、命令、變量及數(shù)據(jù)等。這些符號(hào)組成了語(yǔ)言,標(biāo)識(shí)符指的就是用來(lái)標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、文件名以及一些具有專門含義的有效字符序列。通俗地說(shuō),標(biāo)識(shí)符就是一個(gè)名字。 2.標(biāo)識(shí)符的規(guī)定 在C語(yǔ)言中使用標(biāo)識(shí)符有如下規(guī)定。 (1)合法的標(biāo)識(shí)符只能由字母、數(shù)字和下劃線組成,并且第一個(gè)字符必須為字母或下劃線。 (2)大寫字母和小寫字母被視為兩個(gè)不同的字符。如sum、SUM被認(rèn)為是兩個(gè)不同的標(biāo)識(shí)符。 (3)標(biāo)識(shí)符的長(zhǎng)度(即一個(gè)標(biāo)識(shí)符允許的字符個(gè)數(shù))一般規(guī)定取前8個(gè)字符為有效字符,多余的將不被識(shí)別。如student_name、student_num被認(rèn)為是相同的標(biāo)識(shí)符student_。 例如:sum、area、aver.PI、_above、L_1_2_3、S12是合法的標(biāo)識(shí)符;而A.B.C、A.123、13、3area、a+b是不合法的標(biāo)識(shí)符。 3.標(biāo)識(shí)符的分類 在C語(yǔ)言中,標(biāo)識(shí)符分為3類,即關(guān)鍵字標(biāo)識(shí)符、預(yù)定義標(biāo)識(shí)符和用戶自定義標(biāo)識(shí)符。 1)關(guān)鍵字標(biāo)識(shí)符 關(guān)鍵字又稱為命令符,在程序中具有特定的含義,不能另作它用,其他字符又無(wú)法直接替代。例如,程序中用來(lái)說(shuō)明變量類型的標(biāo)識(shí)符int、char及選擇結(jié)構(gòu)中的if、else等,都是關(guān)鍵字標(biāo)識(shí)符。

C語(yǔ)言中的關(guān)鍵字標(biāo)識(shí)符包括: auto break case char const continue default do doubleelse enum extern float for goto if int longregister return short signed sizeof static struct switch typedefunion unsignedvoid volatile while 2)預(yù)定義標(biāo)識(shí)符 在C語(yǔ)言中,預(yù)定義標(biāo)識(shí)符一般是指C語(yǔ)言提供的庫(kù)函數(shù)名和預(yù)編譯處理命令(如printf、scanf、define)等。C語(yǔ)言允許這類標(biāo)識(shí)符(函數(shù)名)另作它用,但這將使這些標(biāo)識(shí)符失去系統(tǒng)規(guī)定的原意。為了編程時(shí)方便、可靠、避免誤解,一般把這些標(biāo)識(shí)符固定使用。 3)用戶自定義標(biāo)識(shí)符 用戶在進(jìn)行編程時(shí),需要自己對(duì)變量、函數(shù)、數(shù)組、文件和常量等進(jìn)行命名,命名規(guī)則前面已有說(shuō)明,這類由用戶根據(jù)需要自己定義的標(biāo)識(shí)符稱為用戶自定義標(biāo)識(shí)符。在使用用戶自定義標(biāo)識(shí)符時(shí)應(yīng)注意以下3點(diǎn): (1)最好根據(jù)其含義選用英文縮寫及漢語(yǔ)拼音作標(biāo)識(shí)符,這樣便于閱讀程序。 (2)決不能與關(guān)鍵字相同,否則編譯時(shí)給出錯(cuò)誤信息。 (3)如果與預(yù)定義標(biāo)識(shí)符相同,系統(tǒng)并不報(bào)錯(cuò),則程序仍能運(yùn)行,只是預(yù)定義標(biāo)識(shí)符失去原來(lái)的含義,代之以用戶確認(rèn)的含義,這樣會(huì)造成編程混亂現(xiàn)象,應(yīng)避免發(fā)生。 2)符號(hào)常量 使用常量可以提高程序運(yùn)行速度,提高程序執(zhí)行的效率,而使用標(biāo)識(shí)符常量則可提高程序的易讀性、可修改性,便于調(diào)試程序,減少出錯(cuò)機(jī)會(huì)。 如果在程序中多次出現(xiàn)一些很大的數(shù)字或很長(zhǎng)的字符串,為了改進(jìn)代碼的可讀性和可維護(hù)性,則可以給某一特定的值賦予一個(gè)名字,以后用到這個(gè)值時(shí)就用名字代表,這樣便于程序修改和閱讀,這個(gè)名字就是符號(hào)常量。符號(hào)常量有點(diǎn)像變量,但不能像對(duì)變量那樣修改符號(hào)常量,也不能對(duì)符號(hào)常量賦以新值。 下面看一個(gè)符號(hào)常量的例子。 【例2-1】定義一個(gè)符號(hào)常量PI,表示圓周率,然后使用符號(hào)常量PI計(jì)算圓的面積。 #include"stdio.h" #definePI3.1415926 /*定義符號(hào)常量PI,其值為3.1415926*/ main() { floatradius; /*radius圓的半徑*/ floatarea; /*area圓的面積*/

printf("Pleaseinputradius:"); scanf("%f",&radius);/*輸入圓的半徑*/ area=PI*radius*radius;/*計(jì)算圓的面積*/ printf("area=%f",area);} 從該例中可以看出,程序用#define命令行定義PI代表常量3.1415926,程序在編譯時(shí)將用3.1415926替代PI,有關(guān)#define命令的用法將在后面的章節(jié)中進(jìn)行詳細(xì)介紹。

使用符號(hào)常量時(shí),應(yīng)注意以下幾項(xiàng): (1)符號(hào)常量不同于變量,它的值在其作用域(本例中為主函數(shù))內(nèi)不能改變,也不能再被賦值,例如在程序中出現(xiàn)下面的語(yǔ)句就是錯(cuò)誤的。 PI=3.14; (2)習(xí)慣上,符號(hào)常量名用大寫,變量名用小寫。 (3)使用符號(hào)常量的好處有兩個(gè)。一是含義清楚,如在本例中,可以看出PI代表圓周率。二是在需要修改常量值時(shí)比較方便,例如可以用#definePI3.14替代原有命令行以達(dá)到修改圓周率的目的。 2.變量 1)變量的定義 程序運(yùn)行過(guò)程中,其值可以改變的量叫變量。程序中使用的變量,屬于用戶自定義標(biāo)識(shí)符,任何一個(gè)變量名必須先定義(即確定變量名和變量的類型)后使用。 一個(gè)變量實(shí)質(zhì)上是指計(jì)算機(jī)內(nèi)存中某個(gè)存儲(chǔ)一定類型數(shù)據(jù)的單元,變量名實(shí)質(zhì)上是這個(gè)數(shù)據(jù)存儲(chǔ)單元的符號(hào)表示。對(duì)變量進(jìn)行的操作就是對(duì)該存儲(chǔ)單元進(jìn)行操作,對(duì)變量賦值就是將數(shù)據(jù)存入該變量所代表的內(nèi)存單元中。程序中的變量與數(shù)學(xué)上的變量概念不同:變量中的“變”體現(xiàn)的是這個(gè)存儲(chǔ)單元可以存放不同的數(shù)據(jù),但每一時(shí)刻只具有惟一的值,即新放入的數(shù)據(jù)將覆蓋原有的數(shù)據(jù)。 變量也有類型之分,常用的有整型變量、實(shí)型變量和字符型變量等。變量因類型不同在內(nèi)存中所占的存儲(chǔ)空間也不同,系統(tǒng)在編譯時(shí)能根據(jù)所定義的變量類型為其分配相應(yīng)數(shù)量的存儲(chǔ)單元。 2)定義變量的一般形式 定義變量的一般形式為 數(shù)據(jù)類型變量名1,變量名2,變量名3,…;

【例2-2】用price代表商品單價(jià),num代表商品數(shù)量,然后計(jì)算商品的總價(jià)total。注意程序中只是定義了變量total,而沒(méi)有定義變量price和num。 #include"stdio.h" main() { inttotal; num=5; /*此處變量num沒(méi)有先定義而使用,編譯時(shí)會(huì)出錯(cuò)*/ price=3;/*此處變量price沒(méi)有先定義而使用, 編譯時(shí)會(huì)出錯(cuò)*/ total=price*num; printf("total=%d",total); } 從例2-2可以看出,對(duì)變量使用前必須先定義,這樣可以保證變量在使用中的正確性。 說(shuō)明: 變量的數(shù)據(jù)類型決定了變量的取值范圍和占用內(nèi)存空間的字節(jié)數(shù),變量名表示具有同一數(shù)據(jù)類型變量的集合。C語(yǔ)言這樣要求的目的有以下3點(diǎn)。 (1)凡是未被事先定義的,不能作為變量名,這樣做能保證程序中變量名的正確使用。例如,在定義部分寫成intst; 而在語(yǔ)句中錯(cuò)寫成stu,在編譯時(shí)會(huì)檢查出stu未被定義,不能作為變量名,這樣便于用戶發(fā)現(xiàn)錯(cuò)誤,避免變量名在使用時(shí)出錯(cuò)。 (2)每個(gè)變量被定義為一個(gè)確定數(shù)據(jù)類型,在編譯時(shí)能為其分配相應(yīng)的存儲(chǔ)空間。例如定義x為int型,則編譯程序?qū)樽兞縳分配兩個(gè)字節(jié)的存儲(chǔ)空間,并按照整型方式存儲(chǔ)。 (3)每個(gè)變量屬于一定的數(shù)據(jù)類型,便于編譯時(shí)據(jù)此檢查該變量所進(jìn)行運(yùn)算的合法性。例如,整型變量x和y可以進(jìn)行求模運(yùn)算:x%y,%是求模運(yùn)算符,得到x除以y的整余數(shù)。如果將x和y定義為浮點(diǎn)型變量,則不允許進(jìn)行“求?!边\(yùn)算,在編譯階段就會(huì)指出有關(guān)的出錯(cuò)信息。2.2基本數(shù)據(jù)類型 在設(shè)計(jì)一個(gè)程序時(shí),首先要確定采用什么類型的數(shù)據(jù),對(duì)不同的問(wèn)題,采用的數(shù)據(jù)類型應(yīng)不同。例如,在統(tǒng)計(jì)全校有多少學(xué)生時(shí)就應(yīng)該用整型數(shù)據(jù),而不應(yīng)使用帶小數(shù)的數(shù)據(jù)或其他數(shù)據(jù)。數(shù)據(jù)是程序的必要組成部分,是程序處理的對(duì)象。由于數(shù)據(jù)類型體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)的特點(diǎn),高級(jí)語(yǔ)言所提供的數(shù)據(jù)類型越豐富,由其數(shù)據(jù)類型所表現(xiàn)的數(shù)據(jù)結(jié)構(gòu)就越豐富、復(fù)雜,因而,這種高級(jí)語(yǔ)言的功能和所處理問(wèn)題的能力就越強(qiáng)。

C語(yǔ)言規(guī)定,程序中所用到的任何一個(gè)變量和數(shù)據(jù)都必須指定其數(shù)據(jù)類型。 C語(yǔ)言中的數(shù)據(jù)類型如圖2.1所示。圖中括號(hào)內(nèi)所注是程序中使用的類型名。圖2.1C語(yǔ)言中的數(shù)據(jù)類型 2.2.1整型數(shù)據(jù) 1.整型常量 整型常量,即整型常數(shù)。C語(yǔ)言整型常量可用以下3種形式表示。 1)十進(jìn)制整型常數(shù) 十進(jìn)制整型常數(shù),如+156,-253,121,0等。 2)八進(jìn)制整數(shù) 八進(jìn)制整數(shù)是以0開(kāi)頭(注:不是英文字母O而是數(shù)字零)的數(shù),在數(shù)學(xué)領(lǐng)域內(nèi)0123和123表示兩個(gè)值相同的整數(shù),而在C語(yǔ)言中,0123表示八進(jìn)制的123,它的十進(jìn)制值應(yīng)是 1×82+2×81+3×80=64+16+3=83 使用八進(jìn)制數(shù)時(shí)應(yīng)注意以下幾項(xiàng): (1)在八進(jìn)制中不允許出現(xiàn)8和9; (2)在程序中出現(xiàn)的八進(jìn)制數(shù)一定要以0開(kāi)頭,但當(dāng)程序的輸出結(jié)果為八進(jìn)制數(shù)時(shí),前面的0消失。 3)十六進(jìn)制整數(shù) 十六進(jìn)制整數(shù)是以0x開(kāi)頭的數(shù),如0x123。0x123的十進(jìn)制數(shù)為 0x123=1×162+2×161+3×160=256+32+3=291 使用十六進(jìn)制數(shù)時(shí)應(yīng)注意以下幾項(xiàng): (1)大于9時(shí)可依次用a,b,c,d,e,f表示;

(2)在程序中出現(xiàn)的十六進(jìn)制數(shù)一定要以0x開(kāi)頭,但當(dāng)程序輸出結(jié)果為十六進(jìn)制時(shí),前面的0x消失。 十進(jìn)制與二進(jìn)制、八進(jìn)制、十六進(jìn)制的轉(zhuǎn)換見(jiàn)表2-1。表2-1數(shù)制轉(zhuǎn)換表表2-1數(shù)制轉(zhuǎn)換表 2.整型變量 1)整型變量的分類 整型變量可分為以下4種整型類型: (1)基本型,以int表示; (2)短整型,以short表示; (3)長(zhǎng)整型,以long表示; (4)無(wú)符號(hào)整型,以u(píng)nsigned表示。unsigned可以加在int、short和long的前面,分別表示無(wú)符號(hào)整型、無(wú)符號(hào)短整型和無(wú)符號(hào)長(zhǎng)整型。 在IBM-PC機(jī)及兼容機(jī)中,以上整型類型的數(shù)據(jù)所占的字節(jié)數(shù)和所表示的范圍見(jiàn)表2-2。表2-2各種整型變量數(shù)據(jù)的存儲(chǔ)長(zhǎng)度及表示范圍 2)整型變量的定義和使用 變量必須先定義,后使用。對(duì)于變量的定義,一般放在一個(gè)函數(shù)開(kāi)頭的聲明部分。 整型變量定義的格式如下: 類型標(biāo)識(shí)符變量名1,變量名2,變量名3,…; 類型標(biāo)識(shí)符可以是int、short、long、unsigned,或是它們的組合,例如: intx,y; . /*指定變量x,y為整型變量*/ longc,d; /*指定變量c,d為長(zhǎng)整型變量*/

unsignedage,weight; /*指定變量age,weight為無(wú)符號(hào)整型變量*/ inta=3,b=4; /*定義a,b為整型變量同時(shí)將3和4分別賦予a和b*/ 3.整型數(shù)據(jù)在內(nèi)存中的存放形式 任何數(shù)據(jù)在計(jì)算機(jī)內(nèi)部都以二進(jìn)制形式存放。一般情況下,8位二進(jìn)制數(shù)組合在一起稱為一個(gè)字節(jié)(byte),大量的字節(jié)按序組合在一起構(gòu)成存儲(chǔ)器。 在C語(yǔ)言中,一個(gè)整型數(shù)通常占用2個(gè)字節(jié),低位在前一個(gè)字節(jié),高位在后一個(gè)字節(jié)。 下面舉例說(shuō)明。 1)整數(shù)9在存儲(chǔ)單元中的存儲(chǔ)形式 (1)整數(shù)9作為有符號(hào)正數(shù)時(shí)(即int型),最高位用0表示正數(shù),而不表示數(shù)值。 0 0000000 00001001 (2)整數(shù)9作為無(wú)符號(hào)數(shù)時(shí)(即unsigned型),所有二進(jìn)制位都有確定的值。 00000000 00001001 注意:無(wú)符號(hào)數(shù)最大值為65535,其存儲(chǔ)形式為 11111111 11111111 2)負(fù)整數(shù)在存儲(chǔ)單元中的存儲(chǔ)形式 負(fù)整數(shù)在存儲(chǔ)單元中是以補(bǔ)碼形式存放的。以-1為例,-1的補(bǔ)碼應(yīng)為其原碼除符號(hào)位不變外,其余各位求反后加1,即對(duì)1000000000000001求反再加1。故-1在存儲(chǔ)單元中的存放形式為 1 1111111 11111111 注意: (1)負(fù)整數(shù)在存儲(chǔ)單元中的存放形式與它的真值有極大差別。 (2)負(fù)整數(shù)不能用無(wú)符號(hào)數(shù)表示。 (3)存儲(chǔ)單元中,若最高位為0,即為正數(shù),該數(shù)可理解為無(wú)符號(hào)數(shù),也可理解為有符號(hào)數(shù),其值是相等的。 (4)內(nèi)存儲(chǔ)單元中,最高位為1時(shí),若理解為有符號(hào)數(shù),則必為負(fù)數(shù),并且該負(fù)數(shù)是以補(bǔ)碼形式存放的。若理解為無(wú)符號(hào)數(shù),則最高位代表一定的數(shù)值,如16位二進(jìn)制數(shù)最高位為1時(shí),代表216-1,即表示32768。 【例2-3】整型變量的定義與輸出。 #include"stdio.h" main() { inta; /*指定a為整型常數(shù)*/ unsignedb; /*指定b為無(wú)符號(hào)整型常數(shù)*/ a=-1; /*將a賦值為-1*/ b=a; printf("a=%d\n",a); /*輸出a的值*/ printf("b=%u\n",b); /*輸出無(wú)符號(hào)數(shù)b的值*/ } 運(yùn)行結(jié)果: a=-1 b=65535 4.整型變量的賦值 可以將一個(gè)整型常量或整型變量賦值給整型變量,例如: intx=560; 但是要注意任何一個(gè)整型變量占用一定的存儲(chǔ)空間,因此其存儲(chǔ)的數(shù)據(jù)取值范圍也就是一定的,詳細(xì)情況見(jiàn)表2-2。如果將一個(gè)大于32767或小于-32768的數(shù)據(jù)賦值給一個(gè)int型變量就會(huì)產(chǎn)生溢出。 產(chǎn)生的結(jié)果和我們的想象不同,原因是32768被接收為1000000000000000,它是-32768的補(bǔ)碼;32769被接收為1000000000000001,它是-32767的補(bǔ)碼,如圖2.2所示。圖2.2整型數(shù)據(jù)在內(nèi)存中的溢出-32768-32767 整型數(shù)據(jù)的溢出在編譯時(shí)不會(huì)出錯(cuò),但在程序運(yùn)行中會(huì)出現(xiàn)錯(cuò)誤,因此應(yīng)該避免。 平時(shí)應(yīng)注意不同類型數(shù)據(jù)的取值范圍,如果整型變量不能處理問(wèn)題,則可以考慮用長(zhǎng)整型變量。 可以將一個(gè)整型常量后面加一個(gè)字母l或L,則認(rèn)為此常量為長(zhǎng)整型常量,也可以將此長(zhǎng)整型常量賦值給一個(gè)長(zhǎng)整型變量。例如: longx=560L; 長(zhǎng)整型常量往往用于函數(shù)調(diào)用中。如果函數(shù)的形參為longint型,則要求實(shí)參也要是長(zhǎng)整型。 2.2.2實(shí)型數(shù)據(jù) 1.實(shí)型常量 在C語(yǔ)言中實(shí)型表示實(shí)數(shù)的集合,實(shí)型常量又稱實(shí)數(shù)。實(shí)型常量有兩種表現(xiàn)形式。 1)十進(jìn)制數(shù)形式 十進(jìn)制數(shù)形式和數(shù)學(xué)中的實(shí)數(shù)形式類同,由數(shù)字和小數(shù)點(diǎn)組成,小數(shù)點(diǎn)是實(shí)數(shù)的標(biāo)志。 例如:0.168,168,1680,3.168,168.3,0.0都是實(shí)數(shù)。

2)指數(shù)形式 實(shí)數(shù)的指數(shù)形式類似于數(shù)學(xué)中的指數(shù)形式。C語(yǔ)言中,它由數(shù)字、小數(shù)點(diǎn)和字母E或e組成,格式如下: 數(shù)字[小數(shù)]E[±]整數(shù) ([]內(nèi)為可省項(xiàng)) 實(shí)型常數(shù)的表示方法示例見(jiàn)表2-3。表2-3實(shí)型數(shù)據(jù)在C語(yǔ)言中的表示形式 在使用指數(shù)形式時(shí)應(yīng)注意以下幾項(xiàng): (1)字母E(或e)前可以是小數(shù)或整數(shù),如果是純小數(shù),則可以將小數(shù)點(diǎn)之前的0省略,但是E(e)之前必須有數(shù)字。例如E2,e是不合法的指數(shù)形式。 (2)字母E(或e)后必須為整數(shù),不能出現(xiàn)小數(shù)的情況。例如1e2.5,1.2E8.9是不合法的指數(shù)形式。 (3)一個(gè)實(shí)數(shù)有多種指數(shù)表示形式,如果字母E(或e)前的小數(shù)或整數(shù)的范圍是1~10,則此時(shí)稱為“規(guī)范化的指數(shù)形式”。 2.實(shí)型變量 1)實(shí)型變量的分類 實(shí)型變量分為以下3種類型: (1)單精度型,以float表示。 (2)雙精度型,以double表示。 (3)長(zhǎng)雙精度型,以longdouble表示。 2)實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式 與整型數(shù)據(jù)的存儲(chǔ)形式不同,實(shí)型數(shù)據(jù)是以指數(shù)形式存放的。一般情況下,系統(tǒng)將一個(gè)實(shí)型數(shù)據(jù)分為小數(shù)部分和指數(shù)部分并分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式,具體存放結(jié)構(gòu)如圖2.3所示。圖2.3實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)符占用一位,用來(lái)表示數(shù)據(jù)的符號(hào)。小數(shù)部分占用的位越多,數(shù)的有效數(shù)字就越多。指數(shù)部分占用的位越多,數(shù)值范圍也就越大。實(shí)型數(shù)據(jù)所占用的字節(jié)數(shù)、有效數(shù)字位數(shù)和數(shù)值的范圍見(jiàn)表2-4。表2-4實(shí)型數(shù)據(jù) 3)實(shí)型變量的定義 實(shí)型變量定義的格式如下: 類型標(biāo)識(shí)符變量名1,變量名2,變量名3,…; 類型標(biāo)識(shí)符可以是float、double、longdouble等,例如: floatx,y; /*指定變量x,y為單精度實(shí)型變量*/ doublelength,high; /*指定變量length,high為雙精度實(shí)型變量*/ longdoublec,d;/*指定變量c,d為長(zhǎng)雙精度實(shí)型變量*/ 4)實(shí)型變量的賦值 可以將實(shí)型常量或?qū)嵭妥兞抠x值給實(shí)型變量。注意單精度實(shí)型數(shù)據(jù)的有效位數(shù)是6~7位,在進(jìn)行賦值和計(jì)算時(shí)會(huì)產(chǎn)生誤差,在雙精度實(shí)型數(shù)據(jù)和長(zhǎng)雙精度實(shí)型數(shù)據(jù)中也同樣存在此問(wèn)題。例2-5說(shuō)明實(shí)型數(shù)據(jù)的確存在誤差。 【例2-5】將一個(gè)有效數(shù)字位超過(guò)7位的數(shù)賦值給實(shí)型變量,然后輸出實(shí)型變量的值,實(shí)型變量產(chǎn)生誤差。

#include"stdio.h" main() { floatx=123456789; doubley=123456789; printf("\nx=%f,y=%f",x,y); } 運(yùn)行結(jié)果: x=123456792.000000,y=123456789.000000 從運(yùn)行結(jié)果可以看出,單精度實(shí)型變量x只接收了前面7位,從第8位開(kāi)始數(shù)據(jù)不準(zhǔn)確。所以在使用實(shí)型數(shù)據(jù)時(shí)一定注意可能產(chǎn)生的誤差。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接進(jìn)行運(yùn)算,否則將“丟失”這個(gè)很小的數(shù)。 許多C編譯系統(tǒng)將實(shí)型常量作為雙精度來(lái)處理,這樣保證計(jì)算結(jié)果更精確,但是運(yùn)算速度會(huì)降低??梢栽跀?shù)的后面加字母F或f(例如1.23f),這樣系統(tǒng)就會(huì)按單精度來(lái)進(jìn)行運(yùn)算,可以提高運(yùn)行速度,但是會(huì)降低運(yùn)算的精度。 2.2.3字符型數(shù)據(jù) 1.字符型常量 字符型常量(簡(jiǎn)稱字符常量)是一個(gè)字符,在表示時(shí)由兩個(gè)單引號(hào)括起來(lái)。 在C語(yǔ)言中每一個(gè)字符型常量均有其特定的值,也就是一個(gè)字符一個(gè)編碼,通常使用ASCII碼(美國(guó)標(biāo)準(zhǔn)信息交換碼)。例如'A','a','+','?','','1','2'等都是合法的字符常量。 字符型常量在內(nèi)存中占用一個(gè)字節(jié),其取值范圍為0~255,存放的是字符的ASCII碼值,如字符‘A’的值為65,‘B’的值為66,‘a(chǎn)’的值是97,‘0’的值是48,空格字符的值為32。所有字符常量還可作為整型量進(jìn)行運(yùn)算,以及參與相應(yīng)的各種操作。 例如,'A'+1的值為66,或'A'+1的值為'B'。 2.轉(zhuǎn)義字符 C語(yǔ)言中有一種特殊的字符常量——轉(zhuǎn)義字符,這類字符常量是以反斜杠字符“\”開(kāi)頭的字符序列,它表示某個(gè)特定的ASCII碼字符。在程序中,轉(zhuǎn)義字符要放在一對(duì)單引號(hào)內(nèi)。 轉(zhuǎn)義字符及其作用見(jiàn)表2-5。表2-5轉(zhuǎn)義字符及其作用【例2-6】使用轉(zhuǎn)義字符控制輸出實(shí)例。#include"stdio.h"main(){printf("\n\t\101"); /*光標(biāo)到下一行行首,再到下一個(gè)制表位,輸出A(ASCII編碼*//*為八進(jìn)制的101)*/printf("\n\t\b\b\b\b"); /*光標(biāo)到下一行的行首,再到下一個(gè)制表位,然后退四格*/ printf("\\*hello*\\"); /*輸出\*hello*\*/ printf("\n\t\x41"); /*光標(biāo)到下一行行首,再到下一個(gè)制表位,輸出A(ASCII編碼*/ /*為十六進(jìn)制的41)*/ } 運(yùn)行結(jié)果: A \*hello*\ A 從上面的例子中可以看出,要想使輸出的結(jié)果美觀大方,可以使用轉(zhuǎn)義字符。例如,若希望輸出字符“\”,則使用“\\”;若希望輸出雙引號(hào)“"”,則使用“\"”等。 3.字符變量 字符型變量用來(lái)存放字符常量,要注意一個(gè)字符變量只能放一個(gè)字符,不要以為在一個(gè)字符變量中可以放一個(gè)字符串(包括若干個(gè)字符)。 1)字符變量的定義 字符變量的定義形式如下: char字符變量名1,字符變量名2,字符變量名3,…; 例如,下面定義了兩個(gè)字符變量c1,c2: charc1,c2;

2)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式 將一個(gè)字符常量放在一個(gè)字符變量中,實(shí)際上并不是將字符的點(diǎn)陣信息或矢量信息放在內(nèi)存中,而是將該字符的ASCII碼信息放在相應(yīng)的內(nèi)存中。 例如字符“a”的ASCII碼為97,字符“b”的ASCII碼為98,如果將其分別放在字符變量c1和c2中,十進(jìn)制存儲(chǔ)形式如圖2.4(a)所示,實(shí)際上是以二進(jìn)制的形式存儲(chǔ)的,如圖2.4(b)所示。 3)字符變量的賦值 可以將一個(gè)字符常量或字符變量賦值給一個(gè)字符變量,也可以將0~255的整型數(shù)據(jù)賦值給一個(gè)字符變量,并且字符變量、字符常量、0~255的整型數(shù)據(jù)之間可以進(jìn)行運(yùn)算。圖2.4字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)(a)十進(jìn)制存儲(chǔ)形式;(b)二進(jìn)制存儲(chǔ)形式 【例2-7】分別將字符常量和整型常量賦給字符型變量,然后輸出字符或者輸出字符的ASCII碼。 #include"stdio.h" main() { charc1,c2; c1='A'; /*將65賦給c1*/ c2=66; /*將66賦給c2*/ printf("\nc1=%c,c2=%c",c1,c2); /*輸出c1,c2存放的字符*/

printf("\nvalueofc1andc2:%d%d",c1,c2); /*輸出c1,c2中存放的數(shù)據(jù)*/ printf("\nnextcharacterofc1:%c",c1+1); /*輸出字符A下面的字符*/ } 從該例中可以看出,C語(yǔ)言對(duì)字符的這種處理方法為程序設(shè)計(jì)增大了自由度。如可以對(duì)文字進(jìn)行加密,即可以對(duì)字符作各種轉(zhuǎn)換。大寫字母A和B的ASCII碼為65和66,小寫字母a和b的ASCII碼為97和98,可以看出小寫字母的ASCII碼比其大寫字母大32,即'A'+32就得到'a',計(jì)算非常方便。 【例2-8】將大寫字母轉(zhuǎn)換為小寫字母,將小寫字母轉(zhuǎn)換為大寫字母。 #include"stdio.h" main() { charc1,c2; c1='A'; c2='b'; c1=c1+32; /*將大寫字母加32得到小寫字母*/

c2=c2-32; /*將小寫字母減32得到大寫字母*/ printf("c1=%c,c2=%c",c1,c2); } 運(yùn)行結(jié)果: c1=a,c2=B 4.字符串常量 1)字符串常量的定義 字符串常量是指用一對(duì)雙引號(hào)括起來(lái)的字符序列。如"howareyou!","$123","CHINA","a"都是字符串常量。 注意:C語(yǔ)言中沒(méi)有字符串變量,字符串存放在字符數(shù)組中,例如charc[5]={"CHINA"},詳細(xì)情況參見(jiàn)后面章節(jié)。 2)字符串常量在內(nèi)存中的存儲(chǔ)形式 字符串常量在內(nèi)存中存儲(chǔ)時(shí)一個(gè)字符占用一個(gè)字節(jié),并且在字符串的末尾有一個(gè)結(jié)束符,C語(yǔ)言規(guī)定結(jié)束符為字符'\0',字符'\0'是指ASCII碼為0的字符。字符串必須有一個(gè)結(jié)束符。如果沒(méi)有結(jié)束符,則程序在輸出時(shí)不知到何處停止。例如,字符串"CHINA"在內(nèi)存中的存儲(chǔ)情況如圖2.5所示。圖2.5字符串在內(nèi)存中的存儲(chǔ) 2.2.4變量賦初值 變量賦初值是指在定義變量的同時(shí)對(duì)變量進(jìn)行賦值。例如: inta=5; floatp=3.14; charc1='a'; 可以對(duì)被定義的變量的一部分賦初值。例如: inta,b,c=10; 如果對(duì)幾個(gè)變量賦予同一個(gè)值,則可以寫成 inta=b=c=d=10;

變量的初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)進(jìn)行賦值的,所以初始化語(yǔ)句為 inta=10; 相當(dāng)于 inta; a=10;2.3運(yùn)算符和表達(dá)式 2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式 1.基本的算術(shù)運(yùn)算符 基本的算術(shù)運(yùn)算符有5個(gè):+、﹣、*、/、%,其特性見(jiàn)表2-6。表2-6基本運(yùn)算符列表 這5種運(yùn)算符均可以作為雙目運(yùn)算符,即在運(yùn)算符的兩邊有數(shù)據(jù)。+和-運(yùn)算符可以為單目運(yùn)算符,即運(yùn)算符的右邊有數(shù)據(jù),例如+3,-5等。兩個(gè)整數(shù)相除的結(jié)果為一個(gè)整數(shù),但是,如果除數(shù)或被除數(shù)中出現(xiàn)一個(gè)負(fù)數(shù),則結(jié)果是不固定的。例如:-5/3有的機(jī)器的結(jié)果為-1,有的機(jī)器的結(jié)果為-2,如遇到此類問(wèn)題應(yīng)該編寫程序測(cè)試結(jié)果。 注意,求余運(yùn)算符%兩側(cè)的數(shù)據(jù)要求必須為整數(shù),運(yùn)算的結(jié)果為整數(shù)相除的余數(shù)。 2.算術(shù)表達(dá)式 由算術(shù)運(yùn)算符將操作數(shù)連接起來(lái)的有意義的式子稱為算術(shù)表達(dá)式。例如2+a*b,-3*a%b,a*(b+3)等,其中,“()”也是運(yùn)算符,在所有運(yùn)算符中級(jí)別最高。 3.算術(shù)運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 運(yùn)算符*、/、%的優(yōu)先級(jí)為3級(jí),高于+、-的4級(jí)。這5種運(yùn)算符的結(jié)合性是“自左至右”的。 2.3.2自增、自減運(yùn)算符及其表達(dá)式 自增(自減)運(yùn)算符有兩類,分別為前置和后置運(yùn)算符。 1.格式與功能 1)前置運(yùn)算符的格式和功能 前置自增、自減運(yùn)算符的格式為 ++i--i 功能:變量i先增加(減少)1,即i=i±1,然后再使用i的值。

2)后置運(yùn)算符的格式和功能 后置自增、自減運(yùn)算符的格式為

i++i-- 功能:先使用i的值,然后變量i的值增加(減少)1,即i=i±1。 例如: inta=3,b; b=a++; 執(zhí)行后,b的值為3,a的值為4。 又如: inta=3,b; b=++a; 執(zhí)行后,b的值為4,a的值為4。 2.自增、自減運(yùn)算符的運(yùn)算 自增、自減運(yùn)算為單目運(yùn)算,其運(yùn)算數(shù)據(jù)為單操作數(shù),且操作數(shù)只能是變量,不能是常量或表達(dá)式。如7++、(x+y)--均是錯(cuò)誤的表示方法。 3.自增、自減運(yùn)算符的結(jié)合性 自增、自減運(yùn)算符屬右結(jié)合性。 例如,若有“inti=3;”則對(duì)于表達(dá)式-i++是理解為(-i)++呢,還是理解為-(i++)?因自增運(yùn)算符只適用于變量,而-i不是變量,是表達(dá)式,顯然(-i)++從語(yǔ)法上說(shuō)是錯(cuò)誤的。而-i++的“-”號(hào)與“++”號(hào)同級(jí),也就是說(shuō),變量i兩邊出現(xiàn)兩個(gè)級(jí)別相同的運(yùn)算符,由于這種運(yùn)算符屬右結(jié)合性,因此i應(yīng)先與右邊的“++”號(hào)結(jié)合,即-i++等價(jià)于-(i++)。 又如:設(shè)有語(yǔ)句“inti=3,a;”,則表達(dá)式a=-(i++)等價(jià)于{a=-i;i=i+1;}。 由于“++”在i之后,故先使用i,然后使I的值增加1。執(zhí)行該表達(dá)式后,a的值為-3,i的值為4。 在使用自增、自減運(yùn)算符時(shí)應(yīng)注意以下幾項(xiàng): (1)使用++i或i++單獨(dú)構(gòu)成語(yǔ)句時(shí),其作用是等價(jià)的,均為i=i+1。 (2)運(yùn)算對(duì)象只能是整型變量和實(shí)型變量。 (3)對(duì)于表達(dá)式(i++)+(i++)+(i++),不同的編程環(huán)境,其結(jié)果不同。若設(shè)“i=3;”,本書使用TurboC系統(tǒng),表達(dá)式的值是9,i的值自增3次,結(jié)果為6。 【例2-9】自增、自減運(yùn)算符的運(yùn)算。 #include"stdio.h" main() { inti,j; i=3; j=i++; /*i賦給j,j=3,i自增1,i=4*/ printf("\nj=%d,i=%d",j,i); i=3; j=++i; /*i自增1,i=4,i賦給j,j=4*/ printf("\nj=%d,i=%d",j,i); i=3; printf("\ni=%d",i++); /*i=3輸出i的值,然后i自增1,i=4*/ printf("\ni=%d",++i); /*i=4,i自增1,i=5,輸出i的值*/ i=3; printf("\n%d,%d",i++,i++); /*運(yùn)算由右至左,輸出結(jié)果為4,3,之后i=5*/

printf("\n%d,%d",++i,++i); /*開(kāi)始i=5,運(yùn)算由右至左,輸出結(jié)果為7,6,最后i=7*/ i=3; j=(i++)+(i++)+(i++); /*i=3,i先參與運(yùn)算,j=3+3+3,之后i進(jìn)行3次*/ /*自增1的運(yùn)算,i=6*/ printf("\nj=%d",j); i=3; j=(++i)+(++i)+(++i); /*i=3,i先進(jìn)行三次自增1的運(yùn)算,i=6,j=6+6+6*/ printf("\nj=%d",j); } 運(yùn)行結(jié)果:j=3,i=4j=4,i=4i=3i=54,37,6j=9j=18 2.3.3逗號(hào)運(yùn)算符及其表達(dá)式 C語(yǔ)言提供一種特殊的運(yùn)算符——逗號(hào)運(yùn)算符,即“,”。逗號(hào)運(yùn)算符的優(yōu)先級(jí)別最低,結(jié)合性是自左至右。逗號(hào)表達(dá)式是指用逗號(hào)運(yùn)算符將兩個(gè)表達(dá)式結(jié)合起來(lái)的表達(dá)式。 1.逗號(hào)表達(dá)式的格式和功能 逗號(hào)表達(dá)式的格式為 表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n 功能:先計(jì)算表達(dá)式1,再計(jì)算表達(dá)式2,最后計(jì)算表達(dá)式n。最后一個(gè)表達(dá)式的值即為此逗號(hào)表達(dá)式的值。 2.逗號(hào)運(yùn)算符的優(yōu)先級(jí) 在所有運(yùn)算符中,逗號(hào)運(yùn)算符級(jí)別是最低的。例如,對(duì)于表達(dá)式b=a=3,6*b,其作用是將3賦給變量a和b,而逗號(hào)表達(dá)式的值為18。 利用逗號(hào)表達(dá)式可實(shí)現(xiàn)在一條C語(yǔ)言中對(duì)多個(gè)變量賦予不同值的功能。因此,在有些情況下,我們并不關(guān)心逗號(hào)表達(dá)式的值,而是關(guān)心逗號(hào)表達(dá)式中各個(gè)表達(dá)式的功能。 例如,表達(dá)式“a=3,b=4,c=5”的功能是將3,4和5分別賦給變量a,b和c;而表達(dá)式“a=7+b+c,a++”的功能是將7+b+c的值賦給變量a后,變量a自增加1。 注意,并不是任何地方出現(xiàn)的逗號(hào)都作為逗號(hào)運(yùn)算符。例如,函數(shù)參數(shù)也是用逗號(hào)隔開(kāi)的,如: printf("%d,%d,%d",a,b,c); 上一行“a,b,c”中的逗號(hào)不是逗號(hào)運(yùn)算符,它只是起到了隔開(kāi)參數(shù)的目的。 2.3.4賦值運(yùn)算符及其表達(dá)式 1.賦值運(yùn)算符 賦值運(yùn)算符,即“=”,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。數(shù)據(jù)可以是常量、變量、表達(dá)式等。如“a=3”的作用是將常量3賦給變量a。 賦值運(yùn)算符“=”不同于數(shù)學(xué)中的等號(hào)。因?yàn)閤=x+1在數(shù)學(xué)中是絕對(duì)不成立的,而在C語(yǔ)言中是將x的值加1再賦給x變量。 2.復(fù)合的賦值運(yùn)算符 在賦值運(yùn)算符的前面加上其他運(yùn)算符,可以構(gòu)成復(fù)合的賦值運(yùn)算符。凡是二目運(yùn)算符都可以與賦值運(yùn)算符一起構(gòu)成復(fù)合賦值運(yùn)算符。C語(yǔ)言規(guī)定有10種復(fù)合賦值運(yùn)算符: +=,﹣=,*=,/=,%=,<<=,>>=,&=,^=,|= 復(fù)合賦值運(yùn)算符級(jí)別相同,且與賦值運(yùn)算符同一優(yōu)先級(jí),都具有右結(jié)合性,即結(jié)合方向是“自右至左”。 復(fù)合賦值運(yùn)算符的運(yùn)算比較特殊,例如: a+=3 等價(jià)于a=a+3 b-=8+3 等價(jià)于b=b-(8+3) x*=x+3 等價(jià)于x=x*(x+3) y%=3 等價(jià)于y=y%3 C語(yǔ)言中采用復(fù)合賦值運(yùn)算符的目的,一是為了簡(jiǎn)化程序,二是為了提高編譯效率。 3.賦值表達(dá)式 用賦值運(yùn)算符或復(fù)合賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱為賦值表達(dá)式,它的一般形式為變量賦值運(yùn)算符表達(dá)式

每一個(gè)表達(dá)式都有一個(gè)值,賦值表達(dá)式的值就是前面變量的值。例如“x=10”是一個(gè)賦值表達(dá)式,表達(dá)式的作用是將10賦給變量x,此表達(dá)式的值為10?!癮=b=10”也是一個(gè)賦值表達(dá)式,因?yàn)橘x值運(yùn)算符的結(jié)合性是“自右至左”,所以表達(dá)式先進(jìn)行b=10的運(yùn)算,然后再進(jìn)行a=b的運(yùn)算。 賦值表達(dá)式也可以包括復(fù)合的賦值運(yùn)算符。例如: a+=a-=a*a 也是一個(gè)賦值表達(dá)式,此表達(dá)式運(yùn)算比較復(fù)雜,先進(jìn)行a=a-a*a運(yùn)算,得到a的值之后,進(jìn)行a=a+a運(yùn)算。如果a的初值為12,最后得到的結(jié)果a=-264。 【例2-10】賦值運(yùn)算符的使用。 #include"stdio.h" main() { inta,b; charc1,c2; a=b=48; /*將字符'0'的ASCII碼值48賦給a和b*/ c1=a+3; /*將a+3的值賦給c1,即字符'3'的ASCII碼賦給c1*/

c2=b+2; /*將b+2的值賦給c2,即字符'2'的ASCII碼賦給c2*/ printf("%c,%c,%c,%c",a,b,c1,c2); } 運(yùn)行結(jié)果: 0,0,3,2 2.3.5不同類型數(shù)據(jù)間的轉(zhuǎn)換 C語(yǔ)言允許數(shù)據(jù)從一種類型轉(zhuǎn)換為另一種類型,以適應(yīng)各種不同的數(shù)據(jù)類型間的運(yùn)算。 1.數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換 數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換常發(fā)生在以下情況中:(1)進(jìn)行運(yùn)算時(shí)轉(zhuǎn)換。要求表達(dá)式中各操作數(shù)具有相同的數(shù)據(jù)類型,即不同類型數(shù)據(jù)進(jìn)行混算時(shí)進(jìn)行轉(zhuǎn)換。 (2)賦值轉(zhuǎn)換。把表達(dá)式值賦給與其不同類型的變量時(shí)進(jìn)行轉(zhuǎn)換。 (3)輸出轉(zhuǎn)換。其輸出值的類型與其指定輸出格式的類型不一致時(shí),進(jìn)行轉(zhuǎn)換。 (4)函數(shù)調(diào)用轉(zhuǎn)換。在實(shí)參與形參類型不一致時(shí),進(jìn)行轉(zhuǎn)換。 下面僅介紹算術(shù)運(yùn)算轉(zhuǎn)換和賦值轉(zhuǎn)換,其他轉(zhuǎn)換在以后章節(jié)分別介紹。 2.不同類型數(shù)據(jù)間的混合運(yùn)算圖2.6混合運(yùn)算時(shí)不同類型數(shù)據(jù)間的轉(zhuǎn)換 整型、實(shí)型和字符型數(shù)據(jù)可以進(jìn)行混合運(yùn)算。在進(jìn)行運(yùn)算時(shí),應(yīng)先把不同類型的數(shù)據(jù)轉(zhuǎn)換為同一類型,然后進(jìn)行運(yùn)算,轉(zhuǎn)換規(guī)則,參見(jiàn)圖2.6所示。 圖中上、下兩個(gè)橫向向左箭頭表示必然轉(zhuǎn)換。也就是說(shuō),當(dāng)浮點(diǎn)型float數(shù)據(jù)在運(yùn)算時(shí)一定要先轉(zhuǎn)換為double型數(shù)據(jù);字符型char數(shù)據(jù)在運(yùn)算時(shí),一定要先轉(zhuǎn)換為int整型數(shù)據(jù)。 圖中縱向箭頭表示不同類型數(shù)據(jù)運(yùn)算時(shí)轉(zhuǎn)換的方向。也就是說(shuō),按由低到高方向轉(zhuǎn)換為相同類型即可進(jìn)行運(yùn)算。例如,int型數(shù)據(jù)與long型數(shù)據(jù)進(jìn)行運(yùn)算時(shí),int型數(shù)據(jù)先轉(zhuǎn)換為long型數(shù)據(jù),然后運(yùn)算,結(jié)果為long型數(shù)據(jù)。注意,只要由低向高轉(zhuǎn)換為相同類型數(shù)據(jù)即可,不能理解為要轉(zhuǎn)換為double型數(shù)據(jù)。 又如,int型數(shù)據(jù)、float型數(shù)據(jù)與double型數(shù)據(jù)進(jìn)行運(yùn)算時(shí),int型和float型都要先轉(zhuǎn)換為double型數(shù)據(jù),然后再參加運(yùn)算,運(yùn)算結(jié)果為double型。例如: 其運(yùn)算后,d的結(jié)果為double型數(shù)據(jù)。 3.賦值轉(zhuǎn)換 在賦值語(yǔ)句中,如果賦值運(yùn)算符兩邊類型不一致,但都是數(shù)值型或字符型數(shù)據(jù),則C語(yǔ)言允許賦值表達(dá)式右邊的值的類型自動(dòng)轉(zhuǎn)換為左邊變量的類型,常見(jiàn)的賦值轉(zhuǎn)換如下。 (1)將整型數(shù)據(jù)賦給實(shí)型變量,這時(shí)數(shù)值不變,但以實(shí)型數(shù)據(jù)形式存到變量中。例如: floatf; f=23; /*將23轉(zhuǎn)換為23.000000,然后存入變量f中*/

(2)將實(shí)型數(shù)據(jù)賦給整型變量,這時(shí)舍棄小數(shù)部分,取整數(shù)部分賦給整型變量。例如: inti; i=2.68; /*i的值為2*/ (3)將int型整型數(shù)據(jù)賦給無(wú)符號(hào)型整型變量,int型數(shù)據(jù)按存儲(chǔ)單元中實(shí)際二進(jìn)制位的內(nèi)容直接賦給unsigned型變量。 若int型數(shù)據(jù)為正數(shù),即存儲(chǔ)單元中最高位為0,賦值后,則int型數(shù)據(jù)與unsigned型數(shù)據(jù)的數(shù)值相同。 若int型數(shù)據(jù)為負(fù)數(shù),即存儲(chǔ)單元中最高位為1,賦值后,unsigned型數(shù)據(jù)在使用時(shí),最高位將代表一定的數(shù)值(16位二進(jìn)制數(shù),最高位代表216-1)。

【例2-11】輸出a和b所對(duì)應(yīng)的無(wú)符號(hào)型數(shù)據(jù)。 #include"stdio.h" main() { inta,b; unsignedu1,u2; a=1;b=-1; /*-1以補(bǔ)碼形式賦給b*/ u1=a; u2=b; /*-1的補(bǔ)碼為1111111111111111,直接賦給u2*/ printf("%d,%d,%u,%u",a,b,u1,u2); } 運(yùn)行結(jié)果: 1,-1,1,65535 說(shuō)明:執(zhí)行“a=1;b=-1;”后,有 高8位 低8位 a 00000000 00000001 b 11111111 1111111 執(zhí)行“u1=a;u2=b;”后,有

高8位 低8位 u1 00000000 00000001 u2 11111111 11111111 在輸出u2時(shí),按無(wú)符號(hào)形式應(yīng)為65535。 (4)字符型數(shù)據(jù)賦給整型變量。字符型數(shù)據(jù)占1個(gè)字節(jié),而整型變量占2個(gè)字節(jié),因此賦值轉(zhuǎn)換過(guò)程中,存在位的擴(kuò)展。 ①對(duì)于unsigned型變量,字符型數(shù)據(jù)(8位)傳送給unsigned變量的低8位,而unsigned變量的高8位只需補(bǔ)0。 ②對(duì)于int型變量,若字符型數(shù)據(jù)最高位為0,則int型變量的高8位補(bǔ)0;若字符型數(shù)據(jù)最高位為1,則int型變量的高8位補(bǔ)1。這樣可以保持?jǐn)?shù)值不變。 【例2-12】輸出c1和c2所對(duì)應(yīng)的無(wú)符號(hào)型數(shù)據(jù)。 #include"stdio.h" main() { inta,b; charc1,c2; c1='a';c2='\376'; a=c1; b=c2; printf("%d,%d,%d,%d\n",a,b,c1,c2); printf("%u,%u,%u,%u\n",a,b,c1,c2); }運(yùn)行結(jié)果:97,-2,97,-297,65534,97,65534其存儲(chǔ)情況如下:高8位低8位c10000000001100001c20000000011111110a0000000001100001b1111111111111110 4.強(qiáng)制類型轉(zhuǎn)換 在C語(yǔ)言中,可以利用強(qiáng)制類型轉(zhuǎn)換符,將表達(dá)式的類型轉(zhuǎn)換為所需類型。 強(qiáng)制類型轉(zhuǎn)換的一般形式為 (類型名)表達(dá)式 例如:(int)a表示將a轉(zhuǎn)換成int類型; (int)(3.2+5)表示將(3.2+5)轉(zhuǎn)換成int類型,即將8.2 轉(zhuǎn)換成8; (float)(7%3)表示將(7%3)的值轉(zhuǎn)換成float型。 說(shuō)明: (1)強(qiáng)制類型轉(zhuǎn)換時(shí),表達(dá)式要用括號(hào)括起來(lái),以防止出現(xiàn)錯(cuò)誤。 例如,設(shè)x=3.2,y=2.5,則表達(dá)式(int)(x+y)表示將x+y的值5.7取整,即值為5;而對(duì)于表達(dá)式(int)x+y,則表示先對(duì)x取整后,再加實(shí)型變量y的值,表達(dá)式的值為實(shí)型,其值為5.5。 (2)強(qiáng)制類型轉(zhuǎn)換是將所需變量或表達(dá)式的值轉(zhuǎn)換為可需類型,但并不改變?cè)瓉?lái)變量和表達(dá)式的類型屬性,也就是說(shuō)原來(lái)變量或表達(dá)式的類型未發(fā)生任何變化。 (3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符要用圓括號(hào)括起來(lái),而變量定義時(shí)類型名直接書寫,在使用時(shí)易發(fā)生混淆,應(yīng)特別注意。 【例2-13】強(qiáng)制類型轉(zhuǎn)換。 #include"stdio.h" main() { inta,b,c; /*定義a,b,c為整型變量*/ floatx,y; /*定義x,y為實(shí)型變量*/ x=3.6;y=4.2; /*給x,y賦值*/ a=(int)x; /*將x值3.6轉(zhuǎn)為整型并賦給a*/ b=(int)(x+y);/*將x+y的值轉(zhuǎn)為整型并賦給b*/ c=a%b; /*a除以b的余數(shù)賦給c*/ x=x+y; /*x,y仍為實(shí)型,將其和賦給實(shí)型變量x*/ printf("a=%d,b=%d,c=%d,x=%f",a,b,c,x); }

運(yùn)行結(jié)果: a=3,b=7,c=3,x=7.800000 從以上程序可以看出,在執(zhí)行“a=(int)x;”語(yǔ)句時(shí),把x的值3.6轉(zhuǎn)換為整型數(shù)據(jù)3賦給a后,變量x的類型仍為實(shí)型。 上例也可縮寫為下列程序段: #include"stdio.h" main() { intc; floatx=3.6,y=4.2; c=(int)x%(int)(x+y); x=x+y; printf("c=%d,x=%f",c,x); } 運(yùn)行結(jié)果: c=3,x=7.800000習(xí)題2 一、選擇題 2.1請(qǐng)選出可用作C語(yǔ)言用戶標(biāo)識(shí)符的一組標(biāo)識(shí)符()。 A)voidDefineWord B)a3_b3_123IF C)For-abcCase D)2aDosizeof

溫馨提示

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