C++经典面试题及答案Word格式文档下载.docx

上传人:b****5 文档编号:17167188 上传时间:2022-11-28 格式:DOCX 页数:73 大小:95.09KB
下载 相关 举报
C++经典面试题及答案Word格式文档下载.docx_第1页
第1页 / 共73页
C++经典面试题及答案Word格式文档下载.docx_第2页
第2页 / 共73页
C++经典面试题及答案Word格式文档下载.docx_第3页
第3页 / 共73页
C++经典面试题及答案Word格式文档下载.docx_第4页
第4页 / 共73页
C++经典面试题及答案Word格式文档下载.docx_第5页
第5页 / 共73页
点击查看更多>>
下载资源
资源描述

C++经典面试题及答案Word格式文档下载.docx

《C++经典面试题及答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++经典面试题及答案Word格式文档下载.docx(73页珍藏版)》请在冰豆网上搜索。

C++经典面试题及答案Word格式文档下载.docx

把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

  static函数与普通函数作用域不同。

仅在本文件。

只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。

对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

  static全局变量与普通的全局变量有什么区别:

static全局变量只初使化一次,防止在其他文件单元中被引用;

  static局部变量和普通局部变量有什么区别:

static局部变量只被初始化一次,下一次依据上一次结果值;

  static函数与普通函数有什么区别:

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

  8、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。

  9、设有以下说明和定义:

  typedefunion{longi;

intk[5];

charc;

}DATE;

  structdata{intcat;

DATEcow;

doubledog;

}too;

  DATEmax;

  则语句printf("

%d"

sizeof(structdate)+sizeof(max));

的执行结果是:

___52____

DATE是一个union,变量公用空间.里面最大的变量类型是int[5],占用20个字节.所以它的大小是20

  data是一个struct,每个变量分开占用空间.依次为int4+DATE20+double8=32.

  所以结果是20+32=52.

  当然...在某些16位编辑器下,int可能是2字节,那么结果是int2+DATE10+double8=20

  10、队列和栈有什么区别

  队列先进先出,栈后进先出

  11、写出下列代码的输出内容

  intinc(inta)

  return(++a);

  intmulti(int*a,int*b,int*c)

  return(*c=*a**b);

  typedefint(FUNC1)(intin);

  typedefint(FUNC2)(int*,int*,int*);

  voidshow(FUNC2fun,intarg1,int*arg2)

  INCp=&

inc;

  inttemp=p(arg1);

  fun(&

temp,&

arg1,arg2);

%d\n"

*arg2);

  inta;

  show(multi,10,&

a);

答:

110

12、请找出下面代码中的所以错误说明:

以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 以下是引用片段:

  1、#include"

string.h"

  2、main()

  3、{

  4、char*src="

hello,world"

;

  5、char*dest=NULL;

  6、intlen=strlen(src);

  7、dest=(char*)malloc(len);

  8、char*d=dest;

  9、char*s=src[len];

  10、while(len--!

=0)

  11、d++=s--;

  12、printf("

%s"

dest);

  13、return0;

  14、}

  方法1:

  intmain()

  char*src="

  intlen=strlen(src);

  char*dest=(char*)malloc(len+1);

//要为\0分配一个空间

  char*d=dest;

  char*s=&

src[len-1];

//指向最后一个字符

while(len--!

=0)  

*d++=*s--;

  *d=0;

//尾部要加\0  printf("

%s\n"

  free(dest);

//使用完,应当释放空间,以免造成内存汇泄露

  方法2:

  charstr[]="

  intlen=strlen(str);

  chart;

  for(inti=0;

i

  t=str;

  str=str[len-i-1];

str[len-i-1]=t;

str);

1.-1,2,7,28,,126请问28和126中间那个数是什么为什么

  第一题的答案应该是4^3-1=63

  规律是n^3-1(当n为偶数0,2,4)n^3+1(当n为奇数1,3,5)

  答案:

63

  2.用两个栈实现一个队列的功能要求给出算法和思路!

  设2个栈为A,B,一开始均为空.

  入队:

  将新元素push入栈A;

  出队:

  

(1)判断栈B是否为空;

  

(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;

  (3)将栈B的栈顶元素pop出;

  这样实现的队列入队和出队的平摊复杂度都还是O

(1),比上面的几种方法要好。

3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么

  函数名:

atol

  功能:

把字符串转换成长整型数

  用法:

longatol(constchar*nptr);

  程序例:

  intmain(void)

  longl;

  char*str="

98765432"

  l=atol(lstr);

string=%sinteger=%ld\n"

str,l);

  return(0);

  13.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现

  c用宏定义,c++用inline

  14.直接链接两个信令点的一组链路称作什么

  PPP点到点连接

  15.接入网用的是什么接口V5接口 

  16.voip都用了那些协议

H.323协议簇、SIP协议、Skype协议、H.248和MGCP协议 

  17.软件测试都有那些种类

  黑盒:

针对系统功能的测试

  白合:

测试函数功能,各函数接口

  18.确定模块的功能和模块的接口是在软件设计的那个队段完成的

  概要设计阶段

  19.

  enumstring

  {x1,x2,x3=10,x4,x5,}x;

  问x=0x801005,0x8010f4;

  20.

  unsignedchar*p1;

  unsignedlong*p2;

  p1=(unsignedchar*)0x801000;

  p2=(unsignedlong*)0x810000;

  请问p1+5=;

  p2+5=;

  选择题:

  21.Ethternet链接到Internet用到以下那个协议

  A.HDLC;

B.ARP;

C.UDP;

D.TCP;

E.ID

  22.属于网络层协议的是:

  A.TCP;

B.IP;

C.ICMP;

D.X.25

  23.Windows消息调度机制是:

 A.指令队列;

B.指令堆栈;

C.消息队列;

D.消息堆栈;

  24.

  unsignedshorthash(unsignedshortkey)

  return(key>

>

)%256

  请问hash(16),hash(256)的值分别是:

  A.1.16;

B.8.32;

C.4.16;

D.1.32

  找错题:

  25.请问下面程序有什么错误?

inta[60][250][1000],i,j,k;

for(k=0;

k<

=1000;

k++)

for(j=0;

j<

250;

j++)

for(i=0;

i<

60;

i++)

a[j][k]=0;

把循环语句内外换一下

26.

#defineMax_CB500

voidLmiQueryCSmd(StructMSgCB*pmsg)

{

unsignedcharucCmdNum;

......

for(ucCmdNum=0;

ucCmdNum<

Max_CB;

ucCmdNum++)

......;

}

死循环,unsignedint的取值范围是0~255

27.以下是求一个数的平方的程序,请找出错误:

#defineSQUARE(a)((a)*(a))

inta=5;

intb;

b=SQUARE(a++);

答:

结果与编译器相关,得到的可能不是平方值.

28.

typedefunsignedcharBYTE

intexamply_fun(BYTEgt_len;

BYTE*gt_code)

 

BYTE*gt_buf;

gt_buf=(BYTE*)MALLOC(Max_GT_Length);

if(gt_len>

Max_GT_Length)

returnGT_Length_ERROR;

 

}

.......

问答题:

29.IPPhone的原理是什么?

IP电话(又称IPPHONE或VoIP)是建立在IP技术上的分组化、数字化传输技术,其基本原理是:

通过语音压缩算法对语音数据进行压缩编码处理,然后把这些语音数据按IP等相关协议进行打包,经过IP网络把数据包传输到接收地,再把这些语音数据包串起来,经过解码解压处理后,恢复成原来的语音信号,从而达到由IP网络传送语音的目的。

30.TCP/IP通信建立的过程怎样,端口有什么作用?

三次握手,确定是哪个应用程序使用该协议

31.1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?

1号信令接续慢,但是稳定,可靠。

7号信令的特点是:

信令速度快,具有提供大量信令的潜力,具有改变和增加信令的灵活性,便于开放新业务,在通话时可以随意处理信令,成本低。

目前得到广泛应用。

32.列举5种以上的电话新业务

如“闹钟服务”、“免干扰服务”、“热线服务”、“转移呼叫”、“遇忙回叫”、“缺席用户服务”、“追查恶意呼叫”、“三方通话”、“会议电话”、“呼出限制”、“来电显示”、“虚拟网电话”等

结果与编译器相关,得到的可能不是平方值.

一、请填写BOOL,float,指针变量与“零值”比较的if语句。

(10分)

请写出BOOLflag与“零值”比较的if语句。

(3分)

标准答案:

if(flag)

if(!

flag)

如下写法均属不良风格,不得分。

if(flag==TRUE) 

if(flag==1) 

if(flag==FALSE)

if(flag==0)

请写出floatx与“零值”比较的if语句。

(4分)

标准答案示例:

constfloatEPSINON=0.00001;

if((x>

=-EPSINON)&

&

(x<

=EPSINON)

不可将浮点变量用“==”或“!

=”与数字比较,应该设法转化成“>

=”或“<

=”此类形式。

如下是错误的写法,不得分。

if(x==0.0) 

if(x!

=0.0) 

请写出char*p与“零值”比较的if语句。

if(p==NULL)

if(p!

=NULL)

if(p==0)

=0) 

if(p)

if(!

) 

二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)

charstr[]=“Hello”;

char 

*p=str;

int 

n=10;

请计算

sizeof(str)=6 

(2分)

sizeof(p)= 

sizeof(n)= 

voidFunc(charstr[100])

{

sizeof(str)= 

void*p=malloc(100);

sizeof(p)=4 

三、简答题(25分)

1、头文件中的ifndef/define/endif干什么用?

(5分)

防止该头文件被重复引用。

2、#include<

filename.h>

和#include“filename.h”有什么区别?

对于#include<

,编译器从标准库路径开始搜索filename.h

对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h

3、const有什么用途?

(请至少说明两种)(5分)

(1)可以定义const常量

(2)const可以修饰函数的参数、返回值,甚至函数的定义体。

被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?

C++语言支持函数重载,C语言不支持函数重载。

函数被C++编译后在库中的名字与C语言的不同。

假设某个函数的原型为:

voidfoo(intx,inty);

该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。

C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for循环的优缺点(5分)

for(i=0;

i<

N;

i++)

if(condition)

DoSomething();

else

DoOtherthing();

优点:

程序简洁

缺点:

多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

for(i=0;

循环的效率高

程序不简洁

c/c++经典面试试题及标准答案

四、有关内存的思考题(每小题5分,共20分)

voidGetMemory(char*p)

p=(char*)malloc(100);

voidTest(void)

char*str=NULL;

GetMemory(str);

strcpy(str,"

helloworld"

);

printf(str);

请问运行Test函数会有什么样的结果?

程序崩溃。

因为GetMemory并不能传递动态内存,

Test函数中的str一直都是NULL。

将使程序崩溃。

char*GetMemory(void)

charp[]="

returnp;

voidTest(void)

str=GetMemory();

可能是乱码。

因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原先的内容已经被清除,新内容不可知。

voidGetMemory2(char**p,intnum)

*p=(char*)malloc(num);

GetMemory(&

str,100);

hello"

(1)能够输出hello

(2)内存泄漏

char*str=(char*)malloc(100);

strcpy(str,“hello”);

free(str);

if(str!

{

strcpy(str,“world”);

篡改动态内存区的内容,后果难以预料,非常危险。

因为free(str);

之后,str成为野指针,

if(str!

=NULL)语句不起作用。

五、编写strcpy函数(10分)

已知strcpy函数的原型是

char*strcpy(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数strcpy

assert((strDest!

=NULL)&

(strSrc!

=NULL));

//2分

char*address=strDest;

while((*strDest++=*strSrc++)!

=‘\0’) 

NULL;

returnaddress;

(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?

为了实现链式表达式。

例如 

intlength=strlen(strcpy(strDest,“helloworld”));

六、编写类String的构造函数、析构函数和赋值函数(25分)

已知类String的原型为:

classString

public:

String(constchar*str=NULL);

//普通构造函数

String(constString&

other);

//拷贝构造函数

~String(void);

//析构函数

String&

operate=(constString&

//赋值函数

private:

char 

*m_data;

//用于保存字符串

};

请编写String的上

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1