用c语言 函数调用求一元二次方程的解 编一个名为 root 的函数,求方程 ax^2 + bx+c 的根,并输出。 其中的 a、b、c 作为函数的形式参数。
时间: 2024-12-31 18:49:10 浏览: 13
在C语言中,你可以通过使用牛顿迭代法或者复数数学库如`<complex.h>`来求解一元二次方程的实数根。不过,标准库并不直接提供求根的函数。下面是一个简单的例子,展示了如何使用牛顿迭代法并假设a不等于0的情况来编写`root`函数:
```c
#include <stdio.h>
#include <math.h>
// 定义辅助函数,用于计算x的新值
double newton_raphson(double x, double a, double b, double c) {
return x - (a * x * x + b * x + c) / (2 * a);
}
// 函数root计算并返回方程ax^2+bx+c的实数根
double root(double a, double b, double c) {
// 检查特殊情况:如果a=0,方程不是二次方程,所以返回错误信息
if (a == 0) {
printf("Error: 'a' must not be zero for a quadratic equation.\n");
return -1; // 返回特殊标记表示无法求解
}
// 初始猜测为-1和1,然后使用牛顿迭代法收敛到根
double x1 = -1.0;
double x2 = 1.0;
// 使用双精度浮点数防止数值误差影响结果
double epsilon = DBL_EPSILON * abs(a); // 选择一个小于a绝对值的精度
while (fabs(newton_raphson(x1, a, b, c) - newton_raphson(x2, a, b, c)) > epsilon) {
double mid = (x1 + x2) / 2;
if (newton_raphson(mid, a, b, c) * newton_raphson(x1, a, b, c) < 0) {
x2 = mid;
} else {
x1 = mid;
}
}
return x1;
}
int main() {
double a, b, c;
printf("Enter coefficients 'a', 'b', and 'c': ");
scanf("%lf %lf %lf", &a, &b, &c);
// 调用函数并输出结果
double root_val = root(a, b, c);
if (root_val != -1) {
printf("The real root of the equation is: %.6f\n", root_val);
}
return 0;
}
```
阅读全文