C++程序 找到二次方程的根
什么是二次方程
二次方程是一个形如下面公式的方程:ax^2 + bx + c = 0,其中 a,b,c 都是常数,x 是未知数。
下面是一个例子:
2x^2 + 5x + 2 = 0
找到二次方程的根
通过解二次方程,我们可以得到方程的两个根。这里只介绍基于公式法和因式分解法求二次方程根的方法。
公式法
根据求根公式,我们可以得到二次方程的根:
x_{1,2} = \frac{-b \pm \sqrt{b^2-4ac}}{2a}
我们可以把上面的公式写成 C ++ 代码,如下所示:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a = 2.0, b = 5.0, c = 2.0;
double delta = b*b - 4*a*c;
if(delta < 0) {
cout << "没有实数解" << endl;
} else if(delta == 0) {
double x = -b / (2*a);
cout << "x=" << x << endl;
} else {
double x1 = (-b + sqrt(delta)) / (2*a);
double x2 = (-b - sqrt(delta)) / (2*a);
cout << "x1=" << x1 << ", x2=" << x2 << endl;
}
return 0;
}
上述代码首先定义了第一、第二个和第三个系数 a、b 和 c 的值,然后计算方程的判别式 delta。
接下来,如果判别式 delta 小于 0,则方程没有实数解;如果判别式 delta 等于 0,则方程有两个相等的实数解;否则,方程有两个不相等的实数解。
因式分解法
如果我们能够因式分解出方程的两个因式,那么方程的两个根也就很容易得到了。
例如,对于上面的例子 2x^2 + 5x + 2 = 0,我们可以首先因式分解得到:
(2x + 1)(x + 2) = 0
从而,我们可以得到方程的两个实数根 x_1 = -\frac{1}{2} 和 x_2 = -2。
同样的,我们可以把上面的公式写成 C ++ 代码,如下所示:
#include <iostream>
using namespace std;
int main() {
double a = 2.0, b = 5.0, c = 2.0;
double x1, x2;
// 因式分解法求根
if(a != 0) {
if(b*b >= 4*a*c) {
x1 = (-b + sqrt(b*b-4*a*c)) / (2*a);
x2 = (-b - sqrt(b*b-4*a*c)) / (2*a);
cout << "x1=" << x1 << ", x2=" << x2 << endl;
} else {
cout << "没有实数解" << endl;
}
} else {
if(b != 0) {
x1 = x2 = -c / b;
cout << "x=" << x1 << endl;
} else {
cout << "没有实数解" << endl;
}
}
return 0;
}
上述代码中,我们首先检查系数 a 是否为 0。如果 a 不为 0,则我们根据判别式来分别计算方程的两个根。如果其判别式为负数,则方程没有实数根。
如果 a 为 0,但 b 不为 0,则方程还可以化为一元一次方程 bx + c = 0,从而得到解 x = -\frac{c}{b}。如果 a 和 b 都为 0,则方程无意义。
总结
通过公式法和因式分解法,我们可以很容易地找到二次方程的根。无论哪种方法,都需要先计算出方程的判别式,然后根据判别式的值进行判断。在实际编程实践中,我们需要注意精度问题,并考虑用户输入的可能错误情况,如系数全为 0 的情况。