c語言程序設計與項目實踐第2章_第1頁
c語言程序設計與項目實踐第2章_第2頁
c語言程序設計與項目實踐第2章_第3頁
c語言程序設計與項目實踐第2章_第4頁
c語言程序設計與項目實踐第2章_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 基本數據類型,本章的學習重點 數據類型的分類 進位計數制及不同進制的轉換 常量的類型 變量的定義及簡單使用 枚舉的定義及使用,2.1 數據類型概述,C語言中的數據類型多種多樣,按照其結構復雜度大致可分為基本數據類型、指針類型、空類型、文件類型和構造類型等。,2.2 進制換算,進制換算就是數值在不同的計數制之間進行的等值或等價換算,數值在換算前后保持不變,只是表達方式不同而已。計數制是為不同的計數單位制定的標準。,2.2.1 進位計數制概述,實際應用經常應用的計數制,例如:十二進制(一打雞蛋為十二個),六十進制(60秒為一分鐘,60分鐘為一小時)等等。 這種逢幾進一的機制稱為進位計數制。

2、與C語言關系最密切的幾種計數制是:二進制、八進制、十進制和十六進制。,2.2.1 進位計數制概述,二進制:0、1 八進制:0、1、2、3、4、5、6、7 十進制:0、1、2、3、4、5、6、7、8、9 十六進制:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,2.2.1 進位計數制概述,2.2.2 二進制與其他進制的轉換,1. 二進制轉換為十進制 二進制轉換為十進制分成兩部分進行,一部分是整數部分,一部分是小數部分 范例2.1:二進制數10010.11(2)轉換為十進制數 10010.11(2) = 1x24+0 x23+0 x22+1x21+0 x20+1x2-1+1x2-2

3、= 18.75(10) 2.二進制轉換八進制 二進制到八進制的轉換采用三位一體的計算方法,同樣分為整數部分和小數部分兩部分考慮 范例2.2:將二進制數1110100.101101(2)轉換為八進制數 1110100101101(2) 001/110/100/101/101(2) 1/6/4/5/5(8)=164.55(8),2.2.2 二進制與其他進制的轉換,3二進制轉換十六進制 二進制到十六進制的轉換采用四位一體的計算方法,計算時同樣整數部分與銷數部分分開 范例2.3:將二進制數1110100.101101(2)轉換為十六進制數 1110100.101101(2) 0111/0100/101

4、1/0100 (2) 7/4/B/4(16)=74.B4(16),2.2.2 二進制與其他進制的轉換,進制轉換表,2.2.3 八進制與其他進制的轉換,1. 八進制轉換為十進制 八進制向十進制的轉換也要按照位權和數碼作積再依次相加的方法 1270(8) = 1x83+2x82+7x81+0 x80 =696(10) 2.八進制轉換為二進制 將八進制數從右到左每位數字轉換為3位二進制數 范例2.4:將八進制數5361(8)轉換為二進制數 5361(8) 101/011/110/001(2) 101011110001(2),2.2.3 八進制與其他進制的轉換,3八進制轉換為十六進制 八進制到十六進制

5、的轉換通常以二進制為中介,即先將八進制轉換為二進制,然后再由二進制轉換為八進制。 范例2.5:將八進制754231(8)轉換為十六進制 解析:先將八進制數754231(8)轉換為二進制 754231(8) 111/101/100/010/011/001(2)111101100010011001 (2) 再將二進制轉換為十六進制 111101100010011001 (2)0011/1101/1000/1001/1001 (2)3/D/8/9/9 (16)3D899 (16),2.2.4 十六進制與其他進制的轉換,十六進制數是C語言中主要的賦值方式之一,同時也是二進制在C語言中的主要表現方式。,

6、1十六進制轉換為十進制 十六進制向十進制的轉換同樣按照位權和數碼作積再依次相加的方法 13FB(16) = 1x163+3x162+Fx161+Bx160 =1x163+3x162+15x161+11x160=5115 (10) 2.十六進制轉換為二進制 轉換方法為:將十六進制數從右到左每位數字轉換為4位二進制數 范例2.6:將十六進制數FB1A4(16)轉換為二進制 FB1A4(16)1111/1011/0001/1010/0100 (2)11111011000110100100 (2),2.2.4 十六進制與其他進制的轉換,3十六進制轉換為八進制 十六進制轉換為八進制同樣需要二進制作中介。

7、 范例2.7:將十六進制數3C6D(16)轉換為八進制數 先將十六進制數3C6D(16)轉換為二進制 3C6D(16)0011/1100/0110/1101 (2)11110001101101 (2) 再將其轉換為八進制: 11110001101101 (2)11/110/001/101/101 (2)3/6/1/5/5(8) 36155(8),2.2.4 十六進制與其他進制的轉換,十進制到二進制的轉換分成兩部分,一部分是整數部分的轉換,一部分是小數部分的轉換。 1整數部分轉換 整數十進制到二進制的轉換采用除二取余再反向的方法。將整數作除二取余運算,直到被除數為零,然后將余數反向順序寫出,就是

8、整數部分的二進制表達。,2.2.5 十進制與二進制的轉換,范例2.8:將十進制數158轉換為二進制數 解析:首先對158進行除二取余運算 158/2=79.0 79/2=39 .1 39/2=19 .1 19/2=9 .1 9/2=4 .1 4/2=2 .0 2/2=1 .0 1/2=0 .1 將所得余數自下而上按順序從左到右寫出:10011110,這就是十進制數158的二進制表示。,2.2.5 十進制與二進制的轉換,2小數部分轉換 小數部分十進制到二進制的轉換采用乘二取整再順序寫出的方法。將小數部分與2相乘,記錄乘積的整數部分,將小數部分再與2相乘,記錄乘積的整數部分,這樣執(zhí)行下去直到小數部

9、分為0或滿足要求精度。,2.2.5 十進制與二進制的轉換,范例2.9:將十進制數0.375轉換為二進制數,要求精確到小數點后6位 解析:對二進制數0.375作乘2取整運算 0.375*2=0.700 .0 0.700*2=1.400 .1 0.400*2=0.800 .0 0.800*2=1.600 .1 0.600*2=1.200 .1 0.200*2=0.400 .0 將上述所記錄整數部分順序寫出:0.010110,這就是小數0.375的近似二進制表達。,2.2.5 十進制與二進制的轉換,機器數 機器數的表示形式為:用“0”表示正數,“1”表示負數,其余位表示數值。通常,把在計算機內存中正

10、、負號數字化的數稱為機器數。,2.2.6 機器數及其在內存中存儲格式,原碼 原碼是計算機中數據存儲方式之一。其表示形式為:數值用絕對值表示,在數值的最高位用“0”和“1”分別表示數值的正和負。 范例2.10:寫出+35和-35的原碼表示形式(32位表示) 解析:首先確定數據的符號作為最高位,然后將數值轉換為二進制數,以32位表示 +35 原碼00000000000000000000000000100011 -35 原碼10000000000000000000000000100011,2.2.6 機器數及其在內存中存儲格式,反碼 反碼在計算機中的表示方式為:正數的反碼與原碼相同,負數的反碼是其原

11、碼數值部分按各位取反,符號位不變。 范例2.11:寫出+35和-35的反碼表示形式(32位表示) 解析:首先分別寫出兩個數的原碼,以32位表示 +35原碼00000000000000000000000000100011 -35原碼10000000000000000000000000100011 再將負數35的原碼取反,得+35和-35的反碼: +35反碼00000000000000000000000000100011 -35反碼11111111111111111111111111011100,2.2.6 機器數及其在內存中存儲格式,補碼 計算機補碼的表示形式為:正數的補碼與原碼、反碼相同,負數

12、的補碼是其反碼加1,符號位不變。 范例2.12:寫出+35和-35的補碼表示形式(32位表示) 解析:首先分別寫出兩個數的原碼,以32位表示 +35原碼00000000000000000000000000100011 -35原碼10000000000000000000000000100011 再將負數35的反碼加1,得+35和-35的補碼: +35補碼00000000000000000000000000100011 -35補碼11111111111111111111111111011101,2.2.6 機器數及其在內存中存儲格式,0的反碼和補碼 在反碼和補碼表示中,0是一個比較特殊的數字。由于

13、0可表示為正0和負0,因此,0的原碼和反碼分別有兩種表示形式: +0原碼=00000000000000000000000000000000 -0原碼=10000000000000000000000000000000 +0反碼=00000000000000000000000000000000 -0反碼=11111111111111111111111111111111 而對于+0和-0的補碼,有: +0補碼=00000000000000000000000000000000 -0補碼=00000000000000000000000000000000 可見0的補碼表示是唯一的。,2.2.6 機器數及其

14、在內存中存儲格式,在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量。常量與數據類型結合又可分為整型常量、浮點常量、字符常量和枚舉常量。在程序中,常量可以不經說明直接引用。 例如,有如下語句: i = 10;,2.3 常量,常用的整型常量有八進制、十進制和十六進制三種 1八進制常量 必須以數字0開頭,數碼取值為07。八進制數通常是無符號數, 例如:015,012,06等。 2. 十六進制常量 十六進制常量必須以0X或0 x開頭。其數碼取值為09,AF或af。例如:0 x15,0 xfd,0 xDD,0 x1E,2.3.1 整型常量,3十進制常量 十進制常量沒有前綴。其數碼為09。 范例2.13 使用

15、不同的格式,輸出結果就事對應的表示形式,輸出整數521, 0521和0 x521的幾種表示方法。(OutputInteger.c ),2.3.1 整型常量,實型也稱為浮點型。C語言中,實型常量也稱為實數或者浮點數,并且,實型常量只采用十進制表示形式。 實型常量的表達方式有兩種:小數形式與指數形式。,2.3.2 實型常量,1小數形式 實數的小數形式由數字0 9以及小數點組成。其中,小數點前僅有零位時,數字0可省略,小數點后僅有0位時,數字0也可以省略。例如:0.391、 14.0、.556、-33.等均為合法的實數。,2.3.2 實型常量,2指數形式 實數的指數形式由:十進制數碼、階碼標志e或E

16、以及階碼組成。其中階碼包括階符和階數兩部分,階符可為+或-,其中+可省略,階數只能是十進制正整數或零,階碼不能省略。 指數形式的一般表達方式為:a E n,其中,a為十進制數,n為階碼,如+5、-6及+9等均為階碼。 如實數314159.26可表示為:3.1415926E+5、3.1415926e5或314.15926E+3等,2.3.2 實型常量,字符常量通常是用單引號引起來的一個字符,字符常量在內存中占一個字節(jié)的內存空間。 1普通字符 在語言中,字符常量有以下特點: (1)字符常量只能用單引號引起來,不能用雙引號或其它括號。 (2)字符常量只能是單個字符,不能是字符串。 (3)字符可以是字

17、符集中任意字符。但數字被定義為字符型之后就不能以原數值參與數值運算。,2.3.3 字符常量,01#include /頭文件包含 02main() 03 04printf(“%d, %dn”,0,0);/格式輸出 05 程序輸出: 0,48,2.3.3 字符常量,2ASCII碼 ASCII 碼(American Standard Code for Information Interchange):美國國家信息交換標準碼。使用一個字節(jié)表示不同的字符,最多可以定義256個字符,目前已定義128個,其中包括包括字母、數字、標點符號、控制字符及其他特殊符號的數值。 C語言中常用的ASCII碼是字母和數字

18、集合,如A的ASCII值為65,a的ASCII值為97。,2.3.3 字符常量,3轉義字符 轉義字符以反斜杠”開頭,后跟一個或幾個字符例如,在hello程序中printf函數中用到的“n”就是一個表示換行的轉義字符。,2.3.3 字符常量,常用轉義字符表,2.3.3 字符常量,C語言中,字符串常量是由一對雙引號引起來的字符序列。每個字符串都以0作為結束標志。字符串常量在內存中存儲時,系統在字符串的末尾自動添加字符串結束符0。因此,在C語言程序中,n個字符的字符串常量,在內存中占有n+1個字節(jié)的存儲空間。 例如,字符串“Hello”包含5個字符,而在內存中占6個字符。 范例2.14 通過size

19、of運算符解釋單個字符時字符常量和字符串常量在內存中所占字節(jié)數的差別。 (Charstringdifferent.c ),2.3.4 字符串常量,變量:整型變量、實型變量、字符型變量等。 整型變量:有符號整型(signed)、無符號整型(unsigned)兩類。按照所表達的數值范圍和占內存字節(jié)數可分為短整型(short int)、基本整型(int)和長整型(long),某些系統還支持長長整型(long long)。同時,各類型又分有符號和無符號兩類。 實型變量:單精度浮點型(float)和雙精度浮點型(double)。,2.4 變量,對于整型變量而言,通常的操作系統默認都是有符號類型,如果定義

20、無符號類型,需在前面加unsigned。 1計算機操作系統位長 計算機操作系統按照內存地址的長度可分為8位機、16位機、32位機以及64位機等。 232位機計算機操作系統 32位機中,短整型(short)在內存中占2字節(jié),基本整型(int)在內存中占4字節(jié),長整型(long)在內存中占4字節(jié)等。64位機中還有長長整型(long long),在內存中占8字節(jié)。單精度浮點型(float)在內存中占4字節(jié),雙精度浮點型(double)在內存中占8字節(jié)。字符型變量可分為有符號和無符號兩種類型:有符號字符型(char)和無符號字符型(unsigned char),兩者在內存均占1字節(jié)。如表2-4所示為不

21、同類型變量在內存中所占字節(jié)數。,2.4.1 變量與內存結構,2.4.1 變量與內存結構,2.4.1 變量與內存結構,范例2.15 使用運算符sizeof獲取不同數據類型在內存中所占的字節(jié)數,然后通過輸出打印,由此可以直觀的顯示各種數據類型內存字節(jié)數。(MemoryTypeByte.c ),2.4.2 變量的定義,C語言規(guī)定,變量必須先定義后使用,未經定義的變量在使用時會提示錯誤而導致程序編譯無法通過 1怎樣定義變量 定義的一般形式有兩種: 類型說明符變量名; 類型說明符變量名表列; 可以這樣定義: inti; intj; intk;,2.4.2 變量的定義,也可以將定義放在同一個語句中: in

22、ti, j, k; 變量名也稱為用戶標識符,變量名的定義應遵循一定的規(guī)則: (1)由字母、數字和下劃線組成 (2)變量名不能和關鍵字相同 (3)第一個字符必須是字母或下劃線 關鍵字:由語言規(guī)定的具有特定意義的字符串,通常也稱為保留字。,2.4.2 變量的定義,關鍵字,2.4.2 變量的定義,2.變量賦初值 在變量定義的同時,還可以進行賦值操作,稱作變量賦初值,如下定義: inti = 10; inta = 0; 像這種在定義變量的同時并賦予其一定值的操作稱為變量賦初值。等價于下面語句: inti; inta; i = 10; a = 0;,2.4.2 變量的定義,當在一條語句中定義多個變量時,

23、可以使用逗號表達式作如下定義方法: inti = 10, j = 100, k = 1000; 關于逗號表達式的概念將在第章中予以介紹,需要注意的是,不能使用如下方法給不同變量賦相同的值: inti = j = k = 0; 但可以在定義之后進行賦值操作,如: inti, j, k; i = j = k = 0;,2.4.3 整型變量,整型變量按照在內存中所占字節(jié)長度分為:短整型(short)、基本整型(int)、長整型(long)等 范例2.16 分別定義short、int和long型的整型變量,打印輸出各個變量的值,并輸出各種整型變量在內存中所占字節(jié)數。(IntegerVariableDe

24、fine.c ) 變量在使用前應先定義,若未定義就使用某變量,程序編譯時將出現錯誤,若去掉程序第4行,在編譯時將出現如下錯誤: D:chapt2shang IntegerVariableDefine.c(6) : error C2065: i : undeclared identifier,2.4.3 整型變量,范例2.17 定義整型變量i、j和k,未給變量i賦值便使用該變量,輸出i、j和k的值,檢查使用未賦值變量的輸出結果。(InitialVariable.c ),2.4.4 實型變量,實型變量: 單精度型(float)和雙精度型(double)兩類。 單精度型變量: 占4個字節(jié),精確位數為7位有效數字。 雙精度型變量: 占8個字節(jié),精確位數為16位有效數字。 范例2.18 分別定義float和double型的變量,為兩變量賦相同的值,并打印輸出,檢查兩者輸出值的差別。(RealTypeVariable.c ),2.4.4 實型變量,實型變量的定義: floatp1, p2, p3; doublex1, x2, x3;,實型變量的存儲結構:,2.4.5 字符變量,字符變量在內存中

溫馨提示

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

評論

0/150

提交評論