C语言!很简单的数据问题!

来源:百度知道 编辑:UC知道 时间:2024/09/24 01:30:55
#include<stdio.h>

void main()
{
double a,b,c,d;
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
if(a+b+c+d==0)
printf("T");
}
若输入为1 -4.65 2.25 1.4
结果不输出T,问什么
我自己调试过,得到的数据很奇怪!
#include<stdio.h>

void main()
{
float a,b,c,d;
scanf("%f %f %f %f",&a,&b,&c,&d);
if(a+b+c+d==0)
printf("T");
}
还是不对!

这个你在IF语句中的条件因为始终是假 所以才不会输出T
你可以这样试试看一下 把 IF语句中的 == 改成!=
这时你再次运行就会发现 此时可以输出T
这就说明 a+b+c+d的值与0不相等,
原因是 两个数据类型不同, 因此比较结果就不同
解决办法: 把IF语句内的条件改成 if((int(a+b+c+d))==0);
这样再运行就不会出现不输出T的结果了

前几天遇到类似的
用float定义的 2个小数相乘
结果出错了
这个好象是跟计算机存储格式有关
2进制存储小数 本来就有精度损失 只能存0.5 0.25 0.125....
不能加到的只能取近似的 不知道是不是这个原因

这个问题我也遇到过 ./你换成float就可以了. 原因应该在于你申明的是double类型 但是赋值的时候是给float赋值 这样上面16位就位系统随机数字了.导致结果错误

因为浮点数是不精确的,一些非整数值(如几元和几分这样的小数)需要很精确。浮点数不是精确值,所以使用它们会导致舍入误差。
上面中的a+b+c+d几乎不可能等于0,但是却和0很相近,比如0.000007

由于机器中的浮点型数据是由阶码段,与尾数段组成来形成科学的计数法形式。故其运算结果不一定是一个准确的数。

a+b+c+d不等于0