C语言中实型数据运算的问题! 如图: a = 1.0/3*3 b = 3/2 c = 1/3*3 为什么产生这样的结果

如题所述

第一个,1.0/3,因为1.0是浮点型的,所以在运算的时候会自动转换为浮点数运算,然后在乘以3.其实1.0/3*3的结果有的时候可能是0.999999,这是因为在计算机中有些数是无法完全转换为二进制的,只能近似相等。比如for(double i=9;i>=0;--i) 你在输出 i ,很有可能得到 *.99999或者*.000001,
第二个,3/2是整数相除,会自动省略小数。如果想要得到1.5可以这样(float)3/2或者变为3.0/2,
第三个,1/3是整数相除,得到0,所以再乘以任何东西都是0了。
建议你去看看c语言的数据类型转换,很多都是隐式转换,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-24
个人认为如此:

a=(1.0/3)*3;
1.0是浮点数,而3是整形数,所以对3进行隐式转换到浮点型,得出的结果与3的浮点型数相乘,得1.0 。

b=3/2;
3和2都是整形,所以相除得1,余1,而得出的整形结果是1,放进浮点型的结果里,所以是1.0 。

c=(1/3)*3;
1和3都是整形,所以相除得0,而0*3=0,所以结果是0 。本回答被提问者采纳
第2个回答  2012-07-24
首先说一下,楼主要想达到预期的效果只需要把c=1/3*3 改为1.0/3*3
至于原因,就是涉及到整型和浮点型变量在内存中有关存储位的知识了。简单点说,1/3这个操作被系统默认为两整型相除,得到的结果也是整型,所以1/3的值为0.333333333的整数部分,也就是0,后面0*3当然就是0了,而c是浮点型,所以显示的结果是0.00000了,
希望对楼主有帮助。
第3个回答  2012-07-24
因为你计算的时候
a = 1.0 / 3 * 3 // float/int/int 结果用float类型
b = 3/2 // int/int 结果是int类型 3/2 int 类型结果就是1
最后一样 int/int*int 1/3*3结果int类型 0
然后你打印的时候都是%f 所以是 1.000000 1.000000 0.000000
你先看下C语言类型转换,下面是网址,
http://baike.baidu.com/view/3975627.htm
如果不同类型数据进行计算的话,那需要把不同的类型都转换成在其中级别最高的类型在计算!
第4个回答  2012-07-24
① . 首先1.0/3=0.333333 0.333333*3=0.999999
编译系统自动进位,你想想 1/3.0 = ? *3 = 1是不是这个道理
当然因为单精度所以后面1保留 6位
② . 3/2=1.5 ,没错但是"/ "在C语言中算出结果是取整数。相当于b=(int)3/2;
③ . 因为1/3 =0.3333..取整为0,但因为输出格式是%f,所以后面保留六位是0.000000

不知道你懂没有 希望能对你有所帮助