全国计算机等级考试二级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)下列关于队列的叙述中正确的是
A)只能插入元素,而不能删除元素
B)可以插入元素,也能删除元素
C)插入元素时需要移动队列中所有的元素
D)删除元素时需要移动队列中所有的元素
(7)下列叙述中正确的是
A)在模块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息
B)在自顶向下、逐步细化的设计过程中,首先应设计解决问题的每一个细节
C)在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则
D)在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法
(8)数据独立性是数据库技术的重要特点之一。所谓数据独立性是指
A)数据与程序独立存放
B)不同的数据被存放在不同的文件中
C)不同的数据只能被对应的应用程序所使用
D)以上三种说法都不对
(9)用树形结构来表示实体之间联系的模型称为
A)关系模型
B)层次模型
C)网状模型
D)格式化模型
(10)下列叙述中正确的是
A)用E—R图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系
B)用E—R图只能表示实体集之间一对一的联系
C)用E—R图只能表示实体集之间一对多的联系
D)用E—R图表示的概念数据模型只能转换为关系数据模型
(11)以下对C/C++语言函数的描述中,正确的是
A)C程序由一个或一个以上的函数组成
B)C函数既可以嵌套定义又可以递归调用
C)函数必须有返回值,否则不能使用函数
D)C++程序中调用关系的所有函数必须放在同一个程序文件中
(12)以下正确的描述为
A)每个C++语言程序必须在开头用预处理命令:
B)预处理命令必须位于C++源程序的首部
C)在C++语言中预处理命令都以”#”开头
D)C++语言的预处理命令只能实现宏定义和条件编译的功能
(13)下列叙述中正确的是
A)全局变量的作用域一定比局部变量的作用域范围大
B)静态类别变量的生存期贯穿于整个程序的运行期间
C)函数的形参都属于全局变量
D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值
(14)以下选项中合法的用户标识符是
A)long
B)_2Test
C)3Dmax
D)A.dat
(15)已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量"\101"是
A)字符A
B)字符a
C)字符e
D)非法的常量
(16)下面对宏定义的描述中不正确的是
A)宏不存在类型问题,宏名无类型,它的参数也无类型
B)宏替换不占用运行时间
C)宏替换时先求出实参表达式的值,然后代入形参数运算求值
D)其实,宏替换只不过是字符替代而已
(17)下列不是循环语句的是
A)while语句
B)do…while语句
C)for语句
D)if…else语句
(18)如果a=l,b=2,c=3,d=4,则表达式aA)1
B)2
C)3
D)4
(19)有关构造函数的说法中错误的是
A)构造函数名字和类的名字一样
B)构造函数在说明类变量时自动执行
C)构造函数无任何函数类型
D)构造函数有且只有一个
(20)以下有关析构函数的叙述不正确的是
A)一个类只能定义一个析构函数
B)析构函数和构造函数一样可以有形参
C)析构函数不允许有返回值
D)析构函数名前必须冠有符号“~“
(21)以下关于静态成员变量的叙述不正确的是
A)静态成员变量为类的所有对象所公有
B)静态成员变量可以在类内任何位置上声明
C)静态成员变量的赋初值必须放在类外
D)定义静态成员变量时必须赋初值
(22)若执行下面的程序时,从键盘上输入3和4,则输出结果是
main()
{
A)14
B)16
C)18
D)20
(23)以下程序不用第三个变量实现将两个数进行对调的操作,划线处应为
A)a+b
B)a-b
C)b*a
D)a/b
(24)如下程序的输出结果是
A)O.000000
B)0.250000
C)0.500000
D)1.000000
(25)如下程序的输出结果是
A)O
B)1
C)2
D)3
(26)有以下程序段
intk=O:
while(k=1)k++;
while循环执行的次数是
A)无限次
B)有语法错,不能执行
C)一次也不执行
D)执行1次
(27)以下程序的输出结果是
main()
A)1234
B)123
C)12
D)1
(28)设有数组定义:chararray[]=”China”;贝4数组array所占的空间为
A)4个字节
B)5个字节
C)6个字节
D)7个字节
(29)以下程序的输出结果是
A)20
B)24
C)25
D)15
(30)有以下程序
执行后输出结果是
A)7
B)6
C)8
D)无确定值
(31)有以下程序
执行后输出结果是
A)654321
B)432156
C)456123
D)123456
(34)下列语句中,输出与众不同的是
A)对象infile只能用于文件入操作
B)对象outfile只能用于文件输出操作
C)对象iofile在文件关闭后,不能再打开另一个文件
D)对象iofile可以打开一个文件同时进行输入和输出
二、填空题(每空2分,共30分)
请将每空的正确答案写在答题卡【l】~【15】序号的横线上,答在试卷上不得分。
(1)对具有n个结点的线性表进行顺序查找,最坏情况下需要的比较次数为【l】。
(2)设有下列二叉树:
对此二叉树中序遍历的结果为【2】。
(3)在面向对象的程序设计中,用来请求对象执行某一处理或回答某些信息的要求称为
【3】
(4)程序的测试方法分为静态分析和动态分析。使用测试用例在计算机上运行程序,使
呈序在运行过程中暴露错误,这种方法称为【4】。
(5)在关系模型中,一个关系的属性名表称为【5】.也就是二维表的表框架,相当于
_己录型。
(6)执行”cout< (7)十进制28和3.26的类型分别是【7】。 (8)假定一个二维数组的定义为”inta[3][5];”,则该数组所含元素的个数为15,所占的 (9)假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数 (1O)将关键字const写在函数头之后,函数体之前,说明该函数是一个const成员函数。 (11)若要在程序文件中进行标准输入输出操作,则必须在开始的#include命令中使用 (12)下列程序的输出结果为【12】。 (13)根据注释内容在空白处填写适当内容。 (14)下列程序的执行结果是【14】。 二级C++语言程序设计参考答案及解析 标准预测试卷一 一、选择题 (2)D【解析】在线性链表中插入或删除元素都不需要移动其他元素,只需改变指针即可;栈只能在一 端插入或删除元素,也不需要移动其他元素;队列只能在一端插人元素.在另一端删除元素,也不需 要移动其他元素。 (3)B【解析】同一个数据结构可以有多种存储结构,其所占的存储容量一般是不同的。而对分查找 法只适用于顺序存储的有序表。 (4)C【解析】线性链表是线性表的链式存储结构;二叉链表是二叉树的链式存储结构;栈与队列都是 特殊的线性表,属于逻辑结构;循环队列是队列的一种存储结构。 (5)A【解析】堆可以用完全二叉树表示,因此,完全二叉树能直接使用堆排序法进行排序。 (6)B【解析】队列是一种特殊的线性表,只能在一端插入元素,在另一端删除元素,并且在插入与删 除操作时都不需要移动其他元素。 (7)C【解析】在模块化设计中,要求将一个大程序按人们能理解的大小规模进行分解,使每个模块都 能易于理解,各模块的功能尽量单一,各模块之间的联系尽量的少。因此,选项A中的说法是错误的。 自顶向下、逐步细化的设计过程,主要包括两个方面:一是将一个复杂问题的解法分解和细化成由若 干模块组成的层次结构;二是将一个模块的功能逐步分解细化为一系列的处理步骤,直到某种程序 设计语言的语句或某种机器指令。即在自顶向下、逐步细化的设计过程中。是按照先全局后局部、先 整体后细节、先抽象后具体的方法设计程序。因此.选项B中的说法也是错误的。 在模块化程序设计中,每一个模块完成一个功能,相对独立,要求一个模块内部的控制结构也要符合 结构化原则。因此,选项C中的说法是正确的。 由于在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则,因此,在程序设计过程 中,结构化程序设计方法与模块化程序设计方法是要同时采用的。因此,选项D中的说法是错误的。 (8)D【解析】在数据库系统中,通过系统提供的映象功能,使数据具有两方面的独立性:一是物理独 立性。即由于数据的存储结构与逻辑结构之间由系统提供映象,使得当数据的存储结构改变时,其 逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改。二是逻辑独立性。即由于数据的局 部逻辑结构(它是总体逻辑结构的一个子集,由具体的应用程序所确定,并且根据具体的需要可以作 一定的修改)与总体逻辑结构之间也由系统提供映象,使得当总体逻辑结构改变时,其局部逻辑结构 可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。 由此可知,选项A、B与C中的说法都是错误的。 (9)B【解析】用树形结构来表示实体之间联系的模型称为层次模型。 (10)A【解析】用E-R图可以简单明了地描述实体及其相互之间的联系,用E-R图还可以方便地描 述多个实体集之间的联系和一个实体集内部实体之间的联系。因此,选项A中的说法是正确的, 而选项B与C中的说法都是错误的。 为了建立用户所要求的数据库.必须把概念结构(用E-R图表示的概念数据模型)转换为某个具体的数据库管理系统所支持的数据模型.这就是逻辑结构设计所要完成的任务。在已给定数据库管理系统的情况下,数据库的逻辑设计可以分两步来进行: ①将概念模型转换成一般的数据模型; ②将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。 由此可知,用E-R图表示的概念数据模型不仅能转换为关系数据模型,还可以转换为其他数据模 型,如网状模型和层次模型等。因此,选项D中的说法也是错误的。 (11)A【解析】C语言的基本单位是函数,本题考察的就是函数的基本涵义及其使用。 (12)C【解析】本题中,A和B的描述是一样的,故可以排除。在C++中,建议用inline函数取代C 语言中的宏定义功能。 (13)B【解析】本题考察的是变量的作用域及其生存期,需要掌握变量类别及其特点。 (14)B【解析】注意A选项用了c++的保留字long,选项c使用了数字开头.选项D中存在空格, 这些均是错误的标识。正确答案应为B。 (15)A【解析】首先将八进制数转换成十进制数,则发现是65,故答案为A。 (16)C【解析】本题考察对宏的理解。宏其实就是替换.这种替换不是在运行时进行,而是自编译时 就完成的。替换时仅仅将表达式展开,不进行运算求值。 (17)D【解析】本题很简单,选项D是条件语句,不是循环语句。 (18)A【解析】本题考察问号表达式的嵌套.只要掌握了问号表达式的求解顺序,是可以轻松求解本题的。a
(19)D【解析】本题考察构造函数的定义和使用。构造函数可以重载,故不可能只有一个。 (20)B【解析】本题考察析构函数的定义和使用,析构函数不能有形参.也没有返回值,故正确答案应 为B。 (21)D【解析】静态成员变量的引入是为了解决同一类的不同对象间数据共享的需要。因此,类的静 态数据成员在定义时不能赋初值,只能在类外赋初值.此外要注意赋值时要用类名进行限制。 (22)B【解析】按照程序的执行顺序,考生可以很快得出正确答案为B。 (23)B【解析】本题思路巧妙.分析时可以发现b=(a+b)一b,则此时b中放的是a,完成交换工作的 一半。然后要将b放到a中,将表达式展开,则为a=(a十b)一a.此时正好把b放到a中。此时完 成全部的交换。 (24)C【解析】本题主要考察条件语句的运行规则.考生按照逻辑顺序分析可知正确答案为C。 (25)c【解析】本题考察的是if...clse语句中的配对原则:与最近的配对.故当a
(26)A【解析】注意本题有个陷阱,马虎的考生将纷纷落马。本来while中的表达式应为k=-1,而 本题却为k=1,是赋值表达式而不是逻辑表达式。因此,编译器将其值一直认为是l,因此表达式 一直为真,陷人无限次的循环。 (27)B【解析】本题考察的是循环次数的判定。有while后的逻辑表达式可知,整个循环体需要执行 3次,故可直接选定正确答案为B。 (28)C【解析】本题考察在C++语言中,字符串的存放规则。即字符串存放在字符数组中,而且在 字符的后面自动插入标识字符串结束的标识符’\O’.因此,共6个字符,每个字符占用一个字节,故正 确答案为C。 (29)D【解析】本题考察的是同名局部变量和全局变量的作用域之间的关系。同时考察了静态变量 的特点:退出函数和进入函数并不影响静态变量的值。因此.循环多次.实际上完成静态变量的累 加。即1+2+3+4+5.其值为15,故答案为D。 (30)A【解析】本题考察对二维数组的使用。只要按照要求细心分析各个数组元素的位置,即可以 正确的得到答案为A。 (31)A【解析】本题采用递归函数的方式将数组中的元素进行倒置,只要能够看出函数fun的功能, 即可以得出正确答案为A。 (32)D【解析】分析可知本题中while循环体的功能是将数组中元素值为奇数的项目累加,在遇到第 一个元素值为偶数时停止累加。因此,观察数组中各元素值可知14之前的奇数相加是11+13,故 答案为D。 (33)A【解析】本题考察continue语句在while循环中的使用:直接跳转到条件判断表达式位置.不 再执行continue后面的语句。另外.根据分析可知,本题循环体的功能是将O,2,4,6位元素加一后 累加,故结果应是1+3+5+7,因此正确答案为A。 (34)A【解析】本题主要考察setfill的用法。只用在设置了宽度的情况下,字符填充操作setfill才有 意义。另外要注意的是设置宽度setw是所有格式中惟一一个一次有效的设置。 (35)C【解析】本题看似复杂。其实掌握技巧的话可以很容易的得出正确答案为C。按照常识,一个 文件关闭后,应该可以再打开另外一个文件。
字储空间的字节数为【8】。
组,则使用的语句是【9】。
比时const不是指定函数的返回值,而是修饰【10】指针。
头文件【11】。
(15)下列类的构造函数不能通过编译,正确的构造函数应该是【15】。
(1)D【解析】栈是特殊的线性表,在栈顶可以插入元素,称为人栈,也可以删除元素,称为退栈。因 此,栈是一种先进后出的线性表。
二、填空题
(1)【l】n【解析】对具有n个结点的线性表进行顺序查找,最坏情况下需要比较n次。
(2)【2】TZBACYXP【解析】按照二叉树中序遍历的方法:在访问根结点、遍历左子树与遍历右子树 这三者中,首先遍历左子树.然后访问根结点,最后遍历右子树;并且。在遍历左、右子树时。仍然先遍 历左子树,然后访问根结点,最后遍历右子树。对本题中的二叉树进行中序遍历的结果应是TZBA— CYXP。
(3)【3】消息【解析】在面向对象的程序设计中,用来请求对象执行某一处理或回答某些信息的要求 称为消息。
(4)【4】动态分析【解析】程序的测试方法分为静态分析和动态分析。使用测试用例在计算机上运行 程序,使程序在运行过程中暴露错误,这种方法称为动态分析。
(5)【5】关系模式【解析】在关系模型中.一个关系的属性名表称为关系模式。
(6)【6】D【解析】char()在这里作为强制类型转换函数使用,将F前相隔两个的字符显示出来.故应 为字符I)。
(7)【7】int和double【解析】整型和双精度型。注意除非定义了float变量.实型常量隐含为 double型。
(8)【8】60【解析】二维数组总个数为维数之积.占用的存储空间的字节数与类型有关,本题为int,则 在TC环境下被分配2字节,而在VC环境下被分配4字节。
(9)【9】Worker*r=newWorker[n]【解析】在C++中动态分配栈上内存的命令是new,释放命令 是delete,注意和C语言中的mallc和free向对应。
(10)【lO】this【解析】const在修饰指针的时候考生容易混淆。如果const位于星号的左侧,则const 就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰 指针本身,即指针本身是常量。而用const声明了返回值后,const按照”修饰原则”进行修饰,起到 相应的保护作用,即保护this指针不被修改。
(11)【1l】iostream.h【解析】本头文件和重要.包含了基本输入输出所需要的库函数。
(12)【12】良好优秀良好【解析】本题主要考察switch语句中break语句的使用。由于caseA和 caseB之间没有break语句,导致在输出“优秀”之后顺序执行并输出了“良好”,这与原来的设计思 路是不符的。
(13)【13】Location&rAl=A1:【解析】本题主要考察引用的定义。根据上下文以及注释可以获取所 需要的类型及名称信息。
(14)【14】20【解析】本题考察全局变量和引用的综合使用。在主函数中.b实际上是temp的一个引 用。因此在给b赋值20的时候,输出的temp就是20。
(15)【15】Sample(imm):con(m+1){n=m;}【解析】本题考察常数据成员的初始化方法。常数据成员的定 义必须出现在类体中.而且初始化只能通过构造函数的成员初始化列表进行,而且不能被更新。