Ngôn ngữ lập trình - Bài 2B: Mảng
Bạn đang xem 20 trang mẫu của tài liệu "Ngôn ngữ lập trình - Bài 2B: Mảng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- ngon_ngu_lap_trinh_bai_2b_mang.pdf
Nội dung text: Ngôn ngữ lập trình - Bài 2B: Mảng
- NGÔN NGỮ LẬP TRÌNH Bài 2b: Mảng Giảng viên: Lý Anh Tu ấn Email: tuanla@tlu.edu.vn
- Nội dung 1. Giới thiệu mảng ◦ Khai báo và tham chiếu mảng ◦ Vòng lặp for và mảng ◦ Mảng trong bộ nhớ 2. Mảng trong hàm ◦ Mảng là tham số hàm, là giá trị trả về 3. Lập trình với mảng ◦ Mảng được nhập giá trị một phần ◦ Tìm kiếm ◦ Sắp xếp 4. Mảng nhiều chiều 2
- Giới thiệu mảng Định nghĩa mảng ◦ Một tập dữ liệu có cùng kiểu Là kiểu dữ liệu kết hợp đầu tiên ◦ int, float, double, char là các kiểu dữ liệu đơn giản Sử dụng cho các danh sách: ◦ Điểm kiểm tra, nhiệt độ, tên, vân vân ◦ Tránh khai báo nhiều biến đơn giản ◦ Có thể điều khiển “danh sách” như một thực thể 3
- Khai báo mảng Khai báo mảng cấp phát bộ nhớ int score[5]; ◦ Khai báo mảng 5 số nguyên tên là score ◦ Tương tự như khai báo 5 biến: int score[0], score[1], score[2], score[3], score[4] Các phần tử độc lập được gọi là ◦ Biến có chỉ số ◦ Các phần tử mảng ◦ Giá trị trong ngoặc vuông được gọi là chỉ số, được đánh số từ 0 đến size - 1 4
- Truy cập mảng Truy cập bằng cách sử dụng chỉ số ◦ cout << score[3]; Lưu ý hai trường hợp sử dụng cặp dấu ngoặc vuông ◦ Trong khai báo, là kích thước của mảng ◦ Ở chỗ khác, là một chỉ số Chỉ số không cần phải là một hằng nguyên ◦ score[n+1] = 99; //nếu n là 2: score[3] 5
- Sử dụng mảng Là kỹ thuật lưu trữ hiệu quả Có thể nêu ra các yêu cầu: ◦ Thực hiện một công việc với biến chỉ số i trong đó i được tính toán bởi chương trình ◦ Hiển thị tất cả các phần tử của mảng score ◦ Nhập giá trị cho các phần tử của mảng score ◦ Tìm giá trị lớn nhất trong mảng score ◦ Tìm giá trị bé nhất trong mảng score 6
- Ví dụ về mảng 7
- Ví dụ về mảng 8
- Vòng lặp for với mảng Vòng lặp đếm tự nhiên ◦ Rất phù hợp với việc đếm các phần tử của một mảng Ví dụ: for (idx = 0; idx<5; idx++) { cout << score[idx] << "off by " << max – score[idx] << endl; } ◦ Biến điều khiển vòng lặp (idx) đếm từ 0 – 5 9
- Lỗi thường gặp với mảng Chỉ số mảng luôn bắt đầu bằng 0 0 là số đầu tiên với các nhà khoa học máy tính C++ cho phép vượt ra ngoài phạm vi mảng ◦ Không dự đoán được kết quả ◦ Trình biên dịch không phát hiện ra những lỗi này Lưu ý không vượt ra ngoài phạm vi mảng VD: Khai báo mảng ◦ double temperature[24]; // 24 là kích thước mảng ◦ Lỗi thường gặp: temperature[24] = 5; // chỉ số 24 là nằm ngoài phạm vi mảng 10
- Mảng trong bộ nhớ Các biến đơn giản được cấp phát bộ nhớ bằng một địa chỉ Khai báo mảng cấp phát bộ nhớ cho toàn bộ mảng Được cấp phát liên tục ◦ Các địa chỉ được cấp phát liên tiếp nhau ◦ Cho phép tính địa chỉ của các phần tử mảng thông qua chỉ số 11
- Mảng trong bộ nhớ 12
- Khởi tạo mảng Các biến đơn giản có thể được khởi tạo khi khai báo: int price = 0; // 0 là giá trị khởi tạo Mảng cũng có thể được khởi tạo: int children[3] = {2, 12, 1}; ◦ Tương đương với: int children[3]; children[0] = 2; children[1] = 12; children[2] = 1; 13
- Mảng khởi tạo tự động Nếu tập có ít giá trị hơn kích thước mảng: ◦ Gán từ phần tử đầu tiên ◦ Gán các phần tử còn lại bằng giá trị 0 trong kiểu dữ liệu của mảng Nếu không chỉ rõ kích thước mảng ◦ Khai báo mảng có kích thước dựa trên số lượng giá trị khởi tạo ◦ Ví dụ: int b[] = {5, 12, 11}; // cấp phát mảng b kích thước là 3 14
- Mảng trong hàm Làm đối số của hàm ◦ Biến có chỉ số: Một phần tử mảng có thể là tham số hàm ◦ Toàn bộ mảng: Tất cả các phần tử mảng có thể được truyền như một thực thể Làm giá trị trả về từ hàm 15
- Biến có chỉ số là đối số Vận hành như biến đơn giản thuộc kiểu dữ liệu của mảng Cho khai báo hàm sau đây: void myFunction(double par1); Và các khai báo: int i; double n, a[10]; Có thể viết các lời gọi hàm sau đây: myFunction(i); // i được chuyển thành double myFunction(a[3]); // a[3] là double myFunction(n); // n là double 16
- Toàn bộ mảng là đối số Tham số hình thức là toàn bộ mảng ◦ Đối số được truyền trong lời gọi hàm là tên mảng ◦ Được gọi là tham số mảng Cũng truyền kích thước của mảng ◦ Thường được đặt là tham số thứ hai ◦ Là tham số hình thức kiểu int 17
- Ví dụ mảng là đối số 18
- Ví dụ mảng là đối số Xét ví dụ trước: Trong định nghĩa hàm main(), xét lời gọi sau: int score[5], numberOfScores = 5; fillup(score, numberOfScores); ◦ Tham số thứ nhất là toàn bộ mảng ◦ Tham số thứ hai là giá trị nguyên Lưu ý không có cặp dấu ngoặc vuông trong đối số mảng Sẽ thực sự truyền địa chỉ bắt đầu của mảng (địa chỉ của phần tử đầu tiên) 19
- Bổ từ const cho tham số mảng Tham số mảng thực sự truyền địa chỉ của phần tử đầu tiên ◦ Tương tự như truyền tham biến Hàm sau đó có thể sửa đổi mảng ◦ Đôi khi chúng ta không mong muốn điều này Để bảo vệ nội dung mảng khỏi việc sửa đổi ◦ Sử dụng bổ từ const trước tham số mảng 20
- Mảng được nhập giá trị một phần Khó biết chính xác kích thước mảng cần thiết Phải khai báo kích thước lớn nhất có thể có Thêm biến cần thiết để theo dõi dữ liệu đúng trong mảng: ◦ int numberUsed; ◦ Theo dõi số phần tử hiện có trong mảng 21
- Mảng được nhập giá trị một phần 22
- Mảng được nhập giá trị một phần 23
- Mảng được nhập giá trị một phần 24
- Mảng được nhập giá trị một phần 25
- Mảng được nhập giá trị một phần 26
- Tìm kiếm với mảng 27
- Tìm kiếm với mảng 28
- Tìm kiếm với mảng 29
- Tìm kiếm với mảng 30
- Sắp xếp mảng 31
- Sắp xếp mảng 32
- Sắp xếp mảng 33
- Sắp xếp mảng 34
- Sắp xếp mảng 35
- Mảng nhiều chiều Mảng có nhiều hơn một chỉ số ◦ char page[30][100]; ◦ Có dạng: page[0][0], page[0][1], , page[0][99] page[1][0], page[1][1], , page[1][99] page[29][0], page[29][1], , page[29][99] C++ cho phép số lượng chỉ số tùy ý ◦ Thường không vượt quá hai 36
- Tóm tắt Mảng là một tập dữ liệu cùng kiểu Biến có chỉ số của mảng được sử dụng giống như các biến đơn giản Vòng lặp for là cách tự nhiên để duyệt mảng Lưu ý không vượt ra ngoài phạm vi mảng Tham số mảng: tương tự như truyền tham biến Các phần tử mảng được lưu trữ liên tiếp Mảng được nhập giá trị một phần cần biến theo dõi Tham số mảng hằng: ngăn sửa đổi nội dung mảng Mảng nhiều chiều: mảng của các mảng 37