1、国家二级( C+)机试模拟试卷 104及答案与解析 一、选择题 1 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 2 以下关键字不能用来声明类的访问权限的是 ( )。 ( A) public ( B) static ( C) protected ( D) private 3 下列函数模板的定义中,合 法的是 ( )。 ( A) templateTabs(Tx)returnxTab
2、s(Tx)returnxabs(Tx)returnx using namespace std; class AA public: AA() cout using namespace std; class Base1 public: Base1() Base1() cout using namespace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(int xx) x=xx; void SetY(int yy) y=yy; private: int x,y; ; class Circle:publ
3、ic Point public: Circle(int r):radius(r) int GetRadius() return radius; private: void SetRadius(int r) radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1); / c1.SetY(2); / c1.SetRadius(10); / cout using namespace std; class Base int x; public: Base(int n=0): x(n) cout usingnamespacestd; cons
4、tdoublePT=3 14; classCircle public: ERROR*found* Circle(intr)radius=r; voidDisplay(); private: constintradius; ; EFRROR*found* voidDisplay() cout doublelength(Pointp1, Pointp2) returnsqrt(p1 getX()-p2 getX()* (p1 getX()-p2 getX()+(p1 getY()-p2 getY()*(p1 getY()-p2 getY(); doubleTriangle: perimeter()
5、const 一个 return语句,它利用 length函数计算并返回三角形的周长 *found* _; doubleTriangle: area()const doubles: perimeter() 2 0; returnsqrt(s*(s-length(point1, point2)* (s-length(point2, point3)* (s-length(point3, pointl); proj2 cpp #include“shape h“ #include usingnamespacestd; *found* show函数的函数头 (函数体以前的部分 ) cout usingna
6、mespacestd; constintMax=100; clasSIntSet public: IntSet()构造一个空集合 end=一 1; IntSet(inta, intsize)构造一个包含数组 a中 size个元素的集合 if(size=Max) end=Max一 1; else end=size一 1; for(inti=0; i“必须重载为成员函数,这些操作符定义为非成员函数将在编译时标记为错误,友元函数是非成员函数,上面四种操作符不能重载为类的友元函数,另外成员访问操作符 “.“不能重载,答案为 D。 17 【正确答案】 A 【试题解析】 main()函数中首先动态创建 A
7、A 类对象,调用 AA 类构造函数,输出 “A“,创建 BB类对象,调用 BB类构造函数,输出 “B“,使用 delete显式销毁AA类对象,调用 AA类析构函数,输出 “A“,程序结束时,销毁 BB类对象,编译器自动调用 BB类析构函数,输出 “B“,整个程序输出结果为: “ABAB“,答案为 A。 18 【正确答案】 D 【试题解析】 枚举类型中,枚举成员可以显式初始化或隐式初始化;默认的情况下第一个枚举成员赋值为 0,后面每个成员赋值比前面大 1。所以枚举类型COLOR中各个成员值分别为: 0,1,5,8,9,15。 RED为 9,答案为 C。 19 【正确答案】 C 【试题解析】 派生
8、类构造函数都是先调用基类构 造函数,再根据声明次序定义数据成员,另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;由于 Derived 类的派生列表中,Base2在前,所以应该先调用 Base2的构造函数,再调用 Base1的构造函数;销毁派生类对象时,总是按照构造函数运行次序的相反顺序调用析构函数,首先运行派生类析构函数,然后按继承层次依次向上调用各基类函数;所以 Derived对象销毁时,首先调用 Derived的析构函数,接着调用 Base1的析构函数,最后调用Base2的析构函数;输出 结果为: “db1b2“,答案为 C。 20
9、 【正确答案】 C 【试题解析】 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C)。 21 【正确答案】 B 【试题解析】 类的成员访问权限有 3种: public(公用 )、 protected(保护 )、private(私有 )。 22 【正确答案】 B 【试题解析】 线性链式存储结构中每个结点都由数据 域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。 23 【正确答案】 B 【试题解析】 本题考查重载运算符, C+规定有的运
10、算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数。所以本题选 B。 24 【正确答案】 C 【试题解析】 本题考查对象成员的引用,在类外引用对象的数据成员时,只能访问 public成员而不能访问 private成员所以 C选项错误。 25 【正确答案】 C 【试题解析】 从技术观点上看,软件设计包括软件结构设计、数据设计、接 口设计、过程设计。所以 A、 B、 D正确, C为软件测试阶段的任务。 26 【正确答案】 D 【试题解析】 软件方面的可重用性是通过继承来实现的, A选项正确。派生类的构造函数负责调用基类的构造函数, B 选项正确。虚基类解决了由多继承产生的二义性
11、问题,所以 C选项正确。派生类可以继承基类的私有成员,但是不能直接访问,所以 D选项错误。 27 【正确答案】 B 【试题解析】 算法的效率与问题的规模和数据的存储结构都有关, A错误。算法的时间复杂度,是指执行算法所需要的计算工作量, B 正确。由于数据元素在计算 机存储空间中的位置关系可能与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一对应的, C错误。算法的时间复杂度和空间复杂度没有直接的联系, D错误。 28 【正确答案】 A 【试题解析】 本题考查函数重载相关知识, C+允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,
12、也就是说用同一个运算符完成不同的运算功能。返回值类型对区别重载函数没有意义。所以答案为 A选项。 29 【正确答案】 C 【试题解析】 类定义体内部定义的函数,编译器 都默认为内联函数,类定义体外部定义的函数,使用关键字 inline修饰的函数为内联函数,所以内联函数有:Wow(intn=0)、 incre()、 display(Woww),答案为 C。 30 【正确答案】 D 【试题解析】 函数可以自己调用自己,称为递归调用;函数返回类型为 void时,没有返回值;函数的参数列表中可以没有参数;函数在被调用前必须先进行函数声明或定义。 A、 B、 C错误, D正确;答案为 D。 31 【正确
13、答案】 B 【试题解析】 构造函数不能指定返回类型,选项 C、 D错误;由于是在类定 义体外定义函数,需要在函数名前给出函数的作用域,选项 A错误;答案为 B。 32 【正确答案】 C 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中中序序列为 BDCA,后序序列为 DCBA,可知 A为根结点, BDC为左侧结点, C是 B右子结点, D是 C右子结点,故前序序列为 ABCD, C选项正确。 33 【正确答案】 B 【试题解析】 本题考查
14、常成 员函数,常成员函数只能引用本类中的数据成员,而不能修改它。所以本题答案为 B。 34 【正确答案】 A 【试题解析】 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为 A)。 35 【正确答案】 C 【试题解析】 所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同, 其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为
15、 C。 36 【正确答案】 C 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个对象 d1,先执行基类的构造函数输出 0,再执行派生类的构造函数输出 3,然后定义了一个对象d2(5,7),其中需要调用基类的构造函数输出 7,最后输出 5,所以答案为 C。 37 【 正确答案】 A 【试题解析】 本题考查二维字符数组, a0=“AAA“中 a0表示一个地址,不能将字符串直接赋值给指针,所以 A选项错误。 38 【正确答案】 C 【试题解析】 执行
16、派生类构造函数的顺序是: 1、调用基类构造函数, 2、调用子对象构造函数, 3、再执行派生类构造函数,所以本题中先调用基类 person 构造函数,然后执行 father构造函数,最后执行 mother构造函数。 39 【正确答案】 D 【试题解析】 本题考查一维数组和指针, A选项为一维指针数组, B、 C选项为函数指 针, D选项定义指针方式不对, *号应该在 p的左边。所以答案为 D。 40 【正确答案】 B 【试题解析】 本题考查默认析构函数,题中定义了一个对象和包含 2个元素的一维对象数组,而对象指针不占用空间,对象引用也不会占用内存空间,所以不调用构造函数,那么析构函数就执行 3次
17、,答案为 B。 二、基本操作题 41 【正确答案】 (1)Circle(int r) : radius(r) (2)void Circle:Display() (3)c.Display(); 【试题解析】 (1)主 要考查考生对构造函数的掌握 ,常变量私有成员只能通过成员列表进行初始化。 (2)主要考查考生对成员函数的掌握 ,在定义类的成员函数时要加上类名和作用域符。 (3)主要考查考生对成员函数调用的掌握 ,调用成员函数时应使用标识符 .。 三、简单应用题 42 【正确答案】 (1)x(x0), y(y0) (2)Pointpoint1, point2, point3 (3)returnlength(point1, point2)+length(point1, point3)+length(point2, point3) (4)voidshow(Shape for (int i = 0; i = set.GetEnd(); i+) if (!IsMemberOf(set.GetElement(i) return false; return true;