本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用 语法,不涉及 数据结构、 算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。
笔试时间90分钟。请考生认真答题,切勿轻视。
PS:如果想看数据结构和常用算法,可以参考我的Google Code项目ADT-in-C项目

一、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char s1[] = "";
char s2[] = "Hello World!";
char *p  = s2;
char *q  = NULL;
void *r   = malloc(100);

请计算:
sizeof (s1) = 
sizeof (s2) = 
sizeof ( p ) = 
sizeof ( q )  =

sizeof (r) = 
char s1[10] = {'m', 'o', 'b', 'i', 'l'};
char s2[20] = {'A', 'N', 'S', 'I', '\0', 'C', '+', '+'};
char s3[6]   = {'I', 'S', 'O', 'C', '+', '+'};

请计算:
strlen(s1)  = 
strlen(s2)  =
strlen(s3)  = 
s2[8]  = 
 
void Func ( char str[100]) 
    请计算:
    sizeof( str ) =     
}

二、请填写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 语句:



三、简答题(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函数会有什么样的结果?
答:




五、类型转换。(5分)
    double d = 100.25;
    int x = d;
    int *pInt = (int*)&d;
请问以下两个输出语句的结果是否相同?为什么?
    cout << x << endl;
    cout << *pInt << endl;


PS:此题如果深入,详见百度面试题那篇博文

六、编写strcpy函数(10分)
已知strcpy函数的原型是
 char *strcpy(char *strDest, const char *strSrc); 
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数strcpy 


(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?


PS:此题的扩展可以参考那篇常用字符串函数库实现博文。

七、编写类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个函数。


PS:答案回复可见。

O(∩_∩)O~

《高质量程序设计指南:C++/C语言》面试题整理的更多相关文章

  1. 高质量程序设计指南C/C++语言——C++/C程序设计入门

    1.在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实 ...

  2. 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)

    *switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...

  3. 指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)

    指针: 指针是变量,和平时的那些变量没有本质的差异,不同的只是它的值和类型,.,即解释方式 二进制层面:指针的值是内存单元的地址,而变量是引用内存单元值的别名 语言层面:指针的值就是变量的地址. 对象 ...

  4. 高质量程序设计指南C/C++语言——malloc/free使用要点

  5. 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?

  6. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  7. 高质量程序设计指南C/C++语言——C++/C常量(2)

  8. 高质量程序设计指南C/C++语言——C++/C程序设计入门(2)

    *标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符. *把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有 ...

  9. 高质量程序设计指南C/C++语言——C++/C编译预处理

    C++/C的编译预处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段.预编译伪指令一般都以#打头,且其前面只能出现空白字符.预编译伪指令不是C++/C ...

  10. 高质量程序设计指南C/C++语言——C++/C常量

随机推荐

  1. ThinkPHP第六天(正则表达式)

    1.正则表达式:原子 ①a-z,A-Z,0-9,_ ②用(abc)圆括号括起来的单元符号,表示括号里面的作为一个完整的组合,必须完成匹配,不被拆分来 ③用方括号括起来[abc][^abc]称之为原子表 ...

  2. Flask中路由模块的实现

    在Flask中的路由功能主要通过修饰函数route实现,下面我们就来挖掘下route在源代码中是怎么分配视图函数的. def route(self, rule, **options): def dec ...

  3. 解决gerber-Failed to Match All Shapes for PCB问题

    有效解决在Protel 99se导gerber时提示gerber-Failed to Match All Shapes for PCB出错问题如图 这种问题很好解决,打开这个窗口 操作方法如下图Emb ...

  4. python测试框架--nose

      最近再浏览Python自动化测试框架,之前接触过unittest,看了篇文章,发现nose貌似更牛逼一些,于是安装试了试,分享一下心得.     nose 项目是于 2005 年发布的,也就是 p ...

  5. javascript实现贪吃蛇

    <html> <head> <style> body { background:#444; } .rect { border:1px solid #94F; wid ...

  6. MySQL 讨厌哪种类型的查询

    ㈠ 任何查询都讨厌             只要是查询.MySQL都讨厌.执行查询最快的方式就是不去执行        缓存为王.比如Redis或者memcache               ㈡ 查 ...

  7. ceph源码之一

    转自于:http://blog.csdn.net/changtao381/article/details/8698935 一.概述: 其结构如下:在src 里, 网络通信:  msg  里面 包括了网 ...

  8. PendingIntent.getBroadcast第四个参数flags

    (1) android.app.PendingIntent.FLAG_UPDATE_CURRENT 如果PendingIntent已经存在,保留它并且只替换它的extra数据. (2) android ...

  9. 树莓派做web服务器(nginx、Apache)

    一想到Linux Web服务器,我们首先想到的是: Apache + MySql + Php. Apache:是世界使用排名第一的Web服务器软件. 可以运行在几乎所有广泛使用的计算机平台上,由于其跨 ...

  10. java-finalize

    finalize()来自Object的protected 方法,同clone()需要用户具体实现.一.源码中的介绍1.    Called by the garbage collector on an ...