C语言入门学习中的一个小问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:03:24
为什么
main()
{double x=5.16894;
printf(%f),x=(int)(x*1000+0.5)/1000);
}
运行结果是5.169000,
而如果将输出语句中的x=去掉,也就是输出语句为printf(%f),x=(int)(x*1000+0.5)/1000);后,运行结果则是奇奇怪怪的-0.000000?

首先明确,printf函数一个右结合性的函数。
printf(%f),x=(int)(x*1000+0.5)/1000);最终相当于: x=(int)(x*1000+0.5)/1000
printf("%f",x);
去掉x=之后相当于先计算它(int)(x*1000+0.5)/1000得到5..169000,然后
printf(%f,5.169000);
你说错不错。

你的括号对么?
不应该是
printf( %f,(int)( (x*1000+0.5)/1000) ) );

你的语句很奇怪,你用的是什么编译器,我用VC6.0,无论我怎么加小括号来改变运算顺序,也得不出浮点数的结果。

你的格式错了,改之前的那
一个也错了

main()
{double x=5.16894;
printf(%f),x=(int)(x*1000+0.5)/1000);
}
我不知道你的运行环境是什么的,不过我的是VC++,运行你上面的程序是错误的。
看下面的程序。。

#include<stdio.h>
void main()
{double x=5.16894;
printf("%f",(int)(x*1000+0.5)/1000);
}

参考程序:
main()
{
double x=5.16894;
printf("%f", ( (int)( x * 1000 + 0.5 ) ) / 1000.0 );
/* 强制类型转换,必须在"/"运算前进行 */
}