我必须编写一个简单的程序,通过输入a,b和c的值并使用if-else语句,可以找到二次方程式(ax ^ 2 + bx + c)的根。该程序可以编译,但是答案完全错误。我所有输入和输出的数据类型都是double
我尝试查看自己的公式,但似乎没有错吗?
printf("input values of a, b, c: ");
scanf("%lf, %lf, %lf", &a, &b, &c);
disc = pow(b, 2) - (4 * a*c);
if (a == 0)
{
r = -c / b;
printf("x = %.2lf\n", r);
}
else if (disc >= 1)
{
r1 = (-b + sqrt(disc)) / (2 * a);
r2 = (-b - sqrt(disc)) / (2 * a);
printf("x1 = %.2lf and x2 = %.2lf", r1, r2);
}
else if (disc == 0)
{
r1 = (-b + sqrt(disc)) / (2 * a);
r2 = r1;
printf("2 of the same root, x = %.2lf", r2);
}
else
{
printf("no real root");
}
例如,当我输入2,-11和12作为a,b和c时,应该显示的答案是'x1 = 4.00和x2 = 1.50',但是,我得到的输出是'x1 = .00和x2 = 0.00'。甚至对于第一个条件,我都输入了0、3和6,期望输出为'x = -2.00',但我却得到了'x = -1.00'。
答案 0 :(得分:1)
查找真实根的代码不正确。
// else if (disc >= 1)
else if (disc > 0.0)
答案 1 :(得分:0)
scanf("%lf, %lf, %lf", &a, &b, &c);
告诉scanf
期望数字之间的逗号。当您输入仅由空格分隔且没有逗号的数字时,b
和c
不会被分配,并且它们具有未指定的值。
要解决此问题,请将scanf
更改为:
int n = scanf("%lf%lf%lf", &a, &b, &c);
if (n != 3)
{
fprintf(stderr, "Error, scanf failed.\n");
exit(EXIT_FAILURE);
}
您还需要插入#include <stdlib.h>
来声明exit
。
另外,else if (disc >= 1)
应该是else if (disc > 0)
。