我目前正在上c ++课程,而且由于某种原因,我的一项任务中遇到了一些麻烦。
询问用户在商店购买的总金额 根据以下规则计算折扣:
- 如果他们花50美元,给他们10%的折扣
- 如果他们花费75美元,则折扣为15%
- 如果他们花100美元,折扣是25%
- 最后,如果他们花费250美元或更多,他们可以获得40%的折扣。
- 显示购买金额,减去折扣并显示结果。
这是我到目前为止编写的代码:
#include <iostream>
using namespace std;
int main() {
double amount,discount=0.0;
cout<<"Enter the total amount of your purchase: $";
cin>>amount;
cout<<endl;
if (amount<50)
cout<<"You do not recieve a discount"<<endl;
else if(amount<=50.0)
{
discount=0.1*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.9;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
else if(amount<=75.0)
{
discount=0.15*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.85;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
else if(amount<=100.0)
{
discount=0.25*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.75;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
else if(amount<=250.0)
{
discount=0.4*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.6;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
return 0;
}
我没有收到正确的号码,例如如果我输入74它会给我11.1 我觉得这是一个简单的原因,我得到错误的数字,但我不知道为什么
答案 0 :(得分:4)
让我们看看你的一个问题:
else if(amount<=50.0)
10%的折扣适用于花费至少50美元的人 - 上面使用的测试将限制在花费最多50美元的人身上(暂时忽略那些花费少于50美元的人已经被过滤掉了按上一个if
)。
要创建一个if
子句来决定一个人是否应该享有10%的折扣,您需要对数学表达式进行建模:
$50.00 <= amount < $75.00
该表达式自然转换为以下C代码:
else if (50.00 <= amount && amount < 75.00)
如果您愿意,可以省略该表达式的第一部分 - 它在此else子句之前由if
处理:
if (amount < 50.00)
cout<<"You do not receive a discount"<<endl;
else if (amount < 75.00)
// etc...
答案 1 :(得分:4)
您的条件集与问题陈述不匹配。当您请求74
时,这将匹配(amount <= 75)
,这将适用错误的折扣。
您正在寻找的范围实际上是:
if (amount < 50) {
// No Discount
}
else if (amount < 75) {
// 10% Discount
}
else if (amount < 100) {
// 15% Discount
}
else if (amount < 250) {
// 25% Discount
}
else {
// 40% Discount
}
答案 2 :(得分:0)
int main() {
double amount,discount=0.0;
cout<<"Enter the total amount of your purchase: $";
cin>>amount;
cout<<endl;
if (amount<50)
cout<<"You do not recieve a discount"<<endl;
else if(amount>=250.0)//250 or more
{
discount=0.4*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.6;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
else if(amount>=100.0)
{
discount=0.25*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.75;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
else if(amount>=75.0)
{
discount=0.15*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.85;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
else if(amount>=50.0)
{
discount=0.1*amount;
cout<<"Discount: $"<<discount<<endl;
amount=amount*0.9;
cout<<"Total Amount: $"<<amount<<endl;
return 0;
}
return 0;
}
答案 3 :(得分:-1)
float
和double
变量不应与==
,<=
,>=
进行比较,您应该使用epsilon。 http://www.parashift.com/c++-faq/floating-point-arith.html
对我来说,你的if else条件应如下所示。
if (0 > amount)
{
// ERROR
return;
}
else if (50.0 > amount)
{
// No discount
return;
}
else if (75.0 > amount)
{
// 10% discount
return;
}
else if (100.0 > amount)
{
// 15% discount
return;
}
else if (250.0 > amount)
{
// 25% discount
return;
}
else
{
// 40% discount
return;
}