鱼C论坛

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

[已解决]C语言,这个代码写得对吗,还能再修改提升吗

[复制链接]
发表于 2023-11-2 19:36:47 | 显示全部楼层 |阅读模式

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

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

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

  3. int main()
  4. {
  5.         double a, b, c, p, q, x1, x2;
  6.         a = 1.0;
  7.         b = 8.0;
  8.         c = 4.0;
  9.         p = (-b) / (2*a);
  10.         q = sqrt(b*b-4*a*c)/2*a;
  11.         x1 = p+q;
  12.         x2 = p-q;
  13.         printf("%f\n%f", x1,x2);
  14.         return 0;
  15. }
复制代码

这个代码写得对吗,还能再修改提升吗
最佳答案
2023-11-2 19:38:04
C语言代码分析和改进:

这段代码的主要目的是求解一元二次方程的根。现在来分析代码是否正确并提出改进:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     double a, b, c, p, q, x1, x2;
  5.     a = 1.0;
  6.     b = 8.0;
  7.     c = 4.0;
  8.     p = (-b) / (2*a);
  9.     q = sqrt(b*b-4*a*c)/2*a;
  10.     x1 = p+q;
  11.     x2 = p-q;
  12.     printf("%f\n%f", x1,x2);
  13.     return 0;
  14. }
复制代码

代码的逻辑基本正确,可以正确求解一元二次方程的根。然而,有几个地方可以进行改进:

1. 对于计算平方根的部分,应将2*a加上括号,以确保正确的运算顺序:q = sqrt(b*b-4*a*c)/(2*a);

2. 在输出结果时,可以添加一些格式化控制符,使得输出更加美观:printf("x1 = %.2f\nx2 = %.2f\n", x1, x2);

3. 考虑到代码的可读性和可维护性,可以将变量的定义和赋值放在一起,增加代码的清晰度:
  1. double a = 1.0, b = 8.0, c = 4.0;
  2. double p, q, x1, x2;
  3. p = (-b) / (2*a);
  4. q = sqrt(b*b-4*a*c)/(2*a);
  5. x1 = p + q;
  6. x2 = p - q;
复制代码

4. 为了增强代码的健壮性,可以添加对判别式是否小于0的判断,并给出相应的提示信息。

综上所述,以下是改进后的代码:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     double a = 1.0, b = 8.0, c = 4.0;
  5.     double p, q, x1, x2;
  6.     p = (-b) / (2*a);
  7.     q = sqrt(b*b-4*a*c)/(2*a);
  8.     if (b*b-4*a*c < 0) {
  9.         printf("The equation has no real roots.\n");
  10.     } else {
  11.         x1 = p + q;
  12.         x2 = p - q;
  13.         printf("x1 = %.2f\nx2 = %.2f\n", x1, x2);
  14.     }
  15.     return 0;
  16. }
复制代码
希望以上的回答能满足你的需求。如果有任何疑问,请随时提出。

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

使用道具 举报

发表于 2023-11-2 19:37:00 | 显示全部楼层
这段代码是用来解二次方程的,但是有两个问题需要修改:

1. 在计算q的时候,分母的2*a没有加括号,导致计算结果不正确。应该修改为sqrt(b*b-4*a*c)/(2*a)。

2. 在使用printf函数输出x1和x2的时候,缺少了换行符。应该修改为printf("%f\n%f\n", x1, x2)。

修改后的代码如下:

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

  3. int main()
  4. {
  5.     double a, b, c, p, q, x1, x2;
  6.     a = 1.0;
  7.     b = 8.0;
  8.     c = 4.0;
  9.     p = (-b) / (2*a);
  10.     q = sqrt(b*b-4*a*c)/(2*a);
  11.     x1 = p+q;
  12.     x2 = p-q;
  13.     printf("%f\n%f\n", x1, x2);
  14.     return 0;
  15. }
复制代码


这样修改后的代码就能正确计算并输出二次方程的解了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-2 19:38:04 | 显示全部楼层    本楼为最佳答案   
C语言代码分析和改进:

这段代码的主要目的是求解一元二次方程的根。现在来分析代码是否正确并提出改进:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     double a, b, c, p, q, x1, x2;
  5.     a = 1.0;
  6.     b = 8.0;
  7.     c = 4.0;
  8.     p = (-b) / (2*a);
  9.     q = sqrt(b*b-4*a*c)/2*a;
  10.     x1 = p+q;
  11.     x2 = p-q;
  12.     printf("%f\n%f", x1,x2);
  13.     return 0;
  14. }
复制代码

代码的逻辑基本正确,可以正确求解一元二次方程的根。然而,有几个地方可以进行改进:

1. 对于计算平方根的部分,应将2*a加上括号,以确保正确的运算顺序:q = sqrt(b*b-4*a*c)/(2*a);

2. 在输出结果时,可以添加一些格式化控制符,使得输出更加美观:printf("x1 = %.2f\nx2 = %.2f\n", x1, x2);

3. 考虑到代码的可读性和可维护性,可以将变量的定义和赋值放在一起,增加代码的清晰度:
  1. double a = 1.0, b = 8.0, c = 4.0;
  2. double p, q, x1, x2;
  3. p = (-b) / (2*a);
  4. q = sqrt(b*b-4*a*c)/(2*a);
  5. x1 = p + q;
  6. x2 = p - q;
复制代码

4. 为了增强代码的健壮性,可以添加对判别式是否小于0的判断,并给出相应的提示信息。

综上所述,以下是改进后的代码:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     double a = 1.0, b = 8.0, c = 4.0;
  5.     double p, q, x1, x2;
  6.     p = (-b) / (2*a);
  7.     q = sqrt(b*b-4*a*c)/(2*a);
  8.     if (b*b-4*a*c < 0) {
  9.         printf("The equation has no real roots.\n");
  10.     } else {
  11.         x1 = p + q;
  12.         x2 = p - q;
  13.         printf("x1 = %.2f\nx2 = %.2f\n", x1, x2);
  14.     }
  15.     return 0;
  16. }
复制代码
希望以上的回答能满足你的需求。如果有任何疑问,请随时提出。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 09:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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