本试题仅用于考查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. kali linux

    1. Kali 2.0使用SSH进行远程登录  http://jingyan.baidu.com/article/eae07827a3e6bc1fec5485e3.html 一.配置SSH参数修改ss ...

  2. CButtonST的用法详解【转】

    在想使用CButtonST的工程中加入BtnST.h.BtnST.cpp.BCMenu.h.BCMenu.cpp4个文件.2个类. 1. 在按钮上加入Icon,使Icon和文字同时显示 假设按钮ID为 ...

  3. [LeetCode]题解(python):027-Remove Element

    题目来源: https://leetcode.com/problems/remove-element/ 题意分析: 给定一个数组和一个数值val,将数组中数值等于val的数去除.不能申请额外空间,超过 ...

  4. Nginx小技巧(一)隐藏版本号

    修改nginx.conf server_tokens作用域是http server location语句块 server_tokens默认值是on,表示显示版本信息,设置server_tokens值是 ...

  5. SQL分页存储过程(不支持多表联合查询,不支持多字段排序)

    CREATE PROCEDURE [dbo].[Pro_GetPageOfRecords] @PageSize INT=20, --分页大小 @CurrentPage INT, --第几页 @Clum ...

  6. HBase 几点思考

    1. http://blog.csdn.net/yueyedeai/article/details/14648067 2. http://blog.csdn.net/pirateleo/article ...

  7. qstring.h赏析

    https://github.com/qtproject/qtbase/blob/dev/src/corelib/tools/qstring.h C:\Qt\Qt5.3.2_min\5.3\mingw ...

  8. STL string 模拟

    下面的代码来自c++ primer plus第5版第12章,书中代码写的非常好: // string1.h -- fixed and augmented string class definition ...

  9. 学校作业-Usaco DP水题

    好吧,因为USACO挂掉了,所以我写的所有代码都不保证正确性[好的,这么简单的题,再不写对,你就可以滚粗了! 第一题是USACO 2.2.2 ★Subset Sums 集合  对于从 1 到 N 的连 ...

  10. BNU Invading system

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=29364 这个题被坑了. 题意:密码就是那些数字里面的数,转换成二进制后1最少的那个数,当1的个数相同 ...