鱼C论坛

 找回密码
 立即注册
查看: 1739|回复: 3

[已解决]帮我写个完美答案吧!!!

[复制链接]
发表于 2023-9-28 19:26:16 | 显示全部楼层 |阅读模式

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

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

x
  1. 请写一段程序来判断表达式是否相等。

  2. 输入格式:
  3. 只有一行,为三个用空格分隔的浮点数a,b,c(0<a,b,c<100)。

  4. 输出格式:
  5. 也只有一行,如果 a - b 等于c ,则输出yes,否则输出no。
复制代码


我怎么写都只有60分
  1. #include<stdio.h>

  2. int main ()
  3. {
  4.     float a,b,c;
  5.     scanf("%f %f %f",&a,&b,&c);
  6.     double num = a-b;

  7.     if(num == c)
  8.     {
  9.         printf("yes");
  10.     }
  11.     else if (num != c)
  12.     {
  13.         printf("no");
  14.     }
  15.     return 0;
  16. }
复制代码

最佳答案
2023-9-28 19:26:25
你的程序存在精度问题,因为浮点数的计算可能会出现舍入误差。正确的做法是将浮点数转换为整型再进行计算。以下是正确的代码:

  1. #include <stdio.h>

  2. int main() {
  3.     float a, b, c;
  4.     scanf("%f %f %f", &a, &b, &c);
  5.     int x = a * 100 + 0.5;
  6.     int y = b * 100 + 0.5;
  7.     int z = c * 100 + 0.5;
  8.     if (x - y == z) {
  9.         printf("yes");
  10.     } else {
  11.         printf("no");
  12.     }
  13.     return 0;
  14. }
复制代码


这里将浮点数乘以100再加上0.5的方法可以将浮点数四舍五入转换为整型,避免了精度问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-9-28 19:26:25 | 显示全部楼层    本楼为最佳答案   
你的程序存在精度问题,因为浮点数的计算可能会出现舍入误差。正确的做法是将浮点数转换为整型再进行计算。以下是正确的代码:

  1. #include <stdio.h>

  2. int main() {
  3.     float a, b, c;
  4.     scanf("%f %f %f", &a, &b, &c);
  5.     int x = a * 100 + 0.5;
  6.     int y = b * 100 + 0.5;
  7.     int z = c * 100 + 0.5;
  8.     if (x - y == z) {
  9.         printf("yes");
  10.     } else {
  11.         printf("no");
  12.     }
  13.     return 0;
  14. }
复制代码


这里将浮点数乘以100再加上0.5的方法可以将浮点数四舍五入转换为整型,避免了精度问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-28 19:27:02 | 显示全部楼层
判断表达式是否相等的C/C++程序
  1. #include <stdio.h>
  2. int main() {
  3.     float a, b, c;
  4.     scanf("%f %f %f", &a, &b, &c);
  5.    
  6.     float diff = a - b;
  7.    
  8.     if (diff == c) {
  9.         printf("yes");
  10.     } else {
  11.         printf("no");
  12.     }
  13.    
  14.     return 0;
  15. }
复制代码

以上是你提供的代码,如果得分只有60分,可能是由于以下问题:

1. 数据类型不一致:在计算 a - b 后,将结果存储在 double 类型的变量 num 中,而条件判断时使用了 float 类型的变量 c。这样会使数据类型不一致,可能导致判断错误。解决方法是将 num 的数据类型也改为 float

2. 浮点数比较:直接使用 == 运算符判断两个浮点数是否相等可能会存在精度问题。由于浮点数的表示方式,可能会出现微小的误差。应该尽量避免直接比较浮点数的相等性,而是判断它们之间的差值是否在某个可接受的范围内。例如,可以定义一个较小的精度阈值比如 1e-6,然后判断 fabs(diff - c) < 1e-6 来代替 diff == c

修改后的代码如下所示:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.     float a, b, c;
  5.     scanf("%f %f %f", &a, &b, &c);
  6.    
  7.     float diff = a - b;
  8.     float threshold = 1e-6;  // 定义一个精度阈值
  9.    
  10.     if (fabs(diff - c) < threshold) {
  11.         printf("yes");
  12.     } else {
  13.         printf("no");
  14.     }
  15.    
  16.     return 0;
  17. }
复制代码

通过上述修改,你的程序应该能正确判断表达式是否相等。如果还有其他问题或疑惑,请随时提问。

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

使用道具 举报

 楼主| 发表于 2023-9-28 19:29:58 | 显示全部楼层
isdkz 发表于 2023-9-28 19:26
你的程序存在精度问题,因为浮点数的计算可能会出现舍入误差。正确的做法是将浮点数转换为整型再进行计算。 ...

为什么非要加上那个0.5呢,我在我的PTA作业里面把0.5都删掉了也能的满分的,giegie能告诉我吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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