1、国家二级 C+机试(操作题)模拟试卷 344及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程中包含一个源程序文件 main cpp,其中有类 Book(“书 ”)和主函数 main的定义。程序中位于每个 “ ERROR*found*”下的语句行有错误,请加以改正。改正后程序的输出结果应该是: 书名: C+语句程序设计总页数: 299 已把 “C+语言程序设计 ”翻到第 50页 已把 “C+语言程序设计 ”翻到第 51页 已把 “C+语言程序设计 ”翻到第 52页 已把 “C+语言程序设计 ”翻到第 5l页 已把书合上。 当
2、前页: 0 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include using namespace std; class Book char*title; int num_pages; /页数 int cur page;当前打开页面的页码, 0 表示书未打开 public: ERROR*found* Book(const char*theTitle, int pages)num_pages(pages) title=new charstrlen(theTitie)+1; strcpy(title, theTitle); coutnum_pa g
3、es) cout using namespace std; class Point , public: ERROR*found* Point(double X, double Y)_X(x), _y (Y) double GetX()constreturn X; ) double GetY()constreturn_y; ) ERROR*found* void Move (double xOff, double yOff)const x+=xOff; y+=yOff; ) protected: double x,y; ; int main() Point pt(1 5, 2 5); pt Mo
4、ve(2 5, 1 5); ERROR*found* 以下语句输出 pt成一 X和 _y的值 cout using namespace std; class Department “部门 ”类 public: Department (const char * name, const char*office) strcpy(this一 name, name); *found* const char*getName()constre- turn name; ) 返回部门名称 *found* const char*getOffice()const _ 返回办公室房号 void changeOffic
5、eT0(const char*office) 改换为指定房号的另一个办公室 strcpy(this一 office, office); private: char name20;部门名称 char office20;部门所在办公室房号 ; class Staff “职工 ”类 public: /*found* Staff(const char*my id, const char*my_name, Department 用于记录集合中元素个数的计数器 public: IntegerSet(): counter(0)( 创建一个空集合 IntegerSet(int data, int size);
6、 利用数组提供的数据创建一个整数集合 void add(int element); 添加一个元素到集合中 void remove(int element); 删除集合中指定的元素 int getCount()constreturn counter; ) 返回集合中元素的个数 int getElement(int i)constreturn elemi;)返回集合中指定的元素 void show()const; ; void WriteToFile(char*); #endif main cpp #include”IntegerSet h” #include IntegerSet: Intege
7、rSet(int data, int Size): counter(0) for(int i=0; i0;j一一 ) if(element=elemj1)break; 如果找到的是等于 element的元素,说明要添加的元素已经存在,直接返回 if(j0) if(element=elemj一 1)return; 如果找到的是小于 element的元素, j就是要添加的位置 该元素及其后面的元素依次后移,腾出插入位置 for(int k=counter; kj;k一一 ) elemk=elemk1; elemj=element; 将 element插入到该位置 counter+; 计数器加 1
8、void IntegerSet: remove(int ele。 ment) *333* *666* void IntegerSet: show()const for(int i=0; ioffice, office); (2)return office; (3)dept(my_dept) (4)dept changeOfliceTo(”311”); 【试题解析】 (1)主要考查考生对 strcpy函数的掌握情况,根据上一条语句:strcpy(this一 nallle, name);可知,这条语句复制的是 office,即 strcpy(this-office, office);。 (2)主要
9、考查考生对成员函数的掌握情况,根据语句的注释:返回办公室房号可知,要填写的是一条 return语句。在私有成员里: char office20;部门所在办公室房号,表明 office即为办公室房号。因此直接返回 offiee即可。 (3)主要考查考生对构造函数的掌握情况,根据函数体: stacpy(this-staff_id, my_id); strcpy(this一 name, my_name); 可知,只有 dept没有初始化,而空格前有字符 “: ”,这是成员列表初始化的标识符,因此填写 dept(my_dept)即可。 (4)主要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处
10、办公室由521搬到 311。在 Department类中有函数 void changeOfficeTo(const char*office)可以修改办公室的房间号,直接调用即可。 三、综合应用题 4 【正确答案】 for(int i=0; icounter; 1+) 遍历整个集合 (数组 elem) if(element=elemij) 如果 element等于 elemi for(int j: i; jcounter一 1; j+) 从 i开始遍历集合 elem elemj=elemj+1; 把 elemj+1赋值给 elemj counter-; elem长度自减 1 return; 返回 【试题解析】 主要考查考生对有序数组的掌握,题目要求成员函数 remove从集合中删除指定的元素 (如果集合中存在该元素 )。遍历数组 elem中的元素,找出与形参 element相等的元素,并将其删除,每删除一个元素,即将该元素之后的每个元素前移一位,如果不存在与形参 element相等的元素则没有操作。使用下标 i遍历数组, if语句判断是否与 element相等。