鱼C论坛

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

[已解决]查错

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

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

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

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

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

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

  10.         if(a = 0)
  11.         {
  12.                 printf("不是二次方程\n");
  13.         }
  14.         else
  15.         {
  16.                 if(b * b - 4 * a * c == 0)
  17.                 {
  18.                         printf("有两个相等的实根\n");
  19.                 }
  20.                 else if((b * b - 4 * a * c) > 0)
  21.                 {
  22.                         x1 = p + q;
  23.                         x2 = p - q;
  24.                         printf("有两个不相等实根%.2f,%.2f\n");
  25.                 }
  26.                 else
  27.                 {
  28.                         x3 = p + q * i;
  29.                         x4 = p - q * i;
  30.                         printf("有两个复根%.2f,%.2f\n");
  31.                 }
  32.         }
  33.         }
  34.         return 0;
  35. }
复制代码

哪里有问题
最佳答案
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) 。

修改后的代码如下:

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

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

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

  10.     if(a == 0)
  11.     {
  12.         printf("不是二次方程\n");
  13.     }
  14.     else
  15.     {
  16.         if(b * b - 4 * a * c == 0)
  17.         {
  18.             printf("有两个相等的实根\n");
  19.         }
  20.         else if((b * b - 4 * a * c) > 0)
  21.         {
  22.             x1 = p + q;
  23.             x2 = p - q;
  24.             printf("有两个不相等实根%.2f,%.2f\n", x1, x2);
  25.         }
  26.         else
  27.         {
  28.             x3 = p + q * I;
  29.             x4 = p - q * I;
  30.             printf("有两个复根%.2f+%.2fi,%.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));
  31.         }
  32.     }
  33.     return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://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) 。

修改后的代码如下:

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

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

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

  10.     if(a == 0)
  11.     {
  12.         printf("不是二次方程\n");
  13.     }
  14.     else
  15.     {
  16.         if(b * b - 4 * a * c == 0)
  17.         {
  18.             printf("有两个相等的实根\n");
  19.         }
  20.         else if((b * b - 4 * a * c) > 0)
  21.         {
  22.             x1 = p + q;
  23.             x2 = p - q;
  24.             printf("有两个不相等实根%.2f,%.2f\n", x1, x2);
  25.         }
  26.         else
  27.         {
  28.             x3 = p + q * I;
  29.             x4 = p - q * I;
  30.             printf("有两个复根%.2f+%.2fi,%.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));
  31.         }
  32.     }
  33.     return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://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的值输出出来。

修改后的代码如下:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     float a, b, c, p, q, x1, x2, x3, x4;
  5.     printf("please input a, b, c\n");
  6.     scanf("%f%f%f", &a, &b, &c);
  7.     p = -b / (2 * a);
  8.     q = sqrt(b * b - 4 * a * c) / (2 * a);
  9.     if(a == 0) {
  10.         printf("不是二次方程\n");
  11.     } else {
  12.         if(b * b - 4 * a * c == 0) {
  13.             printf("有两个相等的实根\n");
  14.             x1 = x2 = -b / (2 * a);
  15.             printf("%.2f, %.2f\n", x1, x2);
  16.         } else if(b * b - 4 * a * c > 0) {
  17.             printf("有两个不相等实根\n");
  18.             x1 = p + q;
  19.             x2 = p - q;
  20.             printf("%.2f, %.2f\n", x1, x2);
  21.         } else {
  22.             printf("有两个复根\n");
  23.             x3 = p + q * I;
  24.             x4 = p - q * I;
  25.             printf("%.2f+%.2fi, %.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));
  26.         }
  27.     }
  28.     return 0;
  29. }
复制代码

在修改后的代码中,我们对计算公式进行了修正,并且使用双等号进行条件判断。同时,在输出结果时,使用了printf函数的格式化字符串,将x1、x2、x3、x4的值输出出来。

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 01:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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