1. Mảng 2 Chiều
Trong ngôn ngữ C khi cần giải quyết các bài toán liên quan tới ma trận hoặc bảng số thì mảng 2 chiều là cấu trúc dữ liệu có thể giúp bạn lưu trữ dữ liệu đầu vào.
Mảng 2 chiều tương tự như một bảng số gồm hàng và cột, mảng 2 chiều chính là một mảng các mảng 1 chiều
Để truy cập các phần tử trong mảng 2 chiều ta thông qua chỉ số hàng và cột được đánh số từ 0
Chú ý để truy cập vào phần tử trong mảng 2 chiều ta luôn dùng chỉ số hàng trước, chỉ số cột sau
Cú pháp khai báo : Data_type array_name[rows][cols];
- Data_type : Kiểu dữ liệu của phần tử trong mảng như int, float, char, double..
- array_name : Tên mảng 2 chiều
- rows : Số hàng của mảng 2 chiều
- cols : Số cột của mảng 2 chiều
Ví dụ mảng a[4][4]
Khai báo mảng 2 chiều bạn có thể khai báo thủ công như sau :
#include "stdio.h" int main(){ int a[3][4] = { {1, 2, 3, 1}, {4, 1, 5, 2}, {3, 7, 9, 0} }; printf("Phan tu o hang %d, cot %d la : %d\n", 1, 2, a[1][2]); printf("Phan tu o hang %d, cot %d la : %d\n", 2, 2, a[2][2]); return 0; }
Output :
Phan tu o hang 1, cot 2 la : 5 Phan tu o hang 2, cot 2 la : 9
2. Nhập Xuất Mảng 2 Chiều
Các dạng bài tập về mảng 2 chiều đều cho các biết trước số lượng hàng và cột của mảng 2 chiều, bạn có thể khai báo mảng 2 chiều dựa vào hàng cột mà đề bài cung cấp hoặc sử dụng mảng 2 chiều có kích cố định thước đủ lớn.
Để in ra mảng 2 chiều bạn dùng 2 vòng lặp lồng nhau, vòng lặp ngoài duyệt qua hàng, vòng for trong duyệt qua từng cột của hàng.
Ví dụ 1 : Nhập và xuất mảng 2 chiều với kích thước cố định :
Chú ý code bên dưới sẽ đúng nếu giới hạn mảng 2 chiều của đề bài không vượt quá 205 hàng và số cột không vượt quá 205.
Nếu đề bài cho số lượng hàng và cột lớn hơn bạn cần khai báo mảng 2 chiều lớn hơn để phù hợp với bài toán
#include "stdio.h" int main(){ int n, m; // n : hàng, m : c?t int a[205][205]; // 205 x 205 printf("Nhap so hang, cot : "); scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } printf("Mang vua nhap :\n"); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%d ", a[i][j]); } printf("\n"); } return 0; }
Ví dụ 2 : Nhập mảng 2 chiều dựa vào số hàng, cột của đề bài
#include "stdio.h" int main(){ int n, m; // n : hàng, m : cột printf("Nhap so hang, cot : "); scanf("%d%d", &n, &m); int a[n][m]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("a[%d][%d] = "); scanf("%d", &a[i][j]); } } printf("Mang vua nhap : "); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%d ", a[i][j]); } printf("\n"); } return 0; }
3. Mảng 2 Chiều Và Hàm
Mảng 2 chiều có thể làm tham số của hàm, tuy nhiên khi hàm có tham số là mảng 2 chiều thì bạn cần chỉ định số lượng cột của mảng 2 chiều.
Khi gọi hàm thì đối số truyền vào phải có số cột giống với số cột của mảng 2 chiều trong tham số.
Ví dụ 1: Hàm nhập và xuất mảng
#include "stdio.h" void nhap(int a[][205], int n, int m){ for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } } void xuat(int a[][205], int n, int m){ printf("Mang 2 chieu : \n"); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%d ", a[i][j]); } printf("\n"); } } int main(){ int n, m; // n : hàng, m : cột int a[205][205]; printf("Nhap so hang, cot : "); scanf("%d%d", &n, &m); nhap(a, n, m); xuat(a, n, m); return 0; }
Ví dụ 2 : Đếm số lượng số nguyên tố trong mảng 2 chiều
#include "stdio.h" #include "math.h" int prime(int n){ if(n < 2) return 0; for(int i = 2; i <= sqrt(n); i++){ if(n % i == 0){ return 0; } } return 1; } void nhap(int a[][205], int n, int m){ for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("a[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } } void xuat(int a[][205], int n, int m){ printf("Mang 2 chieu : \n"); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%d ", a[i][j]); } printf("\n"); } } int dem(int a[][205], int n, int m){ int ans = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(prime(a[i][j])){ ++ans; } } } return ans; } int main(){ int n, m; // n : hàng, m : cột int a[205][205]; printf("Nhap so hang, cot : "); scanf("%d%d", &n, &m); nhap(a, n, m); xuat(a, n, m); printf("So luong so nguyen to trong mang : %d\n", dem(a, n, m)); return 0; }
Xem thêm video bài giảng về mảng 2 chiều của mình