- C語言程序設計實例教程(第3版)
- 李紅 陸建友主編
- 1875字
- 2021-12-17 17:35:17
2.2 數據類型
學習目標
1)掌握幾種常用的數據類型。
2)理解不同數據類型間的轉換。

實例6
實例6 基本數據類型——輸出不同數據類型的值
實例任務
定義不同類型的變量,并進行一定的簡單運算,要求輸出不同類型表達式的值。程序運行結果如圖2-4所示。

圖2-4 程序運行結果
程序代碼

相關知識
1.整型數據
根據占用內存字節數的不同,整型變量又分為以下4類。
1)基本整型(類型關鍵字為int)。
2)短整型(類型關鍵字為short [int])。
3)長整型(類型關鍵字為long [int])。
4)無符號整型。無符號型又分為無符號基本整型(unsigned int或unsigned)、無符號短整型(unsigned short)和無符號長整型(unsigned long)3種,只能用來存儲無符號整數。
整型數據或變量占用的內存字節數隨系統而異。在16位操作系統中,一般用2字節表示一個int型變量,且long型(4字節)≥int型(2字節)≥short型(2字節)。顯然,不同類型的整型變量,其值域不同。有符號整型變量的值域為-215~(215-1);無符號整型變量的值域為0~(216-1)。不同整型數據類型的字節長度和取值范圍如表2-2所示。
表2-2 整型數據類型的字節長度和取值范圍

2.實型數據
C語言的實型變量,分為以下兩種。
1)單精度型:類型關鍵字為float,一般占4字節,提供7位有效數字。
2)雙精度型:類型關鍵字為double,一般占8個字節,提供15~16位有效數字。
實型常量即實數,在C語言中又稱為浮點數,其值有以下兩種表達形式。
1)十進制形式:如3.14、10.5等。
2)指數形式:它由字母e或E連接兩邊的數字,如2.3e-7代表2.3×10-7。e的兩邊必須有數值,且e后的指數部分必須是整型數,6.1e、.e+5、e-3、1.3e4.8都是非法的。
3.字符型數據
字符型數據是用一對單引號括起來的單個字符,如'A'、'+'、'5'等。另外,轉義字符也屬于字符型數據。轉義字符在上一節已經介紹過。
字符變量的類型關鍵字為char,一般占用1字節內存單元。字符變量通常也分為兩類:一般字符類型(char)和無符號字符類型(unsigned char)。字符型數據的字節長度和取值范圍見表2-3。
表2-3 字符型數據的字節長度和取值范圍

對于字符型數據,既可以字符形式輸出,也可以整數形式輸出。實例中,輸出變量c1、c2的值,讀者可以對比一下兩種格式。
4.字符串數據
字符串常量是用一對雙引號括起來的若干字符序列。字符串中字符的個數稱為字符串長度。長度為0的字符串(即一個字符都沒有的字符串)稱為空串。
C語言規定,在存儲字符串常量時,由系統在字符串的末尾自動加'\0'作為字符串的結束標志。如果有一個字符串為“CHINA”,則它在內存中的實際存儲為6個字符,最后一個字符'\0'是系統自動加上的,它占用6字節而非5字節內存空間。
對于字符型指針變量可按下列形式定義:

語句中符號*是指針運算符,表示p為指針變量,整個語句表示指針p指向這個字符串。printf()函數中,可以用%s格式控制符進行字符串輸出。

實例7
實例7 不同數據類型間的轉換——不同類型數據身份的轉換
實例任務
定義一些不同類型的變量,進行簡單運算,并根據不同要求將運算結果強制類型轉換。程序運行結果如圖2-5所示。
程序代碼

圖2-5 程序運行結果

相關知識
1.數據類型的自動轉換
不同類型數據間進行混合運算時,要先將數據類型轉換成一致后才能進行相應的運算,這種轉換是自動完成的,稱為數據類型的自動轉換。數據類型的自動轉換遵循如下原則。
1)若參與運算量的類型不同,則先轉換成同一數據類型再進行運算。
2)轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型量運算時,先把int型的量轉成long型再進行運算。
3)所有的浮點運算都是以雙精度進行的,即使是僅含單精度(float)量運算的表達式,也要先轉換成double型,再進行運算。
4)char型量和short型量參與運算時,必須先將其轉換成int型。
5)在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的數據類型將轉換為賦值號左邊量的類型。如果賦值號右邊量的數據類型長度比左邊長時,將丟失一部分數據,這樣會降低精度,丟失的部分按四舍五入向前舍入。
2.數據類型的強制轉換
數據類型的強制轉換是根據程序的需要通過類型定義符來完成的,其形式如下:

其功能是把表達式的運算結果強制轉換成類型說明符所表示的數據類型。如實例中的(int)b1把b1轉換為整型,(float)(a1+a2)把a1+a2的結果轉換為單精度型并賦值給變量c。
在強制類型轉換時,一定要注意將類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(float)(a1+a2)寫成(float)a1+a2,就變成把a1轉換成float型之后再與a2相加了。
課堂精練
1)定義兩個字符型變量,輸出相應的字符及對應的ASCII值。程序運行結果如圖2-6所示。
根據以上程序運行結果,請將下面的程序補充完整并調試。

2)定義不同類型的變量,然后進行輸出。程序運行結果如圖2-7所示。
根據程序的運行結果,請將下面的程序補充完整并調試。



圖2-6 程序運行結果(1)

圖2-7 程序運行結果(2)