CHƯƠNG 8: CẤU TRÚC Nội dung Kiểu cấu trúc Truy nhập đến thành phần cấu trúc Mảng cấu trúc Nhập xuất kiểu cấu trúc Khởi tạo cho cấu trúc Kiểu cấu trúc Cấu trúc C kiểu liệu kiểu ghi, cho phép nhiều loại liệu nhóm lại với Nhờ cấu trúc ta mô tả đối tượng với tính chất đặc trưng, tính chất thành phần cấu trúc Khai báo kiểu cấu trúc • typedef struct • { • • } ; • ; • • • • • • • • • • • Ví dụ 1: typedef struct { int x, y; } DIEM; typedef struct { DIEM A, B, C; } TAMGIAC; DIEM m; TAMGIAC tg; • • • • DIEM kiểu cấu trúc gồm hai thành phần tọa độ x, y kiểu int TAMGIAC kiểu cấu trúc gồm ba thành phần A, B, C kiểu DIEM m biến kiểu DIEM tg biến kiểu TAMGIAC • • • • • • • Truy nhập đến thành phần cấu trúc Để truy nhập đến thành phần cấu trúc ta sử dụng cách viết sau: . . … Ví dụ 2: xét lại ví dụ m điểm có tọa độ nguyên m.x, m.y tg tam giác có đỉnh tg.A, tg.B, tg.C Đỉnh A có tọa độ tg.A.x, tg.A.y, đỉnh B có tọa độ tg.B.x, tg.B.y đỉnh C có tọa độ tg.C.x, tg.C.y • • • • • • • • • • • • • • Mảng cấu trúc Mảng cấu trúc mảng mà phần tử cấu trúc bao gồm nhiều thành phần Ví dụ 3: typedef struct { char ma[11]; //ma hoc sinh toi da 10 ký tự char ten[31]; //ten hoc sinh toi da 30 ký tự float toan, ly, hoa; } HOCSINH; void main() { HOCSINH a[20]; … } Với khai báo a mảng gồm 20 phần tử kiểu HOCSINH Chẳng hạn, a[10].ho lưu họ học sinh có số 10, a[5].toan lưu điểm toán hoc sinh có số mảng • • • • • • • • • Nhập xuất kiểu cấu trúc Ví dụ 4: Nhập xuất học sinh //khai báo nguyên mẫu void Nhap1HS(HOCSINH *hs); void In1HS(HOCSINH hs); //định nghĩa hàm void Nhap1HS(HOCSINH *hs) { float tam; printf(“Ma hoc sinh:”); fflush(stdin); gets(hs->ma); printf(“Ho ten:”); gets(hs->ten); printf(“Diem toan:”); scanf(“%f”, &tam); hs->toan = tam; printf(“Diem ly:”); scanf(“%f”, &tam); hs->ly = tam; printf(“Diem hoa:”); scanf(“%f”, &tam); hs->hoa = tam; } • • • • • • • • • • • • • void In1HS(HOCSINH hs) { printf(“%10s%30s%6.2f%6.2f%6.2f\n”, hs.ma, hs.ten, hs.toan, hs.ly, hs.hoa); } //hàm void main() { HOCSINH hocsinh; Nhap1HocSinh(&hocsinh); In1HocSinh(hocsinh); } Chú ý: Trong C thành phần không nguyên kiểu liệu cấu trúc, ta sử dụng toán tử lấy địa (&) • • • • • • • • • • • • • • • • Ví dụ 5: Nhập xuất danh sách học sinh #define MAX 20 //khai báo nguyên mẫu void Nhap1HS(HOCSINH *hs); void In1HS(HOCSINH hs); void NhapDSHS(HOCSINH a[], int *n); void InDSHS(HOCSINH a[], int n); //định nghĩa hàm void NhapDSHS(HOCSINH a[], int *n) { for(i = 0; i < *n, i++) { printf(“ Hoc sinh thu %d \n”, i); Nhap1HS(&a[i]); } } • • • • • • • • • • • • • • void XuatDSHS(HOCSINH a[], int n) { for(i = 0; i < n, i++) Xuat1HS(a[i]); } void main() { HOCSINH a[MAX]; int n; printf(“Nhap danh sach hoc sinh\n”); NhapDSHS(a, &n); printf(“danh sach hoc sinh vua nhap\n”); XuatDSHS(a, n); } • • • • Khởi tạo cho cấu trúc Ví dụ 5: Khởi tạo biến cấu trúc struct HOCSINH hocsinh = { “12A08”, “Le Van Hoang”, 8.5, 9, }; • • • • • • • Ví dụ 5: Khởi tạo mảng cấu trúc struct HOCSINH a[20] = { {“12A00”, “Le Minh An”, 10, 7.5, 8}, {“12A01”, “Duong Thi Nam Phuong”, 8.5, 9, 5}, {“12A019”, “Nguyen Van Dung”, 6, 10, 9}, }; ...Kiểu c u tr c C u tr c C kiểu liệu kiểu ghi, cho phép nhiều loại liệu nhóm lại với Nhờ c u tr c ta mô tả đối tượng với tính chất đ c trưng, tính chất thành phần c u tr c Khai báo kiểu c u tr c. .. kiểu TAMGIAC • • • • • • • Truy nhập đến thành phần c u tr c Để truy nhập đến thành phần c u tr c ta sử dụng c ch viết sau: . .