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.3B.4C.6D.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图是软件详细设计的表示工具答案:A7.负责数据库中查询操作的数据库语言是A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言答案:C解析:数据操纵语言负责数据的操纵,包括查询及增、删、改等操作。8.一个教师可讲授多门课程,一门课程可由多个教师讲授,则实体教师和课程间的联系是A.1∶1联系B.1∶m联系C.m∶1联系D.m∶n联系答案:D9.有三个关系R、S和T如下:A.自然连接B.交C.除D.并答案:C10.定义无符号整数类为UInt,下面可以作为类UInt实例化值的是A.-369B.369C.0.369D.整数集合{1,2,3,4,5}答案:B解析:A项为有符号型,C项为实型常量,D项为整数集合,只有B项符合,故本题选B。11.为了提高函数调用的实际运行速度,可以将较简单的函数定义为A.内联函数B.重载函数C.递归函数D.函数模板答案:A12.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为A.aB.AA.aC.a()D.AA::a()答案:A13.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是A.任何B.公有或保护C.保护或私有D.私有答案:B解析:派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员,基类中的私有成员在派生类中是隐藏的,不可访问。14.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是A.Data+(Data);B.Dataoperator+(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.coutB.cinC.cerrD.cset答案:D解析:C++流的4个预定义的流对象为:cin标准输入,cout标准输出,cerr标准出错信息输出,clog带缓冲的标准出错信息输出。17.Windows环境下,由C++源程序文件编译而成的目标文件的扩展名是A.cppB.exeC.objD.lik答案:C解析:在VC6集成开发环境中,编译命令将一个以cpp为扩展名的C++源程序文件转换成一个以obj为扩展名的目标文件。18.字符串a+b=12\n\t的长度为A.12B.10C.8D.6答案:C19.有如下程序:#includeiostreamusingnamespacestd;intmain(){intf,f1=0,f2=1;for(inti=3;i=6;i++){f=f1+f2;f1=f2;f2=f;}coutfendl;return0;}运行时的输出结果是A.2B.3C.5D.8答案:C20.有如下程序:#includeiostreamusingnamespacestd;intmain(){inta[6]={23,15,64,33,40,58};ints1,s2;s1=s2=a[0];for(int*p=a+1;pa+6;p++){if(s1*p)s1=*p;if(s2*p)s2=*p;}couts1+s2endl;return0;}运行时的输出结果是A.23B.58C.64D.79答案:D解析:程序实现的功能为输出数组a中最小值和最大值的和。for循环结束后,变量s1中存放最小值15,变量s2中存放最大值64,输出s1+s2的值为79。21.有如下程序:#includeiostreamusingnamespacestd;voidf1(int&x,int&y){intz=x;x=y;y=z;}voidf2(intx,inty){intz=x;x=y;y=z;}intmain(){intx=10,y=26;f1(x,y);f2(x,y);coutyendl;return0;}运行时的输出结果是A.10B.16C.26D.36答案:A解析:函数f1的参数传递方式采用传引用方式,调用函数f1后,实参变量x、y的值被交换。此时,x=26,y=10。函数f2的参数传递方式采用传值方式,调用函数f2后,不会改变实参变量x、y的值。故程序输出y的值为10。22.有如下程序:#includeiostreamusingnamespacestd;classXA{inta;public:staticintb;XA(intaa):a(aa){b++;}~XA(){}intget(){returna;}};intXA::b=0;intmain(){XAd1(2),d2(3);coutd1.get()+d2.get()+XA::bendl;return0;}运行时的输出结果是A.5B.6C.7D.8答案:C解析:主程序中创建了两个XA类的对象d1、d2,并将它们的数据成员a分别初始化为2和3。在创建了两个对象后静态数据成员b=2。程序输出三个变量的和2+3+2=7。23.有如下程序:#includeiostreamusingnamespacestd;classPoint{intx,y;public:Point(intx1=0,inty1=0):x(x1),y(y1){}intget(){returnx+y;}};classCircle{Pointcenter;intradius;public:Circle(intcx,intcy,intr):center(cx,cy),radius(r){}intget(){returncenter.get()+radius;}};intmain(){Circlec(3,4,5);coutc.get()endl;return0;}运行时的输出结果是A.5B.7C.9D.12答案:D解析:主函数中语句“coutc.get()endl;”调用Circle类成员函数get(),返回x+y+radius的值,即3+4+5=12。24.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是A.operatorlong()const;B.operatorlong(BigNumber);C.longoperatorlong()const;D.longoperatorlong(BigNumber);答案:A25.有如下函数模板定义:templatetypenameT1,typenameT2T1FUN(T2n){returnn*5.0;}若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为A.FUN(9)B.FUN9C.FUNdouble(9)D.FUN9(double)答案:C26.下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是A.coutinternal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345;答案:D解析:D选项中setw(6)设置输出宽度为6,而A、B、C项均按实际宽度输出,效果相同,故本题选D。27.下列关于析构函数的描述中,错误的是A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数答案:A解析:析构函数没有参数,所以不能重载,A项说法错误。B、C、D项说法正确。28.下列关于构造函数的描述中,错误的是A.构造函数名与类名相同B.构造函数可以有返回值C.构造函数可以重载D.每个类都有构造函数答案:B解析:构造函数不指定返回类型,它隐含有返回值,由系统内部使用。本题答案为B。29.若PAT是一个类,则程序运行时,语句PAT(*ad.[3];调用PAT的构造函数的次数是A.0B.1C.2D.3答案:A解析:语句“PAT(*ad)[3];”定义了一个指向对象数组的指针,并未创建对象,故不调用构造函数。30.下列描述中,错误的是A.公有继承时基类中的公有成员在派生类中仍是公有成员B.公有继承时基类中的保护成员在派生类中仍是保护成员C.保护继承时基类中的公有成员在派生类中仍是公有成员D.保护继承时基类中的保护成员在派生类中仍是保护成员答案:C解析:保护继承时基类中的公有成员在派生类中改变为保护成员。31.生成派生类对象时,派生类构造函数调用基类构造函数的条件是A.无需任何条件B.基类中显式定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数答案:A32.下列关于派生类和基类的描述中,正确的是A.派生类成员函数只能访问基类的公有成员B.派生类成员函数只能访问基类的公有和保护成员C.派生类成员函数可以访问基类的所有成员D.派生类对基类的默认继承方式是公有继承答案:B解析:基类中的私有成