c语言 第14题 应该怎么分析呀
1个回答
展开全部
A和D这两个就不用多说了,算法都不对。剩下B和C,两者就差在C项前有个(int)强制类型转换。将float类型强制转为int型,会舍去全部的小数位,而B项没有强制类型转换,即使是100这个常数,也是隐式从int转成float,不会丢失精度。
而题目要求四舍五入,这个要求B项做不到,而C项有舍的功能,所以从这个角度去想,选C。当然这只是快速解法,没有说明问题的本质。
从另一个角度入手,假设x=0.014,则x*100+0.5
=
1.9,(int)(x*100+0.5)
=
1,可见小数第三位小于5的话,即使让它加上5是不会产生进位的,那个转成int之后跟没有加0.5是一样的结果。
再假设x=0.015,则x*100+0.5
=
2.0,(int)(x*100+0.5)
=
2,可见小数第三位大于等于5时,加上5会产生进位。转成int之后整数部分比没加0.5之前大1。后面的我就不细说了,自己理解
而题目要求四舍五入,这个要求B项做不到,而C项有舍的功能,所以从这个角度去想,选C。当然这只是快速解法,没有说明问题的本质。
从另一个角度入手,假设x=0.014,则x*100+0.5
=
1.9,(int)(x*100+0.5)
=
1,可见小数第三位小于5的话,即使让它加上5是不会产生进位的,那个转成int之后跟没有加0.5是一样的结果。
再假设x=0.015,则x*100+0.5
=
2.0,(int)(x*100+0.5)
=
2,可见小数第三位大于等于5时,加上5会产生进位。转成int之后整数部分比没加0.5之前大1。后面的我就不细说了,自己理解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询