写一段c++解一元三次方程的根的代码
时间: 2023-06-05 11:05:12 浏览: 177
下面是一段通过C语言解一元三次方程的根的代码:
```c
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, d, m, n, p, q, x1, x2, x3;
printf("请输入一元三次方程的系数:\n");
scanf("%lf %lf %lf %lf", &a, &b, &c, &d); // 依次为x^3, x^2, x, 常数项的系数
if (a == 0) // 判断是否为一元二次方程,不是则输出错误信息
{
printf("系数a不能为0!");
return 0;
}
m = b / a;
n = c / a;
p = d / a;
q = (3 * n - m * m) / 9; // 根据公式求解,化简得到q
x1 = x2 = x3 = 0;
d = q * q * q + (m * m * p - 3 * m * n) / 6;
if (d >= 0)
{
double u = cbrt(d);
x1 = -m / 3 + 2 * u; // 根据公式求解三个根,注意要开3次方
x2 = -m / 3 - u + (m + n) / 3 * sqrt(3);
x3 = -m / 3 - u - (m + n) / 3 * sqrt(3);
printf("三个实根分别是:%lf, %lf, %lf", x1, x2, x3);
}
else
{
double u = 2 * sqrt(q * q * q + q * (m * m * p - 3 * m * n) / 6) - m / 3;
double v = 2 * sqrt(q * q * q - q * (m * m * p - 3 * m * n) / 6) - m / 3;
printf("一个实根为:%lf", u);
printf("\n两个共轭虚根为:%lf+(%lf)i, %lf-(%lf)i", v / 2, sqrt(3) / 2 * v, v / 2, sqrt(3) / 2 * v);
}
return 0;
}
```
当输入一元三次方程的系数后,程序会自动求解方程的三个根,并输出结果。但是需要注意的是,该程序对于系数为0以及另外几种特殊情况的处理还不够严谨,需要进一步完善。
阅读全文