2.18.2012

C語言測驗 (1)

最近在網路上找到一份某訓練機構的C語言測驗試題;我居然也花時間把這份測驗做完!!....@@

來幫BLOG灌個水一下,把這幾道題目講解一下:

1. 請寫出以下主程式的輸出結果為何??
#include <stdio.h>

int main(void)
{
    unsigned char a = 38, b = 49;

    a ^= b;
    b ^= a;
    a ^= b;
    printf("a = %d, b = %d \n", a, b);

    return 0;
}
Answer: 這個應該很簡單吧!! 在測驗位元互斥 (OR, '^')的運算。結果為a = 49, b = 38

2. 請寫出a陣列的內容為何??
#include <stdio.h>

void foo(int [][3]);

int main(void)
{
    int a[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    foo(a);

    return 0;
}

void foo(int b[][3]) {

    ++b;
    b[1][1] = 100;

    return;
}
Answer: 這一道題目測驗的是陣列和記憶體的觀念陣列名稱就是代表記憶體開始的位址;foo()函式裡的++b是指陣列b的記憶體位址,再加一個單位;而這所謂的一個單位,是指二維陣列裡的第一維單位的大小,所以會是sizeof(int) * 3的大小。所以在foo()裡的b[0][0] = 4。最後,a陣列的內容為:
a[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 100, 9}
};


3. 寫一行C程式碼將變數X (32-bit)的bit 29~31的值清除為0 (bit 0~28保持不變)。
Answer: X &= ~7

(To be continue....)

沒有留言:

張貼留言