南开大学复习资料-程序设计基础(下)1.docx

上传人:黑** 文档编号:72046004 上传时间:2022-04-07 格式:DOCX 页数:24 大小:113.06KB
收藏 版权申诉 举报 下载
南开大学复习资料-程序设计基础(下)1.docx_第1页
第1页 / 共24页
南开大学复习资料-程序设计基础(下)1.docx_第2页
第2页 / 共24页
南开大学复习资料-程序设计基础(下)1.docx_第3页
第3页 / 共24页
资源描述:

《南开大学复习资料-程序设计基础(下)1.docx》由会员分享,可在线阅读,更多相关《南开大学复习资料-程序设计基础(下)1.docx(24页珍藏版)》请在装配图网上搜索。

1、程序设计基础(下)课程期末复习资料一、客观部分:(单项选择、多项选择、不定项选择、判断)(一)、选择部分1、下面关于对象概念的描述中,(A )是错误的。A. 对象就是C语言中的结构变量对象代表着正在创建的系统中的一个实体对象是一个状态和操作(或方法)的封装体对象之间的信息传递是通过消息进行的对象是构成世界的一个独立单位(实体),每一个对象具有自己的静态特征和动态特征。 静态特征描述了对象的状态;动态特征描述r对象改变状态或提供服务的行为。2、下面关于类概念的描述中,(A )是错误的。A. 类是抽象数据类型的实现类是具有共同行为的若干对象的统一描述体类是创建对象的样板I).类就是C语言中的结构体

2、类型分类是人类认识客观世界的基本方法,人类认识客观世界是把具有相同性质的对象抽象 成类,例如动物、植物、人类、鸟类等。面向对象方法中的类描述了问题空间中一组有相同的属性(attribute)和方法(method) 的对象,即将对象的静态特征抽象成属性,将对象的动态特征抽象成方法。例如,把所有教 师抽象成教师类,把所有学生抽象成学生类等。3、1.关于类和对象不正确的说法是(C )。A. 类是一种类型,它封装了数据和操作对象是类的实例一个类的对象只有一个一个对象必属于某个类对象是构成世界的个独立单位(实体),每个对象具有自己的静态特征和动态特征。 静态特征描述了对象的状态;动态特征描述了对象改变状

3、态或提供服务的行为。分类是人类 认识客观世界的基本方法,人类认识客观世界是把具有相同性质的对象抽象成类,例如动物、 植物、人类、鸟类等。面向对象方法中的类描述了问题空间中一组有相同的属性(attribute)和方法(method) 的对象,即将对象的静态特征抽象成属性,将对象的动态特征抽象成方法。例如,把所有教 师抽象成教师类,把所有学生抽象成学生类等。实例就是由某个特定的类所描述的一个具体的对象。4、面向对象程序设计思想的主要特征中不包括(I)。A. 封装性多态性继承性功能分解,逐步求精封装性、多态性和继承性是面向面向对象程序设计思想的主要特征,而“功能分解,逐 步求精”是结构化程序设计的主

4、要特征。5、下面对构造函数的不正确描述是(B )。A. 系统可以提供默认的构造函数构造函数可以有参数,所以可以有返回值构造函数可以重载【).构造函数可以设置默认参数对象就是类的一个变后,和其他变后一样,也可以在创建对象时为对象的数据成员赋初 值。在C+中,对象的初始化工作是由一个特殊的成员函数一一构造函数来完成的,该函数 在创建一个对象时被自动调用。设置构造函数的目的主要是用来初始化对象的数据成员。构 造函数可以重载,以满足对象多样性的初始化需要。A. 15163110二又树具有以下儿个基本性质。性质1:在二叉树的第i层上至多有2个结点(iNl)。性质2:深度为k的二叉树至多有2七1个结点。性

5、质3:在二叉树中,若度为0的结点(即叶子结点)数为度为2的结点数为山, 则 no=n2+1 o性质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. 操作系统中的文件目录结构城市交通网络实数集合n维向量树型结构主要是用

6、来表示数据元素之间一对多的关系。而在图结构中,结点之间的关系 可以是任意的,图中任意两个结点都可能相关,图结构可以用来表示数据元素之间多对多的 关系。(二)、判断部分1、在面向对象程序设计中,每个对象可以单独设置属性值。(V )在面向对象方法中,类是一类相同对象的抽象,一个对象是类的一个实例,可以具有单 独的属性值。2、在一个类中最多只能定义1个构造函数和1个析构函数。(X )C+中的构造函数可以有多个,析构函数由于没有参数,因此只能有一个。3、当建立一个新对象时,程序不会自动调用任何函数。(X )C+中,当建立一个新对象时,程序会自动调用构造函数为期成员进行初始化。4、在类内部定义的publ

7、ic数据可以在类外进行存取。(V )C+是通过三个关键字public (公有)、private (私有)以及protected (保护)来指 定类成员的访问限制的。关键字public private和protected被称为访问限定符。类成员 的访问控制实现了类的封装性。(1)公有成员:在public (公有)区域内声明的成员是公有成员。公有成员在程序 的任何地方都可以被访问。一般将公有成员限制在成员函数上,使其作为类与外界的接口, 程序通过这种函数来操作该类的对象。(2)私有成员:在private (私有)区域内声明的成员是私有成员。私有成员只能被 该类的成员函数或该类的友元访问。一般将类的

8、数据成员和不希望外界知道其实现细节的成 员函数声明为private,程序必须通过类的公有成员函数才能间接地访问类的私有成员,从 而实现了对类成员的封装。(3)保护成员:在protected (保护)区域内声明的成员是被保护的成员。被声明为 protected (保护)访问级别的数据成员或成员函数只能在该类的内部或其派生类类体中使 用,这部分内容将在继承与派生部分中详细讲解。5、使用关键字class定义的类中默认的访问权限是公有(public)的 ( X )使用关键字class定义的类中默认的访问权限是私有(private)的。6、说明或定义对象时,类名前面不需要加class关键字。(V )定义

9、对象的过程叫做类的实例化,即由类产生一个具体的对象。在C+中,类是一种用 户自定义的数据类型,与基本数据类型一样,通过定义类的变量(即对象),才能通过对象 来解决实际问题。对象的定义定义对象的一般形式为:类名对象名表;V7、拷贝构造函数通常使用己有对象的引用来初始化创建中的对象。(V )C+中除普通的构造函数外,还有一类特殊的构造函数一一拷贝构造函数。拷贝构造函 数的作用是用一个己经存在的对象来初始化一个正在创建的新对象。拷贝构造函数有如下特 征:(1)拷贝构造函数名与类名相同,形参只有一个,是对象的引用,所以,不能重载拷 贝构造函数。拷贝构造函数的原形为:类名(类名&对象名);(2)拷贝构造

10、函数无任何函数返回类型说明。(3)如果在类声明中没有给出拷贝构造函数,系统会自动给出一个默认的拷贝构造函 数,该拷贝构造函数只进行对象数据成员间的对位拷贝,即所谓的“浅拷贝二(4)在某些情况下,用户必须在类定义中给出一个显式的拷贝构造函数,以实现用户 指定的用个对象初始化另一个对象的功能,即所谓的“深拷贝(5)在以下3种情况下,系统会自动调用拷贝构造函数: 当使用下面的声明语句用一个已存在的对象初始化一个新对象时,系统会自动调用拷 贝构造函数:类名新对象名(己存在对象名);或类名X新对象名*己存在对象名; 对象作为实参,在函数调用开始进行实参和形参结合时,会自动调用拷贝构造函数, 完成由已知的

11、实参对象初始化形参新对象的功能。 如果函数的返回值是类的对象,在函数调用完成返回时,系统自动调用拷贝构造函数, 用return后面的己知对象来初始化一个临时新对象(所创建的临时对象只在外部表达式范 围内有效,表达式结束时,系统将自动调用析构函数撤销该临时对象)。8、在多文件结构汇总,一般将C+中的类声明和类实现分别放到两个文件中。(V )为了实现类的复用,一般将类声明在一个独立的头文件中。C+允许将类的声明和实现 分离。类的声明描述了类的结构,包括类的所有数据成员、函数成员和友元。类的实现定义 了成员函数的具体功能。类的声明和实现放在两个不同的文件中,这两个文件具有相同的文 件名、不同的扩展名

12、。类声明文件的扩展名为“.h”,类实现文件的扩展名为.cpp”。9、类的静态成员函数中不能访问非静态成员。(V )在类的成员前如果加上关键字static修饰的成员就是类的静态成员。类的静态成员包 括静态数据成员和静态成员函数。类的静态成员的特点是:静态成员属于类,不属于任何对象。静态成员函数没有this指针。因此,静态成员函数不能访问一般的数据成员,它 只能访问静态数据成员,也只能调用其他的静态成员函数。无论对象是否存在,类的一个静态数据成员都只有-个,存于公用内存中,可被该 类的所有对象共享。10、C+语言中,既允许单继承,又允许多继承。(V )如果一个派生类是基于一个基类创建的,则该继承关

13、系称为单继承;如果一个派生类是 基于多个基类创建的,则该继承关系称为多继承。11、派生类的继承方式中有两种:公有继承和私有继承(X )派生类的继承方式中有三种:公有继承、私有继承和受保护继承。12、在私有继承中,基类中只有公有成员对派生类是可见的。(X )三种继承方式的对基类成员的访问控制访问控制方式继承方式publicprivateprotectedpublicpublic不可直接访问protectedprivateprivate不可直接访问privateprotectedprotected不可直接访问protected13、当类的继承方式为公有继承时,基类的私有成员在派生类中不可直接访问。

14、(V三种继承方式的对基类成员的访问控制14、通过指针或引用可以调用不同对象相同名称的函数,但可导致完全不同的行为的现象称 为二义性。(X )访问控制方式继承方式publicprivateprotectedpublicpublic不可直接访问protectedprivateprivate不可直接访问privateprotectedprotected不可直接访问protected通过指针或引用可以调用不同对象相同名称的函数,但可导致完全不同的行为的现象称 为多态。15、在C+中,虚函数帮助实现了类的封装性。(X )C+通过虚函数实现“动态绑定”技术。虚函数的声明方法是在基类的函数声明前或函 数定义

15、的函数头前(无函数声明时)加上virtual关键字16、定义虚函数所用的关键字是class。( X )定义虚函数所用的关键字是virtualo C+通过虚函数实现动态绑定”技术。虚函数 的声明方法是在基类的函数声明前或函数定义的函数头前(无函数声明时)加上virtual 关键字17、多态性是指同样的消息被不同对象接收时可产生不同的行为。(X )多态性是指同样的消息被不同对象接收时可产生不同的行为。18、具有纯虚函数的类是抽象类,它的特点是不可以定义对象。(V )C+还提供了种“抽象类”。抽象类不能实例化对象,它的唯用途是为其他类提供合 适的基类,其他类可从它这里继承和(或)实现接门。一个类是抽

16、象类还是具体类,主要看其是否包含纯虚函数,包含纯虚函数的类就是抽象 类。纯虚函数就是在声明时初始化为()、没有函数体的虚函数,其声明形式为:virtual函数类型纯虚函数名(形参类型表)=0;19、含有虚函数的类是抽象类。(X )含有纯虚函数的类是抽象类,而不是虚函数。20、定义纯虚函数所用的关键字是purevirtuaL ( X )C+还提供了一种“抽象类”。抽象类不能实例化对象,它的唯一用途是为其他类提供合 适的基类,其他类可从它这里继承和(或)实现接口。一个类是抽象类还是具体类,主要看其是否包含纯虚函数,包含纯虚函数的类就是抽象 类。纯虚函数就是在声明时初始化为0、没有函数体的虚函数,其

17、声明形式为:virtual函数类型纯虚函数名(形参类型表)=0;21、C+中ostream类的直接基类是ios。( V )计算机所做的任何数据处理工作都是在内存中进行。一般来说,待处理的数据是从输入 设备获取,而处理结果则会输出到输出设备上。输入/输出(Input/Output,简称为I/O) 是数据传送的过程,其中,输入是指将数据从输入设备传送到内存的过程,而输出则是指将 数据从内存传送到输出设备的过程。C+将数据的输入/输出过程形象地称为流,并定义了相 应的输入/输出流类和一些代表标准输入/输出设备的流对象,以方便数据的输入/输出操作。 C+用继承方法建立了 I/O流类库,其类层次关系如下

18、图所示。图I/O流的类层次关系其中,streambuf类和ios类是两个平行的基类,其他类都是它们的直接或间接派生类。 streambuf类为输入/输出操作提供内存缓冲区支持;filebuf类从streambuf派生,为文件 输入/输出操作提供内存缓冲区支持。在进行输入/输出操作时,数据会先放在缓冲区中,待 缓冲区满或遇到结束符时,才真正进行数据读写操作。ios类是一个抽象基类,提供一些对 流状态、工作方式等设置的功能。通过对ios类进行虚拟继承得到istream类和ostream 类两个派生类。输入流类istream提供输入操作功能,输出流类ostroam提供输出操作功能。 输入/输出流类i

19、ostream是对istream类和ostream类进行多重继承得到的派生类,同时具 有输入、输出功能。istream类是istream类的派生类,用于支持从磁盘文件的输入操作 (即从文件中读取数据到内存中);ofstream类是ostream类的派生类,用于支持向磁盘文 件的输出操作(即将内存中的数据写入到文件中);fstream类是iostream类的派生类,支 持磁盘文件的输入/输出操作。编写程序时,如果使用输入/输出操作,则需要包含头文件 iostream;如果使用文件输入/输出操作,则需要包含头文件fstream。22、C+中,预定义的提取符和插入符是不可以重载的。(X )输入/输出

20、操作时经常使用的和“”分别是。stream类和istream类中重载的 运算符。系统提供的istream类也己经对“”进行了多次重载,能够用于处理对多种内部类型 数据的输入操作。重载的形式如下:istre”运算符重载系统提供的osiream类已经对进行了多次重载,能够实现对不同类型数据的输出 操作。重载的形式如下:ostream& operator(int):/将内存中的一个int型数据输出到输出设备ostream& operator (double) ;/将内存中的一个double型数据输出到输出设备ostream& operator(char*); 将内存中的一个字符串数据输出到输出设备/

21、对其他类型数据的运算符重载23、cin是输出流的一个对象,处理标准输出。(V )cout是输出流的一个对象,处理标准输出。24、使用打开文件函数open ()之前,需要定义一个流类对象,使用open ()函数来操作该对 象。(V )对文件进行输入/输出即读/写操作,必须先定义文件流对象并打开某个文件(即将流对 象与文件建立关联);然后,就可以使用流对象进行文件的读/写操作;操作完毕后关闭文件 (即将流对象与文件的关联断开)。定义文件流对象实际上就是使用文件流类定义类对象,与前面学习的定义类对象的方法 完全相同。打开文件使用文件流类的成员函数open。,其函数原型为:void open(cons

22、t char* filename, int mode):filename是要打开的文件名,mode是文件的打开方式25、以app方式打开文件时,当前的读指针和写指针都定位于文件头。(V )以app方式打开文件时,当前的读指针和写指针都定位于文件尾。26、get line ()函数从流中提取终止字符,但终止字符被丢弃。(V )输入流类提供了用于输入字符串的成员函数getlineO,输入流对象可以调用这个函数 实现从输入设备读取-个字符串的操作。getline()有3个参数,输入流对象调用getline()的格式为:in. getlino(字符数组名或字符型指针,字符个数n,终止标识符)其中,in

23、为输入流对象,既可以是cin对象,也可以是自定义的文件流对象。函数调用时,从输入设备读取n-1个字符,并在其后加上字符串结束符0,构成一个 字符串存入第1个参数所指向的内存空间中。若在读取够n-1个字符前遇到由第3个参数指 定的终止标识符,则提前结束读取。终止标识符参数的默认值是n,也可以通过传递实参 指定为其他字符。若读取成功,函数返回值为真(非0)值,若读取失败(遇到文件结束符 EOF),函数返回值为假(0)值。27、使用模板可以减少重复劳动,提高代码重用率。(V )泛化编程是对抽象的算法的编程,泛化是指可以广泛的适用于不同的数据类型。模板是 泛化编程的主要方法之模板的特点在于它的参数不仅

24、是我们传统函数中所说的数值形式 的参数,还可以是一种类型。28、一个函数模板只生成一个模板函数。(X )函数模板只是一个模板,需要实例化为具体的函数后才能使用,即需要将模板中数据类 型形参实例化为确定的数据类型。实例化的函数模板称为模板函数。根据数据类型的不同, 可以生成多个模板函数。29、类模板可以生成若干个模板类,每个模板类又可定义若干个对象 ( V )类模板与函数模板一样也不能直接使用,必须先实例化为相应的模板类,创建该模板类 的对象后才能使用。类模板实例化后称为模板类,模板类具有和普通类相同的行为。类模板 可以生成若干个模板类,每个模板类又可定义若干个对象。30、数据结构中的数据元素是

25、数据的不可分割的最小单位 ( X )数据项是数据的不可分割的最小单位,又称数据域。数据项是数据结构中讨论的最小单 位,数据元素是数据项的集合。31、数据的存储结构是指对数据进行存储时,各数据元素在计算机中的存储关系。(X ) 数据结构是研究计算机的操作对象(数据)以及它们之间的关系和操作等的学科,目的是提高计算机的数据处理效率并节省存储空间。数据结构主要研究下面3个方面的问题:(1)数据的逻辑结构:在数据集合中,各种数据元素之间固有的逻辑关系。(2)数据的存储结构:在对数据进行存储时,各数据元素在计算机中的存储关系。(3)数据结构的操作:各种数据结构要进行的操作,以及基于计算机中的存储方式如何

26、 实现这些操作。各种数据结构的操作有所不同,但一般都包含插入、删除、查找、更新、排 序等常用的基本操作。32、线性结构只能用顺序存储结构表示 ( V )线性结构既可以用顺序存储结构表示、也可以用链式结构表示。33、线性表的逻辑顺序与物理顺序总是一致的。(X )线性表的链式存储中,逻辑顺序与物理顺序往往是不-致的。34、在需要经常做元素随机访问操作的情况下,线性表的顺序存储结构比链式存储结构更好。 (V )在需要经常做元素随机访问操作的情况下,线性表的顺序存储结构比链式存储结构更 好。在经常进行插入和删除操作的情况下,线性表的链式存储结构比顺序存储结构更好。35、对链表进行插入和删除操作时,需要

27、移动链表中的结点。( X )对链表进行插入和删除操作时,不需要移动链表中的结点,只需要修改指针的指向即可。36、栈是操作受限的线性表,只允许在表的一端进行元素插入操作、在另一端进行元素删除 操作。(V )栈是操作受限的线性表,只允许在表的一端进行元素插入和删除操作。37、进栈操作,在顺序存储结构上需要考虑“溢出”情况。(X )进栈操作,在顺序存储结构上因为要提前确定栈的最大规模,因此需要考虑“溢出”情 况,链式存储结构则通常认为内存足够大,不需要考虑溢出。38、对同一输入序列进行两次不同的合法的入栈和出栈操作,所得的输出序列不一定相同。 (V )对同一输入序列进行两次不同的合法的入栈和出栈操作

28、,由于其先进后出的性质,所得 的输出序列不一定相同。39、在用顺序表表示的循环队列中,口用表示队列元素数量的成员变量作为区分队空或队满 的条件( A )要解决判断循环队列是“空”还是“满”的问题,可以采用以下两种方法:(1) 约定少用一个元素空间。入队前,如果关系(rear+1)%MaxSize=frontw存在, 就认为队列已满,再要插入就会发生溢出。可见,这种方法rear始终指向那个空闲的元素 空间。(2) 使用一个计数器size记录当前队列的实际长度。如果size=0,则当front=rear” 时,当前队列是空队列,可以进行入队操作;否则,当前队列满,不能进行入队操作。40、队列是一种

29、插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。 (V )队列是种插入与删除操作分别在表的两端进行的线性表,是种先进先出型结构。41、在通信、数据压缩等领域被广泛应用的哈夫曼树采用的是二叉树结构。(A )在通信、数据压缩等领域被广泛应用的哈夫曼树采用的是二叉树结构。42、由于顺序表示完全二叉树时空间利用率较低,因此,二叉树的顺序表示在实际中应用很 多。(XX )由于顺序表示非完全二叉树时空间利用率较低,因此,二叉树的顺序表示在实际中应用 不多。43、满二叉树是完全二叉树。(X )满二叉树和完全二叉树是两种特殊形态的二叉树。满二叉树是指除了最后一层的结点为叶子结点外其它结点都有左

30、、右两棵子树的二叉 树。完全二叉树是指其结点与相同深度的满二叉树中的结点编号完全一致的二叉树。44、无向图的邻接矩阵是对称的。(X )无向图的邻接矩阵是对称的,有向图的邻接矩阵不是对称的。45、在图的一条路径中,若一个顶点至多只经过一次,则该路径称为简单路径。(V )在-条路径中,若一个顶点至多只经过一次,则该路径称为简单路径;若组成路径的顶 点序列中第一个顶点与最后一个顶点相同,则该路径称为回路(或环);在一个回路中,若 除第一个顶点与最后一个顶点外,其他顶点只出现一次,则该I可路称为简单I珂路(或简单环)。46、在有n个顶点的有向图中,每个顶点的度最大可达n-U ( X )在有向图G中,若

31、存在EE(G),则称顶点vi邻接到顶点vj,或顶点vj邻接 自顶点时。以顶点vi为弧头的弧的数目称为顶点vi的入度:以顶点vi为弧尾的弧的数目 称为vi的出度;顶点vi的入度和出度之和称为vi的度。因此,在有n个顶点的有向图中, 每个顶点的度最大可达2n-2o47、广度优先遍历类似于树的逐层遍历。(V )图的遍历是指从某一顶点出发按照某种规则依次访问图中的所有顶点,且每个顶点只被 访问-次。根据搜索路径的不同,图的遍历通常采有两种方法:广度优先遍历和深度优先遍 历。广度优先遍历类似于树的逐层遍历,即先从某一个顶点开始访问,然后访问与该顶点相 邻接且未被访问过的顶点集VI (G),再访问与VI

32、(G)中顶点相邻接且未被访问过的顶点集 V2 (G),重复该过程直至与初始顶点连通的所有顶点都被访问完。对于非连通图或非强连通 图,还要从某一个未被访问的顶点开始重复上一过程,直至所有顶点访问完毕。深度优先遍历类似于树的先序遍历,即从某一个顶点开始访问,访问后将该顶点去除得 到若干子图,对每个子图再依次进行深度优先遍历。二、主观部分:(一)、程序填空部分1、下面程序中用来求数组元素的和。请将程序补充完整,使程序的输出为:s=150 #include using namespace std;class IntArrayprivate:int Size;int *p;public:IntArray

33、0(Size=O;p=NULL;)IntArreiy(int *aa, int n)(Size=n;p=new intn:for(int i=O;in;i+)*(p+i)=*(aa+i);IntAiray ()(delete p;int GelValue(inl i)1return *(p+i););int main()(int b5 = (5,20, 15,35,25;IntArray a(b, 5);int i=0, s=0;for(;i5;i+)s+=a. GotValue(i);cout,/s=?zsendl;return 0;)考核知识点:C+中的类和对象参见讲稿章节:7-2一一7-

34、4附2.1.1:(考核知识点解释)详见教材7-27-4 o2、下面的程序是在ARRAY类中重载运算符,程序的运行结果为“A3=4”,请将程序补充 完整。#include using namespace std;class ARRAYprivate:int *v;int s;public:ARRAY( int a, int n );ARRAY()(delete v;)int sizeO(return s;int& operator(int i););ARRAY:ARRAY(int a, int n)if( n=0 )(v=NULL;s=0;return;s=n;v= new ints;for(i

35、nt i=0; in; i+)vi=ai;)int& ARRAY:operator (int i)(return v i;)int main()int a5 = (l, 2, 3, 4, 5);ARRAY A (a,5);cout,A3=/z A 3;return 0;考核知识点:自定义类的运算符重载参见讲稿章节:7-12附2. 1.2:(考核知识点解释)详见教材7-123、下面程序中用来求数组元素的最大值。请将程序补充完整,使程序的输出为:睥x=30。 include using namespace std;class SHUZU(private:int Size;int *p;public

36、:SIIUZUO(Size=0;p=NULL;SHUZU(int *aa, int n)(Size=n;p二new intn;for(int i=0;in;i+)*(p+i)=*(aa+i);SHUZU ()delete p;)int GctValuc(int i)(return *(p+i););int main()int a7 = (25, 15,10,30,20,3,7;SHUZU A (a, 7);int max;max二A. GelValue(l);if (maxA. GetValue(i) max=A. GetValue(i);)cout,mcxx=z,maxendl;return

37、 0;)考核知识点:C+中的类和对象参见讲稿章节:7-2一一7-4附2.1.3:(考核知识点解释)详见教材7-27-44、下面的程序是在str类中重载运算符二,请将程序补充完整,使程序的输出结果为: he she he heSinclude using namespace std;class str(private:char *st;pub 1ic:str(char *a)(set (ci);str & operator/ str& a )(delete st;set (a. st);return *this;void show()(coutstendl;str()(delete st;voi

38、d set (char *s)st=new charstrlen(s)+l; strepy(st, s);构造函数是一类特殊函数,其特点如下: 构造函数名必须与类名相同。 构造函数没有任何函数返回类型,void也不行。 任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成 员的初始化工作。 如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数:类名()6、下列(A )是构造函数的特征。A. 构造函数在创建对象时自动调用构造函数不可以重载构造函数不可以设置默认参数构造函数必须指定函数类型考核知识点:构造函数参见讲稿章节:7-2附1.1.6 (考核知识点解释)

39、对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初 值。在C+中,对象的初始化工作是由个特殊的成员函数一一构造函数来完成的,该函数 在创建一个对象时被自动调用。设置构造函数的目的主要是用来初始化对象的数据成员。构 造函数可以重载,以满足对象多样性的初始化需要。构造函数是一类特殊函数,其特点如下: 构造函数名必须与类名相同。 构造函数没有任何函数返回类型,void也不行。 任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成 员的初始化工作。 如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数:类名()7、有关构造函数说法不正确的

40、是(D)。A. 构造函数的名字和类的名字一样在创建对象时,系统白动调用构造函数构造函数无任何函数类型I).构造函数有且只有一个考核知识点:构造函数参见讲稿章节:7-2附1.1.7 (考核知识点解释)对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初 值。在C+中,对象的初始化工作是由个特殊的成员函数一一构造函数来完成的,该函数 在创建一个对象时被自动调用。设置构造函数的目的主要是用来初始化对象的数据成员。构 造函数可以重载,以满足对象多样性的初始化需要。构造函数是一类特殊函数,其特点如下: 构造函数名必须与类名相同。 构造函数没有任何函数返回类型,void也不行。 任

41、意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成 员的初始化工作。 如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数:类名()8、( B )的功能是对对象进行初始化。A. 析构函数数据成员构造函数;int mainO(str si(he), s2(she);si. show();s2. show ();s2=slsi. show();s2. show();)考核知识点:自定义类的运算符重载,构造函数,析构函数参见讲稿章节:7-12, 7-2, 7-4附2.1.4:(考核知识点解释)详见教材7-12, 7-2, 7-4(二)、读程序写结果题1、已知结点

42、类和二叉链表表示二叉树类的声明如下:itincludeusing namespace std;/节点类class Nodefriend class LinkedBinTree;public:Node(const int &x)(m_pLeftChild = m_pRightChild = NULL;mdata = x;private:int m_data;Node *m pLeftChild, *m pRightChild;);二叉链表表示二叉树类class LinkcdBinTroopublic:LinkedBinTreeO ;/ 创建空二叉树Node* CreateRoot (const

43、int &x);/以指定元素值创建根结点/将一个结点作为指定结点的左孩子插入Node* InsertLeftChild(Node *pNode, const int &x);/将一个结点作为指定结点的右孩子插入Node* InsertRightChild(Node *pNode, const int &x);/获取指定结点的元素值bool GetNodeVa1ue(Node *pNode, int &x);/获取指定结点的左孩子结点Nod(、* GetLeftChi ld(Node *pNode);/获取指定结点的右孩子结点Node* GetRightChiId(Node *pNode):pr

44、ivate:Node *m_pRoot; 指向根结点的指针;void BinTreeTraverse(LinkedBinTree ftbtree, Node *pXode)(int x;if (pNode = NULL) return;bt ree. GetNodeValue (p()dc, x);cout x;BinTreeTraverse(btrec, btree. GetLeftChi Id (pNod();BinTreeTraverse(btree, btree. GetRightChiId(pNode);)/ LinkedBinTree的其他成员函数的实现略int main()(Li

45、nkedBinTree btree;Node *pNodel, *pNode2, *pNode3, *pNode4, *pNode5, *pNode6, *pNode7, *pNode8,*pNode9;pNode1 = btree. CreateRoot(1):pNode2 = btree. InsertLeftChildCpNodel, 2);pNode3 = btree. lnsertRightChild(pNodel, 3);pNode4 = btree. InsertLeftChild(pNode2, 4);pNode5 = btree. InsertLeftCh i1d(pNode

46、3, 5);pNode6 = btree. InsertRightChild(pNode3, 6);pNodc7 = btree. InsertLcftChild(pNode4, 7):pNode8 = btree. InsertRightChild(pNode4, 8);pNode9 = btree. InsertLeftChild(pNode6, 9);BinTreeTraverse(btree, pNode2);cout endl;BinTreeTraverse(btree, pNode3);cout endl;return 0;)请写出执行主函数后在屏幕上的输出结果。考核知识点:二叉树

47、的遍历及常用操作参见讲稿章节:14-4答案:247835692、已知结点类模板和链接队列类模板的声明如下: /存储结点类templateclass LinkNodc 结点类templatefriend class LinkQueue;/将链接队列类声明为友类 public:LinkNodcO ;/构造函数 private:结点元素*next;指向下一个结点的指针T data;LinkNode :;TTT/链接队列类 templateclass class LinkQucuo public:/创建空队列/删除队列IsEmpty(); 判断队列是否为空,空返I可true,非空返回falseInse

48、rt (const T& x);入队,在队列尾部插入元素xGetElcmcnt (T& x):/求队头元素的值放入x中Delete(T& x);出队,从队头删除一个元素,并将该元素的值放入x中OutPut (ostreamfe out) const; 输出队列LinkQueueO ;LinkQueue();boolboolboolboolvoidprivate:int size;/队列实际元素个数LinkNode* front, *rear; /队列的队头和队尾指针 ); int main()int xl, x2, x3; LinkQueue q;q. Insert (1);q. Insert

49、 (1);q. Delete(xl);q. GetElement (x2); x3 = xl+x2;q. Insert(x3); coutx3endl;q. Delete(xl);q.GetElement(x2); x3 = xl+x2;coutx3endl;return 0;请写出主函数main执行后在屏幕上的输出结果。考核知识点:队列的表示与实现参见讲稿章节:13-4答案:2 3、已知顺序表类模板的C+描述如下: templateclass LinearListpublic:LinearList (int LLMaxSize) ;/构造函数,创建空表LinearList();析构函数,删除

50、表LinearList& Insert(int k, const T& x);在第k个位置插入元素x,返回插入后的线性表 bool IsEmpty() const;判断表是否为空,表空返回true,表非空返回false int GetLengthO const; /返回表中数据元素的个数 bool GetData(int k,T& x):将表中第k个元素保存到x中,不存在则返回false bool ModifyData(int k,const T& x):将表中第k个元素修改为x,不存在则返回falseint Find (const T& x);/返回x在表中的位置,如果x不在表中返回0Lin

51、carList& DeletcBylndex(const int k, T& x):删除表中第k个元素,并把它保存到x中,返回删除后的线性表 LinearList& DeleteByKey(const T& x, T& y);删除表中关键字为x元素,返回删除后的线性表 void OutPut(ostream& out) const;/将线性表放到输出流out中输出);int main()private:int length; int MaxSize;当前数组元素个数 线性表中最大元素个数T *element;一维动态数组int x;IntegerLList. Insert (1,50);Lin

52、earListIntegerLList(10);IntegerLList. Insert(1, 100);IntegerLList. Insert(1,150);IntegerLList. Insert(1, 250);coutIntegerLList. GetLengthO endl;IntegerLList. GetData(3, x);coutxendl;return 0;)请写出主函数main执行后在屏幕上的输出结果。考核知识点:线性表的顺序存储结构与实现参见讲稿章节:12-2答案:41004、已知结点类模板和链接队列类模板的声明如下:存储结点类templateclass LinkNo

53、de /结点类tcmplatcfriend class LinkQueue;/将链接队列类声明为友类public:LinkNode0 ;/构造函数private:T data;结点元素LinkNode *next;指向下一个结点的指针);/链接队列类templateclass LinkQueue(public:LinkQueue();/创建空队列LinkQueue ();/删除队列bool IsEmpty () ; /判断队列是否为空,空返回true,非空返回falsebool Insert (const T& x) ;/入队,在队列尾部插入元素xbool GetElement (T& x):

54、/求队头元素的值放入x中bool Delete(T& x); 出队,从队头删除一个元素,并将该元素的值放入x中 void Output (ostrean)& out) const: /输出队列private:int size;队列实际元素个数LinkNode* front, *rear;/队列的队头和队尾指针);int main()int xl, x2, x3;LinkQueue q;q. Insert(5);q. Insert (8);q. Delete(xl);q. GetElement (x2);x3 = xl+x2;q. Insert (x3);coutx3endl;q. Delete

55、(xl);q. GetElement (x2);x3 = xl+x2;coutx3endl;return 0;)写出主函数ma i n执行后在屏幕上的输出结果。考核知识点:队列的实现参见讲稿章节:13-4答案:13215、己知顺序表类模板的C+描述如卜.:templateclass LinearList(public:LinearList (int LLMaxSizc) ;/构造函数,创建空表LinearList0 ;析构函数,删除表LincarList& Insert(int k, const T& x);在第k个位置插入元素x,返回插入后的线性表 bool IsEmpty() const;

56、判断表是否为空,表空返回true,表非空返回false int GetLengthO const; /返回表中数据元素的个数 bool GetData(int k,T& x);将表中第k个元素保存到x中,不存在则返回false bool ModifyData(int k,const T& x);将表中第k个元素修改为x,不存在则返回falseint Find (const T& x);/返回x在表中的位置,如果x不在表中返回0LinearList& DeleteBylndex(const int k, T& x):删除表中第k个元素,并把它保存到x中,返回删除后的线性表 LinearList&

57、 DeleteByKey(const T& x,T& y):删除表中关键字为x元素,返回删除后的线性表 void OutPut(ostrcam& out) const;/将线性表放到输出流out中输出private:int length;当前数组元素个数int MaxSize;线性表中最大元素个数T *element;一维动态数组);int main()LincarList IntcgcrLList(10);int i,x;for(i=l;ill;i+)IntegerLList. Insert(i, i*5);for(i=2;i=3;i+)(IntegerLList. De 1eteByInd

58、ex (i,x); coutxendl;coutendl;return 0;)请写出主函数main执行后在屏幕上的输出结果。考核知识点:线性表的顺序存储结构与实现参见讲稿章节:12-2答案:10206、已知结点类模板和二叉树二叉链表表示类模板的声明如下:/结点类模板templateclass LinkedNodctemplatefriend class LinkedBinTree;public:LinkedNode(); 构造函数LinkedNode(const T &x); /构造函数private:T m_data;LinkedNode *m_pLeftChiId, *m_pRightCh

59、ild;);/ LinkedNode成员函数的实现略/二叉树二叉链表表示类模板templateclass LinkedBinTree(pub 1ic:LinkedBinTree(); / 创建空二叉树LinkedBinTreeO; / 删除二叉树bool IsEmptyO ;/判断二叉树是否为空LinkedNode* CreateRoot (const T &x);/ 以指定元素值创建根结点void Clear 0 ;/ 清空二叉树LinkedNodc* GctRootO; / 获取根结点/将一个结点作为指定结点的左孩子插入LinkedNode* InsertLeftChild(LinkedN

60、ode *pNode, const T &x);/将一个结点作为指定结点的右孩子插入LinkedNode* InsertRightChiId(LinkedNode *pNode, const T &x);/修改指定结点的元素值bool ModifyNodeValue(LinkedNode *pNode, const T &x);/获取指定结点的元素值bool GetNodeVa1ue(Li nkedNode *pNode, T &x);/获取指定结点的左孩子结点LinkedNode* GetLeftChi1d(LinkedNode *pNode);/获取指定结点的右孩子结点LinkedNode* GetRightChiId(LinkedNodo *pNode);/删除以指定结点为根的子树void DeleteSubTree(LinkedNode *pNode);private:LinkedNode *m_pRoot; 指向根结点的指针);template void BinTrceTrave

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!