職位類型:技術(shù)類
面試地點:深圳
招聘公司:迅雷網(wǎng)絡(luò)
迅雷技術(shù)類筆試題目
1.下列程序的輸出結(jié)果為: (B)
#include
void main()
{
char* a[ ] = { "hello", "the", "world"};
char** pa = a;
pa ;
cout<<”*pa<
A) theworld
B) the
C) ello
D) ellotheworld
2.已知二叉樹后序遍歷序列是 bfegcda,中序遍歷序列是 badefcg,它的前序遍歷序列是: (B)
A) abcdefg
B) abdcefg
C) adbcfeg
D) abecdfg
3.棧和隊列的共同特點是: (C)
A) 都是先進(jìn)先出
B) 都是先進(jìn)后出
C) 只允許在短點處插入和刪除元素
D) 沒有共同點
4.下面程序的運行結(jié)果為: (A)
#include
void main()
{span>
int a, x;
for(a = 0, x = 0; a<=1 && !x ; a )
{
a ;
}
cout<< a << x <
A) 21
B) 22
C) 32
D) 41
5.下列選項,不正確的是: (B) while 后沒有分號
A) for(int a=1; a<=10; a );
B) int a=1;
do
{
a ;
}while(a<=10)
C) int a=1;
while(a<=10)
{
a ;
}
D) for(int a= 1; a<=10; a )a ;
6.下面關(guān)于數(shù)組的初始化正確的是: (B)
A) char str[2] = {“a”,”b”};
B) char str[2][3]={“a”,”b”}
;
C) char str[2][3]={{?a?,?b?},{?e?,?d?},{?e?,?f?}};
D) char str[] = {“a”, “b”};
7.下列說法正確的是: (B)
A) 內(nèi)聯(lián)函數(shù)在運行時是將該函數(shù)的目標(biāo)代碼插入每個調(diào)用該函數(shù)的地方
B) 內(nèi)聯(lián)函數(shù)在編譯時是將該函數(shù)的目標(biāo)代碼插入每個調(diào)用該函數(shù)的地方
C) 類的內(nèi)聯(lián)函數(shù)必須在類體內(nèi)定義
D) 類的內(nèi)聯(lián)函數(shù)必須在類體外通過關(guān)鍵字 inline 定義
8.下面對靜態(tài)成員的描述中,正確的是: (D)
A) 靜態(tài)數(shù)據(jù)成員可以在類體內(nèi)初始化
B) 靜態(tài)數(shù)據(jù)成員不可以被類的對象調(diào)用
C) 靜態(tài)數(shù)據(jù)成員不能受 private 控制符的作用
D) 靜態(tài)數(shù)據(jù)成員可以直接用類名調(diào)用
9.下列運算符中,在 C 語言中不能重載的是: (C)
A) * B) >= C) :: D) delete
10.下面關(guān)于多態(tài)性的描述,錯誤的是:(C)
A) C 語言的多態(tài)性分為編譯時的多態(tài)性和運行時的多態(tài)性
B) 編譯時的多態(tài)性可通過函數(shù)重載實現(xiàn)
C) 運行時的多態(tài)性可通過模板和虛函數(shù)實現(xiàn) //模板的是編譯時多態(tài)性,而虛函數(shù)是運行時
D) 實現(xiàn)運行時多態(tài)性的機(jī)制稱為動態(tài)綁定
11.如果進(jìn)棧序列為 e1,e2,e3,e4,e5,則可能的出棧序列是: (D)
A) e3,e2,e5,e4,e1
B) e2,e3,e5,e4,e1
C) e3,e2,e4,e5,e1
D) 以上都有可能
12.下面關(guān)于類和對象的描述中,錯誤的是: (A)
A) 類就是 C 語言中的結(jié)構(gòu)體類型,對象就是 C 語言中的結(jié)構(gòu)體變量
B) 類和對象之間的關(guān)系是抽象和具體的關(guān)系
C) 對象是類的實例,一個對象必須屬于一個已知的類
D) 類是具有共同行為的若干對象的統(tǒng)一描述體
13.下面關(guān)于數(shù)組的描述錯誤的是:( D)
A) 在 C 語言中數(shù)組的名字就是指向該數(shù)組第一個元素的指針
B) 長度為 n 的數(shù)組,下標(biāo)的范圍是 0-n-1
C) 數(shù)組的大小必須在編譯是確定
D) 數(shù)組只能通過值參數(shù)和引用參數(shù)兩種方式傳遞給函數(shù)
注釋:
在把數(shù)組作為參數(shù)傳遞給函數(shù)時,有值傳遞(by value)和地址傳遞(by reference)兩種方式。
在值傳遞方式中,要在數(shù)組參數(shù)的尾部加上一對方括號([]),調(diào)用函數(shù)時只需將數(shù)組的地址(即數(shù)組名)傳遞給函數(shù)。
例如:如果數(shù)組 x 被聲明為: int x[10];
那麼函數(shù)被說明為: void byval_func(int[]);
參數(shù) int[]告訴編譯程序 byval_func()函數(shù)只有一個參數(shù),即一個由 int 型值組成的數(shù)組。 函數(shù)調(diào)用時只需將數(shù)組名傳遞給函數(shù):byval_func(x);
#include
void byval_func(int[]);
void main(void);
void main(void)
{
int x[10];
int y;
for(y=0;y<10;y )
x[y]=y;
byval_func(x);
}
void byal_func(int i[])
{
int y;
for(y=0;y<10;y )
printf("%d\n",i[y]);
> }
在值傳遞方式中,數(shù)組 x 將被復(fù)制一份,復(fù)制所得的數(shù)組將被存放在棧中,然后由 byval_func()函數(shù)接收并打印出來。由於傳遞給 byval_func()函數(shù)的是初始數(shù)組的一份拷貝,因此在 byval_func()函數(shù)內(nèi)部修改傳遞過來的數(shù)組對初始數(shù)組沒有任何影響。
值傳遞方法的開銷是很大的,因為首先它要完整地復(fù)制初始數(shù)組并將這份拷貝存放到棧中,這將耗費相當(dāng)可觀的運行時間, 因而值傳遞方法效率較低;其次,初始化數(shù)組的拷貝需要占用額外的內(nèi)存空間(棧中的內(nèi)存);最后,編譯程序需要專門產(chǎn)生一部分用來復(fù)制初始數(shù)組的代碼,這將使程序變大。
地址傳遞方法克服了值傳遞方法的缺點。在地址傳遞方法中,傳遞給函數(shù)的是指向初始數(shù)組的指針,不用復(fù)制數(shù)組,因此程序變得簡練,也節(jié)省了棧中的內(nèi)存空間。在地址傳遞過程中,只需在函數(shù)原形中將函數(shù)的參數(shù)說明為指向數(shù)組元素數(shù)據(jù)類型的一個指針。
例如同樣定義一個數(shù)組 x: int x[10];
那麼函數(shù)被說明為: int const_funt(const int*);
參數(shù) const int*告訴編譯程序 const_funt()函數(shù)只有一個參數(shù),即指向一個 int 類型常量的指針。
函數(shù)調(diào)用時只需將數(shù)組的地址傳遞給函數(shù):const_func(x);
#include
void const_func(const int*);
void main(void);
void main(void)
{
int x[10];
int y;
for(y=0;y<10;y )
x[y]=y;
constl_func(x);
}
void const_func(const int*i)
{
int y;
for(y=0;y<10;y )
printf("%d\n",*(i y));
}
在值傳遞方式中,沒有復(fù)制初始數(shù)組并將其拷貝存放在棧中,const_func()函數(shù)只接收到指向一個 int 類型常量
的指針,因此在編寫程序時要保證傳遞給 const_func()函數(shù)的是指向一個由 int 類型常量組成的數(shù)組的指針。 const
修飾符的作用是防止意外修改初始數(shù)組中的某一個元素。
14.引用標(biāo)準(zhǔn)庫時,下面的說法你認(rèn)為哪個是正確的:( B)
A) 語句#include “ stdlib.h”是正確的, 但會影響程序的執(zhí)行速度
B) 語句#include
C) 語句#include
D) 語句#include “ stdlib.h”是錯誤的
注釋: include ""是先從本地目錄開始尋找,然后去尋找系統(tǒng)路徑,而 Include <> 相反先從系統(tǒng)目錄,后從本地目錄。
15.設(shè) a、 b、 c、 d、 m、 n 均為 int 型變量,且 a=5、 b=6、 c=7、 d=8、 m=2、 n=2,則邏輯表達(dá)式( m=a>b) &&(n=c>d)運算后, n 的值為:( C)
A) 0
B) 1
C) 2
D) 7
16.不能作為重載函數(shù)的調(diào)用的依據(jù)是:( C)
A) 參數(shù)個數(shù)
B) 參數(shù)類型
C) 函數(shù)類型
D) 函數(shù)名稱
17.下列程序的輸出結(jié)果為: (D)
#include< iostream. h>
int func(int n)
{
if〔 n<1)return 1;
else return n func(n-1);
return 0;
}
void main()
{
cout<
A) 0
B)10
C)15
D)16
18.建立派生類對象時,3 種構(gòu)造函數(shù)分別是 a(基類的構(gòu)造函數(shù))、 b(成員對象的構(gòu)造函數(shù))、 c(派生類的構(gòu)造函
數(shù))這 3 種構(gòu)造函數(shù)的調(diào)用順序為: (A)
A)abc
B)acb
C)cab
D)cba
19.如果友元函數(shù)重載一個運算符時,其參數(shù)表中沒有任何參數(shù)則說明該運算符是:( D)
A)一元運算符
B)二元運算符
C)選項 A)和選項 B)都可能
D)重載錯誤
解析: C 中用友元函數(shù)重載運算符至少有一個參數(shù),重載一目運算符要有一個參數(shù),重載二目運算符要有
兩個參數(shù)。
20.有以下程序段:( D)?
#define F(X,Y) (X)--; (Y) (X)*(Y);
int i, a = 3, b = 4;
for( i = 0; i<5; i ) F(a,b)
printf(“%d, %d”, a, b);
輸出結(jié)果是:()
A) 3, 4
B) 3, 5
C) -2, 5
D) -2, 9
21.下列 for 循環(huán)的循環(huán)體執(zhí)行次數(shù)為:( A)
for(int i(10), j(1); i=j=0; i , j--)
A) 0;
B) 1;
C) 無限;
D)以上都不對
22.下面程序的輸出結(jié)果是( D)
char *p1= “ 123” , *p2 = “ ABC” , str[ 50] = "xyz";
strcpy( str 2,strcat( p1,p2)) ;
cout << str;
A) xyz123ABC
B) z123ABC
C) xy123ABC  ;
D)出錯
23.下面函數(shù)的執(zhí)行結(jié)果是輸出( B)
char str[ ] = “xunlei”;
char *p = str;
int n = 10;
printf(“%d, %d, %d\n”, sizeof(str), sizeof(p), sizeof(n));
A) 4, 4, 4
B) 7, 4, 4
C) 6, 4, 4
D) 6, 6, 4
24.有下列程序段:
char *p, *q;
p = (char*) malloc(sizeof(char) * 20);
q = p;
scanf(“%s %s”, p, q);
printf(“%s %s\n”, p, q);
若從鍵盤輸入: abc def, 則輸出結(jié)果是( A)
A) def def
B) abc def
C) abc d
D) d d
解析: q=p;因此 p,q 指向的是同一段內(nèi)存.scanf 先是把 abc 寫到 p 指向的空間,再把 def 寫到 q 指向的空間,也就是同一段空間,因此 abc 被 def 覆蓋了。
25.現(xiàn)在有以下語句:
struct _THUNDER{
int iVersion;
char cTag;
char cAdv;
int iUser;
char cEnd;
}Thunder;
int sz = sizeof(Thunder);
則執(zhí)行后,變量 sz 的值將得到( D)
A) 11
B) 12
C) 13
D) 16
26.有如下程序段:
void GetMemeory(char* p)
{
p = (char*) malloc (100);
}
void test()
{
char *str=NULL;
GetMemory(str);
strcpy(str,”Thunder”);
strcat(str 2, “Downloader”);
printf(str);
}
請問運行 Test 函數(shù)結(jié)果是:( D)
A) Thunder Downloader
B) under Downloader
C) Thunderownloader
D) 程序崩潰
解析:在函數(shù)中給指針分配空間,實際上是給指針的臨時變量分配空間,函數(shù)結(jié)束后,這個臨時變量也消亡,
而 str 仍然為 NULL,沒有為其分配空間,此時 strcpy()是肯定會出錯的。
27.函數(shù)調(diào)用 exec((v1,v2), (v3,v4,v5),v6,v7);中,實參的個數(shù)是( A)
A) 4
B) 5
C) 6
D) 7
28.p 是指向類 X 的成員 m 的指針, s 是類 X 的一個對象?,F(xiàn)要給 m 賦值,( C)是正確的。
A) s.p = 5
B) s->p = 5
C) s.*p = 5
D) *s.p = 5
29.函數(shù) fun( char* p) { return p;}的返回值是( B)
A)無確切值
B) 行參 p 中存放的地址值
C) 一個臨時存儲單元的地址
D) 行參 p 自身的地址值
30.a,b 均為不等于 0 的整形變量,以下關(guān)系式恒成立的是:( C)
A) a*b/a*b == 1  ;
B) a/b*b/a == 1
C) a/b*b a%b == a
D) a/b*b == a
31.設(shè)有如下說明:
typedef struct ST{ long a; int b; char c[2]; } NEW;
則下面敘述中正確的是: (C)
A)以上的說明形式非法
B) ST 是一個結(jié)構(gòu)體類型
C) NEW 是一個結(jié)構(gòu)體類型
D) NEW 是一個結(jié)構(gòu)體變量
32.下列表達(dá)式正確的是:( C)
A) 9
B) ( x y)
C) c c c
D) ( a-b--)
33.在 int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中, sizeof(b) = ( D)。
A) 4
B) 12
C) 28
D) 48
34.以下程序的輸出結(jié)果是: (D)
#define M(x,y,z) x*y z
main()
{
int a=1, b=2, c=3;
printf(“%d\n”,M(a b,b c,c a));
}
A) 19
B) 17
C) 15
D) 12
35.若有以下定義和語句:
int u=010, v= 0x10, w=10;
printf(“ %d, %d,%d\n” ,u,v,w);
則輸出結(jié)果是: (A)
A)8,16,10
B)10,10,10
C)8,8,10
D)8,10,10
36.下面程序段的輸出結(jié)果是:( B)
int a=5, b=4, c=3, d=2;
if(a>b>c)
printf(“%d\n”,d);
else if((c-1>=d)==1)
printf(“%d\n”, d 1);
else
printf(“%d\n”, d 1);
A) 2
B) 3
C) 4
D) 編譯錯誤
37.有如下程序段,
請問 k 的值是:( D)
enum {a, b=5, c, d=4, e} k; k =c;
A) 3 B) 4 C) 5 D) 6
38.有如下程序段:
int i, n = 0;
double x = 1, y1 = 2.1/1.9, y2 = 1.9/2.1;
for( i = 1; i<22; i )
x = x*y1;
while( x!=1.0)
{
x =x*y2;
n ;
}
printf(“%d\n”, n);
請問執(zhí)行結(jié)果是:( A)
A) 21
B) 22
C)無限循環(huán)
D) 程序崩潰
48. 用樹形結(jié)構(gòu)表示實體之間聯(lián)系的模型是( C)
A) 關(guān)系模型
B) 網(wǎng)狀模型
C) 層次模型
D)以上三個都是
39.有如下程序段:
char fun(char *);
main()
{
char *s = “one”, a[5] = {0}, (*f1)(char *) = fun, ch;
}
則對函數(shù) fun 的調(diào)用語句正確的是( C)
A) *f1(&a);
B) f1( *s) ;
C) f1(&ch)
D) ch = *f1(s);要改成( *f1) (s)才正確
40.有如下程序段:
int c = 23;
printf(“%d\n”, c&c);
請問執(zhí)行結(jié)果是:( C)
A) 0
B) 46
C) 23
D) 以上都不對