1、国家二级(C+)机试-试卷 12-2 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.有如下类定义:class Point int xx, yy;public:Point() : xx(0), yy(0) Point(int x, int y =0) : xx(x), yy(y) ;若执行语句 Point a(2), b3, *c4;则 Point 类的构造函数被调用的次数是( )。(分数:2.00)A.2 次B.3 次C.4 次D.5 次2.下列排序方法中,最坏情况下比较次数最少的是( )。(分数:2.00)A.冒泡排序B.简单选择排序C.
2、直接插入排序D.堆排序3.运算符重载时不需要保持的性质是( )。(分数:2.00)A.操作数个数B.操作数类型C.优先级D.结合性4.有如下程序: #include using namespace std; class MyClass public: MyClass(int i=0) coutstr;当从键盘输入“Ilovethisgame“时,str 中的字符串是( )。(分数:2.00)A.IlovethisgameB.IlovethiC.IloveD.I36.在对函数进行原型声明时,下列语法成分中不需要的是(分数:2.00)A.函数返回类型B.函数参数列表C.函数名D.函数体37.有如下
3、程序: #include #include using namespace std; class Person public: Person(string n):name(n) Person() coutstr;当从键盘输入“Ilovethisgame“时,str 中的字符串是( )。(分数:2.00)A.IlovethisgameB.IlovethiC.IloveD.I 解析:解析:cin 是 C+预定义的标准输入流对象,cin 用来接收字符串时,遇“空格“、“TAB“、“回车“时都会结束。所以本题答案为 D。36.在对函数进行原型声明时,下列语法成分中不需要的是(分数:2.00)A.函数返
4、回类型B.函数参数列表C.函数名D.函数体 解析:解析:函数原型中,函数名、函数返回值、函数参数列表是需要的,而函数体在函数申明时不需要。所以答案为 D。37.有如下程序: #include #include using namespace std; class Person public: Person(string n):name(n) Person() coutSet (i + 1); (3)delete ptr;)解析:解析:(1)主要考查考生对友元函数的掌握,由类的定义中关于 Judge 函数的声明可知该函数为友元函数,因此在定义时不能使用类名和作用域符。 (2)主要考查考生对指针的
5、掌握,ptr 是指针,(ptr+i)也是指针,表示指针 ptr 向后移动 i 个位置,因此在调用成员函数时要使用标识符-。 (3)主要考查考生对delete 语句的掌握,释放指针使用 delete 语句,其格式为:delete指针;。三、简单应用题(总题数:1,分数:2.00)42.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj2 下的工程 pmj2,该工程中包含一个程序文件mainepp,其中有坐标点类 point、线段类 Line 和三角形类 Triangle 的定义,还有 main 函数的定义。程序中两点间距离的计算是按公式 实现的,三角形面积的计算是按公式 实现的,其中 (
6、分数:2.00)_正确答案:(正确答案:(1)constPoint&p (2)p1(p1),p2(p2) (3)Pointp1,Pointp2,Pointp3 (4)(length1()+length2()+length3()2)解析:解析:(1)主要考查考生对函数形参的掌握,由函数的注释可知有本坐标点到达某个坐标点类的距离,再根据函数体 returnsqrt(xpx)*(xpx)十(ypy)*(ypy);可知,该坐标点类名为p,因此可以知道形参为 Point&p,为了不改变该坐标点的值,前面要加上 const。 (2)主要考查考生对构造函数的掌握,对于常变量型私有成员 constPointp
7、1,p2,只能用成员初始化列表进行赋值。 (3)主要考查考生对构造函数的掌握,由空格后面的语句:p1(p1),p2(p2),p3(p3)可知,该构造函数需要进行成员列表初始化,再看类的私有成员 constPointp1,p2,p3,可知 p1,p2,p3 是 Point 类型,因此形参为 Pointp1,Pointp2,Pointp3。 (4)主要考查考生对成员函数的掌握,根据函数注释,可知本函数要求计算三角形面积,再看题目的提示:8=(a+b+c)2。可知空格处要填的是三角形的三条边之和除以 2,而求边长的函数已经给出,这里直接调用即可。四、综合应用题(总题数:1,分数:2.00)43.请使
8、用【答题】菜单命令或直接用 VC6 打开考生文件夹下的工程 prog3,其中声明了 ValArray 类,该类在内部维护一个动态分配的整型数组。ValArray 类的复制构造函数应实现对象的深层复制。请编写ValArray 类的复制构造函数。在 main 函数中给出了一组测试数据,此种情况下程序的输出应该是:ValArrayvl:1,2,3,4,5ValArrayv2=1,2,3,4,5要求:补充编制的内容写在“*333*”与“*666*”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 writeToFile 已经编译为 boj 文件,并且在本程序中调
9、用。VaiArrayh#includeiostreamusingnamespacestd;classVaiArrayint*v;intsize;public:VaiArray(constint*p,intn):size(n)v=newintsize;for(inti=0;isize;i+)vi=Pi;VaiArray(constVaiArray&other);VaiArray()deletev;voidprint(ostream&out)constout;for(inti=0;isize-1;i+)outvi“,“;outvsize-1;voidsetArray(inti,intval)vi=
10、val;voidwriteToFile(constchar*);maincpp#include“ValArrayh“ValArray:ValArray(constValArray&other)*333*666*intmain()constinta=1,2,3,4,5);ValArrayv1(a,5);tout”ValArrayv1:”;v1print(cout);coutend1;ValArrayv2(v1);cout“ValArrayv2=“;v2print(cout);coutend1;writeToFile(“);return0;(分数:2.00)_正确答案:(正确答案:size=othersize; v=Flewintsize; for(inti=0;i解析:解析:主要考查考生对复制构造函数的掌握,ValArray 类的复制构造函数应实现对象的深层复制。由 ValArray 类的构造函数: ValArray(constint*p,intn):size (n) v=newintsize; 给 v 分配大小为 size 的空间 for(inti=0;isize;i+) 遍历 p vi=pi; 把 pi赋值给 vi 可知类中 v 是动态数组,size 表示数组长度,因此要先给 v 分配空间为 size,再逐个元素复制以达到对象的深层复制。