H3C筆試及答案解析

最近一直在找工作,前幾天去H3C筆試了一把,題目出的還可以,偷偷記了點,我把答案和解析全都寫出來了,希望對你有用.


1、以下描述正確的有(AD

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

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

C0xFFFFFFFF4字節無符號數中最大的

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

解析:

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

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

2、以下代碼的運行結果(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=15BuiA=33

CuiA=18DuiA=63

解析:預編譯後展開的式子:uiA = ((9 + 2) * (6) - (3));

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

4、以下語句中,能夠判斷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)

5、關於以下代碼描述正確的有(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就可以了.

6、關於結構和聯合體的大小,以下描述正確的有(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);

就可以了.

8、以下代碼的運行結果是(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++沒有機會執行了.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章