一元二次方程的求解:求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0、等于 0 和 小于0时的根并输出结果。从主函数输入 a、b、c 的值
时间: 2024-10-09 07:04:07 浏览: 237
一元二次方程 ax^2 + bx + c = 0 的求解通常涉及三种情况,取决于判别式 b^2 - 4ac 的值:
1. 当判别式 Δ > 0 (即 b^2 - 4ac > 0) 时,方程有两个实数解,可以使用公式 x = [-b ± sqrt(b^2 - 4ac)] / 2a 来计算。这里 `sqrt` 表示平方根。
2. 如果Δ = 0 (即 b^2 - 4ac = 0),方程有一个重根,也就是两个相同的实数解,x = -b / 2a。
3. 当 Δ < 0 (即 b^2 - 4ac < 0) 时,方程无实数解,但是有复数解,这个情况通常不直接计算,因为不是常规的一元二次方程解的情况。
在编程中,你可以创建三个函数分别处理这三种情况:
```cpp
#include <iostream>
#include <cmath>
// 函数1:两个实数解
void solveQuadraticWithTwoRoots(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
double root1 = (-b + std::sqrt(discriminant)) / (2 * a);
double root2 = (-b - std::sqrt(discriminant)) / (2 * a);
std::cout << "Two real roots: " << root1 << ", " << root2 << std::endl;
}
}
// 函数2:一个实数解(重根)
void solveQuadraticWithOneRoot(double a, double b, double c) {
if (discriminant == 0) {
double root = -b / (2 * a);
std::cout << "One real repeated root: " << root << std::endl;
}
}
// 函数3:无实数解
void solveQuadraticNoRealRoots(double a, double b, double c) {
if (discriminant < 0) {
std::cout << "No real roots, complex roots exist." << std::endl;
}
}
int main() {
double a, b, c;
// 从用户处获取 a, b, c 的值...
// 分别调用函数,根据判别式的值决定调用哪个
double discriminant = b * b - 4 * a * c;
if (discriminant > 0)
solveQuadraticWithTwoRoots(a, b, c);
else if (discriminant == 0)
solveQuadraticWithOneRoot(a, b, c);
else
solveQuadraticNoRealRoots(a, b, c);
return 0;
}
```
阅读全文