【计算机类职业资格】国家二级(C++)机试-试卷21及答案解析.doc
《【计算机类职业资格】国家二级(C++)机试-试卷21及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】国家二级(C++)机试-试卷21及答案解析.doc(17页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级(C+)机试-试卷 21 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在长度为 n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。(分数:2.00)A.O(n)B.O(n 2 )C.O(log 2 n)D.O(nlog 2 n)2.下列有关运算符重载的叙述中,正确的是( )。(分数:2.00)A.运算符重载是多态性的一种表现B.C+中可以通过运算符重载创造新的运算符C.C+中所有运算符都可以作为非成员函数重载D.重载运算符时可以改变其结合性3.有如下程序: #include using namespace std;
2、 class MyClass public: MyClass(int x):val(x) void Print() const coutC.=D.+=-=*=/=解析:解析:本题考查重载运算符,C+规定有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数。所以本题选 B。6.有如下类定义: class Person public: Person(string s):name(s) protected: string name; ;class Father:virtual public Person public: Father(string s):Person(s) ;
3、 class Mother:virtual public Person public: Mother(string s):Person(s) ; class Child:public Father,public Mother,virtual public Person public: Child(string s1,string s2,string s3):Mother(s1),Father(s2),Person(s3) ;在建立派生类 Child 的对象时,其基类 Father、Mother和 Person 的构造函数的调用顺序为(分数:2.00)A.Father,Mother,Person
4、B.Mother,Father,PersonC.Person,Father,Mother D.Father,Person,Mother,Person,Person解析:解析:执行派生类构造函数的顺序是:1、调用基类构造函数,2、调用子对象构造函数,3、再执行派生类构造函数,所以本题中先调用基类 person 构造函数,然后执行 father 构造函数,最后执行mother 构造函数。7.软件设计中模块划分应遵循的准则是(分数:2.00)A.低内聚低耦合B.高耦合高内聚C.高内聚低耦合 D.以上说法均错误解析:解析:根据软件设计原理提出如下优化准则:划分模块时,尽量做到高内聚、低耦合,保持模块相
5、对独立性,并以此原则优化初始的软件结构。一个模块的作用范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。软件结构的深度、宽度、扇入、扇出应适当。模块的大小要适中。C 正确。8.若要对类 Value 中重载的类型转换运算符 long 进行声明,下列选项中正确的是(分数:2.00)A.operatorlong()const; B.operatorlong(Value)const;C.longoperatorlong();D.longoperatorlong(Value);解析:解析:参数传递有三种: 传值(value),传址(address),和传引用(reference
6、) 传值时子函数(被调用者)复制父函数(调用者)传递的值,这样子函数无法改变父函数变量的值,函数 f2 就属于传值调用,所以不会改变 y 的值。 传址时父函数将变量的地址传递给子函数,这样子函数可以能过改写地址里的内容改变父函数中的变量 传引用则是一种看起来像传值调用,而实际上功能同传址一样的传递方式。子函数可以改写父函数的变量值。f1 函数属于传引用调用,所以 y 的值在执行完函数后变为了36,C 选项正确。9.有如下程序: #include #include using namespace std; class Father public: Father(string s):name(s)
7、 Father() coutF; private: string name; ; class Mother public: Mother(string s):name(s) Mother() coutM; private: string name; ; class Child:public Mother,public Father public: Child(string s1,string s2,string s3,int a):Father(s1),Mother(s2),name(s3),age(a) Child() coutC; private: string name; int age
8、; ; int main() Child son(“Zhang“,“Li“,“Ming“,20); return 0; 运行时的输出结果是(分数:2.00)A.CB.CMFC.CFM D.20CMF解析:解析:执行派生类构造函数的顺序是:1、调用基类构造函数,2、调用子对象构造函数,3、再执行派生类析构函数,4、执行基类的析构函数。所以本题中执行析构函数为派生类的析构函数、Father 的析构函数、Mother 的析构函数,所以输出 CFM,答案 C 正确。10. (分数:2.00)A.投影 B.交C.选择D.并解析:解析:用于查询的 3 个操作无法用传统的集合运算表示,引入的运算为投影运算、
9、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。投影,从关系模式中指定若干个属性组成新的关系,题目中从 R 中指定 AB 组成新的关系 T,故 A 选项正确。选择,从关系中找出满足给定条件的元组的操作称为选择,即结果 T 应该包含 R 中全部属性,故 C 选项错误。假设,R 与 S 经过某种关系得到 T,则并:RS 是将 S 中的记录追加到 R 后面;交:RS 结果是既属于 R 又属于 S 的记录组成的集合。上述两种操作中,关系 R 与 S 以及 T 要求有相同的结构,故 B、D 选项错误。11.下列关于 this 指针的描述中,正确的是(分数:2.00)A.下列关于 this
10、指针的描述中,正确的是B.类的 const 成员函数都有 this 指针C.任何静态成员函数都有 this 指针D.类的非静态成员函数都有 this 指针 解析:解析:C+中,静态成员是类的组成部分,不是任何对象的组成部分,因此静态成员函数没有 this指针,类的非 const 成员函数包括静态成员函数,所以选项 A、C 错误;答案选 B 或 D。12.下列关于输入流类成员函数 getline()的表述中,错误的是(分数:2.00)A.该函数只能用来从键盘设备读取一行字符串 B.该函数读取的字符串长度是由参数限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,遇到终止符便停止
11、解析:解析:getline(istreamelsey=2; B.if(0)y=1elsey=2;C.if(x!=0)theny=1elsey=2;D.ifx!=0y=1;elsey=2;解析:解析:选项 B 中,y=1 语句后面少了分号“;“;选项 C 中,then 不是关键字,不符合 if 语法;选项 D 中,条件部分 x!=0 必须用圆括号括起来;只有选项 A 正确,整型变量 x 在条件中转化为逻辑变量,非 0 情况下都转化为 1;答案为 A。17.在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是(分数:2.00)A.圆括号B.中括号C.尖括号 D.花括号解析:解析:定义
12、类模板时,模板形参表同样使用尖括号括起来,答案为 C。18.下列选项中,正确的 C+标识符是(分数:2.00)A.a3B.a-3C.a3D.a_3 解析:解析:C+的标识符由字母、数字和下划线组成,其中必须以字母或下划线开头。A、B、C 错误,答案为 D。19.派生类的成员函数不能访问的基类成员是(分数:2.00)A.公有成员和保护成员B.私有成员 C.保护成员D.公有成员解析:解析:基类中的 private 成员,只有基类和基类的友元可以访问,派生类的成员函数不能直接访问,所以派生类若要访问基类的 private 成员,必须使用基类的接口,答案为 B。20.某二叉树有 5 个度为 2 的结点
13、,则该二叉树中的叶子结点数是( )。(分数:2.00)A.10B.8C.6 D.4解析:解析:根据二叉树的基本性质 3:在任意一棵二叉树中,度为 0 的叶子节点总是比度为 2 的节点多一个,所以本题中是 516 个。21.关于函数重载,下列叙述中错误的是( )。(分数:2.00)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同 D.重载函数的函数体可以有所不同解析:解析:所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的
14、重载。所以本题答案为 C。22.有如下程序: #include using namespace std; class Base int x; public: Base(int n=0): x(n) coutA.375B.357C.0375 D.0357解析:解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个对象 d1,先执行基类的构造函数输出 0,再执行派生类的构造函数输出 3,然后定义了一个对象 d2(5,7),其中需要调用基类的构造函数输出 7,最后
15、输出 5,所以答案为 C。23.有如下程序段: int i=9; while ( int i=0 ) cout*; i-; 运行时输出 * 的个数是(分数:2.00)A.0 B.1C.9D.无穷解析:解析:本题考查赋值运算和 while 循环,i 被赋值为为 0,所以 while 中的判断条件为假,不执行循环体,所以输出为 0 个。24.有如下类定义: class AA int a; public: AA(int n=0):a(n) ; class BB :public AA public: BB(int n) _ ;其中横线处缺失部分是(分数:2.00)A.:AA(n) B.:a(n)C.a
16、(n);D.a=n;解析:解析:本题考查派生类的构造函数,其一般形式为:派生类构造函数名(总参数表列):基类构造函数名(参数表列)所以只有选项正确。25.一个栈的初始状态为空。现将元素 1,2,3,A,B,C 依次入栈,然后再依次出栈,则元素出栈的顺序是(分数:2.00)A.1,2,3,A,B,CB.C,B,A,1,2,3C.C,B,A,3,2,1 D.1,2,3,C,B,A解析:解析:栈的修改是按后进先出的原则进行的,所以顺序应与入栈顺序相反,故选 C。26.有如下程序: #include using namespace std; void f1(int x=y; y=z; void f2(
17、int x, int y) int z=x+y; x=y; y=z; int main() int x=10,y=26; f1(x,y); f2(x,y); coutyA.10B.26C.36 D.46解析:解析:参数传递有三种: 传值(value),传址(address),和传引用(reference) 传值时子函数(被调用者)复制父函数(调用者)传递的值,这样子函数无法改变父函数变量的值,函数 f2 就属于传值调用,所以不会改变 y 的值。 传址时父函数将变量的地址传递给子函数,这样子函数可以能过改写地址里的内容改变父函数中的变量 传引用则是一种看起来像传值调用,而实际上功能同传址一样的传
18、递方式。子函数可以改写父函数的变量值。f1 函数属于传引用调用,所以 y 的值在执行完函数后变为了36,C 选项正确。27.有如下程序: #include #include using namespace std; class Father public: Father(string s):name(s) Father() coutF; private: string name; ; class Mother public: Mother(string s):name(s) Mother() coutM; private: string name; ; class Child:public M
19、other,public Father public: Child(string s1,string s2,string s3,int a):Father(s1),Mother(s2),name(s3),age(a) Child() coutC; private: string name; int age; ; int main() Child son(“Zhang“,“Li“,“Ming“,20); return 0; 运行时的输出结果是(分数:2.00)A.CB.CMFC.CFM D.20CMF解析:解析:执行派生类构造函数的顺序是:1、调用基类构造函数,2、调用子对象构造函数,3、再执行
20、派生类析构函数,4、执行基类的析构函数。所以本题中执行析构函数为派生类的析构函数、Father 的析构函数、Mother 的析构函数,所以输出 CFM,答案 C 正确。28.有如下程序: #include using namespace std; int main() int sum = 0; for(int i = 0; i = 3; i += 1) sum += i; while(sum sum A.输出 100B.输出 103C.输出 105D.死循环 解析:解析:程序在 for 循环中嵌套 while 循环。for 循环的初始条件为,sum、i 初值为 0;进入 for 循环之后,首先
21、将 sum 累加 i,此时 sum、i 仍为 0;while 循环中,若 sum 小于 100,则将 sum 累加 i,继续 while 循环;当 sum 不满足条件时,退出循环。由于 sum、i 初值为 0,所以 while 循环中 sum 始终为0,始终满足循环条件 sum100,所以程序进入死循环。答案为 D。29.下列关于派生类构造函数和析构函数的表述中,错误的是(分数:2.00)A.下列关于派生类构造函数和析构函数的表述中,错误的是B.派生类的构造函数会隐含调用基类的构造函数C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函
22、数,再调用派生类的析构函数 解析:解析:派生类对象的撤销顺序与构造顺序相反:首先运行派生类析构函数,然后按继承层次依次向上调用各基类析构函数,这样做是为了每次析构函数销毁的都是完整的对象,选项 D 错误,答案为 D。30.设有表示公司和员工及雇佣的三张表,员工可在多家公司兼职,其中公司(公司号,公司名,地址,注册资本,法人代表,员工数),员工(员工号,姓名,性别,年龄,学历),雇佣(公司号,员工号,工资,工作起始时间)。其中表的键为公司号,表的键为员工号,则表的键(码)为(分数:2.00)A.公司号,员工号 B.员工号,工资C.员工号D.公司号,员工号,工资解析:解析:二维表中的行称为元组,候
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 国家 二级 试试 21 答案 解析 DOC
