下列程序段的输出结果是 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的啊,请高手详细讲解啦,感激不尽
(接上面),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 了.
再问: 但是8和5都是实型啊,两个实型相除应该是实型吧?要是按你那样说,不是1的吗,怎么是1.0呢?
再答: 两个整形数相除结果是整形,的确是1。这个1赋值给double的d,d就自动等于1.0了。因为它是双精度浮点数啊。同样地,这个1赋给f,也是1.0了。因为它是浮点数。这叫类型自动匹配。
其实关键是这句:
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了。因为它是浮点数。这叫类型自动匹配。
下列程序段的输出结果是 int i; long l; float f; double d; i=l=f=d=8/5; p
main() { double d;float f;long l;int i; d=f=l=i=20/3; printf
c语言程序题:输出结果(小数点后只保留一位)main(){double d;float f;long l;int i;i
程序运行输出结果是main(){char c; int n=100;float f=10; double x;x=f*=
下列程序段的输出结果是_ int x=3; if(x=5) x++; printf("%d\n",x);
java中有些句子如int i=8 ,j=8,I=0;int a=5,b=6;float f=1.0f;double d
main(){ float d,f;long k;int i; i=f=k=d=20/3; printf("%3d %3
int i=(j=4,k=8,l=16,m=32); printf(“%d”,i);该语句的输出结果是多少?
3.下列程序段运行后的输出结果是 【 】 .char ch[ ]="abc",x[3][4]; int i; for(i
下列程序的输出结果是 main() { double d=3.2; int x,y; x=1.2; y=(x+3.8)/
若有以下程序段 Int r=8 printf("%d\n",x>>1); 输出结果是?
4.下列程序的输出结果是___B____.main() { int a = 011; printf( "%d\n",++