main() { double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf("%d \n", d*y); } 结果 为什么是0???

给个详细解析啊~... 给个详细解析啊~ 展开
 我来答
王爱飞waffaw
2011-02-19 · TA获得超过317个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:214万
展开全部
x = 1.2个语句有问题,注意对于浮点数,计算机的表示是近似值(有精度范围),而1.2对于计算机是无法精确表示的,计算机应该是存了一个跟1.2最接近的数值(接近但是小于1.2),这样的话x+3.8(注,3.8 也不能精确表示)就小于5.0,这样表达式(x+3.8)/5.0的值就是接近1但是小于1,然后将这个小于1的数值赋给y,而y是int,不能接收小数,对于绝对值小于1的情况都是0,所以结果是0
百度网友0bf4277
推荐于2016-01-25
知道答主
回答量:23
采纳率:0%
帮助的人:0
展开全部
c语言中有个强制类型转换。举个例子
int x;
x=1.2;
这个时候x是1
float x; x=5;
这个时候x是5.0
你这个题目实际是这样的
y=(x+3.8)/5.0
因为x是int型,所以x取1
y=(1+3.8)/5.0=4.8/5.0
因为y也是int型,所以y取0
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-02-19 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4451万
展开全部
x=1.2; //x是整形,因此x=1
y=(x+3.8)/5.0;
=(1+3.8)/5.0
=4.8/5.0 //结果是0.96,但y是整形,因此y=0
=0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rockrider001
2011-02-19 · TA获得超过1566个赞
知道小有建树答主
回答量:1200
采纳率:100%
帮助的人:1166万
展开全部
x是int型,x=1.2时会给截断,变成x=1,
这样x+3.8 / 5时是4.8/5 < 1,赋给y时就会给截断了,变成0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式