【C语言】求一个一元二次方程的根

一元二次方程:ax²+bx+c=0
△=b²-4ac
△<0 无实根,得出来的解叫共轭复根
△=0 两个相等的实根
△>0 两个不等的实根

#include <stdio.h>              //包含标准库的信息
#include <math.h>               //<math.h> 头文件中声明了一些数学函数和宏
int main(void)                  //每个程序都从main函数的起点开始执行
{
    double a,b,c,disc,x1,x2,realpart,imagpart;              //a,b,c为一元二次方程的系数,disc为△
    printf("请输入一元二次方程的三个系数:");
    scanf("%lf%lf%lf",&a,&b,&c);
    if (fabs(a) <= 1e-6) //误差小于10^(-6)
    {
        printf("不是一元二次方程\n");
    }else
    {
        disc = b * b - 4 * a * c;   //代表△=b²-4ac
        /*
         * 由于△是实数,而实数在计算和存储时存在误差,因此不能直接用disc==0做判断。
         * 因为这样可能会出现本来是0的量,由于误差被判别为不等于0二导致结果错误
         * */
        if (fabs(disc) <= 1e-6)    //fabs是取绝对值。判断disc是否小于一个很小的数,1e-6=10^(-6)。若小于此数,就认为disc为0
            printf("有两个相等的实根:%8.4f\n",-b/(2 * a));
        else if(disc > 1e-6)
        {
            x1 = (-b + sqrt(disc))/(2 * a);
            x2 = (-b - sqrt(disc))/(2 * a);
            printf("有两个不等的实根:%8.4f and %8.4f\n",x1,x2);
        } else{
            realpart = -b/(2 * a);          //realart是复根的实部
            imagpart = sqrt(-disc)/(2 * a); //imagpart是复根的虚部,sqrt:开平方根
            printf("有共轭复根:\n");
            printf("%8.4f + %8.4fi\n",realpart,imagpart);//输出一个复根
            printf("%8.4f - %8.4fi\n",realpart,imagpart);//输出另一个复根
        }
    }
    return 0;
}

运行

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42294351/article/details/107082631