c和c++經典筆試題及答案_第1頁
c和c++經典筆試題及答案_第2頁
c和c++經典筆試題及答案_第3頁
c和c++經典筆試題及答案_第4頁
c和c++經典筆試題及答案_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C+/C經典筆試題及答案C+/C試題   本試題僅用于考查C+/C程序員的基本編程技能。內容限于C+/C常用語法,不涉及數據結構、算法以及深奧的語法。考試成績能反映出考生的編程質量以及對C+/C的理解程度,但不能反映考生的智力和軟件開發能力。       筆試時間90分鐘。請考生認真答題,切勿輕視。一、請填寫BOOL , float, 指針變量 與“零值”比較的 if 語句。(10分)提示:這里“零值”可以是0, 0.0 , FALSE或者“空指針”。例如 int 變量 n 與“零值”比較的 i

2、f 語句為:    if ( n = 0 )    if ( n != 0 )以此類推。請寫出 BOOL  flag 與“零值”比較的 if 語句:請寫出 float  x 與“零值”比較的 if 語句:請寫出 char  *p 與“零值”比較的 if 語句:二、以下為Windows NT下的32位C+程序,請計算sizeof的值(10分)       char  s

3、tr = “Hello” ;       char   *p = str ;int     n = 10;請計算sizeof (str ) =                 sizeof ( p ) =      &#

4、160;           sizeof ( n ) =void Func ( char str100)請計算sizeof( str ) =    void *p = malloc( 100 );請計算sizeof ( p ) =三、簡答題(25分)1、頭文件中的 ifndef/define/endif 干什么用? 2、#include  <filename.h>   和 

5、 #include  “filename.h” 有什么區別? 3、const 有什么用途?(請至少說明兩種) 4、在C+ 程序中調用被 C編譯器編譯后的函數,為什么要加 extern “C”聲明?5、請簡述以下兩個for循環的優缺點/ 第一個for (i=0; i<N; i+)if (condition)    DoSomething();else    DoOtherthing();/ 第二個if (condition)for (i=0; i<N; i+) &#

6、160;  DoSomething();else    for (i=0; i<N; i+)    DoOtherthing();優點:缺點:優點:缺點:四、有關內存的思考題(20分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str);   strcpy(str, "hello world");print

7、f(str);請問運行Test函數會有什么樣的結果?答:char *GetMemory(void)   char p = "hello world"return p;void Test(void)char *str = NULL;str = GetMemory();    printf(str);請問運行Test函數會有什么樣的結果?答:Void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str =

8、NULL;GetMemory(&str, 100);strcpy(str, "hello");   printf(str);    請問運行Test函數會有什么樣的結果?答: void Test(void)char *str = (char *) malloc(100);    strcpy(str, “hello”);    free(str);      

9、    if(str != NULL)          strcpy(str, “world”); printf(str);請問運行Test函數會有什么樣的結果?答:五、編寫strcpy函數(10分)已知strcpy函數的原型是       char *strcpy(char *strDest, const char *strSrc);    &

10、#160;  其中strDest是目的字符串,strSrc是源字符串。(1)不調用C+/C的字符串庫函數,請編寫函數 strcpy(2)strcpy能把strSrc的內容復制到strDest,為什么還要char * 類型的返回值?六、編寫類String的構造函數、析構函數和賦值函數(25分)已知類String的原型為:    class String          public:    

11、60;   String(const char *str = NULL); / 普通構造函數        String(const String &other);        / 拷貝構造函數         String(void);       

12、;              / 析構函數        String & operate =(const String &other);    / 賦值函數      private:      

13、60; char    *m_data;                / 用于保存字符串           請編寫String的上述4個函數。C+/C試題的答案與評分標準一、請填寫BOOL , float, 指針變量 與“零值”比較的 if 語句。(10分)請寫出 BOOL&

14、#160; flag 與“零值”比較的 if 語句。(3分)標準答案:    if ( flag )    if ( !flag )如下寫法均屬不良風格,不得分。    if (flag = TRUE)       if (flag = 1 )         if (flag = FALSE) &

15、#160;        if (flag = 0)      請寫出 float  x 與“零值”比較的 if 語句。(4分)標準答案示例:const float EPSINON = 0.00001;if (x >= - EPSINON) && (x <= EPSINON)不可將浮點變量用“=”或“!=”與數字比較,應該設法轉化成“>=”或“<=”此類形式。   如

16、下是錯誤的寫法,不得分。    if (x = 0.0)       if (x != 0.0)           請寫出 char  *p 與“零值”比較的 if 語句。(3分)標準答案:    if (p = NULL)    if (p != NULL)如下寫法均屬不良風

17、格,不得分。    if (p = 0)     if (p != 0)         if (p)          if (!)      二、以下為Windows NT下的32位C+程序,請計算sizeof的值(10分)   

18、60;   char  str = “Hello” ;       char   *p = str ;int     n = 10;請計算sizeof (str ) =  6   (2分)          sizeof ( p ) =  

19、 4   (2分)          sizeof ( n ) =   4   (2分)void Func ( char str100)請計算sizeof( str ) =   4     (2分)void *p = malloc( 100 );請計算sizeof ( p ) =  4 &

20、#160;    (2分)三、簡答題(25分)1、頭文件中的 ifndef/define/endif 干什么用?(5分)答:防止該頭文件被重復引用。2、#include  <filename.h>   和  #include  “filename.h” 有什么區別?(5分)答:對于#include  <filename.h> ,編譯器從標準庫路徑開始搜索 filename.h    

21、對于#include  “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h3、const 有什么用途?(請至少說明兩種)(5分)答:(1)可以定義 const 常量(2)const可以修飾函數的參數、返回值,甚至函數的定義體。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。4、在C+ 程序中調用被 C編譯器編譯后的函數,為什么要加 extern “C”? (5分)答:C+語言支持函數重載,C語言不支持函數重載。函數被C+編譯后在庫中的名字與C語言的不同。假設某個函數的原型為: void foo(int x, int

22、 y);該函數被C編譯器編譯后在庫中的名字為_foo,而C+編譯器則會產生像_foo_int_int之類的名字。C+提供了C連接交換指定符號extern“C”來解決名字匹配問題。5、請簡述以下兩個for循環的優缺點(5分)for (i=0; i<N; i+)if (condition)    DoSomething();else    DoOtherthing();if (condition)for (i=0; i<N; i+)    DoSomething();

23、else    for (i=0; i<N; i+)    DoOtherthing();優點:程序簡潔缺點:多執行了N-1次邏輯判斷,并且打斷了循環“流水線”作業,使得編譯器不能對循環進行優化處理,降低了效率。優點:循環的效率高缺點:程序不簡潔四、有關內存的思考題(每小題5分,共20分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str);   

24、;strcpy(str, "hello world");printf(str);請問運行Test函數會有什么樣的結果?答:程序崩潰。因為GetMemory并不能傳遞動態內存,Test函數中的 str一直都是 NULL。strcpy(str, "hello world");將使程序崩潰。char *GetMemory(void)   char p = "hello world"return p;void Test(void)char *str = NULL;str = GetMemory(); &

25、#160;  printf(str);請問運行Test函數會有什么樣的結果?答:可能是亂碼。因為GetMemory返回的是指向“棧內存”的指針,該指針的地址不是 NULL,但其原現的內容已經被清除,新內容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");   printf(str); &#

26、160;  請問運行Test函數會有什么樣的結果?答:(1)能夠輸出hello(2)內存泄漏void Test(void)char *str = (char *) malloc(100);    strcpy(str, “hello”);    free(str);          if(str != NULL)        

27、;   strcpy(str, “world”); printf(str);請問運行Test函數會有什么樣的結果?答:篡改動態內存區的內容,后果難以預料,非常危險。因為free(str);之后,str成為野指針,if(str != NULL)語句不起作用。五、編寫strcpy函數(10分)已知strcpy函數的原型是       char *strcpy(char *strDest, const char *strSrc);      

28、 其中strDest是目的字符串,strSrc是源字符串。(1)不調用C+/C的字符串庫函數,請編寫函數 strcpychar *strcpy(char *strDest, const char *strSrc);    assert(strDest!=NULL) && (strSrc !=NULL); / 2分    char *address = strDest;          &#

29、160;        / 2分    while( (*strDest+ = * strSrc+) != 0 )    / 2分       NULL ;     return address ;           

30、               / 2分(2)strcpy能把strSrc的內容復制到strDest,為什么還要char * 類型的返回值?答:為了實現鏈式表達式。                        

31、                      / 2分例如       int length = strlen( strcpy( strDest, “hello world”) );六、編寫類String的構造函數、析構函數和賦值函數(25分)已知類String的原型為:   &#

32、160;class String          public:        String(const char *str = NULL); / 普通構造函數        String(const String &other);        /

33、 拷貝構造函數         String(void);                     / 析構函數        String & operate =(const String &other);

34、60;   / 賦值函數      private:        char    *m_data;                / 用于保存字符串      

35、0;    請編寫String的上述4個函數。標準答案:/ String的析構函數       String:String(void)               / 3分    delete m_data;        

36、60;             / 由于m_data是內部數據類型,也可以寫成 delete m_data;              / String的普通構造函數             

37、0;      String:String(const char *str)      / 6分    if(str=NULL)                          

38、           m_data = new char1;    / 若能加 NULL 判斷則更好       *m_data = 0;                    &

39、#160;                                                 &

40、#160; else           int length = strlen(str);                  m_data = new charlength+1;  / 若能加 NULL 判斷則更好     &#

41、160;       strcpy(m_data, str);                       / 拷貝構造函數    String:String(const String &other)   / 3分           int length = strlen(other.m_data);     m_data = new charlength+1;      / 若能加 NUL

溫馨提示

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

最新文檔

評論

0/150

提交評論