输入abc,利用求根公式输出两个根的C语言代码
时间: 2024-10-19 16:06:18 浏览: 28
在C语言中,计算二次方程`ax^2 + bx + c = 0`的两个实数根通常需要使用到复数运算,因为如果判别式`b^2 - 4ac`小于零,那么方程就没有实数解。以下是使用牛顿法(这是一种迭代近似求解方法,适用于大多数方程)来估算根的一个示例。请注意,对于更一般的解法,如`sqrt()`函数可能会涉及到库函数,这取决于平台支持。
```c
#include <stdio.h>
#include <math.h>
// 函数声明
double quadratic(double a, double b, double c);
double guess(double x);
int main() {
double a, b, c;
printf("请输入二次方程系数a, b, c: ");
scanf("%lf %lf %lf", &a, &b, &c);
if (a == 0) {
printf("这不是一个二次方程!\n");
return 1;
}
// 计算判别式
double discriminant = b * b - 4 * a * c;
// 实数根处理
if (discriminant >= 0) {
double root1 = (-b + sqrt(discriminant)) / (2 * a);
double root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("两个实数根分别是: %.2f 和 %.2f\n", root1, root2);
} else {
printf("方程无实数解,有复数解: %.2fi 和 %.2fi\n", -b / (2 * a), sqrt(-discriminant) / (2 * a));
}
return 0;
}
// 使用牛顿法作为猜测算法
double guess(double x) {
double f = a * x * x + b * x + c;
double df = 2 * a * x + b;
while (fabs(df) < 1e-6) { // 设置一个足够小的精度阈值
x -= f / df;
f = a * x * x + b * x + c;
df = 2 * a * x + b;
}
return x;
}
// 根据牛顿法得到近似根
double quadratic(double a, double b, double c) {
return guess(0); // 可选择从x=0开始迭代
}
```
阅读全文