Bài giảng Tin học đại cương - Bài 6: Cấu trúc trình bày khái niệm cấu trúc; khai báo và sử dụng cấu trúc; xử lý dữ liệu cấu trúc; mảng cấu trúc; một số bài tập vận dụng.
KHOA CÔNGNGHệ THÔNGTIN FACULTYOF INFORMATION TECHNOLOGY TIN HC I CNG PHẦN 2: LẬP TRÌNH BẰNG NGƠN NGỮ C BÀI 7: CẤU TRÚC (struct) Bài 7: Cấu trúc (struct) 7.1 Khái niệm cấu trúc 7.2 Khai báo sử dụng cấu trúc 7.3 Xử lí liệu cấu trúc 7.4 Mảng cấu trúc 7.5 Bài tập Bài 7: Cấu trúc (struct) 7.1 Khái niệm cấu trúc 7.2 Khai báo sử dụng cấu trúc 7.3 Xử lí liệu cấu trúc 7.4 Mảng cấu trúc 7.5 Bài tập 7.1 Khái niệm cấu trúc Trong C, structure (gọi tắt struct) ~ kiểu liệu ghi (record) Pascal Kiểu liệu cấu trúc (struct) kiểu liệu phức hợp bao gồm nhiều thành phần, thành phần thuộc kiểu liệu khác Các thành phần liệu cấu trúc gọi trường liệu (field) 7.1 Khái niệm cấu trúc (tiếp) “Mơ tả” đối tượng có nhiều phần thơng tin, ví dụ quản lý hồ sơ cán bộ, sinh viên… Ví dụ: Cấu trúc mơ tả sinh viên: Cần lưu giữ thông tin liên quan đến sinh viên họ tên, tuổi, kết học tập… Mỗi thơng tin thành phần lại có kiểu liệu khác Họ tên có kiểu liệu xâu kí tự Tuổi có kiểu liệu số nguyên Kết học tập có kiểu liệu số thực Bài 7: Cấu trúc (struct) 7.1 Khái niệm cấu trúc 7.2 Khai báo sử dụng cấu trúc 7.3 Xử lí liệu cấu trúc 7.4 Mảng cấu trúc 7.5 Bài tập 7.2.1 Khai báo kiểu liệu cấu trúc Cú pháp: struct ten_cau_truc { ; }; Ví dụ: struct Sinh_Vien { char ma_so_sinh_vien[10]; char ho_va_ten[30]; float diem_TinDC; }; 7.2.2 Khai báo biến cấu trúc Cú pháp: ten_cau_truc ten_bien_cau_truc; Hoặc: struct ten_cau_truc ten_bien_cau_truc; Ví dụ: Sinh_Vien a, b, c; Hoặc: struct Sinh_Vien a, b, c; 7.2.3 Khai báo kết hợp Có thể kết hợp vừa khai báo kiểu liệu cấu trúc vừa khai báo biến cấu trúc: struct [ten_cau_truc] { //khai_bao_cac_truong; } ten_bien_cau_truc; Ví dụ: struct Thi_Sinh { char SBD[10]; // so bao danh char ho_va_ten[30]; float ket_qua; } ts1, ts2; Struct lồng Struct lồng Ví dụ: struct Dia_Chi{//địa int so_nha; char ten_pho[20]; char thanh_pho[20]; }; struct Nhan_Su{ //nhân char ho_ten[20]; Dia_Chi address; //trường address có kiểu địa float he_so_luong; }; 10 Vấn đề vào liệu cho biến struct Cũng liệu kiểu mảng, nhập/xuất liệu trực tiếp cho struct mà cần phải nhập/xuất liệu cho trường struct Ví dụ, để nhập liệu cho biến sv1, viết sau: printf(“Nhap SBD:”); scanf(“%d”,&sv1.sbd); printf(“Nhap ho ten:”); fflush(stdin); //xố đệm, khơng sv1.sbd nhận giá trị “3” !!! gets(sv1.ho_ten); printf(“Nhap diem thi:”); scanf(“%f”,&sv1.diem_thi); //In kết hình: printf(“SBD:%d\nHo ten:%s\nDiem: %d”,sv1.sbd,sv1.ho_ten,sv1.diem_thi); 17 7.3.2. Phép gán giữa các biến cấu trúc Giả sử ta có 2 biến cấu trúc là a và b có cùng kiểu dữ liệu là một cấu trúc nào đó Phép gán cấu trúc có cú pháp tương tự như phép gán thơng thường: bien_cau_truc_1 = bien_cau_truc_2; 18 7.3.3 Con trỏ cấu trúc Cú pháp: struct ten_cau_truc *ten_bien_con_tro_ctruc; Có cách truy nhập vào trường liệu cấu trúc từ biến trỏ cấu trúc (*ten_bien_con_tro_ctruc).ten_truong_du_lieu Hoặc: ten_bien_con_tro_ctruc->ten_truong_du_lieu 19 Con trỏ struct Ví dụ: struct SinhVien *p; //hoac SinhVien *p; struct SinhVien sv, *psv;//psv trỏ printf(“Nhap SBD:”);scanf(“%d”,&sv.sbd); psv = &sv;//lấy địa biến sv printf(“SBD vua nhap:%d”, psv->sbd); printf(“Nhap lai SBD:”); scanf(“%d”,&(psv->sbd)); printf(“SBD vua nhap:%d”, (*psv).sbd); 20 Chú ý Trong ví dụ trước, rút số nhận xét: &sv cho ta địa struct sv *psv nội dung ghi có địa psv psv->sbd (*psv).sbd tương đương 21 Bài 7: Cấu trúc (struct) 7.1 Khái niệm cấu trúc 7.2 Khai báo sử dụng cấu trúc 7.3 Xử lý liệu cấu trúc 7.4 Mảng cấu trúc 7.5 Bài tập 22 7.4 Mảng cấu trúc Cú pháp: struct ten_cau_truc ten_mang_ctruc[so_ptu]; Ví dụ: struct sinh_vien { char ho_ten[20]; float diem_thi; }; struct sinh_vien lop_Tin5[80]; 23 Truyền tham số struct cho hàm Hàm C cho phép truyền tham số struct Hãy xem ví dụ sau (hàm viết thơng tin sinh viên hình): void in_sinh_vien(sinh_vien sv){ printf(“\nHo ten: %s\nDiem thi: %4.1f, sv.ho_ten, sv.diem_thi); } Trong ví dụ trên, sv truyền theo kiểu “tham trị” Muốn truyền “tham biến”, sử dụng trỏ struct 24 Ví dụ #include #include #include void main() { struct sinh_vien { char ma_sv[10]; char ho_ten[20]; float diem_thi; }; struct sinh_vien sv[3]; int i; clrscr(); 25 Ví dụ (tiếp) for(i=0;i