注:參考大部分取自牛客網試卷下方讨論區
1.
以上代碼使用VC編譯成32位可執行程式,請問:nLenA、nLenAObject、nLenB、nLenAObject、nLenC、nLenCObject的值分别為( )
A. 1,1,4,4,8,8
B. 0,0,4,4,4,4
C. 0,0,4,4,8,8
D. 1,1,4,4,4,4
參考:
C++标準規定類的大小不為0,空類的大小為1,當類不包含虛函數和非靜态資料成員時,其對象大小也為1,是以nLenA和nLenAObject的值為1;
如果在類中聲明了虛函數(不管是1個還是多個),那麼在執行個體化對象時,編譯器會自動在對象裡安插一個指針指向虛函數表VTable,在32位機器上,一個對象會增加4個位元組來存儲此指針,它是實作面向對象中多态的關鍵。是以,LenB和nLenBObject的值為4;
對于普通繼承,派生類和基類共享虛函數指針,派生類對象的存儲空間=基類存儲空間+派生類特有的非static資料成員的空間,由于t_classA為空類,t_classB和t_classC共享虛函數指針,是以LenC和nLenCObject的值為4;
2.
表達式3*2^(4+2*2-6*3)-5,求值過程中當掃描到6時,對象棧和算符棧為(),其中^為乘幂
A. 3,2,8;*^-
B. 3,2,4,2,2;^+-
C. 3,2,4,2,2,;^(+-
D.3,2,8;*^(-
參考:
運算符的優先級有關,
1、操作數棧置空,将表達式起始符”#”作為運算符棧的棧底元素
2、依次讀入每個字元,若是操作數則入操作數棧;若是運算符s1則和運算符棧頂元素s2比較優先級後進行相應的操作,直至整個表達式求完。
i)若優先級s1>s2,s1入棧
ii)若s1< s2,目前棧頂運算符s2退棧,操作數棧頂的兩個操作數退棧與操作符一起運算,并将運算結果入操作數棧;
過程如下:(1)操作數3,入棧s1;
(2)運算符*,入棧s2;
(3)操作數2,入棧s1;
(4)運算符^ ,入棧s2;(^的優先級比 *高)
(5)運算符(,入棧s2;
(6)操作數4,入棧s1;
(7)運算符+,入棧s2;
(8)操作數2,入棧s1;
(9)運算符,入棧s2;(理由是:的優先級比+高)
(10)操作數2,入棧s1;
(11)運算符 -,( -的優先級低于)棧頂字元 出棧,完成2*2=4的運算,将結果4存入s1中;—s1:3,2,4,4;
( -的優先級低于+)棧頂字元+出棧,完成4+4=8的運算,将結果8存入s1中;—s1:3,2,8;
此時,- 成為了(後的運算符,則直接入棧s2;—s2:*^(-;
(12)操作數6 掃描
3.
現有N條詞以及對應的拼音串,對其排序,排序規則:首先按拼音串的字母序排序,如果拼音串相同,則按目前詞所在的順序排序,下列哪些排序算法符合條件?( )
插入排序
快速排序
堆排序
冒泡排序
參考:
按目前詞所在順序排序即排序算法要穩定。
選擇排序,快速排序,希爾排序,堆排序 都不穩定
冒泡排序,插入排序,歸并排序,基數排序 都穩定
4.
若二叉樹有32個結點且度為1的節點個數有7個,問葉結點有()?
13
14
12
15
參考:
度指節點分叉的個數,二叉樹的一個節點可能有一個叉,兩個叉,和沒有叉(葉子結點);
總結點數為N,度為2的結點數為N2,度為1的結點數為N1,葉結點數為N0,總有:
①N=N0+N1+N2;
②N1=N2+1;
已知N=32,N0=7,解得N1=13,N2=12。
5.
下列說法錯誤的是()
正确答案: A B D
A.已知一顆二叉樹的前序周遊順序和後序周遊順序,可以唯一确定這棵二叉樹
B.将一個遞歸算法改為非遞歸算法時,通常使用隊列作為輔助結構
C.快速排序和堆排序都是不穩定排序
D.二分查找法,平均時間複雜度為O(n)
參考:
前序 中序 後序 這三個兩輛組合 必須要有 中序 才能唯一确定一棵二叉樹 前與後 不能唯一确定
遞歸算法改為非遞歸算法時,通常使用棧作為輔助結構,先進後出
二分時間複雜度為:log2(n)
6.
下列哪些容器可以使用數組,但不能使用連結清單來實作?
正确答案: D
隊列
棧
優先級隊列
Map或者Dict
參考:
Map或者Dict是可以按key索引值,這個隻有數組能實作,連結清單不能
7.
請問這是什麼資料結構?
正确答案: C
A. B-樹
B. B樹
C. B*樹
D. B+樹
參考:
http://www.cnblogs.com/hellowooorld/p/7344866.html
8.
在存儲對稱矩陣時,為了節省空間,通常可以用一個數組以行優先方式隻存儲上三角陣來實作。請問如果一個100*100的矩陣用上述方法來實作存儲,在原矩陣中位置為選項中哪一項的元素可以通過通路數組下标為2017的位置來獲得?( )數組和矩陣下标均從0開始。
正确答案: A
A. (70,22)
B.(47,22)
C. (20,17)
D. (22,71)
9.
以下哪種操作更适合使用排序處理( )
正确答案: C
A. 找最大,最小值
B. 找出現次數最多的值
C. 找中間值
D. 求算術平均值
10.
集合中任何兩個元素都可以比較大小,但比較不滿足傳遞性,則以下說法正确的有( )
正确答案: D
A. 可以通過建立二叉搜尋樹索引使得在集合中查找元素的時間複雜度降到O(logN)
B. 可以進行快排,排序後使用二分查找可以使得在集合中查找元素的時間複雜度降到O(logN)
C.可以通過B樹索引使得在集合中查找元素的時間複雜度降到O(logN)
D. 可以通過hash索引使得在集合中查找元素的時間複雜度降到O(1)
11.
func函數如下,則func(10)的傳回值為()
正确答案: B
A. 30
B. 29
C. 55
D. 54
12.
以上程式中,下列哪個函數調用會有問題()
正确答案: B
A. b->FunctionD();
B. b->FunctionB();
C. b->FunctionA();
D. b->FunctionC();
參考:
調用從基類內建而來的虛函數,派生類需要被初始化才可以,否則無法使自己指向虛函數表進而導緻糟糕的後果。
測試小程式:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class A{
public:
int fa(){ return ; }
virtual int fb(){ return ; }
static int fc(){ return ; }
};
class B:public A{
public:
int fb(){ return ; }
int fb(int a){ return ; }
int fd(){ return ; }
static int fe(){ return ; }
virtual int fbb(){ return ; }
};
int main(){
B *b = NULL;
b->fa();
//b->fb();wrong!
b->fb();
b->fc();
b->fd();
b->fe();
//b->fbb();wrong!
system("pause");
return ;
}
13.
下列代碼的輸出是什麼?()
正确答案: D
A. WORLD,LO,SAYHI,EW
B. WORLD,LO,HI,NEW
C. NEW,LO,SAYHI,EW
D. WORLD,LO,HI,EW
14.
下面的代碼輸出是()
正确答案: D
A. 1 4
B. 4 4
C. 1 2
D. 4 8
參考:
union成員共享
15.
以下哪個選項是使用select函數檢查讀逾時的正确用法()
正确答案: A
A. if (select(sockfd + 1,&fs,NULL,NULL,&timeout) == 0)
B. if (select(sockfd,NULL,&fs,NULL,&timeout) == 0)
C. if (select(sockfd + 1,NULL,&fs,NULL,&timeout) == 0)
iD. f (select(sockfd ,&fs,NULL,NULL,&timeout) == 0)
16.
在高性能、高并發的網絡應用的主路徑上,進行下面哪項操作是合理的?()
正确答案: C
A. 主動sleep 1秒
B. 通路同一内網中的memcached,逾時時間設為5秒
C. 調用getaddrinfo進行域名解析
D. 通路同一内網中的外存資料庫,逾時時間設為1秒
17.
int i=;
const int ci=i;
auto b=ci; //(1)
int *p=&i;
decltype(*p) c=i;//(2)
以上(1)(2)中變量b,c類型為()
正确答案: B
A. const int ,int
B. int,int&
C. const int,int*
D. int,int*
參考:
auto忽略頂層const, decltype得到解引用操作。
18.
(待續)