1、国家二级 C+机试(操作题)模拟试卷 505及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,此工程中含有一个源程序文件proj1 cpp。其中位于每个注释 “ ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: Constructor called The value is10 Max number is20 Destructor called 注意:只能修改注释 “ ERROR*found*”的下一行语句,不 要改动程序中的其他内容。 proj1 cpp #include iostream using namespace s
2、td; class MyClasS public: ERROR*found* void MyClass(int i) value=i; cout “Constructor called “ endl; int Max(int x, int y)return x y?x: y; 求两个整数的最大值 ERROR*found* int Max(int x, int y, int z=0) 求三个整数的最大值 if(x y) return x z?x: z; elSe return y z?y: z; int GetValue( )constreturnvalue; MyClass( )cout “D
3、estructor called “ endl; private: int value; ; int main( ) MyClass obj(10); ERROR*found* cout “The value is“ value( ) endl; cout “Max number is“ obj Max(10, 20) endl; return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 pmj2,其中在编辑窗口内显示的主程序文件中定义有类 XBase和 XDerived,以及主函数 main。程序文本中位于每行 “*found*下面的一行内有一处或多处下划线标记,请在每个下划线
4、标记处填写合适的内容,并 删除掉下划线标记。经修改后运行程序,得到的输出结果为: s=25 #include iostream using namespace std: class XBase private: int mem1, mem2; public: *found* XBase(int m1=0, int m2=0): mem1(m1), _ *found* virtual int_ ; *found* class XDerivred: _ private: int mem3; public: XDerired( ): XBase( ), mem3(0) *found* XDerire
5、d(int m1, int m2, int m3): _ int sum( )return XBase: sum( )+mere3; ; void main( ) XDerived b(3, 4, 5); XBase a(6, 7), *pb=&b; int s=pb- sum( )+a sum( ); cout “s=“ s endl; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中包含了类 Integers和主函数main的定义。一个 Integers对象就是一个整数的集合,其中包含 0个或多个可重复的整数。成员函数 add的作用是将一个元素添加到集合中,成员函数
6、remove的作用是从集合中删除指定的元素 (如果集合中存在该元素 ),成员函数 sort的作用是将集合中的整数按升序进行排序。请编写这个 sort函数。此程序的正确输出结果应为: 5 28 2 4 5 3 2 75 27 66 31 5 28 2 4 5 3 2 75 27 66 31 6 5 28 2 4 5 3 2 75 27 66 31 6 19 5 28 4 5 3 2 75 27 66 31 6 19 5 28 4 5 3 2 75 27 66 31 6 19 4 2 3 4 4 5 5 6 19 27 28 31 66 75 要求: 补充编制的内容写在 “ *333*”与 “ *
7、666*”之间。不得修改程序的其他部分。 注意:相关文件包括 : main cpp、 Integers h。 程序最后调用 writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件 out dat中。输出函数 writeToFile已经编译为 obj文件。 Integers h #ifndef INTEGERS #define INTEGERS #include iostream using namespace std; const int MAXELEMENTS=100; 集合最多可拥有的元素个数 class Integers int elemMAXELEMENTS;
8、 用于存放集合元素的数组 int counter; 用于记录集合中元素个数的计数器 public: Integers( ): counter(0) 创建一个空集合 Integers(int data , int size); 利用数组提供的数据创建一个整数集合 VOid add(int element); 添加一个元素到集合中 void remove(int element); 删除集合中指定的元素 int getCount( )constreturncounter; 返回集合中元素的个数 int getElement(int i)constreturn elemi; 返回集合中指定的元素 v
9、oid sort( ); 将集合中的整数按由小到大的次序进行排序 void show( )const; 显示集合中的全部元素 ; void writeTOFile(const char*path); #endif main cpp #include“Integers h“ #include iomanip Integers: Integers(int data , int size): counter(0)for(inti=0; i size; i+) add(datai); void Integers: add(int element) if(counter MAXELEMENTS) ele
10、mcounter+ =element; void Integers: remove(int element) int j; for(j=counter-1; j =0; j-) if(elemj=element) break; for(int i=j; i counter-1; i+) elemi=elemi+1; counter-; void Integers: sort( ) *333* *666* void Integers: show( )const for(int i=0; i getCount( ); i+) cout; seLw(4) getElemerit; (i); tout
11、; endl; int main( ) int d =5, 28, 2, 4, 5, 3, 2, 75, 27, 66, 31; Integers s(d, 11); s show( ); s add(6); S ShOW( ); s add(19); s show( ); s remove(2); s show( ); s add(4); s show( ); s sort( ); s show( ); writeToFile(“ “); return0; 国家二级 C+机试(操作题)模拟试卷 505答 案与解析 一、基本操作题 1 【正确答案】 (1)MyClass(int i) (2)i
12、nt Max(int x, int y, int z) (3)cout “The value is“ obj GetValue( ) endl: 【试题解析】 (1)考查构造函数,构造函数前不加 void或其他任何类型名,直接使用 MyClass(int i)即可。 (2)主要考查函数重载,在 int Max(int x, int y)return x y?x: y; 中两个形参变量都是 int型,而语句 int Max(int x, int y, int z=0)的前两个形参也都是 int型,第三个形参定义默认值,那么这两个 Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求
13、形参类型或形参个数不同,所以要把 int z=0改为 int z,才能构成函数重载。 (3)主要考查成员函数的调用,因为 value是私有成员,所以不能被类外函数直接调用,而且 value( )的用法也是错误的,可以使用成员函数 obj GetValue( )得到value的值。 二、简单应用题 2 【正确答案】 (1)ment2(m2) (2)sum( )return mem1+mem2; (3)public XBase (4)XBase(m1, m2), mem3(m3) 【试题解析】 (1)题意要求使用 m1和 m2初始化数据成员 mem1和 mem2,同mem1的初始化一样,需要在成员
14、初始化列表中完成 mem2的初始化。 (2)sum函数的定义需要返回 mem1和 mem2之和。 (3)XDerired公有继承 xBase类,在继承列表中使用 public。 (4)在成员初始化列表中初始化基类成员时,需要调用基类的构造函数,初始化mem3时,可以直接 初始化。 三、综合应用题 3 【正确答案】 for(inti=0; 1 counter; i+)遍历数组 elem for(int j=counter-1; j i; j-)从最后一位到 i到前一位遍历 elem if(elemi elemj) 如果 elemi大于 elemj,则两值替换 in ttemp=elemi;定义整形变量 temp并赋值为 elemi; elemi=elemj;给 elemi赋值 elemi elemj=temp;给 elemj赋值 temp 【试题解析】 主要考查考生对排序算法的掌握,要排序的数组为 elem,元素个数为 counter,在这里使用下标 i和 j进行比较,当 elemi elemj时,数组元素通过中间变量 temp进行交换。