还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《程序设计基础(下)》课程期末复习资料
一、客观部分(单项选择、多项选择、不定项选择、判断)
(一)、选择部分
1、下面关于对象概念的描述中,(A)是错误的A.对象就是C语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的对象是构成世界的一个独立单位(实体),每一个对象具有自己的静态特征和动态特征静态特征描述了对象的状态;动态特征描述r对象改变状态或提供服务的行为
2、下面关于类概念的描述中,(A)是错误的A.类是抽象数据类型的实现B.类是具有共同行为的若干对象的统一描述体C.类是创建对象的样板I).类就是C语言中的结构体类型分类是人类认识客观世界的基本方法,人类认识客观世界是把具有相同性质的对象抽象成类,例如动物、植物、人类、鸟类等面向对象方法中的类描述了问题空间中一组有相同的属性(attribute)和方法(method)的对象,即将对象的静态特征抽象成属性,将对象的动态特征抽象成方法例如,把所有教师抽象成教师类,把所有学生抽象成学生类等
3、
1.关于类和对象不正确的说法是(C)A.类是一种类型,它封装了数据和操作B.对象是类的实例C.一个类的对象只有一个D.一个对象必属于某个类对象是构成世界的•个独立单位(实体),每•个对象具有自己的静态特征和动态特征静态特征描述了对象的状态;动态特征描述了对象改变状态或提供服务的行为分类是人类认识客观世界的基本方法,人类认识客观世界是把具有相同性质的对象抽象成类,例如动物、植物、人类、鸟类等面向对象方法中的类描述了问题空间中一组有相同的属性(attribute)和方法(method)的对象,即将对象的静态特征抽象成属性,将对象的动态特征抽象成方法例如,把所有教师抽象成教师类,把所有学生抽象成学生类等实例就是由某个特定的类所描述的一个具体的对象
4、面向对象程序设计思想的主要特征中不包括(I))A.封装性B.多态性C.继承性D.功能分解,逐步求精封装性、多态性和继承性是面向面向对象程序设计思想的主要特征,而“功能分解,逐步求精”是结构化程序设计的主要特征
5、下面对构造函数的不正确描述是(B)A.系统可以提供默认的构造函数B.构造函数可以有参数,所以可以有返回值C.构造函数可以重载【).构造函数可以设置默认参数对•象就是类的一个变后,和其他变后一样,也可以在创建对象时为对象的数据成员赋初值在C++中,对象的初始化工作是由一个特殊的成员函数一一构造函数来完成的,该函数在创建一个对象时被自动调用设置构造函数的目的主要是用来初始化对象的数据成员构造函数可以重载,以满足对象多样性的初始化需要A.15B.16C.31D.10二又树具有以下儿个基本性质性质1在二叉树的第i层上至多有2^个结点(iNl)性质2深度为k的二叉树至多有2七1个结点性质3在二叉树中,若度为0的结点(即叶子结点)数为%度为2的结点数为山,则no=n2+1o性质4具有n个结点的完全二叉树其深度为Llog2n」+1(其中Llogi-nJ表示不大于log2n的最大整数)性质5采用顺序编号的完全二叉树具有如下性质
(1)若一个分支结点的编号为i,则其左了树的根结点(即左孩子结点)编号为2*i,右子树的根结点(即右孩子结点)编号为2*i+l;
(2)反之,若一个非根结点的编号为i,则其双亲结点的编号为Li/2」(其中3/2」表示不大于i/2的最大整数)
43.下列(B)是图型结构A.操作系统中的文件目录结构B.城市交通网络C.实数集合D.n维向量树型结构主要是用来表示数据元素之间一对多的关系而在图结构中,结点之间的关系可以是任意的,图中任意两个结点都可能相关,图结构可以用来表示数据元素之间多对多的关系
(二)、判断部分
1、在面向对象程序设计中,每个对象可以单独设置属性值(V)在面向对象方法中,类是一类相同对象的抽象,一个对象是类的一个实例,可以具有单独的属性值
2、在一个类中最多只能定义1个构造函数和1个析构函数(X)C++中的构造函数可以有多个,析构函数由于没有参数,因此只能有一个
3、当建立一个新对象时,程序不会自动调用任何函数(X)C++中,当建立一个新对象时,程序会自动调用构造函数为期成员进行初始化
4、在类内部定义的public数据可以在类外进行存取(V)C++是通过三个关键字public(公有)、private(私有)以及protected(保护)来指定类成员的访问限制的关键字public private和protected被称为访问限定符类成员的访问控制实现了类的封装性
(1)公有成员在public(公有)区域内声明的成员是公有成员公有成员在程序的任何地方都可以被访问一般将公有成员限制在成员函数上,使其作为类与外界的接口,程序通过这种函数来操作该类的对象
(2)私有成员在private(私有)区域内声明的成员是私有成员私有成员只能被该类的成员函数或该类的友元访问一般将类的数据成员和不希望外界知道其实现细节的成员函数声明为private,程序必须通过类的公有成员函数才能间接地访问类的私有成员,从而实现了对类成员的封装
(3)保护成员在protected(保护)区域内声明的成员是被保护的成员被声明为protected(保护)访问级别的数据成员或成员函数只能在该类的内部或其派生类类体中使用,这部分内容将在继承与派生部分中详细讲解
5、使用关键字class定义的类中默认的访问权限是公有(public)的°(X)使用关键字class定义的类中默认的访问权限是私有(private)的
6、说明或定义对象时,类名前面不需要加class关键字(V)定义对象的过程叫做类的实例化,即由类产生一个具体的对象在C++中,类是一种用户自定义的数据类型,与基本数据类型一样,通过定义类的变量(即对象),才能通过对象来解决实际问题对象的定义定义对象的一般形式为类名对象名表;V
7、拷贝构造函数通常使用己有对象的引用来初始化创建中的对象(V)C++中除普通的构造函数外,还有一类特殊的构造函数一一拷贝构造函数拷贝构造函数的作用是用一个己经存在的对象来初始化一个正在创建的新对象拷贝构造函数有如下特征
(1)拷贝构造函数名与类名相同,形参只有一个,是对象的引用,所以,不能重载拷贝构造函数拷贝构造函数的原形为〈类名〉(〈类名〉对象名);
(2)拷贝构造函数无任何函数返回类型说明
(3)如果在类声明中没有给出拷贝构造函数,系统会自动给出一个默认的拷贝构造函数,该拷贝构造函数只进行对象数据成员间的对位拷贝,即所谓的“浅拷贝二
(4)在某些情况下,用户必须在类定义中给出一个显式的拷贝构造函数,以实现用户指定的用•个对象初始化另一个对象的功能,即所谓的“深拷贝
(5)在以下3种情况下,系统会自动调用拷贝构造函数
①当使用下面的声明语句用一个已存在的对象初始化一个新对象时,系统会自动调用拷贝构造函数〈类名><新对象名〉(〈己存在对象名〉);或〈类名X新对象名>*己存在对象名〉;
②对象作为实参,在函数调用开始进行实参和形参结合时,会自动调用拷贝构造函数,完成由已知的实参对象初始化形参新对象的功能
③如果函数的返回值是类的对象,在函数调用完成返回时,系统自动调用拷贝构造函数,用return后面的己知对象来初始化一个临时新对象(所创建的临时对象只在外部表达式范围内有效,表达式结束时,系统将自动调用析构函数撤销该临时对象)
8、在多文件结构汇总,一般将C++中的类声明和类实现分别放到两个文件中(V)为了实现类的复用,一般将类声明在一个独立的头文件中C++允许将类的声明和实现分离类的声明描述了类的结构,包括类的所有数据成员、函数成员和友元类的实现定义了成员函数的具体功能类的声明和实现放在两个不同的文件中,这两个文件具有相同的文件名、不同的扩展名类声明文件的扩展名为“.h”,类实现文件的扩展名为.cpp”
9、类的静态成员函数中不能访问非静态成员(V)在类的成员前如果加上关键字static修饰的成员就是类的静态成员类的静态成员包括静态数据成员和静态成员函数类的静态成员的特点是•静态成员属于类,不属于任何对象•静态成员函数没有this指针因此,静态成员函数不能访问一般的数据成员,它只能访问静态数据成员,也只能调用其他的静态成员函数•无论对象是否存在,类的一个静态数据成员都只有-•个,存于公用内存中,可被该类的所有对象共享
10、C++语言中,既允许单继承,又允许多继承(V)如果一个派生类是基于一个基类创建的,则该继承关系称为单继承;如果一个派生类是基于多个基类创建的,则该继承关系称为多继承
11、派生类的继承方式中有两种:公有继承和私有继承(X)派生类的继承方式中有三种公有继承、私有继承和受保护继承
12、在私有继承中,基类中只有公有成员对派生类是可见的(X)三种继承方式的对基类成员的访问控制访问控制方式public private protected继承方式public public不可直接访问protected privateprivate不可直接访问private protectedprotected不可直接访问protected
13、当类的继承方式为公有继承时,基类的私有成员在派生类中不可•直接访问(V三种继承方式的对基类成员的访问控制访问控制方式public privateprotected继承方式public public不可直接访问protected privateprivate不可直接访问privateprotectedprotected不可直接访问protected
14、通过指针或引用可以调用不同对象相同名称的函数,但可导致完全不同的行为的现象称为二义性(X)通过指针或引用可以调用不同对象相同名称的函数,但可导致完全不同的行为的现象称为多态
15、在C++中,虚函数帮助实现了类的封装性(X)C++通过虚函数实现“动态绑定”技术虚函数的声明方法是在基类的函数声明前或函数定义的函数头前(无函数声明时)加上virtual关键字
16、定义虚函数所用的关键字是class(X)定义虚函数所用的关键字是virtualo C++通过虚函数实现动态绑定”技术虚函数的声明方法是在基类的函数声明前或函数定义的函数头前(无函数声明时)加上virtual关键字
17、多态性是指同样的消息被不同对象接收时可产生不同的行为(X)多态性是指同样的消息被不同对象接收时可产生不同的行为
18、具有纯虚函数的类是抽象类,它的特点是不可以定义对象(V)C++还提供了••种“抽象类”抽象类不能实例化对象,它的唯•用途是为其他类提供合适的基类,其他类可从它这里继承和(或)实现接门一个类是抽象类还是具体类,主要看其是否包含纯虚函数,包含纯虚函数的类就是抽象类纯虚函数就是在声明时初始化为()、没有函数体的虚函数,其声明形式为virtual〈函数类型〉纯虚函数名(〈形参类型表〉)=0;
19、含有虚函数的类是抽象类(X)含有纯虚函数的类是抽象类,而不是虚函数
20、定义纯虚函数所用的关键字是purevirtuaL(X)C++还提供了一种“抽象类”抽象类不能实例化对象,它的唯一用途是为其他类提供合适的基类,其他类可从它这里继承和(或)实现接口一个类是抽象类还是具体类,主要看其是否包含纯虚函数,包含纯虚函数的类就是抽象类纯虚函数就是在声明时初始化为
0、没有函数体的虚函数,其声明形式为virtual〈函数类型〉纯虚函数名(〈形参类型表〉)=0;
21、C++中ostream类的直接基类是ios(V)计算机所做的任何数据处理工作都是在内存中进行一般来说,待处理的数据是从输入设备获取,而处理结果则会输出到输出设备上输入/输出(Input/Output,简称为I/O)是数据传送的过程,其中,输入是指将数据从输入设备传送到内存的过程,而输出则是指将数据从内存传送到输出设备的过程C++将数据的输入/输出过程形象地称为流,并定义了相应的输入/输出流类和一些代表标准输入/输出设备的流对象,以方便数据的输入/输出操作C++用继承方法建立了I/O流类库,其类层次关系如下图所示图I/O流的类层次关系其中,streambuf类和ios类是两个平行的基类,其他类都是它们的直接或间接派生类streambuf类为输入/输出操作提供内存缓冲区支持;filebuf类从streambuf派生,为文件输入/输出操作提供内存缓冲区支持在进行输入/输出操作时,数据会先放在缓冲区中,待缓冲区满或遇到结束符时,才真正进行数据读写操作ios类是一个抽象基类,提供一些对流状态、工作方式等设置的功能通过对ios类进行虚拟继承得到istream类和ostream类两个派生类输入流类istream提供输入操作功能,输出流类ostroam提供输出操作功能输入/输出流类iostream是对istream类和ostream类进行多重继承得到的派生类,同时具有输入、输出功能i「stream类是istream类的派生类,用于支持从磁盘文件的输入操作即从文件中读取数据到内存中;ofstream类是ostream类的派生类,用于支持向磁盘文件的输出操作即将内存中的数据写入到文件中;fstream类是iostream类的派生类,支持磁盘文件的输入/输出操作编写程序时,如果使用输入/输出操作,则需要包含头文件iostream;如果使用文件输入/输出操作,则需要包含头文件fstream
22、C++中,预定义的提取符〉〉和插入符《是不可以重载的X输入/输出操作时经常使用的和“”分别是stream类和istream类中重载的运算符系统提供的istream类也己经对“”进行了多次重载,能够用于处理对多种内部类型数据的输入操作重载的形式如下istreun operator»int;//从输入设备提取一个int型数据到内存中istream operator»double;//从输入设备提取一个double型数据到内存中istream operator»char*;//从输入设备提取一个字符串数据到内存中……//对其他类型数据的“”运算符重载系统提供的osiream类已经对进行了多次重载,能够实现对不同类型数据的输出操作重载的形式如下ostream operator«int://将内存中的一个int型数据输出到输出设备ostream operatordouble;//将内存中的一个double型数据输出到输出设备ostream operator«char*;〃将内存中的一个字符串数据输出到输出设备……//对其他类型数据的运算符重载
23、cin是输出流的一个对象,处理标准输出Vcout是输出流的一个对象,处理标准输出
24、使用打开文件函数open之前,需要定义一个流类对象,使用open函数来操作该对象V对文件进行输入/输出即读/写操作,必须先定义文件流对象并打开某个文件即将流对象与文件建立关联;然后,就可以使用流对象进行文件的读/写操作;操作完毕后关闭文件即将流对象与文件的关联断开定义文件流对象实际上就是使用文件流类定义类对象,与前面学习的定义类对象的方法完全相同打开文件使用文件流类的成员函数open,其函数原型为void openconstchar*filename,int mode:filename是要打开的文件名,mode是文件的打开方式
25、以app方式打开文件时,当前的读指针和写指针都定位于文件头(V)以app方式打开文件时,当前的读指针和写指针都定位于文件尾
26、get line()函数从流中提取终止字符,但终止字符被丢弃(V)输入流类提供了用于输入字符串的成员函数getlineO,输入流对象可以调用这个函数实现从输入设备读取-个字符串的操作getline()有3个参数,输入流对象调用getline()的格式为in.getlino(字符数组名或字符型指针,字符个数n,终止标识符)其中,in为输入流对象,既可以是cin对象,也可以是自定义的文件流对象函数调用时,从输入设备读取n-1个字符,并在其后加上字符串结束符\0,构成一个字符串存入第1个参数所指向的内存空间中若在读取够n-1个字符前遇到由第3个参数指定的终止标识符,则提前结束读取终止标识符参数的默认值是\n,也可以通过传递实参指定为其他字符若读取成功,函数返回值为真(非0)值,若读取失败(遇到文件结束符EOF),函数返回值为假
(0)值
27、使用模板可以减少重复劳动,提高代码重用率(V)泛化编程是对抽象的算法的编程,泛化是指可以广泛的适用于不同的数据类型模板是泛化编程的主要方法之模板的特点在于它的参数不仅是我们传统函数中所说的数值形式的参数,还可以是一种类型
28、一个函数模板只生成一个模板函数(X)函数模板只是一个模板,需要实例化为具体的函数后才能使用,即需要将模板中数据类型形参实例化为确定的数据类型实例化的函数模板称为模板函数根据数据类型的不同,可以生成多个模板函数
29、类模板可以生成若干个模板类,每个模板类又可定义若干个对象<■(V)类模板与函数模板一样也不能直接使用,必须先实例化为相应的模板类,创建该模板类的对象后才能使用类模板实例化后称为模板类,模板类具有和普通类相同的行为类模板可以生成若干个模板类,每个模板类又可定义若干个对象
30、数据结构中的数据元素是数据的不可分割的最小单位°(X)数据项是数据的不可分割的最小单位,又称数据域数据项是数据结构中讨论的最小单位,数据元素是数据项的集合
31、数据的存储结构是指对数据进行存储时,各数据元素在计算机中的存储关系(X)数据结构是研究计算机的操作对象(数据)以及它们之间的关系和操作等的学科,目的是提高计算机的数据处理效率并节省存储空间数据结构主要研究下面3个方面的问题
(1)数据的逻辑结构在数据集合中,各种数据元素之间固有的逻辑关系
(2)数据的存储结构在对数据进行存储时,各数据元素在计算机中的存储关系
(3)数据结构的操作各种数据结构要进行的操作,以及基于计算机中的存储方式如何实现这些操作各种数据结构的操作有所不同,但一般都包含插入、删除、查找、更新、排序等常用的基本操作
32、线性结构只能用顺序存储结构表示°(V)线性结构既可以用顺序存储结构表示、也可以用链式结构表示
33、线性表的逻辑顺序与物理顺序总是一致的(X)线性表的链式存储中,逻辑顺序与物理顺序往往是不-致的
34、在需要经常做元素随机访问操作的情况下,线性表的顺序存储结构比链式存储结构更好(V)在需要经常做元素随机访问操作的情况下,线性表的顺序存储结构比链式存储结构更好在经常进行插入和删除操作的情况下,线性表的链式存储结构比顺序存储结构更好
35、对链表进行插入和删除操作时,需要移动链表中的结点(X)对链表进行插入和删除操作时,不需要移动链表中的结点,只需要修改指针的指向即可
36、栈是操作受限的线性表,只允许在表的一端进行元素插入操作、在另一端进行元素删除操作(V)栈是操作受限的线性表,只允许在表的一端进行元素插入和删除操作
37、进栈操作,在顺序存储结构上需要考虑“溢出”情况X进栈操作,在顺序存储结构上因为要提前确定栈的最大规模,因此需要考虑“溢出”情况,链式存储结构则通常认为内存足够大,不需要考虑溢出
38、对同一输入序列进行两次不同的合法的入栈和出栈操作,所得的输出序列不一定相同V对同一输入序列进行两次不同的合法的入栈和出栈操作,由于其先进后出的性质,所得的输出序列不一定相同
39、在用顺序表表示的循环队列中,口『用表示队列元素数量的成员变量作为区分队空或队满的条件°A要解决判断循环队列是“空”还是“满”的问题,可以采用以下两种方法1约定少用一个元素空间入队前,如果关系rear+1%MaxSize==front w存在,就认为队列已满,再要插入就会发生溢出可见,这种方法rear始终指向那个空闲的元素空间2使用一个计数器size记录当前队列的实际长度如果size=0,则当front==rear”时,当前队列是空队列,可以进行入队操作;否则,当前队列满,不能进行入队操作
40、队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构V队列是•种插入与删除操作分别在表的两端进行的线性表,是•种先进先出型结构
41、在通信、数据压缩等领域被广泛应用的哈夫曼树采用的是二叉树结构A在通信、数据压缩等领域被广泛应用的哈夫曼树采用的是二叉树结构
42、由于顺序表示完全二叉树时空间利用率较低,因此,二叉树的顺序表示在实际中应用很多XX由于顺序表示非完全二叉树时空间利用率较低,因此,二叉树的顺序表示在实际中应用不多
43、满二叉树是完全二叉树X满二叉树和完全二叉树是两种特殊形态的二叉树满二叉树是指除了最后一层的结点为叶子结点外其它结点都有左、右两棵子树的二叉树完全二叉树是指其结点与相同深度的满二叉树中的结点编号完全一致的二叉树
44、无向图的邻接矩阵是对称的X无向图的邻接矩阵是对称的,有向图的邻接矩阵不是对称的
45、在图的一条路径中,若一个顶点至多只经过一次,则该路径称为简单路径V在--条路径中,若一个顶点至多只经过一次,则该路径称为简单路径;若组成路径的顶点序列中第一个顶点与最后一个顶点相同,则该路径称为回路或环;在一个回路中,若除第一个顶点与最后一个顶点外,其他顶点只出现一次,则该I可路称为简单I珂路或简单环
46、在有n个顶点的有向图中,每个顶点的度最大可达n-UX在有向图G中,若存在vi,vjEEG,则称顶点vi邻接到顶点vj,或顶点vj邻接自顶点时以顶点vi为弧头的弧的数目称为顶点vi的入度以顶点vi为弧尾的弧的数目称为vi的出度;顶点vi的入度和出度之和称为vi的度因此,在有n个顶点的有向图中,每个顶点的度最大可达2n-2o
47、广度优先遍历类似于树的逐层遍历V图的遍历是指从某一顶点出发按照某种规则依次访问图中的所有顶点,且每个顶点只被访问-•次根据搜索路径的不同,图的遍历通常采有两种方法广度优先遍历和深度优先遍历广度优先遍历类似于树的逐层遍历,即先从某一个顶点开始访问,然后访问与该顶点相邻接且未被访问过的顶点集VI G,再访问与VI G中顶点相邻接且未被访问过的顶点集V2G,重复该过程直至与初始顶点连通的所有顶点都被访问完对于非连通图或非强连通图,还要从某一个未被访问的顶点开始重复上一过程,直至所有顶点访问完毕深度优先遍历类似于树的先序遍历,即从某一个顶点开始访问,访问后将该顶点去除得到若干子图,对每个子图再依次进行深度优先遍历
二、主观部分
一、程序填空部分
1、下面程序中用来求数组元素的和请将程序补充完整,使程序的输出为:s=150°#include iostreamusing namespace std;class IntArray{private:int Size;int*p;public:IntArray0Size=O;p=NULL;IntArreiyint*aa,int nSize=n;p=new int[n]:forint i=O;in;i++*p+i=*aa+i;}~IntAiraydelete[]p;}int GelValueinli1return*p+i;;int mainint b
[5]=5,20,15,35,25};IntArray ab,5;int i=0,s=0;for;i〈5;i++s+=a.GotValuei;cout«,/s=zs«endl;return0;★考核知识点C++中的类和对象参见讲稿章节7-2一一7-4附
2.
1.1考核知识点解释详见教材7-2——7-4o
2、下面的程序是在ARRAY类中重载运算符[],程序的运行结果为“A
[3]=4”,请将程序补充完整#include iostreamusing namespacestd;class ARRAY{private:int*v;int s;public:ARRAY int a[],int n;ARRAYdelete[]v;int sizeOreturn s;}int operator[]int i;;ARRAY::ARRAYint a[],int n{if n=0v=NULL;s=0;return;}s=n;v=new int[s];forint i=0;in;i++v[i]=a[i];int ARRAY::operator[]int ireturn v[i];int mainint a
[5]=l,2,3,4,5;ARRAY Aa,5;cout«,,A
[3]=/z«A
[3];return0;}★考核知识点自定义类的运算符重载参见讲稿章节7-12附
2.
1.2考核知识点解释详见教材7-
123、下面程序中用来求数组元素的最大值请将程序补充完整,使程序的输出为:睥x=30^include iostreamusing namespacestd;class SHUZUprivate:int Size;int*p;public:SIIUZUOSize=0;p=NULL;}SHUZUint*aa,int nSize=n;p二new int[n];forint i=0;in;i++*p+i=*aa+i;}〜SHUZU{delete[]p;int GctValucint ireturn*p+i;};int main{inta
[7]=25,15,10,30,20,3,7};SHUZU Aa,7;int max;max二A.GelValuel;if maxA.GetValuei max=A.GetValuei;cout«,,mcxx=z,maxendl;return0;★考核知识点C++中的类和对象参见讲稿章节7-2一一7-4附
2.
1.3考核知识点解释详见教材7-2——7-
44、下面的程序是在str类中重载运算符二,请将程序补充完整,使程序的输出结果为:he she heheSinclude iostreamusing namespacestd;class strprivate:char*st;pub1ic:strchar*aset ci;}stroperator/str adelete[]st;set a.st;return*this;}void showcout«st«endl;}~strdelete[]st;}void setchar*s st=new char[strlens+l];strepyst,s;构造函数是一类特殊函数,其特点如下
①构造函数名必须与类名相同
②构造函数没有任何函数返回类型,void也不行
③任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成员的初始化工作
④如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数〈类名>(){}
6、下列(A)是构造函数的特征A.构造函数在创建对象时自动调用B.构造函数不可以重载C.构造函数不可以设置默认参数D.构造函数必须指定函数类型★考核知识点构造函数参见讲稿章节7-2附
1.
1.6(考核知识点解释)对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初值在C++中,对象的初始化工作是由•个特殊的成员函数一一构造函数来完成的,该函数在创建一个对象时被自动调用设置构造函数的目的主要是用来初始化对象的数据成员构造函数可以重载,以满足对象多样性的初始化需要构造函数是一类特殊函数,其特点如下
①构造函数名必须与类名相同
②构造函数没有任何函数返回类型,void也不行
③任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成员的初始化工作
④如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数〈类名>(){}
7、有关构造函数说法不正确的是(D)A.构造函数的名字和类的名字一样B.在创建对象时,系统白动调用构造函数C.构造函数无任何函数类型I).构造函数有且只有一个★考核知识点构造函数参见讲稿章节7-2附
1.
1.7(考核知识点解释)对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初值在C++中,对象的初始化工作是由•个特殊的成员函数一一构造函数来完成的,该函数在创建一个对象时被自动调用设置构造函数的目的主要是用来初始化对象的数据成员构造函数可以重载,以满足对象多样性的初始化需要构造函数是一类特殊函数,其特点如下
①构造函数名必须与类名相同
②构造函数没有任何函数返回类型,void也不行
③任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成员的初始化工作
④如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数〈类名>(){}
8、(B)的功能是对对象进行初始化A.析构函数B.数据成员C.构造函数};int mainOstr sihe,s2〃she;si.show;s
2.show;s2=sl si.show;s
2.show;★考核知识点自定义类的运算符重载,构造函数,析构函数参见讲稿章节7-12,7-2,7-4附
2.
1.4考核知识点解释详见教材7-12,7-2,7-4
二、读程序写结果题
1、已知结点类和二叉链表表示二叉树类的声明如下itincludeiostream usingnamespacestd;//节点类class Node{friend class LinkedBinTree;public:Nodeconst int xm_pLeftChild=m_pRightChild=NULL;mdata=x;}private:int m_data;Node*m pLeftChild,*m pRightChild;;〃二叉链表表示二叉树类class LinkcdBinTroo{public:LinkedBinTreeO;//创建空二叉树Node*CreateRoot const int x;//以指定元素值创建根结点//将一个结点作为指定结点的左孩子插入Node*InsertLeftChildNode*pNode,const int x;//将一个结点作为指定结点的右孩子插入Node*InsertRightChildNode*pNode,constint x;//获取指定结点的元素值bool GetNodeVa1ueNode*pNode,intx;//获取指定结点的左孩子结点Nod、*GetLeftChi ldNode*pNode;//获取指定结点的右孩子结点Node*GetRightChiIdNode*pNode:private:Node*m_pRoot;〃指向根结点的指针};void BinTreeTraverseLinkedBinTreeftbtree,Node*pXodeintx;if pNode==NULL return;bt ree.GetNodeValue p\dc,x;cout«x;BinTreeTraversebtrec,btree.GetLeftChi IdpNod;BinTreeTraversebtree,btree.GetRightChiIdpNode;......//LinkedBinTree的其他成员函数的实现略int mainLinkedBinTree btree;Node*pNodel,*pNode2,*pNode3,*pNode4,*pNode5,*pNode6,*pNode7,*pNode8,*pNode9;pNode1=btree.CreateRoot1:pNode2=btree.InsertLeftChildCpNodel,2;pNode3=btree.lnsertRightChildpNodel,3;pNode4=btree.InsertLeftChildpNode2,4;pNode5=btree.InsertLeftCh i1dpNode3,5;pNode6=btree.InsertRightChildpNode3,6;pNodc7=btree.InsertLcftChildpNode4,7:pNode8=btree.InsertRightChildpNode4,8;pNode9=btree.InsertLeftChildpNode6,9;BinTreeTraversebtree,pNode2;cout«endl;BinTreeTraversebtree,pNode3;cout«endl;return0;请写出执行主函数后在屏幕上的输出结果★考核知识点二叉树的遍历及常用操作参见讲稿章节14-4[答案]:
247835692、已知结点类模板和链接队列类模板的声明如下://存储结点类templateclass Tclass LinkNodc〃结点类templateclass Tfriend class LinkQueue;//将链接队列类声明为友类public:LinkNodcO;//构造函数private:T data;〃结点元素*next;〃指向下一个结点的指针LinkNodeT:};//链接队列类templateclass classLinkQucuo public:T//创建空队列//删除队列IsEmpty;〃判断队列是否为空,空返I可true,非空返回false Insert const T x;〃入队,在队列尾部插入元素x GetElcmcntT x://求队头元素的值放入x中DeleteT x;〃出队,从队头删除一个元素,并将该元素的值放入x中OutPut ostreamfeout const;〃输出队列LinkQueueO;~LinkQueue;bool bool boolboolvoid private:int size;//队列实际元素个数LinkNodeT*front,*rear;//队列的队头和队尾指针;int mainint xl,x2,x3;LinkQueueint q;q.Insert1;q.Insert1;q.Deletexl;q.GetElement x2;x3=xl+x2;q.Insertx3;coutx3endl;q.Deletexl;q.GetElementx2;x3=xl+x2;coutx3«endl;return0;}请写出主函数main执行后在屏幕上的输出结果★考核知识点队列的表示与实现参见讲稿章节:13-4[答案]:
23、已知顺序表类模板的C++描述如下:templateclass Tclass LinearList{public:LinearList intLLMaxSize;//构造函数,创建空表^LinearList;〃析构函数,删除表LinearListT Insertint k,const T x;〃在第k个位置插入元素x,返回插入后的线性表bool IsEmptyconst;〃判断表是否为空,表空返回true,表非空返回false intGetLengthO const;//返回表中数据元素的个数bool GetDataint k,T x:〃将表中第k个元素保存到x中,不存在则返回false boolModifyDataint k,const T x:〃将表中第k个元素修改为x,不存在则返回false intFind const T x;//返回x在表中的位置,如果x不在表中返回0LincarListT DeletcBylndexconstint k,T x:〃删除表中第k个元素,并把它保存到x中,返回删除后的线性表LinearListT DeleteByKeyconst T x,T y;〃删除表中关键字为x元素,返回删除后的线性表void OutPutostream out const;//将线性表放到输出流out中输出private:int length;int〃当前数组元素个数〃线MaxSize;性表中最大元素个数T*element;〃一维动态数组;i ntmain LinearListint IntegerLList10;intx;IntegerLList.Insert1,50;IntegerLList.Insert1,100;IntegerLList.Insert1,150;IntegerLList.Insert1,250;cout«IntegerLList.GetLengthO endl;IntegerLList.GetData3,x;coutx«endl;return0;请写出主函数main执行后在屏幕上的输出结果★考核知识点线性表的顺序存储结构与实现参见讲稿章节12-2[答案]:
41004、已知结点类模板和链接队列类模板的声明如下〃存储结点类templateclass Tclass LinkNode//结点类{tcmplatcclass Tfriend class LinkQueue;//将链接队列类声明为友类public:LinkNode0;//构造函数private:T data;〃结点元素LinkNodeT*next;〃指向下一个结点的指针;//链接队列类templateclass TclassLinkQueuepublic:LinkQueue;//创建空队列^LinkQueue;//删除队列bool IsEmpty;//判断队列是否为空,空返回true,非空返回false bool Insert const T x;//入队,在队列尾部插入元素x boolGetElement T x://求队头元素的值放入x中bool DeleteT x;〃出队,从队头删除一个元素,并将该元素的值放入x中void Outputostrean out const://输出队列private:int size;〃队列实际元素个数LinkNodeT*front,*rear;//队列的队头和队尾指针;int mainint xl,x2,x3;LinkQueueint q;q.Insert5;q.Insert8;q.Deletexl;q.GetElement x2;x3=xl+x2;q.Insert x3;coutx3«endl;q.Deletexl;q.GetElement x2;x3=xl+x2;coutx3endl;return0;写出主函数ma in执行后在屏幕上的输出结果★考核知识点队列的实现参见讲稿章节13-4[答案]:
13215、己知顺序表类模板的C++描述如卜.templateclass Tclass LinearListpublic:LinearList intLLMaxSizc;//构造函数,创建空表LinearList0;〃析构函数,删除表LincarListT Insertintk,const T x;〃在第k个位置插入元素x,返回插入后的线性表bool IsEmptyconst;〃判断表是否为空,表空返回true,表非空返回false intGetLengthO const;//返回表中数据元素的个数bool GetDataintk,T x;〃将表中第k个元素保存到x中,不存在则返回false boolModifyDataint k,const T x;〃将表中第k个元素修改为x,不存在则返回false intFind const T x;//返回x在表中的位置,如果x不在表中返回0LinearListT DeleteBylndexconstintk,T x:〃删除表中第k个元素,并把它保存到x中,返回删除后的线性表LinearListT DeleteByKeyconst T x,T y:〃删除表中关键字为x元素,返回删除后的线性表void OutPutostrcamout const;//将线性表放到输出流out中输出private:int length;〃当前数组元素个数int MaxSize;〃线性表中最大元素个数T*element;〃一维动态数组;int main{LincarListint IntcgcrLList10;int i,x;fori=l;ill;i++IntegerLList.Inserti,i*5;fori=2;i=3;i++IntegerLList.De1eteByIndex i,x;cout«x«endl;}coutendl;return0;请写出主函数main执行后在屏幕上的输出结果★考核知识点线性表的顺序存储结构与实现参见讲稿章节12-2[答案]:
10206、已知结点类模板和二叉树二叉链表表示类模板的声明如下://结点类模板templateclass Tclass LinkedNodc{templateclass Tfriend class LinkedBinTree;public:LinkedNode;〃构造函数LinkedNodeconst T x;//构造函数private:T m_data;LinkedNodeT*m_pLeftChiId,*m_pRightChild;;......//LinkedNode成员函数的实现略//二叉树二叉链表表示类模板templateclass TclassLinkedBinTreepub1ic:LinkedBinTree;//创建空二叉树LinkedBinTreeO;//删除二叉树bool IsEmptyO;//判断二叉树是否为空LinkedNodeT*CreateRoot const T x;//以指定元素值创建根结点void Clear0;//清空二叉树LinkedNodcT*GctRootO;//获取根结点//将一个结点作为指定结点的左孩子插入LinkedNodeT*InsertLeftChildLinkedNodeT*pNode,const T x;//将一个结点作为指定结点的右孩子插入LinkedNodeT*InsertRightChiIdLinkedNodeT*pNode,const T x;//修改指定结点的元素值bool ModifyNodeValueLinkedNodeT*pNode,constTx;//获取指定结点的元素值bool GetNodeVa1ueLi nkedNodeT*pNode,Tx;//获取指定结点的左孩子结点LinkedNodeT*GetLeftChi1dLinkedNodeT*pNode;//获取指定结点的右孩子结点LinkedNodeT*GetRightChiIdLinkedNodoT*pNode;//删除以指定结点为根的子树void DeleteSubTreeLinkedNodeT*pNode;private:LinkedNodeT*m_pRoot;〃指向根结点的指针;template class T voidBinTrceTraverscLinkedBinTrecT btrce,LinkedNodcT*pNodc{Tx;if pNode==NULL return;BinTreeTraversebtree,btree.GetLeftChiIdpNode;Bi nTreeTraversebtree,btree.GetR ightCh i1dpNode;btree.GetNodeValuepNode,x;coutx;......//LinkedBinTree的其他成员函数的实现略int mainLinkedBinTreechar btree;LinkedNodechar*pNodeA,*pNodeB,*pNodeC,*pNodeD,*pNodeE,*pNodeF,*pNodeG,*pNodcll,*pNodd;//创建一棵二叉树pNodeI=btree.CreateRoot T;pNodeH=btree.InsertLeftChiIdpNode1,H;pNodeG=btree.InsertRightChiIdpNodel,G;pNodeF=btree.InsertRightChildpNodeH,F;pNodeE=btree.InsertLeftChiIdpNodeG,E;pNodeD=btree.InsertRightChiIdCpNodeG,【;pNodeC=btree.InsertLeftChiIdpNodeF,C;pNodeB=btree.InsertLeftChiIdpNodeE,B;pNodeA=btree.InsertRightChiIdpNodeE,A;DeleteSubTreepNodeE;BinTreeTraversebtree,pNodeA:return0;请写出主函数main执行后在屏幕上的输出结果★考核知识点二叉树的遍历及常用操作参见讲稿章节14-4[答案]:CFHDGI
7、己知顺序表类模板的C++描述如下templateclass Tckiss LinearListpublic:LinearList intLLMaxSize;//构造函数,创建空表LinearList:〃析构函数,删除表LinearListT Insertintk,constTx;〃在第k个位置插入元素x,返回插入后的线性表bool IsEmptyconst;〃判断表是否为空,表空返回true,表非空返回false intGetLengthO const;〃返回表中数据元素的个数bool GetDataintk,Tx;〃将表中第k个元素保存到x中,不存在则返回false boolModifyDataint k,constTx;〃将表中第k个元素修改为x,不存在则返回false intFind constTx;//返回x在表中的位置,如果x不在表中返回0LinearListT DeleteBylndexconstintk,Tx://删除表中第k个元素,并把它保存到x中,返回删除后的线性表LincarListT DclctcByKeyconstTx,T y;〃删除表中关键字为x元素,返回删除后的线性表void OutPutostreamoutconst;//将线性表放到输出流out中输出private:int length;int McixSize;〃当前数组元素个数〃线T*clcmcnt:性表中最大元素个数//一;维动态数组int mainLinearListintIntegerLList10;inti,x;fori=l;ill;i++IntegerLList.Inserti,i*5;fori=3;i〈5;i++IntegerLList.DeleteByIndex i,x;cout«x«endl;}coutendl;return0;请写出主函数main执行后在屏幕上的输出结果[答案]:1525★考核知识点线性表的顺序存储结构与实现参见讲稿章节12-
28、已知结点类模板和二叉树二叉链表表示类模板的声明如下//结点类模板templateclass Tclass LinkedNodetemplateclass Tfriend classLinkedBinTrec;public:LinkedNode;〃构造函数LinkedNodeconst Tx;//构造函数private:T mdata;LinkedNodeT*m pLeftChild,*m pRightChild;;......//LinkedNode成员函数的实现略//二叉树二叉链表表示类模板templateclass TclassLinkedBinTree{public:LinkedBinTree0;//创建空二叉树^LinkedBinTree;//删除二叉树bool IsEmpty;//判断二叉树是否为空LinkedNodeT*CreateRoot constTx;//以指定元素值创建根结点void Clear;//清空二叉树LinkedNodeT*GetRootO;//获取根结点D.静态数据成员★考核知识点构造函数参见讲稿章节7-2附
1.
1.8(考核知识点解释)C++中是通过构造函数对对象进行初始化的
9、
3.下面对友元的描述错误的是(D)A.关键字friend用于声明友元B.一个类的成员函数可以是另一个类的友元C.友元函数访问对象的成员不受访问特性影响D.友元函数通过this指针访问对象成员★考核知识点类的友员参见讲稿章节7-10附
1.
1.9(考核知识点解释)在程序中,如果普通函数或另一个类中的函数需要经常通过类提供的公有接口来间接地访问类的私有成员或保护成员,为了提高程序运行的效率,可以将普通函数声明为类的朋友——友元,它们就可以直接访问类的任何成员了友元提供了一个一般函数与类的成员之间、不同类的成员之间进行数据共享的机制
10、
3.—个类的友元函数能够访问该类的(D)A.私有成员B.保护成员C.公有成员D.所有成员★考核知识点类的友员参见讲稿章节7-10附
1.
1.10(考核知识点解释)在程序中,如果普通函数或另•个类中的函数需要经常通过类提供的公有接口来间接地访问类的私有成员或保护成员,为了提高程序运行的效率,可以将普通函数声明为类的朋友-友元,它们就可以直接访问类的任何成员了
11、友元访问类对象的成员时使用(B)A.类的成员名B.“this-〉成员名”的形式C.“类名成员名”的形式D.“类名成员名的形式制“对象名.成员名”的形式★考核知识点类成员的访问及类的友员参见讲稿章节7-2和7-10附
1.
1.11(考核知识点解释)一个对象创建以后,访问它的数据成员和调用它的成员函数,可通过对象名和对象成员访问运算符或对象指针和箭头成员访问运算符两种方式完成访问对象数据成员的一般形式为〈对象名〉.数据成员名或〈指向对象的指针名〉-〉数据成员名调用对象成员函数的一般形式为〈对象名〉.成员函数名([实参])或〈指向对象的指针名-成员函数名([实参])在程序中,如果普通函数或另一个类中的函数需要经常通过类提供的公有接口来间接地访问类的私有成员或保护成员,为了提高程序运行的效率,可以将普通函数声明为类的朋友——友元,它们就可以直接访问类的任何成员了//将一个结点作为指定结点的左孩子插入LinkedNodeT*InsertLeftChildLinkedNodeT*pNode,constTx;//将一个结点作为指定结点的右孩子插入LinkedNodeT*InsertRightChiIdLinkedNodeT*pNode,constTx;//修改指定结点的元素值bool ModifyNodeValueLinkedNodeT*pNode,constTx;//获取指定结点的元素值bool GetNodeVa1ueLi nkedNodeT*pNode,Tx;//获取指定结点的左孩子结点LinkedNodcT*GctLcftChiIdLinkcdNodcT*pNode;//获取指定结点的右孩子结点LinkedNodeT*GetRightChiIdLinkedNodeT*pNode;//删除以指定结点为根的子树void DeleteSubTreeLinkedNodeT*pNode;private:LinkedNodeT*m pRoot;〃指向根结点的指针;template〈class Tvoid BinTreeTraverseLinkedBinTreeTbtrce,LinkedNodcT*pNode{Tx;if pNode==NULL return;btree.GetNodeValueCpNode,x;coutx;BinTreeTraversebtree,btree.GetLef tChi1dpNode;BinTreeTraversebtree,btree.GetRightChiIdpNode;......//LinkedBinTree的其他成员函数的实现略int mainLinkedBinTreechar btree;LinkedNodechar*pNodeA,*pNodeB,*pNodeC,*pNodeD,*pNodeE,*pNodeF,*pNodeG,*pNodeH,*pNodeI;//创建一棵二叉树pNodeI=btree.CreateRootC T;pNodeH=btree.InsertLeftChilcKpNodel,H;pNodeG=btree.InsertRightChiIdpNodel,G;pNodeF=btree.InsertRightChiId pNodeH,F;pNodeE=btree.InscrtLeftChiIdpNodeG,E;pNodeD=btree.InsertRightChiIdpNodeG,D;pNodeC=btree.InsertLeftChiIdpNodeF,C;pNodeB=btree.InsertLeftCh iJ dpNodeE,B;pNodeA=btree.InsertRightChiIdpNodeE,A;DeleteSubTreepNodeE;BinTreeTraversebtree,pNodeA;return0;请写出主函数main执行后在屏幕上的输出结果[答案]:IHFCGD★考核知识点二叉树的遍历及常用操作参见讲稿章节14-
49、已知结点类模板和链接队列类模板的声明如下//存储结点类templateclass Tclass LinkNode〃结点类{template%lassTfriend classLinkQueue;//将链接队列类声明为友类public:LinkNode;//构造函数private:T data;〃结点元素LinkNodeT*next;〃指向卜一个结点的指针;〃链接队列类templateclass TclassLinkQueuepublic:LinkQueue;//创建空队列^LinkQueue;//删除队列bool IsEmptyO;〃判断队列是否为空,空返回true,非空返回false boolInsertconstTx;//入队,在队列尾部插入元素x boolGetElement Tx;//求队头元素的值放入x中bool DeleteTx;//出队,从队头删除一个元素,并将该元素的值放入x中void OutPutostreamoutconst;//输出队列private:int size;〃队列实际元素个数LinkNodeT*front,*rear;//队列的队头和队尾指针;int mainint xl,x2,x3;LinkQueueint q;q.Insert2;q.Insert3;q.Deletexl;q.GetElement x2;x3=xl+x2;q.Insert x3;cout«x3«endl;q.Deletexl;q.GctElcmcnt x2;x3=xl+x2;coutx3«endl;return0;请写出主函数main执行后在屏幕上的输出结果[答案]:58★考核知识点队列的实现参见讲稿章节13-
412、下面选项中,是类的成员函数为(C)A.构造函数B.析构函数C.友元函数D.缺省参数的构造函数★考核知识点构造函数、析构函数、友元函数参见讲稿章节7-
2、7-4和7-10附
1.
1.12(考核知识点解释)友元函数虽然可以访问类的任何成员,但不是类的成员函数,
13、对基类和派生类的描述中错误的是(I))A.派生类是基类的具体化B.基类继承了派生类的属性C.派生类是基类定义的延续D.派生类是基类的特殊化★考核知识点继承参见讲稿章节8-1附
1.
1.13(考核知识点解释)派生类所表示的事物是基类所表示事物的子集(即派生类所表示的事物比基类更具体)因此,在一个继承关系中,“派生类事物是基类事物”这句话肯定成立,但反过来却不行例如,对于Teacher类和Person类的继承关系来说,Teacher类是派生类,Person类是基类,显然Teacher是Person”这句话是正确的,而反过来说Person是Teacher”则不行我们在定义继承关系时可以参照上述方法来检验所定义的继承关系是否合理
14、继承具有(B),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员A.规律性B.传递性C.重复性D.多样性★考核知识点继承参见讲稿章节8-1附
1.
1.14(考核知识点解释)继承具有传递性,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员
15、在C++中,能被派生类继承的函数是(A)A.成员函数B.构造函数C.析构函数D.拷贝构造函数在C++中,成员函数能够被派生类继承
16、通过类型兼容,对于基类及其公有派生类的对象,可以使用相同的函数统一进行处理比如,函数参数是基类类型,而实际调用该函数时既可以传入基类对象,也可以传入派生类对象,这就是(B)A.继承B.多态C.派生D.基类通过类型兼容,对于基类及其公有派生类的对象,可以使用相同的函数统一进行处理比如,函数参数是基类类型,而实际调用该函数时既可以传入基类对象,也可以传入派生类对象,这就是多态
17、C++中的多态调用是指(C)A.以任何方式调用一个虚函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数I).借助于指向对象的基类指针或引用调用一个纯虚函数[答案]:C C++中的多态调用是指借助于•指向对象的基类指针或引用调用一个虚函数,根据实际对象所属的派生类,调用派生类相应的虚函数
18、在C++中,要实现动态联编,可以使用(C)调用虚函数A.类名B.派生类指针C.基类引用D.对象名在C++中,要实现动态联编,可以使用基类的指针或引用调用虚函数
19、下列类中(A)是输入/输出流类iostream的派生类A.fstream B.ofstream C.ifstream D.os trearn图I/O流的类层次关系
20、进行文件操作时需要包含(A)头文件A.iostream B.fstream C.stdio D.stdlib编写程序时,如果使用输入/输出操作,则需要包含头文件iostream;如果使用文件输入/输出操作,则需要包含头文件fstream
21、在下列选项中(A)不是stream类的对象A.cin B.cout C.clog D.cerr C++预定义了4个标准流对象cin、cout、cerr、clog,它们均包含于头文件iostream中cin是istream类的对象,用于处理标准输入(即从键盘输入数据到内存中);cout是stream类的对象,用于处理标准输出(即将内存中的数据输出到屏幕上);cerr和clog都是ostream类的对象,均用于处理错误信息标准输出
22、下列的函数模板声明中,正确的是(A)A.template typenameTl,T2B.templatetemplate Tl,T2C.templatetemplate Tl,template T2D.template typoname T1;typonameT2定义函数模板的一般格式为template模板形参表〈函数类型〉〈函数名〉(〈函数形参表〉)(函数体}其中■template定义模板的关键字,指明是函数或类模板■模板形参表用尖括号括起来,可以是一个或多个模板参数,多个模板参数用“,分隔■模板参数由关键字typename及其后面的标识符构成该标识符对应的实参可以是系统的基木数据类型,也可以是用户自定义的数据类型
23、下列关于函数模板的描述中,正确的是(B)A.函数模板和普通函数重载时,函数调用会优先调用符合要求的普通函数B.函数模板和普通函数重载时,函数调用会优先调用符合要求的函数模板C.函数模板的主要作用是减少可执行程序文件的尺寸D.函数模板能够使程序规范当函数模板与一般函数同名时,遵行下面的调用顺序…个函数调用首先寻找参数完全匹配的一般函数,如果找到就调用它;寻找一个函数模板,使其实例化,生成一个匹配的模板函数,然后调用该模板函数
24、关于函数模板,描述正确的是(B)A.函数模板必须由程序员实例化为可执行的函数模板B.函数模板的实例化由编译器实现C.函数模板和模板函数是一个概念D.模板函数就是普通函数函数模板只是一个模板,需要实例化为具体的函数后才能使用,即需要将模板中数据类型形参实例化为确定的数据类型,这个过程是由编译器完成的实例化的函数模板称为模板函数
25、建立类模板对象的实例化过程为(C)A.基类-派生类B.构造函数-〉对象C.模板类-对象D.模板类-〉模板函数类模板与函数模板一样也不能直接使用,必须先实例化为相应的模板类,创建该模板类的对象后才能使用类模板实例化后称为模板类,模板类具有和普通类相同的行为
26、类模板的使用实际上是类模板实例化成一个具体的(C)A.类B.对象C.函数D.变量类模板与函数模板一样也不能直接使用,必须先实例化为相应的模板类,创建该模板类的对象后才能使用类模板实例化后称为模板类,模板类具有和普通类相同的行为
27、一个()允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值可以取任意数据类型A.函数模板B.模板函数C.类模板D.模板类类模板可以用来描述一个与数据类型无关的类类模板中类的数据成员和函数成员的参数和返回值可以是任意的数据类型,它描述了一族类的属性和行为,是一族类的统一描述,可以避免类的重复定义
28、类模板的静态数据成员由(B)共享A.一个类模板的所有模板类B.一个模板类的所有对象C.一个模板类的-个对象D.一个类模板的所有对象类模板的静态数据成员由一个模板类的所有对象共享
29、在数据结构中,从逻辑上可以把数据结构分成(C)A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构[).内部结构和外部结构根据数据结构中各数据元素之间前胆与后继关系的复杂程度,数据的逻辑结构可分为线性结构与非线性结构两大类
30、下列不属于常用的存储结构的是(C)A.顺序存储结构B.链式存储结构C.非线性存储结构D.索引存储结构根据数据结构中各数据元素之间前驱与后继关系的复杂程度,数据的逻辑结构可分为线性结构与非线性结构两大类数据的存储结构也称数据的物理结构,是指逻辑结构的存储表示,即数据的逻辑结构在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示数据的存储结构主要包括顺序存储结构、链式存储结构、索引存储结构和散列存储结构
31、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储(B)A.数据的处理方法B.数据元素之间的关系C.数据元素的类型D.数据的存储方法在计算机机中存储数据时,通常不仅要存储各数据元素的值,而且还要存储数据元素之间的关系
32、顺序存储结构中数据元素之间的逻辑关系是由(I))表示的A.线性结构B.非线性结构C.指针D.存储位置把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元里,数据元素之间的逻辑关系由存储单元的邻接关系来体现这样的存储结构称为顺序存储结构
33、线性表最多有(A)个结点没有前驱A.1B.2C.3I).0对于非空线性表,数据元素之间存在--对一的关系,具体特性如下
(1)第一个数据元素没有前驱
(2)最后一个数据元素没有后继
(3)其他数据元素都是首尾相接、有且只有一个前驱和后继
34、设线性表有n个元素,以下算法中,(A)在顺序表上实现比在链表上实现效率更高A.输出第i(OWiWn—1)个元素值B.交换第个元素与第1个元素的值C.顺序输出这n个元素的值I).输出与给定值x相等的元素在线性表中的序号顺序表具有简单、存储密度大、空间利用率高、存储效率高等优点但在顺序表中进行插入与删除操作时,往往需要移动大量的数据元素(浪费时间)
35、设线性表中有n个元素,(A)操作,在单链表上实现要比在顺序表上实现效率更高A.删除所有值为x的元素B.在最后一个元素的后面插入一个新元素C.顺序输出前k个元素D.交换第i个元素和第n-i-1个元素的值(i=l,1,…,n)线性表的链式存储结构是用一组任意的存储单元存储线性表中的数据元素,称为线性链表线性链表中的结点可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的在插入和删除操作中,不需要移动大量数据
36、下列关于栈的叙述中正确的是(D)A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表栈是一种插入和删除操作都只能在表的同一端进行的线性表栈中元素是以el,e2,…,en的顺序进栈,而出栈的顺序却是on,…,2,也就是说,栈是按照“先进后出”(first inlast out,FILO)或“后进先出(last infirst out,LIFO)的原则组织数据的所以,栈也被称为后进先出LIFO、先进后出FILO线性表或下推表
37、判定一个顺序表示的栈S(最大元素数量为ni)为空的条件是(A)A.S-top==0B.S-top==-l C.S-top!=m栈顶一A top=0找顶一A top=-l top=-l(a)空(d)两个元素e栈(b)插入元素A后(c)插入元素B、C、出所有元素出D、E、F后栈后栈后
38、判定一个栈S(最大元素数量为m)为栈满的条件是(C)A.S-top!=0B.S-top—m C.S-top==m-lI.S-top!=m-l intMaxSize;〃栈中最大元素个数当栈中己有MaxSize个元素时,如果再进行进栈操作,则会产生溢出,此时称为上溢overflow;而对空栈进行出栈操作时也会产生溢出,此时称为下溢underflow因此,在进行进栈或出栈操作时,应首先检查栈是否为满IsEull或是否为空IsEmpty■IsEmpty的算法return top==T;■IsFull的算法return top==MaxS ize;
39.队列出队操作时,C,A.必须判别队列是否满B.判别队列元素的类型C.必须判别队列是否空D.对队列不作任何判别队列是一种只允许在表的-端进行插入操作,而在表的另一端进行删除操作的线性表队列的插入操作也成为入队,允许入队的一端称为队尾rear:队列的删除操作也称为出队,允许出队的一端称为队头front不含元素的队列称为空队列因此,队列乂称为“先进先出”first infirst out,FIFO或“后进后出”last inlast out,LILO线性表只有队列中有元素时,才可以出队
40.在一个顺序队列中,队尾指针指向队尾元素的D位置A.当前B.下一个C.前一个D.最后采用顺序存储结构的队列称为顺序队列顺序队列通常用一个一维数组来存放队列中的数据元素此外,还需设置两个整型变量front和rear,分别指示队头和队尾,称为头指针和尾指针为了运算的方便,在此约定,在非空队列里,front始终指向队头元素,而rear始终指向队尾元素的下…位置
41.树最适合用来表示DA.有序数据元素B.无序数据元素C.元素之间无联系的数据D.元素之间具有分支层次关系的数据用树型结构表示实体之间联系的层次模型
41.二叉树就是每个结点的度I2的有序树A.大于B.小于C.等于D.小于等于二叉树是由n nNO个结点组成的有限集T当n=0时,称为空二叉树;当n0时,集合T须满足如下条件1有且仅有一个没有前驱的结点,该结点称为二叉树的根结点2将根节点去除后,其余结点可分为两个互不相交的子集T
1、T2,其中每个子集Ti i=l,2乂是一棵二又树,并分别称为根结点的左子树和右子树可见,二叉树就是每个结点的度小于等于2的有序树
42.深度为5的二叉树至多有B个叶子结点。