1、国家二级 C+机试(操作题)模拟试卷 462及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程包含有一个源程序文件 proj1 cpp。其中位于每个注释 “ ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: (4, 4) 注意:只修改注释 “ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include using namespace std; class Point public: ERROR *found* Point(double x
2、, double y) _x(x), y(y) double GetX()constreturn_x; double GetY()constreturn_y; ERROR*found* void Nove(double xOff, double yOff)const _x+=xOff; _y+=yOff; protected: double x, y; ; int main() Point pt(1 5, 2 5); pt Nove(2 5, 1 5); ERROR*found* 以下语句输出 pt成员 _x和 _y的值 cout using namespace std; class ValA
3、rray int*v; int Size; public: ValArray(const int*p, intn): size(n) v=new intsize; for(int i=0; iSize; i+) vi=pi; ValArray(const ValArray&other); ValArray()deletev; void setElement(int i, int val) vi=val; void print(ostream&out)const out; for(int i=0; iSize-1; i+) out vi “, “; outvsize-1 ); ; void wr
4、iteToFile(const char*); main cpp #include“ValArray h“ ValArray: ValArray (const ValArray&other) *333* *666* int main() const int a=1, 2, 3, 4, 5; ValArray v1(a, 5); ValArray v2(V1); for(int i=0 ; i5; i+) v2 setElement(i, 2); cout“ValArray v1=“; v1 print(cout); coutendl; cout“ValArray v2=“; v2 print(
5、cout); coutendl; writeToFile(“); return 0; 国家二级 C+机试(操作题)模拟试卷 462答案与解析 一、基本操作题 1 【正确答案】 (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)cout(pt GetX(), pt GetY()endl: 【试题解析】 (1)主要考查的是构造函数的成员初始化列表的语法,在成员列表之前必须加 “: ”。 (2)主要考查成员函
6、数中 const的使用,先看 Move函数的函数 体: _x+=xOff; _y+=yOff; 可以看到 Point类的两个私有成员 _x和 _y的值都发生了变化,因此 Move函数不能使用 const,因为只有在函数内不改变类的成员的值时才能使用 const。 (3)主要考查私有成员不能被类外函数调用的知识。题目要求输出 pt成员 _x和 _y的值,从 Point类中的函数 double GetX()constreturn_x; 和 double GetY()constreturn_y; ,可以分别得到 _x和 _y的值,因此这里使用语句cout(pt GetX(), pt GetY()en
7、dl;调用成员函数 GetX()和GetY()来实现题目要求。 二、简单应用题 2 【正确答案】 (1)x1(root), x2(root), nun_of_roots(1) (2)cout“无实根 “; break; (3)a(a), b(b), c(c) (4)return Quadratic(ax a, bx b, cx c); 【试题解析】 (1)主要考查考生对构造函数的掌握,题目要求创建一个 “有两个相同的实根 ”的 Root对象。说明两个根 x1和 x2相等,根的数量为 1,因此可以得出语句: x1(root), x2(root), num_of_roots(1)。 (2)主要考查
8、考生对 switch语句的掌握,在语句 switch(num_of_roots)中,nun_of_roots代表根的数量,当为 0时,表示没有根,因此输出无实根,注意要在句尾加 break。 (3)主要考查考生对构造函数的掌握,本题使用成员初始化列表来构造函数。 (4)主要考查考生对成员函数的掌握,题目要求求两个多项式的差。两个多项式的差 就是各个次方的系数相减,因此得出语句: return Quadratic(ax a, bx b, cx c):。 三、综合应用题 3 【正确答案】 size =other size; 把对象数组的大小赋值给 size v=new int other size; 根据对象数组的大小动态分配数组 V for(int i =0 ; i size ; +i) vi =other vi; 遍历整个对象的数细把植 other vi放到数组 V中 【试题解析】 主要考 查考生对复制构造函数的掌握。由函数名: ValArray:ValAllray(const ValArray&other),知道要复制的对象是 other,对由 ValArray类的成员: int*v; int size;知道要复制的内容是动态数组 v及整型变量 size。动态数组要使用 new语句分配内存,最后利用 for循环语句来完成复制过程。