二維陣列
初寫:2005.02.18, 更新日期:2021.07.03
 
參考資料:
 
  • 二維陣列(Two dimension array)

  • 語法格式:
    資料型態  陣列名稱 [列(橫)] [行(直)]

    資料型態  陣列名稱 [] []

  • 範例說明:
    int myarray[ 3 ][ 2 ]
    佔用(3x2) x 4bytes(int)= 3*2*sizeof(int)= 24bytes的記憶空間.

    行(直)
    列(橫)
    [0, 0] [0, 1]
    [1, 0] [1, 1]
    [2, 0] [2, 1]

    C語言的陣列,在記憶體都是以連續的記憶體空間來處理,
    而排列的方式是以 row-major 方式,讓多維對應到一維來處理。

    記憶體中的排列
    myarray[0, 0]
    myarray[0, 1]
    myarray[1, 0]
    myarray[1, 1]
    myarray[2, 0]
    myarray[2, 1]

  • 範例1:
    int myarray[2][3] = {
        {9, 8, 7},
        {6, 5, 4}
    };
    myarray[0][2]的值是多少?
    myarray[1][2]是多少?
    請試著想看看,再用程式驗證一下.



  • 範例2:
    宣告一個二維陣列,將每週星期幾的名稱(前三字母)存入
    陣列有7個字串,每個字串有3個字元,
    可宣告成:
    char weekday[7][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

    或使用指標來處理
    char *weekday[7] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

    以for迴圈將二維陣列weekday印出來.
    for(i=0; i<?; i++){
        for(j=0; j<?; j++){
            printf("%c", weekday[i][j]);
        }
        printf("\n");
    }

    for(i=0; i<7; i++){
        printf("%s ", weekday[i]);
    }




  • 練習1:
    請使用二維陣列,輸入五位同學的國文與英文成績,並列出各科最高分。


  • 練習2:
    寫一個程式,輸入西元年、月、日(以空格間隔),輸出該日期為星期幾(weekday)
    (每4年閏、每100年不閏、每400年閏)
    推算方法:
    先推算某年每個月第一日為星期幾的式子,建表紀錄,
    再回推西元0年的表,觀察上述規律並利用,推算完整的計算式.

    2007 5 21 -> Mon
    2018 7 1  -> Sun
    2019 6 13 -> Thu


  • 練習3:
    輸入一個數字(<=15),請輸出一個矩陣,其數值等於左邊和上面元素的和。(95軟研考題)
    Input matrix dimention: 1
    1
    Input matrix dimention: 3
    1  1  1
    1  2  3
    1  3  6

    Input matrix dimention: 5
    1   1   1   1   1
    1   2   3   4   5
    1   3   6  10  15
    1   4  10  20  35
    1   5  15  35  70



曾聖超老師製作