2015年計算機二級考試《C++》突破試卷
C.在類型轉換符函數的定義中不需要聲明返回類型
D.可以通過運算符重載來創建c++中原來沒有的運算符
參考答案:C
參考解析:重載運算符的規則如下:①c++不允許用戶自己定義新的運算符,只能對已有的c++運算符進行重載;②c++不能重載的運算符只有5個;③重載不能改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型的對象一起使用,至少應有一個是類對象,即不允許參數全部是c++的標準類型。故本題答案為c。
2在類的定義中,用于為對象分配內存空間,對類的數據成員進行初始化并執行其他內部管理操作的函數是( )。
A.友元函數B.虛函數C.構造函數D.析構函數
參考答案:C
參考解析:構造函數在創建對象時系統自動調用,其功能是使用給定的值將對象初始化。
3軟件設計中模塊劃分應遵循的準則是( )。
A.低內聚低耦合
B.高內聚低耦合
C.低內聚高耦合
D.高內聚高耦合
參考答案:B
參考解析:軟件沒計中模塊劃分應遵循的準則是高內聚低偶合、模塊大小規模適當、模塊的依賴關系適當等。模塊的劃分應遵循一定的要求,以保證模塊劃分合理,并進一步保證以此為依據開發出的軟件系統可靠性強,易于理解和維護。模塊之間的耦合應盡可能的低,模塊的內聚度應盡町能的高。
4如果類A被說明成類B的友元,則( )。
A.類A的成員即類B的成員
B.類B的成員即類A的成員
C.類A的成員函數不得訪問類B的成員
D.類B不一定是類A的友元
參考答案:D
參考解析:本題考查的是友元類的定義:類A為類B的友元類,則類A的所有成員函數都是類8的友元函數,但反之則不一定成立。
5有如下類定義:
class Foo
{
public:
Foo(int v):value(V){}//①
~Foo(){}//②
private:
Foo(){}//③
int value=0://④
};
其中存在語法錯誤的行是( )。
A.①B.②C.③D.④
參考答案:D
參考解析:本題考查對象的初始化,類的數據成員是不能在聲明類時初始化的,所以本題答案為D。
6下面關于數組的描述錯誤的是( )。
A.在C++語言中數組的名字就是指向該數組第一個元素的指針
B.長度為n的數組,下標的范圍是0~n-1
C.數組的大小必須在編譯時確定
D.數組只能通過值參數和引用參數兩種方式傳遞給函數
參考答案:D
參考解析:本題考查的是數組的基本使用,數組還可以通過對應的指針調用傳遞參數,其余選項的說法都是正確的。
7運算符重載是對已有的運算符賦予多重含義,因此( )。
A.可以對基本類型(如int類型)的數據,重新定義“+”運算符的含義
B.可以改變一個已有運算符的優先級和操作數個數
C.只能重載c++中已經有的運算符,不能定義新運算符
D.C++中已經有的所有運算符都可以重載
參考答案:C
參考解析:重載運算符的規則如下:①c++不允許用戶自己定義新的運算符,只能對已有的c++運算符進行重載;②c++不能重載的運算符只有5個;③重載不能改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型的對象一起使用,至少應有一個是類對象,即不允許參數全部是c++的標準類型。故本題答案為c。
8有如下類和對象的定義:
class Constants{
public:
static double getPI(){return 3.1416;}
};
Constants constants:
下列各組語句中,能輸出3.1416的是( )。
A.cout
參考答案:D
參考解析:本題考查靜態成員函數。靜態成員函數由于沒有this指針,所以不能訪問本類中的非靜態成員。引用靜態成員函數有2種方式,一種是直接使用類來引用,即Constants::getpI();另一種是使用對象來引用,即constants.getPI()。所以本題答案為D。
9程序流程圖中帶有箭頭的線段表示的是( )。
A.圖元關系B.數據流C.控制流D.調用關系
參考答案:C
參考解析:在數據流圖中,用標有名字的箭頭表示數據流。在程序流程圖中,用標有名字的箭頭表示控制流。所以選擇C。
10下列程序的執行結果為( )。
#include
void main()
{
int a=3,b=0;
int*P =&a;
b=+a++;
cout<<*P<<”,”<
}
A.3,4B.4,3C.3,3D.4,4
參考答案:B
參考解析:*P為所指對象a的值,語句“b=+a++;”等價于“b=b+a;a=a+1;”。
11對長度為n的線性表排序,在最壞情況下,比較次數不是n(rt一1)/2的排序方法是( )。
A.快速排序B.冒泡排序C.直接插入排序D.堆排序
參考答案:D
參考解析:除了堆排序算法的比較次數是0(nlog2n),其他的都是n(n—1)/2。
12字面常量42、4.2、42L的數據類型分別是( )。
A.long,double、int
B.lon9、float、int
C.int、double、long
D.int、float、long
參考答案:C
參考解析:本題考查整型變量的類型和浮點變量的類型,42默認為int型數據,42后面加上L后,表示long型數據,4.2默認為double型數據。
13下列敘述中正確的是( )。
A.棧是“先進先出”的線性表
B.隊列是“先進后出”的線性表
C.循環隊列是非線性結構
D.有序線性表既可以采用順序存儲結構,也可以采用鏈式存儲結構
參考答案:D
參考解析:棧是先進后出的線性表,所以A錯誤;隊列是先進先出的線性表,所以B錯誤;循環隊列是線性結構的線性表,所以C錯誤。
14不能作為重載函數的調用的依據是( )。
A.參數個數B.參數類型C.函數類型D.函數名稱
參考答案:D
參考解析:所謂重載函數是指同一個函數名可以對應多個函數的實現,編譯器會根據參數個數、參數類型和函數返回值類型不同而自動調用相應的函數。
15下列語句中,錯誤的是( )。
A.const int buffer=256;B.const double*point;C.int const buffer=256;D.double*eonst point:
參考答案:D
參考解析:const是一個C++關鍵字,用于限定不允許改變的變量。選項B是指向常量的指針,定義時可以不初始化;選項D是指針常量,定義時必須初始化。故答案為D。
16下列運算符中,在c++語言中不能重載的是( )。
A.*B.>=C.::D./
參考答案:C
參考解析:不能被重載的運算符還包括:“.”、“.*”、“->*”和“?:”。
17有如下說明:
int a[10]={1,2,3,4,5,6,7,8,9,10},* P=a; 則數值為9的表達式是( )。
A.*P+9B.木(P+8)C.*P+=9D.P+8
參考答案:B
參考解析:本題考查指向數組的指針,本題中指針變量P指向數組a,那么*P的值就是1,即表示數組的第一個元素,那么數值為9的表達式就是將指針向后移動8個地址,即P+8指向的是數組元素值為9,所以數值為9的表達式是*(P+8)。
18執行下列語句段后,輸出字符“*”的個數是( )。
for(int i=50;i>1;i-=2)Cout<<'*':
A.24B.25C.26D.50
參考答案:B
參考解析:本題考查for循環語句,題目中每執行完循環體后,i都會減2.那么只有50到2之間的偶數才能輸出“*”,所以總共輸出25次。
19算法的有窮性是指( )。
A.算法程序的運行時間是有限的
B.算法程序所處理的數據量是有限的
C.算法程序的長度是有限的
D.算法只能被有限的用戶使用
參考答案:A
參考解析:算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。有窮性是指算法程序的運行時間是有限的。
20下面關于break語句的描述中,不正確的是( )。
A.break可以用于循環體內
B.break語句可以在for循環語句中出現多次
C.break語句可以在switch語句中出現多次
D.break語句可用于if條件判斷語句內
參考答案:D
參考解析:本題考查的是break語句的使用,break可以結束switch語句和for循環語句,但是不能使用在條件判斷語句內。
21有如下類定義:
class Point
{
int xx.yy;
public:
Point():xx(0),yy(0){}
Point(int x,int Y=0):xx(X),YY(Y){}
};
若執行語句
Point a(2),b[3],幸c[4];
則Point類的構造函數被調用的次數是( )。
A.2次B.3次C.4次D.5次
參考答案:C
參考解析:本題考查默認構造函數和帶參數的構造函數,題目中定義一個對象a(2)以及對象數組b[3],共執行4次構造函數,對象指針不調用構造函數。所以本題答案為c。
22有如下程序:
#include
using namespace std;
class Basel
{
public:
BaseI(int D.{cout<
一Basel(){}
};
class Base2
{
public:
Base2(int D.{tout<
~Base2(){}
};
class Derived:public Basel,Base2
{
public:
Derived(int a,int b,int c,int D.:Basel(B.,Base2(A.,bl(D.,b2(C.{}
private:
int bl:
int b2:
};
int main()
{
Derived d(1,2,3,4);
return 0;
}
執行這個程序的輸出結果是( )。
A.1234B.2134C.12D.21
參考答案:D
參考解析:本題考查派生類的構造函數和析構函數,在定義一個派生類的對象時,先調用基類的構造函數,然后再執行派生類的構造函數,對象釋放時,先執行派生類的析構函數,再執行基類的析構函數。本題中定義一個派生類對象時,分別調用基類的構造函數,所以分別輸出21。
23以下敘述正確的是( )。
A.函數可以嵌套定義但不能嵌套調用
B.函數既可以嵌套調用也可以嵌套定義
C.函數既不可以嵌套定義也不可以嵌套調用
D.函數可以嵌套調用但不可以嵌套定義
參考答案:D
參考解析:在c++語言中,所有的函數都是平行的,即在定義函數時是互相獨立的,一個函數并不從屬于另一個函數,即函數不能嵌套定義,但可以互相調用。但是不能調用main()函數。
24必須用一對大括號括起來的程序段是( )。
A.switCh語句中的Case標號語句
B.if語句的分支
C.循環語句的循環體
D.函數的函數體
參考答案:D
參考解析:本題考查c++基本控制結構,A、B、C三個選項中的大括號不是必須的,而D選項中的函數體必須使用大括號。
25軟件按功能可以分為應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬于應用軟件的是( )。
A.學生成績管理系統
B.C語言編譯程序
C.UNIX操作系統
D.數據庫管理系統
參考答案:A
參考解析:軟件按功能可以分為:應用軟件、系統軟件、支撐軟件。操作系統、編譯程序、匯編程序、網絡軟件、數據庫管理系統都屬于系統軟件。所以B、C、D都是系統軟件,只有A是應用軟件。
26下面程序的運行結果為( )。
#include
void main()
{
for(int a=0,x=0;!x&&a<=10;a++)
{
a++:
}
cout<
}
A.10B.1lC.12D.0
參考答案:C
參考解析:在進入最后一次循環時a=10,在循環體內執行“a++;”后a=11,執行完該次循環體計算for循環的增量部分后a=12小于l0,循環結束。
27有如下程序:
#include
using namespace std;
int i=1;
class Fun{
public:
static int i;
int value(){return i—l;}
int value()const{return i+1;}
};
int Fun::i=2;
int main(){
int i=3;
Fun funl;
const Fun fun2:
__________________
return 0;
}
若程序的輸出結果是:
123
則程序中下畫線處遺漏的語句是( )。
A.cout<
參考答案:A
參考解析:本題考查構造函數、常成員函數和靜態數據成員。外部同名的變量賦值,不能改變類的靜態變量值,所以Fun對象里的i值為2,所以本題答案為A。
28下列有關模板的敘述中,正確的是( )。
A.函數模板不能含有常規形參
B.函數模板的一個實例就是一個函數定義
C.類模板的成員函數不能是模板函數
D.用類模板定義對象時,絕對不能省略模板實參
參考答案:B
參考解析:本題考查函數模板和類模板的基礎知識,所以本題答案為B。
29運算符重載時不需要保持的性質是( )。
A.操作數個數B.操作數類型C.優先級D.結合性
參考答案:B
參考解析:重載運算符的規則如下:①c++不允許用戶自己定義新的運算符,只能對已有的c++運算符進行重裁;②c++不能重載的運算符只有5個;③重載不能改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型的對象一起使用,至少應有一個是類對象,即不允許參數全部是c++的標準類型。所以答案為B。