全国计算机等级考试二级笔试样卷C++语言程序设计一、选择题((1)~(35)每小题2分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)下列选项中不符合良好程序设计风格的是A)源程序要文档化B)数据说明的次序要规范化C)避免滥用goto语句D)模块设计要保证高耦合、高内聚(2)从工程管理角度,软件设计一般分为两步完成,它们是A)概要设计与详细设计B)数据设计与接口设计C)软件结构设计与数据设计D)过程设计与数据设计(3)下列选项中不属于软件生命周期开发阶段任务的是A)软件测试B)概要设计C)软件维护D)详细设计(4)在数据库系统中,用户所见的数据模式为A)概念模式B)外模式C)内模式D)物理模式(5)数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和A)编码设计B)测试阶段C)运行阶段D)物理设计(6)设有如下三个关系表RSTABCABCm13m13nn13下列操作中正确的是A)T=R∩SB)T=R∪SC)T=R×SD)T=R/S(7)下列叙述中正确的是A)一个算法的空间复杂度大,则其时间复杂度也必定大B)一个算法的空间复杂度大,则其时间复杂度必定小C)一个算法的时间复杂度大,则其空间复杂度必定小D)上述三种说法都不对(8)在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为A)63B)64C)6D)7(9)数据库技术的根本目标是要解决数据的A)存储问题B)共享问题C)安全问题D)保护问题(10)对下列二叉树进行中序遍历的结果是A)ACBDFEGB)ACBDFGEC)ABDCGEFD)FCADBEG(11)下列有关内联函数的叙述中,正确的是A)内联函数在调用时发生控制转移B)内联函数必须通过关键字inline来定义C)内联函数是通过编译器来实现的D)内联函数函数体的最后一条语句必须是return语句(12)下列情况中,不会调用拷贝构造函数的是A)用一个对象去初始化同一类的另一个新对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用时(13)下列有关继承和派生的叙述中,正确的是A)如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B)派生类的成员函数可以访问基类的所有成员C)基类对象可以赋值给派生类对象D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类(14)下列运算符不能重载为友元函数的是A)=()[]-B)+-++--C)==D)+=-=*=/=(15)关于在调用模板函数时模板实参的使用,下列表述正确的是A)对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B)对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C)对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D)对于常规参数所对应的模板实参,任何情况下都不能省略(16)下列关于输入流类成员函数getline()的描述中,错误的是A)该函数是用来读取键盘输入的字符串的B)该函数读取的字符串长度是受限制的C)该函数读取字符串时,遇到终止符便停止D)该函数读取字符串时,可以包含空格(17)下列符号中,正确的C++标识符是A)enumB)2bC)foo-9D)_32(18)下列语句中,错误的是A)constintbuffer=256;B)constdouble*point;C)intconstbuffer=256;D)double*constpoint;(19)if语句的语法格式可描述为:格式1:if(条件)语句或格式2:if(条件)语句1else语句2关于上面的语法格式,下列表述中错误的是A)条件部分可以是一个if语句,例如if(if(a==0)…)…B)语句部分可以是一个if语句,例如if(…)if(…)…C)如果在条件前加上逻辑非运算符!并交换语句1和语句2的位置,语句功能不变D)语句部分可以是一个循环语句,例如if(…)while(…)…(20)有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是A)*p+9B)*(p+8)C)*p+=9D)p+8(21)若有下面的函数调用:fun(a+b,3,max(n-1,b))则fun的实参个数是A)3B)4C)5D)6(22)以下关键字不能用来声明类的访问权限的是A)publicB)staticC)protectedD)private(23)在公有继承的情况下,允许派生类直接访问的基类成员包括A)公有成员B)公有成员和保护成员C)公有成员、保护成员和私有成员D)保护成员(24)关于运算符重载,下列表述中正确的是A)C++已有的任何运算符都可以重载B)运算符函数的返回类型不能声明为基本数据类型C)在类型转换符函数的定义中不需要声明返回类型D)可以通过运算符重载来创建C++中原来没有的运算符(25)关于关键字class和typename,下列表述中正确的是A)程序中的typename都可以替换为classB)程序中的class都可以替换为typenameC)在模板形参表中只能用typename来声明参数的类型D)在模板形参表中只能用class或typename来声明参数的类型(26)有如下程序#include#includeusingnamespacestd;intmain(){coutSETPRECISION(3)FIXEDSETFILL('*')SETW(8);cout12.345___________34.567;return0;}若程序的输出是:**12.345**34.567则程序中下划线处遗漏的操作符是A)setprecision(3)B)fixedC)setfill('*')D)setw(8)(27)有如下程序#include#includeusingnamespacestd;classMyClass{public:MyClass(){cout'A';}MyClass(charc){cout~MyClass(){cout'B';}};intmain(){MyClassp1,*p2;p2=newMyClass('X');deletep2;return0;}执行这个程序屏幕上将显示输出A)ABXB)ABXBC)AXBD)AXBB(28)有如下程序#includeusingnamespacestd;inti=1;classFun{public:staticinti;intvalue(){returni-1;}intvalue()const{returni+1;}};intFun::i=2;intmain(){inti=3;Funfun1;constFunfun2;____________return0;}若程序的输出结果是:123则程序中下划线处遗漏的语句是A)coutFun::iB)coutFun::ifun1.value()C)coutFun::i;D)cout(29)有如下程序:#includeusingnamespacestd;classObj{staticinti;public:Obj(){i++;}~Obj(){i--;}staticintgetVal(){returni;}};intObj::i=0;voidf(){Objob2;coutintmain(){Objob1;f();Obj*ob3=newObj;coutgetVal();deleteob3;coutreturn0;}程序的输出结果是A)232B)231C)222D)221(30)有如下程序#includeusingnamespacestd;classBase{protected:Base(){cout'A';}Base(charc){cout};classDerived:publicBase{public:Derived(charc){cout};intmain(){Derivedd1('B');return0;}执行这个程序屏幕上将显示输出A)BB)BAC)ABD)BB(31)有如下类定义:classMyBase{intk;public:MyBase(intn=0):k(n){}intvalue()const{returnk;}};classMyDerived:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;}intgetJ()const{returnj;}};编译时发现有一处语法错误,对这个错误最准确的描述是A)函数getK试图访问基类的私有成员变量kB)在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或privateC)类MyDerived缺少一个无参的构造函数D)类MyDerived的构造函数没有对基类数据成员k进行初始化(32)在一个派生类对象结束其生命周期时A)先调用派生类的析构函数后调用基类的析构函数B)先调用基类的析构函数后调用派生类的析构函数C)如果基类没有定义析构函数,则只调用派生类的析构函数D)如果派生类没有定义析构函数,则只调用基类的析构函数(33)有如下的运算符重载函数定义:doubleoperator+(inti,intk){returndouble(i+k);}但定义有错误,对这个错误最准确的描述是A)+只能作为成员函数重载,而这里的+是作为非成员函数重载的B)两个int型参数的和也应该是int型,而这里将+的返回类型声明为doubleC)没有将运算符重载函数声明为某个类的友元D)C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符(34)语句ofstreamf(SALARY.DAT,ios_base::app);的功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且A)若文件存在,将其置为空文件;若文件不存在,打开失败B)若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件C)若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D)若文件存在,打开失败;若文件不存在,建立一个新文件(35)有如下程序#includeusingnamespacestd;classA{public:virtualvoidfunc1(){coutA1;}voidfunc2(){coutA2;}};classB:publicA{public:voidfunc1(){coutB1;}voidfunc2(){coutB2;}};intmain(){A*p=newB;p-func1();p-func2();return0;}运行此程序,屏幕上将显示输出A)B1B2B)A1A2C)B1A2D)A1B2二、填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。(1)下列软件系统结构图的宽度为【1】。(2)【2】的任务是诊断和改正程序中的错误。(3)一个关系表的行称为【3】。(4)按“先进后出”原则组织数据的数据结构是【4】。(5)数据结构分为线性结构和非线性结构,带链的队列属于【5】。(6)若有定义语句:int*a,b;,则变量b的数据类型是【6】。(7)已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标为i-1的单元,其中1≤i<n。例如,当n=4,a中原有数据为1,2,3,4时,则移动后a中元素变为2,3,4,4。请将语句补充完整:for(inti=0;ia[i]=a[【7】];(8)已知递归函数f的定义如下:intf(intn){if(n=1)return1;//递归结束情况el