Mảng hai chiều (còn gọi là ma trận) thực chất là mảng một chiều trong đó mỗi phần tử của mảng là một mảng một chiều, và được …
Định nghĩa
Mảng hai chiều (còn gọi là ma trận) thực chất là mảng một chiều trong đó mỗi phần tử của mảng là một mảng một chiều, và được truy xuất bởi hai chỉ số dòng và cột.
Cú pháp
Lưu ý: Chỉ số cột và chỉ số dòng luôn luôn bắt đầu từ 0.
Ví dụ:
- Khai báo mảng 2 chiều a có 3 dòng 2 cột chứa số nguyên: int a[3][2];
- Khai báo mảng 2 chiều ch có 50 dòng 100 cột chứa ký tự:char ch[50][100];
Truy xuất đến một phần tử
Thông qua chỉ số
<tên biến mảng>[<giá trị cs1>][<giá trị cs2>]
Ví dụ: Cho ma trận int A[3][4]; như sau:
Các truy xuất
Hợp lệ: a[0][0], a[0][1], …, a[2][2], a[2][3]
Không hợp lệ: a[-1][0], a[2][4], a[3][3]
Gán dữ liệu kiểu mảng
Không được sử dụng phép gán thông thường mà phải gán trực tiếp giữa các phần tử
Tham số mảng của một hàm
Qui ước: chúng ta thống nhất dùng Ma trận thay cho Mảng 2 chiều.
Bài tập mẫu hướng dẫn
Yêu cầu:
- Viết 2 hàm con Nhập và Xuất ma trận chứa các số nguyên.
- Gọi thực hiện 2 hàm con trong hàm main.
Hướng dẫn:
Bước 1: Tạo project mới (có thể xem lại bài viết Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012 Hoặc Hướng dẫn Dev-C++ căn bản)
Bước 2: Khai báo thêm các thư viện cơ bản cho chương trình.
#include <stdio.h>
Bước 3: Khai báo hằng số cho chương trình.
#define MAXCOL 100
Bước 4: Viết các khai báo nguyên mẫu hàm cho chương trình như sau:
void XuatMaTran_SoNguyen(int a[][MAXCOL], int m, int n);
Bước 5: Viết hàm main để thực thi chương trình.
void main() { int A[MAXROW][MAXCOL]; int M, N; NhapMaTran_SoNguyen(A, M, N); printf("\nNoi dung cua mang la: \n"); XuatMaTran_SoNguyen(A, M, N); getch(); }
Bước 6: Viết các định nghĩa hàm cần thiết cho chương trình như sau
//======================================= void NhapMaTran_SoNguyen(int a[][MAXCOL], int &m, int &n) { do { printf("Cho biet so dong cua mang: "); scanf_s("%d", &m); }while(m<=0); do { printf("Cho biet so cot cua mang: "); scanf_s("%d", &n); }while(n<=0); for(int i=0; i<m; i++) for(int j=0; j<n; j++) { printf("Gia tri phan tu a[%d][%d]=", i, j); scanf_s("%d", &a[i][j]); } } //========================================== void XuatMaTran_SoNguyen(int a[][MAXCOL], int m, int n) { for(int i=0; i<m; i++) { for(int j=0; j<n; j++) printf("%5d", a[i][j]); printf("\n"); } }
– Tạo giá trị ngẫu nhiên cho các phần tử của ma trận.
– Xuất các giá trị của ma trận ra màn hình.
– Tính và xuất tổng các phần tử ma trận.
– Tìm max/min của các phần tử ma trận.
– Sắp xếp các giá trị của ma trận theo thứ tự tăng dần.
Hướng dẫn(xem tiếp ở trang sau)