1、二级 C+机试-21 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevProj11。此工程包含一个源程序文件 RevMain11.cpp,但在源程序文件中有错误。请改正程序中的错误,使它能得到正确结果。注意,不得删行或增行,也不得更改程序的结构。源程序文件 RevMainll.cpp 中的程序清单如下:/RevMainll.cpp#includeiostreamusing namespace std;class pointprivate:const int color;int x;int y;pu
2、blic:point(int x,int y,int c)this-x=x;this-y=y;color=c;void show()cout“x=“x“,y=“y“,color=“colorend1;int main()const point p(10,10,100);p.show();return 0;(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 int fun(int n),其中 n 为自然数。函数 fun()的功能是求出自然数 n(包括 n)以内所有素数的和,并返回其值。注意;部分源程序已存在文件 PROC11.cpp 中。请勿修改主函数和其他
3、函数中的任何内容,仅在函数 fun()的花括号中填写若干语句。文件 PROC11.cpp 的内容如下:/PROC11.cpp#includeiostreamusing namespace std;int fun(int n);int main()int number;cout“Enter the number which you want to caculate: /n“;cinnumber;cout“The result is:“fun(number)end1;return 0;int fun(int n)/* * * * * * * * *(分数:33.00)_三、3综合应用题(总题数:1
4、,分数:34.00)3.return 0;(分数:34.00)_二级 C+机试-21 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevProj11。此工程包含一个源程序文件 RevMain11.cpp,但在源程序文件中有错误。请改正程序中的错误,使它能得到正确结果。注意,不得删行或增行,也不得更改程序的结构。源程序文件 RevMainll.cpp 中的程序清单如下:/RevMainll.cpp#includeiostreamusing namespace std;class pointprivate
5、:const int color;int x;int y;public:point(int x,int y,int c)this-x=x;this-y=y;color=c;void show()cout“x=“x“,y=“y“,color=“colorend1;int main()const point p(10,10,100);p.show();return 0;(分数:33.00)_正确答案:(正确的程序代码如下:#includeiostreamusing namespace std;class pointprivate:const int color;int x;int y;public
6、:point(int x,int y,int c):color(c)this-x=x;this-y=y;void show()cout“x=“x“,y=“y“,color=“colorend1;int main()point p(10,10,100);p.show();return 0;)解析:解析 本题程序中有 2 处错误:C+中,如果在一个类中说明了常数据成员,那么构造函数就只能通过初始化列表对数据成员进行初始化。私有成员 color 被定义成常数据成员,因此构造函数 point()对 color 的初始化形式是错误的。C+中,如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函
7、数,不能调用其他成员函数。主函数中对象 p 被定义成类 point 的常对象,因此通过该对象不能调用非常成员函数 show()。二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 int fun(int n),其中 n 为自然数。函数 fun()的功能是求出自然数 n(包括 n)以内所有素数的和,并返回其值。注意;部分源程序已存在文件 PROC11.cpp 中。请勿修改主函数和其他函数中的任何内容,仅在函数 fun()的花括号中填写若干语句。文件 PROC11.cpp 的内容如下:/PROC11.cpp#includeiostreamusing namespace std;in
8、t fun(int n);int main()int number;cout“Enter the number which you want to caculate: /n“;cinnumber;cout“The result is:“fun(number)end1;return 0;int fun(int n)/* * * * * * * * *(分数:33.00)_正确答案:(函数 fun()的定义如下:int fun(int n)int i,j,sum=0;for(j=2;jn;j+)for(i=2;i=i;i+)if(j%i=0)break;if(i=j)sum+=j;)解析:解析 所
9、谓素数就是其约数只有 1 和其本身的自然数。因为除 2 以外的素数都是奇数,所以只需要对奇数进行判断即可。可以采用一个双重循环结构,通过外循环的控制变量 i 每次向内循环提供一个奇数,让内循环进行判断。根据素数的定义,内循环的控制变量 i 的初值为 2,终值为外循环的控制变量 i的平方根,步长为 1。在内循环中判断 i 能否被 j 整除。如果 i 能被 j 整除,则表明 i 不是素数,就退出内循环,将控制转移到内循环的后继语句:如果循环能正常结束,表明除了 1 和其本身没有其他约数,因此,i 是一个素数。利用循环正常结束时它的循环控制变量的值总是超出(大于或小于)循环终值的特性,在内循环的外面
10、判断内循环的控制变量 j 是否大于内循环的终值,就能确定 i 的值是否为素数。三、3综合应用题(总题数:1,分数:34.00)3.return 0;(分数:34.00)_正确答案:(clas C:public B,public AC(int k):A(k-2),B(k+2),c(k)A: :disp(); B: :disp();coutcend1;)解析:解析 程序中定义了 3 个类 A、B 和 C,其中类 C 是由类 A 和类 B 共同派生而来的。因此,派生类C 的构造函数不仅负责初始化派生类对象的基类成员,还要对派生类 C 的新增成员 c 进行初始化。对于第3 处要求显式调用基类的 disp()函数,可采用作用域分辨符“:”来调用基类的成员函数。