1、计算机二级(C+)上机考试 12 及答案解析(总分:-3.00,做题时间:90 分钟)1.改错题 使用 VC6 打开考生文件夹下的工程 test17_1,此工程包含一个源程序文件 test17_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: Vehicle message Car message Vehicle message 源程序文件 test17_1.cpp 清单如下: #include class vehicle int wheels; float weight; public: /* found */ void message(void) cout“Car
2、 message/n“; ; class truck:public vehicle int passenger_load; float payload; public: int passengers(void)return passenger_load; ; void main() vehicle * unicycle; unicycle=new vehicle; /* found */ unicycle.message(); delete unicycle; unicycle=new car; unicycle-message(); delete unicycle; unicycle=new
3、 truck; unicycle-message(); delete unicycle; (分数:-1.00)_2.简单应用题 请编写一个函数 int fun(int nFirst,int nSecond),求两个数的最小公倍数并返回这个值。 注意:部分源程序已存在文件 test13_2.cpp 中。如输入 7 和 8 时,结果是 56。 请勿修改主函数main 和其他函数中的任何内容,仅在函数 fun 的花括号中填写若干语句。 文件 test13_2 的内容如下: #include int fun(int nFirst,int nSecond); void main() int nFirst
4、, nSecond; coutnFirst; coutnSecond; cout“Car message/n“; ; class truck:public vehicle int passenger_load; float payload; public: int passengers(void)return passenger_load; ; void main() vehicle * unicycle; unicycle=new vehicle; /* found */ unicycle.message(); delete unicycle; unicycle=new car; unicy
5、cle-message(); delete unicycle; unicycle=new truck; unicycle-message(); delete unicycle; (分数:-1.00)_正确答案:((1)错误:void message(void) cout“Car message/n“; 正确:void message (void)coutmessage(); )解析:(1)主要考查考生对于虚函数使用规则的掌握,要实现对函数 message 的动态联编应该使用虚函数,否则产生的是静态联编,调用的函数输出结果就与要求不符; (2)主要考查考生对于流输出操作的掌握,该处错误的使用了流
6、输入操作; (3)主要考查考生是否能分清对象和对象指针,对象指针使用“-“调用成员函数,而对象使用“.“调用成员函数。 2.简单应用题 请编写一个函数 int fun(int nFirst,int nSecond),求两个数的最小公倍数并返回这个值。 注意:部分源程序已存在文件 test13_2.cpp 中。如输入 7 和 8 时,结果是 56。 请勿修改主函数main 和其他函数中的任何内容,仅在函数 fun 的花括号中填写若干语句。 文件 test13_2 的内容如下: #include int fun(int nFirst,int nSecond); void main() int nF
7、irst, nSecond; coutnFirst; coutnSecond; coutnSecond) nMax = nFirst; nMin = nSecond; else nMax = nSecond; nMin = nFirst; int nMod = nMax % nMin; while(nMod) nMax = nMin; nMin = nMod; nMod = nMax % nMin; int nMultiple = nFirst * nSecond / nMin; return nMultiple; )解析:本题考查的是考生利用基本的控制语句解决实际问题的能力。注意算法的设计,
8、其中%是取余操作。3.综合应用题 使用 VC6 打开考生文件夹下的工程 test1-_3。此工程包含一个 test1_3.cpp,其中定义了类 circle 和 column,其中 column 类由 circle 类 protected 派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)定义类 circle 的保护数据成员 r 和 area,它们都是 double 型的数据。请在注释“/ * 1 * “之后添加适当的语句。 (2)添加类 circle 的无参数的构造函数,使circle 对象的 r 默认值为 0,请在注释“/ * 2 * “之后添加适当的语句。 (3
9、)添加派生类 column 构造函数的定义,传入的参数为 double 型的 height 和 radius,并将其分别赋值给数据成员 h 和基类的 r,请在注释“/ * 3 * “之后添加适当的语句。 (4)完成派生类 column 的成员函数 print 的定义,使其以格式“r=_area=_“先输出半径 r 和底面积 area,再以格式“h=_vol=_“输出高 h 和体积 vol 的值,请在注释“/ * 4 * “之后添加适当的语句。 输出结果如下: r=1 area=3.1416 h=2 vol=6.2832 注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。 源程序文件
10、test1_3.cpp 清单如下: #include const double pi=3.1416; class circle protected: / * 1 * public: / * 2 * circle(double radius) r=radius; void print() area=r*r*pi; cout“r=“r“ “area=“area_正确答案:((1) double r; double area; (2) circle( ) r=0; (3) column(double radius, double height):circle(radius) h=height; (4) circle:print( ); cout“h=“h“ “vol=“area*h解析:主要考查考生对于类的数据成员定义与成员函数构造的掌握,其中(3)使用了参数列表进行变量赋值,(4)使用作用域符:调用基类 print 函数。