Bài giảng Nhập môn lập trình - Chương 10: Cấu trúc

ppt 32 trang ngocly 2360
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Chương 10: 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:

  • pptbai_giang_nhap_mon_lap_trinh_chuong_10_cau_truc.ppt

Nội dung text: Bài giảng Nhập môn lập trình - Chương 10: Cấu trúc

  1. & VC BB Nội dung 1 Khái niệm kiểu cấu trúc (struct) 2 Khai báo & truy xuất kiểu cấu trúc 3 Kiểu dữ liệu hợp nhất (union) 4 Bài tập 1 NMLT - Cấu trúc
  2. & VC BB Đặt vấn đề vThô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 vYêu cầu § Lưu thông tin n SV? § Tuyền thông tin n SV vào hàm? 2 NMLT - Cấu trúc
  3. & VC BB Đặt vấn đề vKhai 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 vTruyề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); 3 NMLT - Cấu trúc
  4. & VC BB Đặt vấn đề vNhậ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ớ § vÝ 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 4 NMLT - Cấu trúc
  5. & VC BB Khai báo kiểu cấu trúc vCú pháp struct { ; ; }; vVí dụ struct DIEM { int x; int y; }; 5 NMLT - Cấu trúc
  6. & VC BB Khai báo biến cấu trúc vCú pháp tường minh struct { ; ; } , ; vVí dụ struct DIEM { int x; int y; } diem1, diem2; 6 NMLT - Cấu trúc
  7. & VC BB Khai báo biến cấu trúc vCú pháp không tường minh struct { ; ; }; struct ; vVí dụ struct DIEM { int x; int y; }; struct DIEM diem1, diem2;// C++ có thể bỏ struct 7 NMLT - Cấu trúc
  8. & VC BB Sử dụng typedef vCú pháp typedef struct { ; ; } ; ; vVí dụ typedef struct { int x; int y; } DIEM; struct DIEM diem1, diem2; 8 NMLT - Cấu trúc
  9. & VC BB Khởi tạo cho biến cấu trúc vCú pháp tường minh struct { ; ; } = { , , }; vVí dụ struct DIEM { int x; int y; } diem1 = {2912, 1706}, diem2; 9 NMLT - Cấu trúc
  10. & VC BB Truy xuất dữ liệu kiểu cấu trúc vĐặ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) . vVí dụ struct DIEM { int x; int y; } diem1; printf(“x = %d, y = %d”, diem1.x, diem1.y); 10 NMLT - Cấu trúc
  11. & VC BB Gán dữ liệu kiểu cấu trúc vCó 2 cách = ; . = ; vVí dụ struct DIEM { int x, y; } diem1 = {2912, 1706}, diem2; diem2 = diem1; diem2.x = diem1.x; diem2.y = diem1.y * 2; 11 NMLT - Cấu trúc
  12. & VC BB Cấu trúc phức tạp vThành phần của cấu trúc là cấu trúc khác struct DIEM { int x; int y; }; struct HINHCHUNHAT { struct DIEM traitren; struct DIEM phaiduoi; } hcn1; hcn1.traitren.x = 2912; hcn1.traitren.y = 1706; 12 NMLT - Cấu trúc
  13. & VC BB Cấu trúc phức tạp vThành phần của cấu trúc là mảng struct SINHVIEN { char hoten[30]; float toan, ly, hoa; } sv1; strcpy(sv1.hoten, “Nguyen Van A”); sv1.toan = 10; sv1.ly = 6.5; sv1.hoa = 9; 13 NMLT - Cấu trúc
  14. & VC BB Cấu trúc phức tạp vCấu trúc đệ quy (tự trỏ) struct PERSON { char hoten[30]; struct PERSON *father, *mother; }; struct NODE { int value; struct NODE *pNext; }; 14 NMLT - Cấu trúc
  15. & VC BB Cấu trúc phức tạp vThành phần của cấu trúc có kích thước theo bit struct bit_fields { int bit_0 : 1; int bit_1_to_4 : 4; int bit_5 : 1; int bit_6_to_15 : 10; }; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 NMLT - Cấu trúc
  16. & VC BB Kích thước của struct vVí dụ struct A { int a; double b; }; sizeof(A) = ??? struct B1 struct B2 { { int a; int a; int b; double c; double c; int b; }; }; sizeof(B1) = ??? sizeof(B2) = ??? 16 NMLT - Cấu trúc
  17. & VC BB Chỉ thị #pragma pack vChỉ 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) 17 NMLT - Cấu trúc
  18. & VC BB #pragma pack vVí 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 18 }; NMLT - Cấu trúc
  19. & VC BB Các lưu ý về cấu trúc vLư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. struct DIEM { float x, y;} d1; float temp; scanf(“%f”, &temp); d1.x = temp; 19 NMLT - Cấu trúc
  20. & VC BB Mảng cấu trúc vMảng cấu trúc § Tương tự như mảng với kiểu dữ liệu cơ sở (char, int, float, ) struct DIEM { int x; int y; }; DIEM mang1[20]; DIEM mang2[10] = {{3, 2}, {4, 4}, {2, 7}}; 20 NMLT - Cấu trúc
  21. & VC BB Truyền cấu trúc cho hàm vTruyề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ụ struct DIEM { int x, y; }; void xuat1(int x, int y) { }; void xuat2(DIEM diem) { }; void xuat3(DIEM &diem) { }; void xuat4(DIEM *diem) { }; 21 NMLT - Cấu trúc
  22. & VC BB Hợp nhất – union vKhá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ớ) vKhai báo union { ; ; }; 22 NMLT - Cấu trúc
  23. & VC BB So sánh struct và union vVí dụ struct MYSTRUCT union MYUNION { { char c; char c; int n; int n; } s; } u; s.c = 1; s.n = 2; 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 23 NMLT - Cấu trúc
  24. & VC BB Ví dụ vstruct trong union union date_tag { char full_date[9]; struct part_date_tag { char month[2]; char break_value1; char day[2]; char break_value2; char year[2]; }; } date = {“29/12/82”}; 24 NMLT - Cấu trúc
  25. & VC BB Ví dụ vunion trong struct struct generic_tag { char type; union share_tag { char c; int i; float f; }; }; 25 NMLT - Cấu trúc
  26. & VC BB 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ố 26 NMLT - Cấu trúc
  27. & VC BB 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 27 NMLT - Cấu trúc
  28. & VC BB 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 28 NMLT - Cấu trúc
  29. & VC BB 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 29 NMLT - Cấu trúc
  30. & VC BB 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 30 NMLT - Cấu trúc
  31. & VC BB 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 31 NMLT - Cấu trúc
  32. & VC BB 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 32 NMLT - Cấu trúc