Bài 11: Mảng nhiều chiều

0
1296

Khai báo mảng:

Ví dụ 1:

Khai báo mảng 2 chiều int ia[5][10]; với int là kiểu mảng, ia là tên mảng, số phần tử mảng là 5 x 10.

Ý nghĩa: Khai báo một mảng 2 chiều số nguyên gồm 50 phần tử, mỗi phần tử có kiểu int.

Từ ví dụ 1, ta có cú pháp khai báo mảng đa chiều như sau:

tên_kiểu tên_biến[spt1][spt2]…[sptn];

Diễn giải:

–          tên_kiểu: kiểu dữ liệu muốn khai báo cho mảng

–          tên_biến: Tên của biến mảng, tên được đặt theo qui tắc đặt tên của C

–          spt1, spt2,…, sptn: số phần tương ứng của các chiều của mảng n chiều

Tham chiếu đến từng phần tử mảng 2 chiều

Sau khi mảng được khai báo, mỗi phần tử trong mảng 2 chiều đều có 2 chỉ số để tham chiếu, chỉ số hàng và chỉ số cột. Chỉ số hàng bắt đầu từ 0 đến số hàng – 1 và chỉ số cột bắt đầu từ 0 đến số cột – 1. Tham chiếu đến một phần tử trong mảng 2 chiều ia: ia[chỉ số hàng][chỉ số cột]

Nhập dữ liệu cho mảng 2 chiều

Mảng 2 chiều giống như một ma trận hai chiều, có kích thước bằng số dòng nhân số cột, để nhập dữ liệu cho các phần tử trong ma trận bạn cần duyệt qua từng phần tử trên từng hàng trong ma trận và đưa dữ liệu vào cho phần tử tương ứng như một biến thông thường

Ví dụ 2:

for (int i = 0; i < 5; i++) //vòng for có giá trị i chạy từ 0 đến 4 cho dòng

//tương ứng với mỗi dòng sẽ duyệt qua từng phần tử trong mỗi dòng tương ứng

for (int j = 0; j < 10; j++) //vòng for có giá trị j chạy từ 0 đến 9 cho cột

{

printf(“Nhap vao phan tu ia[%d][%d]: “, i + 1, j + 1);

scanf(“%d”, &ia[i][j]);

}

@Lưu ý:Phép lấy địa chỉ đối với các phần tử mảng hai chiều chỉ có thể áp dụng khi các phần tử mảng hai chiều có kiểu nguyên, còn lại thì phép lấy địa chỉ cho các phần tử mảng nhiều chiều là không thực hiện được.

Chúng ta sửa lại  ví dụ trên để có thể nhập được kiểu dữ liệu khác cho mảng hai chiều bằng cách dừng biến trung gian như sau:

float  fa[5][10], tg;

for (int i = 0; i < 5; i++)

for (int j = 0; j < 10; j++)

{

printf(“Nhap vao phan tu ia[%d][%d]: “, i + 1, j + 1);

scanf(“%f”, &tg);

fa[i][j]=tg;

}

Đọc dữ liệu từ mảng 2 chiều

Để đọc dữ liệu từ mảng hai chiều cần xác định là đọc tại phần tử thứ mấy trong mảng, tức cần biết chỉ số dòng và chỉ số cột của phần tử đó

Ví dụ 3: in giá trị các phần tử mảng 2 chiều ra màn hình.

for (int i = 0; i < 5; i++) //vòng for có giá trị i chạy từ 0 đến 4 cho dòng

{

for (int j = 0; j < 10; j++) //vòng for có giá trị j chạy từ 0 đến 9 cho cột

printf(“%3d “, ia[i][j]);

printf(“\n”); //xuống dòng để in hàng kế tiếp

}

Ví dụ 4: Viết chương trình nhập vào 1 ma trận số nguyên n x n. In ra ma trận vừa nhập vào và in theo chiều ngược lại của mỗi dòng .

#include <stdio.h>

#include <conio.h>

#define MAX 50;

void main(void)

{

int ia[MAX][MAX], i, j, n;

printf(“Nhap vao cap ma tran: “);

scanf(“%d”, &n);

//Nhap du lieu vao ma tran

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

{

printf(“Nhap vao phan tu ia[%d][%d]: “, i + 1, j + 1);

scanf(“%d”, &ia[i][j]);

}

//In ma tran

for (i = 0; i < n; i++)

{

for (j = 0; j < n; j++)

printf(“%3d “, ia[i][j]);

printf(“\n”); //xuống dòng để in hàng kế tiếp

}

printf(“\n”); //Tao khoang cach giua 2 ma tran

//In ma tran theo thu tu nguoc

for (i = 0; i< n; i++)

{

for (j = n-1; j >= 0 j–)

printf(“%3d “, ia[i][j]);

printf(“\n”); //xuống dòng để in hàng kế tiếp

}

getch();}

Bài tập thực hành

1. Viết hàm cho phép nhập vào một ma trận vuông kích thước NxN

2. Viết hàm tính tổng các phần tử trên đường chéo chính

3. Viết hàm tính tổng các phần tử trên đường chéo phụ

4. Viết hàm in ra tổng của từng dòng trong ma trận

5. Viết hàm in ra tổng của từng cột trong ma trận

6. Viết hàm kiểm tra ma trận có phải là ma trận đơn vị không

7. Viết hàm kiểm tra ma trận có phải là ma trận chéo không

8. Viết hàm kiểm tra ma trận có phải là ma trận tam giác trên không

9. Xây dựng menu và hàm main để gọi thực hiện các câu 1 đến câu 8

Leave a Reply