# 求解一元二次方程组根问题
利用公式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; } ```