1、国家二级 C+机试(操作题)模拟试卷 344及答案解析(总分:8.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程中包含一个源程序文件maincpp,其中有类 Book(“书”)和主函数 main的定义。程序中位于每个“ERROR*found*”下的语句行有错误,请加以改正。改正后程序的输出结果应该是: 书名:C+语句程序设计总页数:299 已把“C+语言程序设计”翻到第 50页 已把“C+语言程序设计”翻到第51页 已把“C+语言程序设计”翻到第 52页 已把“C+语言程序设计”
2、翻到第 5l页 已把书合上。 当前页:0 注意:只修改每个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeiostreamusing 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);
3、 coutendl”书名:”title ”总页数:”num pages; 一 Book()deletetitle; bool isClosed()constreturn cur_page=0;书合上时返回 true,否则返回 false bool isOpen()constreturn!isClosed();)书打开时返回 true,否则返回 false int numOfPages()constreturn numpages; 返回书的页数 int currentPage()constreturn cur_page;, 返回打开页面的页码 ERROR*found* void openAtPa
4、ge(int page no)const 把书翻到指定页 coutendl; if(page_no1 | page_nonum_pages) cout”无法翻到第”curpage”页。”; close(); else cur_page=page_no; cout”已把“title”翻到第”cur_page”页”; void openAtPrevPage()openAtPage(cur_page一 1);)把书翻到上一页 void openAtNextPage()openAtPage(cur_page+1);把书翻到下一页 void close() 把书合上 coutend1; if(isClo
5、sed() cout”书是合上的。”; elseERROR*found* num_pages=0; cout”已把书合上。”; coutend1; ;int main()Book book(”C+语言程序设计”,299);bookopenAtPage(50);bookopenAtNextPage();bookopenAtNextPage();bookopenAtPreVPage();bookclose();cout”当前页:”bookcurrentPage()endl; return 0;(分数:2.00)_2.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此
6、工程包含有一个源程序文件proj1cpp。其中位于每个注释“ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: (4,4) 注意:只修改注释“ERROR *found*”的下一行语句,不要改动程序中的其他内容。proj1cpp#includeiostreamusing 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*f
7、ound* void Move (double xOff,doubleyOff)const x+=xOff; y+=yOff;)protected: double x,y;int main() Point pt(15,25); ptMove(25,15);ERROR*found* 以下语句输出 pt成一 X和_y 的值 cout(pt ,pt_y)endl; return 0; (分数:2.00)_二、简单应用题(总题数:1,分数:2.00)3.请使用 VC6或使用【答题】菜单打开考生文件夹 prog2下的工程 prog2。此工程中包含一个程序文件mainepp,其中有“部门”类 Depart
8、ment和“职工”类 Staff的定义,还有主函数 main的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: 改换办公室前: 职工号:0789 姓 名:张三 部 门:人事处 办公室:521 职工号:0513 姓 名:李四 部 门:人事处 办公室:521 改换办公室后: 职工号:0789 姓 名:张三 部 门:人事处 办公室:311 职工号:0513 姓 名:李四 部 门:人事处 办公室:311 注意:只在横线处填写适当的代码,不要改
9、动程序中的其他内容。#includeiostreamusing 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 changeOfficeT0(const char*office) 改换为指定房号的另一个办公室
10、 strcpy(this 一office,office); private: char name20;部门名称 char office20;部门所在办公室房号 ; class Staff “职工”类 public: /*found* Staff(const char*my id,constchar*my_name,Department Staff Zhang(”0 7 8 9”,”张三”,dept),Li(”0513”,”李四”,dept); cout“改换办公室前:“end1; showStaff(Zhang); showStaff(Li); 人事处办公室由 521搬到311*found*
11、cout”改换办公室后:”endl; showStaff(Zhang); showStaff(Li); return 0;(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)4.请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 proj3,其中包含了类 IntegerSet和主函数 main的定义。一个 IntegerSet对象就是一个整数的集合,其中包含 0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组 elem的前若干单元中。成员函数 add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数 remove从集合中删除指
12、定的元素(如果集合中存在该元素)。请编写成员函数 remove。在 main函数中给出了一组测试数据,此时程序的正确输出结果应为: 2 3 4 5 27 28 31 66 75 2 3 4 5 6 27 28 31 66 75 2 3 4 5 6 19 27 28 31 66 75 3 4 5 6 19 27 28 31 66 75 3 4 5 6 19 27 28 31 66 75 要求: 补充编制的内容写在“*333*”与“*666*”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 WriteToFile已经编译为 obj文件,并且在本程序中调用。
13、/IntegorSet,h#i fndef INTEGERSET#de fine INTEGERSET#inCludeiostreamusing namespace std;const int MAXELEMENTS=100;集合最多可拥有的元素个数 class IntegerSet int elemMAXELEMENTS; 用于存放集合元素的数组 int counter;用于记录集合中元素个数的计数器 public: IntegerSet():counter(0)( 创建一个空集合 IntegerSet(int data,int size); 利用数组提供的数据创建一个整数集合 void a
14、dd(int element); 添加一个元素到集合中 void remove(int element); 删除集合中指定的元素 int getCount()constreturn counter;) 返回集合中元素的个数 int getElement(int i)constreturn elemi;)返回集合中指定的元素 void show()const; ; void WriteToFile(char*); #endif maincpp #include”IntegerSeth” #includeiomanip IntegerSet:IntegerSet(int data, int Siz
15、e):counter(0) for(int i=0;iSize;i+) add(datai); void IntegerSet:add(int element) int j; 从后往前寻找第一个小于等于 element的元素 for(j=counter;j0;j 一一) if(element=elemj1)break; 如果找到的是等于 element的元素,说明要添加的元素已经存在,直接返回 if(j0) if(element=elemj一 1)return; 如果找到的是小于 element的元素,j 就是要添加的位置 该元素及其后面的元素依次后移,腾出插入位置 for(int k=cou
16、nter;kj;k 一一) elemk=elemk1;elemj=element;将 element插入到该位置 counter+; 计数器加 1 void IntegerSet:remove(int ele。 ment) *333* *666* void IntegerSet:show()const for(int i=0;igetCount();i+) coutsetw(4)getElement(i);coutendl; int main() int d=5,28,2,4,5,3,2,75,27,66,31; IntegerSet S(d,11); sshow(); Sadd(6); Ss
17、how(); Sadd(19); Sshow(); Sremove(2); Sshow(); Sadd(4); Sshow(); WriteToFile(”); return 0; (分数:2.00)_国家二级 C+机试(操作题)模拟试卷 344答案解析(总分:8.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程中包含一个源程序文件maincpp,其中有类 Book(“书”)和主函数 main的定义。程序中位于每个“ERROR*found*”下的语句行有错误,请加以改正。改正后程序
18、的输出结果应该是: 书名:C+语句程序设计总页数:299 已把“C+语言程序设计”翻到第 50页 已把“C+语言程序设计”翻到第51页 已把“C+语言程序设计”翻到第 52页 已把“C+语言程序设计”翻到第 5l页 已把书合上。 当前页:0 注意:只修改每个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeiostreamusing namespace std;class Book char*title; int num_pages;/页数 int cur page;当前打开页面的页码,0 表示书未打开 public:ERROR*found* Book(cons
19、t char*theTitle,int pages)num_pages(pages) title=new charstrlen(theTitie)+1; strcpy(title,theTitle); coutendl”书名:”title ”总页数:”num pages; 一 Book()deletetitle; bool isClosed()constreturn cur_page=0;书合上时返回 true,否则返回 false bool isOpen()constreturn!isClosed();)书打开时返回 true,否则返回 false int numOfPages()const
20、return numpages; 返回书的页数 int currentPage()constreturn cur_page;, 返回打开页面的页码 ERROR*found* void openAtPage(int page no)const 把书翻到指定页 coutendl; if(page_no1 | page_nonum_pages) cout”无法翻到第”curpage”页。”; close(); else cur_page=page_no; cout”已把“title”翻到第”cur_page”页”; void openAtPrevPage()openAtPage(cur_page一
21、1);)把书翻到上一页 void openAtNextPage()openAtPage(cur_page+1);把书翻到下一页 void close() 把书合上 coutend1; if(isClosed() cout”书是合上的。”; elseERROR*found* num_pages=0; cout”已把书合上。”; coutend1; ;int main()Book book(”C+语言程序设计”,299);bookopenAtPage(50);bookopenAtNextPage();bookopenAtNextPage();bookopenAtPreVPage();bookclo
22、se();cout”当前页:”bookcurrentPage()endl; return 0;(分数:2.00)_正确答案:(正确答案:(1)Book(eonst char*theTifle,int pages):num_pages(pages) (2)void openAtPage(int page_no)把书翻到指定页 (3)cur_page=0;)解析:解析:(1)主要考查考生对构造函数的掌握,构造函数的成员列表初始化法要注意它的格式,即成员列表前要有标识符“:”,因此语句改为:Book(const char*theTifle,int pages):hum_pages(pages)。 (
23、2)主要考查考生对 const函数的掌握,在函数体中可以看到有语句cur_page=page_no,即 cur_page的值发生改变,因此该函数不是 const函数。 (3)主要考查考生对成员函数的掌握,题目要求输出的最后一条是“当前页:0”,可知主函数中调用 close函数后当前页为 0,因此应该是 cur_page=0;。2.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程包含有一个源程序文件proj1cpp。其中位于每个注释“ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: (4,4) 注意:只修改注释“ERR
24、OR *found*”的下一行语句,不要改动程序中的其他内容。proj1cpp#includeiostreamusing 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,doubleyOff)const x+=xOff; y+=yOff;)protected: double x,y;int mai
25、n() Point pt(15,25); ptMove(25,15);ERROR*found* 以下语句输出 pt成一 X和_y 的值 cout(pt ,pt_y)endl; return 0; (分数:2.00)_正确答案:(正确答案:(1)Point(double X,double Y):_X(X),_Y(Y)或 Point(double X,double Y)_x=x;_y=y; (2)void Move(double xOff,double yOff) (3)coutoffice,office); (2)return office; (3)dept(my_dept) (4)deptch
26、angeOfliceTo(”311”);)解析:解析:(1)主要考查考生对 strcpy函数的掌握情况,根据上一条语句:strcpy(this 一nallle,name);可知,这条语句复制的是 office,即 strcpy(this-office,office);。 (2)主要考查考生对成员函数的掌握情况,根据语句的注释:返回办公室房号可知,要填写的是一条 return语句。在私有成员里:char office20;部门所在办公室房号,表明 office即为办公室房号。因此直接返回 offiee即可。 (3)主要考查考生对构造函数的掌握情况,根据函数体: stacpy(this-staff
27、_id,my_id); strcpy(this 一name,my_name); 可知,只有 dept没有初始化,而空格前有字符“:”,这是成员列表初始化的标识符,因此填写 dept(my_dept)即可。 (4)主要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处办公室由 521搬到 311。在 Department类中有函数 void changeOfficeTo(const char*office)可以修改办公室的房间号,直接调用即可。三、综合应用题(总题数:1,分数:2.00)4.请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 proj3,其中包含了类 Int
28、egerSet和主函数 main的定义。一个 IntegerSet对象就是一个整数的集合,其中包含 0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组 elem的前若干单元中。成员函数 add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数 remove从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数 remove。在 main函数中给出了一组测试数据,此时程序的正确输出结果应为: 2 3 4 5 27 28 31 66 75 2 3 4 5 6 27 28 31 66 75 2 3 4 5 6 19 27 28 31 66 75 3 4
29、 5 6 19 27 28 31 66 75 3 4 5 6 19 27 28 31 66 75 要求: 补充编制的内容写在“*333*”与“*666*”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 WriteToFile已经编译为 obj文件,并且在本程序中调用。/IntegorSet,h#i fndef INTEGERSET#de fine INTEGERSET#inCludeiostreamusing namespace std;const int MAXELEMENTS=100;集合最多可拥有的元素个数 class IntegerSet in
30、t elemMAXELEMENTS; 用于存放集合元素的数组 int counter;用于记录集合中元素个数的计数器 public: IntegerSet():counter(0)( 创建一个空集合 IntegerSet(int data,int size); 利用数组提供的数据创建一个整数集合 void add(int element); 添加一个元素到集合中 void remove(int element); 删除集合中指定的元素 int getCount()constreturn counter;) 返回集合中元素的个数 int getElement(int i)constreturn
31、elemi;)返回集合中指定的元素 void show()const; ; void WriteToFile(char*); #endif maincpp #include”IntegerSeth” #includeiomanip IntegerSet:IntegerSet(int data, int Size):counter(0) for(int i=0;iSize;i+) add(datai); void IntegerSet:add(int element) int j; 从后往前寻找第一个小于等于 element的元素 for(j=counter;j0;j 一一) if(elemen
32、t=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 void IntegerSet:remove(int ele。 ment) *333* *666* void IntegerSet:show(
33、)const for(int i=0;igetCount();i+) coutsetw(4)getElement(i);coutendl; int main() int d=5,28,2,4,5,3,2,75,27,66,31; IntegerSet S(d,11); sshow(); Sadd(6); Sshow(); Sadd(19); Sshow(); Sremove(2); Sshow(); Sadd(4); Sshow(); WriteToFile(”); return 0; (分数:2.00)_正确答案:(正确答案:for(int i=0;icounter;1+) 遍历整个集合(数
34、组 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相等。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1