1、国家二级 C+机试(操作题)模拟试卷 501及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,其中在编辑窗口内显示的主程序文件中定义有类 ABC和主函数 main。程序文本中位于每行 “ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 21 23 注意:只修改每个 “ ERROR*found*”下面的一行,不要改动程序中的其他任何内容。 #include iostream using namespace std; class ABC public: ERROR*found* ABC( )a=0; b=0; c=0; ABC(
2、int aa, int bb, int cc); void Setab( )+a, +b; int Sum( )return a+b+c; private: int a, b; const int c; ; ABC: ABC(int aa, int bb, int cc): c(cc)a: aa; b=bb; int main( ) ABC x(1, 2, 3), y(4, 5, 6); ABC z, *w=&z; w- Setab( ); ERROR*found* int s1=x Sum( )+y- Sum( ); cout: s1 : ERROR*found* int s2=s1+w S
3、um( ); cout s2 endl; return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 proj2,此工程中包含一个源程序文件main cpp,其中有 “房间 ”类 Room及其派生出的 “办 公室 ”类 Office的定义,还有主函数 main的定义。请在程序中 “ *found*”下的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: 办公室房间号: 308 办公室长度: 5 6 办公室宽度: 4 8 办公室面积: 26 88 办公室所属部门:会计科 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动 “ *fo
4、und*”。 #1nClude iostream using namespace std; class Room “房间 ”类 int room_no;房间号 double length;房间长度 (m) double width;房间宽度 (m) public: Room(int the_room_no, double the_length, double the_width):room_no(the_room_no), length(the_length), width(the_width) int theRoomNo( )constreturn room_no; 返回房间号 double
5、 theLength( )constreturn length; )返回房间长度 double theWidth( )constreturn width; )返回房间宽度 *found* double theArea( )const_返回房间面积 (矩形面积 ) ; class Office: publicRoom “办公室 ”类 char*depart;所属部门 publiC: Office(int the_room_no, double the_length, double the_width, const char*the_depart) *found* : _ depart=new c
6、harstrlen(the_depart)+1; *found* Strcpy(_); Office( )(delete depart; const char*theDepartment( )constreturn depart; 返回所属部门 ; int main( ) *found* Office_; cout “办公室房间号: “ an_office theRoomNo( ) endl “办公室长度: “ an_office theLength( ) endl “办公室宽度: “ an_office theWidth( ) endl “办公室面积: “ an_office theArea
7、( ) endl “办公室所属部门: “ an_ofrice theDepartment( ) endl; return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中声明了 ValArray类,该类在内部维护一个动态分配的整型数组。 ValArray类的复制构造函数应实现对象的深层复制。请编写 ValArray类的复制构造函数。在 main函数中给出了一组测试数据,此种情况下程序的输出应该是: ValArray v1=1, 2, 3, 4, 5 ValArray v2=1, 2, 3, 4, 5 要求: 补充编制的内容写在 “ *333*”与 “ *666*”之间
8、,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out dat中。输出函数 writeToFile已经编译为boj文件,并且在本程序中调用。 ValArray h #include iostream using namespace std; class ValArray int*v; int size; public: ValArray(const int*p, intn): siZe(n) v=new intsize; for(int i=0; i size; i+) vi=pi; ValArray(const Va2Array&other); ValArray( )(delet
9、e v; void print(ostream&out)const out ; for(int i=0; i size1; i+) out vi “, “; out vsize-1 ; void setArray(int i, intval) vi=val; ; voidwriteToFile(const char*); main cpp #include“ValArray h“ ValArray: ValArray(constValArray&other) *333* *666* int main( ) const int a =1, 2, 3, 4, 5; ValArray v1(a, 5
10、); tout “ValArray v1=“: v1 print(cout); couL endl: ValArray v2(v1); cout “ValArray v2=“; v2 print(cout); tout endl: writeToFile(“ “); return0; 国家二级 C+机试(操作题)模拟试卷 501答案与解析 一、基本操作题 1 【正确答案】 (1)ABC( ): a(0), b(0), c(0) (2)int s1=x Sum( )+y Sum( ); (3)int s2=s1+w- Sum( ): 【试题解析】 (1)主要考查考生对构造函数的掌握情况,根据私有
11、成员的定义:const int c;可知, c为常变量,因此构造函数必须使用成员列表初始化来给 c赋初始值。 (2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句: ABC x(1,2, 3), y(4, 5, 6);可知, x和 y都是 ABC类,但不是指针,因此它们调用 ABC类的成员函数要使用标识符 “ ”,而不是 “- ”。 (3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句: ABC z,*w=&z;可知, w是 ABC类的指针,指向 z,因此 w调用 ABC类的 成员函数时要使用标识符 “- ”,而不是 “ ”。 二、简单应用题 2 【正确答案】 (1)ret
12、urn length*width; (2)Room(the_room_no, the_length, the_width) (3)depart, the_depart (4)an_office(308, 5 6, 4 8, ”会计科 ”) 【试题解析】 (1)主要考查考生对成员函数的掌握,题目要求返回房间面积 (矩形面积 )。由此可知空格部分要填写的是一个 return语句,返回房间面积,也就是length*width,因 此可以得出程序 return length*width;。 (2)主要考查考生对派生类的构造函数的掌握,派生类的构造函数要使用成员列表初始法先对基类进行初始化。 (3)考查
13、 strcpy函数,由前一条语句 depart=new charstrlen(the_depart)+1;可知,程序给 depart分配了长度为 the_depart串长加 1的空间,因此要复制字符串the_depart串到 depart,直接填写 strcpy(depart, the_depart)即可。 (4)主要考查考生对类的掌握,题目要求输出的 结果为: 办公室房间号: 308 办公室长度: 5 6 办公室宽度: 4 8 办公室面积: 26 88 办公室所属部门:会计科 由 Office类的构造函数可知要定义的一个 ofrice类的对象为 an_office(308,5 6, 4 8,
14、 “会计科 “)。 三、综合应用题 3 【正确答案】 size=other size; v=newintsize; for(int i=0; i size; i+) setArray(i, other vi); 【试题解析】 主要考查考生对复制构造函数的掌握, ValArray类的复制构造函数应实现对象的深层复制。由 ValArray类的构造函数: valArray(const int*p, int n): size(n) v=new intsize;给 v分配大小为 Size的空间 for(int i=0; i size; i+)遍历 p vi=pi;把 pi赋值给 vi 可知类中 v是动态数组, size表示数组长度,因此要先给 v分配空间为 size,再逐个元素复制以达到对象的深层复制。