整型数据即整数,C语言中整型(int)数据类型可以使用下面4种修饰符的搭配来描述数据的长度和取值范围:
①signed(有符号);
②unsigned(无符号);
③long(长型);
④short(短型);
int数据在VC++6.0环境中编译占4个字节,在TC2.0环境中编译占2个字节。
表2-3所示ANSI C++标准中规定的整型数据的长度和取值范围。
表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
浮点数在计算机中的表示可根据系统分配的字节数不同而分成单精度浮点数和双精度浮点数,计算机通常分配4个字节给单精度浮点数,分配8个字节给双精度浮点数。单精度浮点数和双精度浮点数的取值范围如表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规定小数后最多保留六位,其余部分四舍五入。注意:实型常数不分单、双精度,都按双精度实型处理。
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。字符变量类型定义的格式和书写规则都与整型变量相同。例如:
char a,b;
4.字符变量在内存中的存储形式及使用方法
在C语言中,字符是按其所对应的ASCII的值来存储的,一个字符占一个字节。表2-8为部分字符所对应的ASCII值。
表2-8 部分字符的ASCII值
数据在计算机中是按位存放的,每个位中只能存放“0”或“1”, 8位组成一个字节。因此,字符在内存中存储的时候,是将其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”等都是合法的字符串。字符串和字符不同,它们之间主要有以下区别:
(1)字符由单引号括起来,字符串由双引号括起来。
(2)字符只能是单个字符,字符串则可以含一个或多个字符。
(3) 可以把一个字符型数据赋予一个字符变量,但不能把一个字符串赋予一个字符变量。
在C语言中没有相应的字符串变量,也就是说不存在这样的关键字,将一个变量声明为字符串,但是可以用一个字符数组来存放一个字符串,这将在数组一章内予以介绍。
(4) 字符占一个字节的内存空间。字符串占的内存字节数等于字符串中字符个数加1。增加的一个字节中存放字符‘\0’(ASCII码为0),这是字符串结束的标志。例如,字符串“C program”在内存中所占的字节为:
字符‘a’和字符串“a”虽然都只有一个字符,但在内存中的情况是不同的。
‘a’在内存中占一个字节,可表示为:
“a”在内存中占二个字节,可表示为: