用C语言求一元二次方程根
时间: 2024-11-10 15:14:52 浏览: 25
在C语言中,计算一元二次方程的根需要使用公式法,特别是当已知方程的系数a、b和c时,可以使用下面的公式:
\[ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \]
这是韦达定理的基础,其中`+`号对应的是第一个根(大于0的情况),`-`号对应的是第二个根(可能小于0)。为了编写这样的程序,你需要创建一个函数,接受三个参数a、b和c,并返回两个可能的解。
以下是一个简单的示例:
```c
#include <stdio.h>
#include <math.h>
// 定义计算二次方程根的函数
void quadratic(double a, double b, double c, double *x1, double *x2) {
double discriminant = b * b - 4 * a * c;
if (discriminant > 0) {
*x1 = (-b + sqrt(discriminant)) / (2 * a);
*x2 = (-b - sqrt(discriminant)) / (2 * a);
} else if (discriminant == 0) {
*x1 = *x2 = -b / (2 * a);
} else { // 当判别式小于0时,方程无实根
double realPart = -b / (2 * a), imaginaryPart = sqrt(-discriminant) / (2 * a);
*x1 = complex(realPart, imaginaryPart);
*x2 = complex(realPart, -imaginaryPart); // 注意这里的x1和x2是复数对称
}
}
// 对于复数,这里假设complex()函数从头文件cmath中引入
// 实际上可能需要自定义实现
typedef struct {
double real;
double imag;
} Complex;
Complex complex(double r, double i) {
return {r, i};
}
int main() {
double a, b, c;
double x1, x2;
printf("请输入一元二次方程的系数 a, b, c:\n");
scanf("%lf %lf %lf", &a, &b, &c);
quadratic(a, b, c, &x1, &x2);
printf("方程的两个根是: %.2lf 和 %.2lf\n", x1, x2);
return 0;
}
```
在这个例子中,用户输入a、b和c的值,函数会计算并打印出根。
阅读全文