C C 校招筆試面試經典題目總結三

2021-07-03 17:50:42 字數 3738 閱讀 8944

題目21:求下面函式的返回值,輸入x=9999;(微軟)

int func(x)

return countx;

}

解答:

其實這個程式的意思就是求9999的二進位制中有多少個1(別問我為什麼知道的,可以檢視劍指offer面試題10),知道了這個就很容易求解這個題目了!

9×1024中含有1的個數為2;512中含有1的個數為1;256中含有1的個數為1;15中含有1的個數為4;故共有1的個數為8,結果為8。1000 - 1 = 0111,正好是原數取反。這就是原理。用程式中的這種方法來求1的個數是很效率很高的。不必去乙個乙個地移位。迴圈次數最少。

題目22:單向鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的: 1->2->3->4->5 通過反轉後成為5->4->3->2->1。

解答:

struct linka 

; void reverse(linka*& head)

head->next = null;

head = pre;

}

還有一種利用遞迴的方法。這種方法的基本思想是在反轉當前節點之前先呼叫遞迴函式反轉後續節點。源**如下。不過這個方法有乙個缺點,就是在反轉後的最後乙個結點會形成乙個環,所以必須將函式的返回的節點的next域置為null。因為要改變head指標,所以我用了引用。演算法的源**如下:

linka* reverse(linka* p,linka*& head) 

else

}

題目23:there are two int variables: a and b, don』t use 「if」, 「? :」, 「switch」or other judgement statements, find out the biggest one of the two numbers.

解答:( ( a + b ) + abs( a - b ) ) / 2

題目24:如何判斷乙個單鏈表是有環的?(注意不能用標誌位,最多只能用兩個額外指標)

struct node 

bool check(const node* head) {} //return false : 無環;true: 有環

解答:

一種o(n)的辦法就是搞兩個指標,乙個每次遞增一步,乙個每次遞增兩步,如果有環的話兩者必然重合,反之亦然。具體**如下:

bool check(const node* head)

return false;

}

題目25:鍊錶題:乙個鍊錶的結點結構:

struct node

;typedef struct node node ;

(1)已知鍊錶的頭結點head,寫乙個函式把這個鍊錶逆序 (intel公司)

(2)已知兩個鍊錶head1 和head2 各自有序,請把它們合併成乙個鍊錶依然有序。(保留所有結點,即便大小相同)

(3)已知兩個鍊錶head1 和head2 各自有序,請把它們合併成乙個鍊錶依然有序,這次要求用遞迴方法進行。 (autodesk公司)

解答:鍊錶是資料結構中比較重要的一塊,很多公司都喜歡在這一塊出題目。具體的解答**如下:

(1)鍊錶逆序**:

node * reverselist(node *head) //鍊錶逆序

p2->next = p1 ;

head = p2 ;

return head ;

}

(2)合併有序鍊錶**:

node * merge(node *head1 , node *head2)

else

node *pcurrent = head ;

while ( p1 != null && p2 != null)

else

}if ( p1 != null )

pcurrent->next = p1 ;

if ( p2 != null )

pcurrent->next = p2 ;

return head ;

}

(3)遞迴**:

node * mergerecursive(node *head1 , node *head2)

else

return head ;

}

題目26:物件導向的三個基本特徵,並簡單敘述之?

解答:1.

封裝:將客觀事物抽象成類,每個類對自身的資料和方法實行

protection(private,protected,public)

2. 繼承:廣義的繼承有三種實現形式:實現繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現**)、介面繼承(僅使用屬性和方法,實現滯後到子類實現)。前兩種(類繼承)和後一種(物件組合

=>

介面繼承以及純虛函式)構成了功能復用的兩種方式。

3. 多型:是將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。

題目27:類成員函式的過載、覆蓋(重寫)之間的區別?

解答:a.

成員函式被過載的特徵:(1

)相同的範圍(在同乙個類中);(2

)函式名字相同;(3

)引數不同;(4

)virtual

關鍵字可有可無。

b.覆蓋(重寫)是指派生類函式覆蓋基類函式,特徵是:(1

)不同的範圍(分別位於派生類與基類);(2

)函式名字相同;(3

)引數相同;(4

)基類函式必須有

virtual

關鍵字。

題目28:下列**正確嗎?如果錯誤請指出來:

char *p = 「world」;

p[0] = 'x』;

解答:*p是指向的是常量字串,常量字串是存放在文字常量區的,裡面的內容是不能被修改的,而題目中p[0]='x',明顯修改了字串的第乙個字元,所以出現了未定義行為錯誤!

題目29:c++的空類缺省會產生哪些類成員函式?

解答:

class empty

題目30:c++中的malloc/free和new/delete之間的聯絡與區別?

解答:聯絡:都是在堆(heap)上進行動態的記憶體操作。

區別:1、malloc/free是c/c++語言的標準庫函式,new/delete是c++的運算子。

2、new能夠自動分配空間的大小,用malloc函式需要指定記憶體分配的位元組數並且不能初始化物件,new 會自動呼叫物件的建構函式。

3、對於使用者自定義的物件而言,使用malloc/free無法滿足動態管理物件和記憶體的要求。

C C 校招筆試面試經典題目總結二

接著昨天的總結繼續。題目11 define double x x x i 5 double 5 i 是多少?解答 這個題目和題目6是同乙個題型,這裡並不會出現i 5 5 5 50的結果,因為題目只是使用了x x來替代double x 注意x x並沒有使用括弧,所以結果應該為 i 5 x x 5 5 ...

C C 校招筆試面試經典題目總結六

解析 const int minnumber 32767 int find sec max int data int count else return sec max 解析 第一種 include using namespace std void main define int ptr int t...

C C 筆試經典題目

1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...