程序无法计算二次方程的根

时间:2019-04-01 03:17:18

标签: c

我必须编写一个简单的程序,通过输入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'。

2 个答案:

答案 0 :(得分:1)

查找真实根的代码不正确。

// else if (disc >= 1)
else if (disc >  0.0)

答案 1 :(得分:0)

scanf("%lf, %lf, %lf", &a, &b, &c);告诉scanf期望数字之间的逗号。当您输入仅由空格分隔且没有逗号的数字时,bc不会被分配,并且它们具有未指定的值。

要解决此问题,请将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)