1、二级 C+机试-171 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevProj13。此工程包含一个源程序文件 RevMain13.cpp,但该程序中类的定义有错误。请改正程序中的错误,使它能得到正确结果。注意,不要改动主函数,不得删行或增行,也不得更改程序的结构。源程序文件 RevMain13.cpp 中的程序清单如下;/RevMain13.cpp#includeiostreamusing namespace std;class MyClasspublic:MyClass(int a=0,b=1
2、);Print();private:int x;int y;MyClass:MyClass(int a=0,int b=1)x=a;y=b;void MyClass:Print()cout“x=“xend1;cout“y= “yend1;int main()MyClass obj(1,2)obj.Print();return 0;(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 char *fun(char *s,int n)。函数 fun()的功能是将字符串 s 中的字符“循环左移”n位。例如,输入“ABCDE”,则循环左移 2 位应输出“CDEAB”
3、,输入“1234567”,循环左移 3 位应输出“4567123”。注意:部分源程序已存在文件 PROC13.cpp 中。请勿修改主函数和其他函数中的任何内容,仅在函数 fun()的花括号中填写若干语句。文件 PROC13.cpp 的内容如下:/PROC13.cpp#include iostream#include stringusing namespace std;char *fun(char *s,int n);int main()char str81;int n;cout“Enter a string(less than 80 char)/n”;cinstr;cout“/n Enter
4、n:“;cinn;if(nstrlen(str)cout“/n Data overflow“;return 0;cout“The result is: “fun(str,n)end1;return 0;char *fun(char*s,int n)/* * * * * *(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 MyProj13。此工程包含一个源程序文件 MyMain12.cpp。程序中定义了两个类 Base 和 Derived,但类的定义并不完整。请按要求完成下列操作,将类的定义补充完成:定义类 shapes 的保护成员
5、x 和 y,它们都是整型变量。请在注释“/* *1* *”之后添加适当的语句。完成构造函数 shapes(int d,int w)定义,使类 shapes 的保护成员 x、y 分别初始化为 d、w,并分别具有默认值 0、0。请在注释“/* *2* *”之后添加适当的语句。完成类 shapes 的成员函数 setvalue(int d,int w)的定义,shapes 类的数据成员 x 和 y 分别被设置成d 和 w。请在注释“/* *3* *”之后添加适当的语句。将类 shapes 的成员函数 void disp()设置成纯虚函数。请在注释“/* *4* *”之后添加适当的语句。注意:除在指定
6、位置添加语句之外,请不要改动程序中的其他内容。源程序文件 MyMain13.cpp 清单如下:/MyMain13.cpp#includeiostreamusing namespace std;class shapes/* * * 1 * * *public:/* * * 2 * * *void setvalue(int d,int w)/* * * 3 * * */* * * 4 * * *;class square : public Shapespublic:void disp()coutx*yend1;;int main()shapes*ptr;square s1;ptr=int main()shapes*ptr;square s1;ptr=shapes(int d=0,int w=0) x=d;y=w;x=d;y=w;virtual void disp()=0;)解析:解析 本题中基类 shapes 是一个抽象类(拥有纯虚函数 disp(),其构造函数中要设置默认参数值 0。并且在类体中要将成员函数 disp()声明成纯虚函数。在主函数中定义了抽象类的对象指针 ptr,并给它赋值派生类 square 的对象 s1,然后进行赋值和输出的操作。