1、国家二级 C+机试(操作题)模拟试卷 52及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: TestClass1 TestClass2 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 1 #include 2 #include 3 Struct TestClass 0 4 5 *error* 6 virtual void fun(); 7 ; 8 class TestClassl: public TestClass
2、 0 9 10 void fun() 11 12 coutfun(); 30 *error* 31 p=*obj 2; 32 p-fun(); 33 return; 34 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。阅读下列函数说明和代码,完成空出部分程序。函 数 funf int*arr, int n)的功能是将指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。并返回互不相同的元素的个数。 注意:不能修改程序的其他部分,只能修改 fun()函数。 i #include 2 int fun(int*a, int n) 3 4
3、5 6 void main() 7 8 int A=6, 6, 5, 4, 4, 3, 3, 2, 1); 9 int J =fun(A, sizeof(A) sizeof(int); 10 for(int i=0; i 2 #define CONST PI 3 141592 3 class CCircle 4 5 private: 6 double radius ; 7 *1* 8 9 public: 10 *2* 11 CCircle(int radius) 12 this-radius=radius; ) 13 double GetArea() 14 15 *3* 16 17 ) 18
4、double GetGirth() 19 20 *4* 21 22 ) 23 void SetRadius(int m) 24 25 radius=m; 26 ) 27 ; 28 int main() 29 30 CCircle circle(5); 31 coutcircle GetArea()endl; 32 coutcircle GetGirth() endl ; 33 circle SetRadius(10); 34 coutcircle GetArea() endl; 35 coutcircle GetGirth() endl; 36 return 0 ; 37 国家二级 C+机试(
5、操作题)模拟试卷 52答案与解析 一、基本操作题 1 【正确答案】 (1)virtual void fLln()=0 ; (2)p=&obj1 ; (3)p=&ohj2; 【试题解析】 本题程 序中的功能为输出字符串 TestClassl和 YestClass2。从已定源程序的 main主函数开始入手,通过定义的类,实现题目中要求的输出结果。 解题思路 (1)如果在基类中并不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数 fun()应该是纯虚函数,也就是声明虚函数的时候初始化为 0的函数。即第 1个标识下的 “virtual void fun()=0; ”。 (2)
6、第 2个标识下的 p为指针变量,将对象 obj1赋值给 p,实际上是 p指向对象0bj1的地址,所以 “p=*objl; ”修改为 “p=&obj1; ”。 (3)第 3个标识下的 “p=*obj2; ”语句同 (2),修改为 “p=&obj2; ”。 二、简单应用题 2 【正确答案】 1 intj ; 2 int k=0;指向数组第一个元素 3 j=1 ; 指向数组第二个元素 4 while(jn)将本次循环 k指向的元素依次与其他元素比较,如果不同,则存入数组 5 6 if(aj!=ak) 7 8 a+k=aj; k指向下一个元素 9 10 j+; 11 12 return k+1; 为新
7、数组大小 【试题解析】 (1)该程序功能是将指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。它的解题思路,由第一个元素开始,利用循环将所有元素,依次与它后面的元素比较,如果不同存入数组。 (2)从已给部分源程序的 main主函数开始入手,核心函数 int fun(int*a,int n)中的参数 a为输入的数组, n为数组大小。 解题思路 (1)首先指向数组第一个元素 ak,然后将第二元素 a啪与它比较,不同存入数组第二个元素 (af+k)。 (2)同时,将被比较的位置向后移动一位 (i+)。循环直到数组的最后一个元素比较完毕。 三、综合应用题 3 【正确答案】
8、 (1)添加语句: const double PI ; (2)将 “CCircle(int radius)”补充完整为: CCircle(int radius): pI(CONST_PI) (3)添加语句: return radius*radius*PI; (4)添加语句: return 2*radius*PI; 【试题解析】 程序当中定义了 CCircle类,含有成员变量 radius和常成员 PI,成员函数 GetArea返回圆面积,成员函数 GetGirth返回圆周长, SetRadius(int m)函数改变 radius大小。 解题思路 (1)第 1个标识下定义私有常量 PI,常数据成员是使用 const说明的数据成员,因此第 1个标识下应添加 “constdouble PI; ”。 (2)常数据成员的初始化只能通过构造函数的成员初始化列表进行,构造函数CCircle(int radius)应对常数据成员 PI进行初始化,第 2个标识下应改为“CCircle(int radius): PI(CONST_PI)”。 (3)第 3个标识下返回圆面积值,圆面积为半径平方与 PI的乘积值,即第 3标识下应添加 “retum radius*radius*PI; ”。 (4)第 4个标识下返回周长,即第 4表示下应添加 “retum2*radius*PI; ”。