2011年3月全国计算机等级考试二级C++语言程序设计笔试真题 一、选择题(每小题2分,共70分)
下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 1. 下列关于栈叙述正确的是 A. 栈顶元素最先能被删除 B. 栈顶元素最后才能被删除 C. 栈底元素永远不能被删除 D. 上述三种说法都不对 答案:A
解析:在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。故本题选A。 2. 下列叙述中正确的是
A. 有一个以上根结点的数据结构不一定是非线性结构 B. 只有一个根结点的数据结构不一定是线性结构 C. 循环链表是非线性结构 D. 双向链表是非线性结构 答案:B
解析:如果一个非空的数据结构满足以下两个条件:(1)有且只有一个根结点;(2)每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构,故A项错误。有一个根结点的数据结构不一定是线性结构,如二叉树,B项说法正确。循环链表和双向链表都属于线性链表,故C、D项错误。 3. 某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层) A. 3 B. 4 C. 6 D. 7 答案:D
解析:根据二叉树的性质:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。所以n2=0,由n=n0+n1+n2可得n1=6,即该二叉树有6个度为1的结点,可推出该二叉树的深度为7。
4. 在软件开发中,需求分析阶段产生的主要文档是 A. 软件集成测试计划 B. 软件详细设计说明书 C. 用户手册
D. 软件需求规格说明书 答案:D
解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。 5. 结构化程序所要求的基本结构不包括 A. 顺序结构 B. GOTO跳转
C. 选择(分支)结构
D. 重复(循环)结构
答案:B
解析:结构化程序设计的三种基本控制结构为:顺序结构、选择结构和重复结构。 6. 下面描述中错误的是
A. 系统总体结构图支持软件系统的详细设计 B. 软件设计是将软件需求转换为软件表示的过程 C. 数据结构与数据库设计是软件设计的任务之一 D. PAD图是软件详细设计的表示工具 答案:A
7. 负责数据库中查询操作的数据库语言是 A. 数据定义语言 B. 数据管理语言 C. 数据操纵语言 D. 数据控制语言 答案:C
解析:数据操纵语言负责数据的操纵,包括查询及增、删、改等操作。
8. 一个教师可讲授多门课程,一门课程可由多个教师讲授,则实体教师和课程间的联系是 A. 1∶1联系 B. 1∶m联系 C. m∶1联系 D. m∶n联系 答案:D
9. 有三个关系R、S和T如下: A. 自然连接 B. 交 C. 除 D. 并 答案:C
10. 定义无符号整数类为UInt,下面可以作为类UInt实例化值的是 A. -369 B. 369 C. 0.369
D. 整数集合{1,2,3,4,5} 答案:B
解析:A项为有符号型,C项为实型常量,D项为整数集合,只有B项符合,故本题选B。 11. 为了提高函数调用的实际运行速度,可以将较简单的函数定义为 A. 内联函数 B. 重载函数 C. 递归函数 D. 函数模板 答案:A
12. 若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为 A. a
B. AA.a C. a() D. AA::a()
答案:A
13. 当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是 A. 任何
B. 公有或保护 C. 保护或私有 D. 私有 答案:B
解析:派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员,基类中的私有成员在派生类中是隐藏的,不可访问。 14. 若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是 A. Data +(Data);
B. Data operator+(Data); C. Data +operator(Data); D. operator+(Data,Data); 答案:B
解析:运算符函数的函数名由运算符前加关键字operator构成,且“+”是一个二元运算符,作为成员函数重载时形参表中只有一个参数。故可排除A、B、D项,本题答案为B。 15. 下列关于函数模板的描述中,正确的是 A. 函数模板是一个实例函数
B. 使用函数模板定义的函数没有返回类型 C. 函数模板的类型参数与函数的参数相同
D. 通过使用不同的类型参数,可以从函数模板得到不同的实例函数 答案:D 解析:函数模板是一系列相关函数的模型或样板;使用函数模板定义的函数可以带有返回类型;函数模板的类型参数为虚拟类型参数,与函数的参数不同。故A、B、C项错误。定义好函数模板后,编译系统将依据每一次对函数模板调用时实际所使用的的数据类型生成适当的调用代码,并生成相应的函数版本,故D项正确。
16. C++系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是 A. cout B. cin C. cerr D. cset 答案:D
解析:C++流的4个预定义的流对象为:cin标准输入,cout标准输出,cerr标准出错信息输出,clog带缓冲的标准出错信息输出。
17. Windows环境下,由C++源程序文件编译而成的目标文件的扩展名是 A. cpp B. exe C. obj D. lik
答案:C
解析:在VC6集成开发环境中,编译命令将一个以cpp为扩展名的C++源程序文件转换成一个以obj为扩展名的目标文件。
18. 字符串\\n\t\的长度为 A. 12 B. 10 C. 8 D. 6 答案:C
19. 有如下程序: #include
for(int i=3;i<=6;i++) { f=f1+f2; f1=f2; f2=f; }
cout< 运行时的输出结果是 A. 2 B. 3 C. 5 D. 8 答案:C 20. 有如下程序: #include int a[6]={23,15,64,33,40,58}; int s1,s2; s1=s2=a[0]; for(int* p=a+1;p*p)s1=*p; if(s2<*p)s2=*p; } cout< 运行时的输出结果是 A. 23 B. 58 C. 64 D. 79 答案:D 解析:程序实现的功能为输出数组a中最小值和最大值的和。for循环结束后,变量s1中存放最小值15,变量s2中存放最大值64,输出s1+s2的值为79。 21. 有如下程序: #include void f1(int& x, int& y){int z=x; x=y; y=z;} void f2(int x, int y){int z=x; x=y; y=z;} int main() { int x=10,y=26; f1(x,y); f2(x,y); cout< 运行时的输出结果是 A. 10 B. 16 C. 26 D. 36 答案:A 解析:函数f1的参数传递方式采用传引用方式,调用函数f1后,实参变量x、y的值被交换。此时,x=26,y=10。函数f2的参数传递方式采用传值方式,调用函数f2后,不会改变实参变量x、y的值。故程序输出y的值为10。 22. 有如下程序: #include static int b; XA(int aa):a(aa){b++;} ~XA() {} int get(){return a;} }; int XA::b=0; int main() { XA d1(2),d2(3); cout< 运行时的输出结果是