Tải bản đầy đủ (.pdf) (10 trang)

Bài giảng ngôn ngữ lập trình c chương 10 mảng hai chiều

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (90.33 KB, 10 trang )

CHƯƠNG 6: MẢNG HAI CHIỀU



Khái niệm
Mảng hai chiều có thể hiểu là một dãy các phần tử được sắp xếp liên tiếp
trong bộ nhớ, từ hàng này sang hàng kia





Khai báo mảng hai chiều
Cú pháp:
<tên kiểu> <tên mảng> [<kích thước dòng>][<kích thước cột>]
Các phần tử mảng được truy nhập bởi hai chỉ số: chỉ số dòng (bắt đầu từ 0
đến số dòng – 1) và chỉ số cột (bắt đầu từ 0 đến số cột – 1)










Ví dụ 1: int a[5][6]
Khai báo một mảng hai chiều gồm 30 phần tử, mỗi phần tử có kiểu int
Các phần tử của mảng a được phân bố trong bộ nhớ như sau:
a[0][0]


a[0][1] …
a[0][5]
a[1][0]
a[1][1] …
a[1][5]

a[4][0]
a[4][1] …
a[4][5]















Khởi tạo giá trị ban đầu cho mảng hai chiều
Chúng ta có thể khởi tạo mảng hai chiều tương tự với việc khởi tạo mảng
một chiều, bằng cách liệt kê các giá trị trong một danh sách.
Ví dụ 2:
int a[2][3] = {
{11, 12, 13},

{21, 22, 23}
};
Ví dụ 3:
float b[][4] = {
{6, 7. 8, 8, 9},
{3, 12.6, 4, 14},
{6.5, 20,7, 8}
};





















Nhập xuất mảng hai chiều

Ví dụ 4:
#define SIZE1 6
#define SIZE2 8
void main()
{
int a[SIZE1][SIZE2]; /* khai báo một mảng 2 chiều nguyên gồm
SIZE1*SIZE2 phần tử */
int m, n; //lưu số dòng và số cột
int i, j, tam;
do
{
<nhập số dòng m và số cột n>
} while(m < 1 || m > SIZE1 || n < 1 || n > SIZE2);
// nhập dữ liệu cho mảng từ bàn phím
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
{
printf(“pt thu [%d][%d]:”, i, j);
scanf(“%d”, &tam);
a[i][j] = tam;
}











}

// xuất dữ liệu của mảng ra màn hình
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
printf(“%d\t”, a[i][j]);
printf(“\n”);
}
printf(“\n”);

Chú ý: Trong C đối với các phần tử của mảng hai chiều ta không thể sử
dụng toán tử lấy địa chỉ (&). Tuy nhiên với mảng hai chiều nguyên thì dùng
được.









Sử dụng mảng làm tham số truyền cho hàm
Ví dụ 5:
#define SIZE1 5
#define SIZE2 6
// khai báo nguyên mẫu hàm
void Nhap(int (*a)[SIZE2], int *m, int *n);

void Xuất(int (*a)[SIZE2], int m, int n);




















// định nghĩa hàm
void Nhap(int (*a)[SIZE2], int *m, int *n)
{
int tam;
do
{
printf(“Nhập so dong và so cot:”);
scanf(“%d%d”, &(*m), &(*n));
} while(*m < 1 || *m > SIZE1 | |*n < 1 || *n > SIZE2);

for(i = 0; i < *m; i++)
for(j = 0; j < *n; j++)
{
printf(“pt thu [%d][%d]:”, i, j);
scanf(“%d”, &tam);
a[i][j] = tam;
}
}



















void Xuat(int (*a)[SIZE2], int m, int n)
{
for(i = 0; i < m; i++)

{
for(j = 0; j < n; j++)
printf(“%d\t”, a[i][j]);
printf(“\n”);
}
}
void main()
{
float a[SIZE1][SIZE2];
int m, n;
Nhap(a, &m, &n);
Xuat(a, m, n);
}







Chú ý:
Đối số thứ nhất của hai hàm trên có thể khai báo như một mảng hình thức
như sau:
void Nhap(float a[][SIZE2], int *m, int *n);
void Xuat(float a[][SIZE2], int m, int n);












Mảng vuông
Khi số dòng và số cột của một mảng hai chiều bằng nhau, chúng ta gọi
mảng đó là mảng vuông (hay ma trận vuông). Số dòng và số cột của ma
trận vuông gọi chung là kích thước ma trận vuông, ký hiệu là n.
Các phần tử nằm trên đường chéo chính là các phần tử a[i][i] với 0 ≤ i ≤ n1.
Các phần tử nằm trên đường chéo phụ là các phần tử a[n-1-i][i] với 0 ≤ i ≤
n-1.
Các phần tử nằm trong nửa mảng vuông phía trên đường chéo chính thỏa
điều kiện i ≤ j.
Các phần tử nằm trong nửa mảng vuông phía trên đường chéo chính thỏa
điều kiện i ≥ j.
Các phần tử nằm trong nửa mảng vuông phía trên đường chéo phụ thỏa
điều kiện i +j ≤ n-1.
Các phần tử nằm trong nửa mảng vuông phía dưới đường chéo phụ thỏa
điều kiện i +j ≥ n-1.



×