1、国家二级 C+机试(操作题)模拟试卷 214及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 projl,此工程包含一个源程序文件 proj1 cpp。文件中将表示数组元素个数的常量 Size定义为4,并用 int类型对类模板进行了实例化。文件中位于每个注释 “ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: 1 2 3 4 注意:模板参数名用 T。只修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 1 projl cpp 2 #include 3 using namesp
2、ace std; 4 将数组元素个数 Size定义为 4 5 ERROR *found* 6 const int Size; 7 template 8 clasS MyClasS 9 10 public: 11 MyClasS(T*P) 12 13 for(int i=0; i 22 ERROR *found* 23 void MyClasS: Print() 24 25 for(int i=0;iobj(intArray); 34 obj Print(); 35 cout 2 using namespace std; 3 class IntStack整数栈类 4 public: 5 virt
3、ual void push(int)=0;入栈 6 virtual int pop()=0; 7 出栈并返回出栈元素 8 virtual int topElement()const=0 ; 9 返回栈顶元素,但不出栈 10 virtual bool isEmpty()const=0; 11 判断是否栈空 12 ;, 13 class SeqStack: public IntStack 14 int data100; 存放栈元素的数组 15 int top; 栈顶元素的下标 16 public: 17 *found* 18 SeqStack(): _把 top初始化为 -1表示栈空 19 voi
4、d push(int n)data+top= 20 n; 21 *found* 22 int pop()return_; 23 int topElement()constreturn datatop; 24 bool isEmpty()constreturn top=-1; 25 ; 26 struct Node 27 int data; 28 Node*next; 29 ; 30 class LinkStack: public IntStack 31 Node*top; 32 public: 33 *found* 34 LinkStack(): _把 top初始化为 NULL表示栈空 35
5、void push(int n) 36 Node*p=new Node; 37 p-data=n; 38 *found* 39 _; 40 top=p; 41 42 int pop() 43 int d=top-data; 44 top=top-next; 45 return d; 46 47 int topElement()constreturn top-data; 48 bool isEmpty()constreturn top=NULL; 49 ; 50 void pushData(IntStack 56 57 void popData(IntStack 动态数组首地址 10 CDeep
6、Copy(int); 11 CDeepCopy(); 12 CDeepCopy赋值运算符函数 13 ; 14 15 void writeToFile(char*; 1 main cpp 2 #include“CDeepCopy h“ 3 CDeepCopy: CDeepCopy()deletep; 4 CDeepCopy: CDeepCopy(int k)n=k; p=new intn; 构造函数实现 5 CDeepCopy 13 a P0=1; d p0=666;对象 a, d数组元素的赋值 14 15 CDeepCopy b(3); 16 a P0=88; b=a; 17 调用赋值运算符函
7、数 18 cout: Prjnt() (3)MyClassobj(intArray); 【试题解析】 (1)主要考查考生对 const变量的掌握,因为 const变量不能修改,所以在定义的同时必须初始化。 (2)主要考查考生对模板类的成员函数定义的掌握,因为 MyClass类是模板类,所以在定义该函数时要加上模板标识符 “”,即语句 void MyClass:Print()。 (3)主要考查考生对模板类构造函数的调用的理解,从上一条语句 int intArraySize=1, 2, 3, 4;中 可以知道 intArray为 int型,因此定义 obj时要使用 ,即 MyClassobj(in
8、tArray);。 二、简单应用题 2 【正确答案】 (1)top(-1) (2)datatop- (3)top(NULL) (4)p-next=top 【试题解析】 (1)主要考查考生对构造函数的掌握情况,先看语句注释:把 top初始化为 -1表示栈空,即要把 top赋值为 -1即可。 (2)主要考查考生对纯虚函数的掌握情况,先看纯虚函数在基类的注释:出栈并返回出栈元素。要返回栈 顶元素可以通过 datatop得到,出栈同时要使得 top往下移动,即 top-。 (3)主要考查考生对构造函数的掌握情况,先看语句注释:把 top初始化为NULL表示栈空,因此使用成员列表初始化直接把 top赋值
9、为 NULL即可。 (4)主要考查考生对栈的掌握, push为人栈函数, top指向栈顶元素,因此新添加的指针的 next要指向 top,即 p-next=top;。 三、综合应用题 3 【正确答案】 1 n=r n; 把对象 r字符长度赋值给 n 2 deletep; 删除 动态数组 p 3 p=new intn;给动态数组 p分配空间为 n 4 for(int i =0; i n; i+)遍历对象 r中的数组 p 5 pi =r pi;把 r pi赋值给 pi 6 return*this; 返回被赋值的对象 【试题解析】 主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。要重载的运算符是 “=”,该类的成员是动态数组 p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。