# 求解一元二次方程组根问题
利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2 + bx + c =0 的根,其中a不等于0。
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0 的系数。输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=...。
若两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,其中x1,x2满足以下两个条件中的一个:
1. x1的实部大于x2的实部
2. x1的实部等于x2的实部且x1的虚部大于等于x2的虚部
所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。
样例输入:1.0 2.0 8.0
样例输出:x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
以下程序实现了这一功能,请你填补空白处的内容:
```cpp
#include
#include
#include
#include
using namespace std;
static const double e = 1e-12;
_______________________________;
int main()
{
complex a, b, c;
complex x1, x2;
cin >> a >> b >> c;
x1 = (-b + sqrt(b * b - a * c * 4.0)) / (a * 2.0);
x2 = (-b - sqrt(b * b - a * c * 4.0)) / (a * 2.0);
cout << setiosflags(ios::fixed);
cout.precision(6);
if (abs(x1.imag()) < e)
{
if (x1 == x2)
{
cout << "x1=x2=" << x1.real();
}
else
{
cout << "x1=" << x1.real() << ";x2=" << x1.real();
}
}
else
{
cout << "x1=" << x1.real() << "+" << x1.imag() << "i;"
<< "x2=" << x2.real() << "+" << x2.imag() << "i";
}
return 0;
}
```
## template
```cpp
#include
#include
#include
#include
using namespace std;
static const double e = 1e-12;
bool operator==(complex c1, complex c2) { return abs(c1 - c2) < e; }
int main()
{
complex a, b, c;
complex x1, x2;
cin >> a >> b >> c;
x1 = (-b + sqrt(b * b - a * c * 4.0)) / (a * 2.0);
x2 = (-b - sqrt(b * b - a * c * 4.0)) / (a * 2.0);
cout << setiosflags(ios::fixed);
cout.precision(6);
if (abs(x1.imag()) < e)
{
if (x1 == x2)
{
cout << "x1=x2=" << x1.real();
}
else
{
cout << "x1=" << x1.real() << ";x2=" << x1.real();
}
}
else
{
cout << "x1=" << x1.real() << "+" << x1.imag() << "i;"
<< "x2=" << x2.real() << "+" << x2.imag() << "i";
}
return 0;
}
```
## 答案
```cpp
bool operator==(complex c1, complex c2) { return abs(c1 - c2) < e; }
```
## 选项
### A
```cpp
;
```
### B
```cpp
bool operator==(complex c1, complex c2) { return abs(c1 - c2) > e; }
```
### C
```cpp
bool operator==(complex c1, complex c2) { return abs(c1 - c2) >= e; }
```