30/09/2018, 16:29

lập trình C : Con trỏ và mảng 2 chiều

Con trỏ và mảng hai chiều (nhiều chiều)

  1. Phép cộng địa chỉ trong mảng 2 chiều.

Float a[2][3]; // khai báo một mảng 2 chiều gồm 2 hàng, 3 cột
A[0][0] A[0][1] A[0][2]
A[1][0] A[1][1] A[1][2]

Cách biểu diễn mảng 2 chiều trên ô nhớ máy tính
A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2]
1 2 3 4 5 6

C quan niệm mảng hai chiều là mảng(một chiều) của mảng
A trỏ tới phần thứ a[0][0]
A+1 trỏ tới phần tử thứ a[0][1]
A+2 trỏ tới phần tử thứ a[0][2]
A+3 trỏ tới phần từ thứ a[1][0]

  1. Con trỏ và mảng 2 chiều.

Float p, a[2][3];
P=(float
)a; // gán mảng 2 chiều a cho con trỏ p bằng cách ép kiểu con trỏ.

Sau khi gán thì :
P trỏ tới a[0][0];
P+1 trỏ tới a[0][1]
P+2 trỏ tới a[0][2]
P+3 trỏ tới a[1][0]

• Không được gán mảng 2 chiều cho một con trỏ như sau:

p=a; cách này là sai

  1. Mảng con trỏ.

Mảng con trỏ là một mảng chứa tập hợp các con trỏ cùng một kiểu (int, float , double,char, bản ghi,…).

Cú pháp:

Float *a[10]; // khai báo một mảng con trỏ. Gồm 10 con trỏ.

A[0],a[1],…a[9]; là 10 con trỏ.

Ta cũng có thể coi a là mảng 2 chiều với số hàng chưa xác định trước và số cột là 10.

Bài tập bắt buộc
Bài 1: nhập một mảng hai chiều (m x n) từ bàn phím.

• Tìm giá trị lớn nhất và nhỏ nhất trên mỗi cột.
• Tìm các số chia hết cho 2 trong mảng có cùng chỉ số hàng, chỉ số cột.

Bài 2: nhập một mảng hai chiều (m x n) từ bàn phím.

• Trong mảng a có bao nhiêu phần tử bằng phần tử lớn nhất.
• Tìm số nguyên tố lớn nhất trên mỗi hàng, và chỉ số hàng, cột của chúng.

Bài tập bổ xung
Bài 3: sắp xếp mảng a[n,m] sao cho các phần tử có giá trị tăng dần khi đi từ trái qua phải, từ trên xuống dưới.
Ví dụ:

3 5 1 6
1 1 2 4
2 4 3 3

Sau khi sắp xếp

1 1 2 4
1 3 3 4
2 3 5 6

Bài 4: đọc vào từ bàn phím toạ độ Đề các trong mặt phẳng của 4 điểm A,B,C,D.
Kiểm tra xem 4 điểm này có tạo thành một tứ giác lồi không. Nếu có thì tính diện tích của nó.

Bài 5: cho mảng a (n x m) phần tử a[i][j] gọi là phần tử yên ngựa nếu nó là phần tử lớn nhất trong hàng i và là phần tử nhỏ nhất trong cột j, hoặc nó là phần tử nhỏ nhất trong hàng i và lớn nhất trong cột j. In tất cả các phần tử yên ngựa của mảng a và chỉ số của các phần tử đó.

Nguyễn Minh Dũng viết 18:43 ngày 30/09/2018

This topic is now unlisted. It will no longer be displayed in any topic lists. The only way to access this topic is via direct link.

Bài liên quan
0