全国计算机等级考试二级C++语言程序设计专家密押试卷一
二级C++语言程序设计专家密押试卷一
(考试时间90分钟,满分100分)
一、选择题(每小题2分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)下列叙述中正确的是
A)一个算法的时间复杂度大,则其空间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度也必定大
C)一个算法的空间复杂度大,则其时间复杂度必定小
D)上述三种说法都不对
(2)下列叙述中错误的是
A)二叉链表是二叉树的存储结构
B)循环链表是循环队列的一种存储结构
C)循环队列属于线性表
D)带链的队列是队列的一种存储结构
(3)下列叙述中错误的是
A)继承是面向对象方法的一个主要特征
B)对象是面向对象软件的基本模块
C)类是对象的一个实例
D)消息是请求对象执行某一处理或回答某一要求的信息
(4)下列叙述中正确的是
A)软件工程主要研究如何编程
B)数据库设计的主要任务是设计数据库管理系统
C)算法的效率与数据的存储结构无关
D)上述三种说法都不对
(5)下列叙述中正确的是
A)黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征
B)黑箱(盒)测试方法主要考虑程序的内部结构和内部特征
C)白箱(盒)测试完全不考虑程序内部的逻辑结构
D)上述三种说法都不对
(6)将5个数据进行快速排序,在最坏情况下需要比较的次数是
A)4
B)5
C)10
D)20
(7)设有如图所示的二叉树
则对该二叉树后序遍历的结果是
A)FCADBEG
B)ACBDFGE
C)ABDCGEF
D)ACBDFEG
(8)关系表中的每一横行称为一个
A)关系
B)元组
C)属性
D)字段
(9)在下列关系运算中,能不改变关系中属性个数且减少元组个数的是
A)并
B)差
C)投影
D)交
(10)下列叙述中正确的是
A)实体集之间一对一的联系实际上就是一一对应的关系
B)关系模型只能处理实体集之间一对一的联系
C)关系模型属于格式化模型
D)以上三种说法都不对
(11)一个C++程序由函数A(),B(),C()和函数P()构成,在函数A()中分别调用了函
数B()和函数C(),在函数B()中调用了函数A(),且在函数P()中也调用了函数A(),则
可以说
A)函数B()中调用的函数A()是函数A()的间接递归调用
B)函数A()被函数B()调用是直接递归调用
C)函数P()直接递归调用了函数A()
D)函数P()中调用的函数A()是函数P()的嵌套
(12)下面不正确的描述为
A)调用函数时,实参可以是表达式
B)调用函数时,实参与形参可以共用内存单元
C)调用函数时,将为形参分配内存单元
D)调用函数时,实参与形参的类型必须一致
(13)存取指针所指的值时,采用的运算符是
A)#
B)&
C)%
D)*
(14)已知语句int m=10;则下列表示引用的表示中正确的是
A)int&x=m;
B)int&v=10;
C)int&z;
D)float&t=&m;
(15)下面程序段的正确输出是
int w=4,x=3,y=2,z=1;
cout<<(w
B)l
C)2
D)3
(16)若变量都已正确说明,则以下程序段的输出结果是
A=2;b=3;
printf(a>b?”***a=%d”:”###b=%d”,a,b);
A)没有正确的输出格式控制
B)输出为:***a=2
C)输出为:###b=2
D)输出为:***a=2###b=2
(17)若执行以下程序时从键盘上输入9,则输出结果是
A)ll
B)10
C)9
D)8
(18)以下程序的输出结果是
}
A)1
B)0
C)非O的数
D)一1
(19)以下程序中,while循环的循环次数是
A)1
B)10
C)6
D)死循环,不能确定次数
(20)以下程序的输出结果是
A)31
B)13
C)10
D)20
(21)下列程序执行后的输出结果是
A)you&me
B)you
C)me
D)ERR
(22)下列程序执行后的输出结果是
{int i=0;funcl(i);cout<
B)hel
C)hlo
D)hlm
(23)有以下程序
假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行exam 123<回车>
则运行结果为
A)6
B)8
C)3
D)4
(24)设有如下定义
下面各输入语句中错误的是
A)cin>>(*p).age);
B)cin>>std.name);
C)cin>>std[0].sex);
D)Cin>>(p一>.sex));
(25)有以下程序
执行后输出结果是
A)9,2
B)10,2
C)9,1
D)lO,1
(26)有以下程序
编译时出现错误,以下叙述中正确的是
A)程序中只有a='\';语句不正确
B)b='\xbc';语句不正确
C)d="\0127";语句不正确
D)a='\';和c='\0xab';语句都不正确
(27)设有以下类和对象的定义:
则下面针对成员变量m的引用,错误的是
A)k1.m=1
B)k2一>m=2
C)pl一>m=3
D)(*p2).m=4
(28)设有基类定义:
派生类采用何种继承方式可以使成员变量b成为自己的私有成员
A)私有继承
B)保护继承
C)公有继承
D)私有、保护、公有
(29)以下有关类与结构体的叙述不正确的是
A)结构体中只包含数据;类中封装了数据和操作
B)结构体的成员对外界通常是开放的;类的成员可以被隐蔽
C)用struet不能声明一个类型名;而class可以声明一个类名
D)结构体成员默认为public;类成员默认为private
(30)以下有关成员函数特征的叙述不正确的是
A)成员函数一定是内联函数
B)成员函数可以重
C)成员函数可以设置缺省参数值
D)成员函数可以是
(31)定义静态成员函数的主要目的是
A)方便调用
B)有利于数据隐蔽
C)处理类的静态成员变量
D)便于继承
(32)有关构造函数的说法中错误的是
A)构造函数名字和类的名字一样
B)构造函数在说明类变量时自动执行
C)构造函数无任何函数类型
D)构造函数有且只有一个
(33)关于友元的描述中错误的是
A)友元函数可以访问该类的私有数据成员
B)一个类的友元类中的成员函数都是这个类的友元函数
C)友元可以提高程序的运行效率
D)类和类之间的友元关系可以继承
(34)阅读以下程序
如运行时输入This is example.
A)This
B)This is
C)This iS a
D)This is an example.
(35)下列程序执行结果是
A)10 10
B)编译错误缺少拷贝构造函数
C)10随机数
D)随机数随机数
二、填空题(每空2分,共30分)
请将每空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。
(1)衡量模块独立性的两个重要度量标准是耦合性和内聚性。其中 【1】用于度量模块间互相连接的紧密程度。
(2)在顺序查找与二分查找两种方法中,可以用【2】方法对有序线性链表进行查找。
(3)具有记忆作用的线性表称为【3】 。
(4)如果在一棵二叉树中有17个度为2的结点,则该二叉树中有【4】个叶子结点。
(5)数据流图有两种典型的结构形式,它们分别是【5】和事务型。
(6)函数定义的格式是 【6】 函数名(形式参数表)函数体。
(7)语句序列long x;x=OL;可用一个语句表示为 【7】 。
(8)在C++中的实型数据分为三种类型,即单精度float、双精度double和 【8】 。
(9)若a.b和c均是int型变量,则表达式a=(b=4)+(c=2)执行后,a的值为【9】 。
(10)一个结构占用的空间理论上等于【lO】 。
(11)下列程序的输出结果是【1l】。
(12)下列程序的运亍结果是【12】 。
(13)下列程序的输出结果是【13】 。
(14)下列程序时类D代码段出现编译错误,原因是【14】 :
(15)下列程序编译错误,是由于划线处缺少某个语句,该语句是【l5】
专家密押试卷一答案及解析
一、选择题
(1)D【解析】算法的复杂度主要包括时间复杂度和空间复杂度。但不存在算法的时间复杂度大,则 其空间复杂度也必定大;或者算法的空间复杂度大,则其时间复杂度也必定大;或者算法的空间复杂 度大.则其时间复杂度必定小等问题。
(2)B【解析】二又链表是二叉树的一种存储结构;循环队列是队列的一种存储结构,而队列属于线性 表,因此,循环队列也是线性表;带链的队列是队列的一种存储结构。因此,选项A)、C)、D)都是正 确的。 循环链表是一般线性表的一种链式存储结构,它不是循环队列的存储结构。因此,选项B)中的说法 是错误的。
(3)C【解析】继承是面向对象方法的一个主要特征;对象是面向对象软件的基本模块;消息、是请求对 象执行某一处理或回答某一要求的信息。因此.选项A)、B)、D)都是正确的。 在面向对象方法中,对象是类的一个实例。因此,选项c)中的说法是错误的。
(4)D【解析】所谓软件工程是指,采用工程的概念、原理、技术和方法指导软件的开发与维护。软件 工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。 数据库设计是指在已有数据库管理系统的基础上建立数据库的过程。 数据结构与算法之间有着密切的关系。特别是对于数据处理问题,算法的效率通常与数据结构在计 算机中的表示有着直接的关系。 综上所述.选项A)、B)、C)中的说法都是错误的。
(5)A【解析】黑箱测试方法完全不考虑程序的内部结构和内部特征.而只是根据程序功能导出测试 用例。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例。因此,选项A)中的说法是正 确的.其他三项说法都是错误的。
(6)C【解析】对长度为n的线性表进行快速排序.在最坏情况下需要z1(n—1)/2次比较.现线性表的 长度为5,在最坏情况下需要比较的次数为5(5一1)/2=10。
(7)C【解析】按照二叉树后序遍历的方法:在访问根结点、遍历左子树与遍历右子树这三者中,首先 遍历左子树,然后遍历右子树.最后访问根结点;并且.在遍历左、右子树时,仍然先先遍历左子树,然 后遍历右子树,最后访问根结点。对本题中的二叉树进行后序遍历的结果应是ABDCGEF。设有如 图所示的二叉树
(8)B【解析】关系表中的每一横行称为一个元组。
(9)D【解析】交运算是不改变关系中属性个数的,且减少元组的个数。
(10)D【解析】实体集之间一对一的联系不一定是一一对应的关系。例如,在一个教室中,实体集“学 生”与实体集“座位”之间是一对一的联系。因为实体集“学生”中的每一个学生最多与实体集“座 位”中的一个座位有联系(学生坐在该座位上);并且.实体集“座位”中的每一个座位也最多与实 体集“学生”中的一个学生有联系(座位上坐着该学生)。但该教室中的学生与座位之间不一定是一 一对应的关系.因为有可能某些座位是空的,没有学生去坐。因此,选项A)中的说法是错误的。 在关系模型中.由于使用表格数据来表示实体之间的联系,因此,可以直接描述多对多的实体联系。 因此,选项B)中的说法也是错误的。 关系模型是与格式化模型完全不同的数据模型,它与层次模型、网状模型相比有着本质的区别。关 系模型是用表格数据来表示实体本身及其相互之间的联系,它是建立在数学理论基础上的。因此, 选项C)中的说法也是错误的。
(11)A【解析】本题考察递归调用。递归调用分为直接递归和间接递归。A()属于间接递归。
(12)B【解析】 函数调用时用实参替换形参,如果实参为表达式,将为表达式的值创建一个临时对象, 然后将该实参替换形参。替换的实质是变量间的拷贝,当然这种拷贝需要为形参分配内存。需要 注意的是:形参在编译时不分配内存,在运行时才分配内存。
(13)D【解析】对指针所指向的地址取值时,采用的存取运算符为*。&为取地址符。
(14)A【解析】引用比较特殊,即必须指向一个已有的同类型变量。引用是已有变量的别名,故选项 C是错误的,选项D中变量类型不同。而选项B中是常数。
(15)B【解析】本题为表达式作为变量进行输出,而且表达式为两个三目表达式的嵌套,只要掌握了 该三目表达式的含义,可以正确得出答案为B。
(16)C【解析】本题实际上是考场C语言中的格式化输入输出知识。一般来说,学习C++的考生先 前都学习过C语言,如果能够深刻理解这两种具有血缘关系的语言中对于输入输出的控制方式.则 能够更好的理解面向对象的本质。同时本题也考察了三目表达式的知识。如果逻辑表达式为真, 则执行冒号之前的,否则执行冒号之后的表达式。
(17)B【解析】本题考察的是后置自增运算符的知识,这类题考生往往做错,以原因不能正确拆解。 题中if语句可以拆解为:if(9<10),n+l=10,cout<<10< (18)A【解析】本题考察逻辑运算,只要考生掌握了逻辑运算的优先级就可以正确得到答案为A。或 优先级最高,&&和!!的优先级相同,则按照从左到右的顺序计算。
(19)D【解析】本题需要考生仔细分析,掌握扎实的基本功,并且熟悉continue和break在循环语句 中的作用。当i=O时,执行第一个if语句,为真.跳过后面的第二个if和i++,重新判断while的 条件,此时i并没有任何改变,依然是O,因此将陷入一个无限循环中。 (20)A【解析】 本题也是考察switch语句中的break的作用,由于题中所有的case分支都没有 break,故将顺序执行这些分支。只要考生耐心按照流程将数据累加到a上,就可以得到正确答案 为A。 (21)A【解析】本题考察二维数组的标识方式。Arr作为数组名单独使用时表示一个指向数组首部 的指针,故you放在数组第一行的前三列arr[0][0]、arr[0][1]、arr[0][2]中。Arr[1]表示指向第 二行的指针.因此me放在数组第二行的前两列arr[1][0]、arr[1][1]中。而&则直接按照两维下 标放到第一行的第四列中。那么输出的时候默认按照从左到右,先上后下的顺序。因此本题的正 确答案为A。 (22)C【解析】本题考察递归调用。分析runel可知,当i=0时,首先输出h,然后i变为2,调用runC (2),则输出str[2],应为l。分析到此就可以排除选项A和B。然后调用funCl(4),此时输出str [4],为0,故可以选择正确答案为C。 (23)A【解析】本题考察静态变量的使用规则。考生需要注意的是s为静态变量,每次进入fun函数 时s还保留使用原来的值,因此while循环将最终返回的是各位数之和,而argc表示参数的个数, 此处为1,因此正确答案为A。 (24)B【解析】srd是一个数组,其内可以存放三个结构体类型的数据。当std单独使用的时候表示 一个指针,指向该数组首地址。因此不能直接用std和点操作符进行配对使用。指针操作符一> 只能和指针配对使用,点操作符只能和有名对象或变量配对使用。 (25)B【解析】本题还是考察前置和后置自增与自减运算符的使用方法。在i输出时,还是lO,输出 之后才变成9,而++j则是先加一在将新值输出。 (26)D【解析】 本题考察C++中各种类型在输出时的转化关系。斜杠为转义控制字符。其后必须紧 跟一个字符,故首先可以确定的是a的赋值语句是错误的,根据选项我们直接看c的赋值语句是否 正确。斜杠后跟0表示其后为八进制,其值从0到7,因此c的赋值语句也是错误的。据此可以判 断本题的正确答案应该为D。 (27)B【解析】本题也是考察有名对象和无名对象的使用规则。对有名对象,要使用点操作符,无名 对象要使用箭头运算符。据此可以判断正确答案为B。 (28)A【解析】类的继承中有三种继承方式,他们和类的访问级别相结合在派生类中可以产生多种 访问级别。基类中成员为保护的,在派生类中要为私有的,可以采用私有继承。基类中的保护成员 在派生类中不是私有就是保护,即级别只能降低而不能升高。基类中的公有成员则可能为私有、保 护和私有。 (29)C【解析】本题同样考察的是结构体和类之间的区别和联系。 (30)A【解析】本题是一个综合题,考察几种常用的修饰词与成员函数之间的关系。Inline和static 均可以修饰成员函数的。 (31)C【解析】声明为static的类成员或者成员函数便能在类的范围内共同享,这样的成员称做静态 成员和静态成员函数。静态成员函数由于与对象无关系.所以在其中是不能对类的普通成员进行 直接操作的。静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。 那么一旦某个成员函数被声明为静态的,就不能访问非静态成员了么?解决方法是将引用传递给 需要使用的对象能够让静态的成员函数访问到对象的非静态数据。 (32)D【解析】 本题考察构造函数的有关概念。构造函数在面向对象设计和开发中占据重要地位,考生需 要扎实掌握。构造函数不能返回类型,但是可以有参数,可以重载。据此可以选择正确答案为D。 (33)D【解析】友员机制就是为了解决对象封装过程中对对象所有内部数据存取都需要通过接口进 行的低效率问题,但是破坏了封装性。友员关系是单向且不可继承的。 (34)A【解析】本题考察C++中cin输人流对象的使用规则,其特点是以空格、回车和tab为分隔 符。因此this和is之间的空格告诉cin对象停止接收后面的数据。故正确答案为A。 (35)A【解析】本题考察拷贝构造函数的知识。如果类中没有实现拷贝构造函数,则编译器会为其 自动生成一个。对于本题这种简单对象,默认生成的拷贝构造函数可以完成数据成员的自动赋值. 对于复杂对象.则可能需要显式定义拷贝构造函数。
(2)【2】顺序查找 【解析】在顺序查找与二分查找两种方法中,只能用顺序查找方法对有序线性链表 进行查找,因为二分查找方法只适用于顺序存储的有序表。 (3)【3】栈 【解析】栈具有记忆作用。 (4)【4】18 【解析】根据二叉树的性质:在任意二叉树中,叶子结点总是比度为2的结点多一个。因 此,如果在一棵二叉树中有17个度为2的结点.则该二叉树中有17十l=18个叶子结点。 (5)【5】变换型 【解析】数据流图有两种典型的结构形式,它们分别是变换型和事务型。 (6)【6】类型名或类型修饰符【解析】本题考察基本的函数定义格式。 (7)【7】long x=0L; 【解析】 变量的声明和赋值可以分别进行也可以同时进行。分别进行时称为赋 值,同时进行是称为初始化。 (8)【8】长双精度long double【解析】长精度类型一般用于高精度的科学运算。 (9)【9】6【解析】本题考察运算优先级问题,从右向左,先括号后乘除,随后加减,这是基本的运算规则。 (10)【10】每个数据成员所占空间之和【解析】结构体没有行为,即没有代码占用空间,故其占用的空 间仅仅包含其数据成员占用的空间之和。 (11)【11】7,3.4【解析】 函数的功能是求出数组中指定范围的元素中的最大值。所以在a数组中前 四个数据中最大值为7,数组b中前3个元素中最大值为3.4。 (12)【12】class Base:3【解析】题中基类和派生类中有同名函数.但是参数不同。有的考生可能判断 为重载。却是错误的。重载仅发生在水平方向,即同一类的成员函数或全局函数间。在垂直关系 上,即派生关系中,只有完全相同的函数类型、函数名和参数个数、参数类型时.才表现多态性。本 题中参数不同,编译器便认为是两个完全不同的函数。通过基类的指针指向派生类对象时,该指针 只能访问到派生类中具有多态性的成员函数,而与基类无关的函数是无法通过基类指针来访问的。 故系统强制转化为整型,调用的是base类的func函数。如果将派生类中的func的形参改为int 型,则执行的就会是派生类的func函数.此时表现为多态。 (13)【13】4【解析】分析本题可知函数功能为计算一个字符串中包含的数字个数。字符串中包含的 数字有2008,故输出为4。 (14)【14】类的继承出现二义性【解析】本题就是通过实例来表现多继承时出现的二义性问题。多重 继承比较复杂,尽管c++中提供了虚基类来解决这个问题,但在实际开发中由于过于复杂而往往 尽量避免使用。 (15)【15】friend class B; 【解析】在B类中出现了对A类中私有成员numl的直接访问.这是不允许 的。所以必须要把类B设成类A的友员就可以编译通过了。
二、填空题
(1)【l】耦合性 【解析】衡量模块独立性的两个重要度量标准是耦合性和内聚性。其中耦合性用于 度量模块间互相连接的紧密程度。相关阅读