H3C笔试题目

最近这段时间正在找工做,去H3C作了下笔试题,题目出的还不错,比通常公司水平高上一点点,偷偷弄了点回来,分享一下,我把答案和解析所有整理了出来,有须要的能够看看.数组

 

一、如下描述正确的有(AD函数

A1个字节(byte)由8个比特(bit)组成ui

Bsigned char类型的取值范围是-127~128spa

C0xFFFFFFFF4字节无符号数中最大的指针

Dunsigned char类型的取值范围是0~255blog

解析:string

signed char的取值范围是-128~127,为-(2^8)~(2^8-1)it

0xFFFFFFFF是无符号整型的最大值,若是包含浮点数类型,那么他就不是最大的了。io

二、如下代码的运行结果(D编译

#define ADD(x, y) (x + y)

#define SUB(x, y) (x)-(y)

#define MUL(x, y) (x * y)

 

Unsigned int uiA

uiA = MUL(ADD(x, y), SUB(6, 3));

A、uiA=15 BuiA=33

CuiA=18 DuiA=63

解析:预编译后展开的式子:uiA = ((9 + 2) * (6) - (3));

三、如下代码运行的结果(B

代码I

usigned int uiA

uiA = 0x55 & 0x66) ^ (0x77 | 0x88);

代码II:

unsigned int uiB;

uiB = (0xAA << 3) | (0xBB << 2) | (0xCC << 1) | 0xDD;

代码I,uiA = 0xAA代码I,uiA = 0xBB

代码II,uiB=0xFFFFFFFF代码II,uiB=0xAABBCCDD

四、如下语句中,可以判断uiNum(unsigned int)能够被16整除的有(AC)

A if(((uiNum / 16) * 16 == uiNum)

B if((uiNum % 15) == 0)

C if((uiNum & 0x0F) == 0)

D if(((uiNum >> 5) << 5) == uiNum)

解析:B改为if((uiNum%16) == 0

D改为if(((UiNum >> 4) << 4) == uiNum)

五、关于如下代码描述正确的有(AB

代码I:

const char *pcStr = “abcdefg”;

 

daimaII:

void string_sizeof(char szStr1[10])

{

char szStr2[10] = “12345”;

printf(“%u, “, sizeof(szStr1));

printf(“%u\r\n”, sizeof(szStr2));

return;

}

 

代码III:

typedef unsigned int *pui_t1;

#define pui_t2 unsigned int *

pui_t1 puiA, puiB;

pui_t2 puiC, puiD;

 

代码IV:

unsigned int uiA = 100;

printf(“%s\r\n”, uiA);

 

A、代码Iconst修饰符代表pcStr指向的内容不能更改;

B、代码II,程序运行结果是“4,10”;

C、代码IIIpuiApuiBpuiCpuiD都是unsigned int *类型的变量;

D、代码IV,打印unsigned int时不该该使用“%s”,会致使程序访问非法地址。

 

解析:const char *pcStrchar * const pcStr的区别.

BszStr1是数组名,至关于经过函数参数的形式传递了一个指针,因此是4;szStr2是局部变量数组,sizeof至关于求数组大小因此是10.

C中使用define定义的至关于替换因此展开以后unsigned int * puiC, puiD因此很明显puiD不是unsigned int *类型

D%s须要传递一个地址过来,uiA是个变量值,因此会出错,若是改为&uiA就能够了.

六、关于结构和联合体的大小,如下描述正确的有(C

struct A_S

{

unsigned short us1;

unsigned short us2;

unsigned short us3;

};

struct B_S

{

unsigned char uc1;

unsigned int  ui2;

unsigned short us3;

};

union C_U

{

unsigned short us1;

unsigned short us2;

unsigned short us3;

};

union D_U

{

unsigned char uc1;

unsigned int  ui2;

unsigned short us3;

};

A、结构体struct A_S的大小是2

B、结构体struct B_S的大小是7

C、联合体union C_U的大小是2

D、联合体union D_U的大小是7

解析:结构体的大小在默认状况下须要天然边界对齐。因此A_S大小是6B_S大小12,

联合体大小是其中类型最大的一个的大小。

7、关于链表操做如下描述正确的有(ABC

 

struct SLL

{

struct SLL *pstNext; /*下一节点*/

};

 

struct DLL

{

struct DLL *pstNext; /*下一节点*/

struct DLL *pstPrev; /*前一节点*/

};

A、单链表,如下代码能够删除节点B

pstA->pstNext = pstA->pstNext->pstNext;

free(pstA->pstNext);

B、单链表,如下代码能够删除节点B

pstA->pstNext = pstB->pstNext;

free(pstB);

C、双链表,如下代码能够删除节点B

pstB->pstPrev->pstNext = pstB->pstNext;

pstB->pstNext->pstPrev = pstB->pstPrev;

free(pstB);

D、双链表,如下代码能够删除节点B

pstA->pstNext = pstA->pstNext->pstNext;

pstA->pstNext->pstPrev = pstA;

free(pstB);

解析:D改为:

pstA->pstNext = pstA->pstNext->pstNext;

pstA->pstNext->pstNext->pstPrev = pstA;

free(pstB);

就能够了.

八、如下代码的运行结果是(B)

代码I:

unsigned int uiCount = 0;

while(uiCount <= 5)

{

if (unCount <= 5)

continue;

++uiCount;

}

printf(“uiCount=%u\r\n”, uiCount);

 

代码II:

unsigned int uiCount = 0;

do

{

uiCount++;

}while(uiCount >= 5);

printf(“uiCount=%u\r\n”, uiCount);

 

代码III:

unsigned int uiCount = 0;

switch (unCount)

{

case 0:

uiCount = 5;

default:

uiCount = 1;

}

printf(“uiCount=%u\r\n”, uiCount);

 

代码IV:

unsigned int uiCount = 0;

for( ; uiCount <= 10; uiCount++)

if (uiCount == 5)

breakl

printf(“uiCount=%u\r\n”, uiCount);

 

A.代码I, uiCount=5

B.代码II, uiCount=1

C.代码III, uiCount=1

D.代码IV, uiCount=6

解析:代码I会陷入无限循环,continue会在uiCount<=5时跳过++uiCount,uiCount的值是0,因此没有机会++uiCount

代码IV,uiCount=5,break以后uiCount++没有机会执行了.

相关文章
相关标签/搜索