Đếm xem trong mảng sinh viên có bao nhiêu người Ho nguyên
Cách đơn giản nhất để tiếp cận về kiểu cấu trúc là xét ví dụ sinh viên. Một lớp có 100 sinh viên mỗi sinh viên gồm họ tên và mã sinh viên. Hãy nhập dữ liệu cho lớp đó. Hehe. Bạn nghĩ đến cách dùng 2 mảng: 1 mảng lưu tên, 1 mảng lưu mã sinh viên đúng không. Đúng, cách đó không sai… nhưng hãy xem yêu cầu tiếp theo… Thi học kỳ xong, hãy nhập điểm cho từng sinh viên, mỗi sinh viên gồm 10 môn (Toán, Tin, Hóa, Vật lý,…). Giờ bạn thấy sao nào… Dùng 12 mảng chăng… ồ không nên, hãy dùng kiểu cấu trúc. Với kiểu cấu trúc chỉ cần 1 mảng mà thôi. Show 1. Kiểu cấu trúcĐối với mảng, chỉ có thể lưu nhiều thông tin có cùng kiểu dữ liệu. Nhưng với kiểu cấu trúc ta có thể lưu thông tin có nhiều kiểu dữ liệu khác nhau. 1.1 VD mở đầu//code by nguyenvanquan7826 #includeKết quả: Nhap du lieu cho sv1: MSV: DTC1 Ho ten: Pham Thi Ha Diem toan, tin, anh: 9 9 8 Nhap du lieu cho sv2: MSV: DTC2 Ho ten: Nguyen Van Quan Diem toan, tin, anh: 9 9 8 --------- Thong tin sinh vien ----- MSV Ho ten Toan Tin Anh DTC1 Pham Thi Ha 9.00 9.00 8.00 DTC2 Nguyen Van Quan 9.00 9.00 8.00Ở VD mở đầu này, chúng ta có rất nhiều điểu phải bàn 🙂 1.2 Xây dựng kiểu cấu trúc, khai báo biến cấu trúcNhư VD trên, để xây dựng 1 kiểu cấu trúc ta thực hiện theo cú pháp: struct TenKieuCauTruc { Khai báo các thành phần của kiểu; };Sau khi có kiểu cấu trúc rồi thì cái kiểu đó nó tương tự như 1 kiểu bình thường (int, float, char,…) và ta chỉ việc khai báo biến nữa là xong. Tuy nhiên khai báo biến thì cần có thêm từ khóa struct ở trước: (Đối với C++ thì không cần). struct TenKieuCauTruc TenBienCauTruc; Ngoài ta chúng ta còn một số cách xây dựng kiểu cấu trúc và khai báo biến cấu trúc như sau: Hoặc struct { Khai báo các thành phần của kiểu; } danh sách các biến thuộc kiểu cấu trúc ;Với cách khai báo này, ta bắt buộc phải khai báo các biến cấu trúc ở ngay sau cấu trúc vì không có tên kiểu cấu trúc để cho ta khai báo ở các vị trí khác nữa. Khi này ta có kieuSinhVien là 1 kiểu dữ liệu (như int, double, …) và ta có thể khai báo các biến cấu trúc thông qua nó. Trong này có vài điều các bạn cần chú ý:
Ngoài ra ta còn có thể khai báo kiểu cấu trúc lồng nhau: VD như trong 1 sinh viên có ngày sinh, trong ngày sinh lại có ngày, tháng, năm sinh. struct ngaysinh { int ngay, thang, nam; } typedef struct sinhvien { char MSV[20]; // ma sinh vien char hoten[30]; // ho ten sinh vien double toan, tin, anh; // cac diem toan, tin, anh struct ngaysinh ns; } kieuSinhVien;Hoặc ta khai báo ngay trong cấu trúc: typedef struct sinhvien { char MSV[20]; // ma sinh vien char hoten[30]; // ho ten sinh vien double toan, tin, anh; // cac diem toan, tin, anh struct ngaysinh { int ngay, thang, nam; } ns; } kieuSinhVien;1.3 Truy cập đên các thành phần của cấu trúcĐể truy nhập đến thành phần của cấu trúc ta sử dụng toán tử chấm (.). TenBienCauTruc.TenThanhPhan; Như VD trên ta truy cập như sau: sv1.hoten; sv1.toan; // truy xuất tới họ tên, điểm toán sv1.ns.ngay; sv1.ns.thang; // truy xuất tới ngày sinh và tháng sinh. … Khi đã truy xuất được tới các thành phần của cấu trúc thì mỗi thành phần đó là 1 biến bình thường và ta gán giá trị hoặc nhập xuất giá trị cho chúng như cách bình thường mà chúng ta vẫn làm. Ngoài ra nếu thành phần nào đó dài dòng thì ta có thể tránh việc dài dòng này bằng cách sử dụng từ khóa define. Ta viết: #define p sv1.ns p.thang; p.nam;1.4 Gán các biến có cùng kiểu cấu trúc//code by nguyenvanquan7826 #includeSau khi gán sv2 = sv1 thì mọi thông tin của sv1 có thì sv2 cũng có. Ngoài ra ta còn có thể gán giá trị khởi đầu cho cấu trúc. struct sinhvien sv1 = {"ABC", "Nguyen Van Quan", 9, 9, 8, {4, 5, 1992}}; Khi đó ta có các dữ liệu ban đầu của sv1 là: 2. Mảng cấu trúcBên trên ta đã tìm hiểu cơ bản về kiểu cấu trúc và một vài ví dụ về cấu trúc sinhvien. Bây giờ ta tìm hiểu cách biểu diễn 1 mảng 50 sinh viên của 1 lớp học có kiểu cấu trúc như trên. Ta xét VD: //code by nguyenvanquan7826 #includeKết quả: Nhap du lieu cho sinh vien thu 1: MSV: DTC1 Ho ten: Pham Thi Ha Diem TB: 9.2 Ngay sinh: 21/01/1993 Nhap du lieu cho sinh vien thu 2: MSV: DTC2 Ho ten: Nguyen Van Quan Diem TB: 9.2 Ngay sinh: 31/12/1992 --------- Thong tin sinh vien ----- MSV Ho ten Diem Tb Ngay sinh DTC1 Pham Thi Ha 9.20 21/01/1993 DTC2 Nguyen Van Quan 9.20 31/12/19923. Con trỏ cấu trúc//code by nguyenvanquan7826 #includeTruy cập các thành phần cấu trúc Để truy cập để lấy dữ liệu các thành phần của con trỏ cấu trúc ta có 3 cách sau:
Cả 3 cách trên đều truy cập tới DTB. Để lấy địa chỉ ta cũng có 2 cách:
|