鱼C论坛

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

[已解决]C语言 求两根

[复制链接]
发表于 2023-11-4 18:17:00 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.         float a, b, c, disc,x1, x2, p, q;

  6.         printf("please enter the value of a, b, c\n");
  7.         scanf("%f%f%f",&a, &b, &c);

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

  11.         if(disc < 0) {
  12.                 printf("方程无实根\n");
  13.         }
  14.         else {
  15.                 x1 = p + q;
  16.                 x2 = p - q;
  17.                 printf("the root of it is %.2f,%.2f\n",x1, x2);
  18.         }
  19.         return 0;
  20. }
复制代码

写了一个求根的代码,请看看可以完善的地方
最佳答案
2023-11-4 18:17:17
这段代码已经实现了求根的功能,但有几个地方可以进行改进:

1. 输入验证:在接受用户输入之前,应该添加输入验证的代码,以确保用户输入的是有效的浮点数。如果用户输入的是非法字符或者不是浮点数,程序可能会出现错误。

2. 错误处理:当方程没有实根时,程序只是简单地打印出"方程无实根",但没有提供任何错误处理机制。可以考虑使用错误码或异常处理来更好地处理这种情况。

3. 变量命名:变量名应该具有描述性,以便于代码的可读性和维护性。例如,可以将变量p和q改为更有意义的根的一部分,如root1和root2。

4. 输出格式:当前代码中使用了"%.2f"来格式化输出根的值,保留两位小数。这在大多数情况下是足够的,但如果需要更高的精度,可以使用更多的小数位数。

下面是对代码进行改进后的示例:

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

  3. int main()
  4. {
  5.     float a, b, c, disc, root1, root2;

  6.     printf("请输入a、b、c的值:\n");
  7.     if (scanf("%f%f%f", &a, &b, &c) != 3) {
  8.         printf("输入错误!请确保输入的是有效的浮点数。\n");
  9.         return 1;
  10.     }

  11.     disc = b * b - 4 * a * c;
  12.     if (disc < 0) {
  13.         printf("方程无实根\n");
  14.     } else {
  15.         root1 = (-b + sqrt(disc)) / (2 * a);
  16.         root2 = (-b - sqrt(disc)) / (2 * a);
  17.         printf("方程的实根为:%.4f, %.4f\n", root1, root2);
  18.     }

  19.     return 0;
  20. }
复制代码


这个改进后的代码在接受用户输入之前进行了输入验证,使用了更具描述性的变量名,并在输出中保留了四位小数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-4 18:17:15 | 显示全部楼层
求解一元二次方程的代码完善建议:

- 首先,你的代码已经基本实现了一元二次方程求根的功能,但还可以进行以下改进和完善:

  1. 在用户输入系数之前,可以添加一些提示信息,让用户知道需要输入什么样的值。例如,可以提醒用户输入a、b和c的值,分别代表一元二次方程ax^2 + bx + c = 0的系数。

  2. 考虑到一元二次方程可能存在复数根的情况,可以将根的数据类型由float改为double,以支持更大范围的计算。

  3. 当判别式disc小于零时,可以输出一个更友好的提示信息,告诉用户方程无实根。可以使用合适的语句来描述这种情况。

- 改进后的代码如下所示:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     double a, b, c, disc, x1, x2, p, q;
  5.    
  6.     printf("请输入一元二次方程的系数a、b和c:\n");
  7.     scanf("%lf %lf %lf", &a, &b, &c);
  8.    
  9.     disc = b * b - 4 * a * c;
  10.     p = (-b) / (2 * a);
  11.     q = sqrt(fabs(disc)) / (2 * a); // 使用fabs函数处理负号
  12.    
  13.     if (disc < 0) {
  14.         printf("方程无实根\n");
  15.     } else {
  16.         x1 = p + q;
  17.         x2 = p - q;
  18.         printf("方程的实根为:%.2lf, %.2lf\n", x1, x2);
  19.     }
  20.    
  21.     return 0;
  22. }
复制代码

这里做了如下改进:

- 使用double作为系数和根的数据类型。
- 使用fabs()函数来处理负号,确保在计算平方根时不会出现负数参数的错误。
- 增加了更友好的用户提示信息。

希望以上改进意见能对你有所帮助。如果你还有其他问题,请随时提问。

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

使用道具 举报

发表于 2023-11-4 18:17:17 | 显示全部楼层    本楼为最佳答案   
这段代码已经实现了求根的功能,但有几个地方可以进行改进:

1. 输入验证:在接受用户输入之前,应该添加输入验证的代码,以确保用户输入的是有效的浮点数。如果用户输入的是非法字符或者不是浮点数,程序可能会出现错误。

2. 错误处理:当方程没有实根时,程序只是简单地打印出"方程无实根",但没有提供任何错误处理机制。可以考虑使用错误码或异常处理来更好地处理这种情况。

3. 变量命名:变量名应该具有描述性,以便于代码的可读性和维护性。例如,可以将变量p和q改为更有意义的根的一部分,如root1和root2。

4. 输出格式:当前代码中使用了"%.2f"来格式化输出根的值,保留两位小数。这在大多数情况下是足够的,但如果需要更高的精度,可以使用更多的小数位数。

下面是对代码进行改进后的示例:

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

  3. int main()
  4. {
  5.     float a, b, c, disc, root1, root2;

  6.     printf("请输入a、b、c的值:\n");
  7.     if (scanf("%f%f%f", &a, &b, &c) != 3) {
  8.         printf("输入错误!请确保输入的是有效的浮点数。\n");
  9.         return 1;
  10.     }

  11.     disc = b * b - 4 * a * c;
  12.     if (disc < 0) {
  13.         printf("方程无实根\n");
  14.     } else {
  15.         root1 = (-b + sqrt(disc)) / (2 * a);
  16.         root2 = (-b - sqrt(disc)) / (2 * a);
  17.         printf("方程的实根为:%.4f, %.4f\n", root1, root2);
  18.     }

  19.     return 0;
  20. }
复制代码


这个改进后的代码在接受用户输入之前进行了输入验证,使用了更具描述性的变量名,并在输出中保留了四位小数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 14:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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