c语言实现一元三次方程求根公式
时间: 2023-07-29 15:07:53 浏览: 258
一元三次方程的一般形式为:ax³ + bx² + cx + d = 0
求解一元三次方程的一般步骤如下:
1. 计算 Δ = b² - 3ac
2. 如果 Δ > 0,则有三个实根,公式如下:
x1 = (-b + sqrt(Δ)) / (3a)
x2 = (-b - sqrt(Δ)) / (3a)
x3 = (-b - 2sqrt(Δ)) / (3a)
3. 如果 Δ = 0,则有一个实根和一个二重根,公式如下:
x1 = -b / (3a)
x2 = x3 = (-b + sqrt(Δ)) / (3a)
4. 如果 Δ < 0,则有三个复根,公式如下:
x1 = (-b + sqrt(-3Δ)) / (3a)
x2 = (-b - sqrt(-3Δ)) / (3a)
x3 = -b / (3a)
下面是用 C 语言实现一元三次方程求根的代码:
```c
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, d, delta, x1, x2, x3, p, q;
printf("请输入一元三次方程的系数:\n");
printf("a = ");
scanf("%f", &a);
printf("b = ");
scanf("%f", &b);
printf("c = ");
scanf("%f", &c);
printf("d = ");
scanf("%f", &d);
delta = b * b - 3 * a * c;
if (delta > 0)
{
p = (-b + sqrt(delta)) / (3 * a);
q = (-b - sqrt(delta)) / (3 * a);
x1 = p + q - (b / (3 * a));
x2 = -p / 2 - q / 2 - (b / (3 * a)) + (sqrt(3) / 2) * (p - q) * I;
x3 = -p / 2 - q / 2 - (b / (3 * a)) - (sqrt(3) / 2) * (p - q) * I;
printf("一元三次方程的三个实根为:\n");
printf("x1 = %.2f\n", x1);
printf("x2 = %.2f + %.2fi\n", creal(x2), cimag(x2));
printf("x3 = %.2f + %.2fi\n", creal(x3), cimag(x3));
}
else if (delta == 0)
{
p = -b / (3 * a);
q = p;
x1 = p - (b / (3 * a));
x2 = q / 2 - (b / (3 * a));
x3 = q / 2 - (b / (3 * a));
printf("一元三次方程的一个实根和一个二重根为:\n");
printf("x1 = %.2f\n", x1);
printf("x2 = x3 = %.2f\n", x2);
}
else
{
p = -b / (3 * a);
x1 = p + (2 * sqrt(-delta) / (3 * a));
x2 = p - (sqrt(-delta) / (3 * a)) + ((sqrt(3) / 2) * (sqrt(-delta) / (3 * a))) * I;
x3 = p - (sqrt(-delta) / (3 * a)) - ((sqrt(3) / 2) * (sqrt(-delta) / (3 * a))) * I;
printf("一元三次方程的三个复根为:\n");
printf("x1 = %.2f + %.2fi\n", creal(x1), cimag(x1));
printf("x2 = %.2f + %.2fi\n", creal(x2), cimag(x2));
printf("x3 = %.2f + %.2fi\n", creal(x3), cimag(x3));
}
return 0;
}
```
在这段代码中,我们通过 scanf() 函数获取了方程的系数,然后计算出 Δ 的值。根据 Δ 的值的不同,我们采用不同的公式计算出方程的根,并输出结果。需要注意的是,当 Δ > 0 时,我们采用了一些复数运算,因此需要使用复数类型(complex.h)来表示根的值。