c++ 解一元二次方程代码
时间: 2023-04-01 14:02:37 浏览: 123
请看下面的代码:
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, delta, x1, x2;
printf("请输入一元二次方程的系数:\n");
printf("a = ");
scanf("%lf", &a);
printf("b = ");
scanf("%lf", &b);
printf("c = ");
scanf("%lf", &c);
delta = b * b - 4 * a * c;
if (delta < )
{
printf("方程无实数根!\n");
}
else if (delta == )
{
x1 = x2 = -b / (2 * a);
printf("方程有两个相等的实数根:x1 = x2 = %.2f\n", x1);
}
else
{
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("方程有两个不相等的实数根:x1 = %.2f,x2 = %.2f\n", x1, x2);
}
return ;
}
相关问题
c++解一元二次方程不用函数
在C++中,你可以直接通过编程实现解一元二次方程的过程,而不是使用现成的数学函数。一元二次方程的一般形式是 ax^2 + bx + c = 0,其中a、b、c是常数,x是你需要找到的变量。这里提供一种简单的方式来求解:
```cpp
#include <iostream>
#include <cmath>
// 解一元二次方程的主函数
void solveQuadraticEquation(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 << "有两个实根: " << root1 << " 和 " << root2 << std::endl;
} else if (discriminant == 0) { // 只有一个实根
double root = -b / (2 * a);
std::cout << "有一个实根: " << root << std::endl;
} else { // 无实根(复数根)
double realPart = -b / (2 * a);
double imaginaryPart = std::sqrt(-discriminant) / (2 * a);
std::cout << "有两个复数根: " << realPart << " ± " << imaginaryPart << "i" << std::endl;
}
}
int main() {
double a, b, c;
std::cout << "请输入一元二次方程的系数(a, b, c): ";
std::cin >> a >> b >> c;
solveQuadraticEquation(a, b, c);
return 0;
}
```
在这个例子中,用户会被提示输入方程的系数,然后程序会计算并显示方程的解。注意,这个代码没有使用内置的数学库函数,而是利用了`std::sqrt()`来计算平方根。
C++解一元二次方程的复数根
在C++中,解决一元二次方程(一般形式为ax^2 + bx + c = 0)包括求解实数根和复数根。对于实数根,可以使用公式`x = [-b ± sqrt(b² - 4ac)] / (2a)`;而对于复数根,则涉及到虚部的存在,即当判别式`D = b² - 4ac`小于零时。
处理复数根需要引入复数运算,C++标准库并没有内置的复数数据类型,但你可以自定义一个`Complex`类来代表复数,包含实部和虚部两个成员变量。计算复数根通常会使用到复数乘法、除法和平方根等操作。
下面是一个简单的示例,假设我们有一个`Complex`类:
```cpp
#include <cmath>
class Complex {
public:
double real, imag;
// 构造函数、加减乘除等方法省略...
Complex quadraticRoot(double a, double b, double c) const {
double discriminant = b * b - 4 * a * c;
if (discriminant >= 0) {
return Complex{-b + sqrt(discriminant), 0}; // 实数根
} else {
double r = -b / (2 * a);
double s = sqrt(-discriminant) / (2 * a);
return Complex{r, s}, Complex{r, -s}; // 对称的复数根
}
}
};
// 使用示例
int main() {
Complex c = Complex{1, 0};
auto roots = c.quadraticRoot(1, -3, 2); // 例如解 x^2 - 3x + 2 = 0
for (const auto& root : roots) {
std::cout << "Root: (" << root.real << ", " << root.imag << "i)\n";
}
return 0;
}
```
阅读全文