1、国家二级 C+机试(操作题)模拟试卷 328及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 projl下的工程 projl,该工程中包含程序文件 main cpp,其中有类 Clock(“时钟 ”)的定义和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Initial times are 0 d: 0 h: 0 m: 59 s After one second times are 0 d: 0 h: 1 m: 0 s 注意:只修改每个 “ ERROR*found*”下的那一行,
2、不要改动程序中的其他内容。 #include using namespace std; class Clock public: Clock(unsigned long i=0); void set(unsigned long i=0); void print()const; void tick();时间前进一秒 Clock operator+(); private: unsigned long total_sec, seconds, minutes ,hours, days; ; Clock: Clock(unsigned long i) : total sec(i), seconds(i 6
3、0), minutes(i 60) 60), hours(i 3 600) 24), days(i 8 64 00) void Clock: set(unsigned long i) total sec=i; seconds=i 60; minutes=(i 60) 60; hours=(i 3600) 60; days=i 864 00; ERROR*found* void Clock: print() tout #include #include using namespace std; #define MaxLength i 00 class Element “元素 ”类 public:
4、 int n; Element(int i=0): n(i) ; class Queue “队列 ”类 Element * element; 指向存储元素的数组的指针 int tail;队尾元素的下标 public: Queue(): element(new Element 100), tail(一 1) 一 Queue()deleteelement; void push(Element ele); 在队列 尾端添加一个元素 Element pop(); 在队列首端删除一个元素,返回被删元素 Element front()constreturn element0; 返回队首元素,但不从队列中删
5、除该元素 *found* int size()const return (_); 返回元素个数 void show()const, 显示集合中所有元素 ; void Queue: push(Element ele) if(tail=MaxLength一 1) return;空间满,不做任何处理 *found* _; Element Queue: pop() if(Size()=0)exit(1); 队列空,不做任何处理 Element tmp=element0; for(int i=0; i using namespace std; #include”prj3 h” int FriFun(Fr
6、iFunClass X) /*333* 由于函数 FriFun()是类 FriFunclass 的友元函 数,所以它可以直接访问 a和 b *666* int main() FriFunClass n(10, 20); if(FriFun(n) tout; ”Common denominat: or iS” FriFun(n) ” n”; else cout: ”No commom denominator n”; writeToFile(”); return 0; 国家二级 C+机试(操作 题)模拟试卷 328答案与解析 一、基本操作题 1 【正确答案】 (1)void Clock: prin
7、t()const (2)set(+total_sec); (3)return*this: 【试题解析】 (1)主要考查考生对成员函数的掌握,由 Clock类中对函数 print的声明 void print()const;可知,在定义 print函数时少了 const。 (2)主要考查考生对 +操作的掌握,根据函数要求,时间要先前进一秒,再调用函数 set,因此 total_sec+应改为 +total_sec。 (3)主要考查考生对 this指针的掌握,函数要求返回值 Clock,即返回一个类,而不是指针,因此使用 *this。 二、简单应用题 2 【正确答案】 (1)tail +1 (2)e
8、lement+tail =ele (3)tail- (4)int i=0; i =tail ; i+ 【试题解析】 题意定义了 Element类,表示队列中的元素,它包含一个成员 n,表示元素的值;定义了 Queue类,表示队列,它包含两个成员: element是动态分配的一个数 组,每个元素都是 Element类型; tail表示队列尾部的下标值,指向element数组的最后一个元素,当数组为空时, tail的值为一 1,所以初始化为一1;另外 Queue类还定义了若干成员函数:构造函数为 ele ment数组动态分配100个元素空间,初始化 tail为一 1;析构函数释放 element;
9、 push()函数向队列中添加一个新元素 ele,即将形参 ele存放到数组尾部,并将 tail自增 1; pop()函数将 element数组的第一个元素 (下标为 0)从数组中删除 (采用移动后续所有元素的方式 ),并作为函数返回 值返回; front()函数返回队列首元素; size()函数返回当前element数组的元素个数; show()函数将 element数组中的元素的 n值输出,由上面的分析,补充代码如下: (1)size()函数返回 element数组的元素个数, tail的值是 element数组的最后一个元素的下标,所以返回 tail+l即可。 (2)push()函数将参
10、数 ele插入到队列的尾部,即将 ele保存到 element数组下标为 (tail+1)的位置: element+tail=ele; (3)poP()函数将 element数组的首元素保存到 tmp变量中,然后遍历 element数组,将下标从 1开始的元素逐个赋给前一个元素,再把 tail的值自减 1, tail-; (4)show()函数需要遍历 element数组,然后将元素的 n值输出,遍历下标的变量需要定义为 i, i初值从 0开始,直到 i等于最后一个元素的下标,即 tail。 int i=0;i=tail; i+ 三、综合应用题 3 【正确答案】 int min=x ax b?x a: x b; 此处为取出 x a与 x b中的最小值 for(int i=2; i=min ; i+) 从 i到 min遍历数组 if(x a i =0& x b i =0) 如 i能同时整除 x a来的 x b,则仅回 i return i; return一 1; 【试题解析】 主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员,题目要求函数求出两个数据成员的大于 1的最小公因子,从 2开始往上算,因此要同时可以被两个私有成员整除,这里用取余符号完成,取余为 0即为整除。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1