1、国家二级 C+机试(操作题)模拟试卷 126及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 pmjl下的工程 projl,此工程中含有一个源程序文件 projl cpp。其中位于每个注释 “ ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value is: 10 注意:只修改注释 “ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 projl cpp #include using namespace std; class Member ERROR*found* private: Memb
2、er(int val): value(val) int value; ); class MyClass Member m; public: ERROR*found* MyClass(int val) int GetValue()constreturn m value ; ; int main() MyClass*obj=new MyClass(i0); ERROR*found* 下列语句输出 obj指向类中的 value值 cout using namespace std; class CharShape public: CharShape(char ch):一 ch(ch); virtual
3、 void Show()=0; protected: char ch;组成图形的字符 ; class Triangle: public CharShape public: Triangle(char ch, int r): Char Shape(ch),一 rows(r) void Show(); private: int rows;行数 ; class Rectangle: public CharShape public: Rectangle(char ch, int r, int C): CharShape(ch), _rows(r),一 cols(c) void Show(); priv
4、ate: int rows, cols;行数和列数 ; void Triangle: Show() 输出字符组成的三角形 for(int i=1; i #include #include #include“intArray h” using namespace std; intArray: intArray() length=10; array=new int1ength; intArray: intArray(char*filename) ifstream myFile(filename); array=new int300; length=0; while(myFilearray1engt
5、h+) length_; myFile close(); intArray& intArray: operator = (const intArray src) if(array!=NULL)deletearray; length=src 1ength; array=new int1ength; *333* *666* return*this; intArray: :一 intArray() deletearray; void intArray: show() int step=0; for(int i=0; iGetValue()”,而不是 “ ”,这是最容易出错的地方。私有成员使用 pri
6、vate,公有成员使用public,保护成员使用 protected,类的构造函数一定是公有成员函数。 【解题思路】 (1)主要考查考生对私有成员和公有成员的掌握,先看改错语句的下一条语句:Member(int val): value(val),该语句是一个构造函数,因此我们可以得出此处为公有成员,因为构造函数不可能是私有成员。 (2)主要考查构造函数,构造函数要对 类的成员进行初始化,因此在这里使用成员列表初始化,即 MyClass(int val):一 m(val)或 MyClass(int val)一 m=val。 (3)指针调用类的成员函数时,应使用标识符 “一 ”。 【解题宝典】 判
7、断该成员是公有成员还是私有成员的方法很多,不必一一死记,只要记住公有成员可以被类外函数调用,私有成员则不可以,类的构造函数一定是公有成员函数就可以了。 二、简单应用题 2 【正确答案】 (1)i*21 (2)一 rows (3)一 cols (4)CharShape&cs 【试题解析】 本题主要考查抽象类 CharShape类及其派生类 Triangle和Rectangle,其中涉及构造函数、纯虚函数、成员函数和函数调用。着重考查函数Show()在 Triangle类与在 Rectangle类中的定义,填空前应先理解 Show()函数在该类中的功能。 【解题思路】 (1)考查 for循环语句,
8、该语句所在的函数的功能是输出字符组成的三角形。从外层循环中可以看出下标 i代表行数,那么下标 j就代表每一行字符的个数,因为要输出的是三角形,所以每一行的个数与该行的行数相关,即 j=i* 2一 1;。 (2)考查 for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标 i不大于行数即可。 (3)考查 for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标 j不大于列数即可。 (4)主要考
9、查考生对虚函数的掌握,该语句所在的函数是普通函数 fun,题目要求为fun函数添加形参。从函数体中可以知道形参名为 cs,那么形 参的类型是什么呢 ?就是抽象类 CharShape,因此要使用 CharShape&cs才可以实现题目要求输出的内容。 【解题宝典】 本题主要考查考生对 for循环语句的掌握及虚函数的使用, for循环是最常考到的知识点,要结合好上下文的语义来填写,首先要清楚该语句所在函数要实现的功能,其次要知道该语句的作用。 三、综合应用题 3 【正确答案】 for(int i=0; ilength; i+)遍历对象 src中的数组 array,然后依次把值放进数组 array中
10、 arrayi=src arrayi; array1=srcarray 1; 【试题解析】 本题主要考查 intAtray类,其中涉及动态数组、构造函数、运算符重载、析构函数及其他成员函数。 【解题思路】 主要考查考生对运算符重载的掌握,该函数要重载运算符 “=”,该运算符的意思是赋值。先看该函数的其他语句: if(array!=NULL)deletearray; length=src 1ength; array=new int1ength; 第一条语句是把原来动态数组释放,第二条语句是把形参 $1rc的成员 length赋值给变量 length,第三条语句是给指针 array分配内存。接下来要把动态数组中的值逐个赋给 array数组,在这里使用 for循环语句,循环变量 i的范围是 0 length,并进行赋值操作。