


是哪里错啦哪里错啦 不管输入多大数字都只会输出两个相等的根,!
关注引自免费微信小程序:皆我百晓生
从你提供的代码来看,主要的问题在于条件语句的书写不正确以及部分逻辑处理上的疏漏。以下是修改后的代码,解决了上述问题,并且包含了完整的逻辑处理:
#include <stdio.h>
#include <math.h>
int main() {
float a, b, c, x1, x2, delta;
printf("请输入a,b,c的值:");
scanf("%f %f %f", &a, &b, &c);
delta = b * b - 4 * a * c;
// 处理a=0的情况
if (a == 0) {
if (b != 0) {
printf("不是二次方程,而是一次方程\n");
x1 = -c / b;
printf("x = %f\n", x1);
} else {
printf("既非二次也非一次方程,而是常数方程\n");
if (c == 0) {
printf("所有实数都是解\n");
} else {
printf("无解\n");
}
}
}
// 处理a!=0的情况
else {
if (delta > 0) {
x1 = (-b - sqrt(delta)) / (2 * a);
x2 = (-b + sqrt(delta)) / (2 * a);
printf("有两个不等的实根:x1 = %f, x2 = %f\n", x1, x2);
} else if (delta == 0) {
x1 = -b / (2 * a);
printf("有两个相等的实根:x1 = x2 = %f\n", x1);
} else { // delta < 0
float realPart = -b / (2 * a);
float imaginaryPart = sqrt(-delta) / (2 * a);
printf("有两个共轭复根:x1 = %f + %fi, x2 = %f - %fi\n", realPart, imaginaryPart, realPart, imaginaryPart);
}
}
return 0;
}
if(a=0) 应改为 if(a==0),因为 = 是赋值操作符,而 == 是比较操作符。delta == 0)应该避免,因为浮点运算可能存在精度误差。但在本例中,由于我们只关心 delta 是否严格等于零,直接使用 == 是可以接受的。a==0 的额外处理,包括当 b 和 c 也等于零的情况。请使用这段代码进行测试,它应该能正确处理所有提到的一元二次方程的四种情况。