华为校园招聘考试C语言C++笔试题
1.static有什么用处?〔请至少说明两种〕
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2)在模块内〔但在函数体外〕,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用
2.引用与指针有什么区别?
1)引用必须被初始化,指针不必。
2)引用初始化以后不能被改变,指针可以改变所指的对象。
3)不存在指向空值的引用,但是存在指向空值的指针。
3.描绘实时系统的根本特性
在特定时间内完成特定的任务,实时性与可靠性。
4.全局变量和部分变量在内存中是否有区别?假如有,是什么区别?
全局变量储存在静态数据库,部分变量在堆栈。
5.什么是平衡二叉树?
左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于
1。
6.堆栈溢出一般是由什么原因导致的?
没有回收垃圾资源。
7.什么函数不能声明为虚函数?
constructor函数不能声明为虚函数。
8.冒泡排序算法的时间复杂度是什么?
时间复杂度是
O(n^2)。
9.写出
floatx与“零值〞比拟的
if语句。
if(x>0.000001&&x<-0.000001)
10.Internet采用哪种网络协议?该协议的主要层次构造?
Tcp/Ip协议
主要层次构造为:应用层
/传输层/网络层/数据链路层
/物理层。
11.Internet物理地址和
IP地址转换采用什么协议?
ARP(AddressResolutionProtocol)〔地址解析協議〕
12.IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码〞按位与上之后才能区分哪些是网络位哪些是主机位。
13.用户输入
M,N值,从
N开场顺序循环数数,每数到
M输出该数值,直至全部输出。
写出
C程序。
循环链表,用取余操作做
14.不能做
switch()的参数类型是:
switch的参数不能为实型。
1.写出判断
ABCD四个表达式的是否正确,假设正确,写出经过表达式中a的值(3分)
inta=4;
(A)a+=(a++);(B)a+=(++a);(C)(a++)+=a;(D)(++a)+=(a++);
a=?
答:C错误,左侧不是一个有效变量,不能赋值,可改为
(++a)+=a;
改后答案依次为
9,10,10,11
2.某
32位系统下
,C++程序,请计算
sizeof的值(5分).
charstr[]=“    ://    ibegroup  /〞
char*p=str;
intn=10;
请计算
sizeof(str)=?〔1〕
sizeof(p)=?〔2〕
sizeof(n)=?〔3〕
voidFoo(charstr[100]){
请计算
sizeof(str)=?〔4〕
}
void*p=malloc(100);
请计算
sizeof(p)=?〔5〕
答:〔1〕17〔2〕4〔3〕4〔4〕4〔5〕4
3.答复下面的问题
.
(4分)
(1).头文件中的ifndef/define/endif干什么用?预处理
答:防止头文件被重复引用
(2).#include和#
include“filename.h〞有什么区别?
答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
C++程序中调用被C编译器编译后的函数,为什么要加extern“C〞声明?答:函数和变量被
C++编译后在符号库中的名字与
C语言的不同,被
extern"C"修饰的变
量和函数是按照
C语言方式编译和连接的。由于编译后的名字不同,
C++程序不能直接调
C函数。C++提供了一个
C连接交换指定符号
extern“C〞来解决这个问题。
(4).switch()中不允许的数据类型是?
答:实型
4.答复下面的问题
(6分)
(1).VoidGetMemory(char**p,intnum){
*p=(char*)malloc(num);
}
voidTest(void){
char*str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
}
请问运行
Test函数会有什么样的结果?
答:输出“hello〞
(2).voidTest(void){
char*str=(char*)malloc(100);
strcpy(str,“hello〞);
free(str);
if(str!=NULL){
strcpy(str,“world〞);
printf(str);
}
}
请问运行
Test函数会有什么样的结果?
答:输出“world〞
(3).char*GetMemory(void){
charp[]="helloworld";
returnp;
}
voidTest(void){
char*str=NULL;
str=GetMemory();
printf(str);
}
请问运行
Test函数会有什么样的结果?
答:无效的指针,输出不确定
5.编写
strcat函数(6分)
strcat函数的原型是
char*strcat(char*strDest,constchar*strSrc);
其中
strDest是目的字符串,strSrc是源字符串。
()c语言是啥
〔1〕不调用
C++/C的字符串库函数,请编写函数strcat
答:
VC源码:
char*__cdeclstrcat(char*dst,constchar*src)
{
char*cp=dst;
while(*cp)
cp++;/*findendofdst*/
while(*cp++=*src++);/*Copysrctoendofdst*/
return(dst);/*returndst*/
}
〔2〕strcat能把
strSrc的内容连接到
strDest,为什么还要
char*类型的返回值?
答:方便赋值给其他变量
6.MFC中
CString是类型平安类么?
答:不是,其它数据类型转换到
CString可以使用
CString的成员函数
Format来转换
7.C++中为什么用模板类。
答:
1)可用来创立动态增长和减小的数据构造
2)它是类型无关的,因此具有很高的可复用性。
3)它在编译时而不是运行时检查数据类型,保证了类型平安
4)它是平台无关的,可移植性
5)可用于根本数据类型
8.CSingleLock是干什么的。
答:同步多个线程对一个数据类的同时访问
9.NEWTEXTMETRIC是什么。
答:物理字体构造,用来设置字体的高宽大小
10.程序什么时候应该使用线程,什么时候单线程效率高。
答:
1)
耗时的操作使用线程,进步应用程序响应
2)
并行操作时使用线程,如
C/S架构的效劳器端并发线程响应用户的恳求。
3)
CPU系统中,使用线程进步
CPU利用率
4)
改善程序构造。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。其他情况都使用单线程。
11.Windows是内核级线程么。
答:见下一题
12.Linux有内核级线程么。
答:线程通常被定义为一个进程中代码的不同执行道路。从实现方式上划分,线程有两种类型:“用户级线程〞和“内核级线程〞。用户线程指不需要内核支持而在用户程序
中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创立、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象DOS这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似Windows3.x的协作式多任务。另外一
种那么需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进展创立和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因I/O而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的时机;而内核线程那么没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
WindowsNT和OS/2支持内核线程。Linux支持内核级的多线程
13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?
答:栈:存放部分变量,函数调用参数,函数返回值,函数返回地址。由系统管理
堆:程序运行时动态申请,new和malloc申请的内存就在堆上
14.使用线程是如何防止出现大的波峰。
答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程到达最大数时,其他线程就会排队等候。
15函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化