Bài giảng cơ sở lập trình - Trường học viên Ngân Hàng Hà Nội - Chương 5
lượt xem 6
download
Khai báo một mảng 2 chiều có dòng tối đa là MAXD, số cột tối đa là MAXC. (dùng #define để định nghĩa) Nhập số dòng m và số cột n thực sự của mảng. Nhập từng phần tử từ [0][0] đến [m-1][n-1].
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng cơ sở lập trình - Trường học viên Ngân Hàng Hà Nội - Chương 5
- Chương 5 KIỂU DỮ LIỆU MẢNG Khoa Hệ thống thông tin quản lý Hà Nội – 2013
- Nội dung 1 Mảng 1 chiều 2 Mảng nhiều chiều 11/7/13 Chương 5- Kiểu dữ liệu mảng 2/56
- 5.1 Mảng một chiều 1 Khái niệm 2 Khai báo 3 Truy xuất dữ liệu kiểu mảng 4 Một số bài toán trên mảng 1 chiều 11/7/13 Chương 5- Kiểu dữ liệu mảng 3/56
- Đặt vấn đề o Ví dụ n Chương trình cần lưu trữ 3 số nguyên? => Khai báo 3 biến int a1, a2, a3; n Chương trình cần lưu trữ 100 số nguyên? => Khai báo 100 biến kiểu số nguyên! n Người dùng muốn nhập n số nguyên? => Không thực hiện được! o Giải pháp n Kiểu dữ liệu mới cho phép lưu trữ một dãy các số nguyên và dễ dàng truy xuất. 11/7/13 Chương 5- Kiểu dữ liệu mảng 4/56
- 5.1.1 Khái niệm o Khái niệm n Là một kiểu dữ liệu có cấu trúc do người lập trình định nghĩa. n Biểu diễn một dãy các biến có cùng kiểu. Ví dụ: dãy các số nguyên, dãy các ký tự… n Kích thước được xác định ngay khi khai báo và không bao giờ thay đổi. n C luôn chỉ định một khối nhớ liên tục cho một biến kiểu mảng. 11/7/13 Chương 5- Kiểu dữ liệu mảng 5/56
- 5.1.2 Khai báo o Khai báo tường minh []; [][]…[]; n , …, : số lượng phần tử của mỗi chiều. o Lưu ý n Phải xác định cụ thể (hằng) khi khai báo. n Mảng nhiều chiều: = N1*N2*… *Nn n Bộ nhớ sử dụng = *sizeof() n Một dãy liên tục có chỉ số từ 0 đến -1 Chương 5- Kiểu dữ liệu mảng 6/56
- Khai báo tường minh (tt) o Ví dụ int Mang1Chieu[10]; 0 1 2 3 4 5 6 7 8 9 Mang1Chieu int Mang2Chieu[3][4]; 0 1 2 3 4 5 6 7 8 9 10 11 Mang2Chieu 0 1 2 11/7/13 Chương 5- Kiểu dữ liệu mảng 7/56
- Khai báo không tường minh o Cú pháp n Không tường minh (thông qua khai báo kiểu) typedef []; typedef []…[]; ; o Ví dụ typedef int Mang1Chieu[10]; typedef int Mang2Chieu[3][4]; Mang1Chieu m1, m2, m3; Mang2Chieu m4, m5; 11/7/13 Chương 5- Kiểu dữ liệu mảng 8/56
- Số phần tử của mảng o Phải xác định cụ thể số phần tử ngay lúc khai báo, không được sử dụng biến hoặc hằng thường int n1 = 10; int a[n1]; const int n2 = 20; int b[n2]; o Nên sử dụng chỉ 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]; 11/7/13 Chương 5- Kiểu dữ liệu mảng 9/56
- Khởi tạo giá trị cho mảng lúc khai báo o Gồm các cách sau n Khởi tạo giá trị cho mọi phần tử của mảng int a[4] = {2912, 1706, 1506, 1904}; 0 1 2 3 a 2912 1706 1506 1904 n Khởi tạo giá trị cho một số phần tử đầu mảng int a[4] = {2912, 1706}; 0 1 2 3 a 2912 1706 11/7/13 Chương 5- Kiểu dữ liệu mảng 10/56
- Khởi tạo giá trị cho mảng lúc khai báo o Gồm các cách sau n Khởi tạo giá trị 0 cho mọi phần tử của mảng int a[4] = {0}; 0 1 2 3 a 0 0 0 0 n Tự động xác định số lượng phần tử int a[] = {2912, 1706, 1506, 1904}; 0 1 2 3 a 2912 1706 1506 1904 11/7/13 Chương 5- Kiểu dữ liệu mảng 11/56
- 5.1.3 Truy xuất đến một phần tử o Thông qua chỉ số [] o Ví dụ 0 1 2 3 n Cho mảng như sau int a[4]; n Các truy xuất o Hợp lệ: a[0], a[1], a[2], a[3] o Không hợp lệ: a[-1], a[4], a[5], … => Cho kết thường không như mong muốn! 11/7/13 Chương 5- Kiểu dữ liệu mảng 12/56
- Gán dữ liệu kiểu mảng o Không được sử dụng phép gán thông thường mà phải gán trực tiếp giữa các phần tử tương ứng = ; //sai [] = ; o Ví dụ #define MAX 3 typedef int MangSo[MAX]; MangSo a = {1, 2, 3}, b; b = a; // Sai for (int i = 0; i < 3; i++) b[i] = a[i]; 11/7/13 Chương 5- Kiểu dữ liệu mảng 13/56
- Một số lỗi thường gặp o Khai báo không chỉ rõ số lượng phần tử n int a[]; int a[100]; o Số lượng phần tử liên quan đến biến hoặc hằng n int n1 = 10; int a[n1]; o Khởi tạo cách biệt với khai báo n int a[4]; a = {2912, 1706, 1506, 1904}; int a[4] = {2912, 1706, 1506, 1904}; o Chỉ số mảng không hợp lệ n int a[4]; n a[-1] = 1; a[10] = 0; 11/7/13 Chương 5- Kiểu dữ liệu mảng 14/56
- 5.1.4 Một số bài toán trên mảng 1 chiều o Nhập mảng o Xuất mảng o Tìm kiếm một phần tử trong mảng o Tìm giá trị nhỏ nhất/lớn nhất của mảng o Sắp xếp mảng giảm dần/tăng dần o Thêm/Xóa/Sửa một phần tử vào mảng 11/7/13 Chương 5- Kiểu dữ liệu mảng 15/56
- Nhập mảng o Đoạn chương trình nhập vào từ bàn phím một mảng 1 chiều a gồm n phần tử #define MAXN 100 int a[MAXN]; ... printf(“Nhap so luong phan tu n: ”); scanf(“%d”, &n); for (int i = 0; i < n; i++) { printf(“Nhap phan tu thu %d: ”, i); scanf(“%d”, &a[i]); } 11/7/13 Chương 5- Kiểu dữ liệu mảng 16/56
- Xuất mảng o Đoạn chương trình in ra màn hình một mảng 1 chiều a gồm n phần tử printf(“Noi dung cua mang la: ”); for (int i = 0; i < n; i++) printf(“%d ”, a[i]); printf(“\n”); /*Đưa con trỏ màn hình xuống dòng tiếp theo */ 11/7/13 Chương 5- Kiểu dữ liệu mảng 17/56
- Hàm có mảng là tham số o Khai báo n Tham số kiểu mảng trong khai báo hàm giống như khai báo biến mảng void SapXepTang(int a[100]); n Tham số kiểu mảng truyền cho hàm chính là địa chỉ của phần tử đầu tiên của mảng Có thể bỏ số lượng phần tử hoặc sử dụng con trỏ. o o Mảng có thể thay đổi nội dung sau khi thực hiện hàm. void SapXepTang(int a[]); void SapXepTang(int *a); void SapXepTang(int tử thực sự truyền qua n Số lượng phần biến khác a[100], int n); void SapXepTang(int a[], int n); void SapXepTang(int *a, int n); 11/7/13 Chương 5- Kiểu dữ liệu mảng 18/56
- Hàm nhập mảng void NhapMang(int a[], int &n) { printf(“Nhap so luong phan tu n: ”); scanf(“%d”, &n); for (int i = 0; i < n; i++) { printf(“Nhap phan tu thu %d: ”, i); scanf(“%d”, &a[i]); } } 11/7/13 Chương 5- Kiểu dữ liệu mảng 19/56
- Hàm xuất mảng void XuatMang(int a[], int n) { printf(“Noi dung cua mang la: ”); for (int i = 0; i < n; i++) printf(“%d ”, a[i]); printf(“\n”); } 11/7/13 Chương 5- Kiểu dữ liệu mảng 20/56
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cơ sở lập trình - Chương 2: Các phần tử cơ bản của ngôn ngữ C
59 p | 149 | 30
-
Bài giảng Cơ sở lập trình - Chương 6: Kiểu con trỏ
50 p | 123 | 23
-
Bài giảng Cơ sở lập trình - Chương 1: Các khái niệm cơ bản về lập trình
27 p | 177 | 22
-
Bài giảng Cơ sở lập trình - Chương 3: Các cấu trúc điều khiển
56 p | 144 | 22
-
Bài giảng Cơ sở lập trình - Chương 4: Chương trình con
42 p | 134 | 21
-
Bài giảng Cơ sở lập trình nâng cao - ĐH Ngoại Ngữ TP.HCM
337 p | 109 | 19
-
Bài giảng Cơ sở lập trình 2: Chương 1 - Lê Quý Tài
46 p | 124 | 16
-
Bài giảng Cơ sở lập trình: Ngôn ngữ lập trình C/C++ - Trịnh Tấn Đạt
142 p | 19 | 9
-
Bài giảng Cơ sở lập trình 1: Chương 1 - Lê Quý Tài
27 p | 148 | 8
-
Bài giảng Cơ sở lập trình 1: Giới thiệu môn học - Lê Quý Tài
9 p | 135 | 8
-
Bài giảng Cơ sở lập trình: Các cấu trúc điều khiển (Control statements) - Trịnh Tấn Đạt
78 p | 28 | 7
-
Bài giảng Cơ sở lập trình Csharp: Bài 7 - Làm quen với các khái niệm OOP
124 p | 91 | 6
-
Bài giảng Cơ sở lập trình: Giới thiệu môn học - Trịnh Tấn Đạt
15 p | 19 | 6
-
Bài giảng Cơ sở lập trình: Chương 1 - Lê Viết Mẫn
55 p | 74 | 5
-
Bài giảng Cơ sở lập trình - Giới thiệu môn học
9 p | 147 | 5
-
Bài giảng Cơ sở lập trình Csharp: Bài 4 - Cấu trúc lặp
17 p | 81 | 4
-
Bài giảng Cơ sở lập trình - Trường ĐH Thương mại
108 p | 52 | 3
-
Bài giảng Cơ sở lập trình: Chương 1 - Khái niệm lập trình
428 p | 19 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn