下列程序段的输出结果是 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的啊,请高手详细讲解啦,感激

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 06:59:19
下列程序段的输出结果是 int i; long l; float f; double d; i=l=f=d=8/5; printf(

下列程序段的输出结果是 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; 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; 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的啊,请高手详细讲解啦,感激
我刚才用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 了.