帮我写一个解四次方程的c语言代码要求方程的各个系数由用户输入
以下是解四次方程的C语言代码,其中包括用户输入系数、判断方程是否有解、判断方程是否有重根、以及输出解的过程:
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, d, p, q, x1, x2, x3, x4;
printf("请输入四次方程的各个系数:\n");
printf("a = ");
scanf("%lf", &a);
printf("b = ");
scanf("%lf", &b);
printf("c = ");
scanf("%lf", &c);
printf("d = ");
scanf("%lf", &d);
if (a == 0) {
printf("错误:方程不是四次方程!\n");
return 0;
}
p = (8 * a * c - 3 * b * b) / (8 * a * a);
q = (b * b * b - 4 * a * b * c + 8 * a * a * d) / (8 * a * a * a);
double delta = p * p * p / 27 + q * q / 4;
if (delta > 0) {
double u = cbrt(-q / 2 + sqrt(delta));
double v = cbrt(-q / 2 - sqrt(delta));
x1 = u + v - b / (4 * a);
x2 = -u - v - b / (4 * a);
printf("方程的解为:\n");
printf("x1 = %lf\n", x1);
printf("x2 = %lf\n", x2);
} else if (delta == 0) {
double u = cbrt(-q / 2);
x1 = 2 * u - b / (4 * a);
x2 = -u - b / (4 * a);
printf("方程的解为:\n");
printf("x1 = %lf\n", x1);
printf("x2 = %lf\n", x2);
} else {
double u = acos(-sqrt(-27 / p / p / p * q) / 2);
x1 = 2 * sqrt(-p / 3) * cos(u / 3) - b / (4 * a);
x2 = 2 * sqrt(-p / 3) * cos((u + 2 * M_PI) / 3) - b / (4 * a);
x3 = 2 * sqrt(-p / 3) * cos((u + 4 * M_PI) / 3) - b / (4 * a);
printf("方程的解为:\n");
printf("x1 = %lf\n", x1);
printf("x2 = %lf\n", x2);
printf("x3 = %lf\n", x3);
if (x1 == x2 && x1 == x3) {
printf("方程有一重根:%lf\n", x1);
} else if (x1 == x2 || x1 == x3 || x2 == x3) {
printf("方程有二重根:");
if (x1 == x2) {
printf("%lf,%lf\n", x1, x3);
} else if (x1 == x3) {
printf("%lf,%lf\n", x1, x2);
} else {
printf("%lf,%lf\n", x2, x3);
}
}
}
return 0;
}
其中,a、b、c、d分别表示四次项、三次项、二次项和常数项的系数。p、q分别表示一次项系数、常数项系数的计算结果。delta表示判别式。u、v是用于计算方程的根的中间变量。x1、x2、x3、x4表示方程的四个解。在输出解的过程中,根据解的情况分别进行输出,包括有两个实根、有三个实根、有一重根和有二重根。
原文地址: http://www.cveoy.top/t/topic/bBKo 著作权归作者所有。请勿转载和采集!