1、全国计算机等级考试二级 C+真题题库 1+2014 年 9 月及答案解析(总分:100.00,做题时间:120 分钟)一、选择题(每小题 1 分,共 40 分)(总题数:40,分数:40.00)1.有如下程序: #inClude using namespaCe std; Class B publiC: virtual void show()Coutfun();D.fun();29.以下各选项组中,均是 C+语言关键字的组是( )。(分数:1.00)A.public operator thisB.shod string staticC.it while=D.prirate cout printf
2、30.要想使 2378965421 的输出为 237887,应用的语句是( )。(分数:1.00)A.coutfun();D.fun();解析:本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。本题中想要输出 Base:fun,则必须调用基类的公用成员函数 fun,所以使用 Base:fun();来调用基类的成员函数 fun。29.以下各选项组中,均是 C+语言关键字的组是( )。(分数:1.00)A.public operator this B.shod string staticC.it while=D.pri
3、rate cout printf解析:关键字是系统已预定义的单词,在程序中有不同的用途,考生应该熟记。30.要想使 2378965421 的输出为 237887,应用的语句是( )。(分数:1.00)A.cout2378965421;B.coutfixed2378965421;C.cout23789654210001; D.coutfixed23789654210001;解析:c+语言中默认小数的输出位一共是 6 位,fixed 的意义是在小数点后保留 6 位。31.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软
4、件需求规格说明书 解析:需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择 D。32.下列关于类定义的说法中,正确的是( )。(分数:1.00)A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的,类的成员函数可以在类内定义。33.下列关于数据库设计的叙述中,正确的是( )。(分数:1.00)A.在需求分析阶段建立数据字典 B.在概念设计阶段建立数据字典C.在逻辑设计阶段建立数据
5、字典D.在物理设计阶段建立数据字典解析:数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的34.下列选项,不正确的是( )。(分数:1.00)A.for(int a=1;a=10;a+);B.int a=1;doa+:while(a=10); C.int a=1;while(a=10)a+:D.for(int a=1;a=10;a+)a+;解析:本题考查的是基本循环语句的使用,选项 A,选项 C 和选项 D 都为正确的形式,在选项 B 中的while(a=10)后缺少结束符分号“;”。35.下列关于栈叙述正确的是( )。(分数:1.00)A.栈顶元素最先能被删除 B.栈顶元
6、素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除解析:栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先人栈却最后被删除。所以选择 A。36.下列关于运算符重载的描述中,正确的是( )。(分数:1.00)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.c+中可以重载所有的运算符解析:运算符重载为成员函数时,会省一个参数,如果无参数,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须
7、有两个参数。c+有 5 个运算符不能重载,它们是:(成员访问运算符)、*(成员指针访问运算符)、:(域运算符)、sizeof(长度运算符)和?:(条件运算符)。故本题答案为 A。37.下面关于 C+语言的描述错误的是( )。(分数:1.00)A.C+语言支持数据封装B.C+语言中引入友元,没有破坏封装性 C.C+语言允许函数名和运算符重载D.C+语言支持动态联编解析:数据封装就是数据抽象;友元可访问类中的所有成员,是面向对象的一个重要特征,但是破坏了封装性;重载和动态联编都是面向对象的另一个特点多态性。38.在 c+语言程序中,对象之间的相互通信通过( )。(分数:1.00)A.继承实现B.调
8、用成员函数实现 C.封装实现D.函数重载实现解析:对象属于某个已知的类,是类的实例,对象之间通信实际上就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于类的方法的改变和补充,重载是多态性之一。39.下列叙述中正确的是( )。(分数:1.00)A.循环队列是队列的一种链式存储结构B.循环队列是队列的一种顺序存储结构 C.循环队列是非线性结构D.循环队列是一种逻辑结构解析:在实际应用中,队列的顺序存储结构一般采用循环队列的形式40.下面不属于需求分析阶段任务的是( )。(分数:1.00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成测试计划
9、解析:需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择 D。二、基本操作题(18 分)(总题数:1,分数:18.00)41.请使用 VC6 或使用【答题】菜单打开考生文件夹 progl 下的工程 progl,该工程中包含程序文件main cpp,其中有 Salary(“工资”)类和主函数 main 的定义。程序中位于每个“/ERROR *found*”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为: 应发合计:3500应扣合计:675 实发工资:34325 注意:只修改每个“/ERROR *found*”下的那一行,不要改动程序中的其他内容。 #i
10、nclude using namespace std; class Salary public: Salary(const char *id,double the_base,double the bonus,double the_tax) /ERROR *found* :the_base(base),the_bonus(bonus),the_tax(tax) staff_id=new charstrlen(id)+1; strcpy(staff_id,id); /ERROR *found* Salary()delete * staff_id; double getGmssPay()constr
11、etum base+bonus;/返回应发项合计 double getNetPay()constretum getGmssPay()-tax;/返回实发工资额 private: char * staff id;/职工号 double base;/基本工资 double bonus;/奖金 double tax;/代扣个人所得税 ; int main() Salary pay(”888888”,30000,5000,6750); cout”应发合计:”paygetGrossPay()“ “; cout”应扣合计:”paygetGrossPay()一 paygetNetPay()”实发工资:”pa
12、y:getNetPay()_正确答案:(1)base(thebase),bonus(thebonus),tax(thetax) (2)Salary()deletestaff_id; (3)cout”实发工资:”paygetNetPay()end1;)解析:三、简单应用题(24 分)(总题数:1,分数:24.00)42.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj2 下的工程 proj2,此工程包含有一个源程序文件 proj2cpp,其中定义了 Stack 类和 ArrayStack 类。 Stack 是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack 为抽象类,
13、它只定义了栈的用户接口,如下所示: 公有成员函数 功能 push 入栈:在栈顶位置添加一个元素 pop 退栈:取出并返回栈顶元素 ArrayStack 是 Stack 的派生类,它实现了 Stack 定义的接口。ArrayStack 内部使用动态分配的字符数组作为栈元素的存储空间。数据成员 maxSize 表示的是栈的最大容量,top 用于记录栈顶的位置。成员函数 push 和 pop 分别实现具体的入栈和退栈操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a,b,C C,b,a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不
14、要删除或移动“/*料 found*”。 /proj2cpp #include using namespacc std; class Stack public: virtual void push(char C)=0; virtual char pop()=0; ; class ArrayStack:public Stack char*P; int maxSizc; int top; public: ArravStack(int s) top=0; maxSize=s: /*found* P=_; ArrayStack() /*found* _; void push(char c) if(top
15、=maxSize) cerrch0”,”ch1”,”ch2sRefpoP()sRefpoP()sRefpoP()_正确答案:(1)Ilew chars (2)deleteP (3)Ptop=e (4)return Ptop)解析:(1)主要考查的是 ArrayStack 类的构造函数,在函数中要为 P 申请 S 个 char 型空间,应使用语句P=flew chars;。 (2)主要考查析构函数,使用 delete 语句释放指针,即 deleteP;。 (3)主要考查 push 函数,top 表示栈顶元素下标,添加的数据放到栈顶,因此使用语句 Ptop=c;。 (4)主要考查pop 函数,输出
16、栈顶数据,top 表示栈顶元素下标,因此使用语句 return Ptop;。四、综合应用题(18 分)(总题数:1,分数:18.00)43.请使用【答题】菜单命令或直接用 VC6 打开考生文件夹下的工程 prog3,其中声明了 ValArray 类,该类在内部维护一个动态分配的整型数组。ValArray 类的复制构造函数应实现对象的深层复制。请编写ValArray 类的复制构造函数。在 main 函数中给出了一组测试数据,此种情况下程序的输出应该是: ValArray vl=1,2,3,4,5 ValArray v2=1,2,3,4,5 要求: 补充编制的内容写在“/*333*”与“/*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 outdat 中。输出函数 write To File 已经编译为 boj 文件,并且在本程序中调用。 /ValArrayh #include using namespace std; class ValArray int *v: int size; public: ValArray(const int * P,int n):size(n) v=new intsize; for(int i=0;i_正确答案:(size=othesize; v=liew intsize: for(int i=0;i解析: