1、国家二级( C+)机试模拟试卷 61及答案与解析 一、程序改错题( 30分) 1 使用 VC6打开考生文件夹下的工程 test3_1,此工程包含一个源程序文件test3_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: A:a=5 display1:a=6 display2:a=5 源程序文件 test3_1.cpp清单如下: #include iostream.h Class A public: *found* A () void printa()cout “A:a=“ a endl; private: int a; *found* class B; ; class
2、 B public: *found* void display1(A t) (*t).a+; cout “display1:a=“ (*t).a endl; void display2(A t) t.a-;cout “display2:a=“ t.a end1; ; void main() A obj1; B obj2; obj1.printa(); obj2.display1( obj2.display2(obi1); 二、简单应用题( 40分) 2 请 编写一个函数 comm(int n,int k),该函数将用递归算法计算从 n个人中选择 k个人组成一个委员会的不同组合数,由 n个人里选
3、 k个人的组合数 =由 (n-1)个人里选 k个人的组合数 +由 (n-1)个人里选 (k-1)个人的组合数。 注意:部分源程序已存在文件 test41_2.cpp中。 请勿修改主函数 main和其他函数中的任何内容,仅在函数 comm的花括号中填写若干语句。 源程序文件 test41-2.cpp清单如下: #include iostream.h int comm(int n, int k) void main ( ) int n=7, k=3; cout “n=7,k=3“ endl; cout comm(n,k) endl; 三、综合应用题( 30分) 2 使用 VC6打开考生文件夹下的工
4、程 MyProj13。此工程包含一个源程序文件MyMain12.cpp。程序中定义了两个类 Base和 Derived,但类 的定义并不完整。 请按要求完成下列操作,将类的定义补充完成: 定义类 shapes的保护成员 x和 y,它们都是整型变量。请在注释 “/* *1* *”之后添加适当的语句。 完成构造函数 shapes(int d,int w)定义,使类 shapes的保护成员 x、 y分别初始化为 d、 w,并分别具有默认值 0、 0。请在注释 “/* *2* *”之后添加适当的语句。 完成类 shapes的成员函数 setvalue(int d,int w)的定义, shapes类的
5、数据成员 x和y分别被设置成 d和 w。请在注释 “/* *3* *”之后添加适当的语句。 将类 shapes的成员函数 void disp()设置成纯虚函数。请在注释 “/* *4* *”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 MyMain13.cpp清单如下: /MyMain13.cpp #include iostream using namespace std; class shapes /* * *1* * * public: /* * *2* * * void setvalue(int d, int w) /* * *3* *
6、* /* * * 4 * * * ; class square : public Shapes public: void disp() cout x*y end1; ; int main() shapes*ptr; square s1; ptr= else if(n=k|k=0) return 1; else return comm(n-1,k)+comm(n-1,k-1); 【试题解析】 本题考查的 是考生对简单的递归函数的应用。递归函数是算法设计中比较经典的一种,它主要应用数学的递推公式进行反复的迭代计算并最终得到正确答案,在编程上体现为在函数体内部对自身的调用。本题的大体思路为:递归的结束条件为 n=k或者 k=0,否则就递推的调用公式右端的两项继续训算,直到满足结束条件再逐层返回。 三、综合应用题( 30分)