目录
题目一:会员积分(期末模拟)
题目二:金属加工(期末模拟)
题目三:加密模板(期末模拟)
题目四:加湿风扇(期末模拟)
题目五:计重转换(期末模拟)
题目描述:
某电商网站的会员分为:普通、贵宾两个级别
普通会员类Member,包含编号、姓名、积分三个属性,编号和积分是整数,姓名是字符串
操作包括构造、打印、积分累加、积分兑换,操作定义如下:
1、积分累加Add,是根据消费金额累加积分,无返回值,参数是消费金额(整数),积分根据消费金额按1比1的比例累加
2、积分兑换Exchange,是按照每100积分换1元的比例,把积分兑换成现金。参数是要兑换的积分数量,返回值是兑换的现金数量。
注意:兑换积分数量不足100的部分是不能兑换的,例如会员原有500积分,要兑换积分数量为450,则450/100=4,最终用400积分兑换4元,会员余100积分。
3、打印是输出会员信息,格式参考输出样例
贵宾会员类VIP,继承了普通会员的属性与操作,新增两个属性:累加比例(整数)、兑换比例(整数)。并且重定义了所有操作:
1、积分累加中,积分按累加比例进行累加。例如累加比例是2,消费金额100元,则累加积分=100*2=200
2、积分兑换中,按照兑换比例的数值把积分抵扣消费金额。例如兑换比例是90,会员原有500积分,要兑换积分数量为420,则420/90=4,最终用360积分兑换4元,会员余140积分。
3、打印是输出会员信息,格式参考输出样例
程序要求
1、采用继承机制实现上述会员关系
2、打印、积分累加和积分兑换都采用虚函数方式,来实现运行多态性
3、派生的构造函数必须考虑基类属性的构造。
4、必须采用以下代码框架,在提示的地方增加代码,其他地方不能修改。
上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求
----参考代码----
class Member { //普通会员类
//....代码自行编写
};
class VIP .... { //贵宾会员类
//....代码自行编写
};
int main()
{
Member * pm; //创建一个基类对象指针
//....其他变量自行编写
//输入数据,创建普通会员对象mm
//使用指针pm执行以下操作:
//1、pm指向普通会员对象mm
//2、输入数据,通过pm执行积分累加和积分兑换
//3、通过pm调用打印方法输出
//输入数据,创建贵宾会员对象vv
//使用指针pm执行以下操作:
//1、pm指向贵宾会员对象vv
//2、输入数据,通过pm执行积分累加和积分兑换
//3、通过pm调用打印方法输出
return 0;
}
输入要求:
第一行输入普通会员的三个信息:编号、姓名、积分
第二行输入两个操作信息:消费金额、积分兑换数量,表示普通会员执行一次积分累加,一次积分兑换
第三行输入贵宾会员的五个信息:编号、姓名、积分、累加比例、兑换比例
第四行输入两个操作信息:消费金额、积分兑换数量,表示贵宾会员执行一次积分累加,一次积分兑换
输出要求:
第一行输出普通会员执行两个操作后的信息,要求调用打印方法
第二行输出贵宾会员执行两个操作后的信息,要求调用打印方法
输入样例:
1001 John 500
244 300
8001 Jane 300 2 90
100 420
输出样例:
普通会员1001--John--444
贵宾会员8001--Jane--140
代码示例:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
class Member
{
protected:
int id, score;
string name;
public:
Member() {}
Member(int ii, string nn, int ss) :id(ii), name(nn), score(ss) {}
virtual void Add(int nn)
{
score += nn;
}
virtual void Exchange(int ss)
{
score -= ss;
}
virtual void print()
{
cout << "普通会员" << id << "--" << name << "--" << score << endl;
}
};
class VIP :public Member
{
protected:
int addpro, expro;
public:
VIP() {}
VIP(int ii, string nn, int ss, int ad, int ex) :Member(ii, nn, ss), addpro(ad), expro(ex) {}
virtual void Add(int nn)
{
score += addpro * nn;
}
virtual void Exchange(int ss)
{
score -= (ss / expro) * expro;
}
virtual void print()
{
cout << "贵宾会员" << id << "--" << name << "--" << score << endl;
}
};
int main()
{
Member* pm;//建立基类指针指向对象
int id, sc0;
string na0;
cin >> id >> na0 >> sc0;
Member mm(id, na0, sc0);
pm = &mm;
int cost, excount;
cin >> cost >> excount;
pm->Add(cost);
pm->Exchange(excount);
pm->print();
int ad0, ex0;
cin >> id >> na0 >> sc0 >> ad0 >> ex0;
VIP vm(id, na0, sc0, ad0, ex0);
pm = &vm;
cin >> cost >> excount;
pm->Add(cost);
pm->Exchange(excount);
pm->print();
return 0;
}
题目没什么难的,考察了单继承和虚函数。
题目描述:
在金属加工中,金属具有硬度、重量、体积的属性(都是整数),包括四种操作:
1、合并,每两块金属可以合并成一块新的金属。新金属的重量等于原两块金属的重量之和,体积和硬度也类似计算。
2、巨化,金属通过熔炼风吹的方法会巨化,体积变大n倍,重量和硬度不变
3、硬化,在金属中加入高分子材料可以硬化金属,每提升硬度一级,重量和体积都增加10%。
4、软化,在金属中加入特殊化学溶液可以降低金属硬度,每降低硬度一级,重量和体积都减少10%
用类来描述金属,用运算符重载方式实现金属的四种操作,并定义打印函数,具体要求如下
1、用加法运算符、友元的方式实现合并
2、用乘法运算符、友元的方式实现巨化,含两个参数:金属对象、巨化倍数
3、用++运算符、成员函数、前增量的方式实现硬化
4、用--运算符、成员函数、后增量的方式实现软化
5、打印函数用来输出金属的信息,输出格式看参考样本
操作中所有属性的运算结果都只保留整数部分。
上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求
输入要求:
第一行输入第一块金属的信息,包括硬度、重量、体积
第二行输入第二块金属的信息,包括硬度、重量、体积
第三行输入一个参数n,表示巨化n倍
输出要求:
第一行输出两块金属合并后的信息
第二行输出第一块金属巨化n倍的信息
第三行输出第一块金属提升硬度一级后的信息
第四行输出第二块金属降低硬度一级后的信息
输入样例:
3 3000 300
5 5000 500
2
输出样例:
硬度8--重量8000--体积800
硬度3--重量3000--体积600
硬度4--重量3300--体积330
硬度4--重量4500--体积450
代码示例:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
class Metal
{
int rigidity, height, volume;
public:
Metal() {}
Metal(int rr, int hh, int vv) :rigidity(rr), height(hh), volume(vv) {}
void Enlarge(int ee)
{
volume *= ee;
}
void print()
{
cout << "硬度" << rigidity << "--重量" << height << "--体积" << volume << endl;
}
Metal& operator ++()//前++返回引用
{
rigidity++;
height *= 1.1;
volume *= 1.1;
return *this;
}
Metal operator ++(int)//后++返回临时对象
{
Metal temp = *this;
rigidity++;
height *= 1.1;
volume *= 1.1;
return temp;
}
friend Metal operator --(Metal& rhs)//前--
{
rhs.rigidity--;
rhs.height *= 0.9;
rhs.volume *= 0.9;
return rhs;
}
friend Metal operator --(Metal& rhs, int)//后--
{
Metal temp = rhs;
rhs.rigidity--;
rhs.height *= 0.9;
rhs.volume *= 0.9;
return temp;
}
friend Metal operator + (Metal& r1, Metal& r2)//友元函数运算符重载
{
Metal temp;
temp.rigidity = r1.rigidity + r2.rigidity;
temp.height = r1.height + r2.height;
temp.volume = r1.volume + r2.volume;
return temp;
}
};
int main()
{
Metal m;
int rt, ht, vl;
cin >> rt >> ht >> vl;
Metal m1(rt, ht, vl);
cin >> rt >> ht >> vl;
Metal m2(rt, ht, vl);
int enl;
cin >> enl;
m = m1 + m2;
m.print();
Metal m0 = m1;
m0.Enlarge(enl);
m0.print();
m1++;
m1.print();
m2--;
m2.print();
}
本题主要考察了 ++ / -- 的运算符重载。
题目描述:
加密机制包括明文、密文、密钥。用密钥对明文进行加密后就得到密文。
在古典加密机制中,偏离值是一种常见的方法,加密过程为
1、在已知数据中找出最大值
2、用最大值减去各个数值,得到相应的偏离值
3、偏离值加上密钥就得到密文
例如明文为1 2 3 4 5,密钥是10,加密过程为:
1、找出明文的最大值是5
2、用5减去明文的各个数值,得到偏离值4 3 2 1 0
3、用偏离值加上密钥,得到密文14 13 12 11 10
定义一个函数模板,名为Max,参数包括数组和数组长度,返回值是数组中的最大值,要求支持整数、浮点数和字符三种类型。
用类模板定义一个加密类,包含四个属性:明文、密文、密钥、长度,前三个属性都是同一种类型,长度是整数。长度是指明文的长度。
类模板包含操作构造、加密、打印,说明如下:
1、加密是调用函数模板Max得到数组最大值,按照前面的方法使用最大值和密钥进行加密,得到密文
2、打印是输出密文
要求类模板支持整数、浮点数和字符三种类型。
参考代码给出了加密类界面(只支持整数类型)、主函数(支持三种数据类型),程序要求
1、根据要求编写函数模板Max
2、使用类模板方法改造加密类界面,不能增加任何属性和操作,必须在类外实现构造函数和加密方法
3、主函数不能有任何修改
上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求
----参考代码----
//只支持整数类型的加密类界面
class Cryption {
int ptxt[100];//明文
int ctxt[100];//密文
int key;//密钥
int len;//长度
public:
Cryption(int tk, int tt[], int tl); //参数依次对应密钥、明文、长度
void Encrypt(); //加密
void Print() //打印,无需改造
{int i;
for (i=0; i cout< cout< } }; //支持三种类型的主函数 int main() {int i; int length; //长度 int ik, itxt[100]; double dk, dtxt[100]; char ck, ctxt[100]; //整数加密 cin>>ik>>length; for (i=0; i cin>>itxt[i]; Cryption ic.Encrypt(); ic.Print(); //浮点数加密 cin>>dk>>length; for (i=0; i cin>>dtxt[i]; Cryption dc.Encrypt(); dc.Print(); //字符加密 cin>>ck>>length; for (i=0; i cin>>ctxt[i]; Cryption cc.Encrypt(); cc.Print(); return 0; } 输入要求: 第一行输入整数类型的信息,包括密钥、长度、明文 第二行输入浮点数类型的信息,包括密钥、长度、明文 第三行输入字符类型的信息,包括密钥、长度、明文 输出要求: 三行分别输出三种类型的密文 输入样例: 输出样例: 代码示例: 考察类模板和函数模板,注意细节。 题目描述: 已知家电有编号、功率的属性,属性都是整数,操作包括构造和打印等 电风扇继承家电的特点,新增两个属性(整数):风向和风力,其中风向为0表示定向吹风,状态为1表示旋转吹风。 电风扇包含两个新操作:风向控制和风力控制 1、风向控制含一个整数参数,无返回,把风向设置为参数值,参数为0表示定向吹风,为1表示旋转吹风。 2、风力控制含一个整数参数,无返回,把风力设置为参数值,参数表示风力级别,例如1级、2级、3级等。 加湿器继承家电的特点,新增两个属性(浮点数):实际水容量和最大水容量 新增操作是预警,无参数,返回值为整数,当实际水容量不小于最大水容量的50%,则返回1;小于50%且不小于10%则返回2,小于10%则返回3 加湿风扇继承了风扇和加湿器的特点,新增属性档位(整数) 新增操作调整档位,含一个参数,无返回值,先设置档位为参数值,再调用风向控制和风力控制来设置相关属性,包括: 1、参数为0,不做其他属性修改 2、参数为1,设置定向吹风且风力1级 3、参数为2,设置旋转吹风且风力2级 4、参数为3,设置旋转吹风且风力3级 档位只可能是0、1、2、3四个数值,其他数值忽略。 加湿风扇重载打印操作,输出格式参考样本。输出要求如下: 1、如果风向为0,则输出定向吹风,风向为1则输出旋转吹风。 2、调用预警操作,并根据返回结果1、2、3输出不同信息,分别是:水量正常、水量偏低、水量不足 程序要求 1、采用虚拟继承机制实现上述电器的关系,明确谁是虚基类、基类、派生类 2、基类和派生类的构造要考虑虚基类、基类的属性构造 上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求 输入要求: 第一行输入t,表示有t个实例 第二行输入一个加湿风扇的信息,依次包括编号、功率、风向、风力、实际水容量、最大水容量 档位 第三行输入一个参数,表示调档操作的档位,然后执行调档操作。 以此类推,输入t个实例 输出要求: 对于每个实例,调用打印操作输出加湿风扇的最终状态 输入样例: 输出样例: 代码示例: 考察多重继承和虚基类。 题目描述: 目前国际计重最基本的单位是克。在古代各个国家的计重单位是不同的。 中国使用斤、两、钱来表示重量,其中1斤=10两,1两=10钱 中国计重单位与克的关系为:1斤=500克,1两=50克,1钱=5克 英国使用磅、盎司、打兰来表示重量,其中1磅=16盎司,1盎司=16打兰 英国计重单位与克的关系为:1磅=512克,1盎司=32克,1打兰=2克 以下参考代码包含了抽象类Weight,中国计重和英国计重都继承了抽象类。 中国计重类新增了斤、两、钱三个属性,并新增了一个操作:计重转换Convert。 Convert能够把输入的克数转成中国计重,例如1234克转成2斤4两6钱4克,并且把数值放入斤、两、钱、克四个属性中 英国计重类新增了磅、盎司、打兰三个属性,并新增了两个操作: 1、计重转换Convert,功能与上述类似,例如2345克转成4磅9盎司4打兰1克,并且把数值放入对应的四个属性中 2、计重等价,重载类型转换运算符,实现将英国计重类的对象转换成中国计重类的对象,例如英国计重类对象en(2磅2盎司11打兰1克)等价于(转换成)中国计重类对象cn(2斤2两2钱1克)。 程序要求如下 1、参考代码框架不能做任何修改,在要求的地方添加代码 2、主函数不能有任何修改 以上数据纯粹为题目设计,方便计算,实际换算数据是不同的。 上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求 ----参考代码---- class CN; //提前声明 class EN; //提前声明 class Weight{ //抽象类 protected: char kind[20]; //计重类型 int gram; //克 public: Weight (char tk[]="no name", int tg=0) { strcpy(kind, tk); gram = tg; } virtual void Print(ostream & out) = 0; //输出不同类型的计重信息 }; class CN: public Weight { //中国计重 //....类定义自行编写 }; class EN: public Weight { //英国计重 //....类定义自行编写 } //以全局函数方式重载输出运算符,代码3-5行....自行编写 //重载函数包含两个参数:ostream流对象、Weight类对象,参数可以是对象或对象引用 //重载函数必须调用参数Weight对象的Print方法 int main()//主函数 {int tw; //创建一个中国计重类对象cn //构造参数对应斤、两、钱、克、类型,其中克和类型是对应基类属性gram和kind CN cn(0,0,0,0, "中国计重"); cin>>tw; cn.Convert(tw); //把输入的克数转成中国计重 cout< //创建英国计重类对象en //构造参数对应磅、盎司、打兰、克、类型,其中克和类型是对应基类属性gram和kind EN en(0,0,0,0,"英国计重"); cin>>tw; en.Convert(tw); //把输入的克数转成英国计重 cout< cn=en; //把英国计重转成中国计重 cout< return 0; } 输入要求: 第一行输入一个克数,调用中国计重转换,把克数转成中国计重 第二行输入一个克数,调用英国计重转换,把克数转成英国计重,并调用计重等价把英国计重转成中国计重 输出要求: 根据主函数运行输出 输入样例: 输出样例: 代码示例:10 5 1 2 3 4 5
11.11 4 1.1 2.2 3.3 4.4
O 3 a b c
14 13 12 11 10
14.41 13.31 12.21 11.11
Q P O
#include
题目四:加湿风扇(期末模拟)
3
1001 1000 1 2 3 4 0
1
2002 2000 0 1 1 12 0
3
3003 3000 0 3 2 10 0
0
加湿风扇--档位1
编号1001--功率1000W
定向吹风--风力1级
实际水容量3升--水量正常
加湿风扇--档位3
编号2002--功率2000W
旋转吹风--风力3级
实际水容量1升--水量不足
加湿风扇--档位0
编号3003--功率3000W
定向吹风--风力3级
实际水容量2升--水量偏低
#include
题目五:计重转换(期末模拟)
1234
2345
中国计重:2斤4两6钱4克
英国计重:4磅9盎司4打兰1克
中国计重:4斤6两9钱0克
#include