C语言用来解决一元二次方程的问题

2025-05-13 01:59:25
推荐回答(3个)
回答(1):

#include 
#include 

int main(int argc, char *argv[])
{
    char    s8IsImg = 0;

    double  f64VaribA;
    double  f64VaribB;
    double  f64VaribC;

    double  f64VaribM;
    double  f64VaribX1;
    double  f64VaribX2;

    scanf("%lf %lf %lf", &f64VaribA, &f64VaribB, &f64VaribC);

    if ((f64VaribB * f64VaribB) < (4 * f64VaribA * f64VaribC))
    {
        s8IsImg = 1;
        f64VaribM = sqrt((4 * f64VaribA * f64VaribC) - (f64VaribB * f64VaribB));
    }
    else
    {
        s8IsImg = 0;
        f64VaribM = sqrt((f64VaribB * f64VaribB) - (4 * f64VaribA * f64VaribC));
    }

    if (!s8IsImg)
    {
        f64VaribX1 = (-1.0 * f64VaribB + f64VaribM) / (2 * f64VaribA);
        f64VaribX2 = (-1.0 * f64VaribB - f64VaribM) / (2 * f64VaribA);
        printf("X1+: %lf, X2: %lf\n", f64VaribX1, f64VaribX2);
    }
    else
    {
        f64VaribM   = f64VaribM * 1.0 / (2 * f64VaribA);
        f64VaribX1  = -1.0 * f64VaribB / (2 * f64VaribA);
        f64VaribX2  = -1.0 * f64VaribB / (2 * f64VaribA);
        printf("X1: %lf + %lf*i, X2: %lf - %lf*i\n", f64VaribX1, f64VaribM, f64VaribX2, f64VaribM);
    }

    return 0;
}

回答(2):

首先,把scanf里面的%f改成%lf,printf里面不用管,其次,b*b要大于4*a*c才会有结果的。。。

回答(3):

将double改为float