求一元二次方程 ax^2+bx+c=0 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。结果保留三位小数。
时间: 2023-11-29 12:01:23 浏览: 158
一元二次方程求根
好的,您的问题是关于数学方程的,我可以回答。下面是我的回答:
当 $b^2-4ac>0$ 时,方程有两个实根,可以用以下公式求解:
$$x_1=\frac{-b+\sqrt{b^2-4ac}}{2a},\quad x_2=\frac{-b-\sqrt{b^2-4ac}}{2a}$$
当 $b^2-4ac=0$ 时,方程有一个实根,可以用以下公式求解:
$$x_1=\frac{-b}{2a}$$
当 $b^2-4ac<0$ 时,方程有两个复数根,可以用以下公式求解:
$$x_{1,2}=\frac{-b\pm i\sqrt{4ac-b^2}}{2a}$$
下面是三个用于求解根的函数实现(请将代码复制到编辑器中运行):
```
#include <iostream>
#include <cmath>
#include <complex>
#include <iomanip>
using namespace std;
void solveGreaterThanZero(const double a, const double b, const double c)
{
double x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
double x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
cout << fixed << setprecision(3) << x1 << ", " << x2 << endl;
}
void solveEqualToZero(const double a, const double b, const double c)
{
double x = -b / (2 * a);
cout << fixed << setprecision(3) << x << endl;
}
void solveLessThanZero(const double a, const double b, const double c)
{
complex<double> x1, x2;
x1 = (-b + sqrt(complex<double>(b * b - 4 * a * c))) / (2 * a);
x2 = (-b - sqrt(complex<double>(b * b - 4 * a * c))) / (2 * a);
cout << fixed << setprecision(3) << x1.real() << "+" << x1.imag() << "i, " << x2.real() << "+" << x2.imag() << "i" << endl;
}
int main()
{
double a, b, c;
cin >> a >> b >> c;
double delta = b * b - 4 * a * c;
if (delta > 0) {
solveGreaterThanZero(a, b, c);
} else if (delta == 0) {
solveEqualToZero(a, b, c);
} else {
solveLessThanZero(a, b, c);
}
return 0;
}
```
希望我的回答对你有帮助。
阅读全文