2022年語(yǔ)言程序設(shè)計(jì)筆試面試題_第1頁(yè)
2022年語(yǔ)言程序設(shè)計(jì)筆試面試題_第2頁(yè)
2022年語(yǔ)言程序設(shè)計(jì)筆試面試題_第3頁(yè)
2022年語(yǔ)言程序設(shè)計(jì)筆試面試題_第4頁(yè)
2022年語(yǔ)言程序設(shè)計(jì)筆試面試題_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、4.技巧題 試題2:寫(xiě)一個(gè)函數(shù)返回1+2+3+n的值(假定結(jié)果不會(huì)超過(guò)長(zhǎng)整型變量的范圍) 解答: int Sum( int n ) return ( (long)1 + n) * n / 2;/或return (1l + n) * n / 2; 剖析: 對(duì)于這個(gè)題,只能說(shuō),也許最簡(jiǎn)單的答案就是最好的答案。下面的解答,或者基于下面的解答思路去優(yōu)化,不管怎么“折騰”,其效率也不可能與直接return ( 1 l + n ) * n / 2相比! int Sum( int n ) long sum = 0; for( int i=1; i= - EPSINON) & (x =”或“=”此類(lèi)形式。如下

2、是錯(cuò)誤的寫(xiě)法,不得分。if (x = 0.0) if (x != 0.0) 請(qǐng)寫(xiě)出char *p 與“零值”比較的 if 語(yǔ)句。(3分)標(biāo)準(zhǔn)答案:if (p = NULL) if (p != NULL)如下寫(xiě)法均屬不良風(fēng)格,不得分。if (p = 0) if (p != 0) if (p) if (!) 二、以下為Windows NT下的32位C+ HYPERLINK t _blank 程序,請(qǐng)計(jì)算sizeof的值(10分) char *p = str ;int n = 10;char str = “Hello” ; 請(qǐng)計(jì)算sizeof (str ) = 6 sizeof ( p ) = 4

3、(2分) (2分) sizeof ( n ) = 4 (2分)void Func ( char str100)請(qǐng)計(jì)算sizeof( str ) = 4 (2分)void *p = malloc( 100 );請(qǐng)計(jì)算sizeof ( p ) = 4 (2分) 三、簡(jiǎn)答題(25分) 1、頭文件中的 ifndef/define/endif 干什么用?(5分)答:防止該頭文件被重復(fù)引用。#include ,編譯器從標(biāo)準(zhǔn)庫(kù)路徑開(kāi)始 HYPERLINK t _blank 搜索 filename.h對(duì)于#include “filename.h” ,編譯器從用戶(hù)的工作路徑開(kāi)始 HYPERLINK t _bla

4、nk 搜索 filename.h3.const 有什么用途?(請(qǐng)至少說(shuō)明兩種)(5分)答:4.在C+ HYPERLINK t _blank 程序中調(diào)用被 C編譯器編譯后的函數(shù),為什么要加 extern “C”? (5分)答:5.請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)(5分)for (i=0; iif (condition)DoSomething();elseDoOtherthing();if (condition)for (i=0; iDoSomething();elsefor (i=0; iDoOtherthing();優(yōu)點(diǎn): HYPERLINK /article/articlelist/arti

5、cle_5_adddate_desc_1.htm t _blank 程序簡(jiǎn)潔缺點(diǎn):多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線(xiàn)”作業(yè),使得編譯器不能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點(diǎn):循環(huán)的效率高缺點(diǎn): HYPERLINK /article/articlelist/article_5_adddate_desc_1.htm t _blank 程序不簡(jiǎn)潔5分,共20分) void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str); strcpy(str, hell

6、o world);printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答: HYPERLINK /article/articlelist/article_5_adddate_desc_1.htm t _blank 程序崩潰。因?yàn)門(mén)est函數(shù)中的 str一直都是 NULL。strcpy(str, hello world);將使 HYPERLINK /article/articlelist/article_5_adddate_desc_1.htm t _blank 程序崩潰。GetMemory并不能傳遞動(dòng)態(tài)內(nèi)存,char *GetMemory(void) char p = hello w

7、orld;return p;void Test(void)char *str = NULL;str = GetMemory(); printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:可能是亂碼。因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是 NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello); print

8、f(str); 請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:(1)能夠輸出hello2)內(nèi)存泄漏void Test(void)char *str = (char *) malloc(100);strcpy(str, free(str); if(str != NULL)strcpy(str, printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。因?yàn)閒ree(str);之后,str成為野指針,if(str != NULL)語(yǔ)句不起作用?!癶ello”);“world”); strcpy函數(shù)(10分)strcpy函數(shù)的原型是char *str

9、cpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。1)不調(diào)用C+/C的字符串庫(kù)函數(shù),請(qǐng)編寫(xiě)函數(shù) strcpystrDest!=NULL) & (strSrc !=NULL); / 2分strDest; / 2分strDest+ = * strSrc+) != 0 ) / 2分2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char * 類(lèi)型的返回值?int length = strlen( strcpy( strDest, “hello world”) ); String的構(gòu)造函數(shù)、析構(gòu)函

10、數(shù)和賦值函數(shù)(25分)String的原型為:String:String(void) / 3分String:String(const char *str) / 6分0; -來(lái)源為林銳博士的 已知六、編寫(xiě)類(lèi)已知類(lèi)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; / 用于保存字符串;

11、請(qǐng)編寫(xiě)String的上述4個(gè)函數(shù)。(二)void * ( * (*fp1)(int)10;float (*(* fp2)(int,int,int)(int);int (* ( * fp3)()10();分別表示什么意思?答:1.void * ( * (*fp1)(int)10;fp1是一個(gè)指針,指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為int型,函數(shù)的返回值是一個(gè)指針,這個(gè)指針指向一個(gè)數(shù)組,這個(gè)數(shù)組有10個(gè)元素,每個(gè)元素是一個(gè)void*型指針。2.float (*(* fp2)(int,int,int)(int);fp2是一個(gè)指針,指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為3個(gè)int型,函數(shù)的返回值是一個(gè)指針,這個(gè)指

12、針指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為int型,函數(shù)的返回值是float型。3.int (* ( * fp3)()10();fp3是一個(gè)指針,指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為空,函數(shù)的返回值是一個(gè)指針,這個(gè)指針指向一個(gè)數(shù)組,這個(gè)數(shù)組有10個(gè)元素,每個(gè)元素是一個(gè)指針,指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為空,函數(shù)的返回值是int型。1.介紹一下STL,詳細(xì)說(shuō)明STL如何實(shí)現(xiàn)vector。Answer:STL (標(biāo)準(zhǔn)模版庫(kù),Standard Template Library.它由容器算法迭代器組成。STL有以下的一些優(yōu)點(diǎn):可以方便容易地實(shí)現(xiàn)搜索數(shù)據(jù)或?qū)?shù)據(jù)排序等一系列的算法;調(diào)試程序時(shí)更加安全和方便;即使是人們用

13、STL在UNIX平臺(tái)下寫(xiě)的代碼你也可以很容易地理解(因?yàn)镾TL是跨平臺(tái)的)。 vector實(shí)質(zhì)上就是一個(gè)動(dòng)態(tài)數(shù)組,會(huì)根據(jù)數(shù)據(jù)的增加,動(dòng)態(tài)的增加數(shù)組空間。 2.如果用VC開(kāi)發(fā)程序,常見(jiàn)這么幾個(gè)錯(cuò)誤,C2001,c2005,c2011,這些錯(cuò)誤的原因是什么。Answer:在學(xué)習(xí)VC+的過(guò)程中,遇到的LNK2001錯(cuò)誤的錯(cuò)誤消息主要為:unresolved external symbol “symbol”(不確定的外部“符號(hào)”)。如果連接程序不能在所有的庫(kù)和目標(biāo)文件內(nèi)找到所引用的函數(shù)、變量或標(biāo)簽,將產(chǎn)生此錯(cuò)誤消息。 一般來(lái)說(shuō),發(fā)生錯(cuò)誤的原因有兩個(gè):一是所引用的函數(shù)、變量不存在、拼寫(xiě)不正確或者使用錯(cuò)誤

14、;其次可能使用了不同版本的連接庫(kù)。 編程中經(jīng)常能遇到LNK2005錯(cuò)誤重復(fù)定義錯(cuò)誤,其實(shí)LNK2005錯(cuò)誤并不是一個(gè)很難解決的錯(cuò)誤. 3.繼承和委派有什么分別,在決定使用繼承或者委派的時(shí)候需要考慮什么。在OOD,OOP中,組合優(yōu)于繼承.當(dāng)然多態(tài)的基礎(chǔ)是繼承,沒(méi)有繼承多態(tài)無(wú)從談起。 當(dāng)對(duì)象的類(lèi)型不影響類(lèi)中函數(shù)的行為時(shí),就要使用模板來(lái)生成這樣一組類(lèi)。當(dāng)對(duì)象的類(lèi)型影響類(lèi)中函數(shù)的行為時(shí),就要使用繼承來(lái)得到這樣一組類(lèi). 4.指針和引用有什么分別;如果傳引用比傳指針安全,為什么?如果我使用常量指針難道不行嗎?(1) 引用在創(chuàng)建的同時(shí)必須初始化,即引用到一個(gè)有效的對(duì)象;而指針在定義的時(shí)候不必初始化,可以在定

15、義后面的任何地方重新賦值(2) 不存在引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián);而指針則可以是NULL.(3) 引用一旦被初始化為指向一個(gè)對(duì)象,它就不能被改變?yōu)榱硪粋€(gè)對(duì)象的引用;而指針在任何時(shí)候都可以改變?yōu)橹赶蛄硪粋€(gè)對(duì)象給引用賦值并不是改變它和原始對(duì)象的綁定關(guān)系(4) 引用的創(chuàng)建和銷(xiāo)毀并不會(huì)調(diào)用類(lèi)的拷貝構(gòu)造函數(shù)(5) 語(yǔ)言層面,引用的用法和對(duì)象一樣;在二進(jìn)制層面,引用一般都是通過(guò)指針來(lái)實(shí)現(xiàn)的,只不過(guò)編譯器幫我們完成了轉(zhuǎn)換. 不存在空引用,并且引用一旦被初始化為指向一個(gè)對(duì)象,它就不能被改變?yōu)榱硪粋€(gè)對(duì)象的引用,顯得很安全。const 指針仍然存在空指針,并且有可能產(chǎn)生野指針. 總的來(lái)說(shuō):引用既具有指針的效率,又具有變量使用的方便性和直觀(guān)性 5.參數(shù)傳遞有幾種方式;實(shí)現(xiàn)多態(tài)參數(shù)傳遞采用什么方式,如果沒(méi)有使用某種方式原因是什么;傳值,傳指針或者引用 6.結(jié)合一個(gè)項(xiàng)目說(shuō)明你怎樣應(yīng)用設(shè)計(jì)模式的理念。設(shè)計(jì)模式更多考慮是擴(kuò)展和重用,而這兩方面很多情況下,往往會(huì)被忽略。不過(guò),我不建議濫用設(shè)計(jì)模式,以為它有可能

溫馨提示

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

評(píng)論

0/150

提交評(píng)論