永发信息网

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

答案:7  悬赏:50  手机版
解决时间 2021-01-22 09:43
  • 提问者网友:骨子里的高雅
  • 2021-01-21 17:25
C语言中实型数据运算的问题! 如图: a = 1.0/3*3 b = 3/2 c = 1/3*3 为什么产生这样的结果
最佳答案
  • 五星知识达人网友:患得患失的劫
  • 2021-01-21 17:56
个人认为如此:

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 。
全部回答
  • 1楼网友:持酒劝斜阳
  • 2021-01-21 22:27
(1.0/3)*3=0.333333.....*3 3/2 (1/3)*3=0*3 (都是求商,求余用“%”)
  • 2楼网友:洒脱疯子
  • 2021-01-21 21:13
除数和被除数都用浮点数
  • 3楼网友:枭雄戏美人
  • 2021-01-21 20:58
① . 首先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

不知道你懂没有 希望能对你有所帮助
  • 4楼网友:佘樂
  • 2021-01-21 19:29
首先说一下,楼主要想达到预期的效果只需要把c=1/3*3 改为1.0/3*3
至于原因,就是涉及到整型和浮点型变量在内存中有关存储位的知识了。简单点说,1/3这个操作被系统默认为两整型相除,得到的结果也是整型,所以1/3的值为0.333333333的整数部分,也就是0,后面0*3当然就是0了,而c是浮点型,所以显示的结果是0.00000了,
希望对楼主有帮助。
  • 5楼网友:低血压的长颈鹿
  • 2021-01-21 19:21
b=3/2; 改成 b=3.0/2;或b=(float) 3/2; 输出为1.000的原因是在存入b之前这个运算是按照整形来计算的,所以1.5变成了1,存入b之后变成了1.0000000;
同理
c = 1/3*3; 改成 c=1.0/3*3;
  • 6楼网友:过活
  • 2021-01-21 18:06
第一个,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语言的数据类型转换,很多都是隐式转换,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯