Camon 发表于 2024-3-27 17:05:42

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:05:56

是的,代码中定义的菜价都除以了2。这是因为在C语言中,除法运算符/默认执行整数除法。所以当除以2时,结果会被截断为整数。例如,7/2的结果是3,而不是3.5。

解决这个问题的方法是将除法运算符/替换为浮点除法运算符/。修改代码如下:

#include <stdio.h>

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

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;
}

现在重新运行程序,小明支付的金额应该是正确的了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-4-1 10:35:26

本帖最后由 jackz007 于 2024-4-1 10:40 编辑

    此两句有误:
#define JIELAN   7/2   /* 问题,整数除法,结果是 3,而非 3.5 */
#define YOUCAI   9/2   /* 问题,整数除法,结果是 4,而非 4.5 */
    如果被除数和除数都是整型数,那么,就是整数除法,商也是整型数,小数部分会被直接忽略。
    所以,这两句必须改为:
#define JIELAN   7.0/2
#define YOUCAI   9.0/2
页: [1]
查看完整版本: C语言课后练习题