1、二级 C+-72 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“/ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value of member objects is 8 注意:只修改注释“/ERROR *found*”的下一行语句,不要改动程序中的其他内容。 /proj1.cpp #include iostream using name
2、space std; class Member public: Member(int x) val =x; int GetData() return val; private: /ERROR * found* int val =0; ; class MyClass public: / ERROR * found* MyClass(int x) data=x; void Print() / ERROR * found* cout “The value of member object is“ data.val endl; private: Member data; ; int main() My
3、Class obj(8); obj.Print(); return 0; (分数:30.00)_二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,此工程中含有一个源程序文件proj2.cpp,请编写一个函数 int huiwen(int n),用于求解所有不超过 200的 n值,其中 n的平方是具有对称性质的回文数(回文数是指一个数从左向右读与从右向左读是一样的,例如:34543 和 1234321都是回文数)。求解的基本思想是:首先将 n的平方分解成数字保存在数组中,然后将分解后的数字倒过来再组成新的整数,比较
4、该整数是否与 n的平方相等。 注意:请勿修改主函数 main和其他函数中的任何内容,只在横线处编写适当代码,也不要删除或移动“/*found*”。 /proj2.cpp #include iostream using namespace std; int huiwen(int n) int arr16, sqr, rqs=0, k=1; sqr =n*n; for(int i=1; sqr!=0; i+) /* found* _; sqr/ =10; for(;i1; i-) rqs+ =arri-1* k; /* found* _; /* found* if(_) return n; els
5、e return 0; int main () int count =0; cout “The number are: “endl; for(int i=10; i200; i+) if(huiwen(i) cout +count /ti/ti* iendl; return 0; (分数:30.00)_三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程 proj3,其中声明的 Matrix是一个用于表示矩阵的类。operator+的功能是实现两个矩阵的加法运算。例如,若有两个 3行 3列的矩阵 则A与 B相加的和为 (分数:4
6、0.00)_二级 C+-72 (1)答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“/ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value of member objects is 8 注意:只修改注释“/ERROR *found*”的下一行语句,不要改动程序中的其他内容。 /proj1.cpp #include iostream using
7、 namespace std; class Member public: Member(int x) val =x; int GetData() return val; private: /ERROR * found* int val =0; ; class MyClass public: / ERROR * found* MyClass(int x) data=x; void Print() / ERROR * found* cout “The value of member object is“ data.val endl; private: Member data; ; int main
8、() MyClass obj(8); obj.Print(); return 0; (分数:30.00)_正确答案:(1)int val; (2)MyClass(int x):data(x) (3)cout“The value of member object is“dataGetData()endl;)解析:考点 本题考查的是 Member类和 MyClass类,其中涉及构造函数和成员函数。 解析 (1)主要考查考生对私有成员的掌握情况,类的私有成员只能声明而不能对其赋初值。 (2)主要考查考生对构造函数的掌握情况,data 是 Member类,而 x是 int型,因此这里使用成员列表初始化
9、法,调用 Member的构造函数初始化。 (3)主要考查考生对成员函数的掌握情况,val 为私有成员,因此不能被类外函数调用。二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,此工程中含有一个源程序文件proj2.cpp,请编写一个函数 int huiwen(int n),用于求解所有不超过 200的 n值,其中 n的平方是具有对称性质的回文数(回文数是指一个数从左向右读与从右向左读是一样的,例如:34543 和 1234321都是回文数)。求解的基本思想是:首先将 n的平方分解成数字保存在数组中,然后将分解后的
10、数字倒过来再组成新的整数,比较该整数是否与 n的平方相等。 注意:请勿修改主函数 main和其他函数中的任何内容,只在横线处编写适当代码,也不要删除或移动“/*found*”。 /proj2.cpp #include iostream using namespace std; int huiwen(int n) int arr16, sqr, rqs=0, k=1; sqr =n*n; for(int i=1; sqr!=0; i+) /* found* _; sqr/ =10; for(;i1; i-) rqs+ =arri-1* k; /* found* _; /* found* if(_
11、) return n; else return 0; int main () int count =0; cout “The number are: “endl; for(int i=10; i200; i+) if(huiwen(i) cout +count /ti/ti* iendl; return 0; (分数:30.00)_正确答案:(1)arri=sqr% 10 (2)k*=10 (3)n*n=rqs)解析:考点 本题考查的是 huiwen函数,其中涉及数组、for 循环和 if语句。 解析 (1)主要考查考生对数组的掌握,使用数组存储整型数字,分解整数 sqr。 (2)主要考查考生
12、对数组的掌握,利用数组元素组成整数 rqs。 (3)主要考查考生对 if语句的掌握,如果两数相等就说明 n是回文数。三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程 proj3,其中声明的 Matrix是一个用于表示矩阵的类。operator+的功能是实现两个矩阵的加法运算。例如,若有两个 3行 3列的矩阵 则A与 B相加的和为 (分数:40.00)_正确答案:(Matrix m; /定义 Matrix的对象 m for(int i=0; iM; i+) /i 从零到 m-1遍历(行) for(int j=0; jN; j+) /j 从零到 N-1遍历列 m.setElement(i, j, (m1.getElement(i, j)+m2.getElement(i,j); /调用 m对象的成员函数 setElement,第三个参数为对象 m1和对象 m2在(i,j)处的和 return m; /返回对象 m)解析:考点 主要考查的是 Matrix类,其中涉及二维数组、const 函数和成员函数。 解析 主要考查考生对运算符重载的掌握,本题使用二维数组表示矩阵,使用 for循环遍历数组的每个元素,将位置一样的两个数组元素相加,放入新的二维数组中。