非常有趣的事情。找到方程结果的最简单的源代码:ax + b = 0.我很奇怪,当双x = -13/12 = -1.000000时;和 double x = -12 / 13 = 0.000000; (对于a和b int(类型转换)或double),但浮动或双x = -13f / 12f = 1.083333(这是正确的)。 双重有什么不对?
并且方程式{double或float x = - ((double或float)b)/ a;}可以是{int a,b;} ??如果它不对 - 为什么?
int main()
{
double a, b, x;
scanf("%f %f",&a, &b);
fflush(stdin);
if(a!=0)
{x = -b/a; printf("x = %f", x);}
else printf("There is no solve in your equation.");
getchar();
return 0;
}
谢谢
答案 0 :(得分:4)
在C中,如果你写
double x = 13/12;
编译器不会将除法视为浮点除法。相反,它将使用整数进行除法,截断结果,并将其存储在double中。更一般地说,在确定要执行的算术类型时,C不会查看它所写入的变量的类型。它只是查看操作数的类型。
要解决此问题,请写
double x = 13.0 / 12.0;
这些文字的类型为double,因此除法可以正常工作。
答案 1 :(得分:1)
您的scanf类型错误:
它们应为%lf
NOT %f
#include <stdio.h>
int main()
{
double a, b, x;
scanf("%lf %lf",&a, &b);
fflush(stdin);
if(a!=0)
{
x = -b/a;
printf("x = %lf", x);
}
else
printf("There is no solve in your equation.");
return 0;
}
> g++ t.cpp
> ./a.out
12
13
x = -1.083333
> ./a.out
13
12
x = -0.923077
PS。学会写好的代码 以上是可怕的,没有人想读这样的伪劣代码。