程序设计基础下南开大学.docx
《程序设计基础下南开大学.docx》由会员分享,可在线阅读,更多相关《程序设计基础下南开大学.docx(70页珍藏版)》请在冰豆网上搜索。
程序设计基础下南开大学
《程序设计基础(下)》课程期末复习资料
一、客观部分:
(单项选择、多项选择、不定项选择、判断)
(一)、选择部分
1.下面关于对象概念的描述中,()是错误的。
A.对象就是C语言中的结构变量
B.对象代表着正在创建的系统中的一个实体
C.对象是一个状态和操作(或方法)的封装体
D.对象之间的信息传递是通过消息进行的
★考核知识点:
对象
参见讲稿章节:
7-1
附1.1.1(考核知识点解释):
对象是构成世界的一个独立单位(实体),每一个对象具有自己的静态特征和动态特征。
静态特征描述了对象的状态;动态特征描述了对象改变状态或提供服务的行为。
2、下面关于类概念的描述中,()是错误的。
。
A.类是抽象数据类型的实现
B.类是具有共同行为的若干对象的统一描述体
C.类是创建对象的样板
D.类就是C语言中的结构体类型
★考核知识点:
类
参见讲稿章节:
7-1
附1.1.2(考核知识点解释):
分类是人类认识客观世界的基本方法,人类认识客观世界是把具有相同性质的对象抽象成类,例如动物、植物、人类、鸟类等。
面向对象方法中的类描述了问题空间中一组有相同的属性(attribute)和方法(method)的对象,即将对象的静态特征抽象成属性,将对象的动态特征抽象成方法。
例如,把所有教师抽象成教师类,把所有学生抽象成学生类等。
3、1.关于类和对象不正确的说法是()。
A.类是一种类型,它封装了数据和操作
B.对象是类的实例
C.一个类的对象只有一个
D.一个对象必属于某个类
★考核知识点:
类和对象之间的关系
参见讲稿章节:
7-1
附1.1.3(考核知识点解释):
对象是构成世界的一个独立单位(实体),每一个对象具有自己的静态特征和动态特征。
静态特征描述了对象的状态;动态特征描述了对象改变状态或提供服务的行为。
分类是人类认识客观世界的基本方法,人类认识客观世界是把具有相同性质的对象抽象成类,例如动物、植物、人类、鸟类等。
面向对象方法中的类描述了问题空间中一组有相同的属性(attribute)和方法(method)的对象,即将对象的静态特征抽象成属性,将对象的动态特征抽象成方法。
例如,把所有教师抽象成教师类,把所有学生抽象成学生类等。
实例就是由某个特定的类所描述的一个具体的对象。
4、面向对象程序设计思想的主要特征中不包括()。
A.封装性
B.多态性
C.继承性
D.功能分解,逐步求精
★考核知识点:
面向对象程序设计思想
参见讲稿章节:
7-1
附1.1.4(考核知识点解释)
封装性、多态性和继承性是面向面向对象程序设计思想的主要特征,而“功能分解,逐步求精”是结构化程序设计的主要特征。
5、下面对构造函数的不正确描述是()。
A.系统可以提供默认的构造函数
B.构造函数可以有参数,所以可以有返回值
C.构造函数可以重载
D.构造函数可以设置默认参数
★考核知识点:
构造函数
参见讲稿章节:
7-2
附1.1.5(考核知识点解释)
对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初值。
在C++中,对象的初始化工作是由一个特殊的成员函数——构造函数来完成的,该函数在创建一个对象时被自动调用。
设置构造函数的目的主要是用来初始化对象的数据成员。
构造函数可以重载,以满足对象多样性的初始化需要。
构造函数是一类特殊函数,其特点如下:
①构造函数名必须与类名相同。
②构造函数没有任何函数返回类型,void也不行。
③任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成员的初始化工作。
④如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数:
<类名>(){}
6、下列()是构造函数的特征。
A.构造函数在创建对象时自动调用
B.构造函数不可以重载
C.构造函数不可以设置默认参数
D.构造函数必须指定函数类型
★考核知识点:
构造函数
参见讲稿章节:
7-2
附1.1.6(考核知识点解释)
对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初值。
在C++中,对象的初始化工作是由一个特殊的成员函数——构造函数来完成的,该函数在创建一个对象时被自动调用。
设置构造函数的目的主要是用来初始化对象的数据成员。
构造函数可以重载,以满足对象多样性的初始化需要。
构造函数是一类特殊函数,其特点如下:
①构造函数名必须与类名相同。
②构造函数没有任何函数返回类型,void也不行。
③任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成员的初始化工作。
④如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数:
<类名>(){}
7、有关构造函数说法不正确的是()。
A.构造函数的名字和类的名字一样
B.在创建对象时,系统自动调用构造函数
C.构造函数无任何函数类型
D.构造函数有且只有一个
★考核知识点:
构造函数
参见讲稿章节:
7-2
附1.1.7(考核知识点解释)
对象就是类的一个变量,和其他变量一样,也可以在创建对象时为对象的数据成员赋初值。
在C++中,对象的初始化工作是由一个特殊的成员函数——构造函数来完成的,该函数在创建一个对象时被自动调用。
设置构造函数的目的主要是用来初始化对象的数据成员。
构造函数可以重载,以满足对象多样性的初始化需要。
构造函数是一类特殊函数,其特点如下:
①构造函数名必须与类名相同。
②构造函数没有任何函数返回类型,void也不行。
③任意一个新的对象被创建时,编译系统都会自动调用构造函数,完成对该对象数据成员的初始化工作。
④如果在类定义时没有给出构造函数,系统会自动提供一个默认的无参构造函数:
<类名>(){}
8、()的功能是对对象进行初始化。
。
A.析构函数
B.数据成员
C.构造函数
D.静态数据成员
★考核知识点:
构造函数
参见讲稿章节:
7-2
附1.1.8(考核知识点解释)
C++中是通过构造函数对对象进行初始化的。
9、3.下面对友元的描述错误的是()。
A.关键字friend用于声明友元
B.一个类的成员函数可以是另一个类的友元
C.友元函数访问对象的成员不受访问特性影响
D.友元函数通过this指针访问对象成员
★考核知识点:
类的友员
参见讲稿章节:
7-10
附1.1.9(考核知识点解释)
在程序中,如果普通函数或另一个类中的函数需要经常通过类提供的公有接口来间接地访问类的私有成员或保护成员,为了提高程序运行的效率,可以将普通函数声明为类的朋友——友元,它们就可以直接访问类的任何成员了。
友元提供了一个一般函数与类的成员之间、不同类的成员之间进行数据共享的机制。
10、3.一个类的友元函数能够访问该类的()。
A.私有成员
B.保护成员
C.公有成员
D.所有成员
★考核知识点:
类的友员
参见讲稿章节:
7-10
附1.1.10(考核知识点解释)
在程序中,如果普通函数或另一个类中的函数需要经常通过类提供的公有接口来间接地访问类的私有成员或保护成员,为了提高程序运行的效率,可以将普通函数声明为类的朋友——友元,它们就可以直接访问类的任何成员了。
11、友元访问类对象的成员时使用()。
A.类的成员名
B.“this->成员名”的形式
C.“类名:
:
成员名”的形式
D.“类名:
:
成员名”的形式##“对象名.成员名”的形式
★考核知识点:
类成员的访问及类的友员
参见讲稿章节:
7-2和7-10
附1.1.11(考核知识点解释)
一个对象创建以后,访问它的数据成员和调用它的成员函数,可通过对象名和对象成员访问运算符“.”,或对象指针和箭头成员访问运算符“->”两种方式完成。
访问对象数据成员的一般形式为:
<对象名>.数据成员名
或
<指向对象的指针名>->数据成员名
调用对象成员函数的一般形式为:
<对象名>.成员函数名([实参])
或
<指向对象的指针名>->成员函数名([实参])
在程序中,如果普通函数或另一个类中的函数需要经常通过类提供的公有接口来间接地访问类的私有成员或保护成员,为了提高程序运行的效率,可以将普通函数声明为类的朋友——友元,它们就可以直接访问类的任何成员了。
12、下面选项中,是类的成员函数为()
A.构造函数
B.析构函数
C.友元函数
D.缺省参数的构造函数
★考核知识点:
构造函数、析构函数、友元函数
参见讲稿章节:
7-2、7-4和7-10
附1.1.12(考核知识点解释)
友元函数虽然可以访问类的任何成员,但不是类的成员函数。
13、对基类和派生类的描述中错误的是()。
A.派生类是基类的具体化
B.基类继承了派生类的属性
C.派生类是基类定义的延续
D.派生类是基类的特殊化
★考核知识点:
继承
参见讲稿章节:
8-1
附1.1.13(考核知识点解释)
派生类所表示的事物是基类所表示事物的子集(即派生类所表示的事物比基类更具体)。
因此,在一个继承关系中,“派生类事物是基类事物”这句话肯定成立,但反过来却不行。
例如,对于Teacher类和Person类的继承关系来说,Teacher类是派生类,Person类是基类,显然“Teacher是Person”这句话是正确的,而反过来说“Person是Teacher”则不行。
我们在定义继承关系时可以参照上述方法来检验所定义的继承关系是否合理。
14、继承具有(),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性
B.传递性
C.重复性
D.多样性
★考核知识点:
继承
参见讲稿章节:
8-1
附1.1.14(考核知识点解释)
继承具有传递性,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
15、在C++中,能被派生类继承的函数是()。
A.成员函数
B.构造函数
C.析构函数
D.拷贝构造函数
★考核知识点:
继承
参见讲稿章节:
8-1
附1.1.15(考核知识点解释)
在C++中,成员函数能够被派生类继承。
16、通过类型兼容,对于基类及其公有派生类的对象,可以使用相同的函数统一进行处理。
比如,函数参数是基类类型,而实际调用该函数时既可以传入基类对象,也可以传入派生类对象,这就是()。
A.继承
B.多态
C.派生
D.基类
★考核知识点:
多态
参见讲稿章节:
8-2
附1.1.16(考核知识点解释)
通过类型兼容,对于基类及其公有派生类的对象,可以使用相同的函数统一进行处理。
比如,函数参数是基类类型,而实际调用该函数时既可以传入基类对象,也可以传入派生类对象,这就是多态。
17、C++中的多态调用是指()。
A.以任何方式调用一个虚函数
B.以任何方式调用一个纯虚函数
C.借助于指向对象的基类指针或引用调用一个虚函数
D.借助于指向对象的基类指针或引用调用一个纯虚函数
[答案]:
C
★考核知识点:
多态
参见讲稿章节:
8-2
附1.1.17(考核知识点解释)
C++中的多态调用是指借助于指向对象的基类指针或引用调用一个虚函数,根据实际对象所属的派生类,调用派生类相应的虚函数。
18、在C++中,要实现动态联编,可以使用()调用虚函数。
A.类名
B.派生类指针
C.基类引用
D.对象名
★考核知识点:
多态
参见讲稿章节:
8-2
附1.1.18(考核知识点解释)
在C++中,要实现动态联编,可以使用基类的指针或引用调用虚函数。
19、下列类中()是输入/输出流类iostream的派生类。
A.fstream
B.ofstream
C.ifstream
D.ostream
★考核知识点:
标准输入输出流
参见讲稿章节:
9-1
附1.1.19(考核知识点解释)
ios
streambuf
istream
ostream
iostream
ifstream
ofstream
fstream
filebuf
图I/O流的类层次关系
20、进行文件操作时需要包含()头文件。
A.iostream
B.fstream
C.stdio
D.stdlib
★考核知识点:
标准输入输出流
参见讲稿章节:
9-1
附1.1.20(考核知识点解释)
编写程序时,如果使用输入/输出操作,则需要包含头文件iostream;如果使用文件输入/输出操作,则需要包含头文件fstream。
21、在下列选项中()不是ostream类的对象。
A.cin
B.cout
C.clog
D.cerr
★考核知识点:
cout和cin对象及插入和提取运算符
参见讲稿章节:
9-2
附1.1.21(考核知识点解释)
C++预定义了4个标准流对象:
cin、cout、cerr、clog,它们均包含于头文件iostream中。
cin是istream类的对象,用于处理标准输入(即从键盘输入数据到内存中);
cout是ostream类的对象,用于处理标准输出(即将内存中的数据输出到屏幕上);
cerr和clog都是ostream类的对象,均用于处理错误信息标准输出。
22、下列的函数模板声明中,正确的是()。
A.template
B.template
C.template
D.template
★考核知识点:
函数模板
参见讲稿章节:
10-1
定义函数模板的一般格式为:
template<<模板形参表>><函数类型><函数名>(<函数形参表>)
{
函数体
}
其中:
⏹template:
定义模板的关键字,指明是函数或类模板。
⏹模板形参表:
用尖括号括起来,可以是一个或多个模板参数,多个模板参数用“,”分隔。
⏹模板参数:
由关键字typename及其后面的标识符构成。
该标识符对应的实参可以是系统的基本数据类型,也可以是用户自定义的数据类型。
23、下列关于函数模板的描述中,正确的是()。
A.函数模板和普通函数重载时,函数调用会优先调用符合要求的普通函数
B.函数模板和普通函数重载时,函数调用会优先调用符合要求的函数模板
C.函数模板的主要作用是减少可执行程序文件的尺寸
D.函数模板能够使程序规范
★考核知识点:
函数模板
参见讲稿章节:
10-1
附1.1.23(考核知识点解释)
当函数模板与一般函数同名时,遵行下面的调用顺序:
一个函数调用首先寻找参数完全匹配的一般函数,如果找到就调用它;
寻找一个函数模板,使其实例化,生成一个匹配的模板函数,然后调用该模板函数。
24、关于函数模板,描述正确的是()。
A.函数模板必须由程序员实例化为可执行的函数模板
B.函数模板的实例化由编译器实现
C.函数模板和模板函数是一个概念
D.模板函数就是普通函数
★考核知识点:
函数模板
参见讲稿章节:
10-1
附1.1.24(考核知识点解释)
函数模板只是一个模板,需要实例化为具体的函数后才能使用,即需要将模板中数据类型形参实例化为确定的数据类型,这个过程是由编译器完成的。
实例化的函数模板称为模板函数。
25、建立类模板对象的实例化过程为()。
A.基类->派生类
B.构造函数->对象
C.模板类->对象
D.模板类->模板函数
★考核知识点:
类模板
参见讲稿章节:
10-2
附1.1.25(考核知识点解释)
类模板与函数模板一样也不能直接使用,必须先实例化为相应的模板类,创建该模板类的对象后才能使用。
类模板实例化后称为模板类,模板类具有和普通类相同的行为。
26、类模板的使用实际上是类模板实例化成一个具体的()。
A.类
B.对象
C.函数
D.变量
★考核知识点:
类模板
参见讲稿章节:
10-2
附1.1.26(考核知识点解释)
类模板与函数模板一样也不能直接使用,必须先实例化为相应的模板类,创建该模板类的对象后才能使用。
类模板实例化后称为模板类,模板类具有和普通类相同的行为。
27、一个()允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值可以取任意数据类型。
A.函数模板
B.模板函数
C.类模板
D.模板类
★考核知识点:
类模板
参见讲稿章节:
10-2
附1.1.27(考核知识点解释)
类模板可以用来描述一个与数据类型无关的类。
类模板中类的数据成员和函数成员的参数和返回值可以是任意的数据类型,它描述了一族类的属性和行为,是一族类的统一描述,可以避免类的重复定义。
28、类模板的静态数据成员由()共享。
A.一个类模板的所有模板类
B.一个模板类的所有对象
C.一个模板类的一个对象
D.一个类模板的所有对象
★考核知识点:
类模板
参见讲稿章节:
10-2
附1.1.28(考核知识点解释)
类模板的静态数据成员由一个模板类的所有对象共享。
29、在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构
B.紧凑结构和非紧凑结构
C.线性结构和非线性结构
D.内部结构和外部结构
★考核知识点:
数据结构的基本概念
参见讲稿章节:
11-1
附1.1.29(考核知识点解释)
根据数据结构中各数据元素之间前驱与后继关系的复杂程度,数据的逻辑结构可分为线性结构与非线性结构两大类。
30、下列不属于常用的存储结构的是()。
A.顺序存储结构
B.链式存储结构
C.非线性存储结构
D.索引存储结构
★考核知识点:
数据结构的基本概念
参见讲稿章节:
11-1
附1.1.30(考核知识点解释)
根据数据结构中各数据元素之间前驱与后继关系的复杂程度,数据的逻辑结构可分为线性结构与非线性结构两大类。
数据的存储结构也称数据的物理结构,是指逻辑结构的存储表示,即数据的逻辑结构在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示。
数据的存储结构主要包括顺序存储结构、链式存储结构、索引存储结构和散列存储结构
31、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储()。
A.数据的处理方法
B.数据元素之间的关系
C.数据元素的类型
D.数据的存储方法
★考核知识点:
数据结构的基本概念
参见讲稿章节:
11-1
附1.1.31(考核知识点解释)
在计算机机中存储数据时,通常不仅要存储各数据元素的值,而且还要存储数据元素之间的关系。
32、顺序存储结构中数据元素之间的逻辑关系是由()表示的。
A.线性结构
B.非线性结构
C.指针
D.存储位置
★考核知识点:
数据结构的基本概念
参见讲稿章节:
11-1
附1.1.32(考核知识点解释)
把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元里,数据元素之间的逻辑关系由存储单元的邻接关系来体现。
这样的存储结构称为顺序存储结构。
33、线性表最多有()个结点没有前驱。
A.1
B.2
C.3
D.0
★考核知识点:
数据结构的基本概念
参见讲稿章节:
12-1
附1.1.33(考核知识点解释)
对于非空线性表,数据元素之间存在一对一的关系,具体特性如下:
(1)第一个数据元素没有前驱。
(2)最后一个数据元素没有后继。
(3)其他数据元素都是首尾相接、有且只有一个前驱和后继。
34、设线性表有n个元素,以下算法中,()在顺序表上实现比在链表上实现效率更高。
A.输出第i(0≤i≤n—1)个元素值
B.交换第0个元素与第1个元素的值
C.顺序输出这n个元素的值
D.输出与给定值x相等的元素在线性表中的序号
★考核知识点:
顺序表
参见讲稿章节:
12-2
附1.1.34(考核知识点解释)
顺序表具有简单、存储密度大、空间利用率高、存储效率高等优点。
但在顺序表中进行插入与删除操作时,往往需要移动大量的数据元素(浪费时间)。
35、设线性表中有n个元素,()操作,在单链表上实现要比在顺序表上实现效率更高。
A.删除所有值为x的元素
B.在最后一个元素的后面插入一个新元素
C.顺序输出前k个元素
D.交换第i个元素和第n-i-1个元素的值(i=1,1,…,n)
★考核知识点:
链表
参见讲稿章节:
12-3
附1.1.35(考核知识点解释)
线性表的链式存储结构是用一组任意的存储单元存储线性表中的数据元素,称为线性链表。
线性链表中的结点可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。
在插入和删除操作中,不需要移动大量数据。
36、下列关于栈的叙述中正确的是()。
A.在栈中只能插入数据
B.在栈中只能删除数据
C.栈是先进先出的线性表
D.栈是先进后出的线性表
★考核知识点:
栈
参见讲稿章节:
13-1
附1.1.36(考核知识点解释)
栈是一种插入和删除操作都只能在表的同一端进行的线性表。
栈中元素是以e1,e2,…,en的顺序进栈,而出栈的顺序却是en,…,e2,e1。
也就是说,栈是按照“先进后出”(firstinlastout,FILO)或“后进先出”(lastinfirstout,LIFO)的原则组织数据的。
所以,栈也被称为后进先出LIFO、先进后出FILO线性表或下推表。
37、判定一个顺序表示的栈S(最大元素数量为m)为空的条件是()。
A.S->top==0
B.S->top==-1
C.S->top!
=m
D.S->top==m
★考核知识点:
栈的表示
参见讲稿章节:
13-2
附1.1.37(考核知识点解释)
假设一个空的顺序栈,元素A、B、C、D、E、F依次进栈,然后元素再出栈,则该顺序栈的进栈和出栈动态变化下图所示。
(a)空栈(b)插入元素A后(c)插入元素B、C、(d)两个元素出(e)所有元素出
D、E、F后栈后栈后
38、判定一个栈S(最大元素数量为m)为栈满的条件是()。
A.S->top!
=0
B.S->top==m
C.S->top==m-1
D.S->top!
=m-1
★考核知识点:
栈的表示
参见讲稿章节:
13-2
附1.1.38(考核知识点解释)
intMaxSize;//栈中最大元素个数
当栈中已有MaxSize个元素时,如果再进行进栈操作,则会产生溢出,此时称为上溢(overflow);而对空栈进行出栈操作时也会产生溢出,此时称为下溢(underflow)。
因此,在进行进栈或出栈操作时,应首先检查栈是否为满(IsFull)或是否为空(IsEmpty)。
⏹IsEmpty()的算法:
returntop==-1;
⏹IsFull()的算法:
returntop==MaxSize;
39.队列出队操作时,()。
A.必须判别队列是否满
B.判别队列元素的类型
C.必须判别队列是否空
D.对队列不作任何判别
★考核知识点: