Bài giảng Kỹ thuật lập trình - Chương 4: Mảng

pptx 28 trang cucquyet12 3950
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 4: 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:

  • pptxbai_giang_ky_thuat_lap_trinh_chuong_4_mang.pptx

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 4: Mảng

  1. Chương 4: Mảng (array) 8/14/2021 1
  2. Agenda  Khái niệm  Mảng 1 chiều  Mảng nhiều chiều 8/14/2021 2
  3. 1. Khái niệm  Mảng là một tập hợp các biến có cùng kiểu dữ liệu nằm liên tiếp nhau trong bộ nhớ và được tham chiếu bởi một tên chung (tên mảng).  Số lượng các phần tử trong mảng được gọi là kích thước của mảng  Kích thước của mảng là cố định và phải được xác định trước 8/14/2021 3
  4. 1. Khái niệm  Mỗi phần tử của mảng được tham chiếu thông qua chỉ mục (index).  Phần tử đầu tiên có chỉ mục là 0  Phần tử cuối có chỉ mục là n-1. 8/14/2021 4
  5. 2. Mảng 1 chiều  Khai báo mảng 1 chiều: type arrayName [ arraySize ]; ◦ type: kiểu dữ liệu của mảng ◦ arrayName: tên mảng ◦ arraySize: kích thước của mảng  Ví dụ: ◦ int c[12]; // c là 1 mảng số nguyên có 12 phần tử ◦ int x[27], // x là 1 mảng số nguyên có 27 phần tử b[100];// b là 1 mảng số nguyêncó 100 phần tử 8/14/2021 5
  6. 2. Mảng 1 chiều  Để truy xuất 1 phần tử trong mảng, ta dùng tên mảng và chỉ mục của phần tử được đặt trong cặp dấu [].  Ví dụ: Để truy xuất phần tử thứ i trong mảng a => a[i] 8/14/2021 6
  7. 2. Mảng 1 chiều  Mỗi phần tử trong mảng là 1 biến thông thường.  int num[3];  num[0] = 2;  num[1] = num[0] + 3  num[2] = num[0] + num[1];  cout << num[1]; 8/14/2021 7
  8. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 1: Khởi tạo 1 mảng 10 phần tử. Giá trị của các phần tử = 0 #include #include void main() { int a[10]; for(int i=0 ; i < 10 ; i++) a[i] = 0 ; } 8/14/2021 8
  9. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 2: Khởi tạo giá trị các phần tử trong mảng ngay khi khai báo mảng #include #include void main() { int a[5] = { 5, 6, 7, 8, 9 }; } 8/14/2021 9
  10. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 3: Khai báo mảng mà ko xác định trước số phần tử trong mảng int a[] = { 5, 6, 7, 8, 9 }; Note: Chương trình sẽ tự động đếm số phần tử của mảng từ các giá trị được liệt kê trong phần khai báo phần tử mảng – các giá trị được khai báo trong cặp dấu ngoặc {} và được phân cách bởi dấu “,” 8/14/2021 10
  11. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 4: Khai báo mảng có 5 phần tử. Nhập giá trị cho các phần tử trong mảng và tính tổng các phần tử trong mảng. #include void main() { const int n = 5; int a[n]; int sum = 0; for (int i=0; i >a[i]; for (i=0; i<n; i++) sum += a[i]; cout<<“Tong cac phan tu trong mang = ”<<sum; } 8/14/2021 11
  12. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 5: Khai báo mảng có 10 phần tử, giá trị của các phần tử được gán theo thứ tự từ 1 → 10 #include #include void main() { const int arraySize = 10; int a[arraySize]; for (int i = 0; i< arraySize; i++) a[i]=i+1; for (i=0; i<arraySize; i++) cout <<setw(3) << a[i] ; } 8/14/2021 12
  13. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 6: Khai báo 3 mảng a,b,c kiểu số nguyêncó 10 phần tử. ◦ Giá trị của các phần tử trong mảng 1 là các số lẻ theo thứ tự từ 1→19. ◦ Giá trị của các phần tử trong mảng 2 là các số chẵn theo thứ tự từ 2→20. ◦ c[i] = a[i] + b[i] 8/14/2021 13
  14. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 7: Nhập vào 1 số bất kỳ. Tìm trong mảng a vị trí của phần tử có giá trị bằng với số vừa nhập #include #include void main() { randomize(); const int arraySize = 10; int a[arraySize], num; for (int i = 0; i > num; for (i=0; i<arraySize; i++) if (a[i] == num) cout <<num<< “o vi tri thu ” << i << “trong mang” else cout << “Khong tim thay ”; } 8/14/2021 14
  15. 2. Mảng 1 chiều – Một số ví dụ  Ví dụ 8: Khai báo 1 mảng a kiểu số nguyên có 20 phần tử. Tìm phần tử lớn nhất trong mảng & xuất ra vị trí của phần tử này. 8/14/2021 15
  16. 3. Mảng nhiều chiều  C hỗ trợ mảng nhiều chiều. Dạng đơn giản nhất của mảng nhiều chiều là mảng 2 chiều. Ta có thể xem mảng 2 chiều là một ma trận gồm các hàng và cột.  Mảng 2 chiều thực chất là mảng của những mảng 1 chiều. 8/14/2021 16
  17. 3. Mảng 2 chiều  Ma trận a m x n là 1 bảng chữ nhật gồm có m * n phần tử được viết thành m dòng (mỗi dòng n phần tử) và n cột (mỗi cột m phần tử).  Ví dụ: ma trận a 4 x 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8/14/2021 17
  18. 3. Mảng 2 chiều  Khai báo mảng 2 chiều type arrayName[rows][columns]; ◦ type : Kiểu dữ liệu của mảng ◦ arrayName: tên mảng ◦ rows: số hàng ◦ columns: số cột 8/14/2021 18
  19. 3. Mảng 2 chiều  Ví dụ 1: Khai báo 1 mảng 2 chiều a kiểu int có 3 hàng và 4 cột, giá trị các phần tử mảng do người dùng nhập vào từ bàn phím. int a[3][4]; 8/14/2021 19
  20. 3. Mảng 2 chiều  Ví dụ 2: Khai báo 1 mảng 2 chiều kiểu số nguyên có 4 hàng & 4 cột. Khởi tạo giá trị cho các phần tử trong mảng theo bảng sau & xuất kết quả lên màn hình. 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 8/14/2021 20
  21. 3. Mảng 2 chiều #include #include void main() { const int n=4; int a[n][n],i,j; for (i = 0;i<n;i++) for (j = 0;j<n;j++) a[i][j]=j; for (i = 0;i<n;i++) { for (j = 0;j<n;j++) cout<<setw(3)<<a[i][j]; cout<<"\n"; } } 8/14/2021 21
  22. 3. Mảng 2 chiều  Có thể thực hiện việc khai báo và khởi tạo các phần tử trong mảng 2 chiều đồng thời với nhau. type arrayName[rows][columns] = { {value1,value2, ,valuen}, {value1,value2, ,valuen}, { }, {value1,value2, ,valuen}};  Ví dụ: int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; 8/14/2021 22
  23. 3. Mảng 2 chiều  Lưu ý: Khi khởi tạo các phần tử mảng đồng thời với việc khai báo mảng, nếu số phần tử trên 1 hàng không được khởi tạo đủ thì chương trình sẽ tự động gán giá trị 0 cho những phần tử chưa được khởi tạo giá trị này. ◦ Ví dụ: int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; ◦ b[ 0 ][ 0 ] = 1 ◦ b[ 0 ][ 1 ] = 0 ◦ b[ 1 ][ 0 ] = 3 ◦ b[ 1 ][ 1 ] = 4 8/14/2021 23
  24. 3. Mảng 2 chiều  Để truy xuất phần tử ở dòng i, cột j trong mảng, ta thực hiện như sau: arrayName[i][j]  Ví dụ 2: Khởi tạo 3 mảng 2 chiều lần lượt như sau int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; int array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; for ( int i = 0; i < 2; i++ ) { for ( int j = 0; j < 3; j++ ) cout << a[ i ][ j ] << ' '; cout << endl; } 8/14/2021 24
  25. 3. Mảng 2 chiều  Output  Mảng a: 1 2 3 4 5 6  Mảng b: 1 2 3 4 5 0  Mảng c: 1 2 0 4 0 0 8/14/2021 25
  26. 3. Mảng 2 chiều  Ví dụ 3: Khai báo mảng 2 chiều 4x4 kiểu số nguyên với giá trị của các phần tử do người dùng nhập vào. Tính tổng của từng hàng và của từng cột trong mảng 2 chiều. 8/14/2021 26
  27. 3. Mảng 2 chiều  Ví dụ 4: Khai báo mảng 2 chiều kiểu số nguyên với giá trị của các phần tử được khởi tạo ngẫu nhiên. Nhập vào 1 số nguyên bất kỳ. Tìm xem số này xuất hiện ở những vị trí nào trong mảng & xuất hiện bao nhiêu lần.  Ví dụ 5: Khai báo mảng 2 chiều 3x4 kiểu số nguyên. Viết chương trình để các phần tử trong mảng có giá trị như sau: 2 4 8 16 32 64 128 256 512 1024 2048 5096 8/14/2021 27
  28. 3. Mảng 2 chiều  Ví dụ 6: Khai báo mảng 2 chiều kiểu số nguyên với giá trị của các phần tử được khởi tạo ngẫu nhiên tăng dần. 8/14/2021 28