Chương 6 - Kiểu cấu trúc và kiểu liệt kê. Chương này trình bày những nội dung như: Khái niệm về kiểu cấu trúc, khai báo kiểu cấu trúc, khai báo biến cấu trúc, truy nhập các thành phần của cấu trúc, khởi tạo biến cấu trúc, phép gán biến cấu trúc, mảng cấu trúc,... Mời các bạn cùng tham khảo để biết thêm các nội dung chi tiết.
Chương Kiểu cấu trúc kiểu liệt kê I Kiểu cấu trúc (struct) II Kiểu liệt kê (enum) Lập trình nâng cao - Chương 06 - Ngơ Cơng Thắng I Kiểu cấu trúc Khái niệm kiểu cấu trúc Khai báo kiểu cấu trúc Khai báo biến cấu trúc Truy nhập thành phần cấu trúc Khởi tạo biến cấu trúc Phép gán biến cấu trúc Mảng cấu trúc Lập trình nâng cao - Chương 06 - Ngơ Cơng Thắng Khái niệm kiểu cấu trúc ² Ngoài kiểu liệu có sẵn C, người lập trình cịn tạo kiểu liệu riêng mình: Kiểu cấu trúc kiểu liệt kê ² Một cấu trúc nhóm phần tử có kiểu liệu khác Các phần tử gọi thành phần cấu trúc Kiểu cấu trúc C tương đương với kiểu ghi Pascal Lập trình nâng cao - Chương 06 - Ngô Công Thắng Khai báo kiểu cấu trúc ² Khai báo cấu trúc mô tả thành phần cấu trúc Cú pháp sau: Từ khoá struct Tên_kiểu_cấu trúc { Kiểu_1 Tên_thành_phần_1; Kiểu_2 Tên_thành_phần_2; Dấu chấm phẩy kết thúc }; khai báo kiểu cấu trúc Các thành phần cấu trúc Lập trình nâng cao - Chương 06 - Ngô Công Thắng Khai báo kiểu cấu trúc (tiếp) ² Ví dụ: Để lưu trữ thơng tin nhân phịng tổ chức với thông tin họ tên, ngày sinh, địa chỉ, lương ta khai báo kiểu cấu trúc sau: struct nhansu { char hoten[30]; char ngaysinh[10]; char diachi[40]; float luong; }; Lập trình nâng cao - Chương 06 - Ngô Công Thắng Khai báo kiểu cấu trúc (tiếp) ² Sau khai báo kiểu cấu trúc ta dùng tên kiểu cấu trúc tên kiểu liệu ² Kiểu thành phần cấu trúc kiểu cấu trúc, tức cấu trúc chứa cấu trúc khác Ví dụ: struct ngaythang { int ngay,thang,nam; }; struct nhansu { char hoten[30]; struct ngaythang ngaysinh; char diachi[40]; float luong; }; Lập trình nâng cao - Chương 06 - Ngô Công Thắng Khai báo biến cấu trúc ² Việc khai báo kiểu cấu trúc không tạo vùng nhớ chứa cấu trúc mà mô tả cấu trúc xem có ² Muốn có vùng nhớ chứa cấu trúc ta phải khai báo biến cấu trúc Cú pháp: struct Tên_kiểu_cấu_trúc Tên_biến_cấu trúc; Ví dụ: struct nhansu ng1,ng2; Lập trình nâng cao - Chương 06 - Ngô Công Thắng Truy nhập thành phần cấu trúc ² Để truy nhập thành phần cấu trúc ta dùng toán tử chấm Cú pháp: Tên_biến_cấu_trúc.Tên_thành_phần Ví dụ: struct thisinh { char SBD[15]; float toan,ly,hoa; }; //Khai bao bien cau truc struct thisinh ts; //Nhap du lieu cho thi sinh printf("So bao danh: “); scanf(“%s”,&ts.SBD); printf(“Diem Toan: “); scanf(“%f”,&ts.toan); printf(“Diem Ly: “); scanf(“%f”,&ts.ly); printf(“Diem Hoa: “); scanf(“%f”,&ts.hoa); Lập trình nâng cao - Chương 06 - Ngô Công Thắng Khởi tạo biến cấu trúc ² Khi khai báo biến cấu trúc ta khởi tạo giá trị cho thành phần cấu trúc khởi tạo cho phần tử mảng Ví dụ: //Khai bao kieu cau truc struct thisinh { char SBD[15]; float toan,ly,hoa; }; //Khai bao va khoi tao bien cau truc struct thisinh ts={"NNHA23456", 7, 8, 9}; Lập trình nâng cao - Chương 06 - Ngơ Cơng Thắng Phép gán biến cấu trúc ² Ta gán biến cấu trúc cho biến cấu trúc kiểu Ví dụ: //Khai bao kieu cau truc struct thisinh { char SBD[15]; float toan,ly,hoa; }; //Khai bao bien cau truc struct thisinh ts1={"NNHA23456",7,8,9}; struct thisinh ts2; ts2=ts1; Lập trình nâng cao - Chương 06 - Ngơ Công Thắng 10 Mảng cấu trúc ² Sau khai báo kiểu cấu trúc tên kiểu cấu trúc dùng kiểu liệu khác Chẳng hạn, dùng cấu trúc làm kiểu phần tử mảng Ví dụ: //Khai bao kieu cau truc struct thisinh { char SBD[15]; float toan,ly,hoa; }; //Khai bao bien cau truc struct thisinh ds[100]; strcpy(ds[0].SBD,"NNHA23456"); ds[0].toan=8; ds[0].ly=8; ds[0].hoa=9; Lập trình nâng cao - Chương 06 - Ngơ Cơng Thắng 11 Ví dụ Nhập vào thông tin n mặt hang, mặt hàng có thơng tin tên hàng, số lượng, đơn giá Tính tổng tiền n mặt hang Viết chương trình quản lý điểm mơn học sinh viên Mỗi sinh viên có thơng tin mã sv, họ tên, lớp, điểm C.Cần, điểm kiểm tra, điểm thi, điểm môn học Điểm môn học = 0,1xC.Cần + 0,3xK.Tra + 0,6xThi Nhập vào danh sách n sinh viên Tìm đưa thơng tin sinh viên có điểm MH cao Lập trình nâng cao - Chương 06 - Ngô Công Thắng 12 II Kiểu liệt kê ² Kiểu liệt kê kiểu liệu người lập trình tự định nghĩa cách liệt kê tất giá trị Các giá trị kiểu liệt kê tên tự đặt ² Để định nghĩa kiểu liệt kê ta dùng từ khóa enum theo cú pháp sau: enum Tên_kiểu_liệt_kê {Danh sách tên tự đặt}; Ví dụ: enum boolean {TRUE, FALSE}; enum mausac {Xanh, Do, Tim, Vang}; enum days_of_week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; Lập trình nâng cao - Chương 06 - Ngô Công Thắng 13 II Kiểu liệt kê (tiếp) ² Sau khai báo kiểu liệt kê ta khai báo biến kiểu liệt biến kiểu khác: Tên_kiểu_liệt_kê Danh_sách_các_biến; Ví dụ: Giả sử kiểu liệt kê khai báo trên, ta khai báo biến liệt kê: days_of_week day1, day2; ² Để đưa giá trị vào biến liệt kê ta dùng lệnh gán: Ví dụ: day1 = Mon; day2 = Sat; Lập trình nâng cao - Chương 06 - Ngô Công Thắng 14 II Kiểu liệt kê (tiếp) ² Các giá trị kiểu liệt kê lưu trữ số nguyên kiểu int, giá trị tên 0, giá trị tên 1,… Ví dụ: Với kiểu liệt kê days_of_week Sun có giá trị 0, Mon có giá trị 1, Tue có giá trị 3,… ² Ta thay đổi giá trị số giá trị tên n Cho giá trị tên có giá trị số số khác Ví dụ: enum mausac {Xanh=5, Do, Tim, Vang}; Với khai báo Xanh có giá trị 5, Do có giá trị 6, Tim có giá trị 7, Vàng có giá trị Lập trình nâng cao - Chương 06 - Ngô Công Thắng 15 Bài tập Nhập vào thơng tin n cán bộ, cán có mã cán bộ, họ tên, ngày sinh, giới tính; ngày sinh có ngày, tháng, năm; giới tính Nam/Nu Đưa hình thơng tin cán nhập kèm theo tuổi cán Lập trình nâng cao - Chương 06 - Ngô Công Thắng 16 ... viên Tìm đưa thơng tin sinh viên có điểm MH cao Lập trình nâng cao - Chương 06 - Ngô Công Thắng 12 II Kiểu liệt kê ² Kiểu liệt kê kiểu liệu người lập trình tự định nghĩa cách liệt kê tất giá trị... Xanh có giá trị 5, Do có giá trị 6, Tim có giá trị 7, Vàng có giá trị Lập trình nâng cao - Chương 06 - Ngô Công Thắng 15 Bài tập Nhập vào thông tin n cán bộ, cán có mã cán bộ, họ tên, ngày sinh,... nhansu { char hoten[30]; char ngaysinh[10]; char diachi[40]; float luong; }; Lập trình nâng cao - Chương 06 - Ngô Công Thắng Khai báo kiểu cấu trúc (tiếp) ² Sau khai báo kiểu cấu trúc ta dùng tên