求一元二次方程的根C语言共轭
时间: 2024-09-22 15:09:14 浏览: 41
在C语言中,求解一元二次方程的根通常涉及到计算方程 ax^2 + bx + c = 0 的两个解,其中 a、b 和 c 是给定的系数。如果方程有实数根,可能会出现复数情况,这时就需要处理共轭复数对。这里提供一种基本的步骤:
1. 首先检查判别式 D = b^2 - 4ac,判断根的情况:
- 如果 D > 0,有两个不相等的实数根。
- 如果 D = 0,有一个重根(重复根)。
- 如果 D < 0,有两个共轭复数根。
2. 根据判别式公式计算根:
- 实数根:x1, x2 = (-b ± sqrt(D)) / (2a)
- 复数根:对于 D < 0,设 r = -b / (2a),θ = arccos(-c / (sqrt(a)*sqrt(-D))),则 x1, x2 = r + iθ 和 r - iθ,其中 i 是虚数单位。
以下是简化版的C代码示例,用于求解实数根,共轭复数根部分需要引入复数库,比如`complex.h`:
```c
#include <stdio.h>
#include <math.h>
double quadratic(double a, double b, double c) {
double discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
double root1 = (- sqrt(discriminant)) / (2 * a);
printf("实数根: %.2lf, %.2lf\n", root1, root2);
} else if (discriminant == 0) {
double root = -b / (2 * a);
printf("重根: %.2lf\n", root);
} else { // D < 0, 实际上这里不会直接打印,因为后续处理复数根需要库支持
double r = -b / (2 * a), theta = acos(-c / sqrt(fabs(a) * sqrt(-discriminant)));
complex double complex_root1 = r + I * theta;
complex double complex_root2 = r - I * theta;
// 使用复数库输出复数根
}
}
int main() {
double a, b, c;
printf("请输入一元二次方程的系数 a, b, c: ");
scanf("%lf %lf %lf", &a, &b, &c);
quadratic(a, b, c);
return 0;
}
```
阅读全文