1、国家二级 C+机试(操作题)模拟试卷 87及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,但该程序运行有问题,请改正 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 int *P, i ; 6 *error* 7 P=a;
2、 8 for(i=0 ;i void show() void main() cout 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); cout0 ; 1一一 ) for(int j=1; j=i ; j+) cout
3、j*i=i*j”; coutendl; 【试题解析】 (1)由审题分析可知,可利用两重循环来实现输出倒 99口诀,设置两个循环变量,外层循环变量 i从 9开始变化至 1,循环 9次,代表 乘号后面的数字。 (2)内部循环变量 i从 1变化到 i,代表乘号前面的数字,输出一行, j=i,这样保证输出的是倒 99口诀。在内层循环体内,利用 cout输出 J的值、 “*”、 i的值、 “=”和 i*i值,即输出乘法公式。 三、综合应用题 3 【正确答案】 (1)添加语句: baseA(int m) a=m; (2)添加语句: priAl(int m, int n): baseA(n)b=m; (3)
4、添加语句: 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类成员b,将 n
5、作为基类 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个标识下应添加 “coutgeta0” “getb0” “cendl; ”。