1、国家二级 C+机试(操作题)-试卷 155 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modilcpp,但该程序运行有问题,请改正 main 函数中的错误,使程序的输出结果是: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。 1 #include 2 #include 3 void mein() 4 int a33_1,2,3),4, 5,6),7,8,9); 5 i
2、nt *P,i ; 6 *error* 7 P=a; 8 for(i=0 ;i0 ; 1 一一) for(int j=1;j=i ; j+) coutj*ii*j解析:解析:(1)由审题分析可知,可利用两重循环来实现输出倒 99 口诀,设置两个循环变量,外层循环变量 i 从 9 开始变化至 1,循环 9 次,代表乘号后面的数字。 (2)内部循环变量 i 从 1 变化到 i,代表乘号前面的数字,输出一行,j=i,这样保证输出的是倒 99 口诀。在内层循环体内,利用 cout 输出J 的值、“*”、i 的值、“=”和 i*i 值,即输出乘法公式。三、综合应用题(总题数:1,分数:2.00)3.使用
3、 VC6 打开考生文件夹下的源程序文件 modi3cpp,其中定义了类 baseA、priAl 和 priA2,其中priAl 类由 baseA 类公有派生,priA2 类由 priAl 类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。 程序输出结果如下: 10 5 10 5 7 (1)定义类 baseA 的构造函数,该构造函数有一个整型的参数 m,在构造函数中请将 m 赋值给数据成员 a。请在注释“*1*”之后添加适当的语句。 (2)定义类 priA1 的构造函数,该构造函数有两个整型的参数 m 和 11,在构造函数中请将 m 赋值给数据成员 b,将 n 作为基类
4、 baseA 构造函数的参数值传入。请在注释“*2*”之后添加适当的语句。 (3)定义类 priA2 的构造函数,该构造函数有三个整型的参数 m,n 和 k,在构造函数中请将 m 赋值给数据成员 c,将 n 和 k 分别赋值给基类 priAl 构造函数的参数 m 和 n。请在注释“*3*”之后添加适当的语句。 (4)完成类 priA2 的成员函数 show的定义,该函数调用基类成员函数,输出基类私有成员 a 和 b 及类 priA2 自身的数据成员 C 的值,上述三个值在输出时以空格隔开。请在注释“*4*”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #l
5、nclude C1ass baseA int a; public: *1* int geta()return a ; ; class priAl:publ ic baseA int b; public: *2* int getb()return b; ; class priA2:public priAl int C; public: *3* void show() *4* ; void main() priA2 a(7,5,10); coutageta()agetb()_正确答案:(正确答案:(1)添加语句:baseA(int m) a=m; (2)添加语句:priAl(int m,int n
6、):baseA(n)b=m; (3)添加语句:priA2(int m,int n,int k):priAl(n,k)c=m,) (4)添加语句:coutgeta()getb()”“cendl;)解析:解析:(1)根据题目 1 要示,构造函数函数名和类名一致,显然 baseA 构造函数名为 baseA(),在baseA()中通过参数 m 完成对成员变量 a 的赋值,因此构造函数名为 baseA(int m),在函数内部对成员 a赋值,故第 1 个标识下应添加“baseA(int m)a=m;)”。 (2)根据题目 2 要示,构造函数形式为priAl(int m,intn),m 赋值给 priAl
7、 类成员 b,将 n 作为基类 baseA 构造函数的参数值传入,故第 2 个标识下应添加“priAl(hat m,hatn):baseA(n)b=m;)”。 (3)根据题目 3 要示,函数形式为priA2(int m,int n,intk1,在构造函数中将 m 赋值给数据成员 c,将 11 和 k 分别赋值给基类 priAl 构造函数的参数 m 和 n,因此第 3 个标识下应添加“priA2(int m,int n,int k):priAl(n,k)c=m;”。(4)根据题目 4 要示,priA2 类公有派生于 priAl,而 priA1 公有派生于 baseA,因此在 priA2 类中可以调用基类的 geta0 和 getb0 来获得基类私有成员 a 和 b,再输出 priA2 的私有成员 C 即满足要求,因此第4 个标识下应添加 “coutgeta0getb0cendl;”。