1、全国计算机等级考试二级 C+真题题库 1+2015 年 9 月及答案解析(总分:100.00,做题时间:120 分钟)一、选择题(每小题 1 分,共 40 分)(总题数:40,分数:40.00)1.有如下程序: #include using namespace std; class Base protected: Base()cout ; intmain() Instrument S; Instrument*P=0: /; return 0; 下列叙述中正确的是( )。(分数:1.00)A.语句“Insturment*P=0;”编译时出错B.语句“Instnunent s;”编译时出错C.类
2、Pian0 中的 Display 函数不是虚函数D.类 Instrument 是一个虚基类5.如下函数模板: templateT square(T x)return x*x; 其中 T 是( )。(分数:1.00)A.函数形参B.函数实参C.模板形参D.模板实参6.为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。(分数:1.00)A.内联函数B.重载函数C.递归函数D.函数模板7.有如下程序: #inClude using namespaCe std; Class Point publiC: statiC int number; publiC: Point( )tnumber+
3、; Point( )number-; ; , int P0int:number=0; int main( ) Point *ptr: Point A,B; Point*ptr_point=new Point3;ptr=ptr_point; Point C; CoutB.+ - + -C. = str; 当从键盘输入“I love this game”时,str 中的字符串是( )。(分数:1.00)A.”I love this game”B.”I love thi”C.”I love”D.”I”21.继承机制的作用是( )。(分数:1.00)A.信息隐藏B.数据封装C.定义新类D.数据抽象22
4、.模板对类型的参数化提供了很好的支持,因此( )。(分数:1.00)A.类模板的主要作用是生成抽象类B.类模板实例化时,编译器将根据给出的模板实参生成一个类C.在类模板中的数据成员都具有同样类型D.类模板中的成员函数都没有返回值23.if 语句的语法格式可描述为: 格式 l:if() 或 格式 2:if() else 关于上面的语法格式,下列表述中错误的是( )。(分数:1.00)A.部分可以是一个 if 语句,例如 if(if(a=0)B.部分可以是一个 if 语句,例如 if()if()C.如果在前加上逻辑非运算符!并交换和的位置,语句功能不变D.部分可以是一个循环语句,例如 if()wh
5、ile()24.下面的程序中,错误的语句是( )。 #inClude void main() int *p=new int1; P=9; cout1;-i) Cout ; intmain() Instrument S; Instrument*P=0: /; return 0; 下列叙述中正确的是( )。(分数:1.00)A.语句“Insturment*P=0;”编译时出错B.语句“Instnunent s;”编译时出错 C.类 Pian0 中的 Display 函数不是虚函数D.类 Instrument 是一个虚基类解析:本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被“初始化”为 0 的
6、函数,包含纯虚函数的类为抽象类,抽象类不能被实例化,所以语句“Instrmnent s;”在编译时出错。5.如下函数模板: templateT square(T x)return x*x; 其中 T 是( )。(分数:1.00)A.函数形参B.函数实参C.模板形参 D.模板实参解析:本题考查模板函数的基本概念,根据模板函数的定义,T 是模板形参,所以答案为 C。6.为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。(分数:1.00)A.内联函数 B.重载函数C.递归函数D.函数模板解析:一般函数进行调用时,要将程序执行权转到被调用函数中然后再返回到调用它的函数中;而内联函数在调用
7、时,是将调用表达式用内联函数体来替换,一般只将将规模很小而使用频繁的函数声明为内联函数,可以避免函数调用时间开销,从而提高运行速度。7.有如下程序: #inClude using namespaCe std; Class Point publiC: statiC int number; publiC: Point( )tnumber+; Point( )number-; ; , int P0int:number=0; int main( ) Point *ptr: Point A,B; Point*ptr_point=new Point3;ptr=ptr_point; Point C; Cou
8、t B.+ - + -C. = ”不能重载为类的友元函数。所以本题答案为 A。15.下面关于运算符重载的描述错误的是( )。(分数:1.00)A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B.不是所有的运算符都可以进行重载C.运算符函数的调用必须使用关键字 operat。 D.在 C+十语言中不可通过运算符重载创造出新的运算符解析:例如“:”运算符就不能被重载;通过重载可以创造新的运算方式,但是不能臆造新的运算符;定义的时候必须使用关键字 0perator,而调用时可直接使用运算符。16.当使用 fstream 流类定义一个流对象并打开一个磁盘文件时,文件
9、的隐含打开方式为( )。(分数:1.00)A.ios:inB.ios:0utC.ios:in I ios:0utD.以上都不对 解析:使用 fstream 类建立文件流必须定义打开方式,否则编译器无法判断该文件流是读还是写。17.由于常对象不能被更新,因此( )。(分数:1.00)A.通过常对象只能调用它的常成员函数 B.通过常对象只能调用静态成员函数C.常对象的成员都是常成员D.通过常对象可以调用任何不改变对象值的成员函数解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非 const 函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以
10、本题选 A。18.支持子程序调用的数据结构是( )。(分数:1.00)A.栈 B.树C.队列D.二叉树解析:栈支持子程序调用栈是一种只能在一端进行插入或删除的线性表,在主程序凋用子函数时要首先保存主程序当前的状态,然后转去执行子程序最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为 A。19.有如下类定义: class B public:void funl() private:void fun2() protected:void fun3() ; class D:public B j protected:void fun4() ; 若 o
11、bj 是类 D 的对象,则下列语句中不违反访问控制权限的是( )。(分数:1.00)A.objfun1(); B.objfun2();C.objtim3();D.ohjfun4();解析:本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。所以在本题中,在类外引用成员函数时,派生对象只能引用基类的公用成员函数 fun1,故本题答案为 A。20.有如下语句序列: Char str10;Cinstr; 当从键盘输入“I love this game”时,str 中的字符串是( )。(分数:1.00)A.”I love t
12、his game”B.”I love thi”C.”I love”D.”I” 解析:cin 是 c+预定义的标准输入流对象,cin 用来接收字符串时,遇“空格”、“TAB”、“回车”时都会结束。所以本题答案为 D。21.继承机制的作用是( )。(分数:1.00)A.信息隐藏B.数据封装C.定义新类 D.数据抽象解析:数据封装就是数据抽象,即信息隐藏;而继承是实现程序复用的基础。22.模板对类型的参数化提供了很好的支持,因此( )。(分数:1.00)A.类模板的主要作用是生成抽象类B.类模板实例化时,编译器将根据给出的模板实参生成一个类 C.在类模板中的数据成员都具有同样类型D.类模板中的成员函
13、数都没有返回值解析:本题考查类模板的基本概念。类模板的定义和声明都以关键字 template 开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号“”括起来,这个表被称为类模板的模板参数表。类模板是类的抽象,类是类模板的实例。类模板使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。所以 B 选项正确。23.if 语句的语法格式可描述为: 格式 l:if() 或 格式 2:if() else 关于上面的语法格式,下列表述中错误的是( )。(分数:1.00)A.部分可以是一个 if 语句,例如 if(if(a=0) B.部分可以是一个 if 语句,例如 if()if()C.如果在
14、前加上逻辑非运算符!并交换和的位置,语句功能不变D.部分可以是一个循环语句,例如 if()while()解析:本题考查 if 语句,if 语句的条件部分不能嵌套 if 语句,所以 A 选项错误;B 选项就是 if 语句嵌套;C 选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样;D 选项也正确。24.下面的程序中,错误的语句是( )。 #inClude void main() int *p=new int1; P=9; cout1;-i) Cout*:(分数:1.00)A.48B.49 C.50D.51解析:本题考查 for 循环语句,-i 表示用之前先减 1,那么这个 for 循环
15、语句只有 50 到 2 时才会输出“*”,所以总共输出 49 次。31.有三个关系 R、S 和 T 如下: (分数:1.00)A.自然连接 B.交C.投影D.并解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T 中元组可以判断 R 和 S 做的是自然连接操作。32.软件测试的目的是( )。(分数:1.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误 解析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误
16、。33.软件设计中划分模块的一个准则是( )。(分数:1.00)A.低内聚低耦合B.高内聚低耦合 C.低内聚高耦合D.高内聚高耦合解析:一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。34.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:1.00)A.循环队列B.栈 C.队列D.二叉树解析:栈是按先进后出的原则组织数据的。队列足先进先出的原则组织数据。35.有如下程序: #inClude using namespaCe std; Class Base publiC: Base(int x=0)CoutA.0
17、B.1C.01D.001 解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题中定义了一个对象 d,先执行基类的构造函数输出 0,因为派生类中的私有数据成员为 Base,所以还会执行一次基类的构造函数输出 0,最后执行派生类的构造函数输出 1,所以本题答案为 D。36.已知 Value 是一个类,value 是 Value 的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是( )。(分数:1.00)A.Value operator+(Value v,
18、int i); B.Value operator+(Value v=value,int i);C.Value operator+(Value v,inl:i=0);D.Value operator+(Value v=vallle,int i=0);解析:本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所以本题答案为 A。37.有如下程序段: int i=0,J=1; ntr=i;/ r=j;/ int * P=&i;/ * P=&r;/ 其中会产生编译错误的语句是( )。(分数:1.00)A. B.C.D.解析:本题考查指针和引用。为引用,使用正确;中r 表示一个地址,而*P 已经是
19、-一个值了,不能将一个指针赋值给一个值,所以编译错误。38.有如下程序: nclude using namespace std; int main() int*P; *P=9: cout *p; return 0; 编译运行程序将出现的情况是( )。(分数:1.00)A.编译时出现语法错误,不能生成可执行文件B.运行时一定输出:llle value at P:9C.运行时一定输出:llle value at P:*9D.运行时有可能出错 解析:先定义指针变量,然后给指针变量赋初值有三种情况:用取地址运算符“”将变量地址赋给指针变量,如 P=&a;将一个指针变量中的地址赋给另一个指针变量,如 P
20、=p1;给指针变量赋空值 0,如 q=0,表示该指针变量不指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选 D。39.在软件设计中不使用的工具是( )。(分数:1.00)A.系统结构图B.PAD 图C.数据流图(DFD 图) D.程序流程图解析:系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。PAD 图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完
21、成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以选择 C。40.C+中的模板包括( )。(分数:1.00)A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板 D.变量模板和对象模板解析:本题考查函数模板和类模板所以答案为 C。二、基本操作题(18 分)(总题数:1,分数:18.00)41.请使用 VC6 或使用【答题】菜单打开考生文件夹 projl 下的工程 projl,此工程中包含一个源程序文件 maincpp,其中有类 Book(“书”)和主函数 main 的定义。程序中位于每个“/ERROR*found*”下的语句行有错误,请加以改正。改正
22、后程序的输出结果应该是: 书名:C+语句程序设计总页数:299 已把“c+语言程序设计”翻到第 50 页 已把“c+语言程序设计”翻到第 51页 已把“c+语言程序设计”翻到第 52 页 已把“c+语言程序设计”翻到第 51 页 已把书合上。 当前页:0 注意:只修改每个“/ERROR *found*”下的那一行,不要改动程序中的其他内容。 #include using namespace std; class Book char*title; int numpages;/页数 int cur_page;/当前打开页面的页码,0 表示书未打开 public: /ERROR*found* Book(const char*theTitle,int pages)num_pages(pages) title=new charstrlen(theTitle)+1; strepy(title,theTitle); coutendl”书名:”