Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
462,65 KB
Nội dung
Chương KIỂU DỮ LIỆU MẢNG Hà Nội – 2014 Nội dung 12/12/17 Mảng chiều Mảng nhiều chiều Chương 5- Kiểu liệu mảng 2/56 5.1 Mảng chiều 12/12/17 Khái niệm Khai báo Truy xuất liệu kiểu mảng Một số toán mảng chiều Chương 5- Kiểu liệu mảng 3/56 Đặt vấn đề Ví dụ Chương trình cần lưu trữ số nguyên? => Khai báo biến int a1, a2, a3; Chương trình cần lưu trữ 100 số nguyên? => Khai báo 100 biến kiểu số nguyên! Người dùng muốn nhập n số nguyên? => Không thực được! Giải pháp 12/12/17 Kiểu liệu cho phép lưu trữ dãy số nguyên dễ dàng truy xuất Chương 5- Kiểu liệu mảng 4/56 5.1.1 Khái niệm 12/12/17 Khái niệm Là kiểu liệu có cấu trúc người lập trình định nghĩa Biểu diễn dãy biến có kiểu Ví dụ: dãy số nguyên, dãy ký tự… Kích thước xác định khai báo không thay đổi C định khối nhớ liên tục cho biến kiểu mảng Chương 5- Kiểu liệu mảng 5/56 5.1.2 Khai báo Khai báo tường minh []; [][]…[]; 12/12/17 , …, : số lượng phần tử chiều Lưu ý Phải xác định cụ thể (hằng) khai báo Mảng nhiều chiều: = N1*N2*…*Nn Bộ nhớ sử dụng = *sizeof() Một dãy liên tục có số từ đến -1 Chương 5- Kiểu liệu mảng 6/56 Khai báo tường minh (tt) Ví dụ int Mang1Chieu[10]; 9 Mang1Chieu int Mang2Chieu[3][4]; Mang2Chieu 12/12/17 Chương 5- Kiểu liệu mảng 7/56 10 11 Khai báo không tường minh Cú pháp Không tường minh (thông qua khai báo kiểu) typedef []; typedef []…[]; ; Ví dụ typedef int Mang1Chieu[10]; typedef int Mang2Chieu[3][4]; Mang1Chieu m1, m2, m3; Mang2Chieu m4, m5; 12/12/17 Chương 5- Kiểu liệu mảng 8/56 Số phần tử mảng Phải xác định cụ thể số phần tử lúc khai báo, không sử dụng biến thường int n1 = 10; int a[n1]; const int n2 = 20; int b[n2]; Nên sử dụng thị tiền xử lý #define để định nghĩa số phần tử mảng #define n1 10 #define n2 20 int a[n1]; // int a[10]; int b[n1][n2]; // int b[10][20]; 12/12/17 Chương 5- Kiểu liệu mảng 9/56 Khởi tạo giá trị cho mảng lúc khai báo Gồm cách sau Khởi tạo giá trị cho phần tử mảng int a[4] = {2912, 1706, 1506, 1904}; a 2912 1706 1506 1904 Khởi tạo giá trị cho số phần tử đầu mảng int a[4] = {2912, 1706}; a 12/12/17 2912 1706 0 Chương 5- Kiểu liệu mảng 10/56 5.2.3 Truy xuất đến phần tử Thông qua số [][] Ví dụ Cho mảng chiều sau: 1 int a[3][4]; 12/12/17 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] Chương 5- Kiểu liệu mảng 42/56 Gán giá trị cho mảng Không sử dụng phép gán thông thường mà phải gán trực tiếp phần tử = ; //sai [][chỉ số 2]=; Ví dụ int a[5][10], b[5][10]; b = a; // Sai int i, j; for (i = 0; i < 5; i++) for (j = 0; j < 10; j++) b[i][j] = a[i][j]; 12/12/17 Chương 5- Kiểu liệu mảng 43/56 5.2.4 Một số toán 12/12/17 Nhập mảng Xuất mảng Tìm kiếm phần tử mảng Kiểm tra tính chất mảng Tìm giá trị nhỏ nhất/lớn mảng … Chương 5- Kiểu liệu mảng 44/56 Nhập mảng chiều Yêu cầu Nhập vào từ bàn phím mảng a gồm m dòng, n cột Ý tưởng Khai báo mảng chiều có dòng tối đa MAXD, số cột tối đa MAXC (dùng #define để định nghĩa) 12/12/17 Nhập số dòng m số cột n thực mảng Nhập phần tử từ [0][0] đến [m-1][n-1] Chương 5- Kiểu liệu mảng 45/56 Nhập mảng chiều Đoạn chương trình nhập vào từ bàn phím mảng chiều a gồm m dòng, n cột #define MAXD 100 #define MAXC 100 int a[MAXD][MAXC]; int main() { printf(“Nhap so dong, so cot cua ma tran: ”); scanf(“%d%d”, &m, &n); int i, j; for (i=0; i