用C++求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。
时间: 2024-10-03 13:01:09 浏览: 82
在C++中,我们可以创建三个函数来处理一元二次方程\( ax^2 + bx + c = 0 \)的不同情况。这里是一个简单的示例:
首先,我们定义一个函数`double quadraticRoots(double a, double b, double c)`,它会根据判别式`b² - 4ac`来决定调用哪两个辅助函数。
```cpp
#include <iostream>
#include <cmath>
// 函数用于计算判别式并确定解的情况
void calculateQuadraticSolution(double a, double b, double c, bool positiveDiscriminant, double& x1, double& x2) {
if (positiveDiscriminant) { // 当判别式大于0
x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
} else if (fabs(b * b - 4 * a * c) == 0) { // 判别式等于0
x1 = x2 = -b / (2 * a);
} else { // 判别式小于0
double imaginaryPart = sqrt(-b * b + 4 * a * c) / (2 * a); // 实部为0,虚部为正值
x1 = complex<double>(0, imaginaryPart);
x2 = complex<double>(0, -imaginaryPart);
}
}
int main() {
double a, b, c;
std::cout << "请输入一元二次方程的系数a, b, c:" << std::endl;
std::cin >> a >> b >> c;
double x1, x2; // 存储两个根
bool discriminantPositive = b * b > 4 * a * c; // 判断判别式是否大于0
calculateQuadraticSolution(a, b, c, discriminantPositive, x1, x2);
// 输出根
if (discriminantPositive) {
std::cout << "有两个实数根:x1 = " << x1 << ", x2 = " << x2 << std::endl;
} else if (fabs(b * b - 4 * a * c) == 0) {
std::cout << "有一个实数根:x = " << x1 << std::endl;
} else {
std::cout << "有两个复数根:x1 = " << x1.real() << " + i" << x1.imag() << ", x2 = " << x2.real() << " - i" << x2.imag() << std::endl;
}
return 0;
}
```
阅读全文