1、国家二级( C+)机试模拟试卷 38及答案与解析 一、程序改错题( 30分) 1 使用 VC6打开考生文件夹下的工程 test24_1,此工程包含一个源程序文件test24_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为: 000 1 2-1 000 l 2-l 2 1 1 源程序文件 test24_1.cpp 清单如下: #include iostream.h class A /*found*/ int a=O; public: A(int aa=O):a(aa) ; class B int a,b; const int c; A d; public: /*found
2、*/ B() /*found*/ B (int aa, int bb): d(aa+bb) a=aa, b=bb; void print() cout a “ “ b “ “ c “ “ endl; ; void main ( ) B a,b(1,2); B x=a,y(b),z(2,1); a.print(); b.print(); x.print(); y.print(); z.print(); 二、简单应用题( 40分) 2 请编写两个函数 int sum_of_powers(int k, int n), powers(int m, int n),求 1 6的 k次方的和 ,sum_of
3、_powers中参数 k和 n分别表示 k次方和所求数列中最大的一个自然数,最后返回所求值, powers中参数 m和 n分别表示 m为底数 n为指数,最后返回所求值。要求使用 for循环和函数嵌套 (int sum_of_powers中调用 powers)实现算法。输出结果如下: sum of 4 powers of intergers from 1 to 6=2275 注意:部分源程序已存在文件 test25_2.cpp中。 请勿修改主函数 main和其他函数中的任何内容,仅在函数 sum_of_powers和powers的花括号中填写若干语句。 文件 test25_2.cpp的内容如下:
4、 #include iostream.h const int k(4); const int n(6); int sum_of_powers(int k, int n), powers(int m, int n); void main() cout “sum of “ k “ powers Of intergers from 1 to “ n “=“; cout sum_of_powers(k, n) endl; int sum_of_powers(int k, int n) int powers(int m, int n) 三、综合应用题( 30分) 3 使用 VC6打开考生文件夹下的工程
5、test23_3,此工程包含一个源程序文件test23_3.cpp,其中定义了类 X和它的友元类 Y,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)将类 X的静态数据成员 y初始化为 1。请在注释 “/*1*”之后添加适当的语句。 (2)完成类 Y的构造函数 Y(int i, int j)的定义,将参数 i赋值给类 Y的数据成员,X的对象 a中的数据成员 x,并且把参数 j赋值给类 X的数据 成员 y,请在注释“/*2*”之后添加适当的语句。 (3)完成类 Y的成员函数 void Display()的定义,将 Y的数据成员, X的对象 a中的数据成员 x和类 X的数据成员
6、 y按照 “x=_,y=_”的形式显示出来 (“_”代表一个数字 ),请在注释 “/*3*”之后添加适当的语句。 输出结果如下: x=5, y=l x=6, y=9 x=5, y=9 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 test23_3.cpp清单如下: include iostream.h class X friend class Y; public: void Set(int i) x=i; void Display() cout “x=“ x “, “; cout “y=“ y endl; private: int x; static int y;
7、; class Y public: Y(int i, int j) void Display(); private: X a; ; /*1* Y:Y(int i, int j) /*2* void Y:Display() /*3* void main ( ) X b; b.Set(5); b.Display(); Y c(6,9); c.Display(); b.Display(); 国家二级( C+)机试模拟试卷 38答案与解析 一、程序改错题( 30分) 1 【正确答案】 (1)错 误: int a=0; 正确: int a; (2)错误; B() 正确: B():c(O)a=0; b=0
8、; (3)错误: B(int aa,int bb):d(aa+bb) 正确: B(int aa, int bb):c(aa-bb), d(aa+bb) 【试题解析】 (1)主要考查考生对于类的数据成员的初始化,在类的定义中不能对类的数据成员进行初始化,如果想要进行初始化应该使用构造函数和参数的默认值: (2)主要考查考生对于含有常数据成员的类的构造函数的掌握,常数据成员 必须在构造函数中进行初始化,而且应该使用参数列表的形式; (3)主要考查考生在构造函数中对常数据成员的赋值的掌握,常数据成员的赋值应使用初始化列表进行。 二、简单应用题( 40分) 2 【正确答案】 (1)int sum_of
9、_powers(int k, int n) int sum(0); for(int i=1; i =n; i+) sum+=powers(i, k); return sum; (2) int powers(int m, int n) int i, product(1); for(i=1; i =n; i+) product*=m; return product; 【试题解析】 本题考查的是考生使用 for循环和函数嵌套解决一般问题的能力。注意最后将计算的值返回。 三、综合应用题( 30分) 3 【正确答案】 (1) int X:y=1; (2) a.x=i; X;y=j; (3) cout “X=“ a.x “, “; cout “y=“ X:y endl; 【试题解析】 本题主要考查考生对于友元类的定义和使用友元类访问的应用,注意 (1)中类 X的静态成员 y应该在类外初始化,而 (2)和 (3)中对于 x和 y不同的访问方式就是因为 y是静态成员,是类 X的所有对象公有的,必须使用作用域符 “:”进行访问。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1