網站首頁 工作範例 辦公範例 個人範例 黨團範例 簡歷範例 學生範例 其他範例 專題範例

C基礎筆試題及答案

欄目: 筆試題目 / 釋出於: / 人氣:1.86W

在C++中函式可以使用預設引數。下面就由本站小編為大家介紹一下C++基礎筆試題及答案的文章,歡迎閱讀。

C基礎筆試題及答案

C++基礎筆試題及答案篇1

1.編寫my_strcpy函式,實現與庫函式strcpy類似的功能,不能使用任何庫函式;

答:char *strcpy(char *strDest, const char *strSrc)

{

if ( strDest == NULL || strSrc == NULL)

return NULL ;

if ( strDest == strSrc)

returnstrDest ;

char *tempptr = strDest ;

while( (*strDest++ = *strSrc++) != ‘’);

returntempptr ;

}

2. 頭檔案中的ifndef/define/endif的作用?

答:防止該標頭檔案被重複引用。

3. #i nclude與#i nclude “file.h”的區別?

答:前者編譯器從標準庫路徑開始搜尋file.h,而後者編譯器從使用者的工作路徑開始搜尋file.h。

4. 在C++ 程式中呼叫被C 編譯器編譯後的函式,為什麼要加extern“C”?

答:extern是C/C++語言中表明函式和全域性變數作用範圍(可見性)的關鍵字,其宣告的函式和變數可以在本模組或其它模組中使用。

通常,在模組的標頭檔案中對本模組提供給其它模組引用的函式和全域性變數以關鍵字extern宣告。

5. 面向物件的三個基本特徵,並簡單敘述之?

答:1)封裝:將客觀事物抽象成類,每個類對自身的資料和方法實行protection(private, protected,public)

2)繼承:實現繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現程式碼)、介面繼承(僅使用屬性和方法,實現滯後到子類實現)。

3)多型:允許將子類型別的指標賦值給父類型別的指標。

6. 過載(overload)和重寫(overried,有的書也叫做“覆蓋”)的區別?

答:從定義上來說:

過載:是指允許存在多個同名函式,而這些函式的引數表不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。

重寫:是指子類重新定義復類虛擬函式的方法。

從實現原理上來說:

過載:編譯器根據函式不同的引數表,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式。

重寫:當子類重新定義了父類的虛擬函式後,父類指標根據賦給它的不同的子類指標,動態的呼叫屬於子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛擬函式的地址無法給出)。

7. 多型的作用?

答:主要是兩個:1)隱藏實現細節,使得程式碼能夠模組化;擴充套件程式碼模組,實現程式碼重用;2)介面重用,為了類在繼承和派生的時候,保證使用家族中任一類的例項的某一屬性時的正確呼叫。

8. 分別寫出BOOL,int,float,指標型別的變數a 與“零”的比較語句。

答:BOOL :if ( !a ) or if(a)

int :if ( a ==0)

float :const EXPRESSION EXP = 0.000001

if ( a < EXP && a >-EXP)

pointer : if ( a != NULL) or if(a == NULL)

9. 請說出const與#define 相比,有何優點?

答案:1) const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。

2) 有些整合化的除錯工具可以對const 常量進行除錯,但是不能對巨集常量進行除錯。

10.簡述陣列與指標的區別?

陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。

(1)修改內容上的差別

char a = “hello”;

a[0] = ‘X’;

char *p = “world”; // 注意p 指向常量字串

p[0] = ‘X’; // 編譯器不能發現該錯誤,執行時錯誤

(2) 用運算子sizeof 可以計算出陣列的容量(位元組數)。sizeof(p),p 為指標得到的是一個指標變數的位元組數,而不是p 所指的記憶體容量。C++/C 語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同類型的指標。

char a = “hello world”;

char *p = a;

cout< cout< 計算陣列和指標的記憶體容量

voidFunc(char a[100])

{

cout< }

C++基礎筆試題及答案篇2

1.變數的宣告和定義有什麼區別?

答:宣告變數不分配空間,定義變數要分配空間。宣告主要是告訴編譯器,後面的引用都按宣告的格式。定義其實包含了宣告的意思,同時要分配記憶體空間。

2. 解釋堆和棧的區別。

答:堆(heap)——一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由OS回收。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列。速度比較慢,而且容易產生記憶體碎片,不過用起來最方便。

棧(stack)——由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。由系統自動分配,速度較快。但程式設計師是無法控制的。

3. const的作用是什麼?

答:(1)可以定義const常量

(2)const可以修飾函式的引數、返回值,甚至函式的定義體。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

4. 下列哪兩個是等同的

int b;

A constint* a = &b; //指向常量的指標,不能通過指標改變b,但指標的地址可以改變。

B const* int a = &b;// 指標的地址不可以改變,但可以通過指標改變b的值

C constint* const a = &b; //指標指向的值,和指標本身的地址都不能改變

D intconst* const a = &b;//與c相同

5. 完成程式,實現對陣列的降序排序

#include

void sort(int array );

int main

{

int array={45,56,76,234,1,34,23,2,3}; //數字任//意給出

sort( array );

return 0;

}

void sort( int array )

{____________________________________

inti,j,k;

for(i=1;i<=7;i++) { if(array[i]>array[i-1])

{

k=ARRAY[i];

j=i-1;

do

{

array[j+1]=array[j];

j– ;

}

while(k>array[j]&&j>=0);

array[j+1]=k;

}

}

—————————————————–

}

6. int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 輸出是多少?

答:相當於 i=j=4;i=k=8;i=l=16;i=m=32; 故最後i=32;

7. 請簡述以下兩個for迴圈的優缺點(5分)

1)for (i=0; i {

if (condition)

DoSomething;

else

DoOtherthing;

}

2)if (condition)

{

for (i=0; i DoSomething;

}

else

{

for (i=0; i 0)

{

*psTo++ = *psFrom++;

}

returnpvTo;

}

8 .C++裡面如何宣告const void f(void)函式為C程式中的庫函式?

答:在該函式前新增extern “C”宣告。由於編譯後的名字不同,C++程式不能直接呼叫C 函式。

9. 請寫出下面程式碼在 32 位平臺上的執行結果,並說明sizeof的性質:

#include

#include

int main(void)

{

char a[30];

char *b = (char *)malloc(20 * sizeof(char));

printf(“%dn”, sizeof(a));

printf(“%dn”, sizeof(b));

printf(“%dn”, sizeof(a[3]));

printf(“%dn”, sizeof(b+3));

printf(“%dn”, sizeof(*(b+4)));

return 0 ;

}

答:在32位系統下(如WIN32),指標長度為32位。a是一個有30個元素的字元型陣列;b是一個字串指標;a[3]是字元型;b+3是指標;*(b+4)是字元型。

因此輸出: 30、4、1、4、1

C++基礎筆試題及答案篇3

1. C++中,關鍵字struct和class的區別僅僅在於:

struct定義的類的預設成員為公有的,而class定義的類的預設成員為私有的;

2. 標頭檔案的作用是什麼?

答:1)通過標頭檔案來呼叫庫功能。2)標頭檔案能加強型別安全檢查。

3. C++函式中值的傳遞方式有哪幾種?

答:C++函式的三種傳遞方式為:值傳遞、指標傳遞和引用傳遞。

4. 記憶體的分配方式的分配方式有幾種?

答:1)從靜態儲存區域分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數。

2)在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

3)從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。

5. 設計函式intatoi(char *s)。

答:intatoi (char *s)

{

int i = 0,sum = 0,sign; //輸入的數前面可能還有空格或製表符應加判斷

while(*s==”||*s==’t’)

{

i++;

}

sign = (*s==’-')?-1:1;

if(*s==’-'|| *s==’+')

{

i++;

}

while(*s!=’