练习题004:一元二次方程求解

C语言练习题目录索引

题目:二元一次方程的形式一般是 ax2+bx+c=0 a x 2 + b x + c = 0 (a不能为0),输入a、b、c,求这个二元一次方程的解。


解题思路:首先我们得清楚二元一次方程求解公式: x=b±b24ac2a x = − b ± b 2 − 4 a c 2 a ,其次要清楚二元一次方程的性质。 Δ=b24ac Δ = b 2 − 4 a c
①最高项系数不能为0,即(a != 0);
②如果Δ=0,那方程有两个相同的解;
③如果Δ>0,那方程有两个不同的解;
④如果Δ<0,那方程无解。

最后这里要注意,这里定义的变量都是double型的,而double类型变量和0比较不能直接进行,这里我们先定义一个精度EOX,如果一个数落在[-EOX, EOX]这个闭区间内,我们就认为在某个精度内它的值与零值相等。


#define EOX 0.000001       
//代码中的数值都是浮点数,如果和int型的0比较大小就会发生错误,所以此处我自己定义了一个精度,(-EXO,EXO)区间代表0

void Equationsolving(double a, double b, double c)
{

    if ((a >= -EOX) && (a =< EOX))//如果a在[-EXO,EXO]区间内代表a=0,那就不是一个一元二次方程
        printf("这不是一个一元二次方程\n");

    else
    {
        double d  = b*b - 4*a*c;          
        double x1 = (-b + sqrt(d)) / 2 * a; //两个求解的公式
        double x2 = (-b - sqrt(d)) / 2 * a;

        if (d > EOX)   //d大于零,方程有两个不同的解
        {
            printf("该方程有两个不同的解:x1 = %lf,  x2 = %lf\n", x1, x2);
        }
        else if ((d > -EOX) && (d < EOX)) //d等于零,方程有两个相同的解
        {
            printf("该方程有两个相同的解:x1 = x2 = %lf\n", x1);
        }
        else if (d < -EOX)
        {
            printf("该方程无解\n");  // d小于零,方程无解
        }
    }
}

int main()
{
    printf("请输入要求解的一元二次方程的三个系数a,b,c的值:");
    double a = 0;
    double b = 0;
    double c = 0;
    scanf_s("%lf%lf%lf", &a, &b, &c); //从键盘上输入a,b,c的值
    Equationsolving(a, b, c); 

    system("pause");          
    return 0;
}

你可能感兴趣的:(C练习题)