Mảng 2 chiều 2d array trong C | Lập Trình Từ Đầu

1.Mảng 2 chiều

Mảng 2 chiều là việc khai báo một danh sách gồm các mảng một chiều, có nghĩa là mảng 2 chiều là tập hợp gồm các mảng 1 chiều.

Ví dụ ta có mảng 1 chiều:

int a[10];

các phần tử của mảng một chiều trên là:

a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
a[9]

Khai báo mảng 2 chiều

type Name[row][col]

Trong đó:

  • type là kiểu dữ liệu của mảng
  • name là tên mảng
  • row là số lượng hàng của mảng
  • col là số lượng cột của mảng

Ví dụ: int a[5][7]

COL 0
COL 1
COL 2
COL 3
COL 4
COL 5
COL 6
ROW 0
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[0][4]
a[0][5]
a[0][6]

ROW 1
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[1][4]
a[1][5]
a[1][6]

ROW 2
a[2][0]
a[2][1]
a[2][2]
a[2][3]
a[2][4]
a[2][5]
a[2][6]

ROW 3
a[3][0]
a[3][1]
a[3][2]
a[3][3]
a[3][4]
a[3][5]
a[3][6]

ROW 4
a[4][0]
a[4][1]
a[4][2]
a[4][3]
a[4][4]
a[4][5]
a[4][6]

Ví dụ ta có phần tử a[0][3] nghĩa là đây là phần tử tại hàng thứ 0 cột thứ 3 trong mảng hay phần tử a[3][4] nghĩa là phần tử tại hàng thứ 3 cột thứ 4

Lưu ý: chỉ số bắt đầu của hàng là 0, chỉ số bắt đầu của cột cũng là 0

Ví dụ khai báo mảng a[5][7] với kiểu dữ liệu int trong C

#include <stdio.h>
int main(){
    int a[5][7];
    return 0;
}

Khai báo và gán giá trị mặc định cho mảng a[5][7]

#include <stdio.h>
int main(){
    int a[5][7] = {
        {5,3,6,5,9,3,7},
        {1,3,6,8,0,9,3},
        {7,3,9,2,8,2,3},
        {7,6,3,2,3,9,2},
        {8,6,3,9,3,2,5}
    };
    printf("Gia tri cua mang tai hang 0 cot 3 la: %d",a[0][1]);
    printf("\nGia tri cua mang tai hang 5 cot 6 la: %d",a[4][6]);
    return 0;
}

Gia tri cua mang tai hang 0 cot 3 la: 3

Gia tri cua mang tai hang 5 cot 6 la: 5

Ta nhìn có thể thấy mảng 2 chiều là các mảng một chiều được viết lại thành một danh sách với dấu “ ,” (dấu phẩy)

Ta cũng có thể truy cập và thay thế giá trị ở hàng thứ m, cột thứ n trong mảng 2 chiều bằng cách a[m][n] = giatri;

Ví dụ dưới đây tôi thay thế a[0][1] = 10

#include <stdio.h>
int main(){
    int a[5][7] = {
        {5,3,6,5,9,3,7},
        {1,3,6,8,0,9,3},
        {7,3,9,2,8,2,3},
        {7,6,3,2,3,9,2},
        {8,6,3,9,3,2,5}
    };
    printf("Gia tri cua mang tai hang 0 cot 3 la: %d",a[0][1]);
    a[0][1] = 10;
    printf("\nGia tri a[0][1]cua mang sau khi thay the la: %d",a[0][1]);
    return 0;
}

Gia tri cua mang tai hang 0 cot 3 la: 3

Gia tri a[0][1]cua mang sau khi thay the la: 10

2.Duyệt mảng 2 chiều

Khác với duyệt mảng 1 chiều, khi thực hiện duyệt mảng hai chiều ta cần sử dụng hai vòng lặp

  • 1 vòng lặp duyệt theo hàng
  • 1 vòng lặp duyệt theo cột

Ví dụ dưới đây tôi duyệt mảng trên với 2 vòng lặp for để in ra màn hình tất cả phần tử có trong mảng

#include <stdio.h>
int main(){
    int a[5][7] = {
        {5,3,6,5,9,3,7},
        {1,3,6,8,0,9,3},
        {7,3,9,2,8,2,3},
        {7,6,3,2,3,9,2},
        {8,6,3,9,3,2,5}
    };
    
    for(int i = 0; i<5; i++){
        for(int j = 0; j < 7; j++){
            printf("%d \t", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

5 3 6 5 9 3 7

1 3 6 8 0 9 3

7 3 9 2 8 2 3

7 6 3 2 3 9 2

8 6 3 9 3 2 5

Giải thích: Vòng for đầu tiên tôi dùng để duyệt phần tử ở các hàng thứ i với điều kiện bắt đầu từ 0 duyệt khi biến i bé hơn 5 và mỗi lần duyệt xong biến i tăng lên 1 đơn vị, vòng for thứ hai tôi dùng để duyệt phần tử ở các cột thứ j với bắt đầu bằng 0 duyệt khi biến j bé hơn 7 và mỗi lần duyệt xong biến j tăng lên một đơn vị sau đó thực hiện in ra giá trị của phần tử trong mảng a[i][j]

Tiếp theo, ví dụ tôi muốn duyệt mảng trên trong khoảng hàng từ 0->2, cột từ 1->3, tôi chỉ việc thay thế biến bắt đầu i,j và biến kết thúc i,j cho phù hợp

#include <stdio.h>
int main(){
    int a[5][7] = {
        {5,3,6,5,9,3,7},
        {1,3,6,8,0,9,3},
        {7,3,9,2,8,2,3},
        {7,6,3,2,3,9,2},
        {8,6,3,9,3,2,5}
    };
    
    for(int i = 0; i<3; i++){
        for(int j = 1; j < 4; j++){
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

3 6 5

3 6 8

3 9 2

Lưu ý: Trong một số trường hợp mảng một chiều còn được gọi là vector, còn mảng 2 chiều được gọi là các Matrix (ma trận) m hàng n cột