关于一道C++基础题.........‘‘‘‘

来源:百度知道 编辑:UC知道 时间:2024/06/12 18:12:08
下列程序执行后的输出结果是(小数点后只写一位)

void main()
{ double d; float f; long l; int i;
i=f=1=d=20/3;
cout<<i<<l<<f<<d;
}

答案是6 ;6 ;6.0 ;6.0 ;为什么f和d不等于6.7呢???
单精度,双精度到底是什么意思???

因为这是c和c++的一个默认类型转换,因为20是int型,3也是int型,所以20/3的时候输出的也是一个int型的数,而后面的 小数部分 就被舍弃了,所以结果就是6而不是6.666666.....。如果想保留小数部分的话,就要用到强制类型转换。比如(double)20/3, 20/(double)3,就可以了。 其实你可以翻翻基础课本,那里面的类型转换好好看看,完全没问题的

单精度 小数点后最多保留 7位有效数字
双精度 小数点后最多保留 15-16位有效数字
。这个程序我的编译器根本就运行不了。。
i=f=1=d=20/3;这个式子本身应该是有错误的吧。。

因为20/3默认为整除了,所以是6
如果要计算小数应这样写
20.0/3.0

首先d不是浮点型的(float)所以它就是20/6=3因为都是取整数的。

然后把3给了浮点型的之后就默认在后面加上了.0变成了3.0