南开《程序设计基础(下)》20春期末考核 满分答案非免费
试卷总分:100 得分:100
一、单选题 (共 20 道试题共 40 分)
1.类模板的静态数据成员由( )共享。
A.一个类模板的所有模板类
B.一个模板类的所有对象
C.一个模板类的一个对象
D.一个类模板的所有对象
答案:B
2.设线性表有n个元素以下算法中( )在顺序表上实现比在链表上实现效率更高。
A.输出第i(0≤i≤n—1)个元素值
B.交换第0个元素与第1个元素的值
C.顺序输出这n个元素的值
D.输出与给定值x相等的元素在线性表中的序号
答案:A
3.在一个无向图中若两顶点之间的路径长度为k则该路径上的顶点数为( )。
A.k
B.k+1
C.k+2
D.2k
答案:B
4.在一个链接队列中假设f和r 分别是队头和队尾指针则删除一个结点的运算时( )。
A.r=f->next;
B.r=r->next;
C.f=f->next;
D.f=r->next;
答案:C
5.下列( )不是构造函数的特征。
A.构造函数的函数名与类名相同
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数必须指定类型说明
答案:D
6.在一个长度为n的顺序存储的线性表中向第i个元素(1≤i≤n+1)位置插入一个新元素时需要将( )个元素向后移动一个位置。
A.n-i
B.n-i+1
C.n-i-1
D.i
答案:客服V:aopeng5288
7.在二叉树的第i层上至多有( )个结点(i≥1)。
A.2的i次方减1
B.2的i-1次方
C.2的i次方加+1
D.2的i+1次方
答案:
8.对于任意一个类析构函数的个数最多为( )。
A.0
B.1
C.2
D.3
答案:
9.若让元素123依次进栈则出栈次序不可能出现( )的情况。
A.3,2,1
B.2,1,3
C.1,3,2
D.3,1,2
答案:
10.类模板的模板参数( )。
A.只可作为数据成员的类型
B.只可作为成员函数的返回类型
C.只可作为成员函数的参数类型
D.以上三者皆可
答案:
11.在一棵完全二叉树中根结点的编号为1按照由上到下由左到右的顺序为二叉树结点编号。若编号为5的结点存在右孩子则右孩子结点的编号为( )。
A.9
B.10
C.11
D.12
答案:
12.在下述结论中正确的是( )。
A.在树中,互为堂兄弟的结点拥有相同的双亲
B.二叉树的度为2
C.二叉树的左右子树可任意交换
D.深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树
答案:
13.包含类fstream定义的头文件是( )。
A.fstream
B.ofstream
C.ifstream
D.iostream
答案:
14.基类和派生类可以分别叫做( )。
A.“大类”和“小类”
B.“父类”和“子类”
C.“小类”和“大类”
D.“子类”和“父类”
答案:
15.撤消对象时系统自动调用( )函数。
A.成员函数
B.构造函数
C.析构函数
D.普通函数
答案:
16.关于对象成员的构造函数的调用顺序说法正确的是( )。
A.与它们在成员初始化列表中给出的顺序相同
B.与析构函数的调用顺序相同
C.与它们在类中说明顺序相同
D.以上说法都不对
答案:
17.有关类和对象的说法不正确的是( )。
A.对象是类的一个实例
B.一个类只能有一个对象
C.任何一个对象只能属于一个具体的类
D.类与对象的关系和数据类型和变量的关系相似
答案:
18.关于类和对象不正确的说法是( )。
A.类是一种类型,它封装了数据和操作
B.对象是类的实例
C.一个类的对象只有一个
D.一个对象必属于某个类
答案:
19.在C++中要实现动态联编可以使用( )调用虚函数。
A.类名
B.派生类指针
C.对象名
D.基类指针
答案:
20.下面描述中错误的是( )。
A.在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B.在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
C.在基类定义的public和protected成员在保护继承的派生类中可见
D.在派生类中不可见的成员要变成可访问的,需要进行访问声明
答案:
二、多选题 (共 5 道试题共 10 分)
21.已知Circle类定义如下所示则下列说法正确的是( )。 class Circle { public: double m_xm_y; double m_radius; void setCenter(double xdouble y) { m_x=x; m_y=y; } void setRadius(double radius) { m_radius=radius; } double getArea( ) { return 3.14 * m_radius * m_radius; } };
A.m_x、m_y和m_radius都是Circle类的成员变量
B.setCenter、setRadius和getArea都是Circle类的成员函数
C.类定义体后面的分号可以省略
D.将double m_radius;改为double m_radius=1;,则表示m_radius成员变量的初值为1
答案:
22.对静态成员的错误描述是( )。
A.静态成员不属于对象,是类的共享成员
B.静态数据成员要在类外定义和初始化
C.调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D.静态成员函数可以操作非静态数据成员
答案:
23.下列关于函数模板的描述中正确的是( )。
A.函数模板和普通函数重载时,函数调用会优先调用符合要求的普通函数
B.函数模板和普通函数重载时,函数调用会优先调用符合要求的函数模板
C.函数模板的主要作用是减少可执行程序文件的尺寸
D.函数模板的主要作用是简化程序编写
答案:
24.下面对析构函数的正确描述是( )。
A.系统可以提供默认的析构函数
B.析构函数必须由用户定义
C.析构函数没有参数
D.析构函数可以设置默认参数
答案:
25.当类的继承方式为公有继承时基类的()成员的访问属性在派生类中不变
A.公有成员
B.保护成员
C.私有成员
D.友元成员
答案:
三、判断题 (共 10 道试题共 20 分)
26.在线性表的链式存储结构中插入和删除操作时元素移动次数与插入和删除元素的位置有关。答案:
27.线性表中的元素可以是任意类型的但同一线性表中的数据元素必须具有相同的类型。
答案:
28.getline()函数从流中提取终止字符但终止字符被丢弃。
答案:
29.在面向对象程序设计中每个对象可以单独设置属性值。
答案:
30.在删除一个动态对象时将自动调用该动态对象所属类的析构函数。
答案:
31.对链表进行插入和删除操作时不必移动链表中的结点。
答案:
32.一个类的构造函数中可以不包含对其子对象的初始化。
答案:
33.对象成员的访问与结构变量成员的访问相同使用运算符.或->。
答案:
34.对于树中的任一结点如果其各棵子树的相对次序被用来表示数据之间的关系即交换子树位
置会改变树所表示的内容则称该树为有序树;否则称为无序树。
答案:
35.线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻。
答案:
四、主观填空题 (共 2 道试题共 20 分)
36.下面的程序是在SHUZU类中重载运算符[]程序的运行结果为“B[4]=6”请将程序补充完整。#include
using namespace std;
class SHUZU
{
private:
int *v;
int s;
public:
SHUZU( int a[] int n );
~SHUZU( )
{
delete []v;
}
int size()
{
return s;
}
int#(int i);
};
SHUZU::SHUZU(int a[] int n)
{
if( n<=0 )
{
v=NULL;
s=0;
return;
}
s=n;
v= new int[s] ;
for(int i=0; i v[i]=a[i]; } int& SHUZU::operator[](int i) { return v[i]; } int main() { int b[7]={02346710}; SHUZU B(b7); cout<<"B[4]="<<##; } 答案: 37.下面的程序是在str类中重载运算符=,请将程序补充完整,使程序的输出结果为:he she he he #include using namespace std; class str { private: char *st; public: str(char *a) { set(a); } str & operator=(## ) { delete []st; set(a.st); return *this; } void show() { cout< } ~str() { delete []st; } void set(char *s) { st=new char[strlen(s)+1]; strcpy(sts); } }; int main() { str s1("he")s2("she"); s1.show(); s2.show(); ##; s2.show(); } 答案:operator= 、s2=s1 五、问答题 (共 1 道试题共 10 分) 38.读程序写结果题,具体题目内容如下: 已知顺序表类模板的C++描述如下: template class LinearList { public: LinearList(int LLMaxSize); //构造函数,创建空表 ~LinearList(); //析构函数,删除表 LinearList //在第k个位置插入元素x,返回插入后的线性表 bool IsEmpty() const; //判断表是否为空,表空返回true,表非空返回false int GetLength() const; //返回表中数据元素的个数 bool GetData(int kT& x); //将表中第k个元素保存到x中,不存在则返回false bool ModifyData(int kconst T& x); //将表中第k个元素修改为x,不存在则返回false int Find(const T& x); //返回x在表中的位置,如果x不在表中返回0 LinearList //删除表中第k个元素,并把它保存到x中,返回删除后的线性表 LinearList //删除表中关键字为x元素,返回删除后的线性表 void OutPut(ostream& out) const; //将线性表放到输出流out中输出 private: int length; //当前数组元素个数 int MaxSize; //线性表中最大元素个数 T *element; //一维动态数组 }; int main() { LinearList int ix; for(i=1;i<11;i++) IntegerLList.Insert(ii*5); for(i=2;i<=3;i++) { IntegerLList.DeleteByIndex(ix); cout< } cout< return 0; } 请写出主函数main执行后在屏幕上的输出结果。答案: