H3C筆試及答案解析

最近一直在找工做,前幾天去H3C筆試了一把,題目出的還能夠,偷偷記了點,我把答案和解析全都寫出來了,但願對你有用.數組


一、如下描述正確的有(ADide

A1個字節(byte)由8個比特(bit)組成函數

Bsigned char類型的取值範圍是-127~128ui

C0xFFFFFFFF4字節無符號數中最大的spa

Dunsigned char類型的取值範圍是0~255指針

解析:blog

signed char的取值範圍是-128~127,爲-(2^8)~(2^8-1)圖片

0xFFFFFFFF是無符號整型的最大值,若是包含浮點數類型,那麼他就不是最大的了。get

二、如下代碼的運行結果(Dstring

#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=15BuiA=33

CuiA=18DuiA=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;

A 代碼I,uiA = 0xAAB 代碼I,uiA = 0xBB

C 代碼II,uiB=0xFFFFFFFFD 代碼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

145112576.png

struct SLL

{

struct SLL *pstNext;/*下一節點*/

};

145115606.png

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++沒有機會執行了.

相關文章
相關標籤/搜索