关于C语言数据类型选择的一个注意
来源:互联网 发布:淘宝怎么刷关键词排名 编辑:程序博客网 时间:2024/06/12 20:26
很久之前买了《C Primer Plus》回来学C语言,刚开始看的时候,觉得前面的讲数据类型的那章的题目简单,就没有去做,学到后面感觉前面的有点陌生了,就回来做一下题去复习一下知识点。(看过这本书的人应该都有一种感受,这本书每一章的内容都比较的厚实,讲的都比较细致,基本上与那一章的主要内容有关的知识点都会被提及,对入门的人来说这可以省掉很多调错的麻烦。)结果做到第六题时,怎么修改和编译都有问题。
这道题目的内容如下:
1个水分子的质量约为3.0e-23克。1夸脱水大约是950克。编写一个程序,提示用户输入水的夸脱数,并显示水分子的数量。
我的初始代码如下:
#include<stdio.h>#define K 950#define M 3.0e-23int main(void){ int N = 0; float m = 0.0, MK =0.0; printf("请输入水的夸脱数:\n"); scanf("%f", &MK); m = MK * K; N = m / M; printf("这些夸脱水含有%d个水分子\n", N); return 0;}
修改后的代码如下:
#include<stdio.h>#define K 950#define M 3.0e-23int main(void){ float N = 0; float m = 0.0, MK =0.0; printf("请输入水的夸脱数:\n"); scanf("%f", &MK); m = MK * K; N = m / M; printf("这些夸脱水含有%e个水分子\n", N); return 0;}
对比一下,可能觉得是数据类型有问题,刚开始用的是整型int,而后面改为浮点型float。
而导致这个问题的原因,我最开始认为是我的整型int的范围不够,后面我有试着改成了系统支持的最大整型unsigned long long,发现编译结果溢出为零,才发现这个数字过大,最大范围也不够。这时,我不得不更改为float型,才能够容下这个数据。这个例子让我知道了,一般相关的值与值的数据类型应该要相互对应好,这样一般可以避免范围不够造成的程序数据溢出。
另外,其中的代码中N的数据类型与m除以M后的结果的数据类型是完全不同的,N的整型,m除以M的结果是浮点型,这里就存在一个类型强制转化的风险,特别是浮点型转化为整型,会造成数据的丢失,结果不够精确。
总结就是:数据类型对应好,溢出bug不上门。
阅读全文
0 0
- 关于C语言数据类型选择的一个注意
- 一个关于c/c++语言内存数据类型的实验
- 关于C语言数据类型
- 关于ARM的C语言数据类型
- 关于一个c语言中的小陷阱(数据类型之间的转换)
- [心得]关于C语言中对用户输入选择选项的校验的一个思路
- 关于数据类型的注意点
- 一个关于数组中满足条件的元素选择、及再次排序得c语言函数。
- 一个关于数组中满足条件的元素选择、及函数变换得c语言函数
- C语言的数据类型
- C语言的数据类型
- C语言的数据类型
- C语言的数据类型
- C语言的数据类型
- C语言的数据类型
- c语言的数据类型
- C语言的数据类型
- C语言的数据类型
- iOS 开发RunTime之函数调用
- [C++基础] 字符编码
- Ubuntu修改环境变量
- 见习报告
- Android项目中版本管理需要忽略的文件
- 关于C语言数据类型选择的一个注意
- Java简单计算器的实现
- 响铃:国际竞争变标准之争,长袖善舞的海尔这次又走在了前面
- servlet cookie
- 算法课算是结束了-
- MySql查询数据令某字段显示固定值
- 是否该为知识产权付费?——《硅谷来信,吴军》
- web.xml配置详解
- 抽象类与接口区别,何时使用