solution.md 3.0 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2
# 求解一元二次方程组根问题

ToTensor's avatar
ToTensor 已提交
3 4 5 6 7 8 9 10
<pre>利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax<sup>2</sup> + bx + c =0 的根,其中a不等于0。<br />
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax<sup>2</sup> + bx + c =0 的系数。输出一行,表示方程的解。<br />
若两个实根相等,则输出形式为:x1=x2=...。<br />
若两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,其中x1,x2满足以下两个条件中的一个:<br />
1. x1的实部大于x2的实部<br />
2. x1的实部等于x2的实部且x1的虚部大于等于x2的虚部<br />
所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。<br />
样例输入:1.0 2.0 8.0<br />
每日一练社区's avatar
每日一练社区 已提交
11 12
样例输出:x1=-1.00000+2.64575i;x2=-1.00000-2.64575i</pre>

ToTensor's avatar
ToTensor 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
以下程序实现了这一功能,请你填补空白处的内容:

```cpp
#include <iostream>
#include <iomanip>
#include <cmath>
#include <complex>
using namespace std;
static const double e = 1e-12;
_______________________________
int main()
{
    complex<double> a, b, c;
    complex<double> 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;
}
```

每日一练社区's avatar
每日一练社区 已提交
52 53 54 55
## template

```cpp
#include <iostream>
ToTensor's avatar
ToTensor 已提交
56
#include <iomanip>
每日一练社区's avatar
每日一练社区 已提交
57 58 59 60
#include <cmath>
#include <complex>
using namespace std;
static const double e = 1e-12;
ToTensor's avatar
ToTensor 已提交
61
bool operator==(complex<double> c1, complex<double> c2) { return abs(c1 - c2) < e; }
每日一练社区's avatar
每日一练社区 已提交
62 63
int main()
{
ToTensor's avatar
ToTensor 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
    complex<double> a, b, c;
    complex<double> 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;
每日一练社区's avatar
每日一练社区 已提交
88 89 90 91 92 93
}
```

## 答案

```cpp
ToTensor's avatar
ToTensor 已提交
94
bool operator==(complex<double> c1, complex<double> c2) { return abs(c1 - c2) < e; }
每日一练社区's avatar
每日一练社区 已提交
95 96 97 98 99 100 101
```

## 选项

### A

```cpp
ToTensor's avatar
ToTensor 已提交
102
;
每日一练社区's avatar
每日一练社区 已提交
103 104 105 106 107
```

### B

```cpp
ToTensor's avatar
ToTensor 已提交
108
bool operator==(complex<double> c1, complex<double> c2) { return abs(c1 - c2) > e; }
每日一练社区's avatar
每日一练社区 已提交
109 110 111 112 113
```

### C

```cpp
ToTensor's avatar
ToTensor 已提交
114
bool operator==(complex<double> c1, complex<double> c2) { return abs(c1 - c2) >= e; }
每日一练社区's avatar
每日一练社区 已提交
115
```