Bài giảng Lập trình C - Chương 6: Kiểu cấu trúc và kiểu liệt kê cung cấp cho người học các kiến thức: Kiểu cấu trúc (struct), kiểu liệt kê (enum). Đây là tài liệu hữu ích dành cho các bạn sinh viên đang theo học và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.
Trang 1Ch ươ ng 6 Ki u c u trúc và ki u li t kê ể ấ ể ệ
I Ki u c u trúc (struct) ể ấ
II Ki u li t kê (enum) ể ệ
Trang 2I Ki u c u trúc ể ấ
1 Khái ni m v ki u c u trúc ệ ề ể ấ
2 Khai báo ki u c u trúc ể ấ
3 Khai báo bi n c u trúc ế ấ
4 Truy nh p các thành ph n c a c u trúc ậ ầ ủ ấ
5 Kh i t o bi n c u trúc ở ạ ế ấ
6 Phép gán bi n c u trúc ế ấ
7 M ng c u trúc ả ấ
Trang 31 Khái ni m v ki u c u trúc ệ ề ể ấ
Ngoài các ki u d li u có s n trong C, ng i ể ữ ệ ẵ ườ
l p trình còn có th t o ra nh ng ki u d li u ậ ể ạ ữ ể ữ ệ
c a riêng mình: Ki u c u trúc và ki u li t kê ủ ể ấ ể ệ
M t c u trúc là m t nhóm các ph n t có th ộ ấ ộ ầ ử ể
có ki u d li u khác nhau Các ph n t này ể ữ ệ ầ ử
g i là các thành ph n c a c u trúc Ki u c u ọ ầ ủ ấ ể ấ trúc trong C t ng đ ng v i ki u b n ghi ươ ươ ớ ể ả trong Pascal.
Trang 42 Khai báo ki u c u trúc ể ấ
Khai báo c u trúc là mô t v các thành ph n ấ ả ề ầ
c a c u trúc Cú pháp nh sau: ủ ấ ư
struct Tên_ki u_c u trúc ể ấ
{
Ki u_1 Tên_thành_ph n_1; ể ầ
};
T khoá ừ
Các thành ph n ầ
c a c u trúc ủ ấ
D u ch m ph y k t ấ ấ ẩ ế thúc khai báo ki u c u ể ấ
trúc
Trang 52 Khai báo ki u c u trúc (ti p) ể ấ ế
Ví d : Đ l u tr thông tin v nhân s c a phòng t ụ ể ư ữ ề ự ủ ổ
ch c v i các thông tin v h tên, ngày sinh, đ a ch , ứ ớ ề ọ ị ỉ
l ng ta khai báo m t ki u c u trúc nh sau:ươ ộ ể ấ ư
struct nhansu
{
char hoten[30];
char ngaysinh[10];
char diachi[40];
float luong;
Trang 62 Khai báo ki u c u trúc (ti p) ể ấ ế
Sau khi khai báo ki u c u trúc ta có th dùng tên ể ấ ể
ki u c u trúc nh tên các ki u d li u c b n.ể ấ ư ể ữ ệ ơ ả
Ki u c a các thành ph n c a c u trúc có th là ki u ể ủ ầ ủ ấ ể ể
c u trúc, t c là trong c u trúc có th ch a c u trúc ấ ứ ấ ể ứ ấ khác Ví d :ụ
struct ngaythang
{
int ngay,thang,nam;
};
struct nhansu
{
char hoten[30];
ngaythang ngaysinh;
char diachi[40];
float luong;
};
Trang 73 Khai báo bi n c u trúc ế ấ
Vi c khai báo ki u c u trúc không t o ra ệ ể ấ ạ vùng nh ch a c u trúc mà ch mô t v c u ớ ứ ấ ỉ ả ề ấ trúc xem có nh ng gì ữ
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: ế ấ
Tên_ki u_c u_trúc Tên_bi n_c u trúc; ể ấ ế ấ
Ví d : ụ
nhansu ng1,ng2;
Trang 84 Truy nh p các thành ph n c u trúc ậ ầ ấ
Đ truy nh p các thành ph n c a 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
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);
Trang 95 Kh i t o bi n c u trúc ở ạ ế ấ
Khi khai báo bi n c u trúc ta có th kh i t o giá tr cho các ế ấ ể ở ạ ị thành ph n c a c u trúc nh kh i t o cho các ph n t c a ầ ủ ấ ư ở ạ ầ ử ủ
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
Trang 106 Phép gán bi n c u trúc ế ấ
Ta có th gán m t bi n c u trúc cho m t bi n c u ể ộ ế ấ ộ ế ấ trúc cùng ki u Ví d :ể ụ
//Khai bao kieu cau truc
struct thisinh
{
char SBD[15];
float toan,ly,hoa;
};
//Khai bao bien cau truc
thisinh ts1={"NNHA23456",7,8,9};
thisinh ts2;
ts2=ts1;
Trang 117 M ng c u trúc ả ấ
Sau khi khai báo ki u c u trúc thì tên ki u c u trúc ể ấ ể ấ
đ c dùng nh các ki u d li u khác Ch ng h n, ượ ư ể ữ ệ ẳ ạ dùng c u trúc làm ki u ph n t c a m ng.ấ ể ầ ử ủ ả
Ví d :ụ
//Khai bao kieu cau truc
struct thisinh
{
char SBD[15];
float toan,ly,hoa;
};
//Khai bao bien cau truc
thisinh ds[100];
strcpy(ds[0].SBD,"NNHA23456");
ds[0].toan=8;
Trang 12Ví dụ
Vi t ch ng trình qu n lý đi m môn h c c a sinh ế ươ ả ể ọ ủ viên M i sinh viên có các thông tin v h tên, l p, ỗ ề ọ ớ
đi m ki m tra 1, đi m ki m tra 2, trung bình ki m ể ể ể ể ể tra, đi m thi, đi m môn h c Nh p vào m t danh ể ể ọ ậ ộ sách n sinh viên Hi n danh sách ra màn hình theo ệ
d ng b ng v i các c t STT, H và tên, L p, TB ạ ả ớ ộ ọ ớ KTra, Đ.Thi, Đi m MH Khi nh p d li u ch nh p ể ậ ữ ệ ỉ ậ
H tên, L p, Đi m Ktra1, Đi m Ktra2, còn TB ọ ớ ể ể KTra = (Đi m KTra1 + Đi m Ktra2)/2, Đi m MH = ể ể ể 0,3xTB KTra + 0,7xĐi m Thi.ể
Trang 13II Ki u li t kê ể ệ
Ki u li t kê là ki u d li u do ng i l p trình t ể ệ ể ữ ệ ườ ậ ự
đ nh nghĩa b ng cách li t kê t t c các giá tr Các ị ằ ệ ấ ả ị giá tr c a ki u li t kê là các 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 các 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};
Trang 14II Ki u li t kê (ti p) ể ệ ế
Sau khi khai báo ki u li t kê ta có th khai ể ệ ể báo các bi n ki u li t nh các bi n ki u khác: ế ể ệ ư ế ể Tên_ki u_li t_kê Danh_sách_các_bi n; ể ệ ế
Ví d : ụ Gi s các ki u li t kê đã đ c khai ả ử ể ệ ượ báo trên, ta khai báo các 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;
Trang 15II Ki u li t kê (ti p) ể ệ ế
Các giá tr ki u li t kê đ c l u tr nh các s ị ể ệ ượ ư ữ ư ố nguyên ki u int, giá tr tên đ u tiên là 0, giá tr tên ể ị ầ ị
ti p theo là 1,…ế
Ví d :ụ V i ki u li t kê days_of_week trên thì Sun ớ ể ệ ở
có giá tr 0, Mon có giá tr 1, Tue có giá tr 3,…ị ị ị
Ta có th thay đ i giá tr s c a các giá tr tênể ổ ị ố ủ ị
Cho các giá tr tên có giá tr s b t đ u t m t s khác 0 ị ị ố ắ ầ ừ ộ ố
Ví d : enum mausac {Xanh=5, Do, Tim, Vang}; ụ
V i khai báo này Xanh có giá tr 5, Do có giá tr 6, Tim ớ ị ị
có giá tr 7, Vàng có giá tr 8 ị ị