面向對象C++編程與實踐考試題目


一、選擇題(每題2分,共2×20=40分)

(1) 以下不能對數組 a 進行正確初始化的語句是( )。
A. int a[2][3] = { 0 };
B. int a[ ][3] = { {0,1}, {0} };
C. int a[2][3] = { {0,1}, {2,3}, {4,5} };
D. int a[ ][3] = { 0, 1, 2, 3, 4, 5 };


(2) 用 const 聲明的變量()。
A. 不能被讀取
B. 在聲明時可定義也可不定義
C. 只能被讀取
D. 其值在程序中可以被改變


(3) 有語句 int a[ ] = { 0, 2, 4, 6, 8, 10 },*p = a + 1; 其值等於 0 的表達式是()。
A. * (p++)
B. *(++p)
C. *(p--)
D. *(--p)


(4) 下列的描述中()是錯誤的。
A. 使用全局變量可以從被調用函數中獲取多個操作結果
B. 局部變量可以初始化,若不初始化,則系統默認它的值為 0
C. 當函數調用完后,靜態局部變量的值不會消失
D. 全局變量若不初始化,則系統默認它的值為 0


(5) C++ 語言的跳轉語句中,對於 break 和 continue 說法正確的是()。
A. break 語句只能用於循環體中
B. continue 語句只能用於循環體中
C. break 是無條件跳轉語句,continue 不是
D. break 和 continue 的跳轉范圍不夠明確,容易產生問題


(6) S 是字符數組,用於存儲字符串,下面不能夠判斷字符串 S 是空串的是()。
A. if (S[0] == 0 )
B. if (strlen(S) == 0)
C. if (strcmp(S, "") == 0)
D. if (S == '\0')


(7) C++ 函數的參數傳遞方式有()。
A. 地址傳遞
B. 引用傳遞
C. 雙向值傳遞
D. 由用戶指定傳遞方式


(8) 下面判斷是否構成重載函數的條件中,錯誤的判斷條件是()。
A. 參數類型不同
B. 參數個數不同
C. 參數順序不同
D. 函數返回值不同


(9) 設 a 和 b 是兩個結構體變量,下面正確的表達式是()。
A. a = b
B. a = b + 1
C. a > b
D. a == b


(10) 派生類對象只能訪問基類中的()。
A. 公有繼承的公有的成員
B. 公有繼承的私有成員
C. 公有繼承的保護成員
D. 私有繼承的公有成員


(11) 關於構造函數的敘述中,錯誤的說法是()。
A. 構造函數的名稱必須為類名
B. 構造函數最多只能有一個
C. 創建對象時自動執行構造函數
D. 構造函數無任何函數類型


(12) ()只能訪問靜態成員變量。
A. 靜態成員函數
B. 虛函數
C. 構造函數
D. 析構函數


(13) C++ 中類有兩種用法,一種是類的實例化,即生成類對象;另一種是通過()派生出新的類。
A. 復用
B. 繼承
C. 重載
D. 封裝


(14) 下面描述中,正確的是()。
A. 虛函數是沒有實現的函數
B. 純虛函數的實現在派生類定義
C. 抽象類是具有純虛函數的類
D. 抽象類指針可以指向不同的派生類


(15) 一個類的友函數能夠訪問該類的()。
A. 私有成員
B. 保護成員
C. 公有成員
D. 所有成員


(16) 下列關於構造函數說法不正確的是()。
A. 構造函數必須與類同名
B. 構造函數可以省略不寫
C. 構造函數必須有返回值
D. 在構造函數中可以對類中的成員進行初始化


(17) 關於 new 運算符的下列描述中,()是錯誤的。
A. 它可以用來動態創建對象和對象數組
B. 使用它創建對象或對象數組,可以使用 delete 刪除
C. 使用它創建對象時要調用構造函數
D. 使用它調用對象數組時不許指定初始值


(18) 建立包含有類對象成員的派生類對象時,自動調用構造函數的執行順序依次為()的構造函數。
A. 基類、自己所屬類、成員對象成員所屬類
B. 對象成員所屬類、基類、自己所屬類
C. 自己所屬類、對象成員所屬類、基類
D. 基類、對象成員所屬類、自己所屬類


(19) 下列說法正確的是()。
A. 內聯函數在運行時是將該函數的目標代碼插入每個調用該函數的地方
B. 內聯函數在編譯時是將該函數的目標代碼插入每個調用該函數的地方
C. 類的內聯函數必須在類體內定義
D. 類的內聯函數必須在類體外通過關鍵字 inline 定義


(20) 執行語句:

int a = 10, b;
int &pa = a, &pb = b

后,下列正確的語句是()。
A. &pb = a
B. pb = pa
C. &pb = &pa
D. *pb = *pa



二、判斷題(每題 1 分,共10×1 =10分)

(1) 函數的形參時局部變量。

(2) 有語句 #define n 10 ,則 int a[n] ; 定義數組是合法的。

(3) 賦值運算符只能作為成員函數進行重載。

(4) 條件編譯的作用是根據不同條件進行編譯不同程序段,以提高程序的兼容性。

(5) 靜態數據成員必須在類外定義和初始化。

(6) 可以對類成員變量直接賦值。

(7) 在 class 定義一個類時,數據成員函數的默認訪問權限是私有的。

(8) 抽象類通常應用派生類。

(9) 指針可以做任何類型的強制轉換。

(10) 對象不能作為數組元素。



三、編程題

1、編寫程序,輸入 100 個數值,從小到大排序后輸出。(10分)


2、輸入一行字符,按輸入字符的反序建立一個單向鏈表存儲這些字符,並輸出該鏈表中的字符。(10分)
節點的結構:

struct node{
    char ch;
    node *next;
};

3、設計三角形類 CTriangle ,寫出下面 6 個成員函數。三角形類的部分定義如下:(30分)

class CTriangle{
    float a, b, c;  //三角形的三條邊長
    float area;  //保存三角形的面積
    public:
    	// (1)默認構造函數
    	// (2)有初始值的構造函數
    	// (3)拷貝函數
    	// (4)設置三角形的三條邊長度
    	// (5)得到三角形的三條邊長度
    	// (6)“+” 運算符重載,實現 2 個三角形的面積之和
};

參考答案


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM