全国计算机等级考试二级C++语言程序设计专家密押试卷二
二级C++语言程序设计专家密押试卷二
(考试时间90分钟.满分100分)
一、选择题(每小题2分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在 答题卡相应位置上,答在试卷上不得分。
(1)下列叙述中错误的是
A)二叉树不是线性结构
B)线性表是非线性结构
C)线性链表是线性结构
D)栈与队列是线性结构
(2)一棵二叉树中所含最少的结点数是
A)0
B)l
C)2
D)3
(3)在最坏情况下,冒泡排序所需要的比较次数为
A)n/2
B)(n+1)/2
C)n(n-1)/2
D)n(n+1)/2
(4)数据结构分为
A)表、队列、堆栈和树
B)逻辑结构
C)存储结构
D)逻辑结构与存储结构
(5)在面向对象方法中,实现信息隐蔽是通过对象的某一特性来实现的,这个特性是
A)封装
B)类
C)对象
D)继承
(6)在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是
A)概要设计
B)需求分析
C)可行性分析
D)详细设计
(7)在数据流图(DFD)中,带有名字的箭头表示
A)模块之间的调用关系
B)程序的组成成份
C)数据的流向
D)控制程序的执行顺序
(8)下述关于数据库系统的叙述中正确的是
A)数据库系统中数据的一致性是指数据类型一致
B)数据库系统比文件系统能管理更多的数据
C)数据库系统减少了数据冗余
D)数据库系统避免了一切冗余
(9)下列关于关系运算的叙述中正确的是
A)投影、选择、连接是从二维表的行的方向来进行运算
B)投影、选择、连接是从二维表的列的方向来进行运算
C)并、交、差是从二维表的列的方向来进行运算
D)以上三种说法都不对
(10)数据的独立性是数据库技术的重要特点之一。所谓数据独立性是指
A)数据与程序独立存放
B)不同的数据被存放在不同的文件中
C)不同的数据只能被对应的应用程序所使用
D)以上三种说法都不对
(11)以下叙述中正确的是
A)构成C程序的基本单位是函数
B)可以在一个函数中定义另一个函数
C)main()函数必须放在其他函数之前
D)所有被调用的函数一定要在调用之前进行定义
(12)以下选项中合法的实型常数是
A)5E2.O
B)E一3
C).2EO
D)1.3E
(13)为了避免嵌套的if...else语句的二义性,C++规定与else配对的是
A)缩排位置相同的if
B)在其之前未配对的if
C)在其之前未配对的最近的if
D)同一行上的if
(14)若有以下宏定义:
#defineN2
#defineY(n)((N+1)*n)
则执行语句z=2*(N十Y(5));后的结果是
A)语句有错误
B)z=34
C)z=70
D)z无定值
(15)在“文件包含”预处理语句的使用形式中,当#include后面的文件名用””括起时,寻找被包含文件的方式是
A)直接按系统设定的标准方式搜索目录
B)先在源程序所在的目录搜索,再按系统设定的标准方式搜索
C)仅仅搜索源程序所在目录
D)仅仅搜索当前目录
(16)假定其中的x的单位是角度且不考虑π值的精度,则与数学公式等价的
C++语言表达式是
A)sqrt(COS(x))
B)sqrt(abs(cos(x*3.14/180)))
C)sqrt(abs(cos(x*(/180)))
D)sqrt(fabs(cos(x*3.14/180)))
(17)执行下面程序中的输出语句后,a的值是
A)65
B)20
C)15
D)10
(18)下列程序的运行结果是
A)a=%2,b=%5
B)a=2,b=5
C)a=d,b=d
D)a=%d,b=%d
(19)下列程序的输出结果是
A)a=2,b=1
B)a=1,b=1
C)a=1,b=O
D)a=2.b=2
(20)以下循环体的执行次数是
A)3
B)2
C)1
D)O
(21)有如下程序
该程序段的输出结果是
A)987
B)876
C)8765
D)9876
(22)以下函数值的类型是
A)int
B)不确定
C)void
D)tloat
(23)以下程序的输出结果是
A)100200
B)57
C)200100
D)75
(24)设有如下说明
typedefstruct
{intn;charc;doublex;}STD;
则有以下选项,能正确定义结构体数组并赋初值的语句是
A)STDttr2]={{1,'A',62),{2,'B',75}};
B)STDtt[2]={1,”A”,62,2,”B”,75};
C)structtt[2]={{1,'A'},{2,'B'}};
D)structtt[2]={{l,”A”,62.5},{2,”B”,75.O}};
(25)有以下程序
执行后输出结果是
A)产生语法错
B)随机值
C)A
D)65
(26)有以下程序
执行后输出结果是
A)1,1,2
B)2,2,1
C)2,2,2
D)2,2,3
(27)有以下程序
执行后输出结果是
A)2
B)3
C)4
D)编译时有错,无结果
(28)已知语句intm=10;则下列引用的表示中正确的是
A)int&x=m;
B)int&y=10;
C)int&z;
D)float&t=&m;
(29)若已定义inta[]={1,2,3,4,5,6,7,8,9,10),*p=a,i=5;则对数组元素的不正确的引用是
A)a[p—a]
B)*(&a[i])
C)p[i]
D)*(*(a+i))
(30)有关构造函数的叙述不正确的是
A)构造函数名必须和类名一致
B)构造函数在定义对象时自动执行
C)构造函数无任何函数类型
D)在一个类中构造函数有且仅有一个
(31)以下关于友元函数的叙述不正确的是
A)友元函数提供了类之间数据共享的一个途径
B)一个友元函数可以访问任何类的任何成员
C)友元函数破坏了数据的封装
D)友元函数增加了程序设计的灵活性
(32)设有语句
intn,m:
chara[5],b;
cin2>>n>>a>>m>>b;
为了分别将lO和20分别赋给n和m,look赋给a,t赋给b,则正确的输入为 A)10”look”20’t'
B)10”look”10
C)10look20t
D)10
(33)对于以下带参数的main()函数的第二形参,voidmain(intarge, ),不可能的形式是
A)char*argv[]
B)charargv[]
C)char**a
D)char*m[]
(34)能保证对所有的参数能够结束的递归函数是
A)intf(imtn){if(n<1)returnl;elsereturnn*f(n+1);}
B)intf(intn){if(n>1)return1;elsereturnn*f(n一1);}
C)intf(intn){if(abs(n)<1)return1;elsereturnn*f(n/2);}
D)intf(intn){if(n>1)return1;elsereturnn*f(n*2);}
(35)执行完下列语句
inta,b,*c=&a;
int*&p=c;
p=&b;
后c指向
A)a
B)b
C)c
D)无效地址
二、填空题(每空2分,共30分)
请将每空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。
(1)所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是 【1】 。
(2)在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送 【2】 实现。
(3)在关系数据库中,用来表示实体之间联系的是 【3】 。
(4)在测试时,完全不考虑程序的内部结构和内部特征的测试方法称为 【4】 测试方法。
(5)一个项目具有一个项目主管,一个项目主管可管理多个项目。则实体集“项目主管”
与实体集“项目”的联系属于 【5】 的联系。
(6)执行语句序列
charstrl[10]=”ABCD'’,str2[10]=”XYZxyz'’;
for(inti=0;strl[i]=str2[i].i++);
后,数组strl中的字符串是XYZxyz,数组str2中的字符串是 【6】
(7)下列程序的执行结果是 【7】 。
(8)根据输出结果填空完成下面程序。
【8】 //初始化静态变量val
(9)下列程序的运行结果是 【9】
(10)下列程序是一个函数模板,用于把数组a的每个元素按照逆序放入数组b中。请填
空完成该函数模板的定义。
(11)下列程序的运行结果是 【ll】 。
(12)下列程序编译时发现pI]一>f(10);语句出现错误,其原因是 【12】 :
(13)下列程序的运行结果是 【13】 。
(14)下列程序用于打印出ASCII字符,其析构函数内的语句应为 【14】
(15)下列程序对加号进行了重载,划线部分的语句是 【15】 。
专家密押试卷二答案及解析
一、选择题
(1)B【解析】线性表肯定是线性结构。二又树是非线性结构;线性链表是线性结构;栈与队列是特殊的线性表,也是线性结构;线性表是线性结构。
(2)A【解析】这是考查概念,空二叉树中所含最少的结点数是O个。
(3)C【解析】只能死记公式。
(4)I)【解析】考查知识点,直接选择D。
(5)A【解析】封装是面向对象方法中的一种信息隐蔽技术。
(6)B【解析】在需求分析阶段中.要求能准确地确定软件系统必须做什么和必须具备哪些功能。正确答案为B。
(7)C【解析】 在数据流图中,用标有名字的箭头来表示数据流。
(8)C【解析】C和【)两者的描述列象一样,结果必然在这两者之中。D太绝对.所以C正确。
(9)B【解析】A和B是互相矛盾的,答案必然是这两者之一。在关系模型的数据语言中,常规的集合运算(并、交、差、笛卡尔积等).是将关系(即二维表)看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;投影、选择、连接等运算主要是从二维表的列的方向来进行运算。正确答案是B。
(10)D【解析】数据独立性是指物理独立性和逻辑独立性。物理独立性是指由于数据的存储结构与逻辑结构之间由系统提供映象,使得当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改。逻辑独立性是指由于数据的局部逻辑结构与总体逻辑结构之间也由系统提供映象,使得当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。由此可知,选项A、B和C中的说法都是错误的。正确答案是D。
(11)A【解析】构成C语言的基本单位是函数,函数构成了程序;函数之间可以调用或被调用;main函数在前的时候,其他函数需要在main函数前进行声明。以便于编译器为main函数所调用的子函数分配资源。
(12)C【解析】本题考查实型常数的指数表示法.可以肯定的是指数不能为小数即必须为整数,故排除A。由于符号E前面必须有数字,故B也是错误的。D在指数符号后面没有数字,是错误的。答案为C。
(13)C【解析】C++规定else总是与之前未配对的最近的if进行配对.这样可以避免二义性,也便于编译器分析。(14)B【解析】本题考查宏定义的功能,可以把它看成一个函数,直接代人参数,可计算出结果为34,故选B。
(15)A【解析】本题考查在include中,采用不同的符号,如<>或””,编译器搜索方式的不同。
(16)D【解析】本题考查数学表达式的掌握,首先应转换为弧度,然后作为COS函数的参数·求绝对值,最后是开方函数。考生需要掌握的是常用的数学函数。
(17)B【解析】本题考查逗号表达式的运算特点。逗号表达式是所有表达式中优先级最低的,从左到右结合,其求解过程是:将逗号表达式各表达式按从左到右的顺序依次求值,并将最右边的表达式结果作为整个逗号表达式的结果。这里考生要注意的是,第二个表达式执行完后,a的值并没有发生变化,依然是15,所以在执行a+5的时候,结果是20,而不是65。有的考生可能误选A。正确答案应是B。
(18)B【解析】本题非常简单,考查C++中基本的输出语句,注意不要与c语言的输出控制字符混淆。
(19)A【解析】本题主要考查switch语句中,break语句的作用。每个case语句后面如果没有break语句,则程序的执行流程将发生变化,即顺序执行各个case语句。这种情况一般不符合程序员的设计思路,但也可以用这种特性完成特殊控制。
(20)C【解析】本题考查考生对for循环中三个表达式的执行顺序及使用方法。首先执行第一个表达式,然后根据第二个表达式判断是否成立,如果成立则执行循环体,然后执行第三个表达式,随后再去判断第二个表达式。根据这个顺序,可以很容易的判断出,循环体只执行了一次。
(21)B【解析】注意到n一一的运算顺序,知道第一次输出的应是8,据此就可以很快排除A和D。然后判断循环几次结束,由于当n一6时,while的条件判断已经不成立了,直接跳过循环体结束程序了。故当n=9,8,7时执行了循环体,故答案为B。
(22)A【解析】本题考查C++当中函数的默认返回类型.这种类型与函数内部的局部变量的类型没有关系。如果不小心处理函数返回类型,可能造成数据丢失。本题答案为A。
(23)B【解析】本题考查同名变量的作用域大小。考生应掌握.同名局部变量在函数内部将屏蔽全局同名变量,因此,main函数内部使用的局部变量a和b,即s和7,答案为B。
(24)A【解析】本题考查结构体的基本知识。因为有了typedef.故可以省略SWUCI关键词而直接使用STD名称。结构体数组中的元素在赋值时要求用大括号包含,故答案为A。
(25)B【解析】本题考查联合这种特殊的数据结构的基本知识。联合的本质在于联合的成员共享同一片连续的内存单元。本题中由于整型变量占两个字节,字符型变量占一个字节,而整型变量的一部分没有被赋值.故将输出随机值。本题答案为B。
(26)C【解析】本题考查逻辑表达式及自增运算符的联合使用。考生要注意本题里面隐藏的考点:&&和||在左侧表达式为真或假时,将不再进行该逻辑操作符右侧表达式的运算.即j++本身为非零,故k++不再执行。如对表达式a&&b&&c,实际执行情况是当a非O时,再判断b,a、b均非O。再判断c。而对表达式a||b||c,若a为非O.不必判断b和c,结果一定为l。
(27)B【解析】本题考查逻辑表达式的结合特性,即左结合性。对于表达式a>b>c,首先判断a>b为真,结果为1,然后判断l>c,为假,故转去判断c—l>=d是否成立,成立,结果为l,再判断1。=1,结果为真,因此,执行d+l,答案为B。
(28)A【解析】本题考查C++中引入的新类型:引用。引用表示变量的别名,使用方式同变量·效果同指针。引用不能用常数进行赋值,引用的类型必须一致.引用在使用之前必须初始化。
(29)D【解析】数组和指针的关系非常密切,因为数组名称单独使用是表示数组的首地址c故可用的表示可能是a[i]。p[i],*(p+i),同样,&a[i]表示地址,因此*&a[i]等同于a[i]。本题答案为D。
(30)D【解析】本题考查构造函数的基本知识。构造函数名字与类名相同;可以重载;不需要参数;不需要指定返回类型等。本题答案为D。
(31)B【解析】友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。容易混淆是B,只有在类中声明了某个函数是自己的友元函数之后.该友元函数才能够访问本类的私有成员,而不是任何类的任何成员都可以访问。故答案为B。
(32)C【解析】本题考查C++中流操作符的操作规则,即分割符。首先根据字符不需要加引号可以排除选项A和B,而D用回车作分割符,但却在look和20之间缺少一个回车符,故据此可选出正确答案为C。
(33)B【解析】本题要考查的实际是字符数组,用于向函数传递参数,属于指针或引用传递方式。要注意的是考生不要被名称所迷惑,即根据A和D是相同类别的,故可以排除。对C来说,也属于指针传递方式,而B不仅不属于指针传递,而且还没有限定数组大小,编译器在编译时就会产生错误。
(34)C【解析】递归函数的两个重要条件是要有结束和递归表达式。选项D无法结束,排除之。根据这两个条件可以进行判断出答案为C。
(35)B【解析】 p为c的引用,即两者实际上是一个指针,故p指向b后,c自然也指向b,故答案为B。
二、填空题
(1)【l】对象【解析】注意不要误以为是类,实体是指对象。
(2)【2】消息【解析】这是概念题,通过发送消息实现。
(3)【3】二维表【解析】在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。即关系模型是用表格数据来表示实体本身及其相互之间的联系。
(4)【4】黑盒【解析】黑盒测试方法只是根据程序功能导出测试用例,完全不考虑程序的内部结构和内部特征。
(5)【5】一对多【解析】“项目主管”与实体集“项目”的联系属于一对多的联系。
(6)【6】XYZxyz【解析】注意for的循环体为空语句.其第二个表达式为一个赋值语句而不是一个逻辑表达式语句。因此,for循环的作用实际上是将str2的字符逐个赋值给strl中的对应位置。
(7)【7】10【解析】本题考查全局变量的使用。全局变量被系统默认初始化为O,故在执行a=a+suma();语句时,首先执行SUnla函数.将a的值改变为5,该函数的返回值也是5,故最后a的值被赋值为10。
(8)【8】intTest::val=200:【解析】类的静态成员变量必须要进行初始化才能使用.初始化时需要用域限定符::指明该变量所属的类名。
(9)【9】100【解析】本题比较简单,考查考生基本的类的定义.构造函数以及对象数组的概念。
(10)【10】intn【解析】本题考查函数模板的定义,注意第三个参数不需要改变类型.仅仅用于给定循环体的上界,为正整数,故可直接用Int来限定。
(11)【11】worker,peasant【解析】分析本题的for循环体内的语句可知,pl和p2将放置最大和最小的字符串,这里的比较是以第一个字符值为基准的。
(12)【12】数据类型不匹配【解析】派生类中的成员函数隐藏了基类的同名函数,而参数lO又无法隐式转换为char类型参数。
(13)【13】4004 100l 【解析】本题考查静态成员变量在不同对象间的共享现象。无论哪个对象修改了其静态变量的值.其他对象再访问该变量时已经发生了变化。
(14)【14】deleteelems; 【解析】注意.用new动态申请的内存在使用完成后一定要用delete释放。
(15)【15】returnt1.area+12.area; 【解析】符号重载时往往采用的方法是对对象中的每个成员分别处理,封装之后体现出对象参与运算的现象。