c语言问题

[复制链接]
查看11 | 回复5 | 2009-1-19 20:05:03 | 显示全部楼层 |阅读模式
main()
{

float a,b,c,x;
scanf("%f %f %f",&a,&b,&c);

x=(a+b+c)/2;
printf("%f\n",x);
}
上面的代码应该没有问题吧~~
不过有个问题
如果我输入54.3 4875.45 27.6,像这样一类一组数据,用计算器算是2478.675
但c输出的结果为2478.675049 这是为什么??
呵呵 谢谢你们的回答 我只是想知道为什么输出的结果会和计算器输出的结果不一样(我们平时算不也是得2478.675吗?!怎么用c就要多出个049)。
恩~~对于说变成.3f,我想问一个问题如果输入3个数除以2的结果是小数点后4位怎么办啊,有没有比较彻底的解决办法,谢谢啦 我会在追加50分的

回复

使用道具 举报

千问 | 2009-1-19 20:05:03 | 显示全部楼层
这个原因是这样的:我们输入的浮点数是十进制的,但是在计算机内部的数据都是用二进制形式进行存储和参与运算的。而在C中,浮点数的有效小数位为六位,所以在转换为二进制数的时候存在偏差,具体的偏差和具体的浮点数值以及编译器存在关系。这也就是造成了浮点数存储/运算不精确的原因。...
回复

使用道具 举报

千问 | 2009-1-19 20:05:03 | 显示全部楼层
浮点数是不精确的,尤其是到了小数点后的3,4位(这是由于计算机处理的都是离散的问题,不男横处理连续的造成的),这和个人的电脑和编译系统有关系。float系统输出的是六位小数,可用.n%f来控制输出的位数。...
回复

使用道具 举报

千问 | 2009-1-19 20:05:03 | 显示全部楼层
printf()是格式化输出语句是一定的格式输出的,这个格式是你必须事先确立的,所以你要小数保留四位就必须写成 %.4f。如果不加说明的话也就是写成%f的话,系统默认的是保留6位小数。还有什么不会的话,可以再问我。...
回复

使用道具 举报

千问 | 2009-1-19 20:05:03 | 显示全部楼层
这个就是所谓的误差咯.呵呵刚刚开始学期C吧.努力的学下去.目前我读软件班大二了.还在努力的学习C.因为以后你学习的数据结构对C的要求很高....
回复

使用道具 举报

千问 | 2009-1-19 20:05:03 | 显示全部楼层
输出格式的原因 要是输出格式是 %.3f 输出结果就是2478.675了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行