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

上传人:b****5 文档编号:7211939 上传时间:2023-01-21 格式:DOCX 页数:41 大小:26.39KB
下载 相关 举报
CC语言笔试面试题目含答案.docx_第1页
第1页 / 共41页
CC语言笔试面试题目含答案.docx_第2页
第2页 / 共41页
CC语言笔试面试题目含答案.docx_第3页
第3页 / 共41页
CC语言笔试面试题目含答案.docx_第4页
第4页 / 共41页
CC语言笔试面试题目含答案.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

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

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

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

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

C语言试题

一:

单项选择题

1.

voidExample(characHello[])

{

printf("%d",sizeof(acHello));

return;

}

voidmain()

{

characHello[]="hello";

Example(acHello);

return;

}

的输出是()

A4B5C6D不确定

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);d.%d.%d",ulLocIpAddr>>24,

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

returnszIpAddr;

}

下面描述正确的是():

A、数组szIpAddr空间不够;

B、函数返回局部数组szIpAddr变量地址;

C、输出的IP地址次序颠倒;

5.

#defineOK0

#defineERR1

#defineERROR(-1)

#defineBUFFER_SIZE256

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,"HelloWorld!

\r\n");

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("%u+%u",a,b);

printf("=%u\n",*p);

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("%lu",ulGlobal);

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("%d",g);

}

下面说法正确的是():

A对g进行类型转换导致函数调用时写内存越界;

B对e、f进行类型转换导致函数调用时写内存越界;

C函数调用时不能改变g的值。

10、voidmain(void)

{

unsignedchara=200;

unsignedcharb=100;

unsignedcharc=0;

c=a+b;

printf("%d%d",a+b,c);

}

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

A300300

B4444

C30044

D44300

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

#include<>

intmain()

{

charcA;

unsignedcharucB;

unsignedshortusC;

cA=128;

ucB=128;

usC=cA+ucB;

printf("0x%x",usC);

usC=cA+(short)ucB;

printf("0x%x",usC);

usC=(unsignedchar)cA+ucB;

printf("0x%x",usC);

usC=cA+(char)ucB;

printf("0x%x",usC);

return0;

}

输出结果是()

A)0x00x00x1000xff00

B)0x00x1000x1000xff00

C)0x00x1000x1000x0

D)0x00x00x1000x0

(c)中的c的数据类型可以是char、long、float、unsigned、bool.()

A.正确B.错误

Example()

{

inti;

characNew[20];

for(i=0;i<10;i++)

{

acNew[i]='0';

}

printf("%d\n",strlen(acNew));

return;

}

的输出为()

A0B10C11D不确定

14.如下程序用于把"blue"字符串返回:

char*GetBlue(void)

{

char*pcColor;

char*pcNewColor;

pcColor="blue";

pcNewColor=(char*)malloc(strlen(pcColor));

if(NULL==pcNewColor)

{

returnNULL;

}

strcpy(pcNewColor,pcColor);

returnpcNewColor;

}

下面描述正确的是:

A、字符串“blue”存放在栈内;

B、函数GetBlue返回局部变量地址;

C、内存空间分配长度不够,strcpy函数拷贝越界;

15.给出以下定义:

characX[]="abcdefg";

characY[]={'a','b','c','d','e','f','g'};

则正确的叙述为()

A)数组acX和数组acY等价B)数组acX和数组acY的长度相同

C)数组acX的长度大于数组acY的长度D)数组acX的长度小于数组Y的长度

16.有以下程序段

characArr[]="ABCDE";

char*pcPtr;

for(pcPtr=acArr;pcPtr

{

printf("%s\n",pcPtr);

}

return;

输出结果是()

A)ABCDB)AC)ED)ABCDE

BDBCDE

CCCDE

DBDE

EAE

Example()

{

inti;

characNew[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

for(i=0;i<10;i++)

{

acNew[i]='0';

}

printf("%d\n",strlen(acNew));

return;

}

的输出为:

()

A0B10C11D不确定

18.如下程序用于把"blue"字符串打印出来:

voidPrintBlue()

{

charpcBlue[]={'b','l','u','e'};

printf("%s",pcBlue);

return;

}

下面描述正确的是():

A、pcBlue数组初始化时没有字符串结束符;

B、数组pcBlue定义时必须指明长度;

19.如下代码实现中,FuncA为每毫秒定时执行的函数,在该函数中,需要实现每TIME_INTERVAL毫秒执行一次DO_Something()的操作。

请指出段代码中的错误:

#defineULONGunsignedlong

#defineTIME_INTERVAL200

voidDoSomething(void)

{

/*....*/

return;

}

voidFuncA()

{

staticULONGulPreCall=0;

ULONGulNowInMsHigh=0;

ULONGulNowInMsLow=0;

(VOID)VOS_Tm_Now(&ulNowInMsHigh,&ulNowInMsLow);/*获取当前的时间,以毫秒为单位,用64bits表示,ulNowInMsHigh为高32位,ulNowInMsLow为低32位*/

if((0==ulPreCall)||(ulNowInMsLow>=(ulPreCall+TIME_INTERVAL)))

{

ulPreCall=ulNowInMsLow;

}

else

{

return;

}

DoSomething();

return;

}

A、函数FUNC_A第一次被调用时,不执行Do_Something()操作;

B、函数FUNC_A功能在一段时间后失效,因为ulNowInMsLow溢出翻转;

C、ulPreCall不应该定义为静态变量;

20、

#defineNULL0

#defineMEM_OK0

#defineMEM_ERR1

enumENUM_STAT_ITEM

{

STAT_ITEM0,

STAT_ITEM1,

STAT_ITEM_BUTT

};

typedefstructtag_PERM_COUNT_STAT_INFO

{

unsignedshortstat_item;

unsignedshortnumber;

}_SPermCountStatInfo;

_SPermCountStatInfopcsi[STAT_ITEM_BUTT]=

{

{STAT_ITEM0,16000},

{STAT_ITEM1,50000},

}

unsignedlong*pulStatDataBuffer=NULL;

unsignedshortAllocPermMemory(void)

{

unsignedshortusBufferSize=0;

unsignedshortusLoop=0;

for(usLoop=0;usLoop

{

usBufferSize+=pcsi[usLoop].number;

}

pulStatDataBuffer=(unsignedlong*)malloc(sizeof(unsignedlong)*usBufferSize);

if(NULL==pulStatDataBuffer)

{

returnMEM_ERR;

}

returnMEM_OK;

}

下面说法正确的是():

Aunsignedshort类型不能表示循环体中将16000与50000相加的和66000

B数组pcsi的number域是unsignedshort类型,不能表示50000这么大的数字

C循环条件应该改为usLoop<=STAT_ITEM_BUTT

21.请指出下面这段代码中的错误:

unsignedlongFuncB(unsignedlongulCount)

{

unsignedlongulSum=0;

while(0<=ulCount)

{

ulSum+=ulCount;

ulCount--;

}

returnulSum;

}

voidtest(void)

{

unsignedlongulTotal=0;

ulTotal=FuncB(10);

printf("%lu",ulTotal);

}

下面描述正确的是():

A、while循环判断始终为真;

B、test打印输出55;

C、循环体内在执行2的32次方后,ulSum开始溢出翻转;

22.请指出下面程序的错误:

voidTest(void)

{

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

if(NULL==szStr)

{

return;

}

strcpy(szStr,"hello");

free(szStr);

if(NULL!

=szStr)

{

strcpy(szStr,"world");

printf("%s",szStr);

}

return;

}

下面描述正确的是()

A、strcpy没有将结尾符拷贝到szStr中

B、对释放空间的指针进行拷贝操作

C、szStr被free后,szStr即为空。

23.#defineBUFFER_SIZE256

voidGetMemory(char**ppszBuf)

{

if(NULL==ppszBuf)

{

ASSERT(0);

return;

}

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

return;

}

voidTest(void)

{

char*pszBuf=NULL;

GetMemory(&pszBuf); 

strcpy(pszBuf,"helloworld\r\n");

printf("%s",pszBuf);

free(pszBuf);

return;

}

下面说法正确的是():

A、pszBuf的值永远为NULL;

B、malloc内存后没有判断是否成功;

C、strcpy拷贝越界;

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

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

()

A、不添,不添,不添

B、free(pMsg);,free(ptmpMsg);,不添

C、free(pMsg);,free(ptmpMsg);,free(ptmpMsg);

D、不添,free(pMsg);,free(ptmpMsg);

E、free(pMsg);,free(pMsg);,free(ptmpMsg);

F、不添,不添,free(ptmpMsg);

#defineCOMM_MSG_LEN100

char*GetMessageBuffer(intmalloc_len)

{

char*ptr=NULL;

ptr=(char*)malloc(malloc_len)

returnptr;

}

intFuncTest(void)

{

intmalloc_len=COMM_MSG_LEN;

char*pMsg=NULL;

char*ptmpMsg=NULL;

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("%d,%d\n",*pulPtr,*(pulPtr+2));

A)8,10B)6,8C)7,9D)6,10

30.structstu

{

intnum;

charname[10];

intage;

};

voidFun(structstu*p)

{

printf("%s\n",(*p).name);

return;

}

voidmain()

{

structstustudents[3]={{9801,"Zhang",20},

{9802,"Wang",19},

{9803,"Zhao",18}};

Fun(students+2);

return;

}

输出结果是()

A)ZhangB)ZhaoC)WangD)18

31.以下程序运行后,输出结果是()

voidmain()

{

char*szStr="abcde";

szStr+=2;

printf("%lu\n",szStr);

return;

}

AcdeB字符c的ASCLL码值

C"abcde"这个常串中字符c所在的地址D出错

32.设有以下宏定义:

#defineN3

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

则执行语句:

z=2*(N+Y(5+1));后,z的值为()

A)出错B)42C)48D)54

33、有如下宏定义和结构定义

#defineMAX_SIZEA+B

struct_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)20B)15C)11

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

当前位置:首页 > 初中教育 > 数学

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

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