# 4.C语言实型数据
实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。
1) 十进制数形式
由数码0~ 9和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。
注意,必须有小数点。
2) 指数形式
由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:
a E n(a为十进制数,n为十进制整数)
其值为 a*10n。如:
2.1E5 (等于2.1*105)
3.7E-2 (等于3.7*10-2)
0.5E7 (等于0.5*107)
-2.8E-2 (等于-2.8*10-2)
以下不是合法的实数:
345 (无小数点)
E7 (阶码标志E之前无数字)
-5 (无阶码标志)
53.-E3 (负号位置不对)
2.7E (无阶码)
标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356.是等价的。
【例3-5】说明了这种情况。
~~~
main(){
printf("%f\n ",356.);
printf("%f\n ",356);
printf("%f\n ",356f);
}
~~~
注意,第4行在Dev C++中会报错。
## 实型变量
1) 实型数据在内存中的存放形式
实型数据一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下:
![](http://www.lvtao.net/content/uploadfile/201404/3545ebce9625a6658cfa7f744b22f78220140421033812.gif)
说明:
* 小数部分占的位(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;
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 规定小数后最多保留六位,其余部分四舍五入。
## 实型常数的类型
实型常数不分单、双精度,都按双精度double型处理。
- 前言
- 一. C语言概述
- 1.C语言的发展及其版本
- 2.C语言工作原理和运行机制
- 3.C语言编译器(开发工具|IDE)推荐
- 4.C语言的特点
- 5.第一个C语言程序
- 6.C语言输出函数(printf)和输入函数(scanf)
- 7.C语言程序的结构特点
- 8.C语言字符集
- 9.C语言词汇
- 二. C语言算法
- 1.什么是算法|算法的概念
- 2.简单的C语言算法举例
- 3.C语言算法的特性
- 4.用流程图表示算法
- 5.三种基本结构的流程图
- 6.用N-S流程图表示算法
- 7.用计算机语言表示算法
- 三. 数据类型和运算符
- 1.C语言的数据类型
- 2.C语言常量与变量
- 3.C语言整型数据
- 4.C语言实型数据
- 5.C语言字符型数据
- 6.C语言变量赋初值
- 7.C语言数据类型转换
- 8.C语言算术运算符和算术表达式
- 9.C语言赋值运算符和赋值表达式
- 10.C语言逗号运算符和逗号表达式
- 四. 顺序程序设计
- 1.C语言语句概述
- 2.C语言赋值语句详解
- 3.C语言数据的输入输出
- 4.C语言字符的输入输出
- 7.C语言顺序结构程序设计举例
- 五. 分支结构
- 1.C语言关系运算符和表达式
- 2.C语言逻辑运算符和表达式
- 3.C语言if语句详解
- 4.C语言switch语句的用法详解
- 5.C语言条件运算符和条件表达式
- 6.C语言分支结构程序举例
- 六. 循环控制
- 1.C语言循环控制概述
- 2.C语言goto语句以及用goto语句构成循环
- 3.C语言while语句的用法
- 4.C语言do-while语句的用法
- 5.C语言for语句用法详解
- 6.C语言几种循环的比较
- 7.C语言break和continue语句的用法
- 8.C语言循环控制程序举例
- 七. C语言数组
- 1.C语言一维数组的定义和引用
- 2.C语言二维数组的定义和引用
- 3.C语言字符数组及其应用
- 4.C语言常用字符串处理函数
- 5.C语言数组应用举例
- 6.C语言数组小结
- 八. C语言函数
- 1.C语言函数概述
- 2.C语言函数的定义
- 3.C语言函数的参数和返回值
- 4.C语言函数的调用
- 5.C语言函数的嵌套调用
- 6.C语言函数的递归调用
- 7.C语言数组作为函数参数
- 8.C语言局部变量和全局变量
- 9.C语言变量的存储类别
- 九. 预处理命令
- 1.C语言预处理概述
- 2.C语言无参数宏定义
- 3.C语言带参数宏定义
- 4.C语言文件包含命令
- 5.C语言条件编译详解
- 6.C语言预处理指令总结
- 十. C语言指针
- 1.C语言指针的概念
- 2.C语言指针变量
- 3.C语言指针变量作为函数参数
- 4.C语言指针变量的运算
- 5.C语言数组指针
- 6.C语言通过指针引用数组
- 7.C语言数组名作函数参数
- 8.C语言指向多维数组的指针
- 9.C语言字符串指针
- 10.C语言字符串指针变量与字符数组的区别
- 11.C语言函数指针变量
- 12.C语言指针型函数
- 13.C语言指针数组的概念
- 14.C语言指向指针的指针
- 15.C语言main函数参数
- 16.关于指针的总结
- 十一. 结构体和共用体
- 1.C语言结构体的定义
- 2.C语言结构类型变量的说明
- 3.C语言结构变量成员的表示方法
- 4.C语言结构变量的赋值
- 5.C语言结构变量的初始化
- 6.C语言结构体数组的定义
- 7.C语言指向结构体变量的指针
- 8.C语言指向结构体数组的指针
- 9.C语言结构体指针变量作函数参数
- 10.C语言动态存储分配
- 11.C语言链表的概念
- 12.C语言枚举类型
- 13.C语言类型定义符typedef
- 十二. 位运算
- 1.C语言位运算符详解
- 2.C语言位域(位段)
- 3.关于位运算的总结
- 十三. 文件操作
- 1.C语言文件概述
- 2.C语言文件指针
- 3.C语言文件的打开与关闭
- 4.C语言文件的读写
- 5.C语言文件的随机读写
- 6.C语言文件检测函数
- 7.C语言库文件(头文件)有哪些
- 8.文件操作小结