Chương 10: Kiểu Cấu trúc

 Trong việc xây dựng chương trình, nhiều khi chỉ với các kiểu dữ liệu đơn giản ta chưa thể quản lý hết các dữ liệu  Vậy cần có kiểu dữ liệu phức tạp hơn để quản lý dữ liệu; một trong các kiểu dữ liệu này gọi là dữ liệu kiểu cấu trúc

pdf24 trang | Chia sẻ: lylyngoc | Lượt xem: 1558 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Chương 10: Kiểu Cấu trúc, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
C10: Kiểu Cấu trúc 1. Khái niệm 2. Khai báo 3. Khởi tạo và gán giá trị 4. Truy xuất 5. Cấu trúc của cấu trúc 6. Cấu trúc – mảng 7. Tham số kiểu cấu trúc 8. union 1. Khái niệm  Trong việc xây dựng chương trình, nhiều khi chỉ với các kiểu dữ liệu đơn giản ta chưa thể quản lý hết các dữ liệu  Vậy cần có kiểu dữ liệu phức tạp hơn để quản lý dữ liệu; một trong các kiểu dữ liệu này gọi là dữ liệu kiểu cấu trúc 1. Khái niệm  Cấu trúc là tập hợp của nhiều kiểu dữ liệu khác nhau  Mỗi kiểu dữ liệu tạo nên cấu trúc gọi là một trường (field)  Tổng hợp các field gọi là bản ghi Ví dụ 1: Giả sử việc quản lý Sinh viên cần: Dữ liệu Kiểu dữ liệu  tên sinh viên chuỗi  điểm số thực  nam Đ/S – T-F Ví dụ 2:  Quản lý hồ sơ Công chức cần:  tên công chức  hệ số lương  ngày vào cơ quan  khen thưởng  …..  Kiểu dữ liệu? 2. Khai báo struct { [ ,]; . . . } [] ; Ví dụ 1: struct sinhvien { char ten[30], nam[1]; floaft diem; } sinhvien1, sinhvien2; Ví dụ 2: struct congchuc { char ten[30], khen[50], ngay[8]; floaft hsl; } cc1, cc2, cc3; Ví dụ 3: struct ngay { int d; int m; int y; } ngay1, ngay2; 3. Khởi tạo giá trị  Việc khởi tạo giá trị cho biến cấu trúc được thực hiện khi khai báo biến cấu trúc  Các trường của cấu trúc được khởi tạo phải đặt giữa 2 dấu { }, chúng phân cách bởi dấu phảy (,) Ví dụ: struct NgayThang { unsigned char Ngay; unsigned char Thang; unsigned int Nam; }; Khởi tạo biến cấu trúc NgS: NgayThang NgS ={29, 8, 1986}; 4. Truy xuất  Cú pháp: .  Ví dụ: struct sinhvien { char ten[30], nam[1]; floaft diem; } sinhvien1, sinhvien2; sinhvien1.ten sinhvien1.diem sinhvien1.nam Ví dụ: #include #include #include struct SinhVien { char MSSV[10]; char HoTen[40]; unsigned int NamSinh ; char DiaChi[40]; }; void main() { SinhVien SV, s; cout>SV.MSSV; cout>SV.HoTen; cout>SV.NamSinh; cout>SV.DiaChi; getch(); } 5. Cấu trúc của cấu trúc  Xét việc quản lý sinh viên, cần:  tên  điểm  ngày sinh (ngày-tháng-năm) Vậy: Cấu trúc sinh viên gồm các trường: Tên, điểm, ngày sinh. Trong đó ngày sinh là dữ liệu kiểu cấu trúc với 3 trường là ngày, tháng, năm 5. Cấu trúc của cấu trúc struct ngaysinh { int ngay, thang, nam; }; struct sinhvien { char ten[30]; floaft diem; ngs ngaysinh; } sv1, sv2; Nguyễn Văn Công 8.7 26 11 2008 6. Cấu trúc - mảng  Khi quản lý thông tin về 1 đối tượng thì kiểu cấu trúc là rất thuận lợi  Khi quản lý nhiều thông tin giống nhau về kiểu dữ liệu thì kiểu mảng là phù hợp  Quản lý nhiều đối tượng (mỗi đối tượng có nhiều thông tin khác nhau) thì? Xét mảng 1 chiều A gồm 5 phần tử Khai báo struct { [ ,]; . . . }; [spt] ; Ví dụ: struct danhsach { int sbd; char hoten[25]; float toan,ly,hoa; }; danhsach bangdiem[50]; Ví dụ: #include #include #define N_MOVIES 5 struct movies { char title [50]; int year; } films[N_MOVIES]; void main () { int i; for (i=0; i<N_MOVIES; i++) { cout >films[i].title; cout >films[i].year; } getch(); } 7. Tham số kiểu cấu trúc  Việc truyền – nhận tham số kiểu cấu trúc cũng giống như các tham số kiểu vô hướng khác  Có hình thức:  Tham trị  Tham biến  Tham trỏ 8. Union  Là kiểu dữ liệu sử dụng cùng 1 vùng nhớ cho nhiều biến  Các biến có thể có kiểu dữ liệu khác nhau  Tại mỗi thời điểm chỉ sử dụng được 1 trong những biến dùng chung vùng nhớ này Khai báo union { ; ; ….. } ; union { char a; int b; floaft n; } cam, buoi; Ví dụ: Chương trình tính diện tích hình chữ nhật, hình tròn, hình thang #include #include #include union dagiac { char loai; struct { float dai,rong;} cn; struct {float bankinh; } tr; struct {float daylon,daynho,cao;} th; }; void main() { dagiac dg; clrscr(); cout >dg.loai; switch (toupper(dg.loai)) { case 'C': cout >dg.cn.dai; cout >dg.cn.rong; cout <<"Dien tich la: "<<(dg.cn.dai*dg.cn.rong); break; case 'T': cout >dg.th.daylon; cout >dg.th.daynho; cout >dg.th.cao; cout <<"Dien tich la: "<<((dg.th.daylon+dg.th.daynho)*dg.th.cao/2); break; case 'R': cout >dg.tr.bankinh; cout <<"Dien tich la: "<<(dg.tr.bankinh*dg.tr.bankinh*3.14); break; default: cout <<"Du lieu khong chinh xac"; } getch(); }
Tài liệu liên quan