Camon 发表于 2024-3-27 17:09:33

C语言课后习题


【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决
#include <stdio.h>

#define FANQIE   3.7/2
#define JIELAN   7/2
#define XIQIN   1.3/2
#define KONGXINCAI   8/2
#define YANGCONG   2.4/2
#define YOUCAI      9/2
#define HUANGGUA    6.3/2
#define BAILUOBO    0.5/2

int main()
{
      double a,b,c;
      
      a = 2*FANQIE + KONGXINCAI + YOUCAI;
      printf("小明需要支付%.2f元\n", a);
      
      b = 3*XIQIN + 0.5*YANGCONG + 5*HUANGGUA;
      printf("小红需要支付%.2f元\n", b);
      
      c = 10*HUANGGUA + 20*BAILUOBO;
      printf("小甲鱼需要支付%.2f元\n", c);
      
      return 0;
}


C语言课后练习题S1E5
运行结果小明支付那里不对
代码哪里有问题呀
是上面除2的问题吗

FishC 发表于 2024-3-27 17:09:44

是的,代码中除以2的地方有问题。C语言中,除法运算符`/`是针对整数运算的,当被除数和除数都是整数时,结果会取整数部分,而不是保留小数部分。所以在定义宏时使用除法运算符会导致结果不准确。

解决方法是将宏定义中的除法改为除以浮点数。修改代码如下:

#define FANQIE   3.7/2.0
#define JIELAN   7.0/2.0
#define XIQIN   1.3/2.0
#define KONGXINCAI   8.0/2.0
#define YANGCONG   2.4/2.0
#define YOUCAI      9.0/2.0
#define HUANGGUA    6.3/2.0
#define BAILUOBO    0.5/2.0

这样重新编译运行程序,就会得到正确的结果了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言课后习题