CC++语言笔试面试题目含答案1.docx

上传人:b****1 文档编号:10179197 上传时间:2023-05-24 格式:DOCX 页数:24 大小:24.34KB
下载 相关 举报
CC++语言笔试面试题目含答案1.docx_第1页
第1页 / 共24页
CC++语言笔试面试题目含答案1.docx_第2页
第2页 / 共24页
CC++语言笔试面试题目含答案1.docx_第3页
第3页 / 共24页
CC++语言笔试面试题目含答案1.docx_第4页
第4页 / 共24页
CC++语言笔试面试题目含答案1.docx_第5页
第5页 / 共24页
CC++语言笔试面试题目含答案1.docx_第6页
第6页 / 共24页
CC++语言笔试面试题目含答案1.docx_第7页
第7页 / 共24页
CC++语言笔试面试题目含答案1.docx_第8页
第8页 / 共24页
CC++语言笔试面试题目含答案1.docx_第9页
第9页 / 共24页
CC++语言笔试面试题目含答案1.docx_第10页
第10页 / 共24页
CC++语言笔试面试题目含答案1.docx_第11页
第11页 / 共24页
CC++语言笔试面试题目含答案1.docx_第12页
第12页 / 共24页
CC++语言笔试面试题目含答案1.docx_第13页
第13页 / 共24页
CC++语言笔试面试题目含答案1.docx_第14页
第14页 / 共24页
CC++语言笔试面试题目含答案1.docx_第15页
第15页 / 共24页
CC++语言笔试面试题目含答案1.docx_第16页
第16页 / 共24页
CC++语言笔试面试题目含答案1.docx_第17页
第17页 / 共24页
CC++语言笔试面试题目含答案1.docx_第18页
第18页 / 共24页
CC++语言笔试面试题目含答案1.docx_第19页
第19页 / 共24页
CC++语言笔试面试题目含答案1.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

CC++语言笔试面试题目含答案1.docx

《CC++语言笔试面试题目含答案1.docx》由会员分享,可在线阅读,更多相关《CC++语言笔试面试题目含答案1.docx(24页珍藏版)》请在冰点文库上搜索。

CC++语言笔试面试题目含答案1.docx

CC++语言笔试面试题目含答案1

C_C++语言笔试面试题目含答案

C语言试题一:

单项选择题

1.

voidExample(characHello){

printf(\  return;}

voidmain(){

characHello=\  Example(acHello);  return;}

的输出是()

A4  B5  C6  D不确定

2.网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作。

()  A.正确B.错误3.int*(*ptr)();

则以下叙述中正确的是()  A)ptr是指向一维组数的指针变量  B)ptr是指向int型数据的指针变量

C)ptr是指向函数的指针,该函数返回一个int型数据

D)ptr是指向函数的指针,该函数的返回值是指向int型数据的指针4.此函数实现把32位IP地址(网络序)以字符串的方式打印出来:

char*IpAddr2Str(unsignedlongulIpAddr){

charszIpAddr[32];

unsignedlongulLocIpAddr=ntohl(ulIpAddr);//把网络序转话为主机序  (void)VOS_sprintf(szIpAddr,\

 (ulLocIpAddr>>16)&0xff,(ulLocIpAddr>>8)&0xff,ulLocIpAddr&0xff);

returnszIpAddr;}

下面描述正确的是:

A、数组szIpAddr空间不够;

B、函数返回局部数组szIpAddr变量地址;C、输出的IP地址次序颠倒;5.

#defineOK  0#defineERR  1

#defineERROR  (-1)#defineBUFFER_SIZE  256

char*GetMemory(unsignedlongulSize){

char*pcBuf=NULL;

pcBuf=(char*)malloc(ulSize);  if(NULL==pcBuf)  {

returnERROR;  }

returnpcBuf;}

voidTest(void){

char*pszBuf=NULL;

pszBuf=GetMemory(BUFFER_SIZE);  if(NULL!

=pszBuf)  {

strcpy(pszBuf,\  printf(pszBuf);  free(pszBuf);  }

return;}

如下描述正确的是:

A、pszBuf指向的内存不能超过255

B、GetMemory函数的异常分支返回了-1,是一个非法地址C、GetMemory中异常分支没有释放空间;

D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放

6、#include\

unsignedshort*Sum(unsignedchara,unsignedcharb){

unsignedshorts=0;

s=a+b;  return&s;}

intmain(){

unsignedshort*p=NULL;unsignedchara=1,b=2;

p=Sum(a,b);

printf(\printf(\return0;}

程序执行结果是

+2=0+2=3+2=NULLD.不可预测7、设有如下定义:

BOOLgStatusA=FALSE;BOOLgStatusB=TRUE;intgVarA=100;intgVarB=100;

则执行main函数后gVarA和gVarB的值分别为(

BOOLCheckA(){

if(gStatusA){

gVarA++;}else{

gVarA--;}

returngStatusA;}

BOOLCheckB(){

if(gStatusB){

gVarB++;}else{

gVarB--;

)  }

returngStatusB;}

intmain(intargc,char*argv){

if(CheckA()&&CheckB())  {

printf(“StatusOK”);  }  return0;}

A,99和100B,99和101C99和99D101和99

8.下面的代码中,函数Test执行完毕后,希望输出无符号长整型的1。

voidVarInit(unsignedchar*pucArg){

*pucArg=1;  return;}

voidTest(){

unsignedlongulGlobal;  VarInit(&ulGlobal);  printf(\  return;}

下面描述正确的是:

A.给VarInit()函数传递的参数类型错误输出格式错误

C.传给VarInit()中参数pucArg的值为空指针9、

voidAddFunc(unsignedinta,unsignedintb,unsignedint*c){

*c=a+b;}

voidmain(void){

unsignedchare=200;unsignedcharf=100;unsignedcharg=0;

AddFunc((unsignedint)e,(unsignedint)f,(unsignedint*)&g);

printf(\}

下面说法正确的是:

A对g进行类型转换导致函数调用时写内存越界;B对e、f进行类型转换导致函数调用时写内存越界;C函数调用时不能改变g的值。

10、voidmain(void){

unsignedchara=200;  unsignedcharb=100;  unsignedcharc=0;  c=a+b;

printf(\}

下列程序的执行结果为()A300300B4444C30044D44300

11、在X86,VC++环境下,有下列程序#include

intmain(){

charcA;

unsignedcharucB;unsignedshortusC;

cA=128;ucB=128;

usC=cA+ucB;printf(\

usC=cA+(short)ucB;printf(\

usC=(unsignedchar)cA+ucB;printf(\

usC=cA+(char)ucB;printf(\

return0;

{

ASSERT(0);  return;  }

*ppszBuf=(char*)malloc(BUFFER_SIZE);  return;}

voidTest(void){

char*pszBuf=NULL;  GetMemory(&pszBuf);

strcpy(pszBuf,\  printf(\  free(pszBuf);  return;}

下面说法正确的是:

A、pszBuf的值永远为NULL;B、malloc内存后没有判断是否成功;C、strcpy拷贝越界;

D、GetMemory无法将申请的内存地址传递给pszBuf;

24、请问下面函数中1、2、3应该填入什么语句才合理?

pMsg=GetMessageBuffer(malloc_len);if(NULL==pMsg){

____1___returnERROR;}

fillMessage(pMsg);sendMessage(pMsg);

ptmpMsg=GetMessageBuffer(malloc_len);if(NULL==ptmpMsg){

____2___returnERROR;}

FillMessage(ptmpMsg);SendMessage(ptmpMsg);free(pMsg);____3___returnOK;}

25.以下叙述中不正确的是()

A)在不同的函数中可以使用相同名字的变量  B)函数中的形式参数是在栈中保存

C)在一个函数内定义的变量只在本函数范围内有效

D)在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)

26.全局变量可以定义在被多个.C文件包含着的头文件中。

()A.正确B.错误

27.在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。

如果临时变量占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。

()A.正确B.错误

28.局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。

()A.正确B.错误29.设有如下定义:

unsignedlongpulArray={6,7,8,9,10};  unsignedlong*pulPtr;  则下列程序段的输出结果为()  pulPtr=pulArray;  *(pulPtr+2)+=2;

printf(\

A)8,10  B)6,8  C)7,9  D)6,1030.structstu  {

int  num;  char  name[10];  int  age;  };

voidFun(structstu*p)  {

printf(\  return;  }

voidmain()  {

structstustudents[3]={{9801,\    {9802,\    {9803,\  Fun(students+2);  return;  }

输出结果是()

A)Zhang  B)Zhao  C)Wang  D)1831.以下程序运行后,输出结果是()voidmain(){

char*szStr=\  szStr+=2;

printf(\  return;}

Acde    B字符c的ASCLL码值C\这个常串中字符c所在的地址  D出错32.设有以下宏定义:

#define  N  3

#define  Y(n)  ((N+1)*n)/*这种定义在编程规范中是不允许的,如果你在实际中这么用了,请自打手心三下*/

则执行语句:

z=2*(N+Y(5+1));后,z的值为()  A)出错  B)42  C)48  D)5433、有如下宏定义和结构定义#defineMAX_SIZEA+Bstruct_Record_Struct{

unsignedcharEnv_Alarm_ID:

4;

unsignedcharpara1:

2;  unsignedcharstate;  unsignedcharavail:

1;}*Env_Alarm_Record;

pointer=(struct_Record_Struct*)malloc(sizeof(struct_Record_Struct)*MAX_SIZE);

当A=2,B=3时pointer分配(  )个字节的空间。

注意:

机器是按照4字节对齐A)20  B)15C)11D)9

34、请问下面题目中a,b,c输出值为多少?

A、10,210,30B、100,210,300C、110,210,310D、100,210,30E、110,200,30

#include

#defineFUNC(A)  A++;\\   A*=10;

intmain(intargc,char*argv){

inta=10;intb=20;intc=30;

if(a>10)  FUNC(a);

if(b>=20)  FUNC(b);

if(c>30){

FUNC(c);}

printf(\return0;}

35.在X86下,有下列程序  #include  voidmain()  {

union  {

int  k;  char  i[2];  }*s,a;  s=&a;

s->i[0]=0x39;  s->i[1]=0x38;  printf(\  }

输出结果是()

A)3839  B)3938  C)380039  D)36、#defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){

if(NULL==ppMem)  {

return-1;  }

if(iLenreturn0;  }

elseif(iLen*ppMem=malloc(iLen);  returniLen;  }  else  {

*ppMem=malloc(MAX_MEM_SIZE);  returnMAX_MEM_SIZE;  }  }

voidmain(){

char*pMyMem;  inti;  intj;

i=GetMem(i,(void**)&pMyMem);  if(NULL!

=pMyMem)

不可预知

{

for(j=0;jpMyMem[j]=0;  }  }}

下面说法正确的有;

A、因为pMyMem未初始化,main函数中的GetMem可能会返回-1;

B、因为i未初始化,main函数中GetMem可能会返回比MAX_MEM_SIZE大的值;C、因为pMyMem未初始化,for循环内的赋值操作可能会导致写内存异常;D、无论pMyMem,i,j为何值时,main函数内都不会出现写内存异常;37、#defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){

if(iLenreturn-1;  }

elseif(0==iLen)  {

return0;  }

elseif(iLen*ppMem=malloc(iLen);  returniLen;  }  else  {

*ppMem=malloc(MAX_MEM_SIZE);  returnMAX_MEM_SIZE;  }  }

voidmain(){

char*pMyMem;  inti,k;  unsignedintj;

j=GetMem(i,&pMyMem);  if(j>0)  {

for(k=0;kpMyMem[k]=0;  }  }}

下面说法正确的有:

A、只要将pMyMem初始化为NULL,可以避免main函数内的for循环出现写内存异常;B、虽然i和pMyMem均未初始化,只要将if(j>0)改为if((0C、虽然i和pMyMem均未初始化,只要将main函数内的for循环比较k二:

多项选择题

1.定义结构体时有下面几种说法,请指出正确的(多选):

___

A、结构体中的每个部分,最好进行四字节对齐;B、结构体的总长度最好是四字节对齐;C、结构中成员的存放不用考虑字节对齐情况;

2.0x12345678在采用BigEndian中内存的排列顺序是______,在采用LittleEndian内存中的排列顺序是______.

(答案从左到右内存地址依次增加)

345678    127856  563412    7812343.下面程序期望输出str=helloworld:

char*GetStr(char*p){

p=\  returnp;}

voidmain(){

char*str=NULL;

if(NULL!

=GetStr(str))  {

printf(\

}  return;}

下面描述正确的是:

A、str始终为NULL;

B、函数GetStr返回值始终不为空;

C、该程序无法得到预期的输出结果,因为GetStr函数无法将字符串地址带给实参;

4、下面程序期望得到g_Variable的值,并打印出来。

unsignedcharg_Variable;

voidGetGlobalAddr(unsignedchar*p){

p=&g_Variable;}

voidmain(){

unsignedchar*temp=NULL_PTR;

GetGlobalAddr(temp);

printf(\  return;}

下面说法正确的是:

A对p强制类型转换错误;

B调用函数时,局部变量p存在于栈中;Cp值的改变不会影响temp;

D调用函数后,temp的值被改变为g_Variable的地址。

5、

#defineMAX_LEN2

UC*ConvertCode(UC*pByte,UCnum){

ULi=0;

UCstrTemp[MAX_LEN];

if(NULL==pByte)  {

returnNULL;  }

memcpy(strTemp,pByte,MAX_LEN);  return(UC*)strTemp;

}

voidmain(void){

UCstr[MAX_LEN];  UC*p;

str[0]=0x12;  str[1]=0x34;

p=ConvertCode(str,sizeof(str));  printf(\  return;}

下面查错的说明中,描述正确的是:

A、输入参数p_byte为空指针B、函数ConvertCode返回值没有判断

C、没有判断p_byte指向空间和MAX_LEN的大小D、返回局部变量地址

6.下列定义正确的有(多选):

()A:

char*pcPtr=\B:

charpc[4]=\C:

charpc=\D:

charpc='abcd';

E:

charpc={'a','b','c','d','\\0'};F:

charpc='a''b''c''d';7.

voidGetMemory(char**ppcChar,intiLength){

if(NULL==ppcChar)  {

return;  }

*ppcChar=(char*)malloc(iLength);  return;}

voidmain(intargc,char*argv){

char*szStr=NULL;  intiLen=100;

GetMemory(&szStr,iLen);

if(NULL!

=szStr)  {

strcpy(szStr,\  printf(szStr);  }  return;}

下面描述正确的是():

A、iLength应该判断是否大于0;B、程序中使用魔鬼数字;

C、当szStr不为空时,没有释放分配的内存;D、printf(szStr)无法输出字符串

8.请指出下面程序问题#defineMAX_LEN254

unsignedchar  Array[MAX_LEN];intTest(void){

inti;

for(i=0;iArray[i]=i;  }  return;}

下面说法正确的是:

A、i=MAX_LEN时,数组越界B、argv参数形式错误C、i=MAX_LEN时,赋值溢出D、return无返回值

9、#include#include#include#defineMAX_MSG_LEN2048BOOL  MaxMsgFlag=FALSE;char*GetBuffer(intmsg_len){

char*ptr=NULL;  intlen=msg_len;  ptr=(char*)malloc(len);  if(NULL==ptr)

{

returnNULL;  }

returnptr;}

intmain(intargc,char*argv){

intmsg_len;  char*pMsg;

if(TRUE==MaxMsgFlag)  {

msg_len=MAX_MSG_LEN;  }

pMsg=getBuffer(msg_len);  if(NULL!

=pMsg)  {

strcpy(pMsg,\  printf(\  free(pMsg);  }

return0;}

上面的程序存在问题,下面描述正确的是A、函数getBuffer应该判断入参msg_len是否大于0。

B、按照编程规范,函数main中pMsg应该赋初值C、函数main中msg_len没有赋初值

三:

填空题

1.

char*pcColor=\characColor=\strlen(pcColor)=_____strlen(acColor)=_____sizeof(pcColor)=_____sizeof(acColor)=_____2.

charstr=\char*p=str;intn=1000;请计算

sizeof(str)=____________

sizeof(p)=______________  sizeof(n)=______________*pucCharArray[10][10];  typede

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2