1、国家二级 C+机试(操作题)模拟试卷 60及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错误,请改正错误,使得程序正常运行。并使程序输出结果为: ABCDEF ABCDEF ABCDEF 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 1 #include 2 void main() 3 4 *error* 5 char s1=”ABC 6 “DEF“; 7 *error* 8 char s2=“ABC 9 DEF“; 10 *error* 11 char s3=”ABC“
2、+ 12 “DEF”; 13 cout 2 #define MAXLINE 100 3 int fun(int a, int *index) 4 5 6 7 void main() 8 9 int AMAXLINE; 10 int index; 11 int maxdata; 12 maxdata=fun(A, &index), 13 cout 2 class TestClass0 3 4 *1* 5 6 ; 7 *2* 8 class TestClasSl: 9 10 public: 11 void print() 12 13 coutn; 6 while(n99); 7 coutai; 1
3、1 12 *index=0 ; 元素下标值初始化 13 for(i=l; in; i+) 循环找出最大值 14 15 if(a*indexai) 16 *index=i ; 记录比较大元素的 下标 17 ) 18 return a*index; 返回最大的元素值,其中 index为最大值的下标 【试题解析】 (1)该程序功能是求数组中最大元素的值和此元素的下标。它的解题思路,初始化记录下标变量为 0,指向数组第一个元素,逐个把所有元素和标记字符进行比较,并将大值的下标赋值给记录下标变量,从而找出最大值。 (2)从已给部分源程序的 main主函数开始入手,核心函数 int fun(int a,i
4、nt*index)中的 a参数为输入的数组,其中 index为记录最大值下标变量。 解题思路 (1)首先输入数组大小,然后利用循环输入数组元素。 (2)利用 for循环对每一个当前数组元素与 index标记的元素进行大小比较。 (3)循环中将求得的最大数据 ai的下标标志位赋给标志位 index。 三、综合应用题 3 【正确答案】 (1)添加语句: virtual void print()=0; (2)将 “class TestClassl: ”补充完整为: classTestClassl: virtual private TestClass0 (3)将 “class TestClass2:
5、”补充完整为: classTestClass2: public TestClass0 (4)将 “class TestClass3: ”补充完整为: classTestClass3: public TestClass2, public TestClassl 【试题解析】 在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。本题从题干要求入手,依次处理各个类,完成各个类的定义。 解题思路 (1)题目 1要求 “请定义一个纯虚函数 print”。在 C+中,虚函数在基类中用virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被 “初始化 ”为 0的函
6、数,即 “virtualvoid print0=0; ”。 (2)题目 2要求 “类 TestClassl私有虚继承类 TestClass0”。在 C+中声明一个派生类时将基类的继承方式指定为 private的,称为私有继承。同 (1),声明TestClassl虚继承类 “: virtualTestClass0”,题目要求为私有,即 “class TestClassl: virtualprivate TestClass0”。 (3)题目 3要求 “类 TestClass2公有继承类 TestClass0。 ”同 (2),公有继承是在定义一个派生类时将基类的继承方式指定为 public的,称为公用继承。所以这里补全 “classTestClass2: public TestClass0”。 (4)题目 4要求 “类 TestClass3公有继承类 TestClass2与 TestClassl。 ”同 (3),所以这里补全 “class TestClass3: public TestClass2, public TestClass 1”。