[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > C/C++ > 正文
高質量C++/C編程指南 -- 附錄B :C++/C試題、答案與評分標準
本文出自: 作者: 林銳 博士 (2002-07-30 06:02:00)

附錄B C++/C試題

       本試題僅用考查C++/C程序員的基本編程技能。內容限C++/C常用語法,不涉及數據結構、算法以及深奧的語法。考試成績能反映出考生的編程質量以及對C++/C的理解程度,但不能反映考生的智力和軟件開發能力。

       筆試時間90分鐘。請考生認真答題,切勿輕視。

 

一、請填寫BOOL , float, 指針變量 與“零值”比較的 if 語句。(10分)

提示:這裡“零值”可以是0, 0.0 , FALSE或者“空指針”。例如 int 變量 n 與“零值”比較的 if 語句為:

    if ( n == 0 )

    if ( n != 0 )

以此類推。

 

請寫出 BOOL  flag 與“零值”比較的 if 語句:

 

 

請寫出 float  x 與“零值”比較的 if 語句:

 

 

 

請寫出 char  *p 與“零值”比較的 if 語句:

 

 

 

二、以下為Windows NT下的32C++程序,請計算sizeof的值(10分)

 

       char  str[] = “Hello” ;

       char   *p = str ;

int     n = 10;

請計算

sizeof (str ) =       

         

sizeof ( p ) =       

          

sizeof ( n ) =

void Func ( char str[100])

{

請計算

 sizeof( str ) =   

}

 

void *p = malloc( 100 );

請計算

sizeof ( p ) =

 

 

三、簡答題(25分)

 

1、頭文件中的 ifndef/define/endif 幹什用?

 

 

 

2#include  <filename.h>     #include  “filename.h” 有什區別?

 

 

 

3const 有什用途?(請至少說明兩種)

 

 

 

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++)

    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");

printf(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 = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");  

printf(str);   

}

請問運行Test函數會有什樣的結果?

答:

 

 

 

 

 

void Test(void)

{

char *str = (char *) malloc(100);

    strcpy(str, hello);

    free(str);     

    if(str != NULL)

    {

      strcpy(str, world);

printf(str);

}

}

請問運行Test函數會有什樣的結果?

答:

 

 

 

 

 

 

五、編寫strcpy函數(10分)

已知strcpy函數的原型是

       char *strcpy(char *strDest, const char *strSrc);

       其中strDest是目的字符串,strSrc是源字符串。

 

1)不調用C++/C的字符串庫函數,請編寫函數 strcpy

 

 

 

 

 

 

 

2strcpy能把strSrc的內容復制到strDest,為什還要char * 類型的返回值?

 

 

 

 

六、編寫類String的構造函數、析構函數和賦值函數(25分)

已知類String的原型為:

    class String

    {

      public:

        String(const char *str = NULL);    // 普通構造函數

        String(const String &other);        // 拷貝構造函數

        ~ String(void);                        // 析構函數

        String & operate =(const String &other);    // 賦值函數

      private:

        char      *m_data;                // 用保存字符串

    };

       請編寫String的上述4個函數。

 

附錄C C++/C試題的答案與評分標準

一、請填寫BOOL , float, 指針變量 與“零值”比較的 if 語句。(10分)

 

請寫出 BOOL  flag 與“零值”比較的 if 語句。(3分)

標準答案:

    if ( flag )

    if ( !flag )

如下寫法均屬不良風格,不得分。

    if (flag == TRUE)  

    if (flag == 1 )    

    if (flag == FALSE)  

        if (flag == 0)     

請寫出 float  x 與“零值”比較的 if 語句。(4分)

標準答案示例:

const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON)

不可將浮點變量用“==”或“!=”與數字比較,應該設法轉化成“>=”或“<=”此類形式。

  

 

如下是錯誤的寫法,不得分。

    if (x == 0.0)  

    if (x != 0.0)      

   

請寫出 char  *p 與“零值”比較的 if 語句。(3分)

標準答案:

    if (p == NULL)

    if (p != NULL)

如下寫法均屬不良風格,不得分。

    if (p == 0)

    if (p != 0)    

    if (p)  

        if (!)     

 

二、以下為Windows NT下的32C++程序,請計算sizeof的值(10分)

 

       char  str[] = “Hello” ;

       char   *p = str ;

int     n = 10;

請計算

sizeof (str ) =  6   2分)

         

sizeof ( p ) =   4   2分)

          

sizeof ( n ) =   4   2分)

void Func ( char str[100])

{

請計算

 sizeof( str ) =   4     2分)

}

 

void *p = malloc( 100 );

請計算

sizeof ( p ) =  4      2分)

 

 

三、簡答題(25分)

 

1、頭文件中的 ifndef/define/endif 幹什用?(5分)

答:防止該頭文件被重復引用。

 

2#include  <filename.h>     #include  “filename.h” 有什區別?(5分)

答:對#include  <filename.h> http://www.fanqiang.com)     進入【UNIX論壇


相關文章
高質量C++/C編程指南 -- 附錄A :C++/C代碼審查表 (2002-07-29 06:02:00)
高質量C++/C編程指南 -- 第11章 其它編程經驗 參考文獻 (2002-07-26 06:02:00)
高質量C++/C編程指南 -- 第10章 類的繼承與組合 (2002-07-25 06:02:00)
高質量C++/C編程指南 -- 第9章 類的構造函數、析構函數與賦值函數 (2002-07-24 06:02:00)
高質量C++/C編程指南 -- 第8章 C++函數的高級特性 (2002-07-23 06:02:01)
高質量C++/C編程指南 -- 第7章 內存管理 (2) (2002-07-22 06:02:00)
高質量C++/C編程指南 -- 第7章 內存管理 (1) (2002-07-19 06:02:00)
高質量C++/C編程指南 -- 第6章 函數設計 (2002-07-18 06:02:00)
高質量C++/C編程指南 -- 第4章 表達式和基本語句 (2002-07-17 09:18:18)
高質量C++/C編程指南 -- 第5章 常量 (2002-07-17 06:02:00)

===更多相關===
 

★  樊強制作 歡迎分享  ★