Opnedevices.net 嵌入式开发网 技术文档精华
  • 设为首页

  • 加入收藏

  • 联系我们
  • Opendevices开源项目
    opendevices论坛 嵌入式系统开发 嵌入式应用开发
       首 页 |嵌入式系统技术 |Linux技术平台 |编程高手文档 | 投 稿
        相关文章
    Home  首 页 »  编程高手文档 »  编程综合 » 

    高质量C++/C编程指南(附录B)


    作者:   来源:    更新日期:2004-12-03    浏览次数:
     

    附录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下的32位C++程序,请计算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” 有什么区别?

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

    (2)strcpy能把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下的32位C++程序,请计算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>

    (责任编辑:mengmeng)
    [推荐给朋友] [显示打印版本]

      相关评论

    您的姓名:
    评论内容:
     
    OpenDevices开发网 专门从事嵌入式开发 www.opendevices.net bbs.opendevices.net
    嵌入式 技术文档精华 致力于收录开发人员开发过程中搜集、总结和发表的有价值技术资料。
    Copyright by Opendevices开发网 2002-2004 版权声明
    OpenDevices.net All Rights Reserved
    友情链接:停雨轩时尚饰品 11FM.COM社区
    Power by linux apache php4 mysql phpbb 9466aticle