

不知道哪里出错了,程序也没有报错,输入多少值都是只输出两个相等的实根,哭了
关注引自免费微信小程序:皆我百晓生
从你提供的代码来看,存在一些逻辑错误和语法错误,这些错误导致了程序总是输出两个相等的实根,无论输入的参数如何。下面是修改后的代码,解决了这些问题:
#include <stdio.h>
#include <math.h>
int main() {
float a, b, c, x1, x2, p, q, delta;
printf("请输入a,b,c的值:");
scanf("%f%f%f", &a, &b, &c);
// 检查是否为二次方程
if (fabs(a) <= 1e-6) {
printf("不是二次方程,而是一次方程\n");
return 0;
}
delta = (b * b) - (4 * a * c);
if (fabs(delta) <= 1e-6) { // 判别式接近于零,有两相等实根
x1 = -b / (2 * a);
printf("有两个相等的实根:x1=x2=%f\n", x1);
} else if (delta > 1e-6) { // 判别式大于零,有两不等实根
x1 = (-b - sqrt(delta)) / (2 * a);
x2 = (-b + sqrt(delta)) / (2 * a);
printf("有两个不相等的实根:x1=%f, x2=%f\n", x1, x2);
} else { // 判别式小于零,有两共轭复根
p = -b / (2 * a);
q = sqrt(-delta) / (2 * a);
printf("有两个共轭复根:x1=%5.4f+%5.4fi\n", p, q);
printf("有两个共轭复根:x2=%5.4f-%5.4fi\n", p, -q);
}
return 0;
}
主要修改包括:
if (a <= 1e-6) 改为 if (fabs(a) <= 1e-6) 来正确处理负数的情况。\n 在 printf 函数中,以确保输出格式正确。这样修改后,程序应该能根据输入的一元二次方程的系数正确判断并输出方程的解类型(实根、相等实根或复根)。