Bài giảng Ngôn ngữ lập trình - Bài 2b: Mảng - Lý Anh Tuấn

pdf 37 trang huongle 6720
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Ngôn ngữ lập trình - Bài 2b: Mảng - Lý Anh Tuấn", để 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:

  • pdfbai_giang_ngon_ngu_lap_trinh_bai_2b_mang_ly_anh_tuan.pdf

Nội dung text: Bài giảng Ngôn ngữ lập trình - Bài 2b: Mảng - Lý Anh Tuấn

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. Ví dụ về mảng 7
  8. Ví dụ về mảng 8
  9. 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
  10. 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
  11. 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
  12. Mảng trong bộ nhớ 12
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. Ví dụ mảng là đối số 18
  19. 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
  20. 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
  21. 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
  22. Mảng được nhập giá trị một phần 22
  23. Mảng được nhập giá trị một phần 23
  24. Mảng được nhập giá trị một phần 24
  25. Mảng được nhập giá trị một phần 25
  26. Mảng được nhập giá trị một phần 26
  27. Tìm kiếm với mảng 27
  28. Tìm kiếm với mảng 28
  29. Tìm kiếm với mảng 29
  30. Tìm kiếm với mảng 30
  31. Sắp xếp mảng 31
  32. Sắp xếp mảng 32
  33. Sắp xếp mảng 33
  34. Sắp xếp mảng 34
  35. Sắp xếp mảng 35
  36. 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
  37. 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