1關於運算子過載,下列表述中正確的是( )。
A.c++已有的任何運算子都可以過載
B.運算子函式的返回型別不能宣告為基本資料型別
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的是( )。
參考答案:D
參考解析:本題考查靜態成員函式。靜態成員函式由於沒有this指標,所以不能訪問本類中的非靜態成員。引用靜態成員函式有2種方式,一種是直接使用類來引用,即Constants::getpI();另一種是使用物件來引用,即I()。所以本題答案為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的資料型別分別是( )。
,double、int
9、float、int
、double、long
、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下列語句中,錯誤的是( )。
t int buffer=256;t double*point; const buffer=256;le*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語句的描述中,不正確的是( )。
k可以用於迴圈體內
k語句可以在for迴圈語句中出現多次
k語句可以在switch語句中出現多次
k語句可用於if條件判斷語句內
參考答案:D
參考解析:本題考查的是break語句的使用,break可以結束switch語句和for迴圈語句,但是不能使用在條件判斷語句內。