1、国家二级( C+)机试模拟试卷 84及答案与解析 一、选择题 1 有如下类声明: class SAMPLE int n; public: SAMPLE(int i=0):n(i) void setValue(int n0); ; 下列关于 getValue成员函数的定义中,正确的是 ( )。 ( A) SAMPLE:setValue(intn0)n=n0; ( B) voidSAMPLE:setValue(intn0)n=n0; ( C) voidsetValue(intn0)n=n0; ( D) setValue(intn0)n=n0; 2 下面叙述中错误的是 ( )。 ( A)软件测试的目
2、的是发现错误并改正错误 ( B)对被调试的程序进行 “错误定位 “是程序调试的必要步骤 ( C)程序调试通常也称为 Debug ( D)软件测试应严格执行测试计划,排除测试的随意性 3 关于函数重载,下列叙述中错误的是 ( )。 ( A)重载函数的函数名必须相同 ( B)重载函数必须在参数个数或类型上有所不同 ( C)重载函数的返回值类型必须相同 ( D)重载函数的函数体可以有 所不同 4 有如下程序: #include using namespace std; class AA int k; protected: int n; void setK(int k) this-k=k; publi
3、c: void setN(int n) this-n=n; ; class BB: public AA /*类体略 */ ; int main() BB x; x.n=1; /1 x.setN(2); /2 x.k=3; /3 x.setK(4); /4 return 0; 在标注号码的四条语句中正确的是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 5 下面不属于需求分析阶段任务的是 ( )。 ( A)确定软件系统的功能需求 ( B)确定软件系统的性能需求 ( C)需求规格说明书评审 ( D)制定软件集成测试计划 6 下列运算符中,不能被重载的是 ( A) | ( B)
4、+= ( C) . ( D) - 7 有如 下程序: #include #include using namespace std; class Instrument public: Instrument(string t=“乐器 “,string n=“无名 “):type(t),name(n) string GetType() const return “乐器 “; string GetName() const return “无名 “; protected: string type,name; ; class Piano:public Instrument public: Piano(st
5、ring n,string t=“钢琴 “):Instrument(t,n) string GetType() const return “钢 琴 “; string GetName() const return name; ; int main() Instrument *pi=new Piano(“星空 “); coutGetType()GetName(); delete pi; return 0; 运行时的输出结果是 ( A)乐器 -星空 ( B)乐器 -无名 ( C)钢琴 -星空 ( D)钢琴 -无名 8 有三个关系 R, S和 T如下:则由关系 R和 S得到关系 T的操作是 ( A)
6、选择 ( B)投影 ( C)交 ( D)并 9 有如下类定义: class Sample public: Sample(int x):ref(x) / Sample():ref(0) / private: static int val=5; / const int ref; / ; 上述程序段中,错误的语句是 ( A) ( B) ( C) ( D) 10 在下列表述中,用来正确表示 “相对于当前位置 “文件定位方式的是 ( A) ios_base:cur ( B) ios_base:beg ( C) ios_base:out ( D) ios_base:end 11 下列字符中,可以出现在合法
7、的 C+标识符中的是 ( A) : ( B) ( C) public: Point() : xx(0), yy(0) Point(int x, int y =0) : xx(x), yy(y) ; 若执行语句 Point a(2), b 3 , *c 4 ; 则 Point类的构造函数被调用的次数是 ( )。 ( A) 2次 ( B) 3次 ( C) 4次 ( D) 5次 16 在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数 ( A)相同,元素的存储顺序与逻辑顺序一致 ( B)相同,但其元素的存储顺序可以与逻辑顺序不一致 ( C)不同,但元素的存储顺序与逻辑顺序一致 ( D)不
8、同,且其元素的存储顺序可以与逻辑顺序不一致 17 p是指向 ClassA类型对象的指针。执行 deletep;时,系统自动调用 ( A)析构函数 ( B)构造 函数 ( C)静态函数 ( D)友元函数 18 有如下函数模板: template T square(T x) return x * x; 其中的 参数 T是 ( A)函数形参 ( B)函数实参 ( C)模板实参 ( D)模板形参 19 下列运算符中,不能重载为类的友元函数的运算符是 ( A) + ( B) ( C) new ( D) class Pair int m,n; public: Pair(int j,int k):m(j),
9、n(k) int get() return m; int get() const return m+n; ; int main() Pair a(3,5); const Pair b(3,5); cout #include using namespace std; class TV public: TV(int s=41):size(s) cout ( D) 38 下列有关运算符重载的表述中,正确的是 ( A)通过重载运算符时可以改变运算符的结合性 ( B)通过运算符重载可以创造新的运算符 ( C) C+中所有运算符都可以重载为非成员 函数 ( D)运算符重载是多态性的一种表现 39 有如下程
10、序: #include #include using namespace std; class Animal public: virtual string GetType() const return “Animal“; virtual string GetVoice() const return “Voice“; ; class Dog:public Animal public: string GetType() const return “Dog“; string GetVoice() const return “Woof“; ; class Cat:public Animal publi
11、c: string GetType() const return “Cat“; string GetVoice() const return “Miaow“; ; void Type(Animal void fun(int i) cout usingnamespacestd; classMyClass public: MyClass(intvalue) ERROR*found* this value=value; count+; ERROR*found* voidMyClass() Count-; staticintgetCount()return count; intgetValue()re
12、turnvalue; private: intvalue; staticintcount; ; ERROR*found* staticintMyClass: count=0; intmain() MyClass*p=newMyClass(5); MyClass*q=newMyClass(10); cout getValue() getValue() #include usingnamespacestd; classPoint坐标点类 public: constdoublex, y; Point(doublex=0 0, doubley=0 0): x(x), y(y) doubledistan
13、ceTo(PointP)const 到指定点的距离 *found* returnsqrt(x-p x)*(xp x)+_); ; constdoublePI=3 1415926535;圆周率 classCirclef圆类 Pointcentre;圆心 doubleradius;半径 public: Circle(PointC, doubler): centre (c), radius(r) doubleperimeter()圆的周长 return2*PI*radius; doublearea()圆的面积 *found* _; ; classCylinder圆柱体 Circlebottom;圆柱
14、体圆形底部 doubleheight;圆柱体高 public: Cylinder(Circleb, doubleh): bottom(b), height(h) doublearea()圆柱体表面积 *found* returnbottom area()*2 +_; doublevolume()圆柱体体积 *found* _; ; intmain() Cylindercy(Circle(Point(2 0, 3 0), 5 0), 8 0); cout usingnamespacestd; classDate日期类 intyear, month, day;年、月、日 public: Date(
15、intyear, intmonth, intday): year(year), month(month), day(day) intgetYear()constreturnyear; intgetMonth()const(return month; intgetDay()constreturnday; ; classPerson人员类 charname14;姓名 boolismale;性别,为 true时表示男性 Datebirthdate;出生日期 public: Person(char*name, boolismale, Datebirthdate); constchar*getName(
16、)const(re turnname; boolisMale()constreturnismale; DategetBirthdate()constreturnbirthdate; intcompareAge(constPerson p)const; voidshow()const; ; voidsortByAge(Personps, intsize); voidwriteToFile(char*); voidPerson: show()const couti) Personp=psm, psm=psi; psi=p; intmain() Personstaff= Person(“张三 “,
17、true, Date(1978, 4, 20), Person(“王五 “, false, Date(1965, 6, 3), Person(“杨六 “, false, Date(1965, 9, 5), Person(“李四 “, true, Date(1973, 5, 30) ; constintsize=sizeof(staff) sizeof(staff0); inti; coutGetType()时调用基类的 GetType函数,得到 type为乐器, name 为无名,所以输出乐器 -无名。选项 B 正确。 8 【正确答案】 D 【试题解析】 关系 T中的元素与关系 R和关系 S
18、中不同元素的总和,因此为并操作。 9 【正确答案】 C 【试题 解析】 静态数据成员初始化时,只能在类体外进行初始化,一边形式为: 数据类型 类型:静态数据成员名 = 初值 所以 错误,答案为 C选项。 10 【正确答案】 A 【试题解析】 本题考查文件流的定位操作,属于基础知识, A选项正确。 11 【正确答案】 D 【试题解析】 C+的标识符由字母、数字和下划线组成, A、 B、 C错误,答案为 D。 12 【正确答案】 A 【试题解析】 一旦函数在基类中声明为虚函数,它就一直是虚函数,派生类无法改变该函数为虚函数这一事实,所以派生类从基类中 继承来的虚函数,不加virtual 修饰,也是
19、虚函数,选项 A正确;普通成员函数在派生类中也可以重新定义,重新定义后的成员函数会屏蔽对基类同名函数的直接访问,选项 B 错误;多态调用只能是通过基类对象的指针或引用调用虚函数来实现,基类对象调用虚函数不是多态调用,选项 C错误;构造函数不能声明为虚函数,因为构造函数是在对象完全构造之前运行的,在构造函数运行时,对象的动态类型还不完整,选项D错误;答案为 A。 13 【正确答案】 B 【试题解析】 算法的时间复杂度是指执行算法所需要的计算工作量,它与使用的计算机、 程序设计语言以及算法实现过程中的许多细节无关, B选项正确, D选项错误。最坏情况下的时间复杂度可以与平均情况的时间复杂度相同,
20、A选项错误。不同的算法时间复杂度一般不相同, C选项错误。 14 【正确答案】 D 【试题解析】 字符串中, t、 n、 r均为一个字符,即转义字符,答案为 D。 15 【正确答案】 C 【试题解析】 本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a(2)以及对象数组 b 3 ,共执行 4次构造函数,对象指针不调用构造函数。所以本题答案为 C。 16 【正确答 案】 A 【试题解析】 顺序表具有以下两个基本特征:线性表中所有元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表中,每个元素占有相同的存储单元。 A选项正确。 17 【正确答案】 A
21、 【试题解析】 指向对象的指针使用 delete删除时,该指针指向的对象会被撤销,编译器会自动调用析构函数来释放该对象占有的资源,答案为 A。 18 【正确答案】 D 【试题解析】 参数 T是模板形参,答案为 D。 19 【正确答案】 B 【试题解析】 C+规 定,赋值操作符 “=“、下标操作符 “、调用操作符 “()“和成员访问箭头操作符 “-“必须重载为成员函数,将这些操作符定义为非成员函数将在编译时标记为错误,友元函数是非成员函数,答案为 B。 20 【正确答案】 B 【试题解析】 本题考查常对象、常成员函数及构造函数。常对象只能调用常成员函数,所以本题中,对象 a为普通对象,执行 a.
22、get()后,会执行默认构造函数,输出 3;对象 b 为常对象,执行 b.get()后,会执行常构造函数,输出 8。 21 【正确答案】 B 【试题解析】 数据库管理系统 是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。 22 【正确答案】 C 【试题解析】 本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:数据类型类名 :静态数据成员名 =初值。所以本题答案为 C。 23 【正确答案】 B 【试题解析】 在实际应用中,队列的顺序存储结构一般采用循环队列的形式。 24 【正确
23、答案】 C 【试题解析】 本题考查运算符重载,重载不能改变 运算符运算对象的个数;不能改变运算符的优先级别;不能改变运算符的结合性;重载运算符的函数不能有默认值,否则就改变了运算符参数的个数;不能定义新的运算符,某些运算符不能重载。所以答案为 C。 25 【正确答案】 A 【试题解析】 本题考查构造函数相关知识,本题中定义一个对象 room1,输出C,定义 room2时输出 CC,然后执行 room3.Print时,输出 54,最后执行三个析构函数输出 DDD,所以答案为 A。 26 【正确答案】 A 【试题解析】 关系模型采用二维表来表示,即每个二维表称为一个 关系。 27 【正确答案】 C
24、 【试题解析】 静态数据成员初始化时,只能在类体外进行初始化,一边形式为: 数据类型 类型:静态数据成员名 = 初值 所以 错误,答案为 C选项。 28 【正确答案】 A 【试题解析】 本题考查浮点型数据输出精度, setprecision 用来设置浮点精度, A选项正确。 29 【正确答案】 D 【试题解析】 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,称为重载函数。选项 A中,仅当形参是引用或指针时,形参是否为 const对重载才有影 响,这里 const对重载没有影响,另外函数不能仅仅基于不同的返回类型实现重载, A错误;选项 B 中,当调用函数 fun(x)只带有一个
25、实参时,两个函数都匹配,该调用具有二义性, B 错误;选项 C中形参列表只有默认参数不同,默认参数并不改变形参个数, C错误;选项 D正确,形参列表中参数个数不同;答案为 D。 30 【正确答案】 B 【试题解析】 setprecision 设置实数的精度; setw 设置字段宽度; setfill 填充字符; showpoint强制输出浮点数的小数点和尾数 0;答案为 B。 31 【正确答案】 B 【试题解析】 常量 4.2是浮点型常量,一般按双精度处理,是 double型; 4.2f按单精度处理,是 float型; 4L是 long型。答案为 B。 32 【正确答案】 C 【试题解析】 在
26、类定义体外定义成员函数,必须指定成员函数的作用域,因此需要在使用类名和作用域运算符来修饰函数名,答案为 C。 33 【正确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A)。 34 【正确答案】 D 【试题解析】 在销毁派生类对 象时,先调用派生类的析构函数,再调用基类的析构函数。 35 【正确答案】 D 【试题解析】 栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。 36 【正确答案】 C 【试题解析】 本题考查函数重载相关知识,重载函数是函数的一种特殊情况,为方便使用, C+允许在同一范围中声明几个
27、功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。 ABD选项的形参都与原函数相同,所以不能作为重载函数,选项 C正确。 37 【正确答案】 C 【试题解析】 本题考查模板的定义,使用的括号为 value = value; (2)MyClass() (3)int MyClass:count = 0; 【试题解析】 (1)主要考查考生对 this指针的掌握 ,this是一个指针变量 ,调用成员时应使用标识符 “-“。 (2)主要考查考生对析构函数的掌握 ,定义析构函数时不能使用任何返回类型。 (3)主要考查考生对静态成
28、员的掌握 ,静态成员赋值时不用添加 static,但声明时要使用。 三、简单应用题 42 【正确答案】 (1)(yp y)*(yp y); (2)returnPI*radius*radius; (3)bottom area()*2+bottom perimeter()*height; (4)returnbottom area()*height; 【试题解析】 (1)主要考查考生对成员函数定义的掌握情况,要求返回指定点的距离,根据距离公式,得出调用该成员函数的对象与参数 P点之间的距离。 (2)主要考查考生对成员函数定义的掌握,根据圆面积计算公式,给出成员函数area()的定义。 (3)主要考查
29、考生对成员函数定义的掌握,根据圆柱体表面积计算公式,给出成员函数 area()的定义。 (4)主要考查考生对成员函数定义的掌握,根据圆柱体体积计算公式。给出成员函数 volume()的定义。 四、综合应用题 43 【正确答案】 int n = 0; n = p.birth_date.getYear() - birth_date.getYear(); if (n != 0) return n; n = p.birth_date.getMonth() - birth_date.getMonth(); if (n != 0) return n; return p.birth_date.getDay() - birth_date.getDay(); 【试题解析】 compareAge函数的功能是比较年龄大小并排序。先比较年 ,再比 较月 ,最后是比较日。