正确构造if语句

时间:2015-02-06 19:48:18

标签: c if-statement statements

我正在参加C编程课程,我正在完成一项家庭作业。我无法正常工作。这是家庭作业:

当有人购买少量小部件时,他们支付正常价格。当有人买 中等数量的小工具,尼克非常高兴,并给予他们正常折扣 价钱。当有人购买大量的小工具时,尼克会爱上他们并给予他们 他们比正常价格折扣更大!但他的问题是:有时这些 金额低于原始成本,因此他在出售时亏本! 为简单起见,我们假设每个小部件每个花费0.40美元(所以他应该卖 他们每个人的成本都高于他的客户): #define WIDGET_COST 0.40

为了帮助尼克保住他的生意,请写一个程序,提示他付出代价 将出售每个小部件,他将折扣中等购买的百分比和百分比 他将对大量购买进行折扣(每个整数除以一个百分比),然后输出消息,表明这些选择中的哪一个导致他不能获利。可能 尼克可能有的问题(仅输出此列表中的第一个为真):

  1. 尼克,你的基价太低了!
  2. 尼克,你打算过多地购买中等产品!
  3. 尼克,你打算过多地购买大笔商品!
  4. 如果他的价格没有问题,你应该输出: 所有价格对我来说都很好! 从上面输出相应的消息后,不要忘记希望尼克好运 他的新业务: 祝你好运!

    到目前为止,这是我的代码:

    int main(){
    
        double base;
        printf("How much are you selling each widget for?\n");
        scanf("%lf", &base);
    
        int medium;
        printf("How much are you discounting medium orders?\n");
        scanf("%d", &medium);
    
        int large;
        printf("How much are you discounting large orders?\n");
        scanf("%d", &large);
    
        double medium_total = base - medium/100 * base;
        double large_total = base - large/100 * base;
    
        if (base < WIDGET_COST) {
            printf("Nick, your base prices are to low!\n");
        }else if (medium_total < WIDGET_COST){
            printf("Nick, you are discounting medium purchases too much!\n");
        }else if (large_total < WIDGET_COST){
            printf("Nick, you are discounting large purchases too much!\n");
        }else {
            printf("All prices look good to me!\n");
        }
    
        printf("Good luck!\n");
    
        return 0;
    }
    

    我做错了什么?

    我认为这可能是我如何构建if语句:它们不能正确输出,或者它会说基价太低或者说所有价格都是好的,除非我在购买时折扣超过100。

2 个答案:

答案 0 :(得分:0)

替换:

double medium_total = base - medium/100 * base;

double medium_total = base - medium/100.0 * base;

mediumint,这意味着medium / 100是整数除法。通过将100更改为100.0,将执行浮点除法。

large_total声明相同。

答案 1 :(得分:0)

在您的代码中,mediumintmedium/100正在执行整数除法,为0生成medium < 100。这就是为什么

  

所有价格都不错,除非我购买的折扣超过100

要避免,请使用演员表,如

double medium_total = base - ((double)medium)/100 * base;

或将100写为100.0以强制执行浮点除法。

large/100中的类似案例。