【苏大C++第二次考试】

这是一篇关于编程考试的说明,包括考试流程、答题方式和编程题的要求。考生需完成CComPort和CComputer两个类的实现,涉及串口通信、文件读写及流输出重载等概念。同时,文章提供了代码样例和评分标准。
摘要由CSDN通过智能技术生成

考试说明

  1. 考试时间:合计130分钟。选择题部分40分钟交卷,允许提前交卷。
  2. 考试过程中,不能连接未经指定网站或服务器。
  3. 闭卷考试部分,不能查阅任何类型的参考资料。
  4. 开卷考试部分,可以查阅纸质文档,不能查阅任何类型的电子文档。
  5. 考试过程中,不得使用任何形式的电子存储设备,不可使用手机。
  6. 违反上述2-5条者,视为考试作弊。

选择题答题方式(30分,闭卷,严禁使用vs编程环境进行尝试

  1. 打开浏览器,在地址栏中输入http://192.168.125.3,点击相应链接进入登录页面。
  2. 按要求输入两遍自己的学号。
  3. 点击“登录”按钮即可进入答题页面。如考试尚未开始,系统会进入等待页面并倒计时。考试开始时间到,系统会自动进入答题页面。
  4. 在页面左侧选择题号,页面右侧即会显示相应的题目。考生只需点击选择相应的选项。
  5. 答题过程中如关闭浏览器或出现系统故障导致计算机重新启动,系统不会丢失之前已经完成的题目的答案。考生可以打开浏览器重新登录并继续考试。
  6. 答题完成后,点击“交卷”按钮即可完成交卷。交卷后不能再次登录系统继续考试。
  7. 考试结束时间到,系统会自动收卷。

编程题提交方式(70分,开卷)

  1. 提交前务必关闭vs2005vs2008或vs2010编程环境。
  2. 所有源程序内容必须仅包含在一个源程序文件(CPP文件)中。
  3. 在浏览器的地址栏中输入http://192.168.125.3,点击相应链接进入提交页面。
  4. 按要求输入两遍自己的学号。
  5. 点击“选择文件”按钮,选择自己的源程序文件。点击“提交”按钮提交。
  6. 如提交成功,系统会显示相关信息。如果提交不成功,请重复步骤16-18。
  7. 提交成功后,可点击“查看内容”按钮检查提交的内容。


按以下要求编写程序

  1. 串口是计算机中常见的用于和外部设备进行连接和通信的一种端口。请各位考生从课程信息发布网站下载数据文件input.txt,然后将数据文件手动保存在D盘根目录下。该文件以行为单位保存了若干计算机的配置数据。每行数据中各个字段的信息如下:
    1. 第1列表示计算机的CPU主频,double类型;
    2. 第2列表示计算机的内存容量,int类型;
    3. 第3列表示计算机的串口编号,int类型;
    4. 第4列表示计算机的串口通讯速率,int类型;
  2. 定义串口(CComPort)类

串口类CComPort定义如下。请分别实现该类所有的成员函数和友元函数。

class CComPort

{

private:

int m_ID; //串口编号,必须为正整数

int m_Baud;//串口通讯速率,必须为正整数

public:

CComPort(int ID,  int Baud); //有参构造函数。如ID不为正整数则m_ID初始化为1;如Baud不为正整数则m_Baud初始化为1200

int GetBaud(void)const; //获取串口通讯速率

friend CComPort& operator++(CComPort& Data); //前++,表示串口通讯速率增加100

/*

流输出符重载

串口编号占5列,右对齐左补空

串口通讯速率占8列,右对齐左补空

*/

friend ostream& operator<<(ostream& Out, const CComPort& Data);

};

  1. 定义计算机(CComputer)类

计算机类CComputer类定义如下。请分别实现该类所有的成员函数和友元函数。

class CComputer

{

private:

double m_CPU; //CPU主频,必须为正数

int m_Memory; //内存容量,必须为正数

CComPort m_Port; //计算机的串口

public:

CComputer(double CPU, int Memory, int ID, int Baud); //有参构造函数。如输入的CPU不为正数则m_CPU初始化为3.0; 如输入的Memory不为正数则m_Memory初始化为4

CComPort GetComPort(void)const; //获取计算机串口数据的常成员函数

CComputer& operator++(); //前++。串口部分增量规则与CComPort类的前++相同,CPU主频m_CPU增大1.0,内存容量m_Memory增大2

CComputer operator++(int); //后++。自增规则与前++相同

/*

流输出符重载

串口部分输出格式与CComPort类相同

CPU主频占8列,小数部分保留2位,右对齐左补空

内存容量占5列,右对齐左补空

*/

friend ostream& operator<<(ostream& Out, const CComputer& Data);

};

上述CComputer类构造函数中如不指定各参数的值,则默认取值为:CPU=3.5,Memory=4,ID=1,Baud=115200

  1. 在上述两个类定义的基础上,依次定义如下函数:
    1. 编写函数ReadFile,从前面所述文本文件中完成数据的读入,结果存放在向量A中。
    2. 编写函数DeleteData,用于把向量A中串口通讯速率小于等于X的计算机数据删除,如不指定X的值,则X默认等于9600。
    3. 编写函数WriteFile。用于将把向量A中所有计算机数据保存到d:\res.txt文本文件中。
  2. main函数的具体内容如下:

int main()

{

vector<CComputer> A;

A = ReadFile("d:\\input.txt"); //读取文件,构成向量A

DeleteData(A); //删除向量A中串口通讯速率小于等于9600的计算机数据

WriteFile("d:\\res.txt", A); //将向量A中的计算机数据写入指定文件

CComputer c1;

cout << c1 << endl;

cout << c1++ << endl;

cout << ++c1 << endl;

return 0;

}

注意:不得修改上述两个类的定义以及主程序!每修改一处,则总分扣2分


编程题评分标准(说明:编程题成绩满分为70

大项

子项

评分项

应得分

实得分

结果(60分)

CComPort类构造函数

4

CComPort类GetBaud函数

2

CComPort类前++重载

5

CComPort类流输出运算符重载

5

CComputer类构造函数

7

CComputer类前++重载

6

CComputer类后++重载

6

CComputer类流输出运算符重载函数正确

6

ReadFile函数

6

DeleteData函数

8

WriteFile函数

5

程序运行异常中断、死循环或无任何结果

-10

类和main函数修改扣分

(每修改一处扣2分,总计不超过10分)

-10

缩进对齐(4分)

正确运用缩进对齐规则

4

有缩进对齐但不完全符合要求

2

没有使用缩进对齐规则

0

函数说明(4分)

有较完整的函数说明

4

有函数说明,但不够完整

2

没有函数说明

0

注释(2分)

有注释

2

没有注释

0

总分(70分)


#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

class CComPort
{
private:
	int m_ID;		//���ڱ�ţ�����Ϊ������
	int m_Baud;//����ͨѶ���ʣ�����Ϊ������

public:
	CComPort(int ID,  int Baud);	//�вι��캯������ID��Ϊ��������m_ID��ʼ��Ϊ1����Baud��Ϊ��������m_Baud��ʼ��Ϊ1200
	int GetBaud(void)const;			//��ȡ����ͨѶ����
	friend CComPort& operator++(CComPort& Data);	//ǰ++����ʾ����ͨѶ��������100

	/*
		�����������
		���ڱ��ռ5�У��Ҷ����󲹿�
		����ͨѶ����ռ8�У��Ҷ����󲹿�
	*/
	friend ostream& operator<<(ostream& Out, const CComPort& Data);
};

CComPort::CComPort(int ID,  int Baud){
	if(ID<=0){ID=1;}
	if(Baud<=0){Baud=1200;}
	this->m_ID=ID;
	this->m_Baud=Baud;
}

int CComPort::GetBaud(void)const{
	return this->m_Baud;
}

CComPort& operator++(CComPort& Data){
	Data.m_Baud+=100;
	return Data;
}

ostream& operator<<(ostream& Out, const CComPort& Data){
	/*
		�����������
		���ڱ��ռ5�У��Ҷ����󲹿�
		����ͨѶ����ռ8�У��Ҷ����󲹿�
	*/
	Out<<setw(5)<<right<<setfill(' ')<<Data.m_ID;
	Out<<setw(8)<<right<<setfill(' ')<<Data.m_Baud;
	return Out;
}

class CComputer
{
private:
	double m_CPU;		//CPU��Ƶ������Ϊ����
	int m_Memory;			//�ڴ�����������Ϊ����
	CComPort m_Port;	//������Ĵ���

public:
	CComputer(double CPU, int Memory, int ID, int Baud);	//�вι��캯�����������CPU��Ϊ������m_CPU��ʼ��Ϊ3.0; �������Memory��Ϊ������m_Memory��ʼ��Ϊ4
	CComPort GetComPort(void)const;	//��ȡ������������ݵij���Ա����
	CComputer& operator++();			//ǰ++�����ڲ�������������CComPort���ǰ++��ͬ��CPU��Ƶm_CPU����1.0���ڴ�����m_Memory����2
	CComputer operator++(int);		//��++������������ǰ++��ͬ
	/*
		�����������
		���ڲ��������ʽ��CComPort����ͬ
		CPU��Ƶռ8�У�С�����ֱ���2λ���Ҷ����󲹿�
		�ڴ�����ռ5�У��Ҷ����󲹿�
	*/
	friend ostream& operator<<(ostream& Out, const CComputer& Data);
};

 CComputer::CComputer(double CPU=3.5, int Memory=4, int ID=1, int Baud=115200):m_Port(ID,Baud){
	 //�вι��캯�����������CPU��Ϊ������m_CPU��ʼ��Ϊ3.0; �������Memory��Ϊ������m_Memory��ʼ��Ϊ4
	 //����CComputer�๹�캯�����粻ָ����������ֵ����Ĭ��ȡֵΪ��CPU=3.5��Memory=4��ID=1��Baud=115200��
	 if(CPU<=0){CPU=3.0;}
	 if(Memory<=0){Memory=4;}
	 this->m_CPU=CPU;
	 this->m_Memory=Memory;
 }
 CComPort  CComputer::GetComPort(void)const{
	return m_Port;
 }
 CComputer&  CComputer::operator++(){
	//ǰ++�����ڲ�������������CComPort���ǰ++��ͬ��CPU��Ƶm_CPU����1.0���ڴ�����m_Memory����2
	 ++(this->m_Port);
	 this->m_CPU+=1.0;
	 this->m_Memory+=2;
	 return *this;
 }
 CComputer  CComputer::operator++(int){
	 CComputer c(*this);
	 ++(this->m_Port);
	 this->m_CPU+=1.0;
	 this->m_Memory+=2;
	 return c;
 }
 ostream& operator<<(ostream& Out, const CComputer& Data){
	 /*
		�����������
		���ڲ��������ʽ��CComPort����ͬ
		CPU��Ƶռ8�У�С�����ֱ���2λ���Ҷ����󲹿�
		�ڴ�����ռ5�У��Ҷ����󲹿�
	*/
	 Out<<Data.m_Port;
	 Out<<setw(8)<<fixed<<setprecision(2)<<right<<setfill(' ')<<Data.m_CPU;
	 Out<<setw(5)<<right<<setfill(' ')<<Data.m_Memory;
	 return Out;
 }
 /*1)	��д����ReadFile����ǰ�������ı��ļ���������ݵĶ��룬������������A�С�
 */
 vector<CComputer>  ReadFile(string path){
	 /*
	 1)	��1�б�ʾ�������CPU��Ƶ��double����;
2)	��2�б�ʾ��������ڴ�������int���ͣ�
3)	��3�б�ʾ������Ĵ��ڱ�ţ�int����;
4)	��4�б�ʾ������Ĵ���ͨѶ���ʣ�int����;
*/
	 ifstream ifile(path);
	 if(!ifile){
		 cout<<"dakaishibai"<<endl;
		 exit(0);
	 }
	 vector<CComputer> A;
	 while(!ifile.eof()){
		 double CPU;
		 int Memory;
		 int ID;
		 int Baud;
		 ifile>>CPU>>Memory>>ID>>Baud;
		 A.push_back(CComputer(CPU,Memory,ID,Baud));
	 }
	 ifile.close();
	 return A;
 }
 /*
2)	��д����DeleteData�����ڰ�����A�д���ͨѶ����С�ڵ���X�ļ��������ɾ�����粻ָ��X��ֵ����XĬ�ϵ���9600��
*/
void DeleteData(vector<CComputer> &a,int X=9600){
	for(vector<CComputer>::iterator it=a.begin();it!=a.end();){
		if(it->GetComPort().GetBaud()<=9600){
			it=a.erase(it);
		}
		else{
			it++;
		}
	}
}
 /*
3)	��д����WriteFile�����ڽ�������A�����м�������ݱ��浽d:\res.txt�ı��ļ��С�
*/
void WriteFile(string path, const vector<CComputer> &a){
	ofstream ofile(path);
	if(!ofile){
		cout<<"dakaishibai"<<endl;
		 exit(0);
	}
	for(int i=0;i<a.size();i++){
		ofile<<a[i]<<endl;
	}
	ofile.close();
}
int main()
{
	vector<CComputer> A;

	A = ReadFile("d:\\input.txt");	//��ȡ�ļ�����������A
	DeleteData(A);		//ɾ������A�д���ͨѶ����С�ڵ���9600�ļ��������
	WriteFile("d:\\res.txt", A);	//������A�еļ��������д��ָ���ļ�

	CComputer c1;
	cout << c1 << endl;
	cout << c1++ << endl;
	cout << ++c1 << endl;

	return 0;
}

考试被扣了6分,因为CComputer构造函数定义有问题——我没有直接冒号定义m_port!这意味着我给CComPort的构造函数设置了默认值进行补救。实际上这只是对CComputer的约束,不应该涉及到CComPort。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值