1-c++貝爾筆試題及答案_第1頁
1-c++貝爾筆試題及答案_第2頁
1-c++貝爾筆試題及答案_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余6頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、貝爾筆試題及答案一、請(qǐng)?zhí)顚態(tài)OOL, float,指針變量與“零值”比較的if語句。(10分)請(qǐng)寫出BOOL flag與“零值”比較的if語句。(3分)標(biāo)準(zhǔn)答案:if ( flag ) if(!flag )如下寫法均屬不良風(fēng)格,不得分。if (flag = TRUE)if (flag = 1 )if (flag = FALSE)if (flag = 0)請(qǐng)寫出float x 與"零值"比較的if語句。(4分)標(biāo)準(zhǔn)答案示例:con st float EPSINON = 0. 00001;if (x >= - EPSINON) && (x <= EP

2、SINON)不可將浮點(diǎn)變量用或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“二” 此類形式。如下是錯(cuò)誤的寫法,不得分。if (x = 0. 0)if (x != 0. 0)請(qǐng)寫出char *p與"零值"比較的if語句。(3分)標(biāo)準(zhǔn)答案:if (p = NULL)if (p != NULL)如下寫法均屬不良風(fēng)格,不得分。if (p = 0)辻(p !二 0)if (p)if (!p)二、以下為Windows NT下的32位C+程序,請(qǐng)計(jì)算sizeof的值(10分)char str =“Hello"char *p = str ;int n 二 10;請(qǐng)計(jì)算siz

3、eof (str ) = 6 (2分)sizeof ( p ) 二 4 (2 分)sizeof ( n ) = 4 (2void Func ( char str100)請(qǐng)計(jì)算sizeof ( str )=4 (2void *p 二 malloc ( 100 );請(qǐng)計(jì)算sizeof ( p ) = 4 (2分)三、 簡答題 (25 分)1、頭文件中的 ifndef/define/endif 干什么用? (5 分) 答:防止該頭文件被重復(fù)引用。2、 9nelude?和 Ainclude "filename, h" 有什么區(qū)別? (5 分) 答:對(duì)于怖elude?,編譯器從標(biāo)準(zhǔn)庫

4、路徑開始搜索file name"對(duì)于怖elude"f訂ename, h",編譯器從用戶的工作路徑開始搜索filename.h3、 const 有什么用途? (請(qǐng)至少說明兩種 )(5 分)答:(1) 可以定義 const 常量(2) const 可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被 const 修 飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。4、在C+程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern“C” ? (5 分)答:C+語言支持函數(shù)重載,C語言不支持函數(shù)重載。函數(shù)被C+編譯后在庫中的名字與 C 語言的不同。假設(shè)某個(gè)函數(shù)

5、的原型為: void foo(int x, int y): 該函數(shù)被C編譯器編譯后在庫中的名字為_foo,而C+編譯器則會(huì)產(chǎn)生像_foo_int_int 之類的名字。C+提供了 C連接交換指定符號(hào)extern "C"來解決名 字匹配問題。5、請(qǐng)簡述以下兩個(gè) for 循環(huán)的優(yōu)缺點(diǎn) (5 分)for (i=0; i<N; i+)if (condition)DoSomething ();elseDoOtherthing();if (condition)for (i=0; i<N; i+)DoSomething ();elsefor (i=0; i<N; i+)D

6、oOtherthing ();優(yōu)點(diǎn):程序簡潔缺點(diǎn):多執(zhí)行了 N-1 次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得 編譯器不能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點(diǎn):循環(huán)的效率高缺點(diǎn):程序不簡潔四、有關(guān)內(nèi)存的思考題 (每小題 5分,共 20分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str 二 NULL;GetMemory(str);strcpy(str, "hello world"); printf(str);請(qǐng)問運(yùn)行 Test 函數(shù)會(huì)有什么樣的結(jié)果?答:程序崩潰。因?yàn)镚etM

7、emory并不能傳遞動(dòng)態(tài)內(nèi)存,Test 函數(shù)中的 str 直都是 NULL。strcpy(str, "hello world");將使程序崩潰。char *GetMemory(void)char p 二"hello world" return p;void Test(void)char *str 二 NULL;str 二 GetMemory ();printf(str);請(qǐng)問運(yùn)行 Test 函數(shù)會(huì)有什么樣的結(jié)果?答:可能是亂碼。NULL,因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是 但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。void

8、 GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test (void)char *str = NULL;GetMemory(&str, 100); strcpy(str,hello );printf(str);請(qǐng)問運(yùn)行 Test 函數(shù)會(huì)有什么樣的結(jié)果?答:(1) 能夠輸出 hello(2) 內(nèi)存泄漏void Test(void)char *str = (char *) malloc(100); strcpy (str,“ hello ” );free(str);if(str != NULL)strcpy (str,“

9、 world ” );printf (str);請(qǐng)問運(yùn)行 Test 函數(shù)會(huì)有什么樣的結(jié)果?答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。因?yàn)閒ree (str); 之后,str成為野指針,辻(str != NULL)語句不起作用。五、 編寫 strcpy 函數(shù) (10 分)已知 strcpy 函數(shù)的原型是char *strcpy (char *strDest, const char *strSrc);其中 strDest 是目的字符串, strSrc 是源字符串。不調(diào)用 C+/C 的字符串庫函數(shù),請(qǐng)編寫函數(shù) strcpychar *strcpy (char *strDest, const

10、char *strSrc);assert(strDest!=NULL) && (strSrc !=NULL); / 2分 char address =strDest; / 2 分wlrdle( (*strDest+ = * strSrc+) !='0') / 2 分NULL ;return address ; / 2分 (2) strcpy 能把 strSrc 的內(nèi)容復(fù)制到 strDest, 為什么還要 char * 類型的 返 回值?答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式。 / 2 分例如 int length = strlen( strcpy ( strDest, &quo

11、t;hello world” );六、 編寫類 String 的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù) (25 分) 已知類 String 的原型為:class Stringpublic:String (const char *str = NULL) ; /普通構(gòu)造函數(shù)String (const String &other) ; /拷貝構(gòu)造函數(shù) String (void) ; /析構(gòu)函數(shù)String & operate =(const String &other) ; /賦值函數(shù) private:char *m_data; / 用于保存字符串;請(qǐng)編寫 String 的上述 4 個(gè)

12、函數(shù)。標(biāo)準(zhǔn)答案:/ String 的析構(gòu)函數(shù)String:String(void) / 3分delete m_data;/ 由于 m_data 是內(nèi)部數(shù)據(jù)類型,也可以寫成 delete m_data; / String 的普通構(gòu)造函數(shù)String:String (const char *str) / 6分 if(str 二二 NULL)m_data = new char 1 ; / 若能加NULL判斷則更好 *ni_data ='0''elseint length = strlen(str);m_data = new char length+1 ; / (m_data,

13、 str);/ 拷貝構(gòu)造函數(shù)String:String(const String &other) / 3int length = strlen (other. m_data); m_data = new char length+1 ; / (m_data, other. m_data);/ 賦值函數(shù)若能加 NULL 判斷則更好 strcpy分若能加 NULL 判斷則更好 strcpy分Stri ng & Stri ng:operate二(const Stri ng & other) / 13/ (1) 檢查自賦值 /4 分 if(this = &other) r

14、eturn *this;/ (2) 釋放原有的內(nèi)存資源 / 3 分 delete m_data;分配新的內(nèi)存資源,并復(fù)制內(nèi)容/ 3分int len £ th = strlen (other. m_data); m_data = new char length+1 (m_data, other. m_data);/ (4) 返冋本對(duì)象的引用 7/ 3 分 return *this;/ 若 能 加 NULL 判 斷 則 更 好 strcpy求問 delete 和 delete 的區(qū)別? ?C+告訴我們?cè)诨厥沼胣ew分配的單個(gè)對(duì)象的內(nèi)存空間的時(shí)候用delete,回收 用new 分配的一組對(duì)

15、象的內(nèi)存空間的時(shí)候用 delete o樓主的這個(gè)問題提得很好。很多人注意到了這個(gè)問題,但是卻不清楚為什么要 這 樣做,不這樣做行不行。關(guān)于new和deleted ,其中又分為兩種情況: 為基本數(shù)據(jù)類型分配和回收空間;(2) 為自定義類型分配和回收空間。對(duì)于(1), 上面提供的程序已經(jīng)證明了 delete : 和 delete 是等同的。但是對(duì) 于 (2), 情況就發(fā)生了變化。請(qǐng)看下面的程序。#include <iostream>using namespace std;class T public:T() cout constructor" << endl; T

16、 () cout destructor" << endl; ;int main()const int NUM = 3;T* pl 二 new TNUM;cout hex << pl << endl;/ delete pl;delete pl;T* p2 = new TNUM; cout p2 << endl;delete p2;大家可以自己運(yùn)行這個(gè)程序,看一看 delete pl 和 delete pl 的不同結(jié)果, 我 就不在這里貼運(yùn)行結(jié)果了。從運(yùn)行結(jié)果中我們可以看出 delete pl在回收空間的過程中,只有 plO 這 個(gè)對(duì)象調(diào)用

17、了析構(gòu)函數(shù),其它對(duì)象如 pll、pl2 等都沒有調(diào)用自身的析構(gòu)函 數(shù),這就是問題的癥結(jié)所在。如果用 delete, 則在回收空間之前所有對(duì)象都 會(huì)首先 調(diào)用自己的析構(gòu)函數(shù)?;绢愋偷膶?duì)象沒有析構(gòu)函數(shù),所以回收基本類型組成的數(shù)組空間用 delete 和 delete 都是應(yīng)該可以的;但是對(duì)于類對(duì)象數(shù)組,只能用 delete 。對(duì)于 new 的 單個(gè)對(duì)象,只能用 delete 不能用 delete 回收空間。所以一個(gè)簡單的使用原則就是:new和delete new和delete對(duì)應(yīng)使用。 最速求 100 萬內(nèi)所有素?cái)?shù)的算法Iong vT i ckCount 二 Env i ronment. TickCount;u i nt MaxNumber = 1000000;boo I Numbers = new bool MaxNumber ; /都會(huì)初始為 0u i nt Return 二 new u i nt MaxNumber / 2 ; / 返回值 int Count = 0;for (uint i 二 2; i < MaxNumber; 阡 +)if (!Numbersi) / 可以處理ReturnCount+ = i;fo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論