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)
- 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]
…
- 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
- 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ử đó.
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.