intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Nhập môn Lập trình: Phần 4 - Mảng - Array

Chia sẻ: Lavie Lavie | Ngày: | Loại File: PPT | Số trang:30

107
lượt xem
10
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Nhập môn Lập trình: Phần 4 - Mảng - Array sau đây sẽ trang bị cho các bạn một số kiến thức về tính chất mảng - Array; khai báo mảng trong C; truy xuất các thành phần; truyền tham số kiểu mảng cho hàm; một số thao tác cơ sở; mảng nhiều chiều.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Nhập môn Lập trình: Phần 4 - Mảng - Array

  1. Mảng ­ Array
  2. Mảng – Array  Một số tính chất  Khai báo mảng trong C  Truy xuất các thành phần  Truyền tham số kiểu mảng cho hàm  Một số thao tác cơ sở  Mảng nhiều chiều
  3. Mảng – Một số tính chất  Mảng  là  một  kiểu  dữ  liệu  có  cấu  trúc  do  người  lập trình định nghĩa  Dùng biểu diễn các đối tượng dữ liệu ở dạng một  dãy các thành phần có cùng kiểu với nhau – kiểu  cơ sở  NNLT C luôn chỉ định một khối nhớ liên tục cho  một biến kiểu mảng  Kích thước của mảng được xác định ngay khi khai  báo và không bao giờ thay đổi
  4. Mảng – Khai báo trong C typedef kiểucơsở Tênkiểu[Sốthànhphần]; kiểu của mỗi thành phần hằng số, số thành phần tối đa của mảng do lập trình viên đặt tên typedef int AINT[100]; //AINT là kiểu mảng biểu diễn dãy gồm 100 thành phần int AINT a; //a: biến kiểu AINT
  5. Mảng – Ví dụ #define #define SIZE SIZE 10 10 int int a[5]; a[5]; // // aa dãy dãy gồm gồm 55 số số nguyên nguyên long long int int big[100]; big[100];// // big: big: chiếm chiếm 400 400 bytes! bytes! double double d[100]; d[100]; // // d: d: chiếm chiếm 800 800 bytes! bytes! long long double double v[SIZE];// v[SIZE];// v:10 v:10 long long doubles doubles
  6. Mảng – Ví dụ khởi trị cho 5 thành phần int int a[5] a[5] == {{ 10, 10, 20, 20, 30, 30, 40, 40, 50}; 50}; double double d[100] d[100] == {{ 1.5, 1.5, 2.7}; 2.7}; short short primes[] primes[] == {{ 1, 1, 2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13}; 13}; long long b[50] b[50] == {{ 00 }; }; 2 thành phần đầu tiên được compiler xác định khởi trị, phần kích thước gồm 7 còn lại: 0 thành phần cách nhanh nhất để khởi trị tất cả các int int ii == 7; 7; thành phần bằng 0 const const int int cc == 5;5; int int a[i]; a[i]; double double d[c]; d[c]; short short primes[]; primes[];
  7. Mảng – Truy xuất các phần tử  Các thành phần của mảng được truy xuất thông qua chỉ  số của chúng 0..size­1  Thao tác truy xuất không kiểm tra giới hạn của chỉ số int int main() main() a {{ 0 int int a[6]; a[6]; int 1 int ii == 7; 7; a[0] a[0] == 59; 59; 2 a[5] a[5] == -10; -10; 3 a[i/2] a[i/2] == 2;2; 4 a[6] a[6] == 0; 0; a[-1] 5 a[-1] == 5; 5; return return 0;0; }}
  8. Truyền tham số Mảng cho hàm  Tham  số  kiểu  mảng  được  truyền  cho  hàm  chính  là  địa  chỉ của phần tử đầu tiên trên mảng  Số thành phần trong tham số mảng có thể để trống.  Số  thành  phần  thực  sự  được  sử  dụng  phải  truyền  qua  một tham số khác (vd: size) int int add_elements(int add_elements(int a[], a[], int int size) size) {{ int int add_elements(int add_elements(int *p, *p, int int size) size) {{
  9. Ví dụ primes #include #include 1 void voidsum(long sum(long [], [], int); int); 2 int int main(void) main(void) {{ long 3 long primes[6] primes[6] == {{ 1,1, 2, 2, 3, 3, 5, 5, 7, 7, 11 11 }; }; 5 sum(primes, sum(primes, 6); 6); 7 printf("%li\n", printf("%li\n", primes[0]); primes[0]); 11 return return 0; 0; }} a void voidsum(long sum(long a[], a[], int int sz) sz) {{ sz 6 int int i; i; long long total total == 0; 0; dùng để kiểm tra for(i for(i == 0; 0; ii
  10. Một số thao tác cơ sở  Nhập  Xuất  Thêm một thành phần dữ liệu  Loại bỏ một thành phần dữ liệu  Tìm kiếm  Sắp xếp
  11. Mảng – Nhập dữ liệu void void ReadData(int ReadData(int a[], a[], int int size) size) {{ duyệt qua tất cả các int int i; i; phần tử for(i for(i == 0; 0; ii
  12. Mảng – Xuất dữ liệu ra màn hình void void WriteData(int WriteData(int a[], a[], int int size) size) {{ int int i; i; for(i for(i == 0; 0; ii
  13. Mảng – Nhập xuất dữ liệu #include #include void void ReadData(int ReadData(int [], [], int int ); ); void void WriteData(int WriteData(int [], [], int int ); ); void void main() main() {{ int int a[100], a[100], n; n; clrscr(); clrscr(); printf(“Nhap printf(“Nhap so so thanh thanh phan phan cua cua day: day: “); “); scanf(“%d”, scanf(“%d”, &n); &n); printf(“Nhap printf(“Nhap cac cac thanh thanh phan phan cua cua day: day: “); “); ReadData(a, ReadData(a, n); n); printf(“Day printf(“Day vua vua nhap: nhap: \n“); \n“); WriteData(a, WriteData(a, n); n); }}
  14. Mảng – Tìm vị trí X trong dãy  Bài toán: Tìm vị trí  X trên mảng a đang có N thành phần.  Giải pháp: Tìm tuần tự //input: //input: dãy dãy (a, (a, N), N), XX //output: //output: Vị Vị trí trí của của X, X, -1 -1 nếu nếu không không có có int int Search(int Search(int a[], a[], int int N, N, int int X) X) {{ for for (int (int ii == 0; 0; ii
  15. Mảng – Thêm một thành phần dữ liệu  Bài toán: cần thêm thành phần dữ liệu X vào mảng  a đang có N thành phần.  Hai trường hợp cần xem xét:  Dãy chưa có thứ tự  Thêm X vào cuối a.  Dãy đã có thứ tự  Tìm vị trí thích hợp, chèn X vào
  16. Mảng – Thêm X vào cuối dãy Thêm 15 vào (a, 7) 0 1 2 3 4 5 6 7 12 2 8 5 1 6 4 N=7 8 a[N] a[N] == X; X; NX 15 N ++; ++;
  17. Mảng – Chèn X vào dãy tăng dần Chèn 6 vào (a, 7) pos 0 1 2 3 4 5 6 7 1 2 4 5 8 12 15 N=7 8 X 6 Vị trí thích hợp: 4
  18. Mảng – Chèn X vào dãy tăng dần //input: //input: dãy dãy (a, (a, N) N) tăng tăng dần, dần, XX //output: //output: dãy dãy (a, (a, N) N) đã đã có có XX ởở đúng đúng vị vị trí trí void void Insert(int Insert(int a[], a[], int int &N, &N, int int X) X) {{ int int pos; pos; for for (pos (pos == N; N; (pos>0)&&(a[pos-1]>X); (pos>0)&&(a[pos-1]>X); pos pos --) --) a[pos] a[pos] == a[pos a[pos –– 1]; 1]; a[pos] a[pos] == X; X; NN ++; ++; }}
  19. Mảng – Loại bỏ một thành phần dữ  liệu  Bài  toán:  loại  bỏ  thành  phần  dữ  liệu  X  ra  khỏi  mảng a đang có N thành phần.  Hướng giải quyết: xác định vị trí của X, nếu tìm  thấy  thì  dồn  các  phần  tử  ở  phía  sau  lên  để  lấp  vào chỗ trống. 2 trường hợp:  Dãy không có thứ tự: lấp phần tử cuối lên  Dãy đã thứ tự: dời tất cả các phần tử ở sau ví  trí của X lên trước 1 vị trí.
  20. Mảng – Loại bỏ X ra khỏi dãy tăng Loại 5 khỏi (a, 8) pos 0 1 2 3 4 5 6 7 12 2 8 5 1 6 4 15 N=7 8 STOP  X 5 Ok, found Tìm vị trí của 5 Dồn các vị trí 4, 5, 6, 7 lên
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2