1、国家二级 C+机试(操作题)模拟试卷 332及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,该工程中包含程序文件 main cpp,其中有关 TVSet(“电视机 ”)和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 规格: 29英寸,电源:开,频道: 5,音量: 18 规格: 29英寸,电源:关,频道:一 1,音量:一 1 注意: 只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include using
2、namespace std; class TVSet “电视机 ”类 const int Size; int channel; 频道 int volume; 音量 bool on; 电源开关: true表示开, false表示关 public: /ERROR*found* TVSet(int size) this一 size(size); channel=0; volume=15; on=false; int getSize()constreturn size; ) 返回电视机规格 bool isOn()constreturn on; ) 返回电源开关状态 返回当前音量,关机情况下返回一 1
3、int getVolume()constreturn isOn ()?volume:一 1; ) 返回当 前频道,关机情况下返回一 1 int getChannel()constreturn isOn ()?channel:一 1; ) ERROR*found* void turnOnOff()const将电源在 “开 ”和 “关 ”之间转换 on=!on; ) void setChannelTo(int chan) 设 置频道 (关机情况下无效 ) if(isOn() class Composite: public Component public: *found* void setChii
4、d(_) m chiId=child; virtual void print()const m child-print(); private: Component*mchild; ; class Leaf: public Component public: virtual void print()const *found* ; int main() Leaf node; Composite comp; comp setChild( 存放数的当前值 public: Number(int i): n(i) i必须小于 base int advance(int k);当前值增加 k个单 位 int
5、value()constreturn n; ) 返回数的当前值 , class TimeOfDay public: Numberhours; 小时 (023) Numberminutes; 分 (059) *1* *found* _;秒 (059) Numbermilliseconds; 毫秒 (0999) TimeOfDay(int h=0, int m=0, int S =0, int milli=0) : hours(h), minutes(m), seconds(S), milliseconds(milli) void advanceMilliS(int k)ad- vanceSeco
6、nds milliseconds advance (k); ) 前进 k毫秒 void advanceSeconds(int k) 前进 k秒 *2* * found* _; Void advanceMinuteS(int k)advanceHour(minutes advance(k); /前进 k分钟 void advanceH0ur(int k)f hours advance(k); ) 前进 k小时 void show()const 按 “小时:分:秒毫秒 ”的格式显示时间 int C=cout fill(0); /将填充字符设置为 0 cout int Number: advance
7、(int k) n+=k; /增加 k个单位 int S=0; s用来累计进位 *3* *found* while(n=base)_ n到达或超过 base即进位 return s;返回进位 int main() TimeOfDay time(1, 2, 3, 4); 初始时间: 1小时 2分 3秒 4毫秒 time show(); 显示时间 time advanceHour(5); 前进 5小时 time advanceSeconds(122); 前进 122秒 (2分零 2秒 ) time advanceMillis(1017); 前进 1017毫秒 (1秒零 17毫秒 ) cout us
8、ing namespace std; class MyPoint表示平面坐标系中的点的类 double x; double Y; public: MyPoint(double x, double y)this- x=x; this-Y=Yj) double getX()constreturn x; double getY()constreturn Y; void show()constcoutprint(); 第一条和第二条语句都是定义语句,第三条语句调用函数 setChild,由 setChild函数的定义可知, comp中的 m_child等于 node,第四条语句定义了个指针 P指向co
9、mp的地址,也就是 node,最后一条语句通过指针 P调用函数 print,也就是调用类 Leaf的函数 print,因为题目要求输出: Leaf Node,因此在这里添加语句:coutseconds (2)advanceMinutes(seconds advance(k) (3)s+; n一 =base; 【试题解析】 (1)主要考查考生对模板类的掌握,这里是一个定义数据成员seconds的语句, seconds用来表示 “秒 ”,可以根据小时、分、毫秒的定义形式填写,即 Numberseconds。 (2)主要考查考生对成员函数的掌握,此处是函数 advanceSeconds中的一条语句,
10、它使时间前进 k秒。将前后语句进行对比,可以知道应该填人语句advanceMinutes(seconds advance(k)。 (3)考查 while循环语句,此处是函数 advance中的一条语句,它确定增加 k后 n的当前值和进位,并返回进位。变量 s表示累加进位,当 n到达或超过 base即进位,进位时 s要自加 1,因此为 s+; n一 =base。 4 【正确答案】 (1)MyPoint p1, MyPoint p2 (2)up_left getX(), down_right getY() (3)double MyRectangle: 【试题解析】 (1)考查构造函数, 构造函数中
11、的参数要给私有成员赋值,在下句中 up_left(p1), down_right(p2)指出私有成员赋值要使用形参 p1和 p2,因此这里参数要定义为 MyPointp1, MyPoint p2。 (2)主要考查成员函数的返回语句, MyPoint My Rectangle:getDownl dt()const函数要求返回一个左下角的点坐标,因此使用语句MyPoint(up_left gax(), down_right getY();。 (3)主要考查成员函数的定义,在 MyRectangle类中已经声明 double area()const,因此此处只要添加 double MyRect-angle:即可。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1