购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 实型数据

在C语言中,实数又称浮点数。

2.5.1 实型变量

1. 实型变量的分类

按照数值的取值范围不同分为以下3种。

单精度实型:类型声明符为float,在内存中占4字节。

双精度实型:类型声明符为double,在内存中占8字节。

长双精度实型:类型声明符为long double,不同编译系统处理方法不同,Turbo C 2.0和Dev-C++中给long double型分配16字节,Visual C++ 6.0中给其分配8字节。

各种实型变量的数据长度、精度和取值范围与所选择的系统有关,不同系统有所差异。表2.2中列出各种实型变量的数据长度、精度和取值范围。

表2.2 实型变量的数据长度、精度和取值范围

2. 实型变量的定义

实型变量声明的格式和书写规则与整型的相同。

例如:

float x, y;                        /* x、y 为单精度变量*/
double a, b, c;                    /* a、b、c 为双精度变量*/

也可在声明变量为实型的同时,给变量赋初值。

例如:

float x=3.2, y=5.3;                 /* x、y 为单精度变量,且有初值 */
double a=0.2, b=1.3, c=5.1;         /* a、b、c 为双精度变量,且有初值*/
3. 实型数据的存储方式

实型数据的存储方式与整型的存储方式不同,实型数据是按照指数形式存储的,系统把实型数据分成小数和指数两个部分分别存放。例如,实数3.14159在内存中的存放形式如图2.6所示。

图2.6 3.14159的存放形式

其中小数部分和指数部分各占多少位,由C编译系统自定。在Turbo C系统中,float类型的变量占4字节32位,24位表示小数部分(最高位是小数部分的符号),8位表示指数部分(最高位是指数部分的符号)。小数部分占的位数越多,数的有效数字越多,精度越高;指数部分占的位数越多,表示的数值范围越大。

2.5.2 实型常量

在C语言中,实数只采用十进制表示。

1. 实型常量的表示形式

实型常量的表示形式有两种:十进制数形式和指数形式。

(1)十进制数形式

该类实型常量由数码0~9和小数点组成。例如,0.0、.25、5.789、0.13、5.0、300.、-267.8230等均为合法的实数。

(2)指数形式

该类实型常量一般格式是“实数+e(或E)+整数”,记为 a e n ,其值为 a ×10 n 。注意字母e之前必须有数字,并且e后面必须是整数,如e2、2.1e3.5、.e3、e等都是不合法的指数形式。123.456的指数形式有123.456e0、1.23456e2、0.123456e3等多种写法,但1.23456e2是规范化的指数形式,即在字母e之前的小数部分中小数点左边有且仅有一位非零的数字。

2. 实型常量的类型

许多C编译系统将实型常量作为双精度来处理,例如:

float a;
a=1.23456*6543.21;

系统将1.23456*6543.21按双精度存储和运算,得到一个双精度的结果,然后取前7位赋值给变量a。这样做可以保证计算结果更精确,但降低了运算的速度。为了提高速度,可以改为:a=1.23456f*6543.21f;,这样系统就会将1.23456*6543.21按单精度存储和运算。

一个实型常量可以赋予一个float型、double型或long double型变量,系统根据变量的类型自动截取相应的有效数字。

下面的例子说明了float和double的不同。

例2.6 演示float和double的区别。

程序代码如下:

#include <stdio.h>
int main(){
    float a;
    double b;
    a=33333.333333;
    b=33333.333333333;
    printf("a=%f\nb=%f\n", a, b);
    return 0;
}

说明:

程序运行结果:

a=33333.332031

b=33333.333333

本例中,由于a是单精度浮点型,有效位数只有7位,而整数已占5位,故小数二位之后均为无效数字。b是双精度型,有效位为16位,但Dev-C++规定小数点后最多保留6位,所以其余小数部分四舍五入。 9uFI4TrpKWsN7qgORh5OUTz/PotM9cTj0gXnHBYEA6MQoGw25ZnN1hlSJ9/lpSe7

点击中间区域
呼出菜单
上一章
目录
下一章
×