C_C++语言笔试面试题目含答案.doc_第1页
C_C++语言笔试面试题目含答案.doc_第2页
C_C++语言笔试面试题目含答案.doc_第3页
C_C++语言笔试面试题目含答案.doc_第4页
C_C++语言笔试面试题目含答案.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言试题一:单项选择题1. void Example(char acHello) printf(%d, sizeof(acHello); return; void main() char acHello = hello; Example(acHello); return; 的输出是( )A 4 B 5 C 6 D不确定2.网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。( ) A. 正确 B.错误3. int *(*ptr)(); 则以下叙述中正确的是( ) A) ptr是指向一维组数的指针变量 B) ptr是指向int型数据的指针变量 C) ptr是指向函数的指针,该函数返回一个int型数据 D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针4.此函数实现把32位IP地址(网络序)以字符串的方式打印出来:char *IpAddr2Str(unsigned long ulIpAddr) char szIpAddr32; unsigned long ulLocIpAddr = ntohl(ulIpAddr);/把网络序转话为主机序 (void)VOS_sprintf(szIpAddr, %d.%d.%d.%d, ulLocIpAddr 24, (ulLocIpAddr 16) & 0xff, (ulLocIpAddr 8) & 0xff, ulLocIpAddr & 0xff); return szIpAddr;下面描述正确的是():A、数组szIpAddr空间不够;B、函数返回局部数组szIpAddr变量地址;C、输出的IP地址次序颠倒;5.#define OK 0#define ERR 1#define ERROR (-1)#define BUFFER_SIZE 256char *GetMemory(unsigned long ulSize) char *pcBuf = NULL; pcBuf = (char *)malloc(ulSize); if(NULL = pcBuf) return ERROR; return pcBuf;void Test(void) char *pszBuf = NULL; pszBuf = GetMemory(BUFFER_SIZE); if(NULL != pszBuf) strcpy(pszBuf, Hello World!rn); printf(pszBuf); free(pszBuf); return;如下描述正确的是:A、pszBuf指向的内存不能超过255B、GetMemory函数的异常分支返回了-1,是一个非法地址C、GetMemory中异常分支没有释放空间;D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放6、#include stdio.hunsigned short *Sum(unsigned char a, unsigned char b) unsigned short s = 0; s = a + b; return &s;int main() unsigned short *p = NULL; unsigned char a = 1, b = 2; p = Sum(a, b); printf(%u+%u, a, b); printf(=%un, *p); return 0;程序执行结果是()A.1+2=0 B.1+2=3 C.1+2=NULL D.不可预测7、设有如下定义:BOOL gStatusA = FALSE;BOOL gStatusB = TRUE;int gVarA = 100;int gVarB = 100; 则执行main函数后gVarA和gVarB的值分别为( )BOOL CheckA() if(gStatusA) gVarA+; else gVarA-; return gStatusA;BOOL CheckB() if(gStatusB) gVarB+; else gVarB-; return gStatusB;int main(int argc, char* argv) if(CheckA() & CheckB() ) printf(“Status OK”); return 0;A, 99和100 B, 99和101 C 99和99 D 101和998.下面的代码中,函数Test执行完毕后,希望输出无符号长整型的1。void VarInit(unsigned char *pucArg) *pucArg = 1; return;void Test() unsigned long ulGlobal; VarInit(&ulGlobal); printf(%lu, ulGlobal); return;下面描述正确的是:( )A.给VarInit( )函数传递的参数类型错误B.printf()输出格式错误C.传给VarInit( )中参数pucArg的值为空指针9、void AddFunc (unsigned int a, unsigned int b, unsigned int * c) *c = a + b;void main(void) unsigned char e = 200; unsigned char f = 100; unsigned char g = 0; AddFunc(unsigned int)e,(unsigned int)f,(unsigned int *)&g); printf(%d ,g);下面说法正确的是():A 对g进行类型转换导致函数调用时写内存越界;B 对e、f进行类型转换导致函数调用时写内存越界;C 函数调用时不能改变g的值。10、void main(void) unsigned char a =200; unsigned char b =100; unsigned char c = 0; c=a+b; printf(%d %d,a+b,c);下列程序的执行结果为()A 300 300 B 44 44C 300 44D 44 30011、在X86,VC+6.0环境下,有下列程序#include int main() char cA; unsigned char ucB; unsigned short usC; cA = 128; ucB = 128; usC = cA + ucB; printf(0x%x ,usC); usC = cA + (short)ucB; printf(0x%x ,usC); usC = (unsigned char)cA + ucB; printf(0x%x ,usC); usC = cA + (char)ucB; printf(0x%x ,usC); return 0;输出结果是( ) A) 0x0 0x0 0x100 0xff00 B) 0x0 0x100 0x100 0xff00 C) 0x0 0x100 0x100 0x0 D) 0x0 0x0 0x100 0x012.switch(c)中的c的数据类型可以是char、long、float、unsigned、bool. ( ) A. 正确 B. 错误13.void Example( ) int i; char acNew20; for(i = 0; i 10; i+) acNewi = 0; printf(%dn, strlen(acNew); return; 的输出为( )A 0 B 10 C 11 D不确定14.如下程序用于把blue字符串返回:char *GetBlue(void) char* pcColor ; char* pcNewColor; pcColor = blue; pcNewColor = (char*)malloc(strlen(pcColor); if(NULL = pcNewColor) return NULL; strcpy(pcNewColor, pcColor); return pcNewColor;下面描述正确的是:A、字符串“blue”存放在栈内;B、函数GetBlue返回局部变量地址;C、内存空间分配长度不够,strcpy函数拷贝越界;15.给出以下定义: char acX = abcdefg; char acY = a,b,c,d,e,f,g; 则正确的叙述为( ) A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相同 C) 数组acX的长度大于数组acY的长度 D) 数组acX的长度小于数组Y的长度16.有以下程序段 char acArr= ABCDE; char *pcPtr; for(pcPtr = acArr; pcPtr acArr + 5; pcPtr+) printf(%sn, pcPtr); return; 输出结果是( ) A) ABCD B) A C) E D) ABCDE B D BCDE C C CDE D B DE E A E17.void Example() int i; char acNew20 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; for(i = 0; i = (ulPreCall + TIME_INTERVAL) ) ) ulPreCall = ulNowInMsLow; else return ; DoSomething(); return ;A、函数FUNC_A第一次被调用时,不执行Do_Something()操作;B、函数FUNC_A功能在一段时间后失效,因为ulNowInMsLow溢出翻转;C、ulPreCall不应该定义为静态变量;20、#define NULL 0#define MEM_OK 0#define MEM_ERR 1enum ENUM_STAT_ITEM STAT_ITEM0, STAT_ITEM1, STAT_ITEM_BUTT;typedef struct tag_PERM_COUNT_STAT_INFO unsigned short stat_item ; unsigned short number; _SPermCountStatInfo;_SPermCountStatInfo pcsiSTAT_ITEM_BUTT = STAT_ITEM0, 16000, STAT_ITEM1, 50000 ,unsigned long *pulStatDataBuffer = NULL;unsigned short AllocPermMemory(void) unsigned short usBufferSize = 0; unsigned short usLoop = 0; for(usLoop = 0; usLoop STAT_ITEM_BUTT; usLoop +) usBufferSize += pcsiusLoop.number ; pulStatDataBuffer = (unsigned long*)malloc(sizeof(unsigned long) * usBufferSize); if (NULL = pulStatDataBuffer) return MEM_ERR; return MEM_OK;下面说法正确的是():A unsigned short 类型不能表示循环体中将16000与50000相加的和66000B 数组pcsi的number域是unsigned short类型,不能表示50000这么大的数字C 循环条件应该改为usLoop=STAT_ITEM_BUTT21.请指出下面这段代码中的错误:unsigned long FuncB ( unsigned long ulCount ) unsigned long ulSum = 0 ; while( 0 = ulCount ) ulSum += ulCount ; ulCount-; return ulSum ; void test(void) unsigned long ulTotal = 0; ulTotal=FuncB(10); printf(%lu, ulTotal);下面描述正确的是():A、while循环判断始终为真;B、test打印输出55;C、循环体内在执行2的32次方后,ulSum开始溢出翻转;22.请指出下面程序的错误:void Test(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.#define BUFFER_SIZE 256void GetMemory(char *ppszBuf) if(NULL = ppszBuf) ASSERT(0); return ; *ppszBuf = (char *)malloc(BUFFER_SIZE); return;void Test(void) char *pszBuf=NULL; GetMemory(&pszBuf); strcpy(pszBuf, hello worldrn); 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);#define COMM_MSG_LEN 100char *GetMessageBuffer(int malloc_len) char *ptr=NULL; ptr=(char *)malloc(malloc_len) return ptr;int FuncTest(void) int malloc_len = COMM_MSG_LEN; char *pMsg=NULL; char *ptmpMsg=NULL; pMsg = GetMessageBuffer(malloc_len); if(NULL = pMsg) _1_ return ERROR; fillMessage(pMsg); sendMessage(pMsg); ptmpMsg = GetMessageBuffer(malloc_len); if(NULL = ptmpMsg) _2_ return ERROR; FillMessage(ptmpMsg); SendMessage(ptmpMsg); free(pMsg); _3_ return OK;25.以下叙述中不正确的是( ) A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是在栈中保存 C) 在一个函数内定义的变量只在本函数范围内有效 D) 在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)26.全局变量可以定义在被多个.C文件包含着的头文件中。( ) A. 正确 B. 错误27.在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。如果临时变量占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。( ) A. 正确 B. 错误28.局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。( ) A. 正确 B. 错误29.设有如下定义: unsigned long pulArray = 6, 7, 8, 9, 10; unsigned long *pulPtr; 则下列程序段的输出结果为( ) pulPtr = pulArray; *(pulPtr + 2) += 2; printf (%d,%dn, *pulPtr, *(pulPtr + 2); A)8,10 B)6,8 C)7,9 D)6,1030. struct stu int num; char name10; int age; ; void Fun(struct stu *p) printf(%sn, (*p).name); return; void main() struct stu students3= 9801,Zhang,20, 9802,Wang,19, 9803,Zhao,18 ; Fun(students + 2); return; 输出结果是( ) A) Zhang B)Zhao C) Wang D) 1831.以下程序运行后,输出结果是( )void main( ) char *szStr = abcde; szStr += 2; printf(%lu n,szStr); return;A cde B 字符c的ASCLL码值C abcde这个常串中字符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、有如下宏定义和结构定义 #define MAX_SIZE A+B struct _Record_Struct unsigned char Env_Alarm_ID :4; unsigned char para1 :2; unsigned char state; unsigned char avail:1; * Env_Alarm_Record ;pointer = (struct _Record_Struct *)malloc(sizeof(struct _Record_Struct) * MAX_SIZE) ;当A=2, B=3时pointer分配( )个字节的空间。 注意:机器是按照4字节对齐 A)20 B)15 C)11 D) 934、请问下面题目中a,b,c输出值为多少?( )A、10,210,30 B、100,210,300C、110,210,310D、100,210,30 E、110,200,30#include #define FUNC(A) A+; A *= 10;int main(int argc, char* argv) int a = 10; int b = 20; int c = 30; if(a 10) FUNC(a); if(b = 20) FUNC(b); if(c 30) FUNC(c); printf(a=%d,b=%d,c=%drn,a,b,c); return 0;35.在X86下,有下列程序 #include void main() union int k; char i2; *s,a; s = &a; s-i0 = 0x39; s-i1 = 0x38; printf(%xn, a.k); 输出结果是( ) A) 3839 B) 3938 C) 380039 D) 不可预知36、#define MAX_MEM_SIZE 100int GetMem(int iLen, void *ppMem) if(NULL=ppMem) return 1; if(iLen=0) return 0; else if(iLenMAX_MEM_SIZE) *ppMem=malloc(iLen); return iLen; else *ppMem=malloc(MAX_MEM_SIZE); return MAX_MEM_SIZE; void main() char *pMyMem; int i; int j; i = GetMem(i, (void*)&pMyMem); if(NULL!=pMyMem) for(j=0; ji; j+) pMyMemj=0; 下面说法正确的有;( )A、因为pMyMem未初始化,main函数中的GetMem可能会返回1;B、因为i未初始化,main函数中GetMem可能会返回比MAX_MEM_SIZE大的值;C、因为pMyMem未初始化,for循环内的赋值操作可能会导致写内存异常;D、无论pMyMem, i, j为何值时,main函数内都不会出现写内存异常;37、#define MAX_MEM_SIZE 100int GetMem(int iLen, void *ppMem) if(iLen0) return -1; else if(0=iLen) return 0; else if(iLen0) for(k=0; k0)改为if(0j)&(j=MAX_MEM_SIZE),可以避免出现for循环内写内存异常;C、虽然i和pMyMem均未初始化,只要将main函数内的for循环比较由ki改为kj,可以避免出现for循环内写内存异常;D、上面三种说法都不对。二:多项选择题1. 定义结构体时有下面几种说法,请指出正确的(多选):_ A、结构体中的每个部分,最好进行四字节对齐;B、结构体的总长度最好是四字节对齐;C、结构中成员的存放不用考虑字节对齐情况;2. 0x12345678 在采用BigEndian中内存的排列顺序是_,在采用LittleEndian内存中的排列顺序是_.(答案从左到右内存地址依次增加)A.12 34 56 78 B.34 12 78 56 C.78 56 34 12 D.56 78 12 343.下面程序期望输出str = hello world:char * GetStr(char *p) p = hello world; return p;void main() char *str = NULL; if(NULL != GetStr(str) printf(rn str = %s,str); return;下面描述正确的是:A、str始终为NULL;B、函数GetStr返回值始终不为空;C、该程序无法得到预期的输出结果,因为GetStr函数无法将字符串地址带给实参;4、下面程序期望得到 g_Variable的值,并打印出来。unsigned char g_Variable;void GetGlobalAddr(unsigned char *p) p = &g_Variable;void main() unsigned char *temp = NULL_PTR; GetGlobalAddr(temp); printf(rn Got global variable value = %u, *temp); return;下面说法正确的是():A 对p强制类型转换错误;B 调用函数时,局部变量p存在于栈中;C p值的改变不会影响temp;D 调用函数后,temp的值被改变为g_Variable的地址。5、#define MAX_LEN 2UC *ConvertCode(UC *pByte, UC num) UL i = 0; UC strTempMAX_LEN; if (NULL = pByte) return NULL; memcpy(strTemp, pByte, MAX_LEN); return (UC *)strTemp;void main(void) UC strMAX_LEN; UC *p; str0 = 0x12; str1 = 0x34; p = ConvertCode(str, sizeof(str); printf(%s, p); return;下面查错的说明中,描述正确的是():A、输入参数p_byte为空指针B、函数ConvertCode返回值没有判断C、没有判断p_byte指向空间和MAX_LEN的大小D、返回局部变量地址6.下列定义正确的有(多选):( ) A: char *pcPtr = abcd; B: char pc4= abcd; C: char pc = abcd; D: char pc = abcd; E: char pc = a,b,c,d,0; F: char pc = a b c d;7.void GetMemory(char *ppcChar, int iLength) if(NULL = ppcChar) return; *ppcChar = (char *)malloc(iLength); return;void main(int argc, char* argv) char *szStr = NULL; int iLen = 100; GetMemory(&szStr, iLen); if(NULL != szStr) strcpy(szStr, hello); printf(szStr); return;下面描述正确的是():A、iLength应该判断是否大于0;B、程序中使用魔鬼数字;C、当szStr不为空时,没有释放分配的内存;D、printf(szStr)无法输出字符串8.请指出下面程序问题#define MAX_LEN 254unsigned char ArrayMAX_LEN;int Test(void) int i; for ( i = 0; i = MAX_LEN; i+ ) Arrayi = i; return;下面说法正确的是():A、i = MAX_LEN时,数组越界B、argv参数形式错误C、i = MAX_LEN时,赋值溢出D、return无返回值9、#include #include #include #define MAX_MSG_LEN 2048BOOL MaxMsgFlag = FALSE;char *GetBuffer(int msg_len) char *ptr=NULL; int len =msg_len; ptr=(char *)malloc(len); if(NULL = ptr ) return NULL; return ptr;int main(int argc, char* argv) int msg_len ; char *pMsg; if(TRUE = MaxMsgFlag) msg_len = MAX_MSG_LEN; pMsg = getBuffer(msg_len); if(NULL != pMsg ) strcpy(pMsg,I love this game !); printf(%s,pMsg); free(pMsg); return 0;上面的程序存在问题,下面描述正确的是( )A、函数getBuffer应该判断入参msg_len是否大于0。B、按照编程规范,函数main中pMsg应该赋初值C、函数main中msg_len没有赋初值三:填空题1.char *pcColor = blue1 ;char acColor = blue1 ;strlen(pcColor) = _strlen(acColor) = _sizeof(pcColor) = _sizeof(acColor) = _2.charstr = 0;char *p = str;int n = 1000;请计算sizeof (str ) =_ sizeof ( p ) =_ sizeof ( n ) = _3.UCHAR *pucCharArray1010; typedef union unRec ULONG ulIndex; USHORT usLevel6; UCHAR ucPos; REC_S; REC_S stMax,*pstMax; 四字节对齐方式时: sizeof(pucCharArray) = _, sizeof(stMax)=_, sizeof(pstMax)=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论