一道C语言的题 分析输出结果

来源:百度知道 编辑:UC知道 时间:2024/05/26 19:52:58
#include <stdio.h>
main()
{ double x=1000/3.0;
double y=x-333.0;
double z=3*y-1.0;
printf("x=%lf\n",x);
printf("y=%lf\n",y);
printf("z=%lf\n",z);
if(z==0) printf("z==0.\n");
else printf("z不等于0.\n");

}

x,y的答案应该懂吧!
至于 z,因为 3*y 不是等于一的,等于0.99999…(小数点后有十多位)
因为0.99999…减去1.0 不等于0,而是 -0.00…1
但是没有指明输出的位数,所以会输出默认的6位小数
所以之输出了 -0.000000
所以z不等于0 。

你运行一下就知道了啊

X=333.3333..(小数点后前16位数字有效)
y=0.3333....(小数点后前16为有效)
z=-0.00000001

x=333.333333
y=0.333333
z=-0.000000
z不等于0.

%lf格式在没有指明小数位时,系统按小数6位输出