考试说明
选择题答题方式(25分共25题,闭卷,严禁使用编程环境进行尝试)
编程题提交方式(75分,开卷)
闪存是一般电子产品都需要用到的存储器件,闪存的容量、工作频率决定着闪存的基本性能。在路由器的硬件构成中闪存是不可缺少的核心部件之一。
请根据要求完成如下编程工作:
class CFlash
{
private:
int m_Memory; //闪存容量,单位KB
int m_Freq; //工作频率,单位MHZ
public:
CFlash (int Memory, int Freq); //容量和频率小于等于0为非法
int GetMemory(void)const; //获取容量
int GetFreq(void)const; //获取工作频率
friend CFlash operator+(const CFlash& Obj, int m); //闪存容量增大m KB
friend ostream& operator<<(ostream& Out, const CFlash& Obj); //输出闪存的参数,
//容量占5列,左对齐,右补空格
//频率占5列,左对齐,右补空格
};
请为CFlash类完成上述所要求的各函数定义。
class CRouter
{
private:
CFlash m_Flash;
int m_Ports; //端口数量
int m_BandWidth; //带宽,单位M
public:
CRouter(int FlashMemory, int FlashFreq, double Ports, int BandWidth); //端口数量或带宽小于等于0为非法
CFlash GetFlash(void)const; //获取闪存数据
int GetPorts(void)const; //获取端口数量
int GetBandWidth(void)const; //获取带宽
CRouter& operator++(); //前自增,闪存容量增大10KB,端口数量扩大1倍,带宽提高100M
CRouter operator++(int); //后自增,规则同上
friend ostream& operator<<(ostream& Out, const CRouter & Obj);
//创建编号占5列,左对齐,右补空格
//CFlash部分数据的输出规则与Flash类中定义相同
//端口数量占5列,左对齐,右补空格
//带宽占8列,左对齐,右补空格
};
程序的main函数
注意:
1. 不得修改main函数以及2个类的定义!对main函数和类定义每修改一处,总分扣2分,最多扣10分。
2. 使用全局变量扣10分。
int main()
{
vector
ReadRouter("D:\\source1.dat", A);
CombineRouter("D:\\source2.dat", A);
DeleteRouter(A,35);
ImproveRouter(A);
SaveRouterFile("d:\\res.txt",A);
CRouter t(A[0]);
cout<
cout<
return 0;
}
程序运行结果参见下图
编程题评分标准
大项 |
子项 |
评分项 |
应得分 |
实得分 |
正 确 性 |
结果(70分) |
CFlash类构造函数 |
3 |
|
CFlash类GetMemory和GetFreq函数 |
2 |
|||
CFlash类+运算符重载函数 |
5 |
|||
CFlash类输出运算符重载函数 |
4 |
|||
CRouter类有参构造函数 |
5 |
|||
CRouter类拷贝构造函数 |
5 |
|||
CRouter类3个Get函数 |
4 |
|||
CRouter类前后++运算符重载函数 |
8 |
|||
CRouter类输出运算符重载函数 |
4 |
|||
ReadRouter函数 |
7 |
|||
CombineRouter函数 |
7 |
|||
DeleteRouter函数 |
6 |
|||
ImproveRouter函数 |
3 |
|||
SaveRouterFile函数 |
5 |
|||
程序运行异常中断、死循环或无任何结果 (CAppWindow类构造函数引起的异常不扣分) |
-10 |
|||
main函数和类定义修改处(最多扣10分) |
||||
可 读 性 |
缩进对齐(2分) |
缩进对齐规范 |
2 |
|
缩进对齐混乱或不缩进 |
0 |
|||
变量命名规范 (2分) |
命名规范 |
2 |
||
命名不规范 |
0 |
|||
注释(1分) |
有注释 |
1 |
||
无注释 |
0 |
|||
#include
#include
#include
#include
#include
using namespace std;
class CFlash
{
private:
int m_Memory; //闪存容量,单位KB
int m_Freq; //工作频率,单位MHZ
public:
CFlash (int Memory=1, int Freq=1); //容量和频率小于等于0为非法
int GetMemory(void)const; //获取容量
int GetFreq(void)const; //获取工作频率
friend CFlash operator+(const CFlash& Obj, int m); //闪存容量增大m KB
friend ostream& operator<<(ostream& Out, const CFlash& Obj); //输出闪存的参数,
//容量占5列,左对齐,右补空格
//频率占5列,左对齐,右补空格
};
CFlash::CFlash (int Memory, int Freq){
if(Memory<=0 or Freq<=0){
exit(0);
}
this->m_Memory=Memory;
this->m_Freq=Freq;
}
int CFlash::GetMemory(void)const{
return m_Memory;
}
int CFlash::GetFreq(void)const{
return m_Freq;
}
CFlash operator+(const CFlash& Obj, int m){
CFlash C(Obj.GetMemory()+m,Obj.GetFreq());
return C;
}
ostream& operator<<(ostream& Out, const CFlash& Obj){
//容量占5列,左对齐,右补空格
//频率占5列,左对齐,右补空格
Out<m_Flash;
}
int CRouter::GetPorts(void)const{
return this->m_Ports;
}
int CRouter::GetBandWidth(void)const{
return this->m_BandWidth;
}
CRouter& CRouter::operator++(){
//前自增,闪存容量增大10KB,端口数量扩大1倍,带宽提高100M
this->m_Flash=m_Flash+10;
this->m_Ports*=2;
this->m_BandWidth+=100;
return *this;
}
CRouter CRouter::operator++(int){
CRouter C(GetFlash().GetMemory(),GetFlash().GetFreq(),m_Ports,m_BandWidth);
this->m_Flash=m_Flash+10;
this->m_Ports*=2;
this->m_BandWidth+=100;
return C;
}
ostream& operator<<(ostream& Out, const CRouter & Obj){
//CFlash部分数据的输出规则与Flash类中定义相同
//端口数量占5列,左对齐,右补空格
//带宽占8列,左对齐,右补空格
Out<&a){
ifstream ifile(path);
if(!ifile){exit(0);}
while(!ifile.eof()){
int Memory; //闪存容量,单位KB
int Freq; //工作频率,单位MHZ
int Ports; //端口数量
int BandWidth; //带宽,单位M
ifile>>Memory>>Freq>>Ports>>BandWidth;
//cout<&a){
ifstream ifile1(path);
if(!ifile1){exit(0);}
while(!ifile1.eof()){
int Memory; //闪存容量,单位KB
int Freq; //工作频率,单位MHZ
int Ports; //端口数量
int BandWidth; //带宽,单位M
ifile1>>Memory>>Freq>>Ports>>BandWidth;
a.push_back(CRouter(Memory,Freq,Ports,BandWidth));
}
sort(a.begin(),a.end(),cmp);
ifile1.close();
return ;
}
/*
(3)编写一个函数DeleteRouter,
删除上述A向量中工作频率小于等于x MHZ或带宽小于等于y M的路由器数据。
如不指定,x为35,y为200。
*/
void DeleteRouter(vector &a, int x=35,int y=200){
for(vector ::iterator it=a.begin();it!=a.end();){
if(it->GetFlash().GetFreq()<=x or it->GetBandWidth()<=y){
it=a.erase(it);
}
else{
it++;
}
}
}
/*
(4)编写一个函数ImproveRouter,
对上述经过处理后的A向量中的每个路由器数据进行前自增处理,自增后结果仍然保存在A向量中。
*/
void ImproveRouter(vector&a){
for(int i=0;i&a){
ofstream ofile(path);
if(!ofile){exit(0);}
for(int i=0;i A;
ReadRouter("/Users/apple/Downloads/3/source1.dat", A);
CombineRouter("/Users/apple/Downloads/3/source2.dat", A);
DeleteRouter(A,35);
ImproveRouter(A);
SaveRouterFile("/Users/apple/Downloads/3/res.txt",A);
CRouter t(A[0]);
cout<
如果有错请指正,感激!