小羊爱吃小草 发表于 2023-11-6 20:29:37

查错

#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;
}
哪里有问题

isdkz 发表于 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;
}

Mike_python小 发表于 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的值输出出来。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 查错