鱼C论坛

 找回密码
 立即注册
查看: 1091|回复: 2

[已解决]查错

[复制链接]
发表于 2023-11-6 20:29:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int main()
{
        float a, b, c, p, q, x1, x2, x3, x4;
        printf("please input a,b,c\n");
        scanf("%f%f%f", &a, &b, &c);

        p = -b / 2 * a;
        q = sqrt(b * b - 4 * a * c) / 2 * a;

        if(a = 0)
        {
                printf("不是二次方程\n");
        }
        else
        {
                if(b * b - 4 * a * c == 0)
                {
                        printf("有两个相等的实根\n");
                }
                else if((b * b - 4 * a * c) > 0)
                {
                        x1 = p + q;
                        x2 = p - q;
                        printf("有两个不相等实根%.2f,%.2f\n");
                }
                else
                {
                        x3 = p + q * i;
                        x4 = p - q * i;
                        printf("有两个复根%.2f,%.2f\n");
                }
        }
        }
        return 0;
}
哪里有问题
最佳答案
2023-11-6 20:29:50
这段代码有两个问题:

1. 在计算p和q时,运算符的优先级有误,应该加上括号,即 p = -b / (2 * a) 和 q = sqrt(b * b - 4 * a * c) / (2 * a) 。

2. 在判断二次方程有无实根时,使用了错误的赋值运算符“=”,应该使用相等运算符“==”,即 if(a == 0) 。

修改后的代码如下:
#include <stdio.h>
#include <math.h>

int main()
{
    float a, b, c, p, q, x1, x2, x3, x4;
    printf("please input a,b,c\n");
    scanf("%f%f%f", &a, &b, &c);

    p = -b / (2 * a);
    q = sqrt(b * b - 4 * a * c) / (2 * a);

    if(a == 0)
    {
        printf("不是二次方程\n");
    }
    else
    {
        if(b * b - 4 * a * c == 0)
        {
            printf("有两个相等的实根\n");
        }
        else if((b * b - 4 * a * c) > 0)
        {
            x1 = p + q;
            x2 = p - q;
            printf("有两个不相等实根%.2f,%.2f\n", x1, x2);
        }
        else
        {
            x3 = p + q * I;
            x4 = p - q * I;
            printf("有两个复根%.2f+%.2fi,%.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));
        }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-6 20:29:50 | 显示全部楼层    本楼为最佳答案   
这段代码有两个问题:

1. 在计算p和q时,运算符的优先级有误,应该加上括号,即 p = -b / (2 * a) 和 q = sqrt(b * b - 4 * a * c) / (2 * a) 。

2. 在判断二次方程有无实根时,使用了错误的赋值运算符“=”,应该使用相等运算符“==”,即 if(a == 0) 。

修改后的代码如下:
#include <stdio.h>
#include <math.h>

int main()
{
    float a, b, c, p, q, x1, x2, x3, x4;
    printf("please input a,b,c\n");
    scanf("%f%f%f", &a, &b, &c);

    p = -b / (2 * a);
    q = sqrt(b * b - 4 * a * c) / (2 * a);

    if(a == 0)
    {
        printf("不是二次方程\n");
    }
    else
    {
        if(b * b - 4 * a * c == 0)
        {
            printf("有两个相等的实根\n");
        }
        else if((b * b - 4 * a * c) > 0)
        {
            x1 = p + q;
            x2 = p - q;
            printf("有两个不相等实根%.2f,%.2f\n", x1, x2);
        }
        else
        {
            x3 = p + q * I;
            x4 = p - q * I;
            printf("有两个复根%.2f+%.2fi,%.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));
        }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-6 20:31:26 | 显示全部楼层
代码存在如下问题:

1.在第6行缺少空格,造成代码可读性较差。
2.在第9行中,变量p和q的计算公式不正确。应该是-p/(2*a)和sqrt(b * b - 4 * a * c)/(2 * a)。这里漏掉了括号,导致计算结果错误。
3.在第11行中,应该使用双等号“==”进行条件判断,而不是单等号“=”,因为单等号会将a赋值为0,并且条件判断始终为真。
4.在第23、25行中,应该使用printf函数的格式化字符串,将x1、x2、x3、x4的值输出出来。

修改后的代码如下:
#include <stdio.h>#include <math.h>int main() {    float a, b, c, p, q, x1, x2, x3, x4;    printf("please input a, b, c\n");    scanf("%f%f%f", &a, &b, &c);    p = -b / (2 * a);    q = sqrt(b * b - 4 * a * c) / (2 * a);    if(a == 0) {        printf("不是二次方程\n");    } else {        if(b * b - 4 * a * c == 0) {            printf("有两个相等的实根\n");            x1 = x2 = -b / (2 * a);            printf("%.2f, %.2f\n", x1, x2);        } else if(b * b - 4 * a * c > 0) {            printf("有两个不相等实根\n");            x1 = p + q;            x2 = p - q;            printf("%.2f, %.2f\n", x1, x2);        } else {            printf("有两个复根\n");            x3 = p + q * I;            x4 = p - q * I;            printf("%.2f+%.2fi, %.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));        }    }    return 0;}
在修改后的代码中,我们对计算公式进行了修正,并且使用双等号进行条件判断。同时,在输出结果时,使用了printf函数的格式化字符串,将x1、x2、x3、x4的值输出出来。

希望这个解答对你有帮助。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表