?? tc2.dat
字號:
第2章 數據類型、運算符與表達式
2.1 程序設計概述
一個程序應包括對數據的描述和對數據處理的描述.
1.對數據的描述,即數據結構.數據結構是計算機學科的核心課程之一,有許多專門著作論述,本課程就不再贅述.
在C語言中,系統提供的數據結構,是以數據類型的形式出現的.
2.對數據處理的描述,即計算機算法.算法是為解決一個問題而采取的方法和步驟,是程序的靈魂.為此,著名計算機科學家沃思(Nikiklaus Wirth)提出一個公式:
數據結構 + 算法 = 程序
實際上,一個程序除了數據結構和算法外,還必須使用一種計算機語言,并采用結構化方法來表示.
2.2 C語言的數據類型
C語言提供的數據結構,是以數據類型形式出現的.具體分類如下:
1.基本類型
分為整型、實型(又稱浮點型)、字符型和枚舉型四種.
2.構造類型
分為數組類型、結構類型和共用類型三種.
3.指針類型.在第9章中介紹.
4.空類型
C語言中的數據,有常量和變量之分,它們分別屬于上述這些類型.
本章將介紹基本類型中的整型、實型和字符型三種數據.
2.3 常量和變量
2.3.1 常量
1.常量的概念
在程序運行過程中,其值不能被改變的量稱為常量.
2.常量的分類
(1)整型常量
(2)實型常量
(3)字符常量.
(4)符號常量.
常量的類型,可通過書寫形式來判別.
2.3.2 變量
1.變量的概念
在程序運行過程中,其值可以被改變的量稱為變量.
2.變量的兩個要素
(1)變量名.每個變量都必須有一個名字──變量名,變量命名遵循標識符命名規則.
(2)變量值.在程序運行過程中,變量值存儲在內存中.在程序中,通過變量名來引用變量的值.
3.標識符命名規則
(1)有效字符:只能由字母、數字和下劃線組成,且以字母或下劃線開頭.
(2)有效長度:隨系統而異,但至少前8個字符有效.如果超長,則超長部分被舍棄.
例如,由于student_name和student_number的前8個字符相同,有的系統認為這兩個變量,是一回事而不加區別.
在TC V2.0中,變量名(標識符)的有效長度為1~32個字符,缺省值為32.
(3)C語言的關鍵字不能用作變量名.
注意:C語言對英文字母的大小敏感,即同一字母的大小寫,被認為是兩個不同的字符.
習慣上,變量名和函數名中的英文字母用小寫,以增加可讀性.
思考題:在C語言中,變量名total與變量名TOTAL、ToTaL、tOtAl等是同一個變量嗎?
標識符命名的良好習慣──見名知意:
所謂“見名知意”是指,通過變量名就知道變量值的含義.通常應選擇能表示數據含義的英文單詞(或縮寫)作變量名,或漢語拼音字頭作變量名.
例如,name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資).
4.變量的定義與初始化
在C語言中,要求對所有用到的變量,必須先定義、后使用;且稱在定義變量的同時進行賦初值的操作為變量初始化.
(1)變量定義的一般格式
[存儲類型] 數據類型 變量名[, 變量名2……];
例如,float radius, length, area;
(2)變量初始化的一般格式
[存儲類型] 數據類型 變量名[=初值][, 變量名2[=初值2]……];
例如,float radius=2.5, length, area;
2.4 整型數據
2.4.1 整型變量
1.分類
根據占用內存字節數的不同,整型變量又分為4類:
(1)基本整型(類型關鍵字為int).
(2)短整型(類型關鍵字為short [int]).
(3)長整型(類型關鍵字為long [int]).
(4)無符號整型.無符號型又分為無符號基本整型(unsigned [int])、無符號短整型(unsigned short)和無符號長整型(unsigned long)三種,只能用來存儲無符號整數.
2.占用內存字節數與值域
上述各類型整型變量占用的內存字節數,隨系統而異.在16位操作系統中,一般用2字節表示一個int型變量,且long型(4字節)≥int型(2字節)≥short型(2字節).
顯然,不同類型的整型變量,其值域不同.占用內存字節數為n的(有符號)整型變量,其值域為:-2n*8-1~(2n*8-1-1);無符號整型變量的值域為:0~(2n*8-1).
例如,PC機中的一個int型變量,其值域為-22*8-1~(22*8-1-1),即-32768~32767;一個unsigned型變量的值域為:0~(22*8-1),即0~65535.
2.4.2 整型常量
1.三種表示形式
整型常量即整常數,在C語言中可用三種形式表示:
(1)十進制.例如10、36.
(2)八進制(以數字0開頭).例如012.
(3)十六進制(以數字0+小寫字母x開頭).例如0x36.
2.分類
(1)基本整型.在16位機中,用2字節存儲,其數據范圍與int型變量一樣.
(2)長整型(在數值后面加“L(l)”).對超出基本整型值域的整型常量,可使用長整型常量表示,其取值范圍可達-231-(231-1).例如,123l、315L等.
3.類型匹配規則
類型匹配規則為:一個整型常量,可以賦給能容納下其值的整型變量.
例如,其值在-215--(215-1)的整型常量,可以賦給int型變量和long int型變量;其值在-231--(231-1)的整型常量,就只能賦給long int型變量.
注意:常量無unsigned型.但一個非負整型常量,只要它的值不超過相應變量的值域(即取值范圍),也可以賦給unsigned型變量.
2.5 實型數據
2.5.1 實型變量
C語言的實型變量,分為兩種:
(1)單精度型.類型關鍵字為float,一般占4字節(32位)、提供7位有效數字.
(2)雙精度型.類型關鍵字為double,一般占8個字節、提供15~16位有效數字.
2.5.2 實型常量
1.表示形式
實型常量即實數,在C語言中又稱浮點數,其值有兩種表達形式:
(1)十進制形式.例如3.14、9.8.
(2)指數形式:<尾數>E(e)<整型指數>.例如3.0E+5等.
2.關于類型
實型常量不分float型和double型.一個實型常量,可以賦給一個實型變量(float型或double型).
2.6 字符型數據
2.6.1 字符常量
1.字符常量的定義
用一對單引號括起來的單個字符,稱為字符常量.
例如,‘A’、‘1’、‘+’等.
2.轉義字符
C語言還允許使用一種特殊形式的字符常量,就是以反斜杠“\ ”開頭的轉義字符.
注意:如果反斜杠或單引號本身作為字符常量,必須使用轉義字符:‘\\’、‘\’‘.
[案例2.1] 用轉義字符輸出可打印字符和不可打印字符.
/*案例代碼文件名:AL2_1.C*/
/*程序功能:用轉義字符輸出可打印字符和不可打印字符*/
main()
{ printf(“\x4F\x4B\x21\n”); /* 等價于printf(“OK!\n”); */
printf(“\x15 \xAB\n”);
}
程序運行結果如下:
OK!
§ ? [程序演示]
2.6.2 字符變量
字符變量的類型關鍵字為char,一般占用1字節內存單元.
1.變量值的存儲
字符變量用來存儲字符常量.將一個字符常量存儲到一個字符變量中,實際上是將該字符的ASCII碼值(無符號整數)存儲到內存單元中.
例如,
char ch1, ch2; /*定義兩個字符變量:ch1,ch2*/
ch1=’a’; ch2=’b’; /*給字符變量賦值*/
2.特性
字符數據在內存中存儲的是字符的ASCII碼── 一個無符號整數,其形式與整數的存儲形式一樣(如圖2-4所示),所以C語言允許字符型數據與整型數據之間通用.
(1)一個字符型數據,既可以字符形式輸出,也可以整數形式輸出.
[案例2.2] 字符變量的字符形式輸出和整數形式輸出.
/*案例代碼文件名:AL2_2.C*/
/*程序功能:用字符形式和整數形式輸出字符變量*/
main()
{ char ch1,ch2;
ch1='a'; ch2='b';
printf(“ch1=%c,ch2=%c\n”,ch1,ch2);
printf(“ch1=%d,ch2=%d\n”,ch1,ch2);
}
程序運行結果:
ch1=a,ch2=b
ch1=97,ch2=98
(2)允許對字符數據進行算術運算,此時就是對它們的ASCII碼值進行算術運算.
[案例2.3] 字符數據的算術運算.
/*案例代碼文件名:AL2_3.C*/
/*程序功能:字符數據的算術運算*/
main()
{ char ch1,ch2;
ch1=‘a’; ch2=‘B’;
/*字母的大小寫轉換*/
printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32);
/*用字符形式輸出一個大于256的數值*/
printf("ch1+200=%d\n", ch1+200);
printf("ch1+200=%c\n", ch1+200);
printf("ch1+256=%d\n", ch1+256);
printf("ch1+256=%c\n", ch1+256);
}
程序運行結果:
ch1=A,ch2=b
ch1+200=297
ch1+200=)
ch1+256=353
ch1+256=a [程序演示]
思考題:用字符形式輸出一個大于256的數值,會得到什么結果?
2.6.3 字符串常量
1.字符串常量的概念和字符串長度
字符串常量是用一對雙引號括起來的若干字符序列.
字符串中字符的個數稱為字符串長度.長度為0的字符串(即一個字符都沒有的字符串)稱為空串,表示為“ ” (一對緊連的雙引號).
例如,“How do you do.”、“Good morning.”等,都是字符串常量,其長度分別為14和13(空格也是一個字符).
如果反斜杠和雙引號作為字符串中的有效字符,則必須使用轉義字符.
例如:(1)C:\msdos\v6.22 → "C:\\msdos\\v6.22"
(2)I say:"Goodbye!" → "I say:\"Goodbye!\"“
2.字符串的存儲
C語言規定:在存儲字符串常量時,由系統在字符串的末尾自動加一個‘\0’作為字符串的結束標志.
注意:在源程序中書寫字符串常量時,不必加結束字符‘\0’,否則畫蛇添足.
如果有一個字符串為“CHINA”,則它在內存中的實際存儲如下所示:
最后一個字符'\0'是系統自動加上的,它占用6字節而非5字節內存空間.
綜上所述,字符常量'A'與字符串常量"A"是兩回事:
(1)定界符不同:字符常量使用單引號,而字符串常量使用雙引號;
(2)長度不同:字符常量的長度固定為1,而字符串常量的長度,可以是0,也可以是某個整數;
(3)存儲要求不同:字符常量存儲的是字符的ASCII碼值,而字符串常量,除了要存儲有效的字符外,還要存儲一個結束標志’\0’.
上頁 下頁
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -