- C程序設計簡明教程(第二版)
- 雷新賢 黃榮保
- 3256字
- 2020-06-18 18:07:04
2.1 數據類型
2.1.1 程序引例
【例2.1】已知一個圓的半徑,求這個圓的周長和面積。
分析:如果用r代表圓的半徑,用g代表圓的周長,用s代表圓的面積,用pi代表圓周率π,那么圓的周長公式是g=2pi*r,圓的面積公式是s=pi*r2。在這兩個公式里,pi是圓周率,固定不變的,而半徑r是可變的,則圓的周長與圓的面積也是可變的,那么,這些元素如何在C語言里進行說明并表示出來,這就是本節的重點內容。
程序代碼如下:


圖2-1 例2.1運行結果
運行結果如圖2-1所示。
由圖中可以看到,r的值為整數1,而g、s為小數形式,也就是說,r與g、s是不同的數據類型。那么C語言的數據類型是怎樣規定的呢?
在C語言中,每個數據都屬于唯一的一種數據類型,沒有無類型的數據,C語言的數據類型如圖2-2所示。

圖2-2 C語言的數據類型
C語言的基本數據類型有三種:字符型、整型和實型(浮點型)。C語言的基本數據類型修飾符有四種:singed(有符號)、unsigned(無符號)、long(長型符)、short(短型符),這些類型修飾符可以與字符型或整型數據配合使用。基本數據類型和取值范圍如表2-1所示。
表2-1 C語言常用基本數據類型描述

說明:C語言中,整型數據的取值范圍隨著程序編譯系統的不同而不同。本書以C-Free 3.5作為程序調試環境。
2.1.2 標識符和關鍵字
所謂標識符是指用來標識程序中用到的變量名、函數名、類型名、數組名、文件名以及符號常量名等有效字符序列。
在C語言中,標識符的命名規則是:由字母(大小寫皆可)、數字及下畫線組成,且第一個字符必須是字母或下畫線。
由上述的標識符命名規則可知,下面的標識符名是合法的:
year、_123、Int
而下面的標識符是非法的:
#123、1_2
所謂關鍵字又被稱為保留字,它也是C語言的一種標識符,用來命名C語言程序中的語句、數據類型和變量屬性等。每個關鍵字都有固有的含義,不能另做其他用途,C語言中的所有關鍵字都使用小寫字母來表示。
2.1.3 常量
常量又稱常數,是指在程序運行過程中其值不可改變的量。C語言中的常量可分整型常量、實型常量和字符型常量。
(1)整型常量
整型常量又稱為整數,在C語言中,整數可以用三種數制來表示:
①十進制整型常量。十進制整型常量沒有前綴,其數碼為0~9。
②八進制整型常量。八進制整型常量必須以數字0開頭,其數碼取值范圍為0~7。
③十六進制整型常量。十六進制整型常量的前綴為0X或0x。其數碼取值范圍為0~9、A~F或a~f。
(2)實型常量
實型也稱為浮點型,實型常量也可稱為實數或浮點數。在C語言中,實數采用十進制表示,它有兩種形式:十進制小數形式和指數形式。
①十進制小數形式:小數形式是由數碼0~9和小數點組成(注意:必須有小數點)。
②指數形式:指數形式又稱科學計數法。其一般形式為:a E n(a表示十進制數,n表示指數),其數值為a×10n。
注意:指數表示形式中E或e前后必須有數字,E或e后面的數字必須是整數。
【例2.2】整型常量和實型常量的輸出。

第一個printf語句,以十進制形式輸出用三種數制表示的整數,第二個printf語句,以小數形式和指數形式輸出實數,運行結果如圖2-3所示。

圖2-3 例2.2運行結果
(3)字符型常量
字符型常量是用單引號括起來的一個字符。例如:'A'、'a'等。
在C語言中,字符型常量有以下特點:
①字符型常量只能用單引號括起來,不能使用雙引號或其他括號。單引號是字符型常量的定界符,不是字符型常量的一部分。
②字符型常量只能存放一個字符,不能是多個字符。字符值以ASCII碼的形式存放在內存單元中。數字被定義為字符型之后就不能參與數值運算,也就是說'5'與5是不同的。
③轉義字符是一種特殊的字符型常量。轉義字符以反斜線“\”開頭,后面跟一個或幾個字符。轉義字符主要用來表示控制代碼,例如,“回車”、“換行”等。轉義字符具有特定的含義,不同于字符原有的意義,所以稱為“轉義”字符。常用轉義字符如表2-2所示。
表2-2 常用的轉義字符及其功能

表中最后兩行是用ASCII碼(八進制或十六進制)表示一個字符。例如,'\101'或'\x41'表示ASCII碼為十進制數65的字符'A'。其中'\101'中101是八進制,轉換成十進制是65,而'\x41'中x41是十六進制,轉換成十進制也是65。
【例2.3】字符型常量的輸出。
程序代碼如下:

運行結果如圖2-4所示。

圖2-4 例2.3運行結果
(4)字符串常量
字符串常量是用一對雙引號括起來的字符序列。例如,"hello"、""、"123"。字符串的長度等于字符串中包含的字符個數,例如,字符串"hello"的長度為5個字符。
字符串常量與字符型常量是不同的,它們之間主要的區別有:
①字符型常量使用單引號定界,字符串常量使用雙引號來定界。
②字符型常量只能是單個字符,字符串常量則可以包含一個或多個字符。
③可以把一個字符型常量賦給一個字符型變量,但不能把一個字符串常量賦給一個字符串變量,在C語言中沒有相應的字符串變量,可以用一個字符數組來存放一個字符串常量。
字符型常量占一個字節的存儲空間,字符串常量占的內存字節數等于字符串的長度加1,增加的一個字節中存放字符'\0',用于標志字符串的結束。
字符型常量'a'和字符串常量"a",雖然都只有一個字符,但在內存中的存儲情況是不同的。
'a'在內存中占一個字節,可表示為:
"a"在內存中占兩個字節,可表示為:

(5)符號常量
在C語言中,也可以用一個標識符來表示一個常量,稱為符號常量。符號常量在使用之前必須先定義,其一般形式如下:
#define標識符常量
【例2.4】已知商品的數量和單價,單價為常量,數量可變,求應付款。
程序代碼如下:

運行結果如圖2-5所示。

圖2-5 例2.4運行結果
如例2.4中,商品單價用PRICE表示,可寫為:#define PRICE 30
其中,define是關鍵字,前面加“#”,表示一條預處理命令(預處理命令都以“#”開頭),稱為宏定義命令。
該語句的功能是把標識符PRICE定義為其后的常量值30,定義后在程序中所有出現PRICE的地方均可以30來代替。符號常量的標識符是用戶自己定義的。
符號常量的特點:
①習慣上符號常量的標識符用大寫字母,變量標識符用小寫字母,以示區別。
②符號常量與變量不同,符號常量的值在其作用域內不能改變,也不能再被賦值。
③使用符號常量的好處是:含義清楚,并且能做到“一改全改”。
2.1.4 變量
在程序運行過程中,其值可以改變的量稱為變量。一個變量應該有一個名字,在內存中占據一定的存儲單元。變量定義必須放在變量使用之前,一般放在函數體的開頭部分。要區分變量名和變量值兩個概念。在例2.1中,圓半徑r的值為1,則變量r在內存中的存儲形式如下:

C語言規定,所有變量在使用前必須先定義。
回顧例2.1中的兩行程序代碼:int r;和float s,g;
這兩行代碼功能是定義了一個整型變量r和兩個浮點型變量s,g。其中int和float都是數據類型標識符,是C語言的關鍵字,用來說明變量的類型,而r,s,g是變量名。
(1)變量定義的格式
變量定義的格式如下:
存儲類型符 數據類型符 變量名表;
說明:
①存儲類型符用來說明變量的存儲類型,存儲類型有自動類型(auto),寄存器類型(register),靜態類型(static),外部類型(extern)等,默認為自動類型。如果未對存儲類型做說明,則為自動類型。在例2.1中,變量定義語句都沒有聲明存儲類型,所以都按自動類型處理。
②數據類型符用來說明變量的數據類型,它可以是C語言中任意一種基本數據類型。
③變量名表中可以只有一個變量名,也可以有多個變量名;如果有多個變量名,各變量名之間用逗號分開。
(2)變量的賦值
定義變量后,在使用之前需要給變量一個初始值。在C語言中,可以通過賦值運算“=”給變量賦值。
變量賦值的一般格式是:
變量名=表達式;
變量的賦值常用的有以下兩種情況:
①先定義后賦值。如:
int r;
r=1;
②在定義變量的同時為其賦值,稱為變量的初始化。定義的變量可以全部初始化,也可以部分初始化。
例如,int r=1;,該語句即定義了整型變量r,同時為其賦初值為1。
變量在某一時刻只有一個確定的值,變量獲得新值后,其原始值被覆蓋。例如:
int r;
r=1;
r=2;
該程序段執行后,變量r的值不是1,而是2。
定義多個同類型變量并要給所有變量賦值,只能逐個處理,每個賦值表達式之間用逗號分開。例如,有三個整型變量x,y,z,且初始值都是10,則可以寫成如下形式:int x=10,y=10,z=10;
如果變量的類型與所賦數據的類型不一致,所賦數據將被轉換成與變量相同的類型。例如,int x=10.5;,該程序執行后,變量x的值是整數10。
- Objective-C應用開發全程實錄
- 垃圾回收的算法與實現
- C# 從入門到項目實踐(超值版)
- The Computer Vision Workshop
- WordPress Plugin Development Cookbook(Second Edition)
- Highcharts Cookbook
- Getting Started with Polymer
- HTML+CSS+JavaScript網頁制作:從入門到精通(第4版)
- Exploring SE for Android
- 高性能PHP 7
- 算法精解:C語言描述
- Learning Apache Thrift
- Apache Kafka 1.0 Cookbook
- 鋁合金陽極氧化與表面處理技術(第三版)
- Python大數據與機器學習實戰