C_C++語言程序設(shè)計筆試面試題7_第1頁
C_C++語言程序設(shè)計筆試面試題7_第2頁
C_C++語言程序設(shè)計筆試面試題7_第3頁
C_C++語言程序設(shè)計筆試面試題7_第4頁
C_C++語言程序設(shè)計筆試面試題7_第5頁
免費預覽已結(jié)束,剩余8頁可下載查看

下載本文檔

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

文檔簡介

1、4.技巧題試題2:寫一個函數(shù)返回1+2+3+n的值(假定結(jié)果不會超過長整型變量的范圍) 解答:int Sum( int n )return ( (Ion g)1 + n) * n / 2;/ 或 return (1I + n) * n / 2;剖析:對于這個題,只能說,也許最簡單的答案就是最好的答案。下面的解答,或者基于下面的解答思路去優(yōu)化,不管怎么"折騰",其效率也不可能與直接return ( 1 I + n ) * n / 2相比!int Sum( int n )long sum = 0;for( int i=1; i<=n; i+ )sum += i; retu

2、rn sum;一、請寫出BOOL flag與“零值”比較的if 語句。(3分)標準答案:1如下寫法均屬不良風格,不得分。if ( flag )if (flag = TRUE)1if ( !flag )if (flag = 1 )1if (flag = FALSE)if (flag = 0)請寫出float x與“零值”比較的if 語句。(4分)標準答案示例:如下是錯誤的寫法,不得分。con st float EP SINON = 0.00001;if(X - 0.0)if (X >= - EP SINON) &&(X <= EP SINON)if(X !- 0.0)

3、不可將浮點變量用“或“!與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“ >-”或“ <-”此類形式。請寫出char *p 與“零值”比較的if 語句。(3分)標準答案:如下寫法均屬不良風格,不得分。ifif (p - 0)(p - NULL)if (p !- 0)ifif (p)(p !- NULL)if (!)二、以下為Windows NT下的32位C+程序,請計算sizeof的值(10分)char *p - str ;void Func ( char str100)int n - 10;char str -“ Hello ” ;請計算請計算sizeof( str ) - 4sizeof (str

4、 ) - 6sizeof ( p ) - 4(2分)(2分)(2分)void *p - malloc( 100 );請計算sizeof ( n ) - 4sizeof ( p ) - 4(2分)(2分)三、簡答題(25分)干什么用? ( 5分)1 頭文件中的ifndef/defi ne/e ndif答:防止該頭文件被重復引用。#inelude,編譯器從標準庫路徑開始搜索filename.h對于#inelude“filename.h ”編譯器從用戶的工作路徑開始搜索filename.h3.C0nst有什么用途?(請至少說明兩種)(5分)答:4.在C+程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加e

5、xtern“C'?( 5 分)答:5.請簡述以下兩個for循環(huán)的優(yōu)缺點(5分)for (i=0; iif (con diti on)if (con diti on)for (i=0; iDoSomethi ng();DoSomethi ng();elseDoOtherthi ng();elsefor (i=0; iDoOtherthi ng();優(yōu)點:程序簡潔優(yōu)點:循環(huán)的效率咼缺點:多執(zhí)行了 N-1次邏輯判斷,并且打 斷了循環(huán)“流水線”作業(yè),使得編譯器不 能對循環(huán)進行優(yōu)化處理,降低了效率。缺點:程序不簡潔5分,共20分)void GetMemory(char *p)char *GetM

6、emory(void)p = (char *)malloc(100);char p = "hello world"return p;void Test(void)void Test(void)char *str = NULL;GetMemory(str);char *str = NULL;strc py (str, "hello world");str = GetMemory();prin tf(str);prin tf(str);請問運行Test函數(shù)會有什么樣的結(jié)果?請問運行Test函數(shù)會有什么樣的結(jié)果?答:程序崩潰。答:可能是亂碼。因為因為GetMe

7、mory返回的是指向棧內(nèi)存的指 針,該指針的地址不是NULL,但其原現(xiàn)的內(nèi)Test函數(shù)中的str 一直都是 NULL。容已經(jīng)被清除,新內(nèi)容不可知。strcpy(str,"hello world");將使程序崩潰。GetMemory并不能傳遞動態(tài)內(nèi)存,void GetMemory2(char *p, i nt num)void Test(void)*p = (char *)malloc (nu m);char *str = (char *) malloc(100);strcpy(str,void Test(void)free(str);if(str != NULL)char

8、*str = NULL;GetMemory(&str, 100);strcpy(str,strcpy(str, "hello");prin tf(str);prin tf(str);請問運行Test函數(shù)會有什么樣的結(jié)果?請問運行Test函數(shù)會有什么樣的結(jié)果?答:答:篡改動態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預料,(非常危險。(因為free(str); 之后,str成為野指針,if(str != NULL)語句不起作用。1)能夠輸出hello2 )內(nèi)存泄漏“hello ”);“world ” );strcpy 函數(shù)(10 分)strcpy 函數(shù)的原型是 char *strcpy(

9、char *strDest, const char*strSrc);其中strDest是目的字符串,strSrc是源字符串。1)不調(diào)用C+/C的字符串庫 函數(shù),請編寫函數(shù) strcpystrDest!=NULL) && (strSrc !=NULL); / 2分 strDest; / 2“hello25分)String的原型為:分 0 '分 strDest+ = * strSrc+) != 0 ' / 2 分 2)strcpy 能把 strSrc 的內(nèi)容復制到 strDest , 為什么還要 char * 類型的返回值? int length = strlen(

10、 strcpy( strDest,world ”); String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(String:String(void) / 3分 String:String(const char *str) / 6來源為林銳博士的 << 高質(zhì)量 cc+ 編程五、編寫已知char *strcpy(char *strDest, const char *strSrc);答:為了實現(xiàn)鏈式表達式。 / 2 分例如assert(char *address =while( (*NULL ;return address ; / 2六、編寫類已知類class String普通構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)p

11、ublic:String(const char *str = NULL); /String(const String &other); / String(void); /析構(gòu)函數(shù)賦值函數(shù)String & operate =(const String &other); / private: char *m_data; / 用于保存字符串;請編寫 String 的上述 4 個函數(shù)。標準答案:/ String的析構(gòu)函數(shù)delete m_data;/ 由于 m_data 是內(nèi)部數(shù)據(jù)類型,也可以寫成 delete m_data;/ String 的普通構(gòu)造函數(shù)if(str=NUL

12、L)m_data = new char1; /若能加 NULL 判斷則更好*m_data =elseint length = strlen(str);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, str);/ 拷貝構(gòu)造函數(shù)String:String(const String &other) / 3int length = strlen(other.m_data);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, other.m_data);/ 賦值函數(shù)String

13、 & String:operate =(const String &other) / 13/ (1) 檢查自賦值 / 4 分if(this = &other) return *this;/ (2) 釋放原有的內(nèi)存資源 / 3 分delete m_data;/ ( 3)分配新的內(nèi)存資源,并復制內(nèi)容/ 3 分int length = strlen(other.m_data);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, other.m_data);/( 4)返回本對象的引用 / 3 分return *this;

14、C+語言支持函數(shù)重載,C語言不支持函數(shù)重載。函數(shù)被 不同。假設(shè)某個函數(shù)的原型為:void foo(i nt x, i nt y);的名字為_foo,而C+編譯器則會產(chǎn)生像 _foo_int_int 指定符號extern “ C'來解決名字匹配問題。函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被 意外的變動,能提高 程序的健壯性。別? ( 5分)C+編譯后在庫中的名字與C語言的該函數(shù)被C編譯器編譯后在庫中 之類的名字。C+提供了 C連接交換1 )可以定義con st 常量2)con st可以修飾 const修飾的東西都受到強制保護,可以預防2、#include禾R #include“filen

15、ame.h ” 有什么區(qū)已知六、編寫類已知類class Stringpublic:Stri ng(co nst char *str = NULL); /普通構(gòu)造函數(shù)Stri ng(co nst Stri ng & other); /拷貝構(gòu)造函數(shù)-Stri ng(void); /析構(gòu)函數(shù)賦值函數(shù)String & op erate =(c onst String &other); / p rivate:char *m_data; /用于保存字符串;請編寫String的上述4個函數(shù)。void * ( * (*fp1)(i nt)1O; float (*(* fp2)(i nt

16、,i nt,i nt)(i nt);int (* ( * fp3)()10(); 分別表示什么意思? 答:1.void * ( * (*fp1)(int)10;fp1 是一個指針, 指向一個函數(shù), 這個函數(shù)的參數(shù)為 int 型,函數(shù)的返回值是一個指針, 這個指針指向一個數(shù)組,這個數(shù)組有 10 個元素,每個元素是一個 void* 型指針。2.float (*(* fp2)(int,int,int)(int);fp2 是一個指針,指向一個函數(shù),這個函數(shù)的參數(shù)為 3 個 int 型,函數(shù)的返回值是一個 指針,這個指針指向一個函數(shù),這個函數(shù)的參數(shù)為 int 型,函數(shù)的返回值是 float 型。3.in

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

18、平臺下寫的代碼你也可以很容易地理解(因為, 動態(tài)的增加數(shù)組空間。vector 實質(zhì)上就是一個動態(tài)數(shù)組,會根據(jù)數(shù)據(jù)的增加2.如果用VC開發(fā)程序,常見這么幾個錯誤,C2001,c2005,c2011,這些錯誤的原因是什么。Answer:在學習VC+勺過程中,遇到的 LNK2001錯誤的錯誤消息主要為:“ symbol ”(不確定的外部“符號”)。變量或標簽, 將產(chǎn)生此錯誤unresolved external symbol如果連接程序不能在所有的庫和目標文件內(nèi)找到所引用的函數(shù)、 消息。拼寫不正確或者使用錯誤;LNK2005錯誤并不是一個很一般來說, 發(fā)生錯誤的原因有兩個: 一是所引用的函數(shù)、 變量

19、不存在、 其次可能使用了不同版本的連接庫。編程中經(jīng)常能遇到LNK2005錯誤一一重復定義錯誤,其實難解決的錯誤 .3. 繼承和委派有什么分別,在決定使用繼承或者委派的時候需要考慮什么。 在00D,00呻,組合優(yōu)于繼承.當然多態(tài)的基礎(chǔ)是繼承,沒有繼承多態(tài)無從談起。當對象的類型不影響類中函數(shù)的行為時,就要使用模板來生成這樣一組類。當對象的類型影響類中函數(shù)的行為時,就要使用繼承來得到這樣一組類4. 指針和引用有什么分別;如果傳引用比傳指針安全,為什么?如果我使用常量指針難道不行 嗎?(1) 引用在創(chuàng)建的同時必須初始化, 即引用到一個有效的對象; 而指針在定義的時候不必初始化, 可以在定義后面的任何地方重新賦值 不存在NULL引用,引用必須與合法的存儲單元關(guān)聯(lián);而指針則可以是 NULL.(3) 引用一旦被初始化為指向一個對象, 它就不能被改變?yōu)榱硪粋€對象的引用; 而指針在

溫馨提示

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

評論

0/150

提交評論