C語言從入門到精通第3章_第1頁
C語言從入門到精通第3章_第2頁
C語言從入門到精通第3章_第3頁
C語言從入門到精通第3章_第4頁
C語言從入門到精通第3章_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型p 計算機如何識數(shù)數(shù)制 p 整型p 字符型 p 浮點型 p 類型轉換 p 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 p 整型p 字符型 p 浮點型 p 類型轉換 p 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 整型p 字符型 p 浮點型 p 類型轉換 p 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 整型 字符型 p 浮點型 p 類型轉換 p 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 整型 字符型 浮點

2、型 p 類型轉換 p 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 整型 字符型 浮點型 類型轉換 p 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 整型 字符型 浮點型 類型轉換 綜合應用類型轉換p 跟我上機 編輯課件第3章數(shù)據(jù)的種類數(shù)據(jù)類型 計算機如何識數(shù)數(shù)制 整型 字符型 浮點型 類型轉換 綜合應用類型轉換 跟我上機 編輯課件3.1 計算機如何識數(shù)數(shù)制3.1.1 二進制3.1.2 八進制3.1.3 十六進制3.1.4 數(shù)制間的轉換編輯課件3.1 計算機如何識數(shù)數(shù)制數(shù)據(jù)在計算機里是以二進制形式的數(shù)表示的,在實際程序

3、中,許多系統(tǒng)程序需要直接對二進制位的數(shù)據(jù)操作,還有不少硬件設備與計算機通信都是通過一組二進制數(shù)控制和反映硬件的狀態(tài)。在表示一個數(shù)時,二進制形式位數(shù)多,八進制和十六進制比二進制書寫方便些,他們都是計算機中計算常用的數(shù)制。編輯課件3.1.1 二進制二進制是逢二進一的數(shù)制,目前的計算機全部都是采用二進制系統(tǒng)。0和1是二進制數(shù)字符號,運算規(guī)則簡單,操作方便,因為每一位數(shù)都可以用任何具有兩個穩(wěn)定狀態(tài)的元件表示,所以二進制易于用電子方式實現(xiàn)。 編輯課件3.1.1 二進制1. 二進制運算規(guī)則加法:000,011,101,1110減法:000,101,110,1011乘法:000,010,100,111除法:

4、010,111例如,((1100))2 + ((0111))2計算如下: 1100+ 011110011編輯課件3.1.1 二進制2. 二進制轉換為十進制十進制是逢十進一,由數(shù)字符號0,1,2,3,4,5,6,7,8,9組成,可以這樣分析十進制數(shù):(1234)10 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 = 1000 + 200 +30 + 4 =(1234)10采用同樣的方式轉換二進制到十進制。(1101)2 = 1 * 23 + 1 * 22 + 0 * 21 + 1 * 20 = 8 + 4 + 0 + 1 = (13)10(10.01)2 = 1

5、 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2 = 2 + 0 + 0 + 0.25 = (2.25)10編輯課件3.1.1 二進制3. 十進制轉換二進制 十進制整數(shù)轉換為二進制:方法是除以2取余,逆序排列,以(89)10為例,如下。89 2 余144 2 余022 2 余011 2 余15 2 余12 2 余01余1(89)10 = (1011001)2(5)10 = (101)2(2)10 = (10)2編輯課件3.1.1 二進制 十進制小數(shù)的轉換為二進制:方法是乘以2取整,順序排列,以(0.625)10為例,如下。0.625 * 2 = 1.25取整10.25 *

6、2 = 0.5取整00.5 * 2 = 1取整1(0.625)10 = (0.101)2(0.25)10 = (0.01)2(0.5)10 = (0.1)2編輯課件3.1.2 八進制八進制是逢八進一的數(shù)制,采用07八個數(shù)字組成。八進制比二進制書寫方便,也常用于計算機計算。需要注意的是,C語言中,八進制數(shù)以數(shù)字0開頭,比如04,017等等。1. 八進制轉換為十進制和二進制轉換為十進制的原理相同,如:(64)8 = 6 * 81 + 4 * 80 = 48 + 4 =(52)102. 二進制轉換為八進制整數(shù)部份從最低有效位開始,以3位二進制數(shù)一組,最高有效位不足3位時以0補齊,每一組均可轉換成一個

7、八進制的值,轉換結果就是八進制的整數(shù)。小數(shù)部份從最高有效位開始,以3位一組,最低有效位不足3位時以0補齊,每一組均可轉換成一個八進制的值,轉換結果就是八進制的小數(shù)。例如:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8編輯課件3.1.3 十六進制十六進制就是逢十六進一的數(shù)制,采用09和AF十六個數(shù)字組成(A代表10,F(xiàn)代表15),也常用于計算機計算。C語言中,十六進制數(shù)以數(shù)字0 x開頭,比如0 x1A,0 xFF等。1. 十六進制轉換為十進制和二進制轉換為十進制的原理相同,如:(2FA)16 = 2 * 162 + F * 161 +

8、 A * 160= 512 + 240 + 10 =(762)102. 二進制轉換為十六進制與二進制轉換為八進制相似,只是轉換為十六進制時,以4位二進制數(shù)為一組,每一組轉換為一個十六進制的值。例如:(11001111.01111)2 = (1100 1111.0111 1000)2 = (CF.78)16編輯課件3.1.4 數(shù)制間的轉換前面已經(jīng)接觸過標準輸出函數(shù)printf()了,這里就使用printf()函數(shù)輸出轉換的結果。printf()函數(shù)的格式控制參數(shù)如下表所示。格式控制參數(shù)格式控制參數(shù)描述描述%d十進制有符號整數(shù)%u十進制無符號整數(shù)%f十進制浮點數(shù)%o八進制數(shù)%x十六進制數(shù)編輯課件3

9、.1.4 數(shù)制間的轉換【范例范例3-1】 分別使用十進制、八進制和十六進制輸出已知數(shù)值。分別使用十進制、八進制和十六進制輸出已知數(shù)值。01 #include 02 int main(void)03 04 unsigned int x=12;05 unsigned int y=012;/*八進制0開頭*/06 unsigned int z=0 x12;/*十六進制0 x開頭*/07 printf(十進制%u轉化為 八進制%o 十六進制%xn,x,x,x);/*%u表示無符號十進制數(shù)*/08 printf(八進制%o轉化為 十進制%u 十六進制%xn,y,y,y);/*%o表示無符號八進制數(shù)*/0

10、9 printf(十六進制%x轉化為 八進制%o 十進制%un,z,z,z);/*%x表示無符號十六進制數(shù)*/10 return 0;11 編輯課件3.2 整型整型數(shù)據(jù),英文單詞是Integer,比如0,-12,255,1,32767等等這些都是整型數(shù)據(jù)。整型數(shù)據(jù)中是不允許出現(xiàn)小數(shù)點和其它特殊符號的。整型數(shù)據(jù)共分為七類,分別是字符型、短整型、整型、長整型、無符號短整型、無符號整型和無符號長整型。其中短整型、整型和長整型是有符號數(shù)據(jù)類型。編輯課件3.2 整型整型整型字符型字符型char短整型短整型shortint整型整型int長整型長整型longint無符號無符號短整型短整型unsignedsh

11、ort無符號無符號整型整型unsignedint無符號無符號短整型短整型unsignedlong編輯課件3.2 整型1. 取值范圍類型類型說明說明字節(jié)字節(jié)范圍范圍整型int4-21474836482147483647短整型short (int)2-3276832767長整型long (int)4-21474836482147483647無符號整型unsigned (int)404294967295無符號短整型unsigned short (int)2065535無符號長整型unsigned long (int)404294967295字符型char10255編輯課件3.2 整型2. 有符號數(shù)和

12、無符號數(shù)對于有符號數(shù),以最高位(左邊第一位)作為符號位,最高位是0表示的數(shù)據(jù)是正數(shù),最高位是1表示的數(shù)據(jù)是負數(shù)。 整數(shù)10二進制形式:00001010整數(shù)-10二進制形式:10001010編輯課件3.2 整型對于無符號整數(shù),因為表述的都是非負數(shù),一個字節(jié)中的8位全部用來存儲數(shù)據(jù),不再設置符號位。整數(shù)10二進制形式:00001010整數(shù)138二進制形式:10001010編輯課件3.2 整型3. 類型間轉換不同類型的整型數(shù)據(jù)所占的字節(jié)數(shù)不同,他們在相互轉換時需要格外留心,不要把過大的數(shù)據(jù)放在過小的數(shù)據(jù)類型中,在把占字節(jié)較大的數(shù)據(jù)賦值給占字節(jié)較小的數(shù)據(jù)時,防止出現(xiàn)以下的情況。例如int a = 21

13、47483648;printf(%d,a);這樣賦值后,輸出變量a的值并非預期的2147483648,而是-2147483648,原因是2147483648超出了int類型能夠裝載最大值,數(shù)據(jù)產(chǎn)生了溢出。如果換一種輸出格式控制符,代碼如下所示:printf(%u,a);輸出的結果就是變量a的值,原因是%u是按照無符號整型輸出的數(shù)據(jù),而無符號整型的數(shù)據(jù)范圍上限大于2147483648這個值。 編輯課件3.2 整型unsigned short a = 256;char b = a;printf(%d,b);這樣賦值后,輸出變量b的值并非預期的256,而是0,原因是256超出了char類型能夠裝載最

14、大值,b只截取了a的低8位的數(shù)據(jù),如下:變量a0000000100000000變量b高8位被截掉了!00000000編輯課件3.2 整型當把占字節(jié)較小的數(shù)據(jù)賦值給占字節(jié)較大的數(shù)據(jù)時,可能出現(xiàn)以下兩種情況。第1種情況,當字節(jié)較大數(shù)是無符號數(shù)時,轉換時新擴充的位被填充成0char b = 10;unsigned short a = b;printf(%u,a);這樣賦值后,變量a中輸出的值是10,原因如下:變量b空的00001010變量a0000000000001010編輯課件3.2 整型第2種情況,當字節(jié)較大數(shù)是有符號數(shù)時,轉換時新擴充的位被填充成符號位char b = 255;short a

15、= b;printf(%d,a);這樣賦值后,變量a輸出的值是-1,變量a擴充的高8位,根據(jù)變量b的最高位1都被填充成了1,所以數(shù)值由正數(shù)變成了負數(shù),因為變量a的最高位符號位是1,至于為什么16個1表示的是-1,涉及到二進制數(shù)的原碼和補碼問題,這里先不深究。轉換圖示如下:變量b空的11111111變量a1111111111111111編輯課件3.3 字符型字符型是整型數(shù)據(jù)中的一種,它存儲的是單個的字符,存儲方式是按照ASCII碼(American Standard Code for Information Interchange,美國信息交換標準碼)的編碼方式,每個字符占一個字節(jié),8位(ASC

16、II碼可查閱王牌2中的相關內(nèi)容)。使用單引號“”把字符引起來,用以和變量、其他數(shù)據(jù)類型區(qū)別。比如:A,5,m,$,;等等。編輯課件3.3 字符型比如有這樣5個字符:H、e、l、l、o,他們在內(nèi)存中存儲的形式如下的圖表所示。0100100001100101011011000110110001101111Hello編輯課件3.3 字符型字符型的輸出,既可以使用字符的形式輸出字符,即采用“%c”格式控制符,還可以使用上小一節(jié)采用的其他整數(shù)輸出方式。比如:char c = A;printf(“%c,%u”,c,c);輸出結果是:A,65此處65是字符A的ASCII碼。編輯課件3.3 字符型【范例3-2

17、】 字符和整數(shù)的相互轉換輸出01 #include 02 int main(void)03 04 char c=a; /*字符變量c初始化*/05 unsigned i=97; /*無符號變量i初始化*/06 printf(%c,%un,c,c); /*以字符和整形輸出c*/07 printf(%c,%un,i,i); /*以字符和整形輸出c*/08 return 0;09 編輯課件3.3 字符型字符的家族中,控制符是無法通過正常的字符形式表示,比如常用的回車、換行、退格等等,需要使用特殊的字符形式來表示他們,這種特殊字符稱為轉義符。 編輯課件3.3 字符型轉義符轉義符說明說明ACSII碼碼n

18、換行,移動到下一行首00001010t水平制表鍵,移動到下一個制表符位置00001001b退格,向前退一格00001000r回車,移動到當前行行首00001101a報警00000111?輸出問號00111111輸出單引號00100111”輸出雙引號00100010ooo八進制方式輸出字符,o表示八進制數(shù)空xhhh十六進制方式輸出字符,h表示十六進制數(shù)空0空字符000000編輯課件3.3 字符型【范例范例3-3】 輸出字符串,分析轉義符的作用。輸出字符串,分析轉義符的作用。01 #include 02 int main(void)03 04 printf(12345678901234567890

19、n); /*參考數(shù)據(jù)*/05 printf(abctdefn); /*轉移符使用*/06 printf(abctdebfn);07 printf(abctdebrfn);08 printf(abcdefghi?n);09 printf(整數(shù)98n); /*轉移符數(shù)制*/10 printf(八進制表達整數(shù)98是 142n);11 printf(十六進制表達整數(shù)98是x62n);12 return 0;13 編輯課件3.4 浮點型C語言中除了整型外,另外一種數(shù)據(jù)類型就是浮點型,浮點型可以表示有小數(shù)部分的數(shù)據(jù)。浮點型包含三種數(shù)據(jù)類型,分別是單精度的float類型,雙精度的double類型,和長雙精度

20、long double類型。編輯課件3.4 浮點型浮點型floatdoublelong double類型類型位數(shù)位數(shù)有效數(shù)字有效數(shù)字取值范圍取值范圍float3267-1.4e-453.4e38double641516-4.9e-3241.8e308long double1281819編輯課件3.4 浮點型參與運算的表達式中存在double類型,或者說,參與運算的表達式不是完全由整型組成的,在沒有明確的類型轉換標識的情況下(將在下一小節(jié)中講解),表達式的數(shù)據(jù)類型就是double類型。例如:1 + 1.5 + 1.23456789/*表達式運算結果是double類型*/1 + 1.5/*表達式運

21、算結果是double類型*/1 + 2.0/*表達式運算結果是double類型*/1 + 2/*表達式運算結果是int類型*/例子當?shù)?.5,編譯器默認它為雙精度的double類型,精度高占據(jù)存儲空間大,如果只希望以單精度float類型運行,可以在常量后添加字符f或者F都可以,比如1.5F,2.38F。同樣的,如果希望數(shù)據(jù)是以精度更高的long double參與運算,可以在常量后添加字符l或者L都可以,比如1.51245L,2.38000L。建議使用大寫L,因為小寫l容易和數(shù)字1混淆。編輯課件3.4 浮點型再舉幾個運算的表達式的例子,如下所示:int i,j;float m;double x;

22、i + j/*表達式運算結果是int類型*/i + m /*表達式運算結果是float類型*/i + m +x /*表達式運算結果是double類型*/編輯課件3.4 浮點型指數(shù)形式如下所示(e或者E都可以)2.0e3表示2000.01.23e-2表示0.0123.123e2表示12.31e-3表示0.001對于指數(shù)形式,有以下兩點要求: 字母e前面必須要有數(shù)字 字母e的后面必須是整數(shù)浮點型小數(shù)形式指數(shù)形式編輯課件3.5 類型轉換3.5.1 隱式轉換3.5.2 顯式轉換編輯課件3.5 類型轉換計算過程中,如果遇到不同的數(shù)據(jù)類型參與運算該怎么辦,是終止程序還是轉換類型后繼續(xù)運算。編譯器采取第二種

23、方式,如果能夠轉換成功,程序繼續(xù)運算,如果轉換失敗,程序報錯同時終止運行。數(shù)據(jù)類型有兩種轉換方式,分別隱式轉換和顯式轉換。編輯課件3.5.1 隱式轉換C語言中設定了不同數(shù)據(jù)參與運算時的轉換規(guī)則,編譯器會在悄無聲息中進行數(shù)據(jù)類型的轉換,進而計算出最終結果,這就是隱式轉換。 編輯課件3.5.1 隱式轉換int i;i = 2 + A;先計算“=”號右邊的表達式,字符型和整型混合運算,按照數(shù)據(jù)類型轉換先后順序,把字符型轉換為int類型65,然后求和得67,最后把67賦值給變量i。double d;d = 2 + A + 1.5F;先計算“=”號右邊的表達式,字符型、整型和單精度float類型混合運算

24、,因為有浮點型參與運算,“=”右邊表達式的結果一定是double類型,按照數(shù)據(jù)類型轉換順序,把字符型轉換為類型65.0,2轉換為2.0,1.5F轉換為1.5,最后把雙精度浮點數(shù)68.5賦值給變量d。編輯課件3.5.1 隱式轉換上述情況都是有低精度類型向高精度類型的轉換,如果逆向轉換,可能會出現(xiàn)丟失數(shù)據(jù)的危險,編譯器會以警告的形式給出提示。例如:int i;i = 1.2;浮點數(shù)1.2舍棄小數(shù)位后,把整數(shù)部分1賦值給變量i。如果i=1.9,運算后變量i的值依然是1,而不是2。注注 意意:把浮點數(shù)轉換為整數(shù),直接舍棄小數(shù)位。編輯課件3.5.1 隱式轉換【范例范例3-4】 整型和浮點型數(shù)據(jù)類型間的整

25、型和浮點型數(shù)據(jù)類型間的隱式類型轉換。隱式類型轉換。01 #include 02 int main(void)03 04 int i;05 i=1+2.0*3+1.234+c-A; /*混合運算*/06 printf(%dn,i); /*輸出i*/07 return 0;08 編輯課件3.5.2 顯式轉換隱式類型轉換編譯器是會產(chǎn)生警告的,提示程序存在潛在的隱患。如果非常明確的希望轉換數(shù)據(jù)類型,這就需要用到顯式類型轉換了。顯式轉換格式如下所示:(類型名稱) 變量或者常量或者(類型名稱) (表達式)編輯課件3.5.2 顯式轉換例如,需要把一浮點數(shù),以整數(shù)的形式使用printf()函數(shù)輸出,怎么辦?就可以調(diào)用顯示類型轉換。float f=1.23;printf(%dn,(int)f);可以得到輸出結果1,沒有因為調(diào)用的printf()函數(shù)格式控制列表和輸出列表前后類型不統(tǒng)一導致程序報錯。繼續(xù)分析上例,顯示類型轉換只是把f小數(shù)

溫馨提示

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

評論

0/150

提交評論