1、国家二级 C+机试(操作题)模拟试卷 507及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,该工程中包含程序文件main cpp,其中有关 TVSet(“电视机 ”)和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 规格: 29英寸,电源:开,频道: 5,音量: 18 规格: 29英寸,电源:关,频道: -1,音量: -1 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include iostream using namespace
2、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( )constreturnsize; 返回电视机规格 bool isOn( )constreturnon; 返回电源开关状态 返回当前音量,关机情况下返回 -1 int getVolume( )co
3、nstreturnisOn( )?volume: -1; 返回当前频道,关机情况下返回 -1 int getChannel( )constreturn isOn( )?channel: -1; ERROR*found* void turnOnOff( )const将电源在 “开 ”和 “关 ”之间转换 on=!on; void setChannelTo(int chan) 设置频道 (关机情况下无效 ) if(isOn( )&chan =0&chan =99) channel=chan; void setVolumeTo(int vol) 设置音量 (关机情况下无效 ) if(isOn( )&
4、vol =&vol =30) volume=vol; void show_state( ) ERROR*found* cout “规格: “ getSize( ) “英寸 “ “,电源: “ (isOn( )?“开 “: “关 “) “,频道: “ getChannel( ) “,音量: “ getVolume( ) endl; , int main( ) TVSet tv(29); tv turnOnOff( ); tv setChannelTo(5); tv setVolumeTo(18); tv showState( ); tv turnOnOff( ); tv showState( )
5、; return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 proj2,此工程包含有一个源程序文件proj2 cpp,其中定义了 Stack类和 ArrayStack类。 Stack是一个用于表示数据结构 “栈 ”的类,栈中的元素是字符型数据。 Stack为抽象类,它只定义了栈的用户接口,如下所示: 公有成员函数功能 push 入栈:在栈顶位置添加一个元素 pop 退栈:取出并返回栈顶元素 ArTayStack是 Stack的派生类,它实现了 Stack定义的接口。 ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员 maxSize表示的是栈的最大容量
6、, top用于记录栈顶的位置。成员函数 push和 pop分别实现具体的入栈和退栈操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a, b, c c, b, a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动 “ *found*”。 proj2 cpp #include iostream using namespace std; class Stack public: virtual void push(char c)=0; virtual char pop( )=0; ; class ArrayStack: pu
7、blic Stack char*P; int maxSize; int top; public: ArrayStack(int s) top=0; maxSize=s; *found* p=_; ArrayStack( ) *found* _; void push(char c) if(top=maxSize) cerr “Overflow! n“; return; *found* _; top+; char pop( ) if(top=0) cerr “Underflow! n“; return 0; top-; *found* _; ; void f(Stack&sRef) char ch
8、 =a, b, c; cout ch0 “, “ ch1 “, “ ch2 endl; sRef push(ch0); sRef push(ch1); sRef push(ch2); cout sRef pop( ) “, “; cout sRef pop( ) “, “; cout sRef pop( ) endl; int main( ) ArrayStack as(10); f(as); return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中声明了 SortedList类,是一个用于表示有序数据表的类。其成员函数 insert的功能是将一个数据插入到一个
9、有序表中,使得该数据表仍然保持有序。请编写这个 insert函数。程序的正确输出应为: 插入前: 1, 2, 4, 5, 7, 8, 10 插入 6和 3后: 1, 2, 3, 4, 5, 6, 7, 8, 10 要求: 补充编制的内容写在 “ *333*”与 “ *666*”之间。不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out dat中。输出函数 writeToFile已经编译为obj文件,并且在本程序中调用。 SortedList h #include iostream using namespace std; class SortedLi有序数据表类 int len;
10、double*d; public: SortedList(int len, doubledata =NULL); SortedList( )delete d; int length( )constreturnlen; )有序数据表长度 (即元素的个数 ) double getElement (int i)constreturn di; VOid insert(double data); void show( )const;显示有序数据表 ; void writeToFiie(char*, const SortedLiSt&); main cpp #include“SortedList h“ S
11、ortedList: SortedList(int len, double data ): len(len) d=new doublelen; for(int k=0; k len; k+) dk=(data=NULL?0 0: datak); for(int i=0; i len-1; i+) int m=i; for(int j=i; j len; j+) if(dj dm)m=j; if(m i) double t=dm; dm=di; di=t; void SortedList: insert(double data) *333* *666* void SortedLiSt: show
12、( )const 显示有序数据表 for(int i=0; i len-1; i+) cout di “, “; cout dlen-1 endl; int main( ) double s =5, 8, 1, 2, 10, 4, 7); SortedList1ist(7, s); cout “插入前: “ endl; list show( ); list insert(6 0); list insert(3 0); cout “插入 6和 3后: “ endl; list show( ); writeToFile(“ “, list); return0; 国家二级 C+机试(操作题)模拟试卷
13、 507答案与解析 一、基本操作题 1 【正确答案】 (1)TVSet(intsize): size(size) (2)void tumOnOff( ) (3)cout “规格: “ getSize( ) “英寸 “ 【试题解析】 (1)主要考查考生对构造函数的掌握,因为 size是常变量,所以只能用成员初始化列表来初始 size,即 TVSet(int size): size(size)。 (2)主要考查考生对 const函数的掌握,在 turnOnOff函数中,有语句:on=!on;,使得 on的值发生改变,因此该函数不能使用 const。 (3)主要考查考生对输出语句的掌握,下一条语句:
14、 “,电源: “ (isOn( )?“开 “: “关 “), 说明输出语句还没结束,因此不能用 “; ”。 二、简单应用题 2 【正确答案】 (1)new chars (2)delete p (3)ptop=c (4)return ptop 【试题解析】 (1)主要考查的是 ArrayStack类的构造函数,在函数中要为 p申请S个 char型空间,应使用语句 p=new charS;。 (2)主要考查析构函数,使用 delete语句释放指针,即 delete p;。 (3)主要考查 push函数, top表示栈顶元素下标,添加的数据放到栈顶,因此使用语句 ptop=c;。 (4)主要考查 p
15、op函数,输出栈顶数据, top表示栈顶元素下标,因此使用语句return ptop;。 三、综合应用题 3 【正确答案】 for(int i=0; i len; +i)遍历数组 d if(data di)如果 data小于 di len+;数组 d的长度自加 1 double*dd=new doublelen;分配长度为 len空间 for(int k=len; k i; k-)在数组 d中从 k等于 len到 i做遍历 ddk=dk-1;把 dk-1赋值给 ddk ddi=data;把 data赋值给 ddi for(int j=0; j i; j+)把数组 d从 0到 i做遍历 ddj=
16、dj;把 dj赋值给 ddj delete d;删 d分配的空间 d=new doublelen;给 d分配长度为 len的空间 for(int index=0; index len; +index)遍历数组 dd从 0到 len dindex=ddindex;地 ddindex赋值给 dindex delete dd;删 dd分配的空间 break;跳出循环 【试题解析】 主要考查考生对插入算法的掌握,题目要求 insert函数的功能是将一个数据插入到一个有序表中,使得该数据表仍保持有序。可以知道数据表 d是一组有序的数组,那么就采取先比较再插入的步骤完成即可。 要注意动态数组 d的长度是确定的,要添加元素,就要重新分配空间。