最近一直在找工作,前幾天去H3C筆試了一把,題目出的還可以,偷偷記了點,我把答案和解析全都寫出來了,希望對你有用.
1、以下描述正確的有(AD)
A、1個字節(byte)由8個比特(bit)組成
B、signed char類型的取值範圍是-127~128
C、0xFFFFFFFF是4字節無符號數中最大的
D、unsigned 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=15B、uiA=33
C、uiA=18D、uiA=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、代碼I,const修飾符表明pcStr指向的內容不能更改;
B、代碼II,程序運行結果是“4,10”;
C、代碼III,puiA、puiB、puiC和puiD都是unsigned int *類型的變量;
D、代碼IV,打印unsigned int時不應該使用“%s”,會導致程序訪問非法地址。
解析:const char *pcStr和char * const pcStr的區別.
B中szStr1是數組名,相當於通過函數參數的形式傳遞了一個指針,所以是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大小是6,B_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);
就可以了.
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++沒有機會執行了.