1、二级 C+分类模拟 112 及答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:30.00)1.请使用 VC6 或使用【答题】菜单打开 proj1 下的工程 proj1,该工程中含有一个源程序文件proj1.cpp。其中位于每个注释“/ ERROR *found*”之后的一行语句有错误。请改正这些错误,使程序的输出结果为:1 2 3 4 5 6 7 8 9 10 注意:只能修改注释“/ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 / proj1.cpp #include iostream using namespace std; c
2、lass MyClass public: MyClass(int len) array = new intlen; arraySize = len; for (int i = 0; i arraySize; i +) arrayi = i+1; MyClass() / ERROR *found* delete arrayi; void Print() const for (int i = 0; i arraySize; i +) / ERROR *found* cin arrayi “; cout endl; private: int * array; int arraySize; ; int
3、 main() / ERROR *found* MyClass obj; obj.Print(); return 0; (分数:30.00)_二、简单应用题(总题数:1,分数:30.00)2.请使用 VC6 或使用【答题】菜单打开 proj2 下的工程 proj2,此工程中声明的 Array 是一个表示数组的类。一个 Array 对象可以包含多个整型元素。Array 的成员说明如下: 成员函数 add 用于向数组的末尾添加一个元素; 成员函数 get 用于获取数组中指定位置的元素; 数据成员 a 表示实际用于存储数据的整型数组; 数据成员 size 表示数组的容量,数组中的元素个数最多不能超过
4、 size; 数据成员 num 表示当前数组中的元素个数。 SortedArray 是 Array 的派生类,表示有序数组。SortedArray 重新定义了 Array 中的 add 函数,以确保有序数组中的元素始终按照升序排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为: 10,9,8,7,6,5,4,3,2,1, 1,2,3,4,5,6,7,8,9,10, 注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream using namespace std; clas
5、s Array public: Array(unsigned int s) size = s; num= 0; a = new ints; virtual Array() delete a; virtual void add(int e) if (num size) / *found* _ num +; int get(unsigned int i) const if (i size) return ai; return 0; protected: int * a; unsigned int size, num; ; class SortedArray : public Array publi
6、c: / *found* SortedArray(unsigned int s) :_ virtual void add(int e) if (num = size) return; int i =0, j; while (i num) if (e ai) for (j =num; j i; j-) / *found* _; / *found* _; break; i+; if (i = num) ai = e; num +; ; void fun(Array for (i = 10; i = 1; i-) a.add (i); for (i = 0; i 10; i+) cout a.get
7、(i) “, “; cout endl; int main() Array a(10); fun(a); SortedArray sa(10); fun(sa); return 0; (分数:30.00)_三、综合应用题(总题数:1,分数:40.00)3.请使用 VC6 或使用【答题】菜单打开 proj3 下的工程文件 proj3,此工程包含一个源程序文件proj3.cpp,其中定义了用于表示二维向量的类 MyVector;程序应当显示(6,8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在“/ *1* *found*”的下方是构造函数的定义,它用参数提供的坐标对 x 和
8、 y 进行初始化。(2)在“/ *2* *found*”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其 X 坐标等于两向量 X 坐标之差,其 Y 坐标等于两向量 Y 坐标之差。 (3)在“/ *3* *found*”的下方,语句的功能是使变量 v3 获得新值,它等于向量 v1 与向量v2 之和。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。/ proj3.cpp #include iostream using std:ostream; using std:cout; using std:endl; class M
9、yVector /表示二维向量的类 double x; /X 坐标值 double y; /Y 坐标值 public: MyVector (double i = 0.0, double j = 0.0); /构造函数 MyVector operator + (MyVector j); /重载运算符+ friend MyVector operator - (MyVector i, MyVector j); /重载运算符- friend ostream /重载运算符 ; / *1* *found* _ (double i, double j): x(i),y(j) MyVector MyVecto
10、r:operator + (MyVector j) return MyVector (x + j. x, y + j. y); MyVector operator - (MyVector i, MyVector j) / *2* *found* return MyVector (_); ostream /输出向量 v 的坐标 return os; int main() MyVector v1(2,3), v2(4,5), v3; / *3* *found* v3 =_; cout v3 endl; return 0; (分数:40.00)_二级 C+分类模拟 112 答案解析(总分:100.0
11、0,做题时间:90 分钟)一、基本操作题(总题数:1,分数:30.00)1.请使用 VC6 或使用【答题】菜单打开 proj1 下的工程 proj1,该工程中含有一个源程序文件proj1.cpp。其中位于每个注释“/ ERROR *found*”之后的一行语句有错误。请改正这些错误,使程序的输出结果为:1 2 3 4 5 6 7 8 9 10 注意:只能修改注释“/ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 / proj1.cpp #include iostream using namespace std; class MyClass public: MyClass
12、(int len) array = new intlen; arraySize = len; for (int i = 0; i arraySize; i +) arrayi = i+1; MyClass() / ERROR *found* delete arrayi; void Print() const for (int i = 0; i arraySize; i +) / ERROR *found* cin arrayi “; cout endl; private: int * array; int arraySize; ; int main() / ERROR *found* MyCl
13、ass obj; obj.Print(); return 0; (分数:30.00)_正确答案:()解析:delete array; cout arrayi “; MyClass obj(10); 答案考生文件夹 考点 本题考查 MyClass 类,其中涉及构造函数、析构函数、输出语句、动态数组和语句初始化。一般考到类时就会涉及构造函数,要注意构造函数的定义方法。析构函数就是考查 delete 语句的用法,其一般形式为:delete+要释放的指针。 解析 (1)语法错误,使用 delete 语句删除一个指针时,直接把指针变量的名称放在 delete后面即可。(2)考查考生对输入、输出语句的运用
14、。使用 cout 进行数据输出操作,一般格式为:coutExpr;。其中,Expr 代表一个表达式,“”称为插入运算符,该语句的含义是,将表达式 Expr 的值输出到屏幕上。使用 cin 进行数据输入操作,一般格式为:cinvar;。其中,var 代表一个变量,“”称为提取运算符,该语句的含义是,将用户输入的数据保存到 var 中。 (3)考查语句的初始化,我们来看 MyClass 类的构造函数: MyClass (int len) array = new intlen; /给数组动态分配空间,大小为 len arraySize = len; /赋值 for (int i = 0; i arr
15、aySize; i +) arrayi = i + 1; /循环给数组赋值,从 1 到 10 请注意:形参 len 没有定义默认值,因此要想使 array 动态数组里依次存放1,2,3,4,5,6,7,8,9,10,就是要给 len 赋值为 10。 delete 语句是最常考的知识点,用于释放指针变量,其一般形式为:delete+要释放的指针。二、简单应用题(总题数:1,分数:30.00)2.请使用 VC6 或使用【答题】菜单打开 proj2 下的工程 proj2,此工程中声明的 Array 是一个表示数组的类。一个 Array 对象可以包含多个整型元素。Array 的成员说明如下: 成员函数
16、 add 用于向数组的末尾添加一个元素; 成员函数 get 用于获取数组中指定位置的元素; 数据成员 a 表示实际用于存储数据的整型数组; 数据成员 size 表示数组的容量,数组中的元素个数最多不能超过 size; 数据成员 num 表示当前数组中的元素个数。 SortedArray 是 Array 的派生类,表示有序数组。SortedArray 重新定义了 Array 中的 add 函数,以确保有序数组中的元素始终按照升序排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为: 10,9,8,7,6,5,4,3,2,1, 1,2,3,4,5,6,7
17、,8,9,10, 注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream using namespace std; class Array public: Array(unsigned int s) size = s; num= 0; a = new ints; virtual Array() delete a; virtual void add(int e) if (num size) / *found* _ num +; int get(unsigned int i) const if (i size) ret
18、urn ai; return 0; protected: int * a; unsigned int size, num; ; class SortedArray : public Array public: / *found* SortedArray(unsigned int s) :_ virtual void add(int e) if (num = size) return; int i =0, j; while (i num) if (e ai) for (j =num; j i; j-) / *found* _; / *found* _; break; i+; if (i = nu
19、m) ai = e; num +; ; void fun(Array for (i = 10; i = 1; i-) a.add (i); for (i = 0; i 10; i+) cout a.get(i) “, “; cout endl; int main() Array a(10); fun(a); SortedArray sa(10); fun(sa); return 0; (分数:30.00)_正确答案:()解析:(1)anum=e; (2)Array(s) (3)aj=aj-1 (4)ai=e 答案考生文件夹 考点 本题考查数组类 Array 及 Array 的派生类 Sorte
20、dArray,其知识点涉及构造函数、析构函数、虚函数和动态数组。一般考到函数时,首先要看函数名,通过函数名称能大概知道该函数的功能,比如 Array 类中的 virtual void add(int e)函数,看到这个函数我们能得到如下信息。 (1)有关键字 virtual,说明该函数是虚函数,在 Array 类的派生类里肯定会有对 add 函数的定义。 (2)有关键字 void,说明此函数没有返回值。 (3)add 的意思是添加,它的形参是 int e,那么我们大概可以猜到该函数的功能是把整型数值 e 添加到数组 a 中。 解析 (1)考查的是虚函数 virtual void add(int
21、 e)的定义,即添加一个整型数 e 到 anum中。 (2)主要考查的是 Array 类的派生类 SortedArray 类的构造函数的定义,定义之前要对基础类初始化。 (3)因为 SortedArray 类是排序类,所以数组 a 中的元素要从小到大排序。在 if(eai)条件下,要把i 后的元素逐个往后移一位,因此此处为 aj=aj-1。 (4)主要考查虚函数 virtual void add(int e)在派生类 SortedArray 类中的定义,把插入的数据放在数组 a 的第 i+1 个位置,即 ai=e;。三、综合应用题(总题数:1,分数:40.00)3.请使用 VC6 或使用【答题
22、】菜单打开 proj3 下的工程文件 proj3,此工程包含一个源程序文件proj3.cpp,其中定义了用于表示二维向量的类 MyVector;程序应当显示(6,8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在“/ *1* *found*”的下方是构造函数的定义,它用参数提供的坐标对 x 和 y 进行初始化。(2)在“/ *2* *found*”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其 X 坐标等于两向量 X 坐标之差,其 Y 坐标等于两向量 Y 坐标之差。 (3)在“/ *3* *found*”的下方,语句的功能是使变量 v3 获
23、得新值,它等于向量 v1 与向量v2 之和。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。/ proj3.cpp #include iostream using std:ostream; using std:cout; using std:endl; class MyVector /表示二维向量的类 double x; /X 坐标值 double y; /Y 坐标值 public: MyVector (double i = 0.0, double j = 0.0); /构造函数 MyVector operator + (MyVector j);
24、 /重载运算符+ friend MyVector operator - (MyVector i, MyVector j); /重载运算符- friend ostream /重载运算符 ; / *1* *found* _ (double i, double j): x(i),y(j) MyVector MyVector:operator + (MyVector j) return MyVector (x + j. x, y + j. y); MyVector operator - (MyVector i, MyVector j) / *2* *found* return MyVector (_)
25、; ostream /输出向量 v 的坐标 return os; int main() MyVector v1(2,3), v2(4,5), v3; / *3* *found* v3 =_; cout v3 endl; return 0; (分数:40.00)_正确答案:()解析:(1)MyVector:MyVector (2)i.x-j.x,i.y-j.y (3)v1+v2 答案考生文件夹 考点 本题考查二维向量类 MyVector,其中涉及的知识点有构造函数,重载运算符+、-、。在类外定义构造函数时,语法和定义其他类函数一样,前面要加上类名和作用域符号。重载运算符函数要注意其返回值类型和参数类型。 解析 (1)主要考查的是构造函数,在类外定义构造函数时要使用类名和作用域,即MyVector:MyVector。 (2)主要考查重载运算符“-”的返回语句,返回值应为向量 i 和 j 的差,即 MyVector(i.x-j.x,i.y-j.y);。 (3)主要考查重载运算符“+”的使用,由题目可知 v3 是 v1 和 v2 的和,前面我们已经重新定义了运算符“+”,所以在这里直接使用语句 v3=v1+v2;即可。