本试题仅用于考查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. select into from 和 insert into select 的用法和区别(转)

    转自:http://www.studyofnet.com/news/182.html select into from 和 insert into select都是用来复制表,两者的主要区别为: se ...

  2. JavaScript基础知识----基本语法

    JavaScript 语句 JavaScript 语句向浏览器发出的命令.语句的作用是告诉浏览器该做什么. 分号 ; 分号用于分隔 JavaScript 语句. 通常我们在每条可执行的语句结尾添加分号 ...

  3. CSS3 总结-1

    新的边框属性 属性 描述 CSS border-image 设置所有 border-image-* 属性的简写属性. 3 border-radius 设置所有四个 border-*-radius 属性 ...

  4. win7 VMware Workstation Centos6.5虚机桥接上网设置 详解(靠谱)

    1.VMware Workstation 设置 2. vim /etc/sysconfig/network-scripts/ifcfg-eth0 NAME="System eth0" ...

  5. 安装CDH

    Cloudera Manager 4.8.2 http://www.idefs.com/recordsubuntu-12-04-cloudera-installation-manager-4-8-2- ...

  6. DELPHI编写服务程序总结

    DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...

  7. delphi数字签名验证及能够获取数字签名文件信息(利用wintrust.dll的导出函数,翻译一下)

    unit TrustCheck; interface uses Windows,SysUtils,jwaWinTrust,JwaWinCrypt; function CheckFileTrust(co ...

  8. 数据结构——链表(linkedlist)

    基本分类: 1.单向链表 2.带尾指针的单向链表 3.双向循环链表 以下分类进行说明 1.单向链表 基本元素:*front //头节点 *next //下一节点 声明:node<T>*p; ...

  9. IOS中Key-Value Coding (KVC)的使用具体解释

    kvc.键值编码,是一个非正式的协议.它提供一种机制来间接訪问对象的属性. 直接訪问对象是通过调用訪问器的方法实现,而kvc不须要调用訪问器的设置和获取方法.能够直接訪问对象的属性. 以下介绍一下kv ...

  10. CentOS中使用shell的命令补全

    习惯debian的用户都知道shell中的自动补全功能非常实用,其中在CentOS中也可以有同样的功能. 只需要安装 bash-completion 包即可. rpm -ivh http://www. ...