整型數據即整數,C語言中整型(int)數據類型可以使用下面4種修飾符的搭配來描述數據的長度和取值范圍:
①signed(有符號);
②unsigned(無符號);
③long(長型);
④short(短型);
int數據在VC++6.0環(huán)境中編譯占4個字節(jié),在TC2.0環(huán)境中編譯占2個字節(jié)。
表2-3所示ANSI C++標準中規(guī)定的整型數據的長度和取值范圍。
表2-3 整型數據的取值范圍和長度
在C語言中,對數據類型的說明允許使用一些簡寫方式,如表2-4所示。
表2-4 整型數據的取值范圍和長度
在C語言中整數可以采用十進制、八進制和十六進制來表示。十進制數沒有前綴,八進制數以數字0開頭,十六進制數前面用數字0和字母X開頭(0x或0X)。表2-5所示為整型常量的幾種表示方法。
表2-5 整型常量的幾種表示
表2-5中后綴“L”或“l”表示長整型數,后綴為“U”或“u”表示無符號整數。
整型變量的定義:
int a,b,c; // a,b,c為整型變量
long x,y; // x,y為長整型變量
unsigned p,q; //p,q為無符號整型變量
【例2-3】整型變量的不同進制表示法。
#include <stdio.h>
int main()
{
inta=0X80,b=0200,c=128,d=0X24ALu;
printf(“a的十進制值為:%d\n”,a);
printf("b的十進制值為:%d\n",b);
printf("c的八進制值為:%o\n",c);
printf("c的十六進制值為:%x\n",c);
printf(“d的十進制值為:%d\n”,d);
return 0;
}
程序運行結果:
b的十進制值為:128
c的八進制值為:200
c的十六進制值為:80
d的十進制值為:586
2.1.4實型數據
實型數據也稱為浮點數或實數。在C語言中,實數只采用十進制,可采用浮點計數法和科學計數法兩種表示方法,例如:
5.789
2.1E5 (等于2.1*105)
0.5E7 (等于0.5*107)
-2.8E-9 (等于-2.8*10-9)
一般情況下,對太大或太小的數,采用科學計數法,如上面的0.5E7、-2.8E-9。
【例2-6】輸出實數。
#include <stdio.h>
int main()
{
printf("356.24的浮點數表示:%6f\n",356.24);
printf("3.5624e2的浮點數表示:%6f\n",3.5624e2);
printf(“35624e-2的浮點數表示:%6f\n",35624e-2);
printf(“356.24的科學計數法表示:%E\n",356.24);
return 0;
}
程序運行結果:
356.24的浮點數表示:356.240000
3.5624e2的浮點數表示:356.240000
35624e-2的浮點數表示:356.240000
356.24的科學計數法表示:3.562400E+002
浮點數在計算機中的表示可根據系統(tǒng)分配的字節(jié)數不同而分成單精度浮點數和雙精度浮點數,計算機通常分配4個字節(jié)給單精度浮點數,分配8個字節(jié)給雙精度浮點數。單精度浮點數和雙精度浮點數的取值范圍如表2-6所示。
表2-6 浮點型數據類型的取值范圍
【例2-7】浮點數例子
#include <stdio.h>
int main()
{
float a;
double b;
a=33333.33333;
b=33333.33333333333333;
printf("a=%f\nb=%f\n",a,b);
return 0;
}
程序運行結果:
a=33333.332031
b=33333.333333
從本例可以看出:
由于a是單精度浮點型,有效位數只有七位。而整數已占五位,故小數二位之后均為無效數字。
b是雙精度型,有效位為十六位。但VC6.0規(guī)定小數后最多保留六位,其余部分四舍五入。注意:實型常數不分單、雙精度,都按雙精度實型處理。
2.1.5 字符型數據
1.字符型數據的表示
字符型數據是用單引號括起來的單個字符,如'a'、'b'、'='、'+'、'?'都是合法字符型數據。在這里單引號只起定界的作用,并不代表字符。單引號中的字符不可以只是單引號(’)和反斜杠(\),因為反斜杠(\)本身就是一個轉義字符。
2.轉義字符
轉義字符是C語言中表示字符的一種特殊形式。通常使用轉義字符表示ASII字符集中不可打印的控制字符和特定功能的字符,如單引號字符(’)、雙引號字符(”)和反斜杠的表示(\)。
轉義符用反斜線\后面跟一個字符或一個八進制或十六進制數表示。表2-7所示為C語言中常用的轉義字符。
表2-7 常用轉義字符含義
廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表中的‘\ddd’和 ‘\xhh’分別為八進制和十六進制的ASCII代碼。如‘\101’表示字母‘A’ ,‘\102’表示字母‘B’,‘\134’表示反斜線,‘\XOA’表示換行等。
【例2-8】轉義字符的使用。
#include<stdio.h>
int main()
{
printf("fabc\tde\rf\n");
printf("hijk\tL\bM\n");
return 0;
}
程序運行結果:
fab c de
hijk M
3.字符變量
字符變量的類型說明符是char。字符變量類型定義的格式和書寫規(guī)則都與整型變量相同。例如:
char a,b;
4.字符變量在內存中的存儲形式及使用方法
在C語言中,字符是按其所對應的ASCII的值來存儲的,一個字符占一個字節(jié)。表2-8為部分字符所對應的ASCII值。
表2-8 部分字符的ASCII值
數據在計算機中是按位存放的,每個位中只能存放“0”或“1”, 8位組成一個字節(jié)。因此,字符在內存中存儲的時候,是將其ASCII值以8位二進制數形式存放的。
例如,字符‘A’在內存中的存放形式為:
【例2-9】向字符變量賦以整數。
#include<stdio.h>
int main()
{
char a,b;
a=120;
b=121;
printf("%c,%c\n",a,b);
printf("%d,%d\n",a,b);
return 0;
}
程序運行結果:
x,y
120,121
本程序中定義a,b為字符型,但在賦值語句中賦以整型值。從結果看,a,b值的輸出形式取決于printf函數格式串中的格式符,當格式符為"c"時,對應輸出的變量值為字符,當格式符為"d"時,對應輸出的變量值為該字符對應的ASCII值。
【例2-10】ASCII 碼的使用
#include<stdio.h>
int main()
{
char a,b;
a='a';
b='b';
a=a-32;
b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);
return 0;
}
程序運行結果:
A,B
65,66
本例中,a,b被說明為字符變量并賦予字符值,C語言允許字符變量參與數值運算,即用字符的ASCII 碼參與運算,由于大小寫字母的ASCII碼相差32,因此運算后把小寫字母換成大寫字母,然后分別以整型和字符型輸出。
5.字符串
字符串是由一對雙引號括起的字符序列。例如:“CHINA”,“C program”,“$12.5”等都是合法的字符串。字符串和字符不同,它們之間主要有以下區(qū)別:
(1)字符由單引號括起來,字符串由雙引號括起來。
(2)字符只能是單個字符,字符串則可以含一個或多個字符。
(3) 可以把一個字符型數據賦予一個字符變量,但不能把一個字符串賦予一個字符變量。
在C語言中沒有相應的字符串變量,也就是說不存在這樣的關鍵字,將一個變量聲明為字符串,但是可以用一個字符數組來存放一個字符串,這將在數組一章內予以介紹。
(4) 字符占一個字節(jié)的內存空間。字符串占的內存字節(jié)數等于字符串中字符個數加1。增加的一個字節(jié)中存放字符‘\0’(ASCII碼為0),這是字符串結束的標志。例如,字符串“C program”在內存中所占的字節(jié)為:
字符‘a’和字符串“a”雖然都只有一個字符,但在內存中的情況是不同的。
‘a’在內存中占一個字節(jié),可表示為:
“a”在內存中占二個字節(jié),可表示為: