台湾艺人对刀郎评价:c语言问题

来源:百度文库 编辑:高校问答 时间:2024/04/28 04:49:44
题1 若以定义x和y为double类型,则表达式x=1,y=x+3/2的值是? 答案为2.0
题2 设a和b均为double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b的值是?答案为6.000000
题2中我算的过程是 5+1.0等于 6.0 题1中 我算的过程是1+1=2 然后我看double是双精度实型就变成2.0了 为什么题2 不等于6.0 而是6.000000呢?我哪有错?谢谢

首先, 如果一个数被定义为double类型的, 那么, 不管程序中写的是什么样子(6.0也好, 6.000也好), 它在计算机中的表示形式已经确定了, 该占多少位内存, 都是固定的了。 所以你看到的6.0和6.00000是完全等同的, 只是表示形式不同而已。 而且系统一般都是默认double型输出到小数点后面6位。 但这个你也可以自己改。比如小数点后面3位, double a = 6.0; printf("%0.3lf", a);

为了证明6.0和6.0000是完全相等的, 你可以这么做
double a = 6, b = 6.0, c = 6.00, d = 6.0000000000;
printf("%lf %lf %lf %lf\n", a, b, c, d);
你可以发现, 他们的结果是相同的。 这就验证了我上面所说的。

第二题也是如此, 它就等于6.0, 但是系统默认double的表达形式是小数点后面6位, 所以输出是6.000000

第一题
x=1,y=x+3/2,x是double ,这时内存中x是1.0,3/2两数都是整型计算得1,1+1.0就得到2.0了
第二题
a=5.5,b=2.5,则表达式(int)a+b/b a被转为5,b/b两数都是double型,得到的就是1.0,5+1.0就得到精度高一些的6.0

在我机子上就是2.000000了,所以说楼主不要管这种细节了。

这应该不影响吧,这个牛角尖不用去钻的,编译器优化等许多原因都会造成这种情况

没有错,你设置好输出的小数位数不就OK了