Bài giảng Phương pháp lập trình - Chương 4: Mảng (Array)

1. Khái niệm 2. Mảng một chiều 3. Một số bài toán trên mảng một chiều 4. Mảng hai chiều 5. Một số bài toán trên mảng hai chiều 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ó một tên chung gọi là tên mảng Mỗi phần tử của mảng được đánh chỉ mục (index): phần tử đầu tiên được đánh số là 0,… Nếu mảng có n phần tử thì phần tử đầu tiên có chỉ mục là 0 và phần tử cuối có chỉ mục là n-1

ppt46 trang | Chia sẻ: candy98 | Lượt xem: 431 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Phương pháp lập trình - Chương 4: Mảng (Array), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 4 MẢNG (Array)Nội dung trình bàyKhái niệmMảng một chiềuMột số bài toán trên mảng một chiềuMảng hai chiềuMột số bài toán trên mảng hai chiều21. Khái niệmMả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ó một tên chung gọi là tên mảngMỗi phần tử của mảng được đánh chỉ mục (index): phần tử đầu tiên được đánh số là 0,Nếu mảng có n phần tử thì phần tử đầu tiên có chỉ mục là 0 và phần tử cuối có chỉ mục là n-1a31. Khái niệm (tt)Muốn truy cập phần tử nào của mảng thì phải dựa vào chỉ mục của nó, cú pháp: tên_mảng[chỉ mục]Ví dụ: a[0] = 10; cout>num[0]; cout#include #define N 10 // kich thuoc toi da cua mangvoid main() { int a[N]; // nhập mảngfor( int i=0; i#include #define N 20 // kich thuoc toi davoid NhapMang( int a[ ], int n );void XuatMang( int a[ ], int n );void main() { int sl, a[N];cout>sl;// gọi hàm để nhập mảngNhapMang(a, sl);// gọi hàm để xuất mảngcout> a[i];}}void XuatMang( int a[ ], int n ){for( int i=0; i>n; do{ np[j]= n%2; j++; n = n/2; }while(n>0); cout0 ; i-- ) cout14Ví dụ: Sử dụng hàm tạo số ngẫu nhiên#include #include #include #define N 20 // kich thuoc toi davoid NhapMang( int a[], int n );void XuatMang( int a[], int n );void main() { int sl, a[N];cout>sl;// gọi hàm để nhập mảngNhapMang(a, sl);// gọi hàm để xuất mảngcoutHàm rand() trả về 1 số nguyên ngẫu nhiên có giá trị trong đoạn [0, RAND_MAX]RAND_MAX là một hằng số được định nghĩa trong tập tin cstdlib, nhưng ít nhất bằng 32767Để tránh phát sinh số quá lớn, thường dùng: rand()% 100  phát sinh số thuộc [0, 99] rand()% 100 + 1  phát sinh số thuộc [1, 100] rand()% 30 + 1985  phát sinh số thuộc [1985, 2014]Để tránh lặp lại bộ số giống nhau mỗi lần chạy chương trình, dùng thêm lệnh: srand ( time(NULL) ), hàm time thuộc thư viện 16Ví dụ: Sử dụng hàm tạo số ngẫu nhiên#include #include #include #include #define N 20 // kich thuoc toi davoid NhapMang( int a[], int n );void XuatMang( int a[], int n );void main() { int sl, a[N];cout>sl;// gọi hàm để nhập mảngNhapMang(a, sl);// gọi hàm để xuất mảngcout a[j] thì đổi chỗ a[i], a[j]128526415112345670ij2Nếu a[i] > a[j] thì đổi chỗ a[i], a[j]Sắp xếp mảng tăng dần: Minh họa27Sắp xếp mảng tăng dần: Minh họa28212856415112345670ij4Nếu a[i] > a[j] thì đổi chỗ a[i], a[j]Sắp xếp mảng tăng dần: Minh họa29241286515112345670ij5Nếu a[i] > a[j] thì đổi chỗ a[i], a[j]Sắp xếp mảng tăng dần: Minh họa30245681215112345670Nếu a[i] > a[j] thì đổi chỗ a[i], a[j]Sắp xếp mảng tăng dầnGiả sử a là tên mảng, n là số phần tử for ( int i = 0; i a[j] ) { t = a[i] ; a[i] = a[j]; a[j ] = t ; }31Nội dung trình bàyKhái niệmMảng một chiềuMột số bài toán trên mảng một chiềuMảng hai chiềuMột số bài toán trên mảng hai chiều324. Mảng hai chiều: Giới thiệuC/C++ hỗ trợ mảng nhiều chiềuDạng đơn giản nhất của mảng nhiều chiều là mảng hai chiềuMảng hai chiều thực chất là mảng của những mảng một chiềuCó thể xem mảng hai chiều là một ma trận gồm các dòng và các cột334. Mảng hai chiều: Khai báoCú pháp khai báo mảng:rowSize: số dòngcolumnSize: số cộtVí dụ: int a[3][4];type arrayName[rowSize][columnSize];344. Mảng hai chiều: Lưu ýMảng phải được khai báo tường minh số dòng, số cộtĐể truy cập phần tử mảng tại dòng i cột j, sử dụng cú pháp: tên_mảng[i][j]Để duyệt tất cả các phần tử trong mảng hai chiều, thường dùng 2 vòng lặp for: for( int i=0; i#include #define M 20 // so dong toi da#define N 10 // so cot toi davoid NhapMang( int a[][N], int d, int c);void XuatMang( int a[][N], int d, int c);void main() { int d, c, a[M][N];cout>d;cout>c;// gọi hàm để nhập mảngNhapMang(a, d, c);// gọi hàm để xuất mảngcout>a[i][j]; }}void XuatMang( int a[][N], int d, int c ){for( int i=0; i#include #include #include #define M 20#define N 10void NhapMang( int a[][N], int d, int c );void XuatMang( int a[][N], int d, int c );void main() { int d, c, a[M][N];cout>d;cout>c;// gọi hàm để nhập mảngNhapMang(a, d, c);// gọi hàm để xuất mảngcout #include  void main() { int a[][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}, {13,14,15,16}}; int sum=0; for(int i=0; i<4; i++) for(int j=0; j<4; j++) if (j==i) sum += a[i][j]; cout<< “Tong duong cheo chinh la: ”<< sum;} 45Bài tậpTính tổng các giá trị bên trên đường chéo chính (bao gồm cả đường chéo chính)Đếm số lượng số âm trong phần tam giác bên dưới đường chéo chínhIn hình tam giác bên dưới đường chéo chính46