类和面向对象数据结构练习题与答案_第1页
类和面向对象数据结构练习题与答案_第2页
类和面向对象数据结构练习题与答案_第3页
类和面向对象数据结构练习题与答案_第4页
类和面向对象数据结构练习题与答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

类和面向对象&数据结构练习题与答案

类和面向对象部分

1、下列有关类的说法不正确的是()O

A.对象是类的一个实例

B.任何一个对象只能属于一个具体的类

C.一个类只能有一个对象(正确答案)

D.类与对象的关系和数据类型与变量的关系相似

答案解析:对象是类的一个实例,类与对象的关系和数据与变量的关系相

似,所以一个类可以有多个对象。

2、下面()项是对构造函数和析构函数的正确定义。

A.voidX::X(),voidX:<X()

B.X::X(参数),X:qX()(正确答案)

C.X::X(参数),X:广X(参数)

D.voidX::X(参数),voidX::~X(参数)

答案解析:构造函数无返回类型、可带参数、可重载;析构函数无返回类

型、不可带参数、不可重载。

3、()的功能是对象进行初始化。

A.析构函数

B.数据成员

C.构造函数(正确答案)

D.静态成员函数

答案解析:当一个对象定义时•,C++编译系统自动调用构造函数建立该对象并

进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销

该对象并进行善后工作。

4、下列选项中不属于面向对象程序设计特征的是()。

A.继承性

B.多态性

C.类比性(正确答案)

D.封装性

答案解析:面向对象设计是建立在“对象”概念上的方法学,对象是面向对

象语言中类的实体,其特点包括:①标识唯一性,对象可区分;②分类性,可以将

具有相同属性和操作的对象抽象成类;③多态性,同一个操作对于不同对象表现不

同的行为;④封装性,屏蔽数据的具体结构以及操作的算法;⑤模块独立性好,对

象内部各种元素结合紧密,内聚性强。

5、拷贝构造函数具有的下列特点中,()是错误的。

A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的

B.拷贝构造函数只有一个参数,并且是该类对象的引用

C.拷贝构造函数是一种成员函数

D.拷贝构造函数的名字不能用类名(正确答案)

答案解析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默

认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字

与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。

6、关于静态成员的描述中,()是错误的。

A.静态成员可分为静态数据成员和静态成员函数

B.静态数据成员定义后必须在类体内进行初始化(正确答案)

C.静态数据成员初始化不使用其构造函数

D.静态数据成员函数中不能直接引用非静态成员

答案解析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被

定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最

合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该

类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成

员,但不能直接引用非静态成员。

7、关于友元的描述中,()是错误的。

A.友元函数是成员函数,它被说明在类体内(正确答案)

B.友元函数可直接访问类中的私有成员

C.友元函数破坏封装性,使用时尽量少用

D.友元类中的所有成员函数都是友元函数

答案解析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义

和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类

的封装性和隐藏性,尽量少用。

8、下列关于类的访问权限的描述中,()是错误的。

A.类中说明为公有的成员可以被程序中的任何代码访问

B.类中说明为私有的成员只能被类的成员函数和说明为友元类的成员函数访

C.类中说明为保护的成员可以被该类的派生类的成员访问

D.类的对象和类成员函数一样可以访问类的所有成员(正确答案)

答案解析:本题考核类成员的访问权限。类成员有3类访问权限:公有

(public)、私有(private)和保护(protected)。公有成员是类的对外表现,而私有

成员和保护成员是类的内部实现。类的成员函数可以访问类的所有成员,没有任何

限制。而类的对象对类的成员的访问是受成员访问控制符制约的。通过类的对象只

能访问类的公有成员,不能访问类的保护成员和私有成员。由此可知,选项D的描

述是错误的。

9、下列关于构造函数说法不正确的是()

A.构造函数必须与类同名

B.构造函数可以省略不写

C.构造函数必须有返回值(正确答案)

D.在构造函数中可以对类中的成员进行初始化

答案解析:构造函数是一类特殊的函数,其特点是函数名与类同名,没有返

回值,也可以省略不写,还可以对类中的成员进行初始化。

10、在派生类中能直接访问基类的()。

A.公有成员,私有成员

B.保护成员,私有成员

C.全部成员

D.公有成员,保护成员(正确答案)

答案解析:派生类亦称为子类,基类亦称为父类。一个类中的public成员可

被自己的成员和任意其它类及外部函数访问,保护成员可被自己以及其子类访问,

私有成员只能被自己访问。所以此题应选D。

11、下列关于运算符重载的描述中,错误的是()o

A)运算符重载不能改变操作数的个数、优先级、结合性和运算符的语法结构

B)不是所有的运算符都可以重载

0运算符函数的调用必须使用关键字operator(正确答案)

D)在C++语言中不可以通过运算符重载创造出新的运算符

答案解析:运算符重载不能改变运算符的语法规则、优先级、结合性和操作

数个数。运算符重载不能创造新的运算符。不能重载、“-

>”和“:”5个运算符。运算符重载函数在定义的时候必须使用关键字

operator,调用时可直接使用运算符。

12、C++语言是从早期的C语言逐渐发展演变而来的。与C语言相比,它在求

解问题方法上进行的最大改进是()。

A.面向过程

B.面向对象(正确答案)

C.安全性

D.复用性

答案解析:C++起源于C语言,它不仅保留了传统的结构化程序设计方法,又

对流行的面向对象程序设计方法提供了完整的支持。

13、对于类中定义的成员,其隐含访问权限是()o

A.public

B.protected

C.private(正确答案)

D.Static

答案解析:类中定义的成员,隐含访问权限是private。

14、下面有关重载函数的说法中,正确的是()o

A.重载函数必须具有不同的返回值类型

B.重载函数形参个数必须不同

C.重载函数必须有不同的形参列表(正确答案)

D.重载函数名可以不同

答案解析:函数重载允许用同一个函数名定义多个函数。被重载的函数必须

要有不同的形参列表。不可以根据函数返回值类型来重载函数。

15、有如下的对类“CSample”的说明,其中()是错误的。

classCSample{

A.inta=23;(正确答案)

B.CSample();public:

C.CSample(intval);

D.^CSample();

答案解析:在上面对类“CSample”说明中,“CSample。”和

“CSample(intval)”是该类重载的构造函数、“'CSample()”是该类的析构函

数,这三个语句都是正确的。错误的语句是“inta=23",因为它违反了在类的声

明(不管是引用性声明,还是定义性声明)中都不能以赋值表达式的形式给它的数据

成员进行初始化。

16、在inta=3,p=&a中,p的值是()。

A.变量s的地址值(正确答案)

B.无意义

C.变量p的地址

D.3

答案解析:P表示指针P指向的内容,而语句p=&a将a的地址传递给p。

17、在一个类中可以对一个操作符进行()重载?

A.1种

B.2种

C.3种

D.多种(正确答案)

答案解析:重载运算符可以针对用户的各种新的数据类型按实际需要对原有

运算符进行适当的改造,在一个类中可以有多种新的数据类型,所以一个操作符可

以进行多种重载。

18、在公有继承的情况下,基类的成员在派生类中的访问权限为()o

A.公有

B.私有

C.保持不变(正确答案)

D.受保护

答案解析:派生类会继承基类的成员函数和成员变量,在公有继承的情况

下,派生类不改变基类成员的访问权限。

19、应在下列程序画线处填入的正确语句是()。

#include<iostream>

usingnamespacestd;

clasBase

public:

voidfun()

cout<<”Base::fun”<Vendl;

1

classDerived:publicBase

voidfun()

〃显示调用基类的函数fun()

cout<<z,Derived::fun,z<<endl;

[单选题]

A.funO;

B.Base.fun();

C.Base::fun();(正确答案)

D.Base->fun();

答案解析:作用域分辨符号是“::”,它可以用来限定要访问的成员所在的

类的名称。在派生类Derive的定义中显式调用基类的函数fun(),则只能借助于

作用域分辨符“::”。

20、下面的描述中表达错误的是()

A.公有继承时基类中的public成员在派生类中仍是public的

B.公有继承时基类中的private成员在派生类中仍是private的(正确答案)

C.公有继承时基类中的protected成员在派生类中仍是protected的

D.私有继承时基类中的public成员在派生类中是private的

答案解析:C++中,继承方式控制了基类中具有不同访问属性的成员在派生类

中的访问属性。基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。所

以B)选项是错误的。派生类中的成员不能访问基类的中私有成员,但可以访问基

类中的公有成员和保护成员。此时派生类对基类中各个成员的访问能力与继承方式

无关,但继承方式将影响基类成员在派生类中的访问控制属性,基类中公有和保护

成员在派生类中的访问控制属性将随着继承方式而改变:派生类从基类公有继承

时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从

基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员,派生

类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成

员在派生类中仍然为保护成员.所以,A)、C)和D)选项都是正确的。

21、下面对于静态数据成员描述中,正确的是()o

A.静态数据成员可以在类体内初始化

B.静态数据成员不可以在类体内初始化(正确答案)

C.静态数据成员不能受protected控件符控制

D.静态数据成员可以直接用类名调用

答案解析:静态成员只能在类的外部定义,并且只定义一次。

22、面向对象程序设计中的数据隐藏指的是。。

A.输入数据必须输入保密口令

B.数据经过加密处理

C.对象内部数据结构上建有防火墙

D.对象内部数据结构的不可访问性(正确答案)

答案解析:输入数据必须输入保密口令和数据经过加密处理都不是面向对象

程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向

对象程序设计中所指的数据隐藏。面向对象程序设计系统中的封装单位是对象,对

象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这

就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。这就是面

向对象程序设计中的数据隐藏所指。

23、下列各项中符合函数重载必须满足的条件的是()o

A.必须有不同的参数个数

B.对应的参数类型必须不相同

C.A和B必须同时满足

D.A和B只要满足一个即可(正确答案)

答案解析:在同一个作用域中,要实现函数重载必须满足的条件的是:①有

不同的参数个数;或者②对应的参数有不相同的数据类型,即①和②中只要有一个

满足就可以了。当然两者都满足更好,但这不是必须的。

24、拷贝(复制)构造函数的作用是()0

A.进行数据类型的转换

B.用对象调用成员函数

C.用对象初始化对象(正确答案)

D.用一般类型的数据初始化对象

答案解析:进行数据类型的转换和用一般类型的数据初始化对象都是一般构

造函数的功能。用对象调用成员函数不用构造函数,只要用”对象名.成员函数

名”即可。所以拷贝(复制)构造函数的作用,只能是用对象来初始化对象。

25、下面对结构或类中成员的访问中,不正确的访问是()。

A.pointer.salary;(其中pointer为指向类对象的指针)(正确答案)

B.pointer->salary;

C.x=worker.salary;(其中worker为具有类类型的对象)

D.Location&rA=Al;intx=rA.GetX();(Location为已定义的类,Al为对象)

答案解析:因pointer为指向类对象的指针,所以"pointer->salary”是正

确的访问数据成员的形式;因worker为具有类类型的对象,所以

"worker,salary”也是正确的访问数据成员的形式;因Location为已定义的类,

A1为对象,所以"Location&rA=Al;intx=rA.GetX();"表示以对象Al初始化对

象引用rA,然后由对象引用rA调用成员函数GetXO给变量x赋值,这样的访问成

员函数的形式也是正确的;“pointer.salary;”中,因为运算符'的优先级高

于运算符''的优先级,所以相当于“(pointer,salary);",那正确的形式应该

是a(pointer-*salary);n»故“pointer,salary”是不正确的访问。

数据结构部分

1、研究数据结构就是研究()。

A.数据的逻辑结构(正确答案)

B.数据的存储结构

C.数据的逻辑结构和存储结构

D.数据的逻辑结构、存储结构及其基本操作

答案解析:数据结构(datastructure)是带有结构特性的数据元素的集合,

它研究的是数据的逻辑结构和数据的物理结构(存储结构)以及它们之间的相互关

系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以

后所得到的新结构仍保持原来的结构类型。算法的设计取决于数据的逻辑结构,而

算法的实现依赖于指定的存储结构。

2、具有线性结构的数据结构是()。

A.图

B.树

C.广义表

D.栈(正确答案)

答案解析:栈(stack)是一种运算受限的线性表。限定仅在表尾进行插入和删

除操作的线性表。

3、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输

入、输出、()等5个特性。

A.可行性、可移植性和可扩充性

B.可行性、有穷性和确定性(正确答案)

C.确定性、有穷性和稳定性

D.易读性、稳定性和确定性

答案解析:算法是指为解决某个特定问题而采取的确定且有限的步骤。一个

算法应当具有以下五个特性:1)、有穷性:一个算法包含的操作步骤应该是有限

的。2)、确定性:算法中每一条指令必须有确切的含义,不能有二义性,对于相同

的输入必须能得到相同的执行结果。3)、可行性:算法中指定的操作,都可以通过

已经验证过可以实现的基本运算执行有限次后实现。4)、有0个或多个输入:在计

算机上实现的算法是用来处理数据对象的,在大多数情况下这些数据对象需要通过

输入来得到。5)、有一个或多个输出:算法的目的是为了求解,这些解只有通过输

出才能得到(注意:算法要有一个以上的输出)。

4、下面程序段的时间复杂度是()。

for(i=0;i<m;i++)

for(j=0;j<n;j++)

a[i]

[单选题]

A.0(m2)

B.0(n2)

C.0(mn)(正确答案)

D.0(m+n)

答案解析:解析:for(i=0;i<m;i++)/m+1次/

for(j=0;j<n;j++)/m(n+l)次/

a[i][j]=ij;/mn次/

T=2mn+2m+l=0(mn)o

5、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示()。

A.0(n)

B.0(nlog2n)

C.0(n2)(正确答案)

D.0(log2n)

答案解析:算法的时间度量依据算法中最大语句频度来估算,它是问题规模n

的某个函数f(n),算法的时间度量记作:T(n)=O(f(n))

6、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以

下解释错误的是()。

A.正确性算法应能正确地实现预定的功能

B.易读性算法应易于阅读和理解,以便调试、修改和扩充

C.健壮性指当环境发生变化时,算法能适当地做出反应或进行处理,不会产

生不需要的运行结果

D.高效性即达到所需要的时间性能(正确答案)

答案解析:高效性除了考虑时间性能,还要考虑空间性能。

7、在一个长度为n的顺序表中,在第i个元素之前插入一个新元素时,需向

后移动()个元素。

A.n-i

B.n-i+1(正确答案)

C.n-i-1

D.i

答案解析:除了第i个元素之前的元素,其余元素均需要移动,所以移动元

素个数为n-(i-l)=n-i+lo

8、非空的循环单链表head的尾结点p满足()o

A.p->next==head(正确答案)

B.p->next==NULL

C.p==NULL

D.p==head

答案解析:循环单链表首尾节点相连,因此p->next==head。

9、链表不具有的特点是()。

A.可随机访问任一元素(正确答案)

B.插入删除不需要移动元素

C.不必事先估计存储空间

D.所需空间与线性表长度成正比

答案解析:链表只能顺序访问,只能从第一个元素开始逐个地读取元素,不

能随机访问任一元素。

10、在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结

点,修改指针的操作是()。

A.p->next=q;q->prior=p;p->next->prior=q;q->next=q;

B.p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;

C.q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;(正确答案)

D.q->next=p->next;q->prior=p;p->next=q;p->next=q;

答案解析:需先赋值插入节点的信息,再修改当前节点,避免节点信息丢

失。

11、从表中任一结点出发,都能扫描整个表的是()o

A.单链表

B.顺序表

C.循环链表(正确答案)

D.静态链表

答案解析:只有循环链表能从任一结点出发,找到所有元素。

12、线性表L=(al,a2,……,an),下列说法正确的是()»

A.每个元素都有一个直接前驱和一个直接后继

B.线性表中至少要有一个元素

C.表中诸元素的排列顺序必须是由小到大或由大到小

D.除第一个和最后一个元素外,其余每个元素都由一个且仅有一个直接前驱

和直接后继(正确答案)

答案解析:A第一个和最后一个元素不符合条件;B线性表可以为空表;C

线性表不要求排序。

13、在下列对顺序表进行的操作中,算法时间复杂度为0(1)的是()。

A.访问第i个元素的前驱(1<)(正确答案)

B.在第i个元素之后插入一个新元素()

C.删除第i个元素()

D.对顺序表中元素进行排序

答案解析:假设顺序表L,长度为n,求第i个节点L[i],直接取因此

为。⑴。

答案B需要移动n-i+1个节点,因此为0(n)

答案C也需要移动n-i个节点

答案D根据排序方法不同最慢0(n~2),最快O(nlogn)

14、在以下的叙述中,正确的是()o

A.线性表的顺序存储结构优于链表存储结构

B.线性表的顺序存储结构适用于频繁插入/删除数据元素的情况

C.线性表的链表存储结构适用于频繁插入/删除数据元素的情况(正确答案)

D.线性表的链表存储结构优于顺序存储结构

答案解析:顺序表和链表各有优劣,适用于不同的场景,链表在插入或删除

元素是不需要移动其他元素,插入删除效率更高,所以C正确。

15、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p

之间插入一个结点s,则执行()o

A.s->next=p->next;p->next=s;

B.p->next=s->next;s->next=p;

C.q->next=s;s->next=p;(正确答案)

D.p->next=s;s->next=q;

答案解析:原来的节点关系为q、P,即q->next=p,插入s后的节点关系为

q、s、q,因此,先让p指向s,即q->next二s;然后让s指向q,即s->next=p。

16、一个栈的输入序列为:a,b,c,d,e,则栈的不可能输出的序列是

()O

A.a,b,c,d,e

B.d,e,c,b,a

C.d,c,e,a,b(正确答案)

D.e,d,c,b,a

答案解析:栈是先进后出的结构,对于C,由于e出栈时,a、b已进栈且还

没有出栈,因此,b应该比a出,所以C错误。

17、设计一个判别表达式中括号是否配对的算法,采用()数据结构最佳。

A.顺序表

B.链表

C.队列

D.栈(正确答案)

答案解析:右括号需要匹配最近的左括号,具有后进先出的特点,因此用栈

更合适。

18、栈和队列都是()o

A.链式存储的线性结构

B.链式存储的非线性结构

C.限制存取点的线性结构(正确答案)

D.限制存取点的非线性结构

答案解析:由于栈和队列都属于线性表,所以线性表的顺序存储结构和链式

存储结构同样适用于栈和队列。队列(Queue)是一种先进先出(FIFO)的线性表,队

列是只允许在一端进行插入,另一端进行删除运算的线性表。允许删除的那一端称

为队首(Front),允许插入运算的另一端称为队尾(Rear)。栈(Stack)是限定仅在表

尾进行插入或删除操作的线性表。表尾端称为栈项(top),表头端称为栈底

(bottom)o故栈是后进先出(LIFO)的线性表。可见,栈和队列都是限制存储点的线

性结构

19、设循环队列的容量为70,现经过一系列的入队和出队操作后,front为

20,rear为11,则队列中元素的个数为()。

A.9

B.31

C.61(正确答案)

D.39

答案解析:一个循环队列Q的存储空间大小为M,其队头和队尾指针分别为

front和rear,则循环队列中元素的个数为(rear-front+M)%M

20、设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前面的条件是

()O

A.a在b的右方

B.a在b的左方(正确答案)

C.a是b的祖先

D.a是b的子孙

答案解析:中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。

21、设一棵二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树

先序遍历序列为()。

温馨提示

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

评论

0/150

提交评论