0
点赞
收藏
分享

微信扫一扫

pta求一元二次方程的根

吃面多放酱 2022-01-18 阅读 399

本题目要求一元二次方程ax ^ 2+bx+c=0的根,结果保留2位小数。

输入格式:
输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

输出格式:
根据系数情况,输出不同结果:

1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;

2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;

3)如果方程只有一个根,则直接输出此根;

4)如果系数都为0,则输出"Zero Equation";

5)如果a和b为0,c不为0,则输出"Not An Equation"。

输入样例1:

输出样例1:

输入样例2:

输出样例2:

输入样例3:

输出样例3:

输入样例4:

输出样例4:

输入样例5:

输出样例5:

#include <stdio.h>
#include <math.h>

double a, b, c;
double x1, x2;
double sanjiao;
double p, q;

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

    if (a == 0 && b == 0 && c == 0)
    {
        printf("Zero Equation");
    }
    else if (a == 0 && b == 0 && c != 0)
    {
        printf("Not An Equation");
    }
    else if (a == 0 && b != 0)
    {
        printf("%.2lf\n", -c * 1.0 / b);
    }
    else
    {
        sanjiao = b * b - 4 * a * c;
        if (sanjiao >= 0)
        {
            x1 = (-b + sqrt(sanjiao)) / (2.0 * a);
            x2 = (-b - sqrt(sanjiao)) / (2.0 * a);
            if (x1 == x2)
            {
                printf("%.2f", x1);
            }
            else
            {
                if (x1 > x2)
                {
                    printf("%.2f\n%.2f", x1, x2);
                }
                else
                {
                    printf("%.2f\n%.2f", x2, x1);
                }
            }
        }
        else
        {
            p = (-b) / (2 * a);
            q = sqrt(fabs(sanjiao)) / (2 * a);
            if (p == 0)
            {
                p = 0;
            }
            printf("%.2f+%.2fi\n", p, q);
            printf("%.2f-%.2fi", p, q);
        }
    }
    
    return 0;
}
举报

相关推荐

0 条评论