1、国家二级 C+机试(操作题)模拟试卷 334及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 pmj1,此工程包含一个源程序文件 proj1 epp。文件中将表示数组元素个数的常量 Size定义为4,并用 int类型对类模板进行了实例化。文件中位于每个注释 “ ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: 1 2 3 4 注意:模板参数名用 T。只修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include using namespace s
2、td; 将数组元素个数 Size定义为 4 ERROR*found* const int Size; template class MyClass public: MyClass(T*P) for(int i=0; i ERROR*found* void MyClass: Print() for(int i=0; iobj(intArray); obj Print(); cout using namespace std; class CharShape public: CharShape(char ch):一 ch(ch); virtual void Show()=0; protected:
3、char ch;组成图形的字符 ; class Triangle: public CharShape public: Triangle(char ch, int r): Char Shape(ch),一 rows(r) void Show(); private: int rows;行数 ; class Rectangle: publ ic CharShape public: Rectangle(char ch, int r, int c): CharShape(ch), _rows(r), _cols(c) voio Show(); private: int rows, cols;行数和列数
4、; void Triangle: Show() 输出字符组成的三角形 for(int i=1; i using namespace std; const int Max=100; ClaSS IntSet public: IntSet() 构造一个空集合 end=一 1; IntSet(int a, int size)构造一个包含数组 a中 size个元素的集合 if(Size=Max) end=Max一 1; else end=Size一 1; for(int i=0; i: Print() (3)MyClassobj(intArray); 【试题解析】 (1)主要考查考生对 const变量
5、的掌握,因为 const变量不能修改,所以在定义的同时必须初始化 。 (2)主要考查考生对模板类的成员函数定义的掌握,因为 MyClass类是模板类,所以在定义该函数时要加上模板标识符 “”,即语句 void MyClass:Print()。 (3)主要考查考生对模板类构造函数的调用的理解,从上一条语句 int intArraySize=1, 2, 3, 4;中可以知道 intArray为 int型,因此定义 obj时要使用 ,即 MyClassobj(intArray);。 2 【正确答案】 (1)MyClass(int i) (2)int Max(int x, int y, int Z)
6、(3)coutY?x: y; 中两个形参变量都是 int型,而语句int Max(int x, int y, int z=0)的前两个形参也都是 int型, 第三个形参定义默认值,那么这两个 Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参个数不同,所以要把 int z=0改为 int z,才能构成函数重载。 (3)主要考查成员函数的调用,因为 value是私有成员,所以不能被类外函数直接调用,而且 value()的用法也是错误的,可以使用成员函数 obj GetValue()得到value的值。 二、简单应用题 3 【正确答案】 (1)const Point&
7、p (2)p1(p1), p2(p2) (3)Point p1, Point p2, Point p3 (4)(length1()+length2()+length3() 2 【试题解析】 (1)主要考查考生对函数形参的掌握,由函数的注释可知有本坐标点到达某个坐标点类的距离,再根据函数体 return sqrt(xp x)*(xp x)+(yp y)*(yp y);可知,该坐标点类名为 p,因此可以知道形参为 Point&p,为了不改变该坐标点的值,前面要加上 const。 (2)主要考查考生对构造函数的掌握,对于常变量型私有成员 const Point p1,p2,只能用成员初始化列表进行赋
8、值。 (3)主要考查考生对构造函数的掌握,由空格后面的语句: pl(p1), p2(p2),p3(p3)可知,该构造函数需要进行成员列表初始化,再看类的私有成员 const Point p1, p2, p3,可知 p1, p2, p3是 Point类型,因此形参为 Point p1, Point p2, Point p3。 (4)主要考查考生对成员函数的掌握,根据函数注释,可知本函数要求计算三角形面积,再看题目的提示: s=(a+b+c) 2。可知空格处要填的是三角形的三条边之和除 以 2,而求边长的函数已经给出,这里直接调用即可。 4 【正确答案】 (1)i*2一 1 (2)_rows (3)_cols (4)CharShape&cs 【试题解析】 (1)考查 for循环语句,该语句所在的函数的功能是输出字符组成的三角形。从外层循环中可以看出下标 i代表行数,那么下标 j就代表每一行字符的个数,因为要输出的是三角形,所以每一行的个数与该行的行数相关,即 j=Max) end=Max一 1; else end=size一 1; for(int i=0; i=end; i+) elementi=ai; 可知数组 element用来装载集合, end表示数组长度,因此调用函数IsMemberOf来判断 set中的元素是否存在于集合中,如果存在则放入数组 a中。