《上海贝尔试题1》由会员分享,可在线阅读,更多相关《上海贝尔试题1(38页珍藏版)》请在金锄头文库上搜索。
1、/上海贝尔的面试题 43 分即可进入复试 一、请填写 BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分) 提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:if ( n = 0 )if ( n != 0 ) 以此类推。 请写出 BOOL flag 与“零值”比较的 if 语句:if(flag)if(!flag) 请写出 float x 与“零值”比较的 if 语句:#define precision 1e-6if(abs(x)precision) 请写出 char *p 与“零值”比较的
2、 if 语句:if(p=NULL)if(p!=NULL) 二、以下为 Windows NT 下的 32 位 C+程序,请计算 sizeof 的值(10 分) char str = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4void Func ( char str100) 请计算 sizeof( str ) = 4 void *p = malloc( 100 ); 请计算 sizeof ( p ) = 4 、简答题(25 分) 1、头文件中的 ifnde
3、f/define/endif 干什么用?防止头文件被重复引用; 2、include 和 include “filename.h” 有什么区别?include 为标准方式,系统到存放 C 库函数所在的目录中 寻找要包含的头文件;适用与调用库函数的情况。include “filename.h”系统现在当前工作目录中寻找包含文件,当找不到 时再按标准方式查找,适用于用户自己编写的头文件。 3、const 有什么用途?(请至少说明两种)(1) 可以定义 const 常量; (2) 用 const 修饰函数参数、返回值、及函数定义体,被 const 修饰的东西 收到强制保护,防止意外修改,提高程序的健壮
4、性。4、在 C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声 明? 5、请简述以下两个 for 循环的优缺点 / 第一个 for (i=0; i= - EPSINON) 该函数被 C 编译器编译后在库中的名字为_foo,而 C+编译器则会产生像 _foo_int_int 之类的名字。 C+提供了 C 连接交换指定符号 extern“C”来解决名字匹配问题。5、请简述以下两个 for 循环的优缺点(5 分)for (i=0; i i nclude int Pheponatch(int); int Pheponatch2(int);int main()printf(“
5、The 10th is %d“,Pheponatch2(20);system(“pause“);return 0; /递归算法 int Pheponatch(int N) if( N = 1 | N = 2)return 1; elsereturn Pheponatch( N -1 ) + Pheponatch( N -2 ); /非递归算法 int Pheponatch2(int N) int x = 1, y = 1, temp;int i = 2;while(true)temp = y;y = x + y;x = temp;i+;if( i = N )break; return y; 2
6、5完成下列程序*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.i nclude #define N 8int main()int i;int j;int k;-| | | |-return 0;i nclude i nclude #define N 8int main()int i;int j;int k;for(i=N; i=1; i-)for(j=0; jleft=NULL; /NewNode-right=NULL;i nclude i nclude typedef struct TNodeTNod
7、e* left;TNode* right;int value; TNode;TNode* root=NULL;void append(int N);int main()append(63);append(45);append(32);append(77);append(96);append(21);append(17); / Again, 数字任意给出 return 0;void append(int N)TNode* NewNode=(TNode *)malloc(sizeof(TNode);NewNode-value=N;NewNode-left=NULL; NewNode-right=N
8、ULL;if(root=NULL)root=NewNode;return;elseTNode* temp;temp=root;while(N=temp-value while(Nvalue if(N=temp-value)temp-left=NewNode;elsetemp-right=NewNode;return; 算法: 1什么是 NPC,NP-Hard? 2起泡排序的时间复杂度是多少? 说出至少一个比它更快的算法; 排序的极限时间复杂度是多少? 3有一个链表,如何判断它是一个循环链表? 如果链表是单向的呢? 如果出现循环的点可能在任意位置呢?如果缓存空间是有限的,比如是一个常数呢? 如果
9、只能使用 2 个缓存呢? 4有一个文件,保存了若干个整数,如何以平均的概率随机得到其中的一个整 数? 如果整数的个数是未知的呢? 如果整数是以字符串形式存放,如:(即如何得到随机的一个字符串) 123 -456 如果只允许便历文件一次呢? 5用两组数据,都在内存中,对它们排序分别需要 1 和 2 分钟;那么使用两个 线程一起排序,大概需要多少时间?C/C+: 1C 与 C+的异同,优劣; 2C,C+,VC,BC,TC 的区别; 3C+中 trycatch 关键字的用法与优点; 4枚举的用法,以及它与宏的区别; 5const 的用法,以及声明 const 变量与宏的区别;const 的用法有四种
10、:区别:const 常量有数据类型, 而宏常量没有数据类型。编译器可以对前 者进行类型安全检查,而对后者只能进行字符替换,没有类型安全检查。而且字符替换可能会带来料想不到的边界效应。有些集成化工具可以对 const 常量进行调试, 但不能对宏量进行调试。 6C+中引用与指针的区别;答:1 引用实际上是所引用的对象或变量的别名,而指针是包含所指向对 象或变量的地址的变量。2 引用在定义时必须初始化,而指针在定义时不初始化。3 不可以有努 NULL 的引用,而可以有指向 NULL 的指针。4 引用在初始化后不可以改变引用关系,而指针可以随时指向其 他对象(非 const 指针)。 7C+中 vir
11、tual 与 inline 的含义分别是什么?答:在基类成员函数的声明前加上 virtual 关键字,意味着将该成员函数声 明为虚函数。inline 与函数的定义体放在一起,使该函数称为内联。inline 是一种 用于实现的关键字,而不是用于声明的关键字。 虚函数的特点;如果希望派生类能够重新定义基类的方法,则在基类中将该方 法定义为虚方法,这样可以启用动态联编。 内联函数的特点;使用内联函数的目的是为了提高函数的运行效率。内联函数 体的代码不能过长,因为内联函数省去调用函数 的时间是以代码膨胀为代价的。内联函数不能包含循环语句,因为执行循环语 句要比调用函数的开销大。 一个函数能否即是虚函数
12、又是内联函数? 8以下关键字的含义与用法:extern,extern “C”,static,explicit,register,#undef,#ifndef 9什么是函数重载与覆盖? 为什么 C 不支持函数重载? 为什么 C+能支持函数重载? 10VC 中,编译工具条内的 Debug 与 Release 选项是什么含义? 11编写 my_memcpy 函数,实现与库函数 memcpy 类似的功能,不能使用任何库 函数;void* mymemcpy(void* pvTo, const char* pvFrom, size_t size)assert(dest != NULL) byte* psT
13、o = (byte*)pvTo;byte* psFrom = (byte*)pvFrom;while (size- 0) *psTo+ = *psFrom+;return pvTo; 12编写 my_strcpy 函数,实现与库函数 strcpy 类似的功能,不能使用任何库 函数;答:char* my_strcpy(char* strdest, const char* strsrc)assert(strdest != NULL) while(*strdest+ = *strsrc+) != NULL)return address;13编写 gbk_strlen 函数,计算含有汉字的字符串的长度
14、,汉字作为一个字符 处理; 已知:汉字编码为双字节,其中首字节的区别?答:对于i nclude 编译器从标准库开始搜索 filename.h对于i nclude “filename.h”编译器从用户工作路径开始搜索 filename.h 2 头文件的作用是什么? 答:一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用 户公布,只要向用户提供头文件和二进制的库即可。用户只需 要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译 器会从库中提取相应的代码。 二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与 头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。 3 C+函数中值的传递方式有哪几种? 答:C+函数的三种传递方式为:值传递、指针传递和引用传递。 4 内存的分配方式的分配方式有几种? 答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内 存在程序的整个运行期间都存在。例如全局变量。 二、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创 建,函数执行结束时这些存储单元自动被释放。栈内 存分配运 算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 三、从堆上分配,亦称动态内存分