迅雷 2021 C++工程師面試題

小編:管理員 896閱讀 2021.09.30

第1題:

?一、單選題

下列表達式正確的是:

A? 9++

B? (x+y)++

C? c+++c+++c++

D? ++(a-b--)



?C

選擇c,因為9是一個(gè)常量,常量不能自增自減,而( x+y )和下面的( a -b )都是作為一種只讀內存區存在的,所以都不能進(jìn)行自增自減操作。題目其實(shí)不嚴謹,c中c如果作為一個(gè)變量那么是正確的,但是如果c的類(lèi)型是數組也不正確。



第2題:

在int?b[?][3]?=?{{1},{3,2},{4,5,6},{0}};中,sizeof(b)?= ?

A? 4

B? 12

C? 28

D? 48



?D

解釋?zhuān)?

b為4行3列的二維數組,12*4 = 48



第3題:

以下程序的輸出結果是:

#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



?D

分析:#define的邊際效應,直接展開(kāi),變成a+b*b+c+c+a,詳見(jiàn)找工作筆試面試那些事兒(1)---C,C++基礎和編程風(fēng)格(2)



第4題:

若有以下定義和語(yǔ)句:

int u=010, v= 0x10, w=10;

printf(“%d,%d,%d/n”,u,v,w);

??

則輸出結果是:
??

A? 8,16,10

B? 10,10,10

C? 8,8,10

D? 8,10,10




?A

010是表示八進(jìn)制,0x表示16進(jìn),10就不用說(shuō)了



第5題:

下面程序段的輸出結果是:

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? 編譯錯誤




?B

a>b>c求的是一個(gè)邏輯值,正確為1,錯誤為0,a=5,b=4,c=3,首先a>b成立,邏輯值為1,而1小于2,故不輸出2;
+或者-的優(yōu)先級高于>=;所以c-1>=d先減再判斷,成立,為邏輯值1;()優(yōu)先級大于比較==,因為1=1,所以輸出d+1;為3



第6題:

有如下程序段,請問(wèn)k的值是

enum {

????a, b=5, c, d=4, e

} k;

k =c;

?? ????

A? 3

B? 4

C? 5

D? 6




?D

enum中:首元素不賦值的話(huà),默認為0;后一個(gè)元素不賦值的話(huà)比前一個(gè)元素大1



第7題:

有如下程序段:

int i, n = 0;

float 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 );

? ?

請問(wèn)執行結果是:

?????

A? 21

B? 22

C? 無(wú)限循環(huán)

D? 程序崩潰




?C

分析:浮點(diǎn)數的比較不可以用 = = 或者 != ,詳見(jiàn)找工作筆試面試那些事兒(1)---C,C++基礎和編程風(fēng)格(2)?,會(huì )一直循環(huán)下去,選擇C



第8題:

用樹(shù)形結構表示實(shí)體之間聯(lián)系的模型是

A? 關(guān)系模型

B? 網(wǎng)狀模型

C? 層次模型

D? 以上三個(gè)都是



?C

層次模型是用樹(shù)型結構記錄的。樹(shù)中每一個(gè)節點(diǎn)代表一個(gè)記錄類(lèi)型,樹(shù)狀結構表示實(shí)體型之間的聯(lián)系
?



第9題:

有如下程序段:


char?fun(char?*);

main()

{

???????char?*s?=?“one”,?a[5]?=?{0},?(*f1)(char?*)?=?fun,?ch;

}

???

則對函數fun的調用語(yǔ)句正確的是

?

A? *f1(&a);

B? f1(*s);

C??f1(&ch)

D? ch?=?*f1(s);要改成(*f1)(s)才正確




?C



第10題:

有如下程序段:


int?c?=?23;

printf(“%d\n”,?c&c);

??

請問(wèn)執行結果是:

??

A? 0

B? 46

C? 23

D? 以上都不對




?C

?printf輸出的結果是將c&c后的結果,&是位運算符,將前后兩個(gè)操作數對應為相與。而任何數與其自身相與,得到的結果不變 ? 1&1=1 ? 0&0=0
所以c&c 等于 c 等于 23
所以,輸出結果 23

PS: printf這行代碼有誤?? 應該為:printf("%d\n", c&c);



第11題:

?二、不定項選擇

下面屬于構造散列函數的方法是()

?????????

A? 直接定址法

B? 數字分析法

C? 乘余取整法

D? 平方取中法



?A B C D

直接定址法、數字分析法、折疊法 、平方取中法、減去法、基數轉換法 、除留余數法、隨機乘數法、字符串數值哈希法、旋轉法 ?、偽隨機數法?



第12題:

拷貝構造函數的特點(diǎn)是()?

A? 該函數名同類(lèi)名,也是一種構造函數,該函數返回自身引用

B? 該函數只有一個(gè)參數,必須是對某個(gè)對象的引用

C? 每個(gè)類(lèi)都必須有一個(gè)拷貝初始化構造函數,如果類(lèi)中沒(méi)有說(shuō)明拷貝構造函數,則編譯器系統會(huì )自動(dòng)生成一個(gè)缺省拷貝構造函數,作為該類(lèi)的保護成員

D? 拷貝初始化構造函數的作用是將一個(gè)已知對象的數據成員值拷貝給正在創(chuàng )建的另一個(gè)同類(lèi)的對象



?D

拷貝函數和構造函數沒(méi)有返回值,A錯;

拷貝構造函數的參數可以使一個(gè)或多個(gè),但左起第一個(gè)必須是類(lèi)的引用對象,B錯;

若類(lèi)定義中沒(méi)有聲明拷貝構造函數,則編譯器會(huì )自動(dòng)生成一個(gè)缺省的拷貝構造函數,但是不會(huì )是該類(lèi)的保護成員,C錯;

通過(guò)拷貝函數可以將另一個(gè)對象作為對象的初值,D對



第13題:

下列關(guān)于虛函數的說(shuō)法正確的是()? ? ??

A? 在構造函數中調用類(lèi)自己的虛函數,虛函數的動(dòng)態(tài)綁定機制還會(huì )生效

B? 在析構函數中調用類(lèi)自己的虛函數,虛函數的動(dòng)態(tài)綁定機制還會(huì )生效

C? 靜態(tài)函數不可以是虛函數

D? 虛函數可以聲明為inline



?C D

由于類(lèi)的構造次序是由基類(lèi)到派生類(lèi),所以在構造函數中調用虛函數,這個(gè)虛函數不會(huì )呈現出多態(tài); 相反,類(lèi)的析構是從派生類(lèi)到基類(lèi),當調用繼承層次中某一層次的類(lèi)的析構函數時(shí)往往意味著(zhù)其派生類(lèi)部分已經(jīng)析構掉,所以也不會(huì )呈現出多態(tài)



第14題:

下列對函數double add(int a , int b)進(jìn)行重載,正確的是()? ? ??

A? int add(int a ,int b ,int c)

B? int add(double a , double b)

C? double add(double a , double b)

D? int add(int a , int b)



?A B C

在C++中,函數的重載取決于函數的特征標即函數的參數列表。同名的函數,特征標不一樣則函數不一樣,A、B、C 的參數列表與題目給出的特征標數量或類(lèi)型不一樣,因此正確答案為A、B、C



第15題:

下面關(guān)于數組的描述錯誤的是:? ? ?

A? 在C++語(yǔ)言中數組的名字就是指向該數組第一個(gè)元素的指針

B? 長(cháng)度為n的數組,下標的范圍是0-n-1

C? 數組的大小必須在編譯是確定

D? 數組只能通過(guò)值參數和引用參數兩種方式傳遞給函數



?C D

A,錯誤,原因:如果數組是一維數組,A正確。但如果是多維數組則A錯誤。

B,錯誤,當n=0時(shí)。

C,正確

D,正確,因為數組不能拷貝,所以數組做參數時(shí)只能通過(guò)值參數(指針形式),引用參數(引用形式)。



第16題:

?三、問(wèn)答題

實(shí)現strtol函數,其原型如為int strtol(const char *num_str, char **endptr, int base),num_str存放待轉換的字符串,可以是負數也可以是正數;endptr指向第一個(gè)非法字符的地址,如果endptr為null則不指向第一個(gè)非法字符的地址;base用于指示進(jìn)制,若base為0,則根據num_str的指示來(lái)轉換。函數必須檢查溢出,如果正數溢出,返回int_max;若負數溢出,返回int_min。



第17題:

?一億個(gè)數找最大的1000個(gè)數,要求效率高占用內存少。函數原型為:find_max_data(int* source_data, int* max_data),其中source_data是存放一億個(gè)數的數組,max_data用于存放其中最大的1000個(gè)數。



?

/* 基數排序 ?*/

#include

#include

#include

#include

#include

#include "windows.h"

using namespace std;

#define MAXN 100000000 #define MAXM 1000

void find_max_data0( int dest[], int m, int src[], int n )

{

??? fill( dest, dest + n, -INT_MAX );

??? for ( int i = 0; i < n; i++ )

??? {

??? ? ? for ( int j = 0; j < m; j++ )

??? ? ? {

??? ? ? ? ? if ( src[i] > dest[j] )

??? ? ? ? ? {

??? ? ? ? ? ? ? dest[j] = src[i];

??? ? ? ? ? ? ? break;

??? ? ? ? ? }

??? ? ? }

??? }

}

void find_max_data1( int dest[], int m, int src[], int n )

{

??? make_heap( src, src + n );

??? for( int i = 0; i < m; i++ )

??? {

??? ? ? dest[i] = src[0];

??? ? ? pop_heap( src, src + n-- );

??? }

}

void radix_sort( int *src, int n )

{

??? int *tmp = new int[MAXN]; ?int cnt[256];

??? for( int i = 0; i < 4; i++ ) {

??? ? ? memset( cnt, 0, sizeof(cnt) );

??? ? ? for( int j = 0; j < MAXN; j++ )

??? ? ? {

??? ? ? ? ? cnt[ ( src[j] >> (8 * i) ) & 0xff ]++;

??? ? ? }

??? ? ? for ( int j = 1; j < 256; j++ )

??? ? ? {

??? ? ? ? ? cnt[j] = cnt[j - 1] + cnt[j];

??? ? ? }

??? ? ? for( int j = MAXN - 1; j >= 0; j-- )

??? ? ? {

??? ? ? ? ? tmp[ -- cnt[ ( src[j] >> (8 * i) ) & 0xff ] ] = src[j]; swap( src, tmp );

??? ? ? }

??? }

??? delete [] tmp;

}

void find_max_data2( int dest[], int m, int src[], int n )

{

??? radix_sort( src, n );

??? int j = 0;

??? for( int i = n - 1; i >= n - m; i-- )

??? {

??? ? ? dest[j++] = src[i];

??? }

}

int src[MAXN];

int main()

{

??? ( (unsigned int) time( NULL ) );

??? src[i] = abs( i * 6516187 );

??? DWORD t1, t2;

??? t1 ?= GetTickCount();

??? find_max_data2( dest2, MAXM, src, MAXN ); ?

????t2 = GetTickCount();

??? printf( "find_max_data2 time cost:%dn", t2 - t1 );

????for( int i = 0; i < MAXM; i++ )

??? {

??? ? ? printf( "n" ); ?return 0;

??? }

}



第18題:

?將一個(gè)集合拆分成兩個(gè)不相交的子集,兩個(gè)子集元素之和相等,如{1, 2, 3, 4, 5, 6, 7},拆分成: {2, 5, 7}, {1, 3, 4, 6} 給出一個(gè)集合,求所有符合上面要求的拆分,效率最高分越高,函數原型為int cal_num(int n);



?


#include

using namespace std;

#define MAXN 100

??

void dfs(int pi,int curSum,bool res[],int n,int half,int &num,int left[])

{

??? for(int i=pi+1;i<=n;i++) {?

??? ? ? res[i]=true;?

??? ? ? if(curSum+left[i]=1;i--)

??? ? ? ? ? left[i]=i+left[i+1];?

??? dfs(0,0,res,n,half,cnt,left);

??? return cnt;

}

int main()

{

??? int n=20;

??? int num=cal_num(n);

??? printf("num=%d\n",num);

??? return 0;

}

? ?



關(guān)聯(lián)標簽:
91久久香蕉国产线看观看软件|思思热在线视频精品996|精品无码一区二区三区水蜜桃|久久综合无码中文字幕无码|午夜亚洲AⅤ无码高潮片在线