程序返回错误答案和“-nan(ind)”。我做错了什么?

时间:2017-11-20 10:24:09

标签: c quadratic

这是我的代码

#include <stdio.h>
#include <math.h>
void main()
{
float a = 0, b = 0, c = 0;
float disc = b*b - 4 * a*c;
float sing = -b / (2 * a);
float lin = -c / b;
float quad1 = (-b + (disc)) / (2 * a);
float quad2 = (-b - (disc)) / (2 * a);
printf_s("Please enter the coefficients a, b, and c\n");
scanf_s("%g %g %g", &a, &b, &c);
if (a == 0)
{
    if (b == 0)
    {
        if (c == 0)
        {
            printf_s("There are infinite solutions\n");
        }
        else
        {
            printf_s("There is no solution\n");
        }
    }
    else
    {
        printf_s("The singular solution is %g\n", lin);
    }
}
else
{
    if (disc < 0)
    {
        printf_s("There is no real solution\n");
    }
    else 
    {
        if (disc == 0)
        {
            printf_s("The singular solution is %g\n", sing);
        }
        else
        {
            printf_s("The solutions are x1 = %g and x2 = %g\n", quad1, quad2);
            }
        }
    }
}

我正在尝试建立一个二次公式计算器。当我插入a = 2,b = 1和c = -21时,我希望得到x = 3和x = -3.5 但相反,我得到输出“奇异的解决方案是-nan(ind)” 这是什么意思?我该如何解决?

3 个答案:

答案 0 :(得分:1)

不会追溯初始化或重新计算变量。

例如,使用

--new

初始化等于float disc = b*b - 4 * a*c; ,即0 * 0 - 4 * 0 * 0

定义变量,然后读取输入,然后进行计算。

答案 1 :(得分:0)

您在输入之前计算disc 的值。改变顺序。

这也适用于singlinquad1quad2

float a, b, c;
printf_s("Please enter the coefficients a, b, and c\n");
scanf_s("%g %g %g", &a, &b, &c);
float disc = b*b - 4 * a*c;
float sing = -b / (2 * a);
float lin = -c / b;
float quad1 = (-b + (disc)) / (2 * a);
float quad2 = (-b - (disc)) / (2 * a);

答案 2 :(得分:0)

见这些行

 float sing = -b / (2 * a);
 float lin = -c / b;

在这里,你正在尝试除零,这是没有意义的。

您可能需要在从用户读取值后移动操作。