2.4 实型数据
当进行数据运算需要用到小数或指数时,用C语言来实现的话,就需要用到实型数据。
2.4.1 实型变量
1 实型变量的分类
学习提示
【熟记】实型变量的分类及其取值范围
C语言中的实型变量分为单精度(float)、双精度(double)和长双精度(long double)3种类型。在VC6.0中实型变量所占字节数、有效位数及其取值范围如表2-2所示。
表2-2 实型数据
2 实型变量的定义
实型变量定义的一般形式为:
类型说明符 变量名1[,变量名2,…];
例如
floatx,y; /*x,y为单精度实型变量*/
doublea,b,c;/*a,b,c为双精度实型变量*/
3 实型变量的舍入处理
由于实型变量也是用有限的存储单元存储的,所以能够接受的有效数字的位数也是有限的。有效位数以外的位数将被舍去。请看下面的例子。
【例2-2】实型变量的舍入处理。
程序代码
#include<stdio.h>
void main( )
{ float fa;
/*定义了单精度浮点型变量fa*/
double db;
/*定义了双精度浮点型变量db*/
fa=11111.111111;
/*分别对两个浮点型变量赋初值*/
db=11111.111111111111111111;
printf("fa=%f\ndb=%f",fa,db);
/*输出两个浮点型变量*/
}
此程序的输出结果为:
fa=11111.111328
db=11111.111111
对本实例的结果分析如下。
(1)fa是单精度浮点型的变量,有效位数(有效位数是指整数部分和小数部分的总位数)只有7位。而整数部分已占5位,故小数点后2位之后的数均为无效数字。
(2)db是双精度浮点型的变量,有效位数为16位。但VC6.0规定小数后最多保留6位,其余部分舍去。
2.4.2 实型常量
1 实型常量的表示
学习提示
【熟记】实型常量的表示方法
实型常量即不包括整数的实数,在C语言中又称浮点数。浮点数均为有符号浮点数,没有无符号浮点数。其值有两种表达形式,分别为十进制小数形式和指数形式。
(1)十进制小数形式由数字和小数组成,必须有小数点,且小数点的位置不受限制。
例如
3.1425、0.123、300.和.123都是合法的小数。
(2)指数形式
由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:
尾数E(e) 整型指数
说明
“尾数”是一个小数形式的实型常量;E或e是指数形式的标识,又称阶码标识;“整型指数”说明了指数的大小,又称阶码,而且必须是整数。
例如
6.0E6或者 6.0e6是合法的实型数据,表示6.0×106。
123(无小数点)、E79(阶码标志E之前无数字)、-5(无阶码标识)和2.7E(无阶码)是不合法的实型数据。
一个实数可以有多种指数表示形式,如11.34可以表示为 11.34e0、1.134e1、0.1134e2和0.1134e02等。我们把其中的1.134e1称为“规范化的指数形式”,即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。
C语言允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数,如123f和123.是等价的。
2 实型常量的类型
实型常量又分float(单精度)型和double (双精度)型。一个实型常量可以赋给一个实型变量(float型或double型)。
例如
float a; /*这里定义a为单精度实型变量*/
a=5555.5555;
由于float型变量只能接受7位有效数字,因此最后一位小数不起作用。
请思考
怎样变化才能使上面的8位数字都能够存储在变量a中?
真题演练
【例1】以下选项中可用作 C程序合法实数的是( )。
A)3.0e0.2 B)1e0
C)E9 D)9.12E
【解析】选项A中,“E”后面的指数必须为整数,故错误。C语言规定,“E”之前必须要有数字,故选项C错误。“E”后面必须要有数字,且必须为整数,故选项D错误。因此选择选项B。
【答案】B
【例2】以下选项中合法的实型常量是( )。
A)0 B)3.13e-2.1
C).914 D)2.0*10
【解析】选项A为整型数据。选项B中“e”后面必须为整数。选项D是表达式,不是常量,所以选择选项C。
【答案】C
【例3】在C语言中,以下选项中不能正确表示10×1000之值的是( )。
A)1.0E4.0 B)1.E4
C)10E3 D)1.0e4
【解析】实型常量用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。指数形式由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。指数形式中阶码必须是整型常量,而选项A中4.0是浮点数,所以选项A不能正确表示10×1000之值,选项B、C、D都表示正确并且值为10000,因此选择选项A。
【答案】A
【例4】C语言中 double类型数据占字节数为( )。
A)4 B)8
C)12 D)16
【解析】double型数据在内存中占 8个字节,float型数据占4个字节,int型数据占2个字节,char型数据占1个字节。因此选择选项B。
【答案】B