這幾天一直在找工做的,前幾天去h3c筆試了一把,題目出的還能夠,偷偷記了點,有須要的人拿去 數組
一、如下描述正確的有(AD) 函數
A、1個字節(byte)由8個比特(bit)組成 ui
B、signed char類型的取值範圍是-127~128 spa
C、0xFFFFFFFF是4字節無符號數中最大的 指針
D、unsigned char類型的取值範圍是0~255 string
解析: it
signed char的取值範圍是-128~127,爲-(2^8)~(2^8-1); io
0xFFFFFFFF是無符號整型的最大值,若是包含浮點數類型,那麼他就不是最大的了。 編譯
二、如下代碼的運行結果(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 B、uiA=33
C、uiA=18 D、uiA=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 = 0xAA B 代碼I,uiA = 0xBB
C 代碼II,uiB=0xFFFFFFFF D 代碼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、代碼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就能夠了.
六、關於結構和聯合體的大小,如下描述正確的有(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);
就能夠了.
八、如下代碼的運行結果是(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++沒有機會執行了.