貝爾的筆試題目_第1頁
貝爾的筆試題目_第2頁
貝爾的筆試題目_第3頁
貝爾的筆試題目_第4頁
貝爾的筆試題目_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第頁共頁貝爾的筆試題目貝爾的筆試題目一、請?zhí)顚態(tài)OOL,float,指針變量與“零值”比擬的if語句,貝爾的筆試題目。(10分)請寫出BOOLflag與“零值”比擬的if語句。(3分)標(biāo)準(zhǔn)答案:if(flag)if(!flag)如下寫法均屬不良風(fēng)格,不得分。if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)請寫出floatx與“零值”比擬的if語句。(4分)標(biāo)準(zhǔn)答案例如:constfloatEPSINON=0.00001;if((x》=-EPSINON)--(x<=EPSINON)不可將浮點變量用“==”或“!=”與數(shù)字比擬,應(yīng)該設(shè)法轉(zhuǎn)化成“》=”或“<=”此類形式。如下是錯誤的寫法,不得分。if(x==0.0)if(x!=0.0)請寫出char*p與“零值”比擬的if語句。(3分)標(biāo)準(zhǔn)答案:if(p==NULL)if(p!=NULL)如下寫法均屬不良風(fēng)格,不得分。if(p==0)if(p!=0)if(p)if(!)二、以下為WindowsNT下的32位C++程序,請計算sizeof的值(10分)charstr[]=“Hello”;char*p=str;intn=10;請計算sizeof(str)=6(2分)sizeof(p)=4(2分)sizeof(n)=4(2分)voidFunc(charstr[100]){請計算sizeof(str)=4(2分)}void*p=malloc(100);請計算sizeof(p)=4(2分)三、簡答題(25分)答:防止該頭文件被重復(fù)引用。2、#include?和#include“filename.h”有什么區(qū)別?(5分)答:對于#include?,編譯器從標(biāo)準(zhǔn)庫途徑開場搜索filename.h對于#include“filename.h”,編譯器從用戶的工作途徑開場搜索filename.h3、const有什么用處?(請至少說明兩種)(5分)答:(1)可以定義const常量(2)const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東西都受到強迫保護,可以預(yù)防意外的變動,能進步程序的強健性。4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern“C”?(5分)答:C++語言支持函數(shù)重載,C語言不支持函數(shù)重載。函數(shù)被C++編譯后在庫中的名字與C語言的不同。假設(shè)某個函數(shù)的原型為:voidfoo(intx,inty);該函數(shù)被C編譯器編譯后在庫中的名字為_foo,而C++編譯器那么會產(chǎn)生像_foo_int_int之類的名字。C++提供了C連接交換指定符號extern“C”來解決名字匹配問題。5、請簡述以下兩個for循環(huán)的優(yōu)缺點(5分)for(i=0;i{if(condition)DoSomething;elseDoOtherthing;}if(condition){for(i=0;iDoSomething;}else{for(i=0;iDoOtherthing;}優(yōu)點:程序簡潔缺點:多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)進展優(yōu)化處理,降低了效率。優(yōu)點:循環(huán)的效率高缺點:程序不簡潔四、有關(guān)內(nèi)存的考慮題(每題5分,共20分)voidGetMemory(char*p){p=(char*)malloc(100);}voidTest(void){char*str=NULL;GetMemory(str);strcpy(str,“helloworld”);printf(str);}請問運行Test函數(shù)會有什么樣的結(jié)果?答:程序崩潰。因為GetMemory并不能傳遞動態(tài)內(nèi)存,Test函數(shù)中的str一直都是NULL。strcpy(str,“helloworld”);將使程序崩潰。char*GetMemory(void){charp[]=“helloworld”;returnp;}voidTest(void){char*str=NULL;str=GetMemory;printf(str);}請問運行Test函數(shù)會有什么樣的結(jié)果?答:可能是亂碼。因為GetMemory返回的是指向“棧內(nèi)存”的.指針,該指針的地址不是NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被去除,新內(nèi)容不可知。voidGetMemory2(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(-str,100);strcpy(str,“hello”);printf(str);}請問運行Test函數(shù)會有什么樣的結(jié)果?答:(1)可以輸出hello(2)內(nèi)存泄漏voidTest(void){char*str=(char*)malloc(100);strcpy(str,“hello”);free(str);if(str!=NULL){strcpy(str,“world”);printf(str);}}請問運行Test函數(shù)會有什么樣的結(jié)果?答:篡改動態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以意料,非常危險。因為free(str);之后,str成為野指針,if(str!=NULL)語句不起作用。五、編寫strcpy函數(shù)(10分)strcpy函數(shù)的原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是字符串,資料共享平臺《貝爾的筆試題目》(s://..)。(1)不調(diào)用C++/C的字符串庫函數(shù),請編寫函數(shù)strcpychar*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)--(strSrc!=NULL));//2分char*address=strDest;//2分while((*strDest++=*strSrc++)!='’)//2分NULL;returnaddress;//2分}(2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char*類型的返回值?答:為了實現(xiàn)鏈?zhǔn)奖磉_式。//2分例如intlength=strlen(strcpy(strDest,“helloworld”));六、編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)類String的原型為:classString{public:String(constchar*str=NULL);//普通構(gòu)造函數(shù)String(constString-other);//拷貝構(gòu)造函數(shù)~String(void);//析構(gòu)函數(shù)String-operate=(constString-other);//賦值函數(shù)private:char*m_data;//用于保存字符串};請編寫String的上述4個函數(shù)。標(biāo)準(zhǔn)答案://String的析構(gòu)函數(shù)String::~String(void)//3分{delete[]m_data;//由于m_data是內(nèi)部數(shù)據(jù)類型,也可以寫成deletem_data;}//String的普通構(gòu)造函數(shù)String::String(constchar*str)//6分{if(str==NULL){m_data=newchar[1];//假設(shè)能加NULL判斷那么更好*m_data='’;}else{intlength=strlen(str);m_data=newchar[length+1];//假設(shè)能加NULL判斷那么更好strcpy(m_data,str);}}//拷貝構(gòu)造函數(shù)String::String(constString-other)//3分{intlength=strlen(other.m_data);m_data=newchar[length+1];//假設(shè)能加NULL判斷那么更好strcpy(m_data,other.m_data);}//賦值函數(shù)String-String::operate=(constString-other)//13分{//(1)檢查自賦值//4分if(this==-other)return*this;//(2)釋放原有的內(nèi)存資//3分delete[]m_data;//(3)分配新的內(nèi)存資,并復(fù)制內(nèi)容//3分intlength=strlen(other.m_data);m_data=newchar[length+1];//假設(shè)能加NULL判斷那么更好strcpy(m_data,other.m_data);//(4)返回本對象的引用//3分1.strcpy函數(shù)的原型是:char*strcpy(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是字符串。不調(diào)用C++/C的字符串庫函數(shù),請編寫函數(shù)strcpy答案:char*strcpy(char*strDest,constchar*strSrc){returnNULL;if(strDest==strSrc)returnstrDest;char*tempptr=strDest;while((*strDest++=*strSrc++)!='’);returntempptr;}2.類String的原型為:classString{public:String(constchar*str=NULL);//普通構(gòu)造函數(shù)String(constString-other);//拷貝構(gòu)造函數(shù)~String(void);//析構(gòu)函數(shù)String-operate=(constString-other);//賦值函數(shù)private:char*m_data;//用于保存字符串};請編寫String的上述4個函數(shù)。答案:String::String(constchar*str){if(str==NULL)//strlen在參數(shù)為NULL時會拋異常才會有這步判斷{m_data=newchar[1];m_data[0]='';}else{m_data=newchar[strlen(str)+1];strcpy(m_data,str);}}String::String(constString-other){m_data=newchar[strlen(other.m_data)+1];strcpy(m_data,other.m_data);}String-String::operator=(constString-other){if(this==-other)return*this;delete[]m_data;m_data=newchar[st

溫馨提示

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

最新文檔

評論

0/150

提交評論