用C++设计一个程序,求方程ax^2+bx+c=0的根
时间: 2024-10-12 13:14:57 浏览: 40
已知二元一次方程ax²+bx+c=0(a≠0),编程实现求解方程的根。(分三种情况考虑)
在C++中,我们可以使用二次公式(也称作毕达哥拉斯定理)来求解一元二次方程 ax^2 + bx + c = 0 的根。这里我们假设a不等于0。以下是创建一个函数的基本步骤:
```cpp
#include <iostream>
#include <cmath>
// 函数声明
void findRoots(double a, double b, double c);
int main() {
double a, b, c;
// 输入方程系数
std::cout << "请输入二次方程的系数(a, b, c): ";
std::cin >> a >> b >> c;
// 检查是否可以计算
if (a == 0) {
std::cout << "错误:一元二次方程的系数a不能为0.\n";
} else {
findRoots(a, b, c);
}
return 0;
}
// 定义求解二次方程根的函数
void findRoots(double a, double b, double c) {
double discriminant = b * b - 4 * a * c; // 计算判别式
if (discriminant > 0) {
// 两个实数根
double root1 = (- sqrt(discriminant)) / (2 * a);
std::cout << "方程有两个不同的实根:\n";
std::cout << "root1 = " << root1 << ",\n";
std::cout << "root2 = " << root2 << ".\n";
} else if (discriminant == 0) {
// 双重根
double root = -b / (2 * a);
std::cout << "方程有一个重根:\n";
std::cout << "root = " << root << ".\n";
} else { // 无实根(复数根)
double realPart = -b / (2 * a);
double imaginaryPart = sqrt(-discriminant) / (2 * a);
std::cout << "方程有复数根:\n";
std::cout << "root1 = " << realPart << " + i" << imaginaryPart << ",\n";
std::cout << "root2 = " << realPart << " - i" << imaginaryPart << ".\n";
}
}
```
这个程序会提示用户输入二次方程的系数,然后根据判别式的正负情况计算并输出根。请注意,C++标准库中的`<cmath>`头文件包含了计算平方根的`sqrt()`函数。
阅读全文