uippvv 2024-06-14 23:23 采纳率: 68.8%
浏览 2

c语言一元二次方程的问题

img

img

不知道哪里出错了,程序也没有报错,输入多少值都是只输出两个相等的实根,哭了

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-14 23:23
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码来看,存在一些逻辑错误和语法错误,这些错误导致了程序总是输出两个相等的实根,无论输入的参数如何。下面是修改后的代码,解决了这些问题:

    #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;
    }
    

    主要修改包括:

    1. if (a <= 1e-6) 改为 if (fabs(a) <= 1e-6) 来正确处理负数的情况。
    2. 修正了条件语句中的括号和比较运算符,确保正确的逻辑流程。
    3. 添加了必要的换行符 \nprintf 函数中,以确保输出格式正确。

    这样修改后,程序应该能根据输入的一元二次方程的系数正确判断并输出方程的解类型(实根、相等实根或复根)。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月14日