PTA:7-89 求一元二次方程的根

作者 朱会东

单位 郑州轻工业大学

求一元二次方程ax2+bx+c=0的根。

输入格式:

输入三个用空格隔开的实数a、b、c,分别表示一元二次方程的系数,并保证a不为0。

输出格式:

在一行中输出方程的实根,每个根占宽度15,保留5位小数,右对齐,如果有两个相同的实根,只需要输出一个数,如果有两个不同的实根,按从小到大的顺序输出;如果没有实根,请输出字符串“No Answer”。

输入样例:

2 3 -6

输出样例:

       -2.63746        1.13746

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <math.h>
int main()
{
    double A, B, C;
    scanf("%lf %lf %lf", &A, &B, &C);
    // 判断系数a是否为0
    if (A == 0) {
        printf("No Answer");   // 如果为0,无解
        return 0;
    }
    // 计算判别式delta
    double delta = B * B - 4 * A * C;
    if (delta < 0) {           // 如果delta小于0,无实数根
        printf("No Answer");
        return 0;
    }
    // 根据公式计算两个解
    double x1 = (-B - sqrt(delta)) / (2 * A);
    double x2 = (-B + sqrt(delta)) / (2 * A);
    // 将两个根的顺序调整为从小到大,并去除重复根
    if (fabs(x1 - x2) < 0.000001) {         // 如果两个根相等,只输出一个根
        printf("%15.5f", x1);
    } else {
        if (x1 > x2) {                // 如果x1大于x2,则交换两个根的值
            double t = x1; x1 = x2; x2 = t;
        }
        printf("%15.5f%15.5f", x1, x2); // 输出两个根,使用printf函数格式化输出
    }
    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值