Bài giảng Phương pháp lập trình - Bài 9: Kiểu cấu trúc

pdf 32 trang phuongnguyen 4001
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình - Bài 9: Kiểu cấu trúc", để 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_phuong_phap_lap_trinh_bai_9_kieu_cau_truc.pdf

Nội dung text: Bài giảng Phương pháp lập trình - Bài 9: Kiểu cấu trúc

  1. TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH Phương pháp lập trình Kiểu cấu trúc TS. Ngô Hữu Dũng
  2. Đặt vấn đề  Thông tin 1 SV  MSSV : kiểu chuỗi  Tên SV : kiểu chuỗi  NTNS : kiểu chuỗi  Phái : ký tự  Điểm Toán, Lý, Hóa : số thực  Yêu cầu  Lưu thông tin n SV?  Truyền thông tin n SV vào hàm? Phương pháp lập trình - Kiểu cấu trúc
  3. Đặt vấn đề  Khai báo các biến để lưu trữ 1 SV  char mssv[7]; // “0012078”  char hoten[30]; // “Nguyen Van A”  char ntns[8]; // “29/12/82”  char phai; // ‘y’  Nam, ‘n’  Nữ  float toan, ly, hoa; // 8.5 9.0 10.0  Truyền thông tin 1 SV cho hàm  void xuat(char mssv[], char hoten[], char ntns[], char phai, float toan, float ly, float hoa); Phương pháp lập trình - Kiểu cấu trúc
  4. Đặt vấn đề  Nhận xét  Đặt tên biến khó khăn và khó quản lý  Truyền tham số cho hàm quá nhiều  Tìm kiếm, sắp xếp, sao chép, khó khăn  Tốn nhiều bộ nhớ   Ý tưởng  Gom những thông tin của cùng 1 SV thành một kiểu dữ liệu mới => Kiểu struct Phương pháp lập trình - Kiểu cấu trúc
  5. Khai báo kiểu cấu trúc  Cú pháp 1. struct 2. { 3. ; 4. 5. ; 6. };  Ví dụ 1. struct DIEM 2. { 3. int x; 4. int y; 5. }; Phương pháp lập trình - Kiểu cấu trúc
  6. Khai báo biến cấu trúc  Cú pháp tường minh 1. struct 2. { 3. ; 4. 5. ; 6. } , ;  Ví dụ 1. struct DIEM 2. { 3. int x; 4. int y; 5. } diem1, diem2; Phương pháp lập trình - Kiểu cấu trúc
  7. Khai báo biến cấu trúc  Cú pháp không tường minh 1. struct 2. { 3. ; 4. 5. ; 6. }; 7. struct ;  Ví dụ 1. struct DIEM 2. { 3. int x; 4. int y; 5. }; 6. struct DIEM diem1, diem2;// C++ có thể bỏ struct Phương pháp lập trình - Kiểu cấu trúc
  8. Sử dụng typedef  Cú pháp 1. typedef struct 2. { 3. ; 4. 5. ; 6. } ; 7. ;  Ví dụ 1. typedef struct 2. { 3. int x; 4. int y; 5. } DIEM; 6. struct DIEM diem1, diem2; Phương pháp lập trình - Kiểu cấu trúc
  9. Khởi tạo cho biến cấu trúc  Cú pháp tường minh 1. struct 2. { 3. ; 4. 5. ; 6. } = { , , };  Ví dụ 1. struct DIEM 2. { 3. int x; 4. int y; 5. } diem1 = {2912, 1706}, diem2; Phương pháp lập trình - Kiểu cấu trúc
  10. Truy xuất dữ liệu kiểu cấu trúc  Đặc điểm  Không thể truy xuất trực tiếp  Thông qua toán tử thành phần cấu trúc . hay còn gọi là toán tử chấm (dot operation)  Ví dụ . 1. struct DIEM 2. { 3. int x; 4. int y; 5. } diem1; 6. printf(“x = %d, y = %d”, diem1.x, diem1.y); Phương pháp lập trình - Kiểu cấu trúc
  11. Gán dữ liệu kiểu cấu trúc  Có 2 cách = ; . = ;  Ví dụ 1. struct DIEM 2. { 3. int x, y; 4. } diem1 = {2912, 1706}, diem2; 5. 6. diem2 = diem1; 7. diem2.x = diem1.x; 8. diem2.y = diem1.y * 2; Phương pháp lập trình - Kiểu cấu trúc
  12. Cấu trúc phức tạp  Thành phần của cấu trúc là cấu trúc khác 1. struct DIEM 2. { 3. int x; 4. int y; 5. }; 6. struct HINHCHUNHAT 7. { 8. struct DIEM traitren; 9. struct DIEM phaiduoi; 10.} hcn1; 11. 12.hcn1.traitren.x = 2912; 13.hcn1.traitren.y = 1706; Phương pháp lập trình - Kiểu cấu trúc
  13. Cấu trúc phức tạp  Thành phần của cấu trúc là mảng 1. struct SINHVIEN 2. { 3. char hoten[30]; 4. float toan, ly, hoa; 5. } sv1; 6. 7. strcpy(sv1.hoten, “Nguyen Van A”); 8. sv1.toan = 10; 9. sv1.ly = 6.5; 10.sv1.hoa = 9; Phương pháp lập trình - Kiểu cấu trúc
  14. Cấu trúc phức tạp  Cấu trúc đệ quy (tự trỏ) 1. struct PERSON 2. { 3. char hoten[30]; 4. struct PERSON *father, *mother; 5. }; 6. struct NODE 7. { 8. int value; 9. struct NODE *pNext; 10.}; Phương pháp lập trình - Kiểu cấu trúc
  15. Cấu trúc phức tạp  Thành phần của cấu trúc có kích thước theo bit 1. struct bit_fields 2. { 3. int bit_0 : 1; 4. int bit_1_to_4 : 4; 5. int bit_5 : 1; 6. int bit_6_to_15 : 10; 7. }; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Phương pháp lập trình - Kiểu cấu trúc
  16. Kích thước của struct  Ví dụ 1. struct A 2. { 3. int a; 4. double b; 5. }; 6. sizeof(A) = ??? 1. struct B1 1. struct B2 2. { 2. { 3. int a; 3. int a; 4. int b; 4. double c; 5. double c; 5. int b; 6. }; 6. }; 7. sizeof(B1) = ??? 7. sizeof(B2) = ??? Phương pháp lập trình - Kiểu cấu trúc
  17. Chỉ thị #pragma pack  Chỉ thị #pragma pack (n)  n = 1, 2, 4, 8, 16 (byte)  Biên lớn nhất của các thành phần trong struct  BC n mặc định là 1  VC++ n mặc định là 8  Project settings Compile Option C/C++ Code Generation Structure Alignment  Canh biên cho 1 cấu trúc #pragma pack(push, 1) struct MYSTRUCT { }; #pragma pack(pop) Phương pháp lập trình - Kiểu cấu trúc
  18. #pragma pack  Ví dụ: không có #pragma pack (1) struct A { double a; a a a a a a a a int b; int c; b b b b c c c c }; struct B { int b; b b b b đệm 4B double a; a a a a a a a a int c; }; c c c c đệm 4B struct C { int b; b b b b c c c c int c; double a; a a a a a a a a }; Phương pháp lập trình - Kiểu cấu trúc
  19. Các lưu ý về cấu trúc  Lưu ý  Kiểu cấu trúc được định nghĩa để làm khuôn dạng còn biến cấu trúc được khai báo để sử dụng khuôn dạng đã định nghĩa.  Trong C++, có thể bỏ từ khóa struct khi khai báo biến (hoặc sử dụng typedef)  Khi nhập các biến kiểu số thực trong cấu trúc phải nhập thông qua một biến trung gian. 1. struct DIEM { float x, y;} d1; 2. float temp; scanf(“%f”, &temp); d1.x = temp; Phương pháp lập trình - Kiểu cấu trúc
  20. Mảng cấu trúc  Mảng cấu trúc  Tương tự như mảng với kiểu dữ liệu cơ sở (char, int, float, ) 1. struct DIEM 2. { 3. int x; 4. int y; 5. }; 6. DIEM mang1[20]; 7. DIEM mang2[10] = {{3, 2}, {4, 4}, {2, 7}}; Phương pháp lập trình - Kiểu cấu trúc
  21. Truyền cấu trúc cho hàm  Truyền cấu trúc cho hàm  Giống như truyền kiểu dữ liệu cơ sở  Tham trị (không thay đổi sau khi kết thúc hàm)  Tham chiếu  Con trỏ  Ví dụ 1. struct DIEM { 2. int x, y; 3. }; 4. void xuat1(int x, int y) { }; 5. void xuat2(DIEM diem) { }; 6. void xuat3(DIEM &diem) { }; 7. void xuat4(DIEM *diem) { }; Phương pháp lập trình - Kiểu cấu trúc
  22. Hợp nhất – union  Khái niệm  Được khai báo và sử dụng như cấu trúc  Các thành phần của union có chung địa chỉ đầu (nằm chồng lên nhau trong bộ nhớ)  Khai báo union { ; ; }; Phương pháp lập trình - Kiểu cấu trúc
  23. So sánh struct và union  Ví dụ 1. struct MYSTRUCT 1. union MYUNION 2. { 2. { 3. char c; 3. char c; 4. int n; 4. int n; 5. } s; 5. } u; 6. s.c = 1; s.n = 2; 6. u.c = 1; u.n = 2; 0 1 2 3 4 0 1 2 3 01 02 00 00 00 0102 00 00 00 c n c n Phương pháp lập trình - Kiểu cấu trúc
  24. Ví dụ  struct trong union 1. union date_tag 2. { 3. char full_date[9]; 4. struct part_date_tag 5. { 6. char month[2]; 7. char break_value1; 8. char day[2]; 9. char break_value2; 10. char year[2]; 11. }; 12.} date = {“29/12/82”}; Phương pháp lập trình - Kiểu cấu trúc
  25. Ví dụ  union trong struct 1. struct generic_tag 2. { 3. char type; 4. union share_tag 5. { 6. char c; 7. int i; 8. float f; 9. }; 10.}; Phương pháp lập trình - Kiểu cấu trúc
  26. Bài tập về cấu trúc 1. Phân số  Khai báo kiểu dữ liệu phân số (PHANSO)  Nhập/Xuất phân số  Rút gọn phân số  Tính tổng, hiệu, tích, thương hai phân số  Kiểm tra phân số tối giản  Quy đồng hai phân số  Kiểm tra phân số âm hay dương  So sánh hai phân số Phương pháp lập trình - Kiểu cấu trúc
  27. Bài tập về cấu trúc 2. Đơn thức  Khai báo kiểu dữ liệu đơn thức (DONTHUC)  Nhập/Xuất đơn thức  Tính tích, thương hai đơn thức  Tính đạo hàm cấp 1 của đơn thức  Tính giá trị đơn thức tại x = x0 Phương pháp lập trình - Kiểu cấu trúc
  28. Bài tập về cấu trúc 3. Đa thức  Khai báo kiểu dữ liệu đa thức (DATHUC)  Nhập/Xuất đa thức  Tính tổng, hiệu, tích, thương hai đơn thức  Tính đạo hàm cấp 1 của đơn thức  Tính đạo hàm cấp k của đơn thức  Tính giá trị đơn thức tại x = x0 Phương pháp lập trình - Kiểu cấu trúc
  29. Bài tập về cấu trúc 4. Điểm trong mặt phẳng Oxy  Khai báo kiểu dữ liệu điểm (DIEM)  Nhập/Xuất tọa độ điểm  Tính khoảng cách giữa hai điểm  Tìm điểm đối xứng qua gốc toạ độ/trục Ox/Oy  Kiểm tra điểm thuộc phần tư nào? 5. Tam giác  Khai báo kiểu dữ lịêu tam giác (TAMGIAC)  Nhập/Xuất tam giác  Tính chu vi, diện tích tam giác Phương pháp lập trình - Kiểu cấu trúc
  30. Bài tập về cấu trúc 6. Ngày  Khai báo kiểu dữ liệu ngày (NGAY)  Nhập/Xuất ngày (ngày, tháng, năm)  Kiểm tra năm nhuận  Tính số thứ tự ngày trong năm  Tính số thứ tự ngày kể từ ngày 1/1/1  Tìm ngày trước đó, sau đó k ngày  Tính khoảng cách giữa hai ngày  So sánh hai ngày Phương pháp lập trình - Kiểu cấu trúc
  31. Bài tập về mảng cấu trúc 7. Mảng phân số  Nhập/Xuất n phân số  Rút gọn mọi phân số  Đếm số lượng phân số âm/dương trong mảng  Tìm phân số dương đầu tiên trong mảng  Tìm phân số nhỏ nhất/lớn nhất trong mảng  Sắp xếp mảng tăng dần/giảm dần Phương pháp lập trình - Kiểu cấu trúc
  32. Bài tập về mảng cấu trúc 8. Mảng điểm  Nhập/Xuất n điểm  Đếm số lượng điểm có hoành độ dương  Đếm số lượng điểm không trùng với các điểm khác trong mảng  Tìm điểm có hoành độ lớn nhất/nhỏ nhất  Tìm điểm gần gốc tọa độ nhất Phương pháp lập trình - Kiểu cấu trúc