C筆試題目及答案

C++由於語言本身過度複雜,這甚至使人類難於理解其語義。更為糟糕的是C++的編譯系統受到C++的複雜性的影響,非常難於編寫,即使能夠使用的編譯器也存在了大量的問題,這些問題大多難於被發現。下面就由本站小編為大家介紹一下C++筆試題目及答案的文章,歡迎閲讀。

C筆試題目及答案

C++筆試題目及答案篇1

1. What’s overload function in C++?

“重載”是指編寫一個與已有函數同名但參數表不同的函數。構成重載的條件是:在相同的範圍內(比如説在同一個類中),函數名字相同,但函數參數不同(要麼參數類型不同,要麼參數個數不同,要麼兩者都不同)

2. A. What’s inline function in C++?

內聯函數是指嵌入代碼,就是在調用函數的地方不是跳轉,而是直接把代碼寫到那裏去。它與普通函數相比能提高效率,因為它不需要中斷調用,在編譯的時候內聯函數可以直接把代碼鑲嵌到目標代碼中去,省去了函數調用的開銷,但是它是以代碼膨脹為代碼的(以增加空間消耗為代價)

B. When would you use inline function?

(1)一個函數不斷的被重複調用

(2)函數只有簡單的幾行,且函數內部包含:for,while,switch語句。

C. Please write sample code.

void Foo(int x,int y);

inline void Foo(int x,int y){...}

需要注意的是:關鍵字inline必須與函數定義體放在一起才能使函數構成內聯,僅將inline放在函數聲明前不起任何作用。

3. Which of the following are legal? For those usages thatare illegal, explain why.

const int buf;

不合法。因為定義const變量(常量)時必須進行初始化,而buf沒有初始化。

int cnt = 0;

const int sz = cnt;

合法。

cnt++; sz++;

不合法。因為修改了const變量sz的值。

4. Please point out the errors in the following C++ code. Andwhy?

switch ( ival )

{

case 1, 3, 5, 7, 9:oddcnt++;

break;

case 2, 4, 6, 8, 10:evencnt++;

break;

}

貌似case 不能把所有的情況並列列出來,沒見過 case 1, 3, 5, 7,9:這種寫法,改為 case1:oddcnt++; case 3:oddcnt++;

C++筆試題目及答案篇2

1. Given the following base and derived class definitions:

class Base

{

public:

foo ( int );

protected:

int _bar;

double _foo_bar;

};

class Derived: public Base

{

public:

foo ( string );

bool bar ( Base *pb );

void foobar ;

protected:

string _bar;

};

Identify what is wrong with each of thefollowing code fragments and how each might be fixed:

(a) Derived d; ( 1024 );

錯誤:定義個派生類的對象d,( 1024 );派生類中foo的參數是string,不能將int型轉換為"string"

(b) void Derived :: foobar { _bar=1024;}

正確:定義派生類的成員函數foobar;把整形1024賦給string ,發生類型轉換

(c) bool Derived :: bar { Base *pb }

{ return _foo_bar = = pb->_foo_bar; }

錯誤:沒有參數列表,還有下面不應該為"==",還有在派生類中無法訪問基類的保護成員。

應該改為:boolDerived :: bar (Base *pb)

{ return _foo_bar = pb->_foo_bar; }

2. A. Please list all the design patterns you known.

常見的設計模式有23種,比如説:單例模式、工廠模式,觀察者模式、組合模式、策略模式、適配器模式、命令模式等等

B. Please explain the pattern of “Factory” and give anexample if you can.

工廠模式使一個類的實例化延遲到子類,換句話説也就是將創建對象實例的責任,

轉移到工廠類中,並利用抽象的原理,將實例化行為延遲到具體工廠類。

3. A. Please list all the sorting algorithms you known.

排序算法:冒泡排序(最簡單了,就是2個for循環)、快速排序、選擇排序、插入排序、歸併排序、希爾排序、堆排序等等

B. Please use pseudo code to describe the algorithm of “QuickSort”.

快速排序採用的是分治策略,分治法的基本思想是:將原問題分解為若干個規模更小但結構與原問題相似的子問題,遞歸解決這些子問題,然後將這些子問題的解組合為原問題的解。

快速排序:快速排序是對冒泡排序的一種改進,時間複雜度均是O(nlogn)空間複雜度是:O(logn)

基本思想:通過一趟排序算法將待排記錄分割成2部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄進行排序以達到整個序列有序。

一趟快速排序做法:

附設兩個指針low和high,設樞軸記錄關鍵字為pivotkey,則先從高位(high)起向前搜索找到第一個關鍵字小於pivotkey的記錄和樞軸記錄進行交換,然後從低位(low)所指位置向後搜索,找到第一個關鍵字大於pivotkey的記錄和樞軸記錄進行交換,重複這兩步,直至low=high為止。

源代碼:

void quicksort(int a, int low, int high)

{

inti,j,key,temp;

if(low< high)

{

key= a[low];

i= low;

j= high;

while(i< j)

{

for(i = i + 1; i < high; i++)

if(a[i] > key)

break;

for(j = j; j > low; j--)

if(a[j] < key)

break;

if(i< j)

{temp = a[i];

a[i]= a[j];

a[j]= temp;

}

}

temp= a[low];

a[low]= a[j];

a[j]= temp;

quicksort(a,low,j-1);

quicksort(a,i,high);

}

}

測試:int_tmain(int argc, _TCHAR* argv)

{

inta={49,38,65,97,76,13,27,49};

intsize = sizeof(a)/sizeof(int);

quicksort(a,0,size-1);

for(int i=0;i

{

cout<

cout<

}

system("pause");

return0;

}

C++筆試題目及答案篇3

Please answer the following questions:

A. What’s process scheduling and list all schedulingalgorithms you known.

調度算法是指:根據系統的資源分配策略所規定的資源分配算法。

1.先來先服務和短作業(進程)優先調度算法

2.高優先權優先調度算法

3.基於時間片的輪轉調度算法

B. What’s the “Race Condition”?

競態條件(racecondition)是一個在設備或者系統試圖同時執行兩個操作的時候

出現的不希望的狀況,但是由於設備和系統的自然特性,為了正確地執行,操作必

須按照合適順序進行。 常用在多線程環境中。

C. Please explain the diagram of process state change.

進程有3種基本狀態,等待、就緒、運行。

運行態→等待態:往往是由於等待外設,等待主存等資源分配或等待人工干預而引

起的。(服務請求,如請求I/O等)

等待態→就緒態:等待的條件已滿足,只需分配到處理器後就能運行。(服務完

成/事件來到)

運行態→就緒態:不是由於自身原因,而是由外界原因使運行狀態的進程讓出處理

器,這時候就變成就緒態。例如時間片用完,或有更高優先級的進程來搶佔處理器

等。 (時間片到等)

就緒態→運行態:系統按某種策略選中就緒隊列中的一個進程佔用處理器,此時就

變成了運行態(進程調度)