譚浩強(qiáng)C語言第3章數(shù)據(jù)類型_第1頁
譚浩強(qiáng)C語言第3章數(shù)據(jù)類型_第2頁
譚浩強(qiáng)C語言第3章數(shù)據(jù)類型_第3頁
譚浩強(qiáng)C語言第3章數(shù)據(jù)類型_第4頁
譚浩強(qiáng)C語言第3章數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第三章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式v各種進(jìn)制之間的轉(zhuǎn)換l二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制u方法:按權(quán)相加10012345259212120212121111011)()(例10012894868381136)()(例1001231679781610162161516121)()(例af2v各種進(jìn)制之間的轉(zhuǎn)換(整數(shù))l二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制u方法:按權(quán)相加l十進(jìn)制轉(zhuǎn)換成二進(jìn)制、八進(jìn)制、十六進(jìn)制u原理:的余數(shù)是2)2.22(222.22).(00012110011112011naaaaaaaaaaaaannnnnnnnnnnu方法:連續(xù)除以基,從低到高記錄余數(shù),直至商為0例 把十

2、進(jìn)制數(shù)59轉(zhuǎn)換成二進(jìn)制數(shù)5922921427232120(59)10=(111011)21101111 1 1 0 1 1余余余余余余例 把十進(jìn)制數(shù)159轉(zhuǎn)換成八進(jìn)制數(shù)1598198280(159)10=(237)82 3 7 余 7余 3余 2例 把十進(jìn)制數(shù)459轉(zhuǎn)換成十六進(jìn)制數(shù)4591628161160(459)10=(1cb)161 c b 余11余12余 13l二進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換u二進(jìn)制轉(zhuǎn)換成八進(jìn)制:從右向左,每3位一組(不足3位左補(bǔ)0),轉(zhuǎn)換成八進(jìn)制u八進(jìn)制轉(zhuǎn)換成二進(jìn)制:用3位二進(jìn)制數(shù)代替每一位八進(jìn)制數(shù)例 (1101001)2=(001,101,001)2=(151)8例 (2

3、46)8=(010,100,110)2=(10100110)2000 0001 1010 2011 3100 4101 5110 6111 74l二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換u二進(jìn)制轉(zhuǎn)換成十六進(jìn)制:從右向左,每4位一組(不足4位左補(bǔ)0),轉(zhuǎn)換成十六進(jìn)制u十六進(jìn)制轉(zhuǎn)換成二進(jìn)制:用4位二進(jìn)制數(shù)代替每一位十六進(jìn)制數(shù)例 (11010101111101)2=(0011,0101,0111,1101)2=(357d)16例 (4b9e)16=(0100,1011,1001,1110)2=(100101110011110)20000 00001 10010 20011 30100 40101 50110 60

4、111 71000 81001 91010 a1011 b1100 c1101 d1110 e1111 f5字節(jié)和位v內(nèi)存以字節(jié)為單元組成v每個(gè)字節(jié)有一個(gè)地址v一個(gè)字節(jié)一般由8個(gè)二進(jìn)制位組成v每個(gè)二進(jìn)位的值是0或101234567012345678910.6數(shù)值的表示方法原碼、反碼和補(bǔ)碼v原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值v反碼:l正數(shù):反碼與原碼相同l負(fù)數(shù):符號位為1,其余位對原碼取反v補(bǔ)碼:l正數(shù):原碼、反碼、補(bǔ)碼相同l負(fù)數(shù):最高位為1,其余位為原碼取反,再對整個(gè)數(shù)加13126912457810119-5=49+7=16=(4)127原碼反碼補(bǔ)碼+70000011100000

5、11100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍0111111111111111(-127+127)0111111110000000(-127+127)0111111110000000(-128+127)(用一字節(jié)表示數(shù))v負(fù)數(shù)補(bǔ)碼轉(zhuǎn)換成十進(jìn)制數(shù):最高位不動(dòng),其余位取反加1例 補(bǔ)碼:11111001 取反:10000110 加1: 10000111=-783.1 數(shù)據(jù)類型數(shù)據(jù)類型總表c數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef字符類

6、型char枚舉類型enum整 型實(shí)型單精度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union短整型short長整型long整型int數(shù)據(jù)類型決定:1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2. 數(shù)據(jù)取值范圍3. 其上可進(jìn)行的操作9基本數(shù)據(jù)類型類型符號關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535

7、有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127無unsigned char80255說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機(jī)器硬件不同而不同,上表以ibm pc機(jī)為例:103.2 常量與變量標(biāo)識符v定義:用來標(biāo)識變量、常量、函數(shù)等的字符序列v組成:l只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線l大小寫敏感l(wèi)不能使用關(guān)鍵字v長度:最長32個(gè)字符v命名原則:l見名知意l不宜混淆 如l與i, o與0例:判斷下列標(biāo)識符號合法性sum sum m.d.john day date 3days student_name #33 lot

8、us_1_2_3 char ab _above $123m.d.john3days#33char$123ab11u一般用大寫字母u是宏定義預(yù)處理命令,不是c語句如 #define price 30常量v定義:程序運(yùn)行時(shí)其值不能改變的量(即常數(shù))v分類:l符號常量:用標(biāo)識符代表常量u定義格式: #define 符號常量 常量例 符號常量舉例(ch2_1.c)#define price 30main() int num,total; num=10; total=num*price; printf(total=%d,total);運(yùn)行結(jié)果:total=300 程序中用#define命令行定義pric

9、e代表常量30,此后凡在本文件中出現(xiàn)的price都代表30,可以和常量一樣進(jìn)行運(yùn)算如再用賦值語句給price賦值是錯(cuò)的 price=40;/* 錯(cuò)誤,不能給符號常量賦值3.2 常量與變量12變量變量變量代表內(nèi)存中具有特定屬性的一個(gè)存儲單元,它變量代表內(nèi)存中具有特定屬性的一個(gè)存儲單元,它用來存放數(shù)據(jù),這就是變量的值。用來存放數(shù)據(jù),這就是變量的值。變量名實(shí)際上是一個(gè)以一個(gè)名字對應(yīng)代表一個(gè)地址,變量名實(shí)際上是一個(gè)以一個(gè)名字對應(yīng)代表一個(gè)地址,在對程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分在對程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過配對應(yīng)的內(nèi)存地址。從變量中取值

10、,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。數(shù)據(jù)。13編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元.地址int a=1, b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址.內(nèi)存1-3隨機(jī)數(shù)變量v概念:其值可以改變的量v變量名與變量值v變量定義的一般格式: 數(shù)據(jù)類型 變量1,變量2,變量n;v變量初始化:定義時(shí)賦初值 例: int a,b,c; float data;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識符例: int a=2,b,c=4; float data=3.67; char ch=a; int x=1,y=1,z=1; in

11、t x=y=z=1;v變量的使用:先定義,后使用例1 int student; stadent=19; /undefined symbol statent in function main 例2 float a,b,c; c=a%b; /illegal use of floating point in function main v變量定義位置:一般放在函數(shù)開頭main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);變量定義可執(zhí)行語句main() int a,b=2; a=1; float data;

12、 data=(a+b)*1.2; printf(“data=%fn”,data);143.2 常量與變量標(biāo)識符v定義:用來標(biāo)識變量、常量、函數(shù)等的字符序列v組成:l只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線l大小寫敏感l(wèi)不能使用關(guān)鍵字v長度:最長32個(gè)字符v命名原則:l見名知意l不宜混淆 如l與i, o與0例:判斷下列標(biāo)識符號合法性sum sum m.d.john day date 3days student_name #33 lotus_1_2_3 char ab _above $123m.d.john3days#33char$123ab建議變量名的長度最好不建議變量名的長

13、度最好不要超過要超過8 8個(gè)字符個(gè)字符. .15&整型常量(整常數(shù))v三種形式:l十進(jìn)制整數(shù):由數(shù)字09和正負(fù)號表示.如 123,-456,0l八進(jìn)制整數(shù):由數(shù)字0開頭,后跟數(shù)字07表示.如0123,011l十六進(jìn)制整數(shù):由0 x開頭,后跟09,af,af表示. 如0 x123,0 xff例 12 與 12l例 30000 為int型 65536 為long int 型v整型常量的類型l根據(jù)其值所在范圍確定其數(shù)據(jù)類型l在整常量后加字母l或l,認(rèn)為它是long int 型常量問題:0123 = ( )100 x123 = ( )100 xff = ( )1083291255問題:0123

14、 = ( )100 x123 = ( )100 xff = ( )10163.3.2 整型變量整型變量 (1)(1)整型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。 如如: : int int i; / i; /* * 定義為整型變量定義為整型變量 * */ / i=10; / i=10; /* * 給給i i賦以整數(shù)賦以整數(shù)10 10 * */ / 十進(jìn)制數(shù)十進(jìn)制數(shù)1010的二進(jìn)制形式為的二進(jìn)制形式為10101010,turbo c 2.0turbo c 2.0和和turbo c+ 3.0turbo c+ 3.0為一個(gè)

15、整型變量在內(nèi)存中分配為一個(gè)整型變量在內(nèi)存中分配2 2個(gè)字節(jié)的存儲單元個(gè)字節(jié)的存儲單元( (不同的編譯系不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,vc+ 6.0vc+ 6.0則分配則分配4 4個(gè)字個(gè)字節(jié)節(jié)) )。 數(shù)值是以補(bǔ)碼數(shù)值是以補(bǔ)碼(complement) (complement) 表示的。表示的。 17(2)(2)整型變量的分類整型變量的分類共六種共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned

16、intunsigned short (int)unsigned long (int) 注意:注意:括號表示其中的內(nèi)容是可選的括號表示其中的內(nèi)容是可選的. .18整數(shù)類型的有關(guān)數(shù)據(jù):整數(shù)類型的有關(guān)數(shù)據(jù): 類型類型 類型說明符類型說明符 長度長度 數(shù)的范圍數(shù)的范圍 基本型基本型 intint 2 2字節(jié)字節(jié) -32768-327683276732767 短整型短整型 short 2short 2字節(jié)字節(jié) -2-215152 21515-1 -1 長整型長整型 long 4long 4字節(jié)字節(jié) -2-231312 23131-1-1 無符號整型無符號整型 unsigned 2unsigned 2字節(jié)

17、字節(jié) 0 06553565535 無符號短整型無符號短整型 unsigned short 2unsigned short 2字節(jié)字節(jié) 0 06553565535 無符號長整型無符號長整型 unsigned long 4unsigned long 4字節(jié)字節(jié) 0 0(2 23232-1-1)19例如:整數(shù)例如:整數(shù)1313在內(nèi)存中實(shí)際存放的情況:在內(nèi)存中實(shí)際存放的情況:20例3.2 整型變量的定義與使用#include stdio.h#include void main()() int a,b,c,d; /*指定、為整指定、為整型變量型變量* unsigned ; *指定為無符號整型變指定為無符

18、號整型變量量* 12;-24;10; ; printf(,);,); 可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算 運(yùn)行結(jié)果:運(yùn)行結(jié)果: , 21例3.3 整型數(shù)據(jù)的溢出#include #include void main()void main()int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+1; printf(“%d,%dn”,a,b printf(“%d,%dn”,a,b);); 數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-3276832767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇

19、此情況就發(fā)生“溢出”。運(yùn)行結(jié)果:運(yùn)行結(jié)果: 32767,-3276832767,-32768223.3.3 3.3.3 整型常量的類型整型常量的類型 (1)(1)一個(gè)整數(shù),如果其值在一個(gè)整數(shù),如果其值在-32768-32768+32767+32767范圍內(nèi),認(rèn)為它是范圍內(nèi),認(rèn)為它是intint型,它可以賦值給型,它可以賦值給intint型和型和long intlong int型變量。型變量。 (2) (2) 一個(gè)整數(shù),如果其值超過了上述范圍,而在一個(gè)整數(shù),如果其值超過了上述范圍,而在- -21474836372147483637+2147483647+2147483647范圍內(nèi),則認(rèn)為它是為長

20、整型。范圍內(nèi),則認(rèn)為它是為長整型??梢詫⑺x值給一個(gè)可以將它賦值給一個(gè)long intlong int型變量。型變量。 (3) (3) 如果所用的如果所用的c c版本(如版本(如turbo cturbo c)分配給)分配給short intshort int與與intint型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與intint型型相同。因此一個(gè)相同。因此一個(gè)intint型的常量同時(shí)也是一個(gè)型的常量同時(shí)也是一個(gè)short intshort int型常量,型常量,可以賦給可以賦給intint型或型或short intshort int型變量。型變量

21、。 23(4) (4) 一個(gè)整常量后面加一個(gè)字母一個(gè)整常量后面加一個(gè)字母u u或或u u,認(rèn)為是,認(rèn)為是unsigned unsigned intint型,如型,如12345u12345u,在內(nèi)存中按,在內(nèi)存中按unsigned intunsigned int規(guī)定的規(guī)定的方式存放方式存放( (存儲單元中最高位不作為符號位,而用來存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù)存儲數(shù)據(jù)) )。如果寫成。如果寫成-12345u-12345u,則先將,則先將-12345-12345轉(zhuǎn)換轉(zhuǎn)換成其補(bǔ)碼成其補(bǔ)碼5319153191,然后按無符號數(shù)存儲。,然后按無符號數(shù)存儲。(5) (5) 在一個(gè)整常量后面加一

22、個(gè)字母在一個(gè)整常量后面加一個(gè)字母l l或或l l,則認(rèn)為是,則認(rèn)為是long long intint型常量。型常量。 例如:例如: 123l.432l.0l123l.432l.0l 用于函數(shù)調(diào)用中。用于函數(shù)調(diào)用中。如果函數(shù)的形參為如果函數(shù)的形參為long intlong int型,則要求實(shí)參也為型,則要求實(shí)參也為long intlong int型。型。24&實(shí)型常量(實(shí)數(shù)或浮點(diǎn)數(shù))v表示形式:l十進(jìn)制數(shù)形式:(必須有小數(shù)點(diǎn)) 如0.123, .123, 123.0, 0.0, 123.l指數(shù)形式:(e或e之前必須有數(shù)字;指數(shù)必須為整數(shù))如12.3e3 ,123e2, 1.23e4 ,

23、e-5 , 1.2e-3.5 v實(shí)型常量的類型l默認(rèn)double型l在實(shí)型常量后加字母f或f,認(rèn)為它是float 型c c編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理。處理。 例如例如:f = 2.45678 f = 2.45678 * * 4523.65 4523.65 系統(tǒng)先把系統(tǒng)先把2.456782.45678和和4523.654523.65作為雙作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前乘也是一個(gè)雙精度數(shù)。最后取其前7 7位位賦給浮點(diǎn)型變量賦給浮點(diǎn)型變量f f。如是在數(shù)的后面加。如是在數(shù)的后面加字母字

24、母f f或或f f(如(如1.65f, 654.87f1.65f, 654.87f),這樣),這樣編譯系統(tǒng)就會把它們按單精度(編譯系統(tǒng)就會把它們按單精度(3232位)位)處理處理. .25規(guī)范化的指數(shù)形式:規(guī)范化的指數(shù)形式: 在字母在字母e e(或(或e e)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字應(yīng)有一位(且只能有一位)非零的數(shù)字. . 例如例如: : 123.456123.456可以表示為:可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 123.456e0, 12.3456e1, 1.23456e2, 0.

25、123456e3, 0.0123456e4, 0.00123456e0.123456e3, 0.0123456e4, 0.00123456e 其中的其中的1.23456e31.23456e3稱為稱為“規(guī)范化的指數(shù)形式規(guī)范化的指數(shù)形式”。263.4.2 浮點(diǎn)型變量浮點(diǎn)型變量(1)(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式 一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4 4個(gè)字節(jié)個(gè)字節(jié)(32(32位位) )。與整。與整型數(shù)據(jù)的存儲方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存型數(shù)據(jù)的存儲方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,儲的

26、。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。27類型類型 位數(shù)位數(shù) 數(shù)的范圍數(shù)的范圍 有效數(shù)字有效數(shù)字float float 32 32 1010-37 -37 101038 38 6 67 7 位位doubledouble型型 64 64 1010-307-3071010308308 15 151616位位long double 128 10long double 128 10-4931-493110104932 4932 18181919位位 3.4 浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)(2) (2) 浮點(diǎn)型變量的分類浮點(diǎn)型

27、變量的分類 浮點(diǎn)型變量分為單精度(浮點(diǎn)型變量分為單精度(floatfloat型)、雙精度(型)、雙精度(doubledouble型)和長雙精度型(型)和長雙精度型(long doublelong double)三類形式。)三類形式。例 float a;a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111.111*/28例3.4 浮點(diǎn)型數(shù)據(jù)的舍入誤差#include #include void main()void main()float a,b;float a,b; a = 123456.789e5; a = 12345

28、6.789e5; b = a + 20 ; b = a + 20 ; printf(“%fn”,b printf(“%fn”,b);); 一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)運(yùn)行結(jié)果:運(yùn)行結(jié)果: 123456.789e5123456.789e529&字符常量v定義:用單引號括起來的單個(gè)普通字符或轉(zhuǎn)義字符. v字符常量的值:該字符的ascii碼值轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義nvradddtbf“xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號3位8進(jìn)制數(shù)代表的字符

29、水平制表退格換頁反斜線雙引號2位16進(jìn)制數(shù)代表的字符如 101 -a 012 -n 376 - x61 -a 60 -0 483 -()例:a-101-x41-65如 a65, a97, 048 , n10如 a a ? n 101v轉(zhuǎn)義字符:反斜線后面跟一個(gè)字符或一個(gè)代碼值表示例 轉(zhuǎn)義字符舉例(ch2_001.c,ch2_004.c) main() printf(101 x42 cn); printf(i say:how are you?n); printf(c programn); printf(turbo c);運(yùn)行結(jié)果:(屏幕顯示)a b cisay:”how are you?”c p

30、rogramturbo c例 main() printf(“yb=n”); 運(yùn)行結(jié)果:屏幕顯示:=打印機(jī)輸出:30 3.5 3.5 字符型數(shù)據(jù)字符型數(shù)據(jù) 3.5.23.5.2字符變量字符變量字符型變量用來存放字符常量,注意只能字符型變量用來存放字符常量,注意只能放一個(gè)字符。放一個(gè)字符。字符變量的定義形式如下:字符變量的定義形式如下:char c1,c2;char c1,c2;可以用下面語句對可以用下面語句對c1,c2c1,c2賦值:賦值: c1c1aa;c2c2 b b ;一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。 31 3.5 字符型數(shù)據(jù)字符型數(shù)據(jù) 3.5.3 字符數(shù)據(jù)

31、在內(nèi)存中的存儲形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的asciiascii代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。據(jù)之間可以通用。注意注意: : 一個(gè)字符數(shù)據(jù)一個(gè)字符數(shù)據(jù)既可以以字既可以以字符形式輸出,符形式輸出,也可以以整也可以以整數(shù)形式輸出。數(shù)形式輸出。32例3.6 向字符變量賦以整數(shù)。 #include #include vo

32、id main()void main() char c1,c2; char c1,c2; c1=97; c1=97; c2=98; c2=98; printf(“%c %cn”,c1,c2); printf(“%c %cn”,c1,c2); printf(“%d printf(“%d %dn”,c1,c2); %dn”,c1,c2); 在第和第4行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語句:c1;c2; 因?yàn)閍和b的ascii碼為97和98 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 97 9897 9833例3.7 大小寫字母的轉(zhuǎn)換 #include #include void mai

33、n()void main() char c1,c2 char c1,c2; c1=a;c1=a; c2=b; c2=b;c1=c1-32;c1=c1-32;c2=c2-32;c2=c2-32; printf printf(“(“c c cc,c1,c2c1,c2);); 程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換成大寫字母a和b。從代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ascii碼大32。語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 34 有些系統(tǒng)(如turbo c)將字符變量定義為signed char型。其存儲單元中的最高位作為符號位,它的取值范圍是-128127。

34、如果在字符變量中存放一個(gè)ascii碼為0127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時(shí),輸出的是一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)ascii碼為128255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時(shí),就會得到一個(gè)負(fù)整數(shù)。 35v字符常量與字符串常量不同&字符串常量v定義:用雙引號(“”)括起來的字符序列v存儲:每個(gè)字符串尾自動(dòng)加一個(gè) 0 作為字符串結(jié)束標(biāo)志h e l l o 0例 字符串“hello”在內(nèi)存中a a 0例 a“a”例 空串 “”0例: char ch; ch=“a”; 例: char ch; ch=a; 結(jié)論結(jié)論:不能不能把一個(gè)字符把一個(gè)字符

35、串常量賦給串常量賦給一個(gè)字符變一個(gè)字符變量。量。36 3.6 變量賦初值 (1)(1)語言允許在定義變量的同時(shí)使變量初始化語言允許在定義變量的同時(shí)使變量初始化如如: : intint a=3; / a=3; / 指定為整型變量,初值為指定為整型變量,初值為 float f=3.56; / float f=3.56; / 指定為浮點(diǎn)型變量,初值為指定為浮點(diǎn)型變量,初值為 .56 .56 char c= a; / char c= a; / 指定為字符變量,初值為指定為字符變量,初值為a a 37 3.6 變量賦初值變量賦初值 (2)(2)可以使被定義的變量的一部分賦初值。可以使被定義的變量的一部分

36、賦初值。 如如: : intint a,b,c=5 a,b,c=5; 表示指定、為整型變量,但表示指定、為整型變量,但只對初始化,只對初始化,c c的初值為的初值為(3)(3)如果對幾個(gè)變量賦以同一個(gè)初值,如果對幾個(gè)變量賦以同一個(gè)初值, 應(yīng)寫成:應(yīng)寫成:intint a=3,b=3,c=3; a=3,b=3,c=3; 表示、的初值都是表示、的初值都是。 不能寫成不能寫成 int int a=b=c=3; a=b=c=3; 注意:注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)行初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語句。本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)

37、賦值語句。 382.3不同類型數(shù)據(jù)間的轉(zhuǎn)換隱式轉(zhuǎn)換v什么情況下發(fā)生l運(yùn)算轉(zhuǎn)換-不同類型數(shù)據(jù)混合運(yùn)算時(shí)l賦值轉(zhuǎn)換-把一個(gè)值賦給與其類型不同的變量時(shí)l輸出轉(zhuǎn)換-輸出時(shí)轉(zhuǎn)換成指定的輸出格式l函數(shù)調(diào)用轉(zhuǎn)換-實(shí)參與形參類型不一致時(shí)轉(zhuǎn)換v運(yùn)算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運(yùn)算時(shí)先自動(dòng)轉(zhuǎn)換成同一類型39doublefloatlongunsignedintchar,short低高說明:必定的轉(zhuǎn)換運(yùn)算對象類型不同時(shí)轉(zhuǎn)換例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintint

38、doubledoubledoubledoubledoubledouble10+a +i*f - d/l例 int i; float f; double d; long l;40顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)v一般形式:(類型名)(表達(dá)式)例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 v說明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 結(jié)果:x=3.600000,i=3精度損失問題較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生412.4 運(yùn)

39、算符和表達(dá)式c運(yùn)運(yùn)算算符符算術(shù)運(yùn)算符:(算術(shù)運(yùn)算符:(+ - + - * * / % + - / % + -)關(guān)系運(yùn)算符:(關(guān)系運(yùn)算符:( = != = !=)邏輯運(yùn)算符:(!邏輯運(yùn)算符:(! & |& |)位運(yùn)算符位運(yùn)算符 :(:( | & | &)賦值運(yùn)算符:(賦值運(yùn)算符:(= = 及其擴(kuò)展)及其擴(kuò)展)條件運(yùn)算符:(條件運(yùn)算符:(?:?:)逗號運(yùn)算符:(逗號運(yùn)算符:(, ,)指針運(yùn)算符:(指針運(yùn)算符:(* * & &)求字節(jié)數(shù)求字節(jié)數(shù) :(:(sizeofsizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(分量運(yùn)算符:(.

40、 -. -)下標(biāo)運(yùn)算符:(下標(biāo)運(yùn)算符:()其它其它 :(:(( ) -( ) -)42算術(shù)運(yùn)算符和表達(dá)式v基本算術(shù)運(yùn)算符: + - * / %l結(jié)合方向:從左向右l優(yōu)先級: - -* / % - + - (2) (3) (4)說明:l“-”可為單目運(yùn)算符時(shí),右結(jié)合性l兩整數(shù)相除,結(jié)果為整數(shù)l%要求兩側(cè)均為整型數(shù)據(jù)例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()43v自增、自減運(yùn)算符+ -l作用:使變量值加1或減

41、1l種類:u前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值)u后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=444v自增、自減運(yùn)算符+ -l作用:使變量值加1或減1l種類:u前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值)u后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1)l說明:u+ -

42、 不能用于常量和表達(dá)式,如5+,(a+b)+u+ -結(jié)合方向: 自右向左u優(yōu)先級:- + - -* / % -+ - (2) (3) (4)例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例 j+k; (j+)+k;例 -i+ i=3; printf(“%d”,-i+); 45(5) (5) 有關(guān)表達(dá)式使用中的問題說明有關(guān)表達(dá)式使用中的問題說明 ansi c并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。 例如:對表達(dá)式 a = f1( )+f2( ) 并不是所有的編譯系統(tǒng)都先調(diào)用f1( ), 然后調(diào)用f2( )。在有的情況下結(jié)果可能不同。有時(shí)

43、會出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎。 46語言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由兩個(gè)字符組成 ,為避免誤解,最好采取大家都能理解的寫法。 例如:不要寫成i+j的形式,而應(yīng)寫成 (i+)+j的形式.47在調(diào)用函數(shù)時(shí),實(shí)參數(shù)的求值順序,標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。例如:例如:的初值為,如果有下面的函數(shù)調(diào)用: printf(,i+) 在有的系統(tǒng)中,從左至右求值,輸出“,”。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左, 函數(shù)輸出的是“,”。以上這種寫法不宜提倡, 最好改寫成 j = i+;j = i+; printf(%d printf(%d, %d%d, j j,i)i)48賦值運(yùn)算符和表達(dá)式

44、v簡單賦值運(yùn)算符l符號: =l格式: 變量標(biāo)識符=表達(dá)式l作用:將一個(gè)數(shù)據(jù)(常量或表達(dá)式)賦給一個(gè)變量v復(fù)合賦值運(yùn)算符l種類:+= -= *= /= %= = = &= = |=l含義: exp1 op= exp2exp1 op= exp2 exp1 = exp1 op exp2exp1 = exp1 op exp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a=3; d=func(); c=d+2;49v說明:l結(jié)合方向:自右向左l優(yōu)先級: 14l左側(cè)必須是變量,不能是常量或表達(dá)式l賦值表達(dá)式的值與變量值相等,且可嵌套l賦值轉(zhuǎn)換規(guī)則:使賦值號右邊表達(dá)式值自動(dòng)

45、轉(zhuǎn)換成其左邊變量的類型例 3=x-2*y; a+b=3;例 float f; int i; i=10; f=i;則 f=10.0例 int i; i=2.56; /結(jié)果i=2;例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表達(dá)式值為5,a,b,c值為5/ b=5;a=5/表達(dá)式值11,c=6,a=11/表達(dá)式值10,a=10,b=4,c=6/表達(dá)式值5,a=5,b=10,c=250v說明:l結(jié)合方向:自右向左l優(yōu)先級: 12l左側(cè)必須是變量,不能是常量或表達(dá)式l賦值表達(dá)式的值與變量值相等,且可嵌套l賦值轉(zhuǎn)換規(guī)則:使賦值號右邊

46、表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例: a=12; a+=a-=a*a例: int a=2; a%=4-1; a+=a*=a-=a*=3; /a=-264 等價(jià)于a=a+(a=a-(a*a)/a=0 等價(jià)于a=a+(a=a*(a=a-(a=a*3)511.1.將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變但以浮點(diǎn)數(shù)形式存儲到變量中但以浮點(diǎn)數(shù)形式存儲到變量中 如如: : 將將2323賦給賦給floatfloat變量,即執(zhí)行變量,即執(zhí)行2323,先,先將將2323轉(zhuǎn)換成轉(zhuǎn)換成23230000000000,再存儲在中。,再存儲在中。 將將2323賦給賦給double

47、double型變量,即執(zhí)行型變量,即執(zhí)行2323,系,系統(tǒng)將統(tǒng)將2323補(bǔ)足有效位數(shù)字為補(bǔ)足有效位數(shù)字為232300000000000000,00000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲到變量中。然后以雙精度浮點(diǎn)數(shù)形式存儲到變量中。522.2.將一個(gè)將一個(gè)doubledouble型數(shù)據(jù)賦給型數(shù)據(jù)賦給floatfloat變量時(shí),截取其變量時(shí),截取其前面前面7 7位有效數(shù)字,存放到位有效數(shù)字,存放到floatfloat變量的存儲單元(變量的存儲單元(4 4個(gè)字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。個(gè)字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。 如如: :float f;double d=123.4

48、56789e100; float f;double d=123.456789e100; f=d;f=d; 就出現(xiàn)溢出的錯(cuò)誤。就出現(xiàn)溢出的錯(cuò)誤。 如果將一個(gè)如果將一個(gè)floatfloat型數(shù)據(jù)賦給型數(shù)據(jù)賦給doubledouble變量時(shí),數(shù)值變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到不變,有效位數(shù)擴(kuò)展到1616位,在內(nèi)存中以位,在內(nèi)存中以8 8個(gè)字節(jié)個(gè)字節(jié)存儲存儲. .533.3.字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1 1個(gè)字節(jié),而整型變量為個(gè)字節(jié),因此將字個(gè)字節(jié),而整型變量為個(gè)字節(jié),因此將字符數(shù)據(jù)(個(gè)二進(jìn)位)放到整型變量存儲單元符數(shù)據(jù)(個(gè)二進(jìn)位)放到整型變量存儲單

49、元的低位中的低位中. .54第一種情況:第一種情況:低位對應(yīng)、高位補(bǔ)零低位對應(yīng)、高位補(bǔ)零 若所用系統(tǒng)將字符處理為無符若所用系統(tǒng)將字符處理為無符號字符類型,或程序已將字符變量號字符類型,或程序已將字符變量定義為定義為unsigned charunsigned char型,則將字型,則將字符的位放到整型變量低位,高符的位放到整型變量低位,高位補(bǔ)零。位補(bǔ)零。例如:例如:將字符將字符376賦給賦給int型變量型變量第二種情況:第二種情況:符號擴(kuò)展符號擴(kuò)展 若所用系統(tǒng)(如若所用系統(tǒng)(如turbo c+turbo c+)將字符處理為帶符號()將字符處理為帶符號(signed signed charchar

50、)時(shí),若字符最高位為,則整型變量高位補(bǔ);若字)時(shí),若字符最高位為,則整型變量高位補(bǔ);若字符最高位為,則高位全補(bǔ)。這稱為符最高位為,則高位全補(bǔ)。這稱為“符號擴(kuò)展符號擴(kuò)展”,這樣,這樣做的目的是使數(shù)值保持不變,如變量(字符做的目的是使數(shù)值保持不變,如變量(字符376376)以整)以整數(shù)形式輸出為,的值也是。數(shù)形式輸出為,的值也是。554.4.將一個(gè)將一個(gè)intint、shortshort、longlong型數(shù)據(jù)賦給一個(gè)型數(shù)據(jù)賦給一個(gè)charchar型變型變量時(shí),只將其低量時(shí),只將其低8 8位原封不動(dòng)地送到位原封不動(dòng)地送到charchar型變量(即型變量(即截?cái)啵=財(cái)啵?。例如:例如:int i=2

51、89;char c=a;c=i;c的值為33,如果用“%c”輸出c,將得到字符“!” !的ascii碼為33。 賦值情況 :565. 將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時(shí),要進(jìn)行符號擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號位為),則long型變量的高16位補(bǔ);如果int型變量為負(fù)值(符號位為),則long型變量的高16位補(bǔ),以保持?jǐn)?shù)值不改變。 反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量,只將long型數(shù)據(jù)中低16位原封不動(dòng)地送到整型變量(即截?cái)啵?57例如:例如:int a;long b;a=b 賦值情況如下賦值情況如下 :如果6553

52、6(八進(jìn)制數(shù)0200000),則賦值后值為。586.6.將將unsigned intunsigned int型數(shù)據(jù)賦給型數(shù)據(jù)賦給long intlong int型變量時(shí),不型變量時(shí),不存在符號擴(kuò)展問題,只需將高位補(bǔ)即可。存在符號擴(kuò)展問題,只需將高位補(bǔ)即可。將一個(gè)將一個(gè)unsignedunsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非unsignedunsigned型整型變量(例如:型整型變量(例如:unsigned intunsigned int -int-int,unsigned long-longunsigned long-long,unsigned shor

53、tunsigned short-short-short),將),將unsignedunsigned型變量的內(nèi)容原樣送到非型變量的內(nèi)容原樣送到非unsignedunsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯(cuò)誤。范圍,則會出現(xiàn)數(shù)據(jù)錯(cuò)誤。59逗號運(yùn)算符和表達(dá)式v形式:表達(dá)式1,表達(dá)式2,表達(dá)式nv結(jié)合性:從左向右v優(yōu)先級: 15v逗號表達(dá)式的值:等于表達(dá)式n的值v用途:常用于循環(huán)for語句中例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3) x=a=3,6*a例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表達(dá)式值60/a=15,表達(dá)式值2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論