標籤:面試題
不知道答案是否正確。。日後再完善。。
一、C/C++基礎
選擇與填空
1. VC++6.0環境下,假定a 為一個整型(int)數組名,則元素a[8]的地址為:C
A. a+4 B.a+8 C.a+16 D.a+32
2. 定義 "int a=3, b=4, c=5;" , 則"c <= (a + b) && b != c" 的值是( )1
3. char* name = "Victor Hugo";
則 sizeof(name)= ( 4 ), sizeof(*name) = ( 1).
4. int* p = NULL; 當 delete p 時會發生( D )
A. 堆棧破壞 B.記憶體流失
C. 正常運行 D.程式中斷
5. 已定義了一個類A並有語句 A* pa=new A(5); 那麼以下說法正確的是:A
A. 該語句會建立A類的一個對象,並將此對象的地址賦給指標pa;
B. 該語句會建立A類的5個對象,且它們的地址是連續的;
C. 當指標變數pa超出其範圍時,pa和為對象分配的空間都將被自動釋放;
D. 類A中一定有一個顯式定義的建構函式和一個顯式定義的虛解構函式;
6. 在一個類中,下列哪些成員可以是多個? D
A. 無參建構函式 B. 解構函式
C. 原型相同的非靜態成員函數 D. 靜態成員函數
7.建立一個有成員對象的衍生類別對象時,各建構函式體的執行順序為:C
A. 衍生類別成員對象類 基類 B. 成員對象類 基類 衍生類別
C. 基類成員對象類 衍生類別 D. 基類 衍生類別 成員對象類
8. 定義類A的非靜態成員函數A&f(A& one)時,需有語句returnexp;則exp不能是:B
A.類A中類型為A的待用資料成員 B. f中用語句 A a = one; 定義的量a
C. one D. *this
9. 在下列關鍵字中,不能用來表示繼承方式的是: B
A. private B. static C. public D. protected
10.關於virtual void Draw()=0; 下面說法不正確的是(C )
A.它是純虛函數
B.它在定義它的類中不能實現
C.如果一個類要繼承定義它的類,則必須要實現其中的所有純虛函數
D. 定義它的類不可執行個體化
11. 設有變數定義 int i, j; 與運算式 i==0 && j==0 等價的運算式是:( B )
(A) i||j (B) !i&&!j (C) !i==!j (D) i==j
12. 設變數int a = 5; 下列哪個運算式計算後,使得變數b的值等於2 ?( A )
(A) b=a/2 (B) b=6-(a--) (C) b=a%2 (D) b=a>3?3:2
13. 已知 int x=1, y=0; 執行下面程式段後,y的值為( C )。
if(x) { if (x>0) y=1; } else y= -1 ;
(A)-1 (B)0 (C) 1 (D)不確定
14.下面不能夠判斷字串S是空串的是( D)
(A) if (S[0]==0) (B) if(strlen(S)==0)
(C) if(strcmp(S,””)==0) (D)if(S==’\0’)
15. char x[5]={‘a’,’b’,’\0’,’c’,’\0’}輸出該字串的結果是( B )
(A)’a’’b’ (B)ab (C) ab c (D)abc
16. 下面關於new和delete運算的敘述中,錯誤的說法是( C )。
(A)由new分配的記憶體空間是連續的
(B)如果當前記憶體無足夠的空間可分配,則new運算子返回NULL
(C)由new運算子分配的記憶體空間,當函數執行結束時系統會自動收回
(D)對於程式中的靜態數組佔用的儲存空間不能使用delete來釋放
17. 設有定義:
struct data
{
int i;
char ch;
double q;
double f
}b;
在不考慮記憶體對齊的情況下,結構體變數b佔用記憶體的位元組數是( D )
(A)18 (B)19 (C)20 (D)21
18. 已知X類.則當程式執行到語句,X array[3];時,調用了( D )次建構函式。
A)0 B)1 C)2 D)3
19. 下列對衍生類別的描述中,錯誤的是( D )。
A)一個衍生類別可以作為另一個衍生類別的基類
B) 衍生類別至少有一個基類
C)衍生類別的成員除了自己的成員外,還包含了它的基類的成員
D)衍生類別中繼承的基類成員的存取權限到衍生類別保持不變
20. 下面對待用資料成員的描述中,正確的是(B )。
A)待用資料成員可以在類體內進行初始化
B)待用資料成員可以直接用類名調用
C)待用資料成員不能受private控制符的作用
D)待用資料成員不可以被類的對象調用
二、資料結構
1. 設x=0011 0110(二進位),則若想通過x&y運算使x中的低4位不變,高4位清零,則下面能實現此功能的是(B )
(A)x=x|0x0f (B) x=x&0x0f (C)x=x|0xf0 (D) x=x&0xf0
2. 在帶有頭結點的單鏈表HL中,要向表頭插入一個由指標p指向的結點,則執行( B )。
A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p;
C. p->next=HL; p=HL; D. HL=p; p->next=HL;
3.設輸入序列為1、2、3、4、5、6,則通過棧的作用後可以得到的輸出序列為(B )。
(A) 5,3,4,6,1,2 (B) 3,2,5,6,4,1
(C) 3,1,2,5,4,6 (D) 1,5,4,6,2,3
4.設某鏈表中最常用的操作是在鏈表的尾部插入或刪除元素,則選用下列( B )儲存方式最節省運算時間。
(A)單向鏈表 (B) 單向迴圈鏈表
(C) 雙向鏈表 (D) 雙向迴圈鏈表
5.設有序表中的元素為(13,18,24,35,47,50,62),則在其中利用二分法尋找值為24的元素需要經過(C )次比較。
(A)1 (B) 2 (C) 3 (D) 4
6.設順序表的長度為n,則順序尋找的平均比較次數為( C )。
(A)n (B) n/2 (C) (n+1)/2 (D) (n-1)/2
7.設在一棵度數為3的樹中,度數為3的結點數有2個,度數為2的結點數有1個,度數為1的結點數有2個,那麼度數為0的結點數有( C )個。
(A)4 (B) 5 (C) 6 (D) 7
8. 隊列是一種( A )的線性表。
(A)先進先出 (B) 先進後出 (C) 只能插入 (D)只能刪除
9. 設無向圖G中的邊的集合E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},則從頂點a出發進行深度優先遍曆可以得到的一種頂點序列為(A )。
(A)aedfcb (B) acfebd (C) aebcfd (D)aedfbc
10.設某無向圖有n個頂點,則該無向圖的鄰接表中有( B)個表頭結點。
(A)2n (B) n (C) n/2 (D) n(n-1)
11. 設某強連通圖中有n個頂點,則該強連通圖中至少有(C )條邊。
(A)n(n-1) (B) n+1 (C) n (D) n(n+1)
12. 一個棧的輸入序列為1 2 3,則下列序列中不可能是棧的輸出序列的是( C )
A.2 3 1 B.3 2 1
C.3 1 2 D.1 2 3
13. 在疏鬆陣列的帶行指標向量的連結儲存中,每個單鏈表中的結點都具有相同的(A )。
A.行號 B.列號 C.元素值 D.非零元素個數
14.以下資料結構中哪一個是非線性結構?( D )
A. 隊列 B. 棧 C. 線性表 D. 二叉樹
15、棧的插入和刪除操作在(A)進行。
A 棧頂 B 棧底 C 任意位置 D 指定位置
三、Windows
1. 有關32位Windows下控制代碼(handle)的說法,下列不正確的是:C
A 控制代碼是一個4位元組長的整數值
B 控制代碼用來標識應用程式中不同的對象或同類對象中的不同執行個體
C 訊息是控制代碼的一種
D 畫筆的控制代碼類型是HPEN,畫刷的控制代碼類型是HBRUSH
E 不知道
2.在一個Windows API的基本應用程式架構中,有如下的訊息迴圈:
while( GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;
}
下面哪個訊息使得該訊息迴圈退出運行,從而終止整個應用程式的運行: B
A WM_DESTROY
B WM_QUIT
C WM_CLOSE
D WM_CREATE
E 不知道
3.關於Windows API編程時的視窗函數(WndProc)的說法,不正確的是:D
A 它是一個回呼函數
B 它內部的switch…case分支判斷用於不同類型訊息的處理
C 它有四個入口參數,其意義和訊息結構體MSG的意義相同
D 如果使用全空的視窗函數(內部沒有代碼),Windows也會負責按照預設方法處理訊息
4.Windows視窗對重新整理請求的相應,下列哪種情況下不需要應用程式考慮:D
A,視窗移動後的重新整理
B,被覆蓋地區的重新整理
C,通過捲軸滾動視窗時
D,表徵圖或游標穿越視窗時
E,不知道
5.下列有關Windows繪圖中映像模式的說法,不正確的是:D
A,預設的映像模式是MM_TEXT
B,只有MM_ANISOTROPIC模式下,X,Y軸的比例可以不是1:1
C,在所有的映像模式下,預設時視窗左上方的座標都是(0,0)
D,MM_HIMETRIC模式下,X軸正方向向右,Y軸正方向向下
E,不知道
6. 下列關於Windows應用程式對鍵盤響應的說法,正確的是:D
A,鍵盤的掃描碼不依賴於具體裝置
B,Windows應用程式不使用訊息來處理鍵盤響應
C,按下鍵盤上的一個鍵,不可能同時產生按鍵訊息和字元訊息
D,WinMain函數的訊息迴圈中的TranslateMessage函數用於把按鍵訊息轉換為字元訊息
7. 下列關於Windows應用程式對滑鼠響應的說法,正確的是:B
A,只有使用中視窗才能接受滑鼠事件
B,可以調用函數SetCapture()實現對滑鼠的捕捉,且捕捉滑鼠後系統的鍵盤功能暫時失效
C,使用者只能調用系統定義的滑鼠的游標形狀,不能自訂游標
D,可以通過相應單一類型的滑鼠訊息來響應滑鼠的拖動事件
E,不知道
8.在Windows API開發的應用程式架構中,下列哪種方法不能載入菜單:D
A,在視窗類別的定義時,把結構體WNDCLASS的lpszMenuName設定為合適的菜單名
B,在建立視窗時,首先調用LoadMenu獲得菜單控制代碼,然後調用函數CreateWindow載入該菜單
C,在應用程式中調用LoadMenu獲得菜單控制代碼後,調用函數SetMenu動態載入菜單
D,在視窗處理函數中,針對菜單訊息設定合適的訊息響應
E,不知道
9.下列API中,能將訊息投遞到一個視窗而不等待視窗處理完畢就返回的是:A
A.SendMessage
B.PostMessage
C.SendThreadMessage
D.PostThreadMessage
E.不知道
10. 下列API中,可以用來開啟裝置控制代碼的是:A
A.CreateFile
B.OpenProcess
C.OpenClipboard
D.OpenMutex
E.不知道
四、MFC
1.在CView中可以獲得文檔對象指標的函數是( GetDocument
)
2. CDialog類繼承自(CWnd )類
3. CListBox類中,得到被使用者選擇串的索引的成員函數是( GetCurSel )
4. CDialog類中,獲得具有指定ID的子控制項的指標的成員函數是( GetDlgItem )
5.CString類中,能在一個較大的字串中尋找字元或子字串的成員函數是(Find )
6.MFC中,用來建立新線程的全域函數是( AfxBeginThread)
7.所有COM組件都必須要實現的一個介面是( IUnknown
)
8.MFC中,從(CCmdTarget )類派生的類都可以有訊息映射。
9.一個COM組件,如果要支援自動化,必須實現的介面是(IDispatch )
10.基於MFC的win32可執行程式,有且僅有一個從(CWinApp )類派生的應用程式類的對象,該對象代表該應用程式本身。
11.MFC中,文字框對應的類是CEdit,那麼工具條對應的類是( CScrollBar )
12.MFC中,已知某按鈕的指標是CButton* p; 那麼將此按鈕設定為灰色禁用狀態可以調用函數(EnableWindow )
13.令視窗重繪的訊息是(WM_PAINT )
五、進階編程/其它
1. 要對絕對位址0x100000賦值,我們可以用 *(int*)0x100000 = 1234;
那麼要是想讓程式跳轉到絕對位址0x100000去執行,應該怎麼做?請寫出代碼
*((void(*)())0x100000)(); 採用函數指標做跳轉
2.已知0x64是鍵盤的資料連接埠,當鍵盤上某個鍵被按下時,將可以從資料連接埠讀取到被按下鍵的掃描碼。某程式員在VS2008中的MFC對話方塊程式下編寫了如下代碼,試圖擷取鍵盤的輸入資訊,然而他失敗了,請問這是為什嗎?如何解決?
#include <conio.h>
……
BYTE ReadDataFromKeyboard()
{
return_inp(0x64);
}
3.對於一個位元組(8bit)的資料,求其中二進位位“1”的個數,要求演算法的執行效率儘可能的高。
4. 交換int型變數a和b的值,要求不使用臨時變數。
5. 請默寫冒泡排序演算法。函數簽名為void Sort(int pData[],int Count);
6.下面哪一本C++參考書最厚?
A.《Think in C++》 B.《深入淺出MFC》
C.《C++ Primer》 D.《Effective C++》
windows/mfc面試題一套