1、二级 C+机试-68 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)1.使用 VC6 打开考生文件夹下的工程 test25_1,此工程包含一个源程序文件 test25_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:privatel from derived1:30privatel from derived2:30源程序文件 test25_1.cpp 清单如下:/*found*/includeiostream.hclass baseprotected:int privatel;public:base(int p)pr
2、ivatel=p;/*found*/class derived1:public basepublic:derivedl(int p1):base(p1);int get_private()return private1;class derived2:virtua1 public basepublic:derived2(int p2):base(p2);int get_private()return private1;class derived12:public derived1,public derived2public:/*found*/derived12(int p1,int p2,int
3、 pb):derived1(p1), base(pb), derived2(p2);void main()derived12 d(10,20,30);cout“privatel from derived1:“d.derived1:get_private();cout“/nprivatel from derived2:“d.derived2:get_private();coutendl;(分数:30.00)填空项 1:_二、2简单应用题(总题数:1,分数:40.00)2.请编写两个函数 int sum_of_powers(int k,int n),powers(int m,int n),求 16
4、 的 k 次方的和,sum_of_powers 中参数 k 和 n 分别表示 k 次方和所求数列中最大的一个自然数,最后返回所求值,powers中参数 m 和 n 分别表示 m 为底数 n 为指数,最后返回所求值。要求使用 for 循环和函数嵌套(int sum_of_powers 中调用 powers)实现算法。输出结果如下:sum of 4 powers of intergers from 1 to 6=2275注意:部分源程序已存在文件 test25_2.cpp 中。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 sum_of_powers 和 powers 的花括号中填写若
5、干语句。文件 test25_2.cpp 的内容如下:#includeiostream.hconst int k(4);const int n(6); int sum_of_powers(int k,int n),powers(int m,int n);void main()cout“sum of “k“ powers Of intergers from 1 to “n“=“;coutsum_of_powers(k,n)endl;int sum_of_powers(int k,int n)int powers(int m, int n)(分数:40.00)_三、3综合应用题(总题数:1,分数:3
6、0.00)3.使用 VC6 打开考生文件夹下的工程 test25_3,此工程包含一个源程序文件 test25_3.cpp,其中定义了用于表示堆的类 Set,但它的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)完成成员函数 int IsMemberOf(int n)的定义,该函数检查参数 n 是否在类的数据成员数组 elems 中,如果在返回 1,反之返回 0。请在注释“/*1*”之后添加适当的语句。(2)完成成员函数 int Add(int n)的定义,如果参数 n 包含在类的数据成员数组 elems 中则返回 1 如果数组超界则返回 0,如果都不是,则将参数 n 插入到 elem
7、s 中,下标大小为类的数据成员 PC,之后 PC 自加一。请在注释“/*2*”之后添加适当的语句。(3)完成拷贝初始化构造函数 Set(Set Set(Set void Empty() PC=O;int IsEmpty() return PC=O;int IsMemberOf(int n);int Add(int n);void Print();private:int elems100;int PC;int Set:IsMemberOf(int n)/*1*if(elemsi=n)return 1;return O;int Set:Add(int n)/*2*return 1;else if(
8、PC=100)return O;elseelemsPC+=n;return 1;Set:Set(Set iPC; i+)elemsi=s.elemsi;void Set:Print()cout“;for(int i=O; iPC-1; i+)coutelemsi“,“;if(PCO)coutelemsPC-1;cout“endl;void main()Set A;coutA.IsEmpty()endl;A.Print();Set B;for(int i=l; i=8; i+)B.Add(i);B.Print();(分数:30.00)_二级 C+机试-68 答案解析(总分:100.00,做题时间
9、:90 分钟)一、1改错题(总题数:1,分数:30.00)1.使用 VC6 打开考生文件夹下的工程 test25_1,此工程包含一个源程序文件 test25_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:privatel from derived1:30privatel from derived2:30源程序文件 test25_1.cpp 清单如下:/*found*/includeiostream.hclass baseprotected:int privatel;public:base(int p)privatel=p;/*found*/class derived
10、1:public basepublic:derivedl(int p1):base(p1);int get_private()return private1;class derived2:virtua1 public basepublic:derived2(int p2):base(p2);int get_private()return private1;class derived12:public derived1,public derived2public:/*found*/derived12(int p1,int p2,int pb):derived1(p1), base(pb), de
11、rived2(p2);void main()derived12 d(10,20,30);cout“privatel from derived1:“d.derived1:get_private();cout“/nprivatel from derived2:“d.derived2:get_private();coutendl;(分数:30.00)填空项 1:_ (正确答案:(1)错误:includeiostream.h正确:#includeiostream.h(2)错误:class derivedl:public base正确:class derivedl:virtual public base
12、(3)错误:derived12(int p1,int p2,int pb):derivedl(p1),base(pb),derived2(p2);正确:derived12(int p1,int P2,int Pb):derivedl(P1),derived2(p2),base(Pb);)解析:解析(1)主要考查考生对于 include 关键字的掌握,它的正确使用是#include;(2)主要考查考生对于虚基类的使用,为了正确的显示结果,这里应该使用虚基类的定义,这样在调用函数的时候就可以不产生二义性;(3)主要考查考生对于初始化参数表中赋值顺序的掌握,它是按照从右至左依次赋值的。二、2简单应用
13、题(总题数:1,分数:40.00)2.请编写两个函数 int sum_of_powers(int k,int n),powers(int m,int n),求 16 的 k 次方的和,sum_of_powers 中参数 k 和 n 分别表示 k 次方和所求数列中最大的一个自然数,最后返回所求值,powers中参数 m 和 n 分别表示 m 为底数 n 为指数,最后返回所求值。要求使用 for 循环和函数嵌套(int sum_of_powers 中调用 powers)实现算法。输出结果如下:sum of 4 powers of intergers from 1 to 6=2275注意:部分源程序
14、已存在文件 test25_2.cpp 中。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 sum_of_powers 和 powers 的花括号中填写若干语句。文件 test25_2.cpp 的内容如下:#includeiostream.hconst int k(4);const int n(6); int sum_of_powers(int k,int n),powers(int m,int n);void main()cout“sum of “k“ powers Of intergers from 1 to “n“=“;coutsum_of_powers(k,n)endl;in
15、t sum_of_powers(int k,int n)int powers(int m, int n)(分数:40.00)_正确答案:(1)int sum_of_powers(int k,int n)int sum(0);for(int i=1;i=n;i+)sum+=powers(i,k);return sum;(2)int powers(int m, int n)int i,product(1);for(i=1;i=n;i+)product*=m;return product;)解析:解析本题考查的是考生使用 for 循环和函数嵌套解决一般问题的能力。注意最后将计算的值返回。三、3综合应
16、用题(总题数:1,分数:30.00)3.使用 VC6 打开考生文件夹下的工程 test25_3,此工程包含一个源程序文件 test25_3.cpp,其中定义了用于表示堆的类 Set,但它的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)完成成员函数 int IsMemberOf(int n)的定义,该函数检查参数 n 是否在类的数据成员数组 elems 中,如果在返回 1,反之返回 0。请在注释“/*1*”之后添加适当的语句。(2)完成成员函数 int Add(int n)的定义,如果参数 n 包含在类的数据成员数组 elems 中则返回 1 如果数组超界则返回 0,如果都不是,则将
17、参数 n 插入到 elems 中,下标大小为类的数据成员 PC,之后 PC 自加一。请在注释“/*2*”之后添加适当的语句。(3)完成拷贝初始化构造函数 Set(Set Set(Set void Empty() PC=O;int IsEmpty() return PC=O;int IsMemberOf(int n);int Add(int n);void Print();private:int elems100;int PC;int Set:IsMemberOf(int n)/*1*if(elemsi=n)return 1;return O;int Set:Add(int n)/*2*retu
18、rn 1;else if(PC=100)return O;elseelemsPC+=n;return 1;Set:Set(Set iPC; i+)elemsi=s.elemsi;void Set:Print()cout“;for(int i=O; iPC-1; i+)coutelemsi“,“;if(PCO)coutelemsPC-1;cout“endl;void main()Set A;coutA.IsEmpty()endl;A.Print();Set B;for(int i=l; i=8; i+)B.Add(i);B.Print();(分数:30.00)_正确答案:(1)for(int i=O;iPC;i+)(2)if(IsMemberOf(n)(3)PC=s.PC;)解析:解析本题主要考查考生对于类的成员函数的定义和拷贝初始化函数的理解。