本试题仅用于考查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. 优雅的python

    在知乎上看到的问题--python有哪些优雅的代码实现. 下面的代码大概也算不上优雅. 一下代码在python3中实现 更多内容可见:http://book.pythontips.com/en/lat ...

  2. jquery选择器控制Html元素

    1.JQuery中有addClass,removeClass,toggleClass addClass(class):为每个匹配的元素添加指定的类名 removeClass(class):从所有匹配的 ...

  3. CentOS环境下R语言的安装和配置

    最近在看数据统计和分析,想到了R语言,于是就着手在自己的CentOS环境下进行安装和配置.步骤如下: 1.前往R官网下载安装包. 2.解压压缩包:tar xvzf R-3.2.2.tar.gz 3.进 ...

  4. Using WMIC For Gathering System Info

    WMIC is a command line interface to WMI (Windows Management Instrumentation). While it has many uses ...

  5. Android 6.0 新特性 整理 资料来自网络

    Android 6.0新特性 Runtime Permissions Doze and App Standby Apache HTTP Client Removal BoringSSL Access ...

  6. session 共享

    目前大多数大型网站的服务器都采用了分布式的部署方式,但是session是在服务器端保存的,如果用户跳转到其他服务器的话,session就会丢失,于是就有了分布式系统的session共享问题. sess ...

  7. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  8. 将 Java Spring Framework 应用程序迁移到 Windows Azure

    我们刚刚发布了一个新教程和示例代码,以阐述如何在Windows Azure中使用 Java 相关技术.在该指南中,我们提供了分步教程,说明如何将 Java Spring Framework 应用程序( ...

  9. Object 保存到文件中

    6月4日 Object 保存到文件中  Q. 你添加一个新类到你的项目当中且你希望可以保存这个类的一个实例对象到磁盘文件 并在需要时从磁盘文件读回到内存中  A. 方案  确保你的类遵循 NSCodi ...

  10. Android百度地图之显示地图

    添加地图显示 一.在百度官网下载相关的SDK (网址:http://developer.baidu.com/map/sdkandev-download.htm) 解压下载好的BaiduMap_Andr ...