作业帮 > 综合 > 作业

下列程序段的输出结果是 int i; long l; float f; double d; i=l=f=d=8/5; p

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/04 18:59:12
下列程序段的输出结果是 int i; long l; float f; double d; i=l=f=d=8/5; printf("%d,%ld,%3.1f,%3.1f\n"
(接上面),i,l,f,d);
答案是:1,1,1.0,1.0
请问为什么是1.0而不是1.6呢,8/5明明是1.6的啊,请高手详细讲解啦,感激不尽
下列程序段的输出结果是 int i; long l; float f; double d; i=l=f=d=8/5; p
我刚才用VC++ 2010 测试了一下,果然是你说的这个答案.我调式了一下,看了一下运行的过程.下面给你解释一下:
其实关键是这句:
i=l=f=d=8/5
这里等号总是先算最右边,8/5 两个整数相除,默认结果也是整数,所以就是 1.0.这个1.0依次赋值给左边的那些数,并且会自动类型匹配.所以就会出现你看到的结果了.
要想得到 1.6,可以改成这样:
i=l=f=d=(double)8/5
结果就是1,1,1.6,1.6 了.
再问: 但是8和5都是实型啊,两个实型相除应该是实型吧?要是按你那样说,不是1的吗,怎么是1.0呢?
再答: 两个整形数相除结果是整形,的确是1。这个1赋值给double的d,d就自动等于1.0了。因为它是双精度浮点数啊。同样地,这个1赋给f,也是1.0了。因为它是浮点数。这叫类型自动匹配。