- 相關推薦
2016年計算機二級C++考試試卷及答案
選擇題(每小題1分,共40小題,共40分)
1.數據的存儲結構是指( )。
A.數據所占的存儲空間
B.數據的邏輯結構在計算機中的存放形式
C.數據在計算機中的順序存儲方式
D.存儲在計算機外存中的數據
2.將E-R圖轉換到關系模式時,實體與實體間的聯系可以表示成( )。
A.屬性
B.關系
C.鍵
D.域
3.對長度為n的線性表進行順序查找,在最壞情況下需要比較的次數為( )。
A.125
B.n/Z
C.n
D.n+1
4.樹是結點的集合,它的根結點的數目是( )。
A.有且只有1個
B.1或多于1
C.0或1
D.至少有2個
5.設R是一個二元關系,S是一個三元關系,則下列運算中正確的是( )。
A.R-S
B.R×S
C.R∩S
D.R∪S
6.關于結構化程序設計原則和方法的描述錯誤的是( )。
A.選用的結構只允許有一個入口和一個出口
B.復雜結構應該用嵌套的基本控制結構進行組合嵌套來實現
C.不允許使用GOTO語句
D.語言中所沒有的控制結構,應該采用前后一致的方法來模擬
7.對關系S和R進行集合運算,結果中既包含S中的所有元組也包含R中的所有元組,這樣的集合運算稱為( )。
A.并運算
B.交運算
C.差運算
D.積運算
8.下列敘述中正確的是( )。
A.在面向對象的程序設計中,各個對象之間具有密切的關系
B.在面向對象的程序設計中,各個對象都是公用的
C.在面向對象的程序設計中,各個對象之間相對獨立,相互依賴性小
D.上述三種說法都不對
9.結構化程序設計的三種基本結構是( )。
A.過程、子程序和分程序
B.順序、選擇和重復
C.遞歸、堆棧和隊列
D.調用、返回和轉移
10.在數據庫設計中,將E-R圖轉換為關系模式的過程屬于( )。
A.需求分析階段
B.邏輯設計階段
C.概念設計階段
D.物理設計階段
11.在C++語言中函數返回值的類型是由( )決定的。
A.調用該函數時系統臨時
B.return語句中的表達式類型
C.定義該函數時所指定的函數類型
D.調用該函數時的主調函數類型
12.下列描述正確的是( )。
A.表示m>n為true或mn&&m B.switch語句結構中必須有default語句
C.if語句結構中必須有else語句
D.如果至少有一個操作數為true,則包含‖運算符的表達式為true
13.使用ifstream流類定義流對象并打開磁盤文件時,文件的隱含打開方式為( )。
A.ios::in
B.ios::out
C.ios::inlios::out
D.沒有默認
14.下列各類函數中,不是類的成員函數的是( )。
A.構造函數
B.抽象類
C.派生類
D.以上都不對
15.下面關于數組的初始化正確的是( )。
A.charstr[]={’a’,’b’,’e’}
B.charstr[2]={’a’,’b’,’e’)
C.charstr[2][3]={{’a’,’b’},{’C’,’d’},{’e’,’f’}}
D.charstr()={’a’,’b’,’C’}
16.類模板templateclassX{…},其中友元函數f對特定類型T(如int),使函數f(x)成為x模板類的友元,則其說明為( )。
A.friendvoidf();
B.friendvoidf(x);
C.friendvoidA::f();
D.friendvoidC::f(x);
17.類MyClass的定義如下:
classMyClass
{
public:
MyClass(){value=0;}
SetVariable(inti){valtic=i;}
private:
intvalue;
};
MyClass*P,my;p=&my;
則對下列語句序列正確的描述是( )。
A.語句p=&my;是把對象my賦值給指針變量P
B.語句MyClass*P,my;會調用兩次類MyClass的構造函數
C.對語句*P.SetVariable(5)的調用是正確的
D.語句P->SetVariable(5)與語句my.SetVariable(5)等價
18.下面關于break語句的描述中,不正確的是( )。
A.break可以用于循環體內
B.break語句可以在for循環語句中出現多次
C.break語句可以在switch語句中出現多次
D.break語句可用于if條件判斷語句內
19.如果表達式-x/y中的“--”和“/”是作為友元函數重載的運算符,采用運算符函數調用格式,該表達式還可表示為( )。
A.operator/(x.operator--(),y);
B.operator/(operator--(x),y);
C.X.operator--().operator/(y);
D.y.operator/(operator--(x));
20.已知類A有公用數據成員a,并重載了=運算符,且有Aobj2;constA*ptr=newA;,則下列語句錯誤的是( )。
A.ptr->a=100;
B.ptr=&obj2;
C.ptr++;
D.obj2=*ptr;
21.可以用P.a的形式訪問派生類對象P的基類成員a,其中a是( )。
A.私有繼承的公有成員
B.公有繼承的私有成員
C.公有繼承的保護成員
D.公有繼承的公有成員
22.下面程序的運行結果為( )。
#include
classA
{
intnum;
public:
A(inti){num=i;)
A(A&a){num=a.num++;}
voidprint(){cout< };
voidmain()
{
Aa(1),b(a);
a.print();
b.print();
}
A.11B.12
C.21D.22
23.設有定義charstr[80];以下不能將輸入數據first\nsecond\n讀取到數組str中的語句是( )。
A.cin.get(str,strlen(str));
B.cin.getline(str,strlen(str));
C.cin>>str;
D.cin.read(str,strlen(str));
24.下列程序的輸出結果為( )。
#include
classTestClass
{
public:
TestClass(){val++;}
static,intval;
};
intTestClass::val=0;
voidmain()
{
TestClasscsl;
cout< TestClasscs2;
TestClasscs3,cs4;
cout< }
A.O3
B.13
C.14
D.24
25.有以下類定義:
classMyClass
{
private:
intid;
chargender;
char*phone;
public:
MyClass():id(0),gender(’#’),phone(NULl){}
MyClass(intn0,charge=’#’,char*ph=NULL)
{id=no;gender=ge;phone=ph;}
};
下列類對象定義語句中錯誤的是( )。
A.MyClassmyObj;
B.MyClassmyObj(11,"13301111155");
C.MyClassmyObj(12,’m’);
D.MyClassmyObj(12);
26.下列是關于派生類聲明的開始部分,其中正確的是( )。
A.classvirtualB:publicA
B.virtualclassB:publicA
C.classB:publicAvirtual
D.classB:virtualpublicA
27.如果類A被說明成類B的友元,則( )。
A.類A的成員即類B的成員
B.類B的成員即類A的成員
C.類A的成員函數不得訪問類B的成員
D.類B不一定是類A的友元
28.下列關于虛基類的描述,錯誤的是( )。
A.設置虛基類的目的是為了消除二義性
B.虛基類的構造函數在非虛基類之后調用
C.若同一層中包含多個虛基類,這些虛基類的構造函數按它們說明的次序調用
D.若虛基類由非虛基類派生而來,則仍然先調用基類構造函數,再調用派生類的構造函數
29.下列關于多態性的描述,錯誤的是( )。
A.C++語言中的多態性分為編譯時的多態性和運行時的多態性
B.編譯時的多態性可通過函數重載實現
C.運行時的多態性可通過模板和虛函數實現
D.實現運行時多態性的機制稱為動態綁定
30.若有如下程序:
#include
usingnamespacestd;
classTestClassl
{
private:
inta;
public:
TestClassl(inti)
{
a=i:
}
voiddisp( )
{
cout< }
};
classTestClass2
{
private:
intb:
public:
TestClass2(intj)
{
b=j;
}
voiddisp()
{
cout< }
};
classTestClass3:publicTestClass2,publicTestClassl
{
private:
intc;
public:
TestClass3(intk):TestClass1(k-2),TestClass2(k+2)
{
c=k:
}
voiddisp()
{
TestClasssl::disp();
TestClasss2::disp();
cout< }
};
intmain()
{
TestClass30bj(10);
obj.disp();
return0;
}
程序執行后的輸出結果是( )。
A.10,10,10
B.10,12,14
C.8,10,12
D.8,12,10
31.在下列程序的橫線處填上適當的內容,使程序執行后的輸出結果為ABCD( )。
#include
usingnamespacestd;
classA
{
public:A(){cout<<’A’;}
};
classB:
{
public:B(){cout<<’B’;}
};
classC:virtualpublicA
{
public:C(){cout<<’C’;}
};
classD:publicB,publicD
{
public:D(){cout<<’D’;}
};
voidmain(){D04;}
A.publicA
B.privateA
C.protectedA
D.virtualpublicA
32.有如下程序:
#include
usingnamespacestd;
classAA{
intn;
public:
AA(intk):n(k){}
intget(){returnn;}
intget()const{returnn+1;}
};
intmain()
{
AAa(5);
constAAb(6);
cout< return0;
}
執行后的輸出結果是()。
A.55
B.57
C.75
D.77
33.有如下程序:
#include
usingnamespacestd;
classDemo
{
public:
Demo(){cout<<"defaultconstructor\n";}
Demo(constDemo&x){cont<<"copyconstruc-
tor\n";}
};
DemouserCode(Demob){Democ(b);returnC;}
intmain()
{
Demoa;d;
cout<<"callinguserCode()\n";
d=userCode(a):
return0;
}
執行上面程序的過程中,構造函數Demo( )和Demo(constDem0&x)被調用的次數分別是( )。
A.1和1
B.1和2
C.2和3
D.2和4
34.有如下程序:
#include
usingnamespacestd;
classDA{
intk;
public:
DA(intx=1):k(x){}
~DA(){cout< };
intmain(){
DAd[]={DA(3),DA(3),DA(3));
DA+p=newDA[2];
delete[]p;
return();
}
這個程序的輸出結果是( )。
A.111
B.333
C.11333
D.11133
35.有如下程序:
#include
usingnamespacestd;
classMyClass{
public:
MyClass(intx):val(x){}
voidPrint()const{cout<<"const:val="<< voidPrint(){cout<<"val="< private:
intval;
};
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
obj1.Print();
obj2.Print();
return0;
}
程序的輸出結果是( )。
A.va1=10const:va1=20
B.const:va1=10const:va1=20
C.const:va1=10val=20
D.val=10va1=20
36.關于函數中的<返回類型>。下列表述中錯誤的是( )。
A.<返回類型>中有可能包含關鍵字int
B.<返回類型>中有可能包含自定義標識符
C.<返回類型>中衣可能包含字符*
D.<返回類型>中可能包含[]
37.Sample是一個類,執行下面語句后,調用Sample類的構造函數的次數是( )。
Samplea[2],*p=newSample;
A.0
B.1
C.2
D.3
38.有如下兩個類定義:
classXX{
private:
doublex1;
protected:
doublex2;
public:
doublex3;
};
claseYY:protectedXX{
private:
doubley1;
protected;
doubley2;
public:
doubley3;
};
在類YY中保護成員變量的個數是( )。
A.1
B.2
C.3
D.4
39.下列關于運算符重載的描述中,錯誤的是( )。
A.可以通過運算符重載在C++中創建新的運算符
B.賦值運算符只能重載為成員函數
C.運算符函數重載為類的成員函數時,第一操作參數就是該類對象
D.重載類型轉換運算符時不需要聲明返回類型
40.下列關于類模板的描述中,錯誤的是( )。
A.類模板的成員函數都是模板函數
B.可以為類模板參數設置默認值
C.類模板描述了一組類
D.類模板中只允許有一個類型參數
【參考答案及解析】
1.B。【解析】數據的存儲結構,又稱為數據的物理結構,是數據的邏輯結構在計算機中的存放形式。數據的存儲結構有順序結構、鏈式結構、散列結構和索引結構等。
2.B。【解析】將E-R圖轉換成指定RDBMS中的關系模式是數據庫邏輯設計的主要工作。從E—R圖到關系模式的轉換是比較直接的,實體和聯系都可以表示成關系。
3.C。【解析】對線性表進行順序查找時,從表中的第一個元素開始,將給定的值與表中逐個元素的關鍵字進行比較,直到兩者相符,查找到所要找的元素為止。在最壞情況下,要查找的元素是表的最后一個元素或查找失敗,這兩種情況都需要將這個元素與表中的所有元素進行比較,因此比較次數為n。
4.C。【解析】樹具有明顯的層次關系,即樹是一種層次結構。在樹結構中,根結點在第一層上。當樹為非空時,樹中有且只有一個根結點,當樹為空時,樹中根結點的數目為0。
5.B。【解析】關系的交(∩)、并(∪)和差(-)運算要求兩個關系是同元的,顯然作為二元的R和三元的S只能做笛卡兒積運算。
6.C。【解析】限制使用GOTO語句是結構化程序設計的原則和方法之一,但不是絕對不允許使用GOTO語句。其他三項為結構化程序設計的原則。
7.A。【解析】關系的并運算是指由結構相同的兩個關系合并,形成一個新的關系,其中包含兩個關系中的所有元組。
8.C。【解析】面向對象的程序設計是用對象模擬問題領域中的實體,各對象之間相對獨立,相互依賴性小,通過消息來實現對象之間的相互聯系。
9.B。【解析】程序的三種基本控制結構包括順序、選擇和重復(循環),這三種結構足以表達出各種其他形式的結構。
10.B。【解析】數據庫設計階段主要包括需求分析、概念設計、邏輯設計和物理設計。其中邏輯設計的主要工作是將E-R圖轉換為關系模式。
11.C。【解析】函數類型決定了函數返回值的類型。函數值返回類型可以由編譯器自動完成類型轉換。在函數有返回值的調用中,編譯器將return后面的表達式的類型強制轉換為該函數定義時指定的返回值類型。
12.D。【解析】本題主要考查C++語言的基本語法,選項A中應該為m>n‖m 13.D。【解析】使用ifstream流類定義流對象并打開磁盤文件時,文件沒有默認的打開方式。其中ios::in是為輸入而打開;iso::out是為輸出而打開。
14.C。【解析】構造函數包括默認構造函數和拷貝構造函數等,析構函數和構造函數一樣屬于類的特殊的成員函數。而友元函數則是為了增加類的訪問靈活性而允許其他類的成員函數或全局函數訪問類的內部變量或成員函數的一種機制,其缺點是破壞了類的封裝性。
15.A。【解析】本題考查的是字符數組的初始化。選項B中用三個元素初始化大小為2的數組,越界了;選項C中應該是2行3列的數組,題中使用3行2列初始化;選項D中數組應用方括號。
16.B。【解析】聲明一個函數模板的格式template<模板形參表聲明>函數聲明。調用模板函數時,如果與模板實參中最后的若干個參數有關的信息可以從模板函數的實參中獲得,則相關的模板實參可以省略。
17.D。【解析】語句p=&my;是把對象my的地址值賦給指針變量P。語句MyClass*P,my;,由于P只是一個指向對象的指針,因此定義指針P不調用構造函數,所以此語句只調用一次構造函數。對成員函數的引用可以通過兩種形式:指針->成員函數(形參表)或者對象名.成員函數名(形參表)。
18.D。【解析】本題考查break語句的使用。break可以結束switch語句和for循環語旬,但是不能使用在條件判斷語句內。
19.B。【解析】本題考核運算符的重載。假定已經作為某個類的成員函數重載了二元運算符+,且c1、c2都是該類的對象,則c1.operator+(c2)與c1+c2含義相同。如果+作為該類的非成員函數重載,則operator+(c1,c2)與c1+c2含義相同。同理,運算符“/”作為友元函數重載,則(--x)/y與表達式operator/((…x),y)相同。前綴運算符“--”作為友元函數重載,則--x與operator--(x)相同,所以組合起來是operator/(operator--(x),y);,即B選項。
20.A。【解析】本題考查const修飾符的作用。注意,const位置不同,其修飾的部分也是不同的。本題中const修飾的是ptr所指的對象本身,所以,ptr可以重新指向新的對象,而ptr->a則無法被更新。
21.D。【解析】只有公有繼承的公有成員才能被派生類的對象直接訪問,其他的情況都會因為訪問權限問題產生錯誤。
22.C。【解析】本題考查考生對拷貝構造函數的掌握。因為++運算是右結合的,所以在使用a對b賦值時,b的hum變為1,而a的num變為2(先賦值再自加)。
23.D。【解析】本題考查cin流對象的幾種成員函數get,getline,read及流提取符>>的使用規則。
24.C。【解析】由主函數main入手,定義TestClass類的對象cs1,執行cs1.va1,其中va1為靜態變量,根據intTestClass::val=0;初始化,TestClass中的TestClass(){val++;}構造函數執行后,val值為1。主函數中接著定義對象cs2,cs3,cs4。執行cout< 25.B。【解析】本題考查構造函數的應用。對象建立用初始化列表對數據成員進行時。列表中的參數類型要與構造函數中形參類型一致。B選項中第二個參數為13301111155,是字符串,而構造函數中第二個形參為char型,兩者不一致造成錯誤。
26.D。【解析】聲明派生類的一般形成為class派生類名:[繼承方式]基類名。其中繼承方式包括public、private和protected。而virtual為C++中的關鍵字,所以選項C錯。虛函數的使用方法是在基類用virtual聲明成員函數為虛函數。
27.D。【解析】本題考查的是友元類的定義:類A為類B的友元類,則類A的所有成員函數都是類B的友元函數,但反之則不一定成立。
28.B。【解析】虛基類的引入就是為了消除二義性,其構造函數的調用仍然是按照繼承的順序進行的,對于多個虛基類則按它們說明的次序調用,虛基類的構造函數先于非虛基類的構造函數執行。
29.C。【解析】編譯時的多態性是通過函數重載和模板體現的,運行時的多態性是通過虛函數體現的。
30.D。【解析】首先定義TestClass3的對象obj,參數為10。其中TestClass3為TestClass1和TestClass2的派生類。然后調用disp成員函數。disp中首先執行TestClassl::disp();,然后執行TestClass2::disp();,最后執行輸出語句cout< 31.D。【解析】由主函數main入手,定義了類D對象obi。其中D為類B和C的公有繼承,A是C的
虛基類。題目中要求的輸出結果為ABCD,依次為類A、類B、類C、類D中構造函數的輸出語句。為了保證基類通過多條路徑被派生類繼承,即保證A只被繼承一次,輸出一個A,所以不但需要聲明A為C的虛基類,同樣也要聲明A為B的虛基類。
32.B。【解析】所謂函數重載,是指同一個函數名可以對應著多個函數的實現,類AA中定義了兩個9et()函數,一個為普通成員函數,另一個為常成員函數。一般對象a既可以調用普通成員函數get,也可以調用常成員函數get,但是由于常成員函數不能更新對象的數據成員,所以題中通過對象a調用的函數為普通成員函數get(),返回值為5。常對象b只能調用常成員函數,所以題中通過對象b調用的函數為常成員函數get(),返回值為7。
33.C。【解析】函數Demo()為構造函數,而Demo(constDemo&x)為復制構造函數。C++在創建一個對象時,會自動調用類的構造函數,所以語句"Demoa,d;"將調用函數Demo()2次。當一個對象作為實參傳遞給函數時為初始化形參,要調用拷貝構造函數;在函數返回一個對象時調用拷貝構造函數。由此可知語句d=userCode(a);調用拷貝構造函數3次。
34.C。【解析】本題考查的是析構函數和對象的生存期。在主函數中,首先定義了一個DA類對象數組d,從初始化列表中可以看出,它包含三個對象;然后通過new運算符動態創建了一個DA類的對象數組,并將首地址賦給DA類指針P;接著通過delete[]運算符銷毀指針P所指向的數組,故此時會輸出11。最后函數結束,銷毀前面定義的對象數組d,會輸出333。故最后的輸出結果是11333。
35.D。【解析】在建立類對象時,構造函數的執行順序如下:執行基類的構造函數,調用順序按照各個基類被繼承的聲明順序;執行成員對象的構造函數,調用順序按照各個成員在類中的聲明順序;執行自身的構造函數。根據以上總結以及題意可知答案選擇D選項。
36.B。【解析】<返回類型>又稱函數類型,表示一個
函數所計算(或運行)的結果值類型,這里的類型可以是預定義類型(如int)、復合類型(如double*)、用戶定義類型(如枚舉類),若返回值只做更新(或設置)等操作,則該函數返回類型為void類型,函數類型和內置數組不能作為返回類型,但類類型和容器類型可以被直接返回。
37.D。【解析】構造函數在對象被創建時由系統自動調用,本題共創建3個對象。
38.C。【解析】派生類從基類保護繼承classYY:pro-tectedXX時,基類的公有成員在派生類中變為保護成員,基類的保護成員在派生類中仍然是保護成員;本題中YY本身有一個保護成員y2,再加上基類XX的x2和x3,故選C。
39.A。【解析】運算符的重載是針對C++中原有運算符進行的,不能通過重載創造新的運算符。
40.D。【解析】類模板是一系列相關類的模板,類成員組成相同,成員函數的源代碼形式相同,所不同的是所針對的類型。類模板的成員函數都是模板函數,在用類模板定義對象時,由于沒有像函數實參表這樣的額外信息渠道,因此無法按函數模板的方式省略模板實參。但可以為類模板的參數設置默認值。由此可知應選D。
【計算機二級C++考試試卷及答案】相關文章:
計算機二級考試C++試題及答案09-20
計算機二級考試C++試題及答案08-14
計算機等級考試二級筆試卷(含答案)05-29
2017計算機二級考試C++考試大綱10-14
2017計算機二級考試C++考試內容08-29
計算機二級c++主要考試內容07-15