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

    Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %lluDescription You probab ...

  2. C++中(int&)和(int)的区别

    在说这个问题之前,先说两个需要知道的背景知识: (1)语言的类型的强制转换不会修改原来的数据,会另外的开辟一个临时的或者程序中指定的空间来存储强制转换后的值. (2)C++引用的实现是在符号表中动了手 ...

  3. Android 开发技巧

    1, ActionBar.setTitle() 的参数是 CharSequence,可以用SpannableString的,颜色字形随你

  4. JS 获取星期几的四种写法

    今天是星期几的4种JS代码写法,有需要的朋友可以参考一下 第一种写法 复制代码代码如下: var str = "";  var week = new Date().getDay() ...

  5. Linux学习:netstat命令

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态等.对于开发来说,很多时候用于查看端口占用情况. 执行netstat命令,其输出结果可以分成两部分: 1)一是“Active ...

  6. hdu 1242 Rescue(bfs)

    此刻再看优先队列,不像刚接触时的那般迷茫!这也许就是集训的成果吧! 加油!!!优先队列必须要搞定的! 这道题意很简单!自己定义优先级别! +++++++++++++++++++++++++++++++ ...

  7. hdu4597 Play Game(DFS)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4597 题意 Alic ...

  8. Codeforces Round #262 (Div. 2) 460C. Present(二分)

    题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory ...

  9. c++,public/protected/private权限修饰符

    1.public的变量可以在类中以及外部访问到: 2. private只可以在类/友元中访问到. #include <iostream> using namespace std; //-- ...

  10. Android Matrix(坐标矩阵)

    Android Matrix 2016-02-26 14:38:10 介绍 中文名:坐标矩阵 高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matr ...