2015年計算機二級考試《C++》高分突破試卷(2)
24一間宿舍可住多個學生,則實體宿舍和學生之間的聯系是( )。
A.一對一B.一對多C.多對一D.多對多
參考答案:B
參考解析:因為一間宿舍可以住多個學生即多個學生住在一個宿舍中,但一個學生只能住一間宿舍,所以實體宿舍和學生之間是一對多的關系。
25下列關于二叉樹的敘述中,正確的是( )。
A.葉子結點總是比度為2的結點少一個
B.葉子結點總是比度為2的結點多一個
C.葉子結點數是度為2的結點數的兩倍
D.度為2的結點數是度為1的結點數的兩倍
參考答案:B
參考解析:根據二叉樹的基本性質3:在任意一棵:二叉樹中,度為0的葉子結點總是比度為2的結點多一個。所以選擇B。
26有以下語句,則對a數組元素的引用不正確的是(0≤i≤9)( )。
int a[10]={0,1,2,3,4,5,6,7,8,9},*P=a;
A.a[P-a]B.*(&a[i])C.P[i]D.*(*(a+i))
參考解析:選項D第一層括號中為數組a中第i項元素的值,外面再加指針運算符沒有意義。
27下列程序的運行結果為( )。
#include
void print(double A.
{
cout<<++a:
}
void print(int atint B.
{
cout<
}
void main()
{
print(1.2);
eout<<””:
print(3,4);
}
A.1.2 34B.2.2 34C.1.2 43D.2.2 43
參考解析:本題考查的是對重載函數的掌握,因為++a是右結合的,所以a先自加1再輸出,即為2.2,之后調用函數print(int a,int b)輸出h和a,即43。
點擊查看試題筆記(1)28存在定義int a[10],x,* pa;,若pa=&a[0],下列的( )選項和其他3個選項不是等價的。
A.x=*pa;B.x=*(a+1);C.x=*(pa+l)D.x=a[1];
參考答案:A
參考解析:本題考查的是數組和指向數組的指針之問的關系,選項A中x是被數組a的第一個元素賦值,其余的都是被數組a的第二個元素賦值。
29下列敘述中正確的是( )。
A.循環隊列有隊頭和隊尾兩個指針,因此,循環隊列是非線性結構
B.在循環隊列中,只需要隊頭指針就能反映隊列中元素的動態變化情況
C.在循環隊列中,只需要隊尾指針就能反映隊列中元素的動態變化情況
D.循環隊列中元素的個數是由隊頭指針和隊尾指針共同決定
參考解析:循環隊列有隊頭和隊尾兩個指針,但是循環隊列仍是線性結構的,所以A錯誤;在循環隊列中需要隊頭指針與隊尾指針來共同反映隊列中元素的動態變化情況,所以B與C錯誤。
30通常拷貝構造函數的參數是( )。
A.某個對象名
B.某個對象的成員名
C.某個對象的引用名
D.某個對象的指針名
參考答案:C
參考解析:復制初始化構造函數的作用是用一個已知的對象來初始化一個被創建的同類的對象,該函數只有一個參數,并且是對同類的某個對象的引用。
31如果在表達式++x/y中,“++”是作為友元函數重載的,“/”是作為成員函數重載的,則該表達式還可為( )。
A.(operator++(x)).operator/(Y)
B.(operator++(0)).operator/(Y)
C.operator/((operator++(x,0)),Y)
D.operator/((operator++(0)),Y)
參考答案:A
參考解析:c++中用成員函數重載++X為:x.oper-ator++(),用友元函數重載++x為:0perator++(x),用成員函數重載x/y為:x.operator/(Y),用友元函數重載x/y為:operator/(X,Y)。
32一個函數功能不太復雜但要求被頻繁調用,應選用( )。
A.內聯函數B.重載函數C.遞歸函數D.嵌套函數
參考答案:A
參考解析:本題考查的是內聯函數的使用,它的引入是為了,解決程序中函數調用的效率問題,在編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體來替換。
33數據庫應用系統中的核心問題是( )。
A.數據庫設計
B.數據庫系統設計
C.數據庫維護
D.數據庫管理員培訓
參考答案:A
參考解析:數據庫應用系統中的核心問題是數據庫的設計。
34有如下程序: Class Base{ publiC:
int data; };
Class Derivedl:publiC Base{};
Class Derived2:proteCted Base{};
int main( ) {
Derivedl dl; Derived2 d2; dl.data=0;//①
d2.data=0;//② retum 0;
}
下列關于程序編譯結果的描述中,正確的是( )。
A.①②皆無編譯錯誤
B.①有編譯錯誤,②無編譯錯誤
C.①無編譯錯誤,②有編譯錯誤
D.①②皆有編譯錯誤
參考答案:C
參考解析:本題考查公用繼承和保護繼承對基類成員的訪問屬性。在公用繼承中,基類的公用成員和保護成員在 派生類中保持原有訪問屬性,其私有成員仍為基類私有、稿.受保護繼承中,基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有。本題中Derived1公用繼承Base.所以①編譯正確,Derived2保護繼承Base,所以②編譯不 正確。
35下列關于基類和派生類關系的敘述中,正確的是( )。
A.每個類最多只能有一個直接基類
B.派生類中的成員可以訪問基類中的任何成員
C.基類的構造函數必須在派生類的構造函數體中調用
D.派生類除了繼承基類的成員,還可以定義新的成員
參考解析:本題考查派生類與基類的關系,派生類可以有多個直接基類,而派生類有三種繼承方式,在私有繼承中,派生類的成員并不能訪問基類的成員。如果基類中定義了缺省構造函數或根本沒有定義任何一一個構造函數時,在派生類構造函數的定義中可以省對基類構造函數的調用。所以本題答案為D。
36結構化程序所要求的基本結構不包括( )。
A.順序結構
B.GOT0跳轉
C.選擇(分支)結構
D.重復(循環)結構
參考答案:B
參考解析:1966年Boehm和Jacopini證明了程序沒計語言僅僅使用順序、選擇和重復三種基本控制結構就足以表達出各種其他形式結構的程序設計方法。
37將E—R圖轉換為關系模式時,實體和聯系都可以表示為( )。
A.屬性B.鍵C.關系D.域
參考答案:C
參考解析:從E—R圖到關系模式的轉換是比較直接的,實體與聯系都可以表示成關系,E—R圖中屬性也可以轉換成關系的屬性。
38下面是一個模板聲明的開始部分:
templatedouble…由此可知( )。
A.這可能是一個函數模板的聲明
B.這可能是一個類模板的聲明
C.這既可能是一個函數模板的聲明,也可能是一個類模板的聲明
D.這肯定是一個錯誤的模板聲明
參考答案:A
參考解析:本題考查函數模板和類模板的基礎知識,從templatedouble這里就可以看出這是·個函數模板的聲明。
39有如下程序:
#include
using namespace std;
class AA{
int k;
protected:
int n;
void setK(int k){this一>k=k;}
public:
void setN(int n){this一>n=n;}
};
class BB:public AA{/*類體略*" >
;
int main()
}
BB X;
A n=1;//1
B setN(2);//2
C k=3;//3
D setK(4);//4
return 0;
}
在標注號碼的四條語句中正確的是( )。
A.1B.2C.3D.4
參考答案:B
參考解析:本題考查公用繼承對基類成員的訪問屬性。在公用繼承中,基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員仍為基類私有。所以本題中n、k和setK變為了派生類的保護成員,不能直接使用,即1、3、4錯誤,所以B選項正確。
40有如下頭文件:
int fl();
static int f2();
class MA{
public:
int f3();
static int f4();
};
在所描述的函數中,具有隱含的this指針的是( )。
A.flB.f2C.f3D.f4
參考答案:C
參考解析:只有類的非靜態成員函數才隱含this指針。其作用域是類內部,當類的非靜態成員函數中訪問類的非靜態成員時,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數,而不必一定寫上this。所以本題答案為C。
二、基本操作題
41請使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl,該工程中包含程序文件main.epp,其中有類Door(“門”)和主函數main的定義。程序中位于每個“//ERROR****found ****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應為:
打開503號門…門是鎖著的,打不開。
打開503號門的鎖…鎖開了。
打開503號門…門打開了。
打開503號門…門是開著的,無須再開門。
鎖上503號門…先關門...門鎖上了。
注意:只修改每個“//ERROR***********found **********”下的那一行,不要改動程序中的其他內容。
#include
using namespace std;
class Door{
int Bum;//門號
bool closed;//true表示門關著
bool locked://true表示門鎖著
public:
Door(int nHm){
//ERROR***********found***********
nun=this一>ann:
closed=locked=true:
}
bool isClosed()const{rehlrn closed;}
//門關著時返回true,否則返回false
bool isOpened()const{return!closed;}
//門開著時返回true,否則返回false
b001 isLocked()const{retum locked;}
//門鎖著時返回true,否則返回false
bool isUnlocked()const{return!locked;}
//門未鎖時返回true,否則返回false
void open(){ //開門
cout<
//ERROR***********found***********
if(closed)
cout<<”門是開著的,無須再開門。”;
else if(10cked)
cout<<”門是鎖著的,打不開。”;
else{
closed=false;
eout<<”門打開了。”;
}
}
void close(){//關門
cout<
if(closed)
cout<<”門是關著的,無須再關門。”;
else{
closed=true;
cout<<”門關上了.";
}
}
//ERROR************found************
void lock()const{//鎖門
cout<
if(locked)
cout<<”門是鎖著的,無須再鎖門。”;
else{
if(!closed){
cout<<”先關門...”;
closed=true;
}
locked=true:
cout<<”門鎖上了。”;
}
}
wild unlock(){//開鎖
cout<
if(!locked)
cout<<”門沒有上鎖,無須再開鎖。”;
else{
locked=false;
cout<<”鎖開了。”;
}
};
int main(){
Door door(503);
door.open();
door.unlock();
door.open();
door.open();
floor.10ck();
return 0;
}
參考解析:
(1)this—>num=num;
(2)if(!closed)
(3)void lock(){
三、簡單應用題
42請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個程序文件 main.cpp,其中有類CPolygon(“多邊形”)、CRectangle(“矩形”)、CTriangle(“三角形”)的定義。請在橫線處填寫適當的代碼并刪除橫線,以實現上述類定義。該程序的正確輸出結果應為: 注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。 #include
{tout<<——<
int area(void){return(width *height);}
class CTriangle:public CPolygon{
int length;//三角形一邊長 int height;//該邊上的高
public:
CTriangle(int l,int h):length(1),height(h){}
//*********found*********
int area(void){return(——)/2;}
};
int main(){
CRectangle rect(4,5); CTriangle trgl(4,5);
//*********found********* ______ *ppolyl,* ppoly2; ppolyl=▭
ppoly2=&trgl;
ppolyl->printarea(); ppoly2->printarea(); retun 0;
參考解析:
(1)virtual int area(void)=0;
(2)area()
(3)length*height
(4)CPolygon
四、綜合應用題
43請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程proj3,其中聲明的DataList類,是一個用于表示數據表的類。s0rt成員函數的功能是將當前數據表中的元素升序排列。請編寫這個sort函數。程序的正確輸出應為: .
排序前:7,1,3,11,6,9,12,10,8,4,5,2 排序后:l,2,3,4,5,6,7,8,9,10,11,12
要求:
補充編制的內容寫在“//********33********”與“//********666********”兩行之問。不得修
改程序的其他部分。
注意:程序最后將結果輸出到文件。ut.dat中。輸出函數writeToFile已經編譯為。obj文件,并且在本程序
調用。
//DataList.h
#inClude using namespaCe std; Class DataList{//數據表類
int len;
double*d: publiC:
DataList(int len,double data[]=NULL);。DataList(){delete[]d;}
int length(Constt retum len;}//數據表長度(即數據元素的個數) double getElement(int i)Const{return d[i];}
void sort();//數據表排序
void show()Const;//顯示數據表}.
void writeToFile(Char*,Const DataList&).//main.Cpp
#inClude”DataList.h”
DataList::DataList(int len,double data[]):len(1en){ d=new double[1en];
for(int i_0;i
d[i]=(data==NULL?0.0:data[i]);
}
void DataList::sort(){//數據表排序//********333********
//********666********}
void DataList::show()Const{//顯示數據表
for(int i=0;i
}
int main(){
double S[]={7,1,3,11,6,9,12,10,8,4,5,2}; DataList list(12,S);
Cout<<”排序前:”; list.show();
list.sort();
Cout<
writeToFile(””,list); return 0;
}
參考解析:
for(inti=0;i
for(int j=i;j
//從i+1處遍歷數組d
if(d[i]>d[j])
//d[j]和d[j]比較人,如果大于,就d[i]和d[j]值交換
{
inttemp=d[i];
//把臨時整型變量temp賦值為cJ[i]
d[i]=d[j];//把d[j]賦值給d[i]
d[j]=temp;//把temp值賦給d[j]
}