1、计算机二级(C+)上机考试 11 及答案解析(总分:-3.00,做题时间:90 分钟)1.改错题 使用 VC6 打开考生文件夹下的工程 test7_1,此工程包含一个源程序文件 test7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: Constructor1 Constructor1 Constructor1 Destructor Constructor2 Destructor x=0 x=5 Destructor Destructor 源程序文件test1_1.cpp 清单如下: #include class B int x; public: B()x=0;c
2、out“Constructor1“Constructor2“Destructor“i“ be Destructor“x=“x_2.简单应用题 请编写函数 void swap(int *px,int *py) 与 void swap(int swap(a,b); couta“ “ba“ “b_3.综合应用题 使用 VC6 打开考生文件夹下的工程 test13_3。此工程包含一个 test13_3.cpp,其中定义了类 Vector,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)完成构造函数的定义,把数据成员 size 初始化为参数 s 的值,数据成员 buffer 指向动态申
3、请的 int 型 size 大小的空间。请在注释“/ * 1 * “之后添加适当的语句。 (2)完成拷贝构造函数的定义,注意解决多次删除的问题。请在注释“/ * 2 * “之后添加适当的语句。 (3)完成成员函数 elem 的定义,该函数返回buffer 的第 ndx 个元素的值,注意如果 ndx 超界,请输出“error in index“。请在注释“/ * 3 * “之后添加适当的语句。 (4)完成析构函数的定义,要求先将字符 d 打印在屏幕上,再释放 buffer 指向的空间。请在注释“/ * 4 * “之后添加适当的语句。 输出结果如下: 1234567891012345678910d
4、d 注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。 源程序文件 test13_3 清单如下: #include #include class Vector public: Vector(int s=100); Vector(Vector int void display(); void set(); Vector(); protected: int size; int *buffer; ; Vector:Vector(int s) / * 1 * Vector:Vector(Vector i“error in index“elem(j)_计算机二级(C+)上机考试 11 答案解析
5、(总分:-3.00,做题时间:90 分钟)1.改错题 使用 VC6 打开考生文件夹下的工程 test7_1,此工程包含一个源程序文件 test7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: Constructor1 Constructor1 Constructor1 Destructor Constructor2 Destructor x=0 x=5 Destructor Destructor 源程序文件test1_1.cpp 清单如下: #include class B int x; public: B()x=0;cout“Constructor1“Const
6、ructor2“Destructor“i“ be Destructor“x=“x_正确答案:((1)错误:B(int i)couti“ be Destructor“解析:(1)主要考查考生对析构函数特性的掌握,析构函数不能带参数也不能重载,一个类中只能定义一个析构函数,因为析构函数在删除对象的时候被默认调用,如果含有多个析构函数则可能引起多次删除产生的意外错误; (2)主要考查考生对构造函数与函数重载的掌握,由输出结果可知其应该调用不带参数的构造函数 B(); (3)主要考查考生对 for 循环语句的使用,如果在 for 循环中不写第三个表达式就意味着该循环一直会进行下去,因为 i 的值总是小
7、于 2(在 for 循环体中对 i 进行操作也可以)。 2.简单应用题 请编写函数 void swap(int *px,int *py) 与 void swap(int swap(a,b); couta“ “ba“ “b_正确答案:((1) void swap(int *px,int *py) int temp; temp=*px; *px=*py; *py=temp; (2) void swap(int temp=px; px=py; py=temp; )解析:本题主要考查点是函数的参数传递,指针与引用的区别。指针存放的是它指向的数据的地址,而引用就是给变量起一个别名,两者都是传址调用。调用
8、指针,实参需要使用取地址 Vector(Vector int void display(); void set(); Vector(); protected: int size; int *buffer; ; Vector:Vector(int s) / * 1 * Vector:Vector(Vector i“error in index“elem(j)_正确答案:((1) size=s; buffer=new intsize; (2) size=v.size; buffer=new intsize; (3) if (ndx=size) (4) cout“d“解析:本题主要考查考生对于类的构造函数与成员函数定义的掌握,注意(2)中赋值的应用,为了防止重复删除,不能直接将指针赋值,必须使用动态申请 new 建立一块新的空间,并且将原来对象的成员全部复制到新的空间中;(4)中对动态一维数组空间删除的时候,应该使用 delete 关键字,并且不管原数组大小是多少,一律只写一对中括号“加上变量名。