C语言中的简单乘法与算术

C语言中的简单乘法与算术,c,math,quadratic,C,Math,Quadratic,我有一个任务来计算C中二次方程的根,应该很简单,我知道我需要用这个程序做什么,但我仍然有一个问题。 当根是虚的,且平方根内的项为零时,它工作良好 但当我输入系数a,b和c,它会给出实根,它给了我错误的答案,我无法找出什么是错的。(我用a=2、b=-5和c=1测试它) 这是我的代码,它编译并运行,但给出了错误的答案 #include<stdio.h> #include<math.h> int main() { float a, b, c, D, x, x1, x2

我有一个任务来计算C中二次方程的根,应该很简单,我知道我需要用这个程序做什么,但我仍然有一个问题。 当根是虚的,且平方根内的项为零时,它工作良好

但当我输入系数a,b和c,它会给出实根,它给了我错误的答案,我无法找出什么是错的。(我用a=2、b=-5和c=1测试它)

这是我的代码,它编译并运行,但给出了错误的答案

#include<stdio.h>
#include<math.h>

int main()
{
    float a, b, c, D, x, x1, x2, y, xi;

    printf("Please enter a:\n");
    scanf("%f", &a);
    printf("Please enter b:\n");
    scanf("%f",&b);
    printf("Please enter c:\n");
    scanf("%f", &c);
    printf("The numbers you entered are: a = %f, b = %f, c = %f\n", a, b, c);


    D = b*b-4.0*a*c;
    printf("D = %f\n", D);
    if(D > 0){
        x1 =  (-b + sqrt(D))/2*a;
        x2 = ((-b) - sqrt(D))/2*a;
        printf("The two real roots are x1=%fl and x2 = %fl\n", x1, x2); 
    }
    if(D == 0){
        x = (-b)/(2*a);
        printf("There are two identical roots to this equation, the value of which is: %fl\n", x);
    }
    if (D<0){
        y = sqrt(fabs(D))/(2*a);
        xi = (-b)/(2*a);
        printf("This equation has imaginary roots which are %fl +/- %fli, where i is the square root of -1.\n", xi, y);
    }
    return 0;
}
#包括
#包括
int main()
{
浮A,B,C,D,X,X1,X2,Y,席;
printf(“请输入a:\n”);
scanf(“%f”、&a);
printf(“请输入b:\n”);
scanf(“%f”和“b”);
printf(“请输入c:\n”);
scanf(“%f”、&c);
printf(“您输入的数字是:a=%f,b=%f,c=%f\n”,a,b,c);
D=b*b-4.0*a*c;
printf(“D=%f\n”,D);
如果(D>0){
x1=(-b+sqrt(D))/2*a;
x2=(-b)-sqrt(D))/2*a;
printf(“两个实根是x1=%fl和x2=%fl\n”,x1,x2);
}
如果(D==0){
x=(-b)/(2*a);
printf(“此方程有两个相同的根,其值为:%fl\n”,x);
}

如果(D计算结果不正确:

x = y / 2*a
实际上被解析为

x = (y / 2) * a
所以你必须在
2*a
周围加上括号

你想要这个:

x = y / (2 * a)

你期望得到什么答案?对于a=2,b=-5,c=1,b*b-4ac是17;这是程序输出的结果。你得到了什么错误的答案,你期望得到什么答案?你更新了代码(修复了吗)?如果更新了,你能在OP中提供一个注释,说明它已经修复了吗?你可能还想接受一个答案=)看起来代码已更正为D0。太棒了,非常感谢。我知道我遗漏了一些愚蠢的东西!