




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 2 章 基本數(shù)據(jù)類型本章介紹常量與變量的概念,以及C語(yǔ)言基本數(shù)據(jù)類型中的整型、字符型、 實(shí)型數(shù)據(jù)的基本知識(shí),各種不同數(shù)據(jù)類型之間的轉(zhuǎn)換及混合運(yùn)算。2.1 數(shù)據(jù)概述一個(gè)完整的計(jì)算機(jī)程序,至少應(yīng)包含兩方面的內(nèi)容,一方面對(duì)數(shù)據(jù)進(jìn)行描述,另一方面對(duì)操作進(jìn)行描述。數(shù)據(jù)是程序加工的對(duì)象,數(shù)據(jù)描述是通過(guò)數(shù)據(jù)類型來(lái)完成的,操作描述則通過(guò)語(yǔ)句來(lái)完成。C 語(yǔ)言不僅提供了多種數(shù)據(jù)類型,還提供了構(gòu)造更加復(fù)雜的用戶自定義數(shù)據(jù)結(jié)構(gòu)的機(jī)制。C語(yǔ)言提供的主要數(shù)據(jù)類型有:1. 基本類型:包括整型、字符型、實(shí)型(浮點(diǎn)型)和枚舉類型2. 構(gòu)造類型:包括數(shù)組、結(jié)構(gòu)體和共用體類型3. 指針類型4. 空類型其中整型、字符型、實(shí)型(浮
2、點(diǎn)型)和空類型由系統(tǒng)預(yù)先定義,又稱標(biāo)準(zhǔn)類型。基本類型的數(shù)據(jù)又可分為常量和變量,它們可與數(shù)據(jù)類型結(jié)合起來(lái)分類,即為整型常量、整型變量、實(shí)型(浮點(diǎn)型)常量、實(shí)型(浮點(diǎn)型)變量、字符常量、字符變量、枚舉常量、枚舉變量。在本章中主要介紹基本數(shù)據(jù)類型(除枚舉類型外),其它數(shù)據(jù)類型在后續(xù)章節(jié)中再詳細(xì)介紹。5. 1.1 常量與符號(hào)常量在程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱為常量。常量區(qū)分為不同的類型,如68、0、-12為整型常量,3.14, 9.8為實(shí)型常量,a' , ' b' , ' c'則為字符常量。常量即為常數(shù),一般從其字面即可判別。有時(shí)為了使程序更加清晰和便于
3、修改,用一個(gè)標(biāo)識(shí)符來(lái)代表常量,即給某個(gè)常量取個(gè)有意義的名字,這種常量稱為符號(hào)常量。如:【例 2-1 】#define PI 3.14main( )float aera;aera=10*10*PI;printf( “ aera=%fn ” ,aera);程序中用#define 命令行定義PI 代表圓周率常數(shù)3.14 ,此后凡在文件中出現(xiàn)的PI 都代表圓周率3.14 ,可以和常量一樣進(jìn)行運(yùn)算,程序運(yùn)行結(jié)果為:aera=314.000000有關(guān) #define 命令行的詳細(xì)用法參見第9 章。這種用一個(gè)標(biāo)識(shí)符代表一個(gè)常量的,稱為符號(hào)常量。注意符號(hào)常量也是常量,它的值在其作用域內(nèi)不能改變,也不能再被賦值
4、。如再用以下語(yǔ)句給PI 賦值:PI=3.14;是錯(cuò)誤的。習(xí)慣上符號(hào)常量名用大寫字母來(lái)表示,變量名用小寫,以示區(qū)別。6. 1.2 變量在程序執(zhí)行過(guò)程中,取值可變的量稱為變量。一個(gè)變量必須有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,在該存儲(chǔ)單元中存放變量的值。請(qǐng)注意變量名和變量值是兩個(gè)不同的概念。變量名在程序運(yùn)行中不會(huì)改變,而變量值會(huì)變化,在不同時(shí)期取不同的值。變量的名字是一種標(biāo)識(shí)符,它必須遵守標(biāo)識(shí)符的命名規(guī)則。習(xí)慣上變量名用小寫字母表示, 以增加程序的可讀性。必須注意的是大寫字符和小寫字符被認(rèn)為是兩個(gè)不同的字符,因此,sum和Sum是兩個(gè)不同的變量名,代表兩個(gè)完全不同的變量。在程序中,常量是可以不經(jīng)
5、說(shuō)明而直接引用的,而變量則必須作強(qiáng)制定義(說(shuō)明),即“先說(shuō)明,后使用”,如例 1-2 和 1-3 那樣。這樣做的目的有以下幾點(diǎn):1. 凡未被事先定義的,不作為變量名,這就能保證程序中變量名使用得正確。例如,如果在定義部分寫了int count;而在程序中錯(cuò)寫成conut ,如: conut=5;在編譯時(shí)檢查出conut 未經(jīng)定義,不作為變量名,因此輸出“變量 conut 未經(jīng)說(shuō)明”的信息,便于用戶發(fā)現(xiàn)錯(cuò)誤,避免變量名使用時(shí)出錯(cuò)。2. 每一個(gè)變量被指定為某一確定的變量類型,在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。如指定 a 和 b 為整型變量,則為a 和 b 各分配兩個(gè)字節(jié),并按整數(shù)方式存儲(chǔ)數(shù)據(jù)。3
6、. 每一變量屬于一個(gè)類型,就便于在編譯時(shí)據(jù)此檢查所進(jìn)行的運(yùn)算是否合法。例如整型變量 a 和 b 可以進(jìn)行求余運(yùn)算: a%b%是求余運(yùn)算符(詳見第3 章),得到a/b 的整余數(shù)。如果將a 和 b 指定為實(shí)型變量,則不允許進(jìn)行“求余”運(yùn)算,編譯時(shí)會(huì)指出有關(guān)出錯(cuò)信息。下明各節(jié)分別介紹整型、實(shí)型、字符型數(shù)據(jù)及相互轉(zhuǎn)換。2.2 整型數(shù)據(jù)C語(yǔ)言中的整型數(shù)據(jù)包括整型常量和整型變量,描述的是整數(shù)的一個(gè)子集。2.2.1 整型常量整型常量就是整常數(shù)。在C語(yǔ)言中,使用的整常數(shù)有八進(jìn)制、十六進(jìn)制和十進(jìn)制三種,使用不同的前綴來(lái)相互區(qū)分。除了前綴外,C語(yǔ)言中還使用后綴來(lái)區(qū)分不同長(zhǎng)度的整數(shù)。1. 八進(jìn)制整常數(shù)八進(jìn)制整常數(shù)必
7、須以 0開頭,即以0作為八進(jìn)制數(shù)的前綴。數(shù)碼取值為07。如0123表示八進(jìn)制數(shù)123,即(123) 8 ,等于十進(jìn)制數(shù)83,即:1*82+2*81+3*80=83; -011 表示八進(jìn)制數(shù) -11 ,即 (-11) 8 ,等于十進(jìn)制數(shù)-9 。以下各數(shù)是合法的八進(jìn)制數(shù):015( 十進(jìn)制為13)0101( 十進(jìn)制為65) 0177777( 十進(jìn)制為65535)以下各數(shù)不是合法的八進(jìn)制數(shù):256( 無(wú)前綴 0)0382( 包含了非八進(jìn)制數(shù)碼8)2. 十六進(jìn)制整常數(shù)十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為09, AF或af。如0x123表示十六進(jìn)制數(shù)123,即(123) 16 ,等于十進(jìn)制數(shù)29
8、1,即:1*162+2*161+3*160=291; -011 表示十六進(jìn)制數(shù)-11 ,即 (-11) 16 ,等于十進(jìn)制數(shù)-17 。以下各數(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ù)碼)3. 十進(jìn)制整常數(shù)十進(jìn)制整常數(shù)沒(méi)有前綴,數(shù)碼取值為09。以下各數(shù)是合法的十進(jìn)制整常數(shù):237-5681627以下各數(shù)不是合法的十進(jìn)制整常數(shù):023 ( 不能有前導(dǎo)0)23D ( 含有非十進(jìn)制數(shù)碼)在程序中是根據(jù)前綴來(lái)區(qū)分各種進(jìn)制數(shù)的。因此在書
9、寫常數(shù)時(shí)不要把前綴弄錯(cuò),造成結(jié)果不正確。4. 整型常數(shù)的后綴在 16位字長(zhǎng)的機(jī)器上,基本整型的長(zhǎng)度也為16 位,因此表示的數(shù)的范圍也是有限定的。十進(jìn)制無(wú)符號(hào)整常數(shù)的范圍為065535,有符號(hào)數(shù)為-32768+32767。八進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為 0-0177777。十六進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為0X00XFFFF或0x00xFFFF。 如果使用的數(shù)超過(guò)了上述范圍,就必須用長(zhǎng)整型數(shù)來(lái)表示。長(zhǎng)整型數(shù)是用后綴“ L”或“ l ”來(lái)表示的(注意,字母“ L”的小寫形式“ l ”與數(shù)字“1”看上去很相似)。例如:十進(jìn)制長(zhǎng)整常數(shù)158L ( 十進(jìn)制為158) 、 358000L ( 十進(jìn)制為358000)
10、 。八進(jìn)制長(zhǎng)整常數(shù)012L ( 十進(jìn)制為10) 、 0200000L ( 十進(jìn)制為65536) 。十六進(jìn)制長(zhǎng)整常數(shù)0X15L ( 十進(jìn)制為21) 、 0XA5L ( 十進(jìn)制為165) 、0X10000L ( 十進(jìn)制為 65536) 。長(zhǎng)整數(shù)158L和基本整常數(shù)158在數(shù)值上并無(wú)區(qū)別。但對(duì) 158L,因?yàn)槭情L(zhǎng)整型量,C 編譯系統(tǒng)將為它分配 4個(gè)字節(jié)存儲(chǔ)空間。而對(duì) 158,因?yàn)槭腔菊?,只分?2個(gè)字節(jié)的 存儲(chǔ)空間。因此在運(yùn)算和輸出格式上要予以注意,避免出錯(cuò)。無(wú)符號(hào)數(shù)也可用后綴表示,整型常數(shù)的無(wú)符號(hào)數(shù)的后綴為“U”或" u”。例如:358u,0x38Au,235Lu均為無(wú)符號(hào)數(shù)。前綴,
11、后綴可同時(shí)使用以表示各種類型的數(shù)。如0XA5Lu表示十六進(jìn)制無(wú)符號(hào)長(zhǎng)整數(shù)A5,其十進(jìn)制為165。2.2.2 整型變量1 .整型變量的分類整型變量可分為基本型、短整型、長(zhǎng)整型、和無(wú)符號(hào)型四種。(1)基本型類型說(shuō)明符為int ,在內(nèi)存中占2個(gè)字節(jié)(在 舊M PC上,下同),其取值為基本整 常數(shù)。(2)短整型類型說(shuō)明符為short int 或short 。所占字節(jié)和取值范圍均與基本型相同。(3)長(zhǎng)整型類型說(shuō)明符為long int 或long ,在內(nèi)存中占4個(gè)字節(jié),其取值為長(zhǎng)整常數(shù)。(4)無(wú)符號(hào)型類型說(shuō)明符為unsigned ,存儲(chǔ)單元中全部二進(jìn)位(bit )用作存放數(shù)本身,而不包括 符號(hào)。無(wú)符號(hào)型又
12、可與上述三種類型匹配而構(gòu)成:無(wú)符號(hào)基本型類型說(shuō)明符為unsigned int 或unsigned。無(wú)符號(hào)短整型類型說(shuō)明符為unsigned short 。無(wú)符號(hào)長(zhǎng)整型類型說(shuō)明符為unsigned long 。各種無(wú)符號(hào)類型量所占的內(nèi)存空間字節(jié)數(shù)與相應(yīng)的有符號(hào)類型量相同。但由于省去了 符號(hào)位,故不能表示負(fù)數(shù),但可存放的數(shù)的范圍比一般整型變量中數(shù)的范圍擴(kuò)大一倍。表 2-1列出了 Turbo C中各類整型量所分配的內(nèi)存字節(jié)數(shù)及數(shù)的表示范圍。表2-1整型變量的字節(jié)數(shù)及表示范圍類型說(shuō)明符分配字節(jié)數(shù)數(shù)的范圍int2-32768 32767即-2 15 (215-1 )short int2-32768 32
13、767即-2 15 (215-1 )long int4-2147483648 2147483647即-2 31 (231-1)unsigned int210 65535即 0 (216-1 )unsigned short20 65535即 0 (216-1 )unsigned long40-4294967295即 0 ( 232-1 )2 .整型變量的說(shuō)明變量的說(shuō)明,也即變量的定義,一般形式為:類型說(shuō)明符變量名標(biāo)識(shí)符1 ,變量名標(biāo)識(shí)符-2?例如:int a,b,c;/* a,b,c為整型變量 */long m,n;/* m,n為長(zhǎng)整型變量*/unsigned p,q; /* p,q為無(wú)符號(hào)整型
14、變量*/在書寫變量說(shuō)明時(shí),應(yīng)注意以下幾點(diǎn):(1)允許在一個(gè)類型說(shuō)明符后,說(shuō)明多個(gè)相同類型的變量。各變量名之間用逗號(hào)間隔。類型說(shuō)明符與變量名之間至少用一個(gè)空格間隔。(2) 最后一個(gè)變量名之后必須以“;”號(hào)結(jié)尾。(3) 變量說(shuō)明必須放在變量使用之前。一般放在函數(shù)體的開頭部分。另外,也可在說(shuō)明變量為整型的同時(shí),給出變量的初值。其格式為:類型說(shuō)明符 變量名標(biāo)識(shí)符1=初值1,變量名標(biāo)識(shí)符 2=初值2,.; 一通常若有初值時(shí),往往采用這種方法,下例就是用了這種方法?!纠?-2 main()int a=3,b=5;printf( "a+b=%dn” ,a+b);程序的運(yùn)行結(jié)果為:a+b=82.3
15、實(shí)型數(shù)據(jù)2.3.1 實(shí)型常量實(shí)型也稱為浮點(diǎn)型。實(shí)型常量也稱為實(shí)數(shù)或者浮點(diǎn)數(shù)。在c語(yǔ)言中,實(shí)數(shù)只采用十進(jìn)制。它有二種形式,十進(jìn)制數(shù)形式和指數(shù)形式。1 .十進(jìn)制數(shù)形式由數(shù)碼 09 和小數(shù)點(diǎn)組成。例如: 0.0 , .25 , 5.789 , 0.13 , 5.0 , 300. , -267.8230等均為合法的實(shí)數(shù)。2 . 指數(shù)形式由十進(jìn)制數(shù),加階碼標(biāo)志“ e”或" E”以及階碼(只能為整數(shù),可以帶符號(hào))組成。其一般形式為a E n ( a 為十進(jìn)制數(shù),n 為十進(jìn)制整數(shù))其值為a*10 n 如: 2.1E5 ( 等于2.1 *10 5), 3.7E-2 ( 等于 3.7*10 -2),
16、-2.8E-2 ( 等于 -2.8*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ú)階碼 )。標(biāo)準(zhǔn)C允許浮點(diǎn)數(shù)使用后綴。后綴為“ f ”或" F”即表示該數(shù)為浮點(diǎn)數(shù)。35356f和356. 是等價(jià)的。2.3.2 實(shí)型變量實(shí)型變量分為兩類:1. 單精度型類型說(shuō)明符為float ,在 Turbo C 中單精度型占4 個(gè)字節(jié)(32 位)內(nèi)存空間,其數(shù)值范圍為3.4E-383.4E+38,只能提供七位有效數(shù)字。2. 雙精度型,類型說(shuō)明符為double ,在 Turbo C 中雙精度型
17、占8 個(gè)字節(jié)(64 位)內(nèi)存空間,其數(shù)值范圍為1.7E-3081.7E+308,可提供16位有效數(shù)字。實(shí)型變量說(shuō)明的格式和書寫規(guī)則與整型相同。例如: float x,y;/* x,y為單精度實(shí)型變量*/double a,b,c;/* a,b,c為雙精度實(shí)型變量*/18也可在說(shuō)明變量為實(shí)型的同時(shí),給出變量的初值。例如: float x3.2 , y=5.3;/* x,y為單精度實(shí)型變量,且有初值 */為雙精度實(shí)型變量, 且有double a=0.2 , b=1.3 , c=5.1 ;/* a,b,c初值 */應(yīng)當(dāng)說(shuō)明,實(shí)型常量不分單精度和雙精度。一個(gè)實(shí)型常量可以賦給一個(gè)float 或 doubl
18、e型變量,根據(jù)變量的類型截取實(shí)型常量中相應(yīng)的有效位數(shù)字。下面的例子說(shuō)明了單精度實(shí)型變量對(duì)有效位數(shù)字的限制。【例 2-3 】main( )float a;a=0.123456789;printf("a=%f",a);由于單精度實(shí)型變量只能接收7 位有效數(shù)字,因此上例中最后兩位小數(shù)不起作用。程序運(yùn)行結(jié)果為:a=0.123457如果 a 改為雙精度實(shí)型變量,則能全部接收上述9 位數(shù)字并存儲(chǔ)在變量a 中。下面的例子說(shuō)明了float 和 double 的不同?!纠?2-4 】void main()float a;double b;a=33333.33333;b=33333.33333
19、333333333;printf("a=%fnb=%fn",a,b); /*用格式化輸出函數(shù)輸出a 和 b 的值 */程序運(yùn)行結(jié)果為:a=33333.332031b=33333.333333本例中,由于a 是單精度浮點(diǎn)型,有效位數(shù)只有七位。而整數(shù)已占五位,故小數(shù)二位后之后均為無(wú)效數(shù)字。b 是雙精度型,有效位為十六位。但Turbo C 規(guī)定小數(shù)后最多保留六位,其余部分四舍五入。2.4 字符型數(shù)據(jù)字符型數(shù)據(jù)包括字符常量、字符變量和字符串常量。2.4.1 字符常量字符常量是用單引號(hào)括起來(lái)的一個(gè)字符。例如'a' , 'b' , 'A'
20、 , '+', '?'都是合法字符常量。在C語(yǔ)言中,字符常量有以下特點(diǎn):1. 字符常量只能用單引號(hào)括起來(lái),不能用雙引號(hào)或其它括號(hào)。2. 字符常量只能是單個(gè)字符,不能是字符串。3. 字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不再是原來(lái)的數(shù)值了。如 '5' 和 5 是不同的量。'5' 是字符常量,5 是整型常量。除了以上形式的字符常量外,C語(yǔ)言還允許用一種特殊形式的字符常量,即轉(zhuǎn)義字符。轉(zhuǎn)義字符以反斜線"" 開頭, 后跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱 “轉(zhuǎn)義” 字符。
21、 例如, 在前面各例題printf 函數(shù)的格式串中用到的“ n ”就是一個(gè)轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來(lái)表示那些用一般字符不便于表示的控制代碼。常用的轉(zhuǎn)義字符及其含義見表2-2 。廣義地講,C語(yǔ)言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來(lái)表示。表2-2中的ddd和 xhh 正是為此而提出的。ddd 和 hh 分別為八進(jìn)制和十六進(jìn)制的ASCII 代碼。如101 表示ASCII碼為八進(jìn)制101的字符,即為字符'A 。與此類似,102表示字符'B' , 134表不反斜線'',XOA表不換行。【例2-5】和【例2-6】展示了轉(zhuǎn)義字符的使用。表2-2
22、常用轉(zhuǎn)義字符表轉(zhuǎn)義字符轉(zhuǎn)義字符的意義n回車換行反斜線符( )t橫向跳到下一制表位置'單引號(hào)符v豎向跳格雙引號(hào)符b退格a鳴鈴r回車ddd13位八進(jìn)制數(shù)所代表的字符f走紙換頁(yè)xhh12位十六進(jìn)制數(shù)所代表的字符【例2-5 void main()/*定義a、b、c為整int a,b,c;數(shù)*/a=5; b=6; c=7;printf("%dnt%d - - %dn-%d-%dtb%dn",a,b,c,a,b,c); /*按要求格式出a,b,c的值*/程序運(yùn)行結(jié)果:56 75 67程序在第一列輸出a 值 5 之后就是“nt ”,于是跳到下一制表位置(設(shè)制表位置間隔為8),再輸
23、出b 值6;空二格再輸出c 值 7 后又是 "n" ,因此再回車換行;再空二格之后又輸出a 值5; 再空三格又輸出b 的值6; 再次后 "t" 跳到下一制表位置(與上一行的6 對(duì)齊),但下一轉(zhuǎn)義字符“b ”又使退回一格,故緊挨著 6再輸出 c 值7。請(qǐng)看下面的例子:【例 2-6 】main( )printf( "一-ab-ct - derftgn ");printf( "htibbj -k");本例中的一個(gè)printf函數(shù)先在第一行左端開始輸出“ab-c”,然后遇到"t ",它的作用是跳格,跳到
24、下一制表位置,從第九列開始,故在第 911列上輸出“ 一de”。下面遇到“r ”,它代表“回車”(不換行),返回到本行最左端(第 1 列),輸出字符“f ”,然后“t ”再使當(dāng)前輸出位置移到第 9列,輸出“ g”。下面是“ n ”,作用是“回 車換行”。第二個(gè) ptintf函數(shù)先在第1列輸出字符“ h”,后面的“ t ”使當(dāng)前輸出位置 跳到第 9 列, 輸出字母 “ i ” , 然后輸出位置應(yīng)移到下一列(第 10 列) 準(zhǔn)備輸出下一個(gè)字符。下面到兩個(gè)“b ” , “ b ”的作用是“退一格”,因此“bb ”的作用是使當(dāng)前輸出位置退回到第8歹U,接著輸出字符“ j一一k”。程序運(yùn)行時(shí)在打印機(jī)上得
25、到以下結(jié)果:注意在顯示屏上最后看道的結(jié)果與上述打印結(jié)果不同,是:gdehL_IL_IL_IL_IL_IL_l jL_IL_IL_lk這是由于“r ”使當(dāng)前輸出位置回到本行開頭,自此輸出的字符(包括空格和跳格所經(jīng)過(guò)的位置)將取代原來(lái)屏幕上該位置上顯示的字符。所以原有的“abc”被新的字符“ f一一g”代替,其后的“ de”未被新字符取代。回車換行后先輸 出“ h一一i “,退兩格后再輸出“ j一k",j后面第一個(gè)“一”將原有的 字符“ i ”取而代之。因此屏幕上看不到“i ”。實(shí)際上,屏幕上完全按程序要求輸出了全部的字符,只是因?yàn)樵谳敵銮懊娴淖址蠛芸煊州敵龊竺娴淖址?,在人們還未看清楚
26、之前,新的已取代了舊的,所以誤以為未輸出應(yīng)輸出的字符。而在打印機(jī)輸出時(shí),不象顯示屏那樣會(huì)“抹掉”原字符,留下了不可磨滅的痕跡,它能真正反映輸出的過(guò)程和結(jié)果。2.4.2 字符變量字符型變量用來(lái)存放字符常量,即單個(gè)字符。每個(gè)字符變量被分配一個(gè)字節(jié)的內(nèi)存空間,因此只能存放一個(gè)字符。不要以為一個(gè)字符變量中可以存放一個(gè)字符串。字符變量的類型說(shuō)明符是char。字符變量類型說(shuō)明的格式和書寫規(guī)則都與整型變量相同。例如:char a,b;/*定義字符變量a 和 b */a= x ,b= y ;/*給字符變量a 和 b 分別賦值x 和y */將一個(gè)字符常量存放到一個(gè)變量中,實(shí)際上并不是把該字符本身放到變量?jī)?nèi)存單元
27、中去, 而是將該字符相應(yīng)的ASCII 代碼放到存儲(chǔ)單元中。例如字符x 的十進(jìn)制ASCII 碼是120,字符'y'的十進(jìn)制 ASCII碼是121。對(duì)字符變量a,b賦予x'和y 值:a='x'b='y'實(shí)際上是在a,b 兩個(gè)單元內(nèi)存放120 和 121 的二進(jìn)制代碼:a0 1 1 1 1 0 0 0(ASCII 120)b 0 1 1 1 1 0 0 1(ASCII 121)既然在內(nèi)存中,字符數(shù)據(jù)以ASCII 存儲(chǔ),它的存儲(chǔ)形式與整數(shù)的存儲(chǔ)形式相類似,所以也可以把它們看成是整型量。C語(yǔ)言允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在
28、輸出時(shí),允許把字符數(shù)據(jù)按整型形式輸出,也允許把整型數(shù)據(jù)按字符形式輸出。以字符形式輸出時(shí),需要先將存儲(chǔ)單元中的ASCII 碼轉(zhuǎn)換成相應(yīng)字符,然后輸出。以整數(shù)形式輸出時(shí),直接將ASCII 碼當(dāng)作整數(shù)輸出。也可以對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對(duì)它們的ASCII 碼進(jìn)行算術(shù)運(yùn)算。整型數(shù)據(jù)為二字節(jié)量,字符數(shù)據(jù)為單字節(jié)量,當(dāng)整型數(shù)據(jù)按字符型量處理時(shí),只有低八位字節(jié)參與處理?!纠?2-7 】main( )char a,b;a=120;b=121;printf("%c,%cn%d,%dn",a,b,a,b);程序運(yùn)行結(jié)果為:x,y120,121在本程序中,說(shuō)明a, b 為字符型變量,但
29、在賦值語(yǔ)句中賦以整型值。從結(jié)果看,a, b值的輸出形式取決于printf 函數(shù)格式串中的格式符,當(dāng)格式符為"c" 時(shí),對(duì)應(yīng)輸出的變量值為字符,當(dāng)格式符為"d" 時(shí),對(duì)應(yīng)輸出的變量值為整數(shù)?!纠?2-8 】main( )char a,b;a='x'b='y'a=a-32;/*把小寫字母換成大寫字母*/b=b-32;/*把小寫字母換成大寫字母*/以字符型和整型輸出*/printf("%c,%cn%d,%dn",a,b,a,b);/*程序運(yùn)行結(jié)果為:X, Y88,89本例中,a, b被說(shuō)明為字符變量并賦予字符
30、值,C語(yǔ)言允許字符變量參與數(shù)值運(yùn)算, 即用字符的ASCII碼參與運(yùn)算。由于大小寫字母的ASCII碼相差32,即每個(gè)小寫字母比它相應(yīng)的大寫字母的 ASCII碼大32,如a' =' A +32, ' b' =' B' +32。因此,程序運(yùn) 算后把小寫字母換成大寫字母。然后分別以字符型和整型輸出。2.4.3 字符串常量前面已經(jīng)提到,字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符。C語(yǔ)言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是由一對(duì)雙引號(hào)括起的字符序列。例如: "CHINA" , "C program: , &qu
31、ot;$12.5" 等都是合法的字符串常量。可以輸出一個(gè)字符串,如:printf( "Hello world!");初學(xué)者容易將字符常量與字符串常量混淆。a'是字符常量,“ a”是字符串常量,二者不同。假設(shè) c被指定為字符變量:char c;c=' a'是正確的,而c= "a”是錯(cuò)誤的。c= "Hello ”也是錯(cuò)誤的。不能把一個(gè)字符串賦給一個(gè)字符變量。那么,a'和"a”究竟有什么區(qū)別呢?C語(yǔ)言規(guī)定:在每一個(gè)字符串的結(jié)尾加一個(gè)字符串結(jié)束標(biāo)記,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C語(yǔ)言規(guī)定以字符'0&
32、#39;作為字符串結(jié)束標(biāo)記。'0 '是一個(gè)ASCII碼為0的字符,也就是“空操作字符”,即它不引起任何 控制動(dòng)作,也不是一個(gè)可顯示的字符。如果有一個(gè)字符串“WORLD,實(shí)際上在內(nèi)存中是WORLD0它的長(zhǎng)度不是5 個(gè)字符,而是6 個(gè)字符,最后一個(gè)字符為0 。但在輸出時(shí)不輸 出 0 。例如在 printf( “ WORL” D )中,輸出時(shí)一個(gè)一個(gè)字符輸出,直到遇到最后的 0 字符,就知道字符串結(jié)束,停止輸出。注意,在寫字符串時(shí)不必加0 ,否則畫蛇添足。'0'是系統(tǒng)自動(dòng)加上的?!癮”實(shí)際包含兩個(gè)字符,a'和'0',因此,把它賦給一個(gè)字符變量c
33、:c=“ a” ;顯然是不行的。在 C 語(yǔ)言中,沒(méi)有專門的字符串變量,字符串如果需要存放在變量中,需要用字符數(shù)組來(lái)存放,這將在第七章中介紹。一般來(lái)說(shuō),字符串常量和字符常量之間有如下的主要區(qū)別:1. 字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)。2. 字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。3. 可以把一個(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。在C語(yǔ)言中沒(méi)有相應(yīng)的字符串變量。4. 字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字符數(shù)加 1。增加的一個(gè)字節(jié)中存放字符0 (ASCII 碼為 0)。這是字符串結(jié)束的標(biāo)志。2.5 各類
34、數(shù)值型數(shù)據(jù)之間的混合運(yùn)算整型、單精度型、雙精度型數(shù)據(jù)可以混合運(yùn)算。前已述及,字符型數(shù)據(jù)可以和整型數(shù)據(jù)通用,因此,整型、實(shí)型(包括單、雙精度)、字符型數(shù)據(jù)間可以混合運(yùn)算。例如:10+ a +1.5-12.34* b是合法的。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的方法有兩種,一種是自動(dòng)轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。1 .自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換發(fā)生在不同類型的數(shù)據(jù)混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則:(1)若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。(2)轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。 如int型和10ng型運(yùn)算時(shí),先把int量轉(zhuǎn)成lon
35、g型后再進(jìn)行運(yùn)算。(3)所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。(4) char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。(5)在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度比左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。圖 2-1表示了類型自動(dòng)轉(zhuǎn)換的規(guī)則。圖中橫向向左的箭頭表示必定發(fā)生的轉(zhuǎn)換,如字符型數(shù)據(jù)必先轉(zhuǎn)成整型,單精度數(shù)據(jù)高 double *' flout a 小 longunsigned 低 int <
36、 char,short先轉(zhuǎn)成雙精度數(shù)據(jù),等等。圖2-1 類型轉(zhuǎn)換方向圖中縱向的箭頭表示當(dāng)運(yùn)算對(duì)象為不同的類型時(shí)轉(zhuǎn)換的方向。例如整型與雙精度型數(shù)據(jù)進(jìn)行運(yùn)算,先將整型數(shù)據(jù)轉(zhuǎn)換成雙精度型數(shù)據(jù),然后在兩個(gè)同類型數(shù)據(jù)(雙精度)間進(jìn) 行運(yùn)算,結(jié)果為雙精度型。注意箭頭方向只表示數(shù)據(jù)類型級(jí)別的高低,由低向高轉(zhuǎn)換。不 要理解為整型先轉(zhuǎn)成無(wú)符號(hào)型,再轉(zhuǎn)成長(zhǎng)整形,再轉(zhuǎn)成雙精度型。如果一個(gè)整型數(shù)據(jù)與一 個(gè)雙精度型數(shù)據(jù)運(yùn)算,是直接將整型轉(zhuǎn)成雙精度型。同理,一個(gè)整型數(shù)據(jù)與一個(gè)長(zhǎng)整型數(shù) 據(jù)運(yùn)算,先將整型轉(zhuǎn)成長(zhǎng)整型。換言之,如果有一個(gè)數(shù)據(jù)是單精度型或雙精度型,則另一數(shù)據(jù)要先轉(zhuǎn)成雙精度型,結(jié) 果為雙精度型。如果兩個(gè)數(shù)據(jù)中最高級(jí)
37、別為長(zhǎng)整型,則另一數(shù)據(jù)轉(zhuǎn)成長(zhǎng)整型,結(jié)果為長(zhǎng)整型。 其它依此類推。假設(shè) i 已指定為整型變量,f 為單精度實(shí)型變量,d 為雙精度實(shí)型變量,e 為長(zhǎng)整型變量,有下面式子:10+ a +i*f-d/e運(yùn)算次序?yàn)椋?. 進(jìn)彳T 10+' a'的運(yùn)算,先將'a'轉(zhuǎn)換成整數(shù)97,運(yùn)算結(jié)果為107。2. 進(jìn)行 i*f 的運(yùn)算,先將i 和 f 都轉(zhuǎn)換成雙精度型,運(yùn)算結(jié)果為雙精度型。3. 整數(shù) 107和 i*f 的積相加,先將整數(shù)107 轉(zhuǎn)換成雙精度型(107.000000) ,運(yùn)算結(jié)果為雙精度型。4. 進(jìn)行 d/e 的運(yùn)算,先將e 轉(zhuǎn)換成雙精度型,運(yùn)算結(jié)果為雙精度型。5. 將 10+ a +i*f 的結(jié)果與d/e 的商相減,結(jié)果為雙精度型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。2. 強(qiáng)制轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過(guò)類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xià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)換為整型。在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問(wèn)題:(1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 配送在物流中的作用
- 中醫(yī)護(hù)理學(xué)(第5版)課件 第九章針灸療法與護(hù)理3十四經(jīng)脈及其常用腧穴
- 交通運(yùn)輸行業(yè)智能交通與船舶導(dǎo)航方案
- 科技項(xiàng)目研究可行性研究報(bào)告
- 家庭智能家居控制系統(tǒng)的
- 股份制改革流程及關(guān)鍵文書編寫指南
- 家庭園藝種植技術(shù)手冊(cè)
- 項(xiàng)目申請(qǐng)書和可行性研究報(bào)告的關(guān)系
- 工廠項(xiàng)目可行性報(bào)告
- 企業(yè)人力資源管理師(三級(jí))實(shí)操練習(xí)試題及答案
- 2024年江蘇省南通市中考英語(yǔ)試卷(含答案解析)
- 中職教育一年級(jí)上學(xué)期電子與信息《二極管的單向?qū)щ娦浴方虒W(xué)課件
- 《凝練的視覺(jué)符號(hào)》(新課標(biāo)美術(shù)上課)-圖文
- 幼兒園小班語(yǔ)言活動(dòng)《拔蘿卜》課件
- 英文繪本故事Brown.Bear.Brown.Bear.What.Do.You.See
- 讀后續(xù)寫人與自然類我?guī)椭従育埦盹L(fēng)后花園重建順利融入當(dāng)?shù)厣鐓^(qū)講義-2024屆高三英語(yǔ)二輪復(fù)習(xí)
- CJJ28-2014城鎮(zhèn)供熱管網(wǎng)工程施工及驗(yàn)收規(guī)范
- 2024年彌勒市東風(fēng)農(nóng)場(chǎng)有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- JB-T 8168-2023 脈沖電容器及直流電容器
- (正式版)JBT 7248-2024 閥門用低溫鋼鑄件技術(shù)規(guī)范
- 滬教版八年級(jí)數(shù)學(xué)-代數(shù)方程1-學(xué)生
評(píng)論
0/150
提交評(píng)論