1、国家二级( C+)机试模拟试卷 44及答案与解析 一、程序改错题( 30分) 1 使用 VC6打开考生文件夹下的工程 test30_1,此工程包含一个源程序文件test30_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为: Previous=9, Next=11 源程序文件 test30_1.cpp清单如下: #include iostream.h /* found */ void prevnext (int,int int main ( ) int x=10,y,z; prevnext (x,y,z); cout “Previous=“ y “, Next=“ z
2、end1; return 0; /* found */ void prevnext (int x, int prev, int next) /* found */ prev=x-; next=+x; 二、简单应用题( 40分) 2 请编写一个函数 fun(int score 3, int num),该函数返回有一门成绩以上课程成绩在 85分以上,其余课程成绩不低于 70分的人数。数组 score按行存放 num名考生各自的三门期末考试成绩。 注意:部分源程序已存在文件 test31_2.cpp中。 请勿修改主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填写若干语句。 程序输
3、出结果如下: 3 文件 test31_2.cpp清单如下: #include iostream.h int fun(int score 3,int num) void main ( ) int score4 3=70,89,92,70,76,93,(80,86,98,65,73,45); cout fun(score,4) end1; 三、综合应用题( 30分) 3 使用 VC6打开考生文件夹下的工程 test29_3。此工程包含一个 test29_3.cpp,其中定义了二维坐标类 Coordinate和三维坐标类 ThreeDCoord,其中 ThreeDCoord类由 Coordinate
4、类 public派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)定义类 Coordinate的保护数据成员 x和 y,它们都是 int型的数据,代表二维坐标的横纵坐标值。请在注释 “/*1 *”之后添加适当的语句。 (2)根据类 Coordinate定义后的成员函数 Display的实现,补充该函数在类Coordinate定义体内的声明, Display为二维坐标类的虚函数。请在注释 “/*2*。 ”之后添加适当的语句。 (3)完成二维坐标类 Coordinate的构造函数,将参数 a和 b分别赋值给数据成员 x和 y。请在注释 “/*3*”之后添加适当的语句。 (
5、4)根据 ThreeDCoord类构造函数的声明,补充 ThreeDCoord构造函数的实现,参数 a和 b通过调用基类的构造函数来初始化基类的数据成员 x和 y, c赋值给数据成员 2。请在注释 “/*4*”之后添加适当的语句。 输出结果如下; 1, 2 3, 4, 5 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 tese9_3.cpp清单如下: #include iostream.h class Coordinate protected: /* 1 * public: Coordinate(int a=0, int b=0); /* 2 * ; Coordin
6、ate:Coordinate(int a, int b) /* 3 * void Coordinate:Display() const cout x “, “ y end1; class ThreeDCoord:public Coordinate int z; public: ThreeDCoord(int a=0, int b=0, int c=0); virtual void Display() const; ; /* 4 * void ThreeDCoord:Display() const cout x “, “ y “, “ z end1; void main ( ) Coordina
7、te c(1, 2); ThreeDCoord t(3, 4, 5); c.Display (); t.Display (); 国家二级( C+)机试模拟试卷 44答案与解析 一、程序改错题( 30分) 1 【正确答案】 (1)错误:在 main()函数前缺少 prevnext函数的声明 正确: void prevnext(int,int int flag=0; for (int i=O;i for(int j=O;j3;j+) if (scorei j70) flag=-1; j=3; else if(scorei j =85) flag=1; if (flag=1) total=total
8、+1; flag=0; return total; 【试题解析】 本题主要考查考生对数组和基本控制语句的熟练程度。对于 4*3的二维数组 score,其下标的范围是从 (0,0)到 (3, 2),这一点是需要特别注意的。另外程序中通过设置,临时变量 flag来标志每个人的分数信息,以得到所要统计的人数的方法是需要在编程中灵活掌握的。 三、综合应用题( 30分) 3 【正确答案】 (1) int x; int y; (2) virtual void Display()const; (3) x a; y b; (4) ThreeDCoord: ThreeDCoord(int a, int b, int c): Coordinate(a, b) 【试题解析】 本题主要考查考生对类数据成员的定义、构造函数、派生类及虚函数的理解,是 C+类知识的一个综合考核。对虚函数的定义格式及继承类构造函数的定义格式请多加注意。