官术网_书友最值得收藏!

2.5 字符型數據

前面講解的整型和實型與數學計算密切相關。C語言還提供了字符型數據來處理文本信息,例如,對一篇英文文章中的單詞按字母的某一順序進行排序;將某一文件中所有字符的ASCII碼值加上10等。字符型數據就是用來表示英文字母、符號和漢字的數據。

2.5.1 字符變量

字符變量的類型說明符是char,其定義的一般形式如下:

char 變量名1[,變量名2,…];

例如

charc1,c2;c1=′a′;c2=′b′;

這樣就定義了兩個字符型的變量c1和c2,并分別賦值為字符型常量′a′和′b′ 。

說明

字符值是以ASCII碼值的形式存放在變量的內存單元之中的。例如,a的十進制ASCII碼值是97,b的十進制ASCII碼值是98。對字符變量c1賦予a值,即“c1=′a′;”,實際上是在相應的存儲單元中存放97的二進制代碼:

c100100001

在VC6.0中,字符型數據占1字節,因此字符型變量的值實質上是一個8位的整數值,取值范圍一般是 -128~127。char型變量也可以加修飾符unsigned,unsigned char型變量的取值范圍是0~255。

2.5.2 字符常量

學習提示

【理解】轉義字符的形式及功能

什么是字符常量呢?從表現形式上來說,就是用一對單引號括起來的單個字符。

例如

′a′,′b′,′#′,′+′都是合法的字符常量 。

說明

在使用字符常量的時候應該注意,字符常量只能用單引號括起來,不能用雙引號或其他符號。

字符可以是字符集中任意字符,也就是說數字加上單引號就成為字符了。例如,′ 1′和1是不同的,′1′是字符常量,1是數值常量。

對于字符型數據,除了可以直接用單引號來表示以外,如′a′、′ 0′、′A′,也可以用該字符的ASCII碼值表示,例如,十進制數65表示大寫字母A。

除了以上形式的字符常量外,C語言還允許使用一種以特殊形式出現的字符常量,以表示某些非圖形字符,這就是以“\”開頭的轉義字符序列。在前面章節中,曾使用“\n”來表示換行。“\n”實際上是一個字符,它的ASCII碼值為10。常見的以“\”開頭的轉義字符如表2-3所示。

表2-3 轉義字符表

【例2-3】轉義字符的使用。

程序代碼

#include<stdio.h>

void main(?。?/p>

{ int a,b,c;/*定義了3個變量*/

 a=0;

 b=1;

 c=2;/*分別對單個整型變量賦初值*/

 printf("%d\n\t%d-%d\n>>%d-%d\

t\b%d\n",a,b,c,a,b,c);

/*輸出3個整型變量的值*/

根據“printf("%d\n\t%d-%d\n>>%d-%d\t\b%d\n",a,b,c,a,b,c);”語句,并結合表2-3,一起來分析程序的輸出結果。

●程序在第1列輸出a值0之后遇到轉義字符“\n”,回車換行。

●遇到轉義字符“\t”,于是跳到下一制表位置,再輸出b值1。

●輸出一個字符“-”,緊接著再輸出c值2。

●又遇到轉義字符“\n”,因此再回車換行。

●輸出兩個“>”字符之后又輸出 a值0。

●再輸出字符“-”,又輸出b值1。

●再次遇到轉義字符“\t”,跳到下一制表位置,但下一轉義字符“\b”又使退回一格,最后輸出c值2。

程序的輸出結果如下:

   0

        1-2

   >>0-2

請注意

字符變量的取值是字符常量,也就是說字符變量用于存放一個字符常量(切記,不要以為在一個字符型變量中可以存放一個字符串,即包括若干個字符)。

2.5.3 字符型數據的運算

學習提示

【理解】字符型數據的運算原理

C語言把字符型數據當作一個較小的整型數據,可以像使用整型量一樣使用它,下面來看一個例子。

【例2-4】對字符變量的運算。

程序代碼

#include<stdio.h>

void main(?。?/p>

{ char c1=′a′;/*定義一個字符變量c1,

并且初始化為字符常量a*/

 char c2;/*定義一個字符變量c2*/

 c2=c1-(′a′-′A′);

 printf("% c\n",c2);

/*輸出字符變量c2*/

分析程序可知,程序中的“′a′-′A′”是大小寫字母之間的差值,參加運算的是兩個字符所對應的ASCII碼值“97”和“65”,故運算結果為32。也可以把語句寫成“c2=c1-32;”,其效果是一樣的。最終程序的運行結果是輸出字符“A”。

C語言允許對整型變量賦予字符值,也允許對字符變量賦予整型值。在輸出時,可以將字符變量按整型量輸出,也可以將整型量按字符量輸出。

例如

printf("%d",′A′);

程序運行結果為65,即輸出的是字符“A”的ASCII碼值。

2.5.4 字符串常量

C語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是用一對雙引號("")括起來的零個或多個字符的序列。

例如

"CHINA"和 "0123456789"都是字符串常量。

在存儲字符串常量時,由系統在字符串的末尾自動加一個“\0”作為字符串的結束標志。

如果有一個字符串為“CHINA”,則它在內存中的實際存儲如圖2-2所示。

圖2-2 字符串常量在內存中的存儲

最后一個字符“\0”是系統自動加上的,即字符串“CHINA”占用了6個字節的內存空間。

有很多人不能理解′a′和"a"的區別,那是因為他們不能正確理解字符常量和字符串常量的區別。下面就從表示方法、內存中的存儲方式等方面來對二者進行比較。

字符常量使用單引號,而字符串常量使用雙引號。例如,′a′表示的是字符常量,而"a"則表示的是只有一個字符長度的字符串常量。

二者在內存中的存儲也不同,字符常量存儲的是字符的ASCII碼值,而字符串常量除了要存儲有效的字符外,還要存儲一個“字符串結束標志(\0)”,以便系統判斷字符串是否結束。例如,字符常量′a′在內存中占一個字節,其存儲形式如圖2-3所示。

而字符串常量占用的字節數是字符串的總長度加1。額外增加的一個字節用于存放字符“\0”。其在內存中的存儲形式如圖2-4所示。

圖2-4 字符串常量在內存中的存儲

在實際應用時,可以把一個字符常量賦予一個字符型變量,但不能把一個字符串常量賦予一個字符變量。在 C語言中沒有相應的字符串變量。但是可以用一個字符數組來存放一個字符串常量。字符數組將在數組一章介紹。

真題演練

【例1】已知大寫字母“A”的ASCII碼值是65,小寫字母“a”的ASCII碼值是97。以下不能將變量c中的大寫字母轉換為對應小寫字母的語句是( )。

A)c=(′A′+c)% 26- ′a′

B)c=c+32

C)c=c- ′A′+′a′

D)c=(c- ′A′)% 26+′a′

【解析】根據題意可知,小寫字母比與之對應的大寫字母的ASCII碼值大32。選項A中,字符A加上c表示的大寫字符再對字母個數26取余,本身這個表達式沒有任何含義,所以選擇選項A。

【答案】A

【例2】下面選項中合法的字符常量是(?。?。

A)"X"

B)′X′

C)′abc′

D)′\′

【解析】字符常量是用單引號括起來的一個字符。選項A中,使用雙引號,故錯誤;選項 C中,字符常量只能是單個字符,不能是一串字符,故錯誤;選項D中,以反斜線“\”開頭的是轉義字符。因此選項B正確。

【答案】B

【例3】若有定義語句:charc=′\101′;,則變量c在內存中占(?。?。

A)1個字節

B)2個字節

C)3個字節

D)4個字節

【解析】本題考查字符變量的存儲空間,每個字符變量被分配一個字節的內存空間。因此選項 A正確。

【答案】A

【例4】若有以下程序:

#include<stdio.h>

main(?。?/p>

{ charc1,c2;

 c1=′C ′+′ 8′- ′3′;c2=′ 9′- ′ 0′;

printf("%c%d\n",c1,c2);

?。?/p>

則程序的輸出結果是(?。?。

A)H ′ 9′

B)H9

C)F ′ 9′

D)表達式不合法,輸出無定值

【解析】本題考查字符變量以及printf( )函數相關知識。字符變量c1被賦值為“′C ′+′ 8′- ′3′”,即ASCII碼值的運算,67+54-49=72,即“′H′”;字符變量c2被賦值為“′9′- ′0′”,但輸出時需要注意的是,c1以字符變量輸出,而c2是以十進制整型變量輸出。因此選項B正確。

【答案】B

主站蜘蛛池模板: 化州市| 射阳县| 衢州市| 赣州市| 雅安市| 呼伦贝尔市| 绥滨县| 雅江县| 色达县| 鲜城| 和静县| 新沂市| 广州市| 普安县| 临洮县| 临洮县| 五家渠市| 景东| 嘉义县| 竹北市| 得荣县| 民权县| 青冈县| 巴彦淖尔市| 东城区| 新和县| 玉门市| 洛隆县| 云浮市| 榆社县| 临漳县| 青海省| 蒙城县| 庆城县| 龙岩市| 南投市| 龙口市| 古交市| 汶川县| 侯马市| 鹤庆县|