第一题
1.1题目描述
问题描述】小明经营着一个不大的水果店,只销售苹果、香蕉和桔子。为了促销,小明制定了如下定价策略:
(1)苹果:按斤论价,每斤P元,买W斤,则需支付W*P元。
(2)香蕉:半价,每斤P元,买W斤,则需支付W/2*P元。
(3)桔子:按斤论价,每斤P元,买W斤。如果W>10,则打半价,即需支付W*P/2元;否则如果W>5,则打八折,即需支付W*P*0.8元;其他情况不打折,即需支付W*P元。
请用C++来计算某个顾客采购的水果的总价。该程序至少应有:
(1)Fruit类:是个抽象类,是Apple、Banana和Orange的父类。支持重载的加法运算。
(2)Apple、Banana和Orange类:分别对应于苹果、香蕉和桔子三种水果,每种水果执行不同的定价策略。
【输入形式】
输入为多行,每行格式为:
C W P
其中C是水果类型(a、b、o分别代表苹果、香蕉和桔子),W和P分别是顾客购买的相应水果的重量和每斤水果的单价。输入完成后输入字符q结束输入。
【输出形式】
输出顾客需支付的总金额。
【样例输入】
a 1 1
b 1 1
o 1 1
q
【样例输出】
2.5
1.2源代码
#include<iostream>
#include<iomanip>
using namespace std;
class Fruit
{
public:
double sum;
double kilo;
double price;
Fruit(double k,double p)
{
sum=0;
kilo=k;
price=p;
}
virtual double getsum()
{
return 0;
}
void operator+(double m)
{
sum+=m;
}
void print()
{
cout<<setiosflags(ios::fixed)<<setprecision(2)<<sum;
}
};
class Apple:public Fruit
{
public:
Apple(double k,double p):Fruit(k,p){}
double getsum()
{
return price*kilo;
}
};
class Banana:public Fruit
{
public:
Banana(double k,double p):Fruit(k,p){}
double getsum()
{
return price*kilo/2.0;
}
};
class Orange:public Fruit
{
public:
Orange(double k,double p):Fruit(k,p){}
double getsum()
{
if(kilo>10)
{
return price*kilo/2.0;
}
else if(kilo>5)
{
return price*kilo*0.8;
}
else return price*kilo;
}
};
int main()
{
char t;
double k,p;
Fruit f(0,0);
cin>>t;
while(t!='q')
{
cin>>k>>p;
if(t=='a')
{
Apple a(k,p);
f+a.getsum();
}
if(t=='b')
{
Banana b(k,p);
f+b.getsum();
}
if(t=='o')
{
Orange o(k,p);
f+o.getsum();
}
cin>>t;
}
f.print();
}
1.3输出样例
似此星辰非昨夜,为谁风露立中宵。 ------黄景仁《绮怀》