3.4.2 实型变量
1. 实型数据在内存中的存放形式
实型数据一般占 4 个字节(32 位)内存空间。按指数形式存储。实数3.14159 在内存中
的存放形式如下:
+ .314159 1
数符 小数部分 指数
小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。
指数部分占的位数愈多,则能表示的数值范围愈大。
2. 实型变量的分类
实型变量分为:单精度(float 型)、双精度(double 型)和长双精度(long double 型)
三类。在 Turbo C 中单精度型占4 个字节(32 位)内存空间,其数值范围为3.4E-38~3.4E+38,
只能提供七位有效数字。双精度型占8 个字节(64 位)内存空间,其数值范围为1.7E-308~
1.7E+308,可提供16 位有效数字。
类型说明符 比特数(字节数) 有效数字数的范围
float 32(4) 6~7 10-37~1038
double 64(8) 15~16 10-307~10308
long double 128(16) 18~19 10-4931~104932
实型变量定义的格式和书写规则与整型相同。
例如:
float x,y; (x,y 为单精度实型量)
double a,b,c; (a,b,c 为双精度实型量)
3. 实型数据的舍入误差
由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。如下例。
【例 3.6】实型数据的舍入误差。
main()
{float a,b;
第44 页
a=123456.789e5;
b=a+20
printf("%f\n",a);
printf("%f\n",b);
}
注意:1.0/3*3 的结果并不等于1。
【例 3.7】
main()
{
float a;
double b;
a=33333.33333;
b=33333.33333333333333;
printf("%f\n%f\n",a,b);
}
从本例可以看出,由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,
故小数二位后之后均为无效数字。
b 是双精度型,有效位为十六位。但Turbo C 规定小数后最多保留六位,其余部
分四舍五入。
3.4.3 实型常数的类型
实型常数不分单、双精度,都按双精度 double 型处理。
3.5 字符型数据
字符型数据包括字符常量和字符变量。
3.5.1 字符常量
字符常量是用单引号括起来的一个字符。
例如:
'a'、'b'、'='、'+'、'?'
都是合法字符常量。
在C语言中,字符常量有以下特点:
1) 字符常量只能用单引号括起来,不能用双引号或其它括号。
2) 字符常量只能是单个字符,不能是字符串。
3) 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。
第45
如'5'和5 是不同的。'5'是字符常量,不能参与运算。
3.5.2 转义字符
转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例
题printf 函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符
主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义
转义字符 转义字符的意义 ASCII 代码
\n 回车换行 10
\t 横向跳到下一制表位置 9
\b 退格 8
\r 回车 13
\f 走纸换页 12
\\ 反斜线符"\" 92
\' 单引号符 39
\” 双引号符 34
\a 鸣铃 7
\ddd 1~3 位八进制数所代表的字符
\xhh 1~2 位十六进制数所代表的字符广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd 和\xhh
正是为此而提出的。ddd 和hh 分别为八进制和十六进制的ASCII 代码。如\101 表示字母"A" ,
\102 表示字母"B",\134 表示反斜线,\XOA 表示换行等。
【例 3.8】转义字符的使用。
main()
{
int a,b,c;
a=5; b=6; c=7;
printf(“ ab c\tde\rf\n”);
printf(“hijk\tL\bM\n”);
}
3.5.3 字符变量
字符变量用来存储字符常量,即单个字符。
字符变量的类型说明符是char。字符变量类型定义的格式和书写规则都与整型变量相
同。例如:
char a,b;
第46 页