正确构建 if 语句
Structuring if statements properly
我正在学习 C 编程 class,我正在做家庭作业。我只是无法正常工作。这是家庭作业:
当有人购买少量小部件时,他们会支付正常价格。当有人买
中等数量的小部件,尼克很高兴,并给了他们正常的折扣
价格。当有人购买大量小物件时,尼克爱上了它们,并给予
他们比正常价格有更大的折扣!但他的问题是:有时这些
金额低于他的原始成本,因此他在销售中赔钱!
为简单起见,我们假设每个小部件的成本为尼克 0.40 美元(所以他应该卖
他们每个人都为他的客户付出了比这更高的成本):
#define WIDGET_COST 0.40
为了帮助 Nick 挽救他的生意,请编写一个程序,提示他输入他想要的价格
将出售每个小部件,他将对中等购买打折的百分比,以及百分比
他会对大笔购买打折(每个都是百分比的整数),然后输出一条消息,指出这些选择中的哪一个导致他无法获利。可能的
Nick 可能遇到的问题是(仅输出此列表中的第一个为真):
- 尼克,你的底价太低了!
- 尼克,你对中号商品的折扣太大了!
- 尼克,你对大宗商品的折扣太大了!
如果他的价格没有问题,你应该直接输出:
所有价格对我来说都很好!
从上面输出适当的消息后,不要忘记祝尼克好运
他的新业务:
祝你好运!
到目前为止,这是我的代码:
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 语句的方式:它们不会正确输出,要么说基本价格太低,要么说所有价格都很好,除非我在购买。
替换:
double medium_total = base - medium/100 * base;
和
double medium_total = base - medium/100.0 * base;
medium
是一个 int
,这意味着 medium / 100
是一个整数除法。通过将 100
更改为 100.0
将执行浮点除法。
large_total
声明相同。
在您的代码中,medium
作为 int
,medium/100
作为整数除法执行,为 medium < 100
生成 0
。这就是为什么
all prices are good, unless I discount over 100 on the purchases
为了避免,请使用强制转换,like
double medium_total = base - ((double)medium)/100 * base;
或将 100
写成 100.0
以执行浮点除法。
large/100
中也有类似情况。
我正在学习 C 编程 class,我正在做家庭作业。我只是无法正常工作。这是家庭作业:
当有人购买少量小部件时,他们会支付正常价格。当有人买
中等数量的小部件,尼克很高兴,并给了他们正常的折扣
价格。当有人购买大量小物件时,尼克爱上了它们,并给予
他们比正常价格有更大的折扣!但他的问题是:有时这些
金额低于他的原始成本,因此他在销售中赔钱!
为简单起见,我们假设每个小部件的成本为尼克 0.40 美元(所以他应该卖
他们每个人都为他的客户付出了比这更高的成本):
#define WIDGET_COST 0.40
为了帮助 Nick 挽救他的生意,请编写一个程序,提示他输入他想要的价格 将出售每个小部件,他将对中等购买打折的百分比,以及百分比 他会对大笔购买打折(每个都是百分比的整数),然后输出一条消息,指出这些选择中的哪一个导致他无法获利。可能的 Nick 可能遇到的问题是(仅输出此列表中的第一个为真):
- 尼克,你的底价太低了!
- 尼克,你对中号商品的折扣太大了!
- 尼克,你对大宗商品的折扣太大了!
如果他的价格没有问题,你应该直接输出: 所有价格对我来说都很好! 从上面输出适当的消息后,不要忘记祝尼克好运 他的新业务: 祝你好运!
到目前为止,这是我的代码:
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 语句的方式:它们不会正确输出,要么说基本价格太低,要么说所有价格都很好,除非我在购买。
替换:
double medium_total = base - medium/100 * base;
和
double medium_total = base - medium/100.0 * base;
medium
是一个 int
,这意味着 medium / 100
是一个整数除法。通过将 100
更改为 100.0
将执行浮点除法。
large_total
声明相同。
在您的代码中,medium
作为 int
,medium/100
作为整数除法执行,为 medium < 100
生成 0
。这就是为什么
all prices are good, unless I discount over 100 on the purchases
为了避免,请使用强制转换,like
double medium_total = base - ((double)medium)/100 * base;
或将 100
写成 100.0
以执行浮点除法。
large/100
中也有类似情况。