求一元二次方程的根(包含对∆的讨论)

发布于:2022-11-28 ⋅ 阅读:(361) ⋅ 点赞:(0)

问题描述

假设有形如:ax2+bx+c=0的一元二次方程,其中a,b,c是任意实数且满足a≠0,请编写一段程序,根据用户输入的a,b,c的值,计算并输出一元二次方程的根。

输入

三个用空格分开的实数,分别表示一元二次方程中的三个系数。 输入数据保证满足条件a≠0。

输出

输出只有一行,即方程的根。 若方程有两个相同的实根,则输出:x1=x2=...; 若方程有两个不相同的实根,则输出:x1=...;x2=...,其中x1>x2; 若方程没有实根,则输出:x1=实部+虚部i;x2=实部-虚部i,其中,实部为0时不能省略,并且必须保证x1的虚部为非负数。 所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。

输入示例

1.0 2.0 8.0

输出示例

x1=-1.00000+2.64575i;x2=-1.00000-2.64575i

我们要考虑方程根的情况,分为三种∆>0,∆<0,∆=0.

1.∆>0

有两个不相等的实根

2.∆<0

两个的复数根。

3.∆=0

有两个相等的实根。

#include<stdio.h>

#include<math.h>

int main(void)

{

    double a,b,c;

    scanf("%lf %lf %lf",&a,&b,&c);

    if(b*b-4*a*c==0)

    {

        printf("x1=x2=%.5lf",-b/(2*a));

    }

    if(b*b-4*a*c>0)

    {

        if((-b+sqrt(fabs(b*b-4*a*c)))/(2*a)>(-b-sqrt(fabs(b*b-4*a*c)))/(2*a))

            printf("x1=%.5lf;x2=%.5lf",(-b+sqrt(fabs(b*b-4*a*c)))/(2*a),(-b-sqrt(fabs(b*b-4*a*c)))/(2*a));

        if((-b+sqrt(fabs(b*b-4*a*c)))/(2*a)<=(-b-sqrt(fabs(b*b-4*a*c)))/(2*a))

            printf("x1=%.5lf;x2=%.5lf",(-b-sqrt(fabs(b*b-4*a*c)))/(2*a),(-b+sqrt(fabs(b*b-4*a*c)))/(2*a));

    }

    if(b*b-4*a*c<0)

    {

        if(b==0)

        {

            printf("x1=0.00000+%.5lfi;x2=0.00000-%.5lfi",sqrt(4*a*c-b*b)/fabs(2*a),sqrt(4*a*c-b*b)/fabs(2*a));

        }

        else

        {

            printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi",-b/(2*a),sqrt(4*a*c-b*b)/fabs(2*a),-b/(2*a),sqrt(4*a*c-b*b)/fabs(2*a));

        }

    return 0;

    }

}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到