《程序設(shè)計(jì)基礎(chǔ)(下)》20春期末考核 -00001
試卷總分:100 得分:100
一、單選題 (共 20 道試題,共 40 分)
1.類模板的靜態(tài)數(shù)據(jù)成員由( )共享。
A.一個(gè)類模板的所有模板類
B.一個(gè)模板類的所有對(duì)象
C.一個(gè)模板類的一個(gè)對(duì)象
D.一個(gè)類模板的所有對(duì)象
答案:B
2.設(shè)線性表有n個(gè)元素,以下算法中,( )在順序表上實(shí)現(xiàn)比在鏈表上實(shí)現(xiàn)效率更高。
A.輸出第i(0≤i≤n—1)個(gè)元素值
B.交換第0個(gè)元素與第1個(gè)元素的值
C.順序輸出這n個(gè)元素的值
D.輸出與給定值x相等的元素在線性表中的序號(hào)
答案:A
3.在一個(gè)無(wú)向圖中,若兩頂點(diǎn)之間的路徑長(zhǎng)度為k,則該路徑上的頂點(diǎn)數(shù)為( )。
A.k
B.k+1
C.k+2
D.2k
答案:B
4.在一個(gè)鏈接隊(duì)列中,假設(shè)f和r 分別是隊(duì)頭和隊(duì)尾指針,則刪除一個(gè)結(jié)點(diǎn)的運(yùn)算時(shí)( )。
A.r=f->next;
B.r=r->next;
C.f=f->next;
D.f=r->next;
5.下列( )不是構(gòu)造函數(shù)的特征。
A.構(gòu)造函數(shù)的函數(shù)名與類名相同
B.構(gòu)造函數(shù)可以重載
C.構(gòu)造函數(shù)可以設(shè)置默認(rèn)參數(shù)
D.構(gòu)造函數(shù)必須指定類型說(shuō)明
6.在一個(gè)長(zhǎng)度為n的順序存儲(chǔ)的線性表中,向第i個(gè)元素(1≤i≤n+1)位置插入一個(gè)新元素時(shí),需要將( )個(gè)元素向后移動(dòng)一個(gè)位置。
A.n-i
B.n-i+1
C.n-i-1
D.i
7.在二叉樹(shù)的第i層上至多有( )個(gè)結(jié)點(diǎn)(i≥1)。
A.2的i次方減1
B.2的i-1次方
C.2的i次方加+1
D.2的i+1次方
8.對(duì)于任意一個(gè)類,析構(gòu)函數(shù)的個(gè)數(shù)最多為( )。
A.0
B.1
C.2
D.3
9.若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能出現(xiàn)( )的情況。
A.3,2,1
B.2,1,3
C.1,3,2
D.3,1,2
10.類模板的模板參數(shù)( )。
A.只可作為數(shù)據(jù)成員的類型
B.只可作為成員函數(shù)的返回類型
C.只可作為成員函數(shù)的參數(shù)類型
D.以上三者皆可
11.在一棵完全二叉樹(shù)中,根結(jié)點(diǎn)的編號(hào)為1,按照由上到下由左到右的順序?yàn)槎鏄?shù)結(jié)點(diǎn)編號(hào)。若編號(hào)為5的結(jié)點(diǎn)存在右孩子,則右孩子結(jié)點(diǎn)的編號(hào)為( )。
A.9
B.10
C.11
D.12
12.在下述結(jié)論中,正確的是( )。
A.在樹(shù)中,互為堂兄弟的結(jié)點(diǎn)擁有相同的雙親
B.二叉樹(shù)的度為2
C.二叉樹(shù)的左右子樹(shù)可任意交換
D.深度為K的完全二叉樹(shù)的結(jié)點(diǎn)個(gè)數(shù)小于或等于深度相同的滿二叉樹(shù)
13.包含類fstream定義的頭文件是( )。
A.fstream
B.ofstream
C.ifstream
D.iostream
14.基類和派生類可以分別叫做( )。
A.“大類”和“小類”
B.“父類”和“子類”
C.“小類”和“大類”
D.“子類”和“父類”
15.撤消對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用( )函數(shù)。
A.成員函數(shù)
B.構(gòu)造函數(shù)
C.析構(gòu)函數(shù)
D.普通函數(shù)
16.關(guān)于對(duì)象成員的構(gòu)造函數(shù)的調(diào)用順序,說(shuō)法正確的是( )。
A.與它們?cè)诔蓡T初始化列表中給出的順序相同
B.與析構(gòu)函數(shù)的調(diào)用順序相同
C.與它們?cè)陬愔姓f(shuō)明順序相同
D.以上說(shuō)法都不對(duì)
17.有關(guān)類和對(duì)象的說(shuō)法不正確的是( )。
A.對(duì)象是類的一個(gè)實(shí)例
B.一個(gè)類只能有一個(gè)對(duì)象
C.任何一個(gè)對(duì)象只能屬于一個(gè)具體的類
D.類與對(duì)象的關(guān)系和數(shù)據(jù)類型和變量的關(guān)系相似
18.關(guān)于類和對(duì)象不正確的說(shuō)法是( )。
A.類是一種類型,它封裝了數(shù)據(jù)和操作
B.對(duì)象是類的實(shí)例
C.一個(gè)類的對(duì)象只有一個(gè)
D.一個(gè)對(duì)象必屬于某個(gè)類
19.在C++中,要實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,可以使用( )調(diào)用虛函數(shù)。
A.類名
B.派生類指針
C.對(duì)象名
D.基類指針
20.下面描述中,錯(cuò)誤的是( )。
A.在基類定義的public成員在公有繼承的派生類中可見(jiàn),也能在類外被訪問(wèn)
B.在基類定義的public和protected成員在私有繼承的派生類中可見(jiàn),在類外可以被訪問(wèn)
C.在基類定義的public和protected成員在保護(hù)繼承的派生類中可見(jiàn)
D.在派生類中不可見(jiàn)的成員要變成可訪問(wèn)的,需要進(jìn)行訪問(wèn)聲明
二、多選題 (共 5 道試題,共 10 分)
21.已知Circle類定義如下所示,則下列說(shuō)法正確的是( )。 class Circle { public: double m_x,m_y; double m_radius; void setCenter(double x,double 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類的成員函數(shù)
C.類定義體后面的分號(hào)可以省略
D.將double m_radius;改為double m_radius=1;,則表示m_radius成員變量的初值為1
22.對(duì)靜態(tài)成員的錯(cuò)誤描述是( )。
A.靜態(tài)成員不屬于對(duì)象,是類的共享成員
B.靜態(tài)數(shù)據(jù)成員要在類外定義和初始化
C.調(diào)用靜態(tài)成員函數(shù)時(shí)要通過(guò)類或?qū)ο蠹せ?,所以靜態(tài)成員函數(shù)擁有this指針
D.靜態(tài)成員函數(shù)可以操作非靜態(tài)數(shù)據(jù)成員
23.下列關(guān)于函數(shù)模板的描述中,正確的是( )。
A.函數(shù)模板和普通函數(shù)重載時(shí),函數(shù)調(diào)用會(huì)優(yōu)先調(diào)用符合要求的普通函數(shù)
B.函數(shù)模板和普通函數(shù)重載時(shí),函數(shù)調(diào)用會(huì)優(yōu)先調(diào)用符合要求的函數(shù)模板
C.函數(shù)模板的主要作用是減少可執(zhí)行程序文件的尺寸
D.函數(shù)模板的主要作用是簡(jiǎn)化程序編寫
24.下面對(duì)析構(gòu)函數(shù)的正確描述是( )。
A.系統(tǒng)可以提供默認(rèn)的析構(gòu)函數(shù)
B.析構(gòu)函數(shù)必須由用戶定義
C.析構(gòu)函數(shù)沒(méi)有參數(shù)
D.析構(gòu)函數(shù)可以設(shè)置默認(rèn)參數(shù)
25.當(dāng)類的繼承方式為公有繼承時(shí),基類的()成員的訪問(wèn)屬性在派生類中不變
A.公有成員
B.保護(hù)成員
C.私有成員
D.友元成員
三、判斷題 (共 10 道試題,共 20 分)
26.在線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,插入和刪除操作時(shí),元素移動(dòng)次數(shù)與插入和刪除元素的位置有關(guān)。
27.線性表中的元素可以是任意類型的,但同一線性表中的數(shù)據(jù)元素必須具有相同的類型。
28.getline()函數(shù)從流中提取終止字符,但終止字符被丟棄。
29.在面向?qū)ο蟪绦蛟O(shè)計(jì)中,每個(gè)對(duì)象可以單獨(dú)設(shè)置屬性值。
30.在刪除一個(gè)動(dòng)態(tài)對(duì)象時(shí),將自動(dòng)調(diào)用該動(dòng)態(tài)對(duì)象所屬類的析構(gòu)函數(shù)。
31.對(duì)鏈表進(jìn)行插入和刪除操作時(shí)不必移動(dòng)鏈表中的結(jié)點(diǎn)。
32.一個(gè)類的構(gòu)造函數(shù)中可以不包含對(duì)其子對(duì)象的初始化。
33.對(duì)象成員的訪問(wèn)與結(jié)構(gòu)變量成員的訪問(wèn)相同,使用運(yùn)算符.或->。
34.對(duì)于樹(shù)中的任一結(jié)點(diǎn),如果其各棵子樹(shù)的相對(duì)次序被用來(lái)表示數(shù)據(jù)之間的關(guān)系,即交換子樹(shù)位置會(huì)改變樹(shù)所表示的內(nèi)容,則稱該樹(shù)為有序樹(shù);否則稱為無(wú)序樹(shù)。
35.線性表的順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是邏輯關(guān)系上相鄰的兩個(gè)元素在物理位置上也相鄰。
四、主觀填空題 (共 2 道試題,共 20 分)
36.下面的程序是在SHUZU類中重載運(yùn)算符[],程序的運(yùn)行結(jié)果為“B[4]=6”,請(qǐng)將程序補(bǔ)充完整。
#include <iostream>
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<n; i++)
v[i]=a[i];
}
int& SHUZU::operator[](int i)
{
return v[i];
}
int main()
{
int b[7]={0,2,3,4,6,7,10};
SHUZU B(b,7);
cout<<"B[4]="<<##;
return 0;
}
37.下面的程序是在str類中重載運(yùn)算符=,請(qǐng)將程序補(bǔ)充完整,使程序的輸出結(jié)果為:
he
she
he
he
#include <iostream>
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<<st<<endl;
}
~str()
{
delete []st;
}
void set(char *s)
{
st=new char[strlen(s)+1];
strcpy(st,s);
}
};
int main()
{
str s1("he"),s2("she");
s1.show();
s2.show();
##;
s1.show();
s2.show();
}
五、問(wèn)答題 (共 1 道試題,共 10 分)
38.讀程序?qū)懡Y(jié)果題,具體題目?jī)?nèi)容如下:
已知順序表類模板的C++描述如下:
template<class T>
class LinearList
{
public:
LinearList(int LLMaxSize); //構(gòu)造函數(shù),創(chuàng)建空表
~LinearList(); //析構(gòu)函數(shù),刪除表
LinearList<T>& Insert(int k,const T& x);
//在第k個(gè)位置插入元素x,返回插入后的線性表
bool IsEmpty() const;
//判斷表是否為空,表空返回true,表非空返回false
int GetLength() const; //返回表中數(shù)據(jù)元素的個(gè)數(shù)
bool GetData(int k,T& x);
//將表中第k個(gè)元素保存到x中,不存在則返回false
bool ModifyData(int k,const T& x);
//將表中第k個(gè)元素修改為x,不存在則返回false
int Find(const T& x); //返回x在表中的位置,如果x不在表中返回0
LinearList<T>& DeleteByIndex(const int k, T& x);
//刪除表中第k個(gè)元素,并把它保存到x中,返回刪除后的線性表
LinearList<T>& DeleteByKey(const T& x,T& y);
//刪除表中關(guān)鍵字為x元素,返回刪除后的線性表
void OutPut(ostream& out) const;
//將線性表放到輸出流out中輸出
private:
int length; //當(dāng)前數(shù)組元素個(gè)數(shù)
int MaxSize; //線性表中最大元素個(gè)數(shù)
T *element; //一維動(dòng)態(tài)數(shù)組
};
int main()
{
LinearList<int> IntegerLList(10);
int i,x;
for(i=1;i<11;i++)
IntegerLList.Insert(i,i*5);
for(i=2;i<=3;i++)
{
IntegerLList.DeleteByIndex(i,x);
cout<<x<<endl;
}
cout<<endl;
return 0;
}
請(qǐng)寫出主函數(shù)main執(zhí)行后在屏幕上的輸出結(jié)果。

