欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c语言实现一元二次方程求解

程序员文章站 2022-03-26 17:50:16
在用实现一元二次方程求解时,我们首先约定这个方程是ax2+bx+c=0的形式,接下来需要考虑的便是这个一元二次方程的参数问题。我们分三种情况讨论,当a=0,b=0时,这样的参数无法构成合适的方程;当...

在用实现一元二次方程求解时,我们首先约定这个方程是ax2+bx+c=0的形式,接下来需要考虑的便是这个一元二次方程的参数问题。我们分三种情况讨论,当a=0,b=0时,这样的参数无法构成合适的方程;当a=0,b≠0时,这个方程是个一元一次方程;当a≠0时,构成一元二次方程。这三种情况中的逻辑我们用if语句很容易就可以实现。接下来我们就需要选择参数的类型,这里我们选择float类型,因为计算机存储数据是二进制,存储浮点数时会有一定的误差,我们就需要定义一个误差精度,实现误差范围内的求解。最后,在第三种情况下我们嵌套if语句,解决一元二次方程中△分别大于小于等于0而解情况不同的问题。具体的代码实现如下:

//author:fl
//date:17.9.17
//function:一元二次方程求解

#define _crt_secure_no_warnings 1
#include 
#include 
#define disc 0.00000001                //误差精度
int main()
{
    printf("请依照 ax^2+bx+c=0 的形式分别输入参数a b c;\n");
    printf("\n");
    float a = 0.0, b = 0.0, c = 0.0,d=0.0, x1=0.0, x2=0.0;
    scanf("%f %f %f", &a, &b, &c);
    printf("\n");
    d = b*b - 4 * a*c;                  //用于判断实 数根个数
    x1 = ((-b) + sqrt(d)) / (2 * a);     //用于求解实数根
    x2 = ((-b) - sqrt(d)) / (2 * a);

    if (((a > -disc) && (a < disc)) && ((b > -disc) && (b < disc)))         //若参数a,b都为零,则无法组成适当的函数
    {
        printf("请输入合理的参数!\n");
        printf("\n");
    }
    else if (((a > -disc) && (a < disc)) && ((b < -disc) || (b > disc))      //a为0且b 不为0,参数a,b,c构成一元一次方程
    {
        printf("x=%f\n ",(-c) / b);
        printf("\n");
    }
    else
    {   
        if (d>disc)    //d大于0,方程有两个不同的解
        {
            printf("x1=%f\n", x1);
            printf("x2=%f\n", x2);
            printf("\n");
        }
        else if ((d > -disc) && (d < disc))    //d等于0,方程有两个相同的解
        {
            printf("x=x1=x2=%d\n", x1);
            printf("\n");
        }
        else    //d小于0,方程无解 
        {
            printf("此方程无实数根!\n");
            printf("\n");
        }

    }
    return 0;
}