全国计算机等级考试二级C++题库8(共17套)_第1页
全国计算机等级考试二级C++题库8(共17套)_第2页
全国计算机等级考试二级C++题库8(共17套)_第3页
全国计算机等级考试二级C++题库8(共17套)_第4页
全国计算机等级考试二级C++题库8(共17套)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八套

1、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是。

A、编辑软件

B、操作系统

C、教务管理系统

D、浏览器

软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应用而开发的软

件。例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工智能软件等应用性质不同的各种软

件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种效劳的软件。如操作系统,编译程

序,汇编程序,网络软件,数据库管理系统等,所以选项B属于系统软件。

故此题答案为B。

2、数据流程图(DFD图)是。

A、软件概要设计的工具

B、软件详细设计的工具

C、结构化方法的需求分析工具

D、面向对象方法的需求分析工具

常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是使用数据流图(DFD)、数据字典(DD)、

结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。

故此题答案为C。

3、软件(程序)调试的任务是。

A、诊断和改正程序中的错误

B、尽可能多地发现程序中的错误

C、发现并改正程序中的所有错误

D、确定程序中错误的性质

程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现

软件的错误,然后借助于一定的调试工具去执行找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要在

开发阶段。

故此题答案为A。

4、数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的。

A、需求分析阶段

B、逻辑设计阶段

C、概念设计阶段

D、物理设计阶段

E-R图是E-R模型的一种非常直观的图的形式表示,它描述信息结构但不涉及信息在计算机中的表示,它是数据库概

念设计阶段的工具。

故此题答案为C

5、以下表达中正确的选项是。

A、对长度为n的有序链表进行查找,最坏情况下需要的比拟次数为n

B、对长度为n的有序链表进行对分查找,最坏情况下需要的比拟次数为(n/2)

C、对长度为n的有序链表进行对分查找,最坏情况下需要的比拟次数为Ogan)

D、对长度为n的有序链表进行对分查找,最坏情况下需要的比拟次数为Slogan)

对于长度为n的有序线性表,在最坏情况下,二分查找只需要比拟log2n次,而顺序查找需要比拟n次。二分法查找只适用

于顺序存储的有序表,如果采用链式存储结构,也只能用顺序查找,所以选项A是正确的。

故此题答案为A。

6、在学生管理的关系数据库中,存取一个学生信息的数据单位是。

A、文件

B、数据库

C、字段

D、记录

实体是概念世界中的根本单位,属性附属于实体,它本身并不构成独立单位。属性有属性域,每个实体可取属性域内的

值。一个实体的所有属性取值组成了一个值集叫元组(或称记录)。在概念世界中,可以用元组表示实体,也可用它区

别不同的实体。所以在学生管理的关系数据库中,存取一个学生信息的数据单位是元组(或记录)。

故此题答案为D。

7、算法的时间复杂度是指。

A、算法的执行时间

B、算法所处理的数据量

C、算法程序中的语句或指令条数

D、算法在执行过程中所需要的根本运算次数

所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比拟客观地反映出一个算法的效率,在度量一个

算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许

多细节无关。为此,可以用算法在执行过程中所需根本运算的执行次数来度量算法的工作量。

故此题答案为D。

8、软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于。

A、定义阶段

B、开发阶段

C、维护阶段

D、上述三个阶段

软件生命周期可分为软件定义、软件开发及软件运行维护三个阶段。软件开发阶段包括概要设计、详细设计、实现和测

试四个活动阶段。

故此题答案为B。

9、数据库管理系统中负责数据模式定义的语言是o

A、数据定义语言

B、数据管理语言

C、数据操纵语言

D、数据控制语言

数据定义语言(DDL):该语言负责数据的模式定义与数据的物理存取构建。

数据操纵语言(DML):该语言负责数据的操纵,包括查询及增、册人改等操作。

数据控制语言(DCL):该语言负责数据完整性、平安性的定义与检查以及并发控制、故障恢复等功能。

故此题答案为A。

10、有两个关系R和T如下:

那么由关系R得到关系T的操作是。

A、选择

B、投影

C、交

D、并

从关系中找出满足给定条件的元组的操作称为选择。选择是从行的角度进行的运算,即从水平方向抽取记录。由图可知

关系R通过运算得到关系T,关系T与关系R相比,属性的个数没有发生变化,记录的条数发生了变化。因此所使用的运算

应该是选择。

故此题答案为A。

11、在C++中,cin是一个。

A、类

B、对象

C、模板

D、函数

此题主要考查了I/O流。

在C++中,数据的输入与输出是通过I/O流来实现,cin和cout是预定义的流类对象。

故此题答案为B。

12、要定义整型数组x,使之包括初值为0的三个元素,以下语句中错误的选项是。

A、intx[3]={0,0,0};

B、intx[]={0};

C、staticintx[3]={0};

D、intx[]={0,0,0};此题主要考查了一维数组的定义与初始化。

一维数组的定义形式为:

数据类型数组名[数组元素个数];

数组的初始化就是在声明数组时给局部或全部元素赋初值。选项A定义了有三个元素的整型数组x,并初始化三个元素的

值为0,因此选项A正确;当声明数组时没有给出数组元素个数,但是有初始化列表,数组元素个数由列表中元素个数来

确定,因此选项D正确;选项B没有给出数组元素个数,并且在初始化列表中只给一个元素值,因此选项B定义了只有一个

元素的整型数组,应选项B错误;对于数值类型数组,如果给定的数值不够,那么没有指定数值的元素将初始化为0,因

此选项C正确。

故此题答案为B。

13、假设MyClass是一个类名,且有如下语句序列

MyClasscl,*c2;

MyClass*c3=newMyClass;

MyClass&c4=cl;

上面的语句序列所定义的类对象的个数是。

A、1

B、2

C、3

D、4

此题主要考查了对象的定义。

第1条语句定义了MyClass类的对象cl和MyClass类的对象指针变量c2。因为定义对象指针只是得到了用于存储对象地址的

指针变量,不会创立对象,因此第1条语句只定义了一个类对象cl;第2条语句定义了对象指针变量c3。并初始化c3指向

用new运算符动态创立的对象,因此第2条语句用new运算符动态定义了一个对象;第3条语句声明了对象引用c4,并将其

初始化为对象cl的一个别名。因为创立对象引用只是为已有对象创立别名,不会创立对象,因此第3条语句没有创立类对

象。因此这3条语句所定义的类对象的个数是2。

故此题答案为B。

14、在以下字符中,不允许作为C++标识符的是。

A、b

B、B

C、_

D、2

此题主要考查了C++中的标识符命名规那么。

标识符的组成要符合一定的规那么:

(1)标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串;

(2)标识符不能与任意一个关键字同名;

(3)标识符中的字母区分大小写;

(4)标识符不宜过长。

在选项D中,标识符的第一个字符是数字,因此不是合法的标识符,不允许作为C++标识符。

故此题答案为D。

15、以下程序段中包含4个函数,其中具有隐含this指针的是。

intfunl();

classTest{

public:

intfun2();

friendintfun3();

staticintfun4();

);

A、funl

B、fun2

C、fun3

D、fun4

此题主要考查了this指针。

this指针是一个隐含于每一个非静态成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象,也就是要操

作该成员函数的对象。因此类Test的非静态成员函数fun2中具有隐含this指针,应选项B正确。函数funl和函数fun3均不

是成员函数,因此不具有隐含this指针,应选项A和选项C不正确;静态成员不属于类的任何一个对象,而是属于整个类,

因此静态成员没有this指针,故静态成员函数fun4中没有this指针,应选项D错误。

故此题答案为B。

16、以下代码段声明了3个类

classPerson{};

classStudent:publicPerson(};

classUndergraduate:Student{};

以下关于这些类之间关系的描述中,错误的选项是。

A、类Person是类Undergraduate的基类

B、类Undergraduate从类Student公有继承

C、类Student是类Person的派生类

D、类Undergraduate是类Person的派生类

此题主要考查了类的继承与派生。

在C++中,定义派生类的一般语法形式为:

class派生类名:继承方式基类名1,继承方式基类名2,…,继承方式基类名n

(

派生类成员声明;

};

类的继承方式有三种:公有(public)继承、保护(protected)继承和私有〔private)继承。如果不显式地给出继承

方式,缺省的类继承方式是私有〔private)继承。在声明派生类Undergraduate时缺省继承方式,因此类Undergraduate

从类Student私有继承,应选项B错误。

故此题答案为B。

17、以下表达中,错误的选项是

A、false是一个逻辑型常量

B、〃b〃是一个字符型常量

C、365是一个int常量

D、3.1415926是一个double常量

此题主要考查了常量。

在C++中,逻辑型常量有两个:false〔假)和true1真),因此选项A正确;字符型常量是单引号括起来的一个字符,字

符串常量是双引号括起来的字符序列,因此〃b〃是字符串,不是字符,应选项B错误;整型常量默认为int型,因此选项C

正确;实型常量默认为double型,因此选项D正确。

故此题答案为B

18、有如下程序

ttinclude<iostream>

usingnamespacestd;

classTest(

public:

Test(){}

Test(constTest&t){cout«l;}

);

Testfun(Test&u){Testt=u;returnt;}

intmain(){Testx,y;x=fun(y);return0;}

运行这个程序的输出结果是。

A、无输出

B、1

C、11

D、111

此题主要考查了拷贝构造函数。

拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。作用是使用一个的

对象初始化一个正在创立的同类对象。拷贝构造函数在以下三种情况下都会被调用:

1)当用类的一个对象初始化该类的另一个对象时;

2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时;

3)如果函数的返回值是类的对象,函数执行完成返回调用者时。

函数fun的形参为类Test的对象的引用,main。函数中,第二条语句x=fun(y);调用函数fun()。使引用u为实参y的别名,

然后执行函数fun()的第一条语句Testt=u;,即用Test类的对象u去初始化该类的另一个对象t,系统将自动调用拷贝构

造函数,输出1,然后执行函数fun()的第二条语句returnt;,函数fun()的返回值为Test类的对象t,函数执行完成返回

调用者时,系统将第二次自动调用拷贝构造函数,输出1,程序执行结束。故运行这个程序的输出结果是11。

故此题答案为C。

19、有如下程序

ttinclude<iostream>

usingnamespacestd;

classA{

public:

A(inti=0):rl(i){}

voidprint(){cout«5E,«rl«,;}

voidprint()const{cout«,C*«rl*rl<<,;}

voidprint(intx){cout«,P5«rl*rl*rl«5;}

private:

intrl;

};

intmain(){

Aal;

constAa2(4);

al.print(2);〃不传值

a2.print();

return0;

)

运行时的输出结果是O

A、P8-E4

B、P8-C16-

C、P0-E4-

D、P0-C16-

此题主要考查了函数的重载、常对象和常成员函数。

使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数,通过常对象只能调用它的

常成员函数,而不能调用其他成员函数。两个以上的函数,具有相同的函数名,但是形参的个数或类型不同,编译器根

据实参和形参的类型及个数的最正确匹配,自动确定调用哪一个函数,这就是函数的重载。const关键字可以用于对重载

函数的区分。

在main。函数中,第一条语句定义类A的对象al,系统自动调用类A的构造函数,以默认形参值0初始化对象al的数据成员

rl;第二条语句定义常对象a2,系统自动调用类A的构造函数,以实参值4初始化对象a2的数据成员rl;第三条语句通过

对象al调用带一个整型形参的没用const修饰的print()函数,表达式rl*rl*rl=0*0*0=0,因此输出P0-,第四条语句常对

象a2调用的是用const修饰的常成员函数print(),表达式rl*rl的值为:4*4=16,因此输出C16-。故程序运行时的输出结

果是P0-C16-

故此题答案为D。

20、有如下两个类定义

classXX{

private:

doublexl;

protected:

doublex2;

public:

doublex3;

);

classYY:protectedXX{

private:

doubleyl;

protected:

doubley2;

public:

doubley3;

);

在类YY中保护成员变量的个数是o

A、1

B、2

C、3

D、4

此题主要考查了类的继承与派生。

类的继承方式有三种:公有(public)继承、保护(protected)继承和私有(private)继承。当派生类从基类保护继

承时,基类的公有成员和保护成员在派生类中都为保护成员。此题派生类YY从基类XX保护继承,因此基类XX的公有成员

x3和保护成员x2都成为派生类YY的保护成员,再加上派生类YY自身的保护成员y2,因此类YY中有3个保护成员。

故此题答案为C。

21、翻开文件时可单独或组合使用以下文件翻开模式

©ios_base::app(2)ios_base::binary

(3)ios_base::in@ios_base::out

假设要以二进制读方式翻开一个文件,需使用的文件翻开模式为O

A、①③

B、①④

C、②③

D、②④

此题主要考查了I/O流。

翻开一个与输出流关联的文件时,通常要指定文件模式。ios_base::app模式的功能:以写方式翻开文件,假设文件不存

在那么创立文件,假设文件已存在那么向文件尾添加数据;ios_base::binary模式:以二进制模式翻开文件(缺省为文

本模式);ios_base::in模式:以读方式翻开文件;iosbase::out模式:以写方式翻开文件,假设文件不存在那么创立,

假设文件已存在那么清空原内容(ofstream默认的翻开方式)。因此假设要以二进制读方式翻开一个文件,需使用的文

件翻开模式为:ios_base::binary|iosbase::in-

故此题答案为C。

22、以下关于函数的描述中,错误的选项是。

A、函数可以没有返回值

B、函数可以没有参数

C、函数可以是一个类的成员

D、函数不能被定义为模板

此题主要考查了函数。

函数定义的语法形式:

类型标识符函数名(形式参数列表)

{

语句序列

无返回值的函数其类型标识符为void。应选项A正确;函数可以没有参数,当函数定义时没有形参,那么函数调用时,〈

实参表〉亦为空,应选项B正确;函数可以是类的成员,应选项C正确;模板是C++支持参数化多态性的工具,函数模板实

现了类型参数化,将函数处理的数据类型作为参数,提高了代码的可重用性,应选项D错误。

故此题答案为D。

23、以下关于运算符重载的描述中,错误的选项是。

A、可以通过运算符重载在C++中创立新的运算符

B、赋值运算符只能重载为成员函数

C、运算符函数重载为类的成员函数时,第一操作数是该类对象

D、重载类型转换运算符时不需要声明返回类型

此题主要考查了运算符重载。

”运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造出新的运算符,因此选项A错误;在C++中,运算

符的重载方式有两种:(1)重载为成员函数;(2)重载为友元函数。以及所有的类型转换运算

符只能重载为成员函数,因此选项B正确;运算符重载为成员函数时,第一操作数就是对象本身,并不显式地出现在参数

表中,因此选项C正确;重载类型转换运算符的格式为:operator类型名(),其中"类型名”就代表了返回类型,因此重

载类型转换运算符时不需要声明返回类型,因此选项D正确。

故此题答案为A。

24、以下关于继承方式的描述中,错误的选项是。

A、如果不显式地指定继承方式,缺省的继承方式是私有(private)

B、采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员

C、采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员

D、采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员

此题主要考查了类的继承与派生。

类的继承方式有三种:公有(public)继承、保护(protected)继承和私有(private)继承。如果不显式地给出继承

方式,缺省的类继承方式是私有(private)继承。因此选项A正确;当派生类从基类公有继承时,基类的公有成员和保

护成员的访问属性在派生类中不变,仍作为派生类的公有成员和保护成员,因此选项B正确;当派生类从基类保护继承时,

基类的公有成员和保护成员在派生类中都为保护成员,因此选项C正确;当派生类从基类私有继承时,基类的公有成员和

保护成员在派生类中都改变为私有成员;无论哪种继承方式,派生类中的成员都不能访问基类中的私有成员,因此选项D

错误。

故此题答案为D。

25、有如下程序:

ttinclude<iostream>

usingnamespacestd;

classBase(

public:

Base(intx=0):valB(x){cout«valB;}

~Base(){cout«valB;}

private:

intvalB;

);

classDerived:publicBase{

public:

Derived(intx=0,inty=0):Base(x),valD(y){cout«valD;}

^Derived(){cout«valD;}

private:

intvalD;

};

intmain(){

Derivedobjl2(2,3);

return0;

)

运行时的输出结果是。

A、2332

B、2323

C、3232

D、3223

此题主要考查了派生类的构造函数与析构函数。

构造函数在对象被创立的时候由系统自动调用,建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函

数,调用顺序按照各个基类被继承时声明的顺序(自左向右);(2)执行成员对象的构造函数,调用顺序按照各个成员

对象在类中声明的顺序〔自上而下);[3)执行派生类的构造函数。

析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的时刻被系统自动调用。派生类的析构函数

在执行过程中也要对基类和成员对象进行操作,但它的执行过程与构造函数严格相反,即:(1)对派生类新增普通成员

进行清理。[2)调用成员对象析构函数,对派生类新增的成员对象进行清理。(3)调用基类析构函数,对基类进行清

理。

main。函数中,第一条语句Derivedobjl2(2,3);创立派生类对象objl2时,先以第一个实参2初始化基类Base成员

valB,执行基类Base的构造函数,输出valB的值2;然后以第二个实参值3初始化派生类Derived成员valD,执行派生类

Derived的构造函数,输出valD的值3;在对象objl2的生存期即将结束时,先调用派生类Derived的析构函数,输出valD

的值3,然后调用基类析构函数,输出valB的值2。因此本程序运行时的输出结果是2332。

故此题答案为A。

26、假设MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列

MyTemp<double>p2;

MyTemp<long>p3[2];

编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是.

A、1

B、2

C、3

D、0

此题主要考核类模板。

类模板声明的语法形式为:

template〈模板参数表》

class类名

{类成员声明}

使用类模板来建立对象时,应按如下形式声明:

类名〈模板实参表》对象名1,…,对象名n;

在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的

实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例,因此类模板的实例个数由类型参数的种类决

定。此题使用类模板MyTemp定义对象时指定了两种类型参数:double和long,因此所生成的实例个数是2。

故此题答案为B。

27、假设x和y是程序中的两个整型变量,那么以下if语句中正确的选项是o

A、if(x==0)y=l;elsey=2;

B、if(x==0)theny=lelsey=2;

C、if(x==0)y=lelsey=2;

D、ifx==0y=l;elsey=2;

此题主要考查了if语句。

if语句的语法形式为:

if(表达式)语句1

else语句2

在C++中,if语句中没有then,语句最后必须有一个分号,因此选项A正确,选项B和选项C错误;在选项D中,表达式x=0

应该用圆括号括起来,因此选项D错误。

故此题答案为A。

28、要定义一个引用变量p,使用引用类MyClass的一个对象,正确的定义语句是。

A、MyClassp=MyClass;

B、MyClassp=newMyClass;

C、MyClass&p=newMyClass;

D、MyClassa,&p=a;

此题主要考查了引用的声明。

引用的声明形式:类型标识符&引用名二目标变量名;

说明:

〔1)&在此不是求地址运算,而是起标识作用。

[2)类型标识符是指目标变量的类型。

[3)声明引用时,必须同时对其进行初始化。

[5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,

因此引用本身不占存储单元,系统也不给引用分配存储单元。

选项A和选项B在变量p的左边没有标识&,不符合引用声明形式,因此选项A和选项B错误;选项C中,赋值号右边不是已存

在的变量名,不符合引用声明的语法形式,因此选项C错误;选项D先声名对象a,然后声明引用为已声明变量名a的别名,

符合引用声明形式,因此选项D正确。

故此题答案为D。

29、将运算符〃+〃重载为非成员函数,以下原型声明中,错误的选项是。

A、MyClockoperator+(MyClock,long);

B、MyClockoperator+(MyClock,MyClock);

C、MyClockoperator+(long,long);

D、MyClockoperator+(long,MyClock);

此题主要考查了运算符的重载。

运算符的重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能类

似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。选项A、选项B和选项D的两个参数中

至少有一个参数是自定义类型,因此选项A、选项B和选项D正确。选项C中两个参数都是根本数据类型,没有自定义类型,

因此选项C错误。

故此题答案是C。

30、关于函数中的〈返回类型》,以下表述中错误的选项是。

A、〈返回类型》中有可能包含关键字int

B、〈返回类型〉中有可能包含自定义标识符

C、〈返回类型》中有可能包含字符*

D、〈返回类型〉中有可能包含口

此题主要考查了函数的返回类型。

函数的定义形式为:

返回类型函数名(形参列表){函数体}

返回类型又称函数类型,表示一个函数所计算(或运行)的结果值的类型。因为函数的结果值可以为整型,因此返回类

型可能包含关键字int,选项A正确;函数的返回类型可以为类,因此返回类型可能包含自定义标识符,选项B正确;函数

的返回类型可以为指针,因此返回类型可能包含字符*,选项C正确;但返回类型不能为数组,因此返回类型中不可能包

含口,因此选项D错误。

故此题答案为D。

31、以下控制格式输入输出的操作符中,能够设置浮点数精度的是。

A、setprecision

B、setw

C、setfill

D、showpoint

此题主要考查了输出流的格式控制。

setprecision(intn)用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。因此选项A正确。

setw(intn)用于预设输入输出宽度。

setfill(charc)用于预设填充字符。

showpoint用于给浮点数显示小数点和尾部的0。

因此选项B、选项C和选项D不正确。

故此题答案为A。

32、将前缀运算符〃--〃重载为非成员函数,以下原型中,能正确用于类中说明的是。

A、Decr&operator--(int);

B、Deeroperator一(Decr&,int);

C、friendDecr&operator--(Decr&);

D>friendDeeroperator一(Decr&,int);

此题主要考查了运算符的重载。

运算符一既可以是前缀运算符(前减1),又可以是后缀运算符[后减1)。为了区分这两种情况,重载这两个运算符时

必须在格式上有所区别:重载后缀一时必须多一个虚拟参数:int。如果将前缀一和后缀一作为非成员函数重载,那个唯

一的操作数必须作为第一参数提供。又因为要修改第一操作数,对应的参数必须声明为引用。

前缀一作为非成员函数重载的一般形式为:

friendDecr&operator一(Decr&);

后缀一作为非成员函数重载的一般形式为:

friendDeeroperator一(Decr&,int);

当运算符重载为类的成员函数时,函数的参数个数比原来的参数个数少一个。

前缀一作为成员函数重载的一般形式为:

Decr&operator-();

后缀一作为成员函数重载的一般形式为:

Deeroperator一(int);

因此选项C正确,选项D是后缀一作为非成员函数重载的形式。

故此题答案为C。

33、下面是类Shape的定义:

classShape{

public:

virtualvoidDraw()=0;

);

以下关于Shape类的描述中,正确的选项是。

A、类Shape是虚基类

B、类Shape是抽象类

C、类Shape中的Draw函数声明有误

D、语句"Shapes能够建立Shape的一个对象s

此题主要考查了纯虚函数和抽象类。

声明纯虚函数的语法形式为:

virtual函数类型函数名(参数表)=0;

所以函数Draw。是纯虚函数。带有纯虚函数的类是抽象类,所以类Shape是抽象类,因此选项B正确;抽象类不能实例化,

即不能定义一个抽象类的对象,因此选项D错误。

故此题答案是B。

34、以下关于类模板的描述中,错误的选项是。

A、类模板的成员函数都是模板函数

B、可以为类模板参数设置默认值

C、类模板描述了一组类

D、类模板中只允许有一个类型参数

此题主要考查了类模板。

使用类模板可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意

类型。因此选项C正确;类模板声明的语法形式为:

template〈模板参数表>

class类名

{类成员声明}

其中,模板参数表”由用逗号分隔的假设干类型标识符或常量表达式构成,因此选项D错误;可以为类模板中的类型参数和

非类型参数提供默认值,如果某个类模板参数有默认值,该列表中的所有后续参数也都必须指定默认值。因此选项B正确。

类模板的成员函数都是模板函数,因此选项A正确。

故此题答案为D。

35、有以下程序:

#include〈iostream〉

usingnamespacestd;

classB{

public:

B(intxx):x(xx){++count;x+=10;}

virtualvoidshow()const

{cout«count«5«x«endl;}

protected:

staticintcount;

private:

intx;

);

classD:publicB(

public:

D(intxx,intyy):B(xx),y(yy){++count;y+=100;}

virtualvoidshow()const

{cout«count«,J«y«endl;}

private:

inty;

);

intB::count=0;

intmain(){

B*ptr=newD(10,20);

ptr->show();

deleteptr;

return0;

)

运行时的输出结果是O

A、l_120

B、2_120

C、l_20

D、2_20

此题主要考查了派生类的构造函数、静态成员函数以及虚函数。

建立派生类对象时,构造函数的执行顺序如下:[1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序

(自左向右);(2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序〔自上而下);(3)执

行派生类的构造函数。

用static关键字声明的数据成员为静态数据成员,静态成员在每个类只有一个拷贝,由该类的所有对象共同维护和使用。

在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个基类指针〔或引用)可以用于指向

它的派生类对象,而且通过这样的指针〔或引用)调用虚函数时,被调用的是该指针〔或引用)实际所指向的对象类的

那个重定义版本。

此题中,函数show在基类B和派生类D中都声明为虚函数。在基类B中把保护成员定义为静态成员count,派生类D以公有继

承方式从基类B继承了保护成员count。它被基类B和派生类D的所有对象所共享,但它不属于类的任何一个对象。在main。

函数中,第一条语句通过new运算符创立派生类D的对象,并把对象的首地址赋给基类指针ptr,即基类指针ptr指向派生

类对象。在创立派生类对象时,先执行基类B的构造函数,count的值为1,然后执行派生类D的构造函数,count的值为2,

y的值为120;main。函数的第二条语句通过基类指针ptr调用虚函数show。,被调用的是该指针实际所指向的派生类对象

类的重定义版本,即输出2」20。

故此题答案为B。

36、设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),

那么该循环队列中共有个元素。

标准答案为:15或十五或15

在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排

头指针front指向的后一个位置直至队尾指针rear指向的位置之间所有的元素均为队列中的元素。此题中队列的容量为

50,头指针为45,那么从头指针到50之间有46、47、48、49、50,共5个元素,尾指针为10,那么从1到10之间有10个元

素,所以共有15个元素。

37、有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课

号,课程名,学时),其中两个关系模式的键分别是学号和课号,那么关系模式选课可定义为:选课(学号,,

成绩)。

标准答案为:课号

码也称为关键字,是表中假设干属性的属性组,其值惟一标识表中的一个元组。在关系模式选课中能惟一标识一个

元组的是学号,课号。

38、一个队列的初始状态为空。现将元素代田工力忑1,5,4,3,2,1依次入队,然后再依次退队,那么元素退队的顺序为

标准答案为:A,B,C,D,E,F,5,4,3,2,1或A,B,C,D,E,F,5,4,3,2,1或A、B、C、D、E、F、5、4、

3、2、1或ABCDEF54321或A,B,C,D,E,F,5,4,3,2,1或A,B,C,D,E,F,5,4,3,2,1或A,B,C,D,E,F,5,4,

3,2,1或A,B,C,D,E,F,5,4,3,2,1

队列是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾,允许删除的一端称为队

头。在队列这种数据结构中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。因此,队

列又称为“先进先出"或"后进后出”的线性表。

39、设二叉树如下:

对该二叉树进行后序遍历的结果为。

标准答案为:EDBGHFCA或E、D、B、G、H、F、C、A或E,D,B,G,H,F,C,A或E,D,B,G,H,F,C,A

后序遍历是指在访问根结点、遍历左子树与遍历右子树这二者中,首先遍历左子树,然后遍历右子树,最后访问根

结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。

40、软件是、数据和文档的集合。

标准答案为:程序

计算机软件是计算机系统中与硬件相互依存的另一局部,是包括程序、数据及相关文档的完整集合。

41、在执行语句序列

inti=0;doi++;while(i*i<10);

时,do后面的循环体语句i++被执行的次数为。

标准答案为:4或4或四

此题主要考查了do-while循环语句。

第一次执行循环体后i的值为1,i*i〈10成立,继续执行循环体,第二次执行循环体后i的值为2,i*i<10成立,继续

执行循环体,第三次执行循环体后i的值为3,i*i〈10成立,继续执行循环体,第四次执行循环体后i的值为4,i*i〈10不

成立,结束循环。故循环语句被执行次数为4。

42、有如下的函数定义:

intXfun(intx){

inty=x;

{intx=10;y+=x;}

returnx+y;

通过表达式Xfun⑸调用该函数,那么得到的返回值为o

标准答案为:20或20

此题主要考查了标识符的作用域与可见性。

作用域是一个标识符在程序正文中有效的区域。程序运行到某一点,能够引用到的标识符,就是该处可见的标识符,

如果在两个或多个具有包含关系的作用域中声明了同名标识符,那么外层标识符在内层不可见。函数调用表达式Xfun⑸

把实参5传递给函数Xfun的形式参数x,形参x的作用域为整个函数体。Xfun函数体的第一条语句定义变量y并初始化y的值

为5,第二个复合语句中的第一条语句定义同名变量x,并初始化x的值为10,在复合语句中外层变量x不可见,因此执行

复合语句的第二条语句y+二x;后y的值为15,内层变量x的作用域结束。然后执行语句returnx+y;得到函数的返回值

5+15=20。

43、下面的函数定义是某函数模板能够生成的函数实例

intsquare(intn){returnn*n;}

doublesquare(doublen){returnn*n;}

由此可知,该函数模板的定义是。

标准答案为:template<typenameT>Tsquare(Tn){returnn*n;}或template<classT>Tsquare(T

n){returnn*n;}

此题主要考查了函数模板。

函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,

数据类型本身成了它的参数,因而是一种参数化类型的函数。声明一个函数模板的格式是:

template〈模板形参表声明》

函数声明

其中的模板形参表声明是由一个或多个模板形参组成〔如果是多个,需要用逗号隔开)。每个模板形参具有下面几种形

式:

[1)typename参数名[2)class参数名(3)类型修饰参数名

这里的参数名可以是任意的标识符。在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class

可以互换。

因此该题函数模板定义是templateVtypenameT>Tsquare(Tn){returnn*n;}或template〈classT>Tsquare(T

n){returnn*n;}。

44、请将下面的类Date的定义补充完整,使得由语句

DateFirstDay;

定义的对象FirstDay的值为2010年1月1日。

classDate(

public:

Date():year(y),month(m),day(d){}

private:

intyear,month,day;〃依次表示年、月、日

};

标准答案为:inty=2010,intm=l,intd=l

此题主要考查了构造函数。

构造函数的作用是在对象被创立时利用特定的值构造对象,将对象初始化为一种特定的状态,无参数的构造函数称

为默认形式的构造函数,如果类中定义构造函数,编译系统将不会再为其生成默认构造函数。构造函数在对象被创立的

时候由系统自动调用。类Date中定义了一个构造函数,由类Date的构造函数的初始化列表可知构造函数的形参应是三个

整型变量y,m和d,编译系统将不会为类Date建立无参数的默认构造函数。建立类Date的对象FirstDay时没有给出初始值,

假设要正确调用有形参的构造函数,使对象FirstDay的值为2010年1月1日,那么构造函数应是带默认形参值,且默认形

参值为2010、1和1。故该题应填inty=2010,intm=l,intd=lo

45、在有理数类Rational中重载插入运算符以便按a/q形式输出。请将*运算符函数的定义补充完整。

classRational{

public:

Rational(intaa,intqq):a(aa),q(qq){}

friendoperator«(ostream&out,Rational&x)

return(out<<x.a«*/'«x.q);

)

private:

in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论