1、国家二级 C+机试(操作题)模拟试卷 122及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 projl下的工程 projl,此工程中含有一个源程序文件 projl cpp。其中位于每个注释 “ ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: Constructor called The value is 10 Max number is 20 Destructor called 注意:只能修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 projl cpp #include using n
2、amespace std; class MyClass public: ERROR*found* void MyClass(int i) value=i; couty?x: y; )求两个整数的最 大值 ERROR*found* int Max(int x, int y, int z=0) 求三个整数的最大值 if(xy) return xz?X: z; else return yz?y: z; int GetValue()constreturn value; ) 一 MyClass()cout using namespace std; const int Size=5; class Stac
3、k; class Item f public: * found* Item(const int&val): _) 构造函数对 item进行初始化 private: int item; Item*next; friend clasS Stack; ; class Stack public: Stack(): top(NULL) 一 Stack(); int Pop(); void Push(const int&); private: Item*top; ; Stack:一 Stack() Item*P=top, *q; while(p!=NULL) q=p一 next; *found* _; 释
4、放 P所指向的节点 P=q; int Stack: Pop() Item*temp; int ret; * found* ; 使 temp指向栈顶节点 ret=top一 item; top=top一 next; delete temp; return ret; ) void Stack: Push(const int&val) Item*temp=new Item(val); * found* ; 使新节点的 next指针指向栈顶数据 top=temp; int main() Stack s; for(int i=1; i using namespace std; class MyPoint表
5、示平面坐标系中的点的类 double x; double y; public: MyPoint(double x, double y)this一 x=X; this一 Y=Y; ) double getX()constreturn x; ) double getY()constreturn Y; ) void show()constcouty?x: y; 中两个形参变量都是 int型,而语句 int Max(int x, int y, int z=0)的前两个形参也都是 int型,第三个形参定义默认值,那么这两个 Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参
6、个数不同,所以要把 int z=0改为 int z,才能构成 函数重载。 (3)主要考查成员函数的调用,因为 value是私有成员,所以不能被类外函数直接调用,而且 value()的用法也是错误的,可以使用成员函数 obj GetValue()得到value的值。 二、简单应用题 2 【正确答案】 (1)it: em(val) (2)deletep (3)temp=top (4)temp一 next=top 【试题解析】 本题考查堆栈类 Stack类、 Item类、构造函数、析构函数、成员函数和函数调用。堆栈类的节点一般使用指针表示,也就会考查到指针的相关知识点, 要注意释放指针应使用 del
7、ete语句。 【解题思路】 (1)主要考查构造函数,对私有成员进行初始化,即 item(val)。 (2)主要考查使用 delete语句释放指针,一般格式为: delete+指针。 (3)指向栈顶节点的是 top指针,要使 temp指向栈顶节点,故使用语句temp=top;。 (4)指向栈顶节点的是 top指针,要使新节点的 next指针指向栈顶数据,故使用语句 temp一 next=top;。 【解题宝典】 本题涉及堆栈类,栈是先进后出,后进先出的存储结构。对于此类问题指针的使用是个难点 ,要记住栈中指向栈顶节点的是 top指针,添加数据时要往栈顶添加。 三、综合应用题 3 【正确答案】 (
8、1)MyPoint p1, MyPoint p2 (2)upleft getX(), down_right getY() (3)double MyRectangle: 【试题解析】 本题考查表示平面坐标系中的点的类 MyPoint、表示矩形的类MyRectangle、构造函数和成员函数。 【解题思路】 (1)考查构造函数,构造函数中的参数要给私有成员赋值,在下旬中 up left(p1),down right(p2)指出私有成员赋值要使用形参 p1和 p2,因此这里参数要定义为MyPoint p1, MyPoint p2。 (2)主要考查威员函数的返回语句, MyPoint My Rectangle: getDownleft()coD_st函数要求返回一个左下角的点坐标,因此使用语句 MyPoint(up_left getX(),down_right getY();。 (3)主要考查成员函数的定义,在 MyRectangle类中已经声明 double area()const,因此此处只要添加 double MyRect angle:即可。 【解题宝典】 构造函数的参数定义时要注意在赋值语句中使用的参数。考查构造函数一般都会考查到形参,应注意联系上下文。类的成员函数在类外定义时要在函数名前面加上:返回值类型 +类名 +作用域 (: )。