首页 > 试题广场 >

计算一元二次方程

[编程题]计算一元二次方程
  • 热度指数:388 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
从键盘输入a, b, c的值,编程计算并输出一元二次方程ax2 + bx + c = 0的根,当a = 0时,输出“Not quadratic equation”,当a ≠ 0时,根据△ = b2 - 4*a*c的三种情况计算并输出方程的根。

输入描述:
多组输入,一行,包含三个浮点数a, b, c,以一个空格分隔,表示一元二次方程ax2 + bx + c = 0的系数。


输出描述:

针对每组输入,输出一行,输出一元二次方程ax2 + bx +c = 0的根的情况。

  如果a = 0,输出“Not quadratic equation”;

  如果a ≠  0,分三种情况:

△ = 0,则两个实根相等,输出形式为:x1=x2=...

△  > 0,则两个实根不等,输出形式为:x1=...;x2=...,其中x1  <=  x2。

△  < 0,则有两个虚根,则输出:x1=实部-虚部i;x2=实部+虚部i,即x1的虚部系数小于等于x2的虚部系数,实部为0时不可省略。实部= -b / (2*a),虚部= sqrt(-△ ) / (2*a)

所有实数部分要求精确到小数点后2位,数字、符号之间没有空格。

示例1

输入

2.0 7.0 1.0

输出

x1=-3.35;x2=-0.15
示例2

输入

0.0 3.0 3.0

输出

Not quadratic equation
示例3

输入

1 2 1

输出

x1=x2=-1.00
示例4

输入

2 2 5

输出

x1=-0.50-1.50i;x2=-0.50+1.50i
示例5

输入

1 0 1

输出

x1=0.00-1.00i;x2=0.00+1.00i
推荐
#include <bits/stdc++.h>
using namespace std;

int main()
{
    double a, b, c;
    
    while (scanf("%lf%lf%lf", &a, &b, &c) == 3){
        if (a == 0) puts("Not quadratic equation");
        else {
            double tmp = b * b - 4 * a * c;
            if (fabs(tmp) < 1e-10) {
                printf("x1=x2=%.2f\n", -b / (2 * a));
            } else if (tmp > -1e-10) {
                double p = sqrt(tmp);
                printf("x1=%.2f;x2=%.2f\n", (-b - p) / (2 * a), (-b + p) / (2 * a));
            } else {
                double r = -b / (2 * a);
                // if (int(r * 100 + 0.5) == 0) r = 0;
                double p = sqrt(-tmp);
                printf("x1=%.2f%+.2fi;x2=%.2f%+.2fi", r, -p / (2 * a), r, p / (2 * a));
            }
        }
    }
}

这道题就是一个一元二次方程求解,需要主要的是输出虚数解时格式的控制 %+.2f表示的是输出保留两位小数并且带上正负号
编辑于 2019-06-17 12:20:55 回复(1)
有个为挺奥,说好了一次性输入三个数字的 你输入6个我咋过奥 自闭
发表于 2020-03-11 10:55:22 回复(0)