程式設計師面試寶典題目總結

2021-05-07 12:55:25 字數 4209 閱讀 6473

1. what will be the output of the following c code?

#include

int main(int argc, char* argv)

2. 下面程式的結果是多少?

#include

int main(int argc, char* argv)

3. 下面程式的結果是:

#include

int main(int argc, char* argv)

4. 用乙個表示式,判斷乙個數x是否為2的n次方(2,4,8,…),不可用迴圈語句。

5. 下面程式的結果是:

#include

#include

using namespace std;

int main(int argc, char* argv)

cout << count << endl;

return 0;

}6. 不用判斷語句,找出兩個數中比較大的。

7. 如何將a、b的值互動,且不用任何中間變數。

8. 在c++程式中呼叫被c編譯器編譯後的函式,為什麼要加extern 「c」?

9. 標頭檔案中的ifndef/define/endif的作用? #pragma once的作用?

10. 結構體內存對齊問題。

11. 以下**的輸出是?

char var[10];

int test(char var)

12. 寫出下面程式的執行結果。

int a[3];

a[0] = 0; a[1] = 1; a[2] = 2;

int *p, *q;

p = a;

q = &a[2];

cout << a[q - p] << endl;

13. 解釋下面這段**:

int (*a)[10];

a++;

14. 以下程式的輸出是:

int a = ;

int *ptr = (int *)(&a + 1);

cout << *(a+1) << endl;

cout << *(ptr - 1) << endl;

15. 什麼是智慧型指標?

16. please write out the program output.

#include

#include

#define loop 1000

int main(int argc, char* argv)

printf("%d\n", rgnc);

return 0;

}17. 下面程式的輸出結果是:

#include

#include

using namespace std;

class base

base():m_j(0), m_i(m_j)

int geti()

int getj()

};int main(int argc, char* argv)

18. 請講述heap與stack的差別。

19. 寫乙個字串拷貝函式strcpy;為什麼strcpy的返回值型別為char *。

20. 如何判斷乙個單向鍊錶是否有環路?

21. 寫出判斷abcd四個表示式的是否正確,若正確, 寫出經過表示式中 a的值。

int a = 4;

(a)a += (a++); (b) a += (++a) ; (c) (a++) += a; (d) (++a) += (a++);

22. 下面程式的輸出為:

uniona;

int main(int argc, char* argv)

1. 8,8 提示:c中的printf計算引數時是從右到做壓棧的。

2. 245 提示:>>的優先順序高於~,計算過程中,先將unsigned char轉換為int,計算完後再轉換為unsigned char。問題:為什麼加括號不起作用。

3. 000000f7,fffffff7。

4. !(x&(x-1)) 提示:2、4、8、16這樣的數轉換成二進位制是10、100、1000、10000。如果x減1後與x做與運算,答案若是0,則x是2的n次方。

5. 8 提示:把m轉換為二進位制,輸出為這個二進位制中1的個數。

6. int max = ((a + b) + abs(a - b)) / 2

7. a = a ^ b; b = a ^ b; a = a ^ b;

8. c++支援過載,c不支援過載。函式被c++編譯後在庫中的名字與c語言不同。c++提供了c連線交換指定符號extern 「c」解決名字匹配問題。

9. 防止標頭檔案被重複引用。

10. 見文章:結構體內存對齊。

11. 4 因為var等價於*var,已經退化成乙個指標了,所以大小是4。

12. 2。

13. 本題定義了乙個指標指向乙個含有10個int元素的陣列。a++表示指標向後移動1*sizeof(陣列大小),即移動40個位元組。

14. 2 5 陣列名本身就是指標,再加個&,就變成了雙指標,這裡的雙指標就是二維陣列。

15. 智慧型指標是儲存指向動態分配(堆)物件指標的類。除了能夠在適當的時間自動刪除指向的物件外,它們的工作機制很像c++的內建指標。

智慧型指標在面對異常的時候格外有用,因為它們能夠確保正確地銷毀動態分配的物件。它們可以用於跟蹤被多使用者共享的動態分配物件。

16. 大概為250 *π 提示:

概率問題:rand_max是隨機數中的最大值,也就是相當於最大班級r。x和y是橫縱座標上的亮點,它們的平方和開根號就是原點到該點的距離。

題目退化為:隨機在正方形裡落1000個點,落在半徑裡面的點有多少個。

a) 1/4圓面積 = (1/4)*π*r*r

b) 正方形面積 = r*r

c) 兩者之比 =π/4

d) 落點數 =π/4 * 1000 = 250 *π≈785

17. 第乙個為隨機數,第二個為98 提示:初始化列表的初始化變數順序是根據成員變數的宣告順序來執行的。常量必須在建構函式的初始化列表裡面初始化。

18. c/c++的記憶體區域分為以下幾個類別:

a) 棧區(stack):由編譯器分配和釋放,存放函式的引數值、區域性變數的值等。其操作方式類似於資料結構中的棧。

b) 堆區(heap):一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能會由作業系統**。分配方式類似於鍊錶。

c) 全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一起的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由系統釋放。

d) 文字常量區:常量字串是放在這裡的。程式結束後由系統釋放。

e) 程式**區:存放在函式體的二進位制**。

19. (1)**如下:

char * strcpy(char * strdest, const char * strsrc)

(2)為了實現鏈式表示式,返回具體值。如:

int length = strlen(strcpy(strdest, "hello world"));

20. 用兩個指標,乙個步長為1,另乙個步長為2,從表頭開始一起往前走,如果相遇,表明有環路,否則就是沒有了。

for ( i = 0; i < step2; i ++ )

if ( p == q )

}return false;

}21. c錯誤,左側不是乙個有效變數,不能賦值,可改為(++a) += a;

改後答案依次為9,10,10,11

22. 266 (低位低位址,高位高位址)

原文位址:

一、什麼是位元組對齊,為什麼要對齊?

現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。

比如有些架構的cpu在訪問乙個沒有進行對齊的變數的時候會發生錯誤,那麼在這種架構下程式設計必須保證位元組對齊.其他平台可能沒有這種情況,但是最常見的是如果不按照適合其平台要求對資料存放進行對齊,會在訪問效率上帶來損失。比如有些平台每次讀都是從偶位址開始,如果乙個int型(假設為32位系統)如果存放在偶位址開始的地方,那麼乙個讀週期就可以讀出這32bit,而如果存放在奇位址開始的地方,就需要2個讀週期,並對兩次讀出的結果的高低位元組進行拼湊才能得到該32bit資料。

顯然在讀取效率上下降很多。

程式設計師面試寶典題目總結

1.what will be the output of the following c code?include int main int argc,char argv int ptr arr ptr 123 printf d,d n ptr,ptr return 0 2.下面程式的結果是多少?i...

程式設計師面試寶典

微軟公司讓應聘者發狂的創意測試 如果你有乙個許多部件可以拆卸的時鐘,你將它一塊塊拆開,但是沒有記住是怎樣拆的。然後你將各個零件重新組裝起來,最後發現有三個重要零件沒有放進去。這時你如何重新組裝這個時鐘?如果你需要學習一門新的計算機語言,你會怎樣做?假設由你負責設計比爾 蓋茨的衛生間。當然,錢不成問題...

程式設計師面試寶典筆記

1 答案為 a note1 求值順序是自右至左 輸出順序還是從左至右.note2 如果把printf d d n ptr,ptr 換成printf d d n ptr,ptr 結果為c,雖然求值是從右向左的,但是表示式中的 ptr與 ptr 不是兩個語句,所以ptr的值相同 2 int a 與 in...