C 语言求一元二次方程的解

代码已经写好,没有错误,能够运行,但是运行的结果不对 X﹏X,有 uu 可以帮忙看看嘛

img

if里面逗号改成&&
另外,浮点数double不要long
不要==0这样比较,应该采用两数相减绝对值小于0.0000001 这样,因为浮点数有误差

if里面与用&&,逗号表达式的最终结果是最后一个式子的值。

【以下回答由 GPT 生成】

问题:该程序的问题可能在于对用户输入的检查不够严谨,导致了程序运行时有可能出现异常。

具体问题及解决方案: 1. 输入验证不完善:程序没有检查用户输入的系数a是否为0,导致可能出现除0错误。解决方法是在用户输入前进行判断,如果a为0,则直接输出提示信息。 2. 根的计算有误:在计算根的过程中,使用了double类型的变量p和q来保存根的值,但是题目要求要使用long double类型。解决方法是将变量p和q的类型改为long double。 3. 输出格式问题:在输出解的时候,直接使用%Lf作为格式化字符串,并且没有在结束符号\n前加上空格。解决方法是将%Lf改为%.15Lf来保证输出的精度,并在结束符号前加上空格。

下面是修正后的代码:

#include<stdio.h>
#include<math.h>

int main() {
    long double a, b, c, disc, x, x1, x2, p, q;

    printf("请输入一元二次方程的系数a、b、c:");
    scanf("%Lf %Lf %Lf", &a, &b, &c);

    if (a == 0) {
        printf("a的值不能为0!\n");
        return 0;
    }

    disc = b * b - 4 * a * c;

    if (disc >= 0) {
        p = -b / (2.0 * a);
        q = sqrtl(disc) / (2.0 * a);
        x1 = p + q;
        x2 = p - q;
        printf("方程的解为:x1 = %.15Lf,x2 = %.15Lf\n", x1, x2);
    }
    else {
        printf("该方程无实数解!\n");
    }

    return 0;
}

我认为以上修正后的代码可以解决该问题,具体的问题原因和解决方案如上所述。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^