用c语言求解一元二次方程a·x2+b·x+c=0的根
时间: 2024-09-30 13:15:04 浏览: 37
Java Application和Applet两种方式求一元二次方程ax2+bx+c=0的根
5星 · 资源好评率100%
在C语言中,我们可以使用数学库`math.h`中的函数来求解一元二次方程 \( ax^2 + bx + c = 0 \) 的根。下面是一个简单的示例程序:
```c
#include <stdio.h>
#include <math.h>
// 函数声明
void quadratic_solver(float a, float b, float c, float *real_roots);
int main() {
float a, b, c;
float real_roots[2]; // 存储两个可能的实根
printf("请输入一元二次方程的系数:\n");
scanf("%f %f %f", &a, &b, &c); // 输入系数
// 检查是否能通过除法运算(避免除以零)
if (a == 0) {
printf("错误:不能除以零,a必须是非零值.\n");
return 1;
}
// 计算判别式
float discriminant = b * b - 4 * a * c;
// 解方程
quadratic_solver(a, b, c, real_roots);
// 判别式和根的输出
if (discriminant > 0) { // 两个不同的实根
printf("有两个不同的实根:%.2f 和 %.2f\n", real_roots[0], real_roots[1]);
} else if (discriminant == 0) { // 一个重根
printf("有一个重根:%.2f\n", real_roots[0]);
} else { // 两个共轭复根
complex_t complex_root = {-b / (2 * a), sqrt(-discriminant) / (2 * a)};
printf("有两个共轭复根:%.2f + %.2fi\n", creal(complex_root), cimag(complex_root));
}
return 0;
}
// 定义求解一元二次方程的函数
void quadratic_solver(float a, float b, float c, float *real_roots) {
float delta = sqrt(discriminant);
real_roots[0] = (-b + delta) / (2 * a);
real_roots[1] = (-b - delta) / (2 * a);
}
```
这个程序首先接收用户输入的系数,然后计算判别式,接着调用`quadratic_solver`函数来计算根,并根据判别式的正负决定输出根的形式。如果判别式是负的,使用了C标准库的`complex.h`头文件来表示复数根。
阅读全文