ươ
Ch
ng 8
ộ
ộN i dung trình bày N i dung trình bày
ệ i thi u ấ ệ enum t kê
typedef ớ 1. Gi ể 2. Ki u c u trúc ể 3. Ki u li ừ 4. T khóa
ớ ớ
ệ ệ
1. Gi 1. Gi
i thi u i thi u
ủ ể ả
ơ ở
ề
ấ
V n đ : các ki u d li u c s không đ đ gi ữ ệ
i
ứ ạ
ể quy t các bài toán ph c t p ươ
t ch
ng trình tính l
ng cho nhân viên,
ươ
ươ ậ
ng trình cho nh p danh sách sinh viên
ả
ế t ch ế
ứ ạ
ể
i quy t bài toán ph c t p vì C không có ki u
ả
ể
ữ i quy t: C n ph i có cách đ t o ra các ki u d ứ ạ
ể ạ ế
i quy t bài toán ph c t p
ể ả ữ ệ
ế
Có 5 cách đ t o ki u d li u tùy bi n
Gi ầ ư ệ li u theo nh ý mu n đ gi ể ạ ấ
ế Ví d : Vi ụ ế ặ ho c vi gi nhân viên, sinh viên ả ế ố ể ◦Structure (C u trúc) ◦bitfield ◦Union ◦Enumeration ◦typedef
ộ
ộN i dung trình bày N i dung trình bày
ệ i thi u ấ ệ enum t kê
typedef ớ 1. Gi ể 2. Ki u c u trúc ể 3. Ki u li ừ 4. T khóa
ấ
ớ ớ
Gi Gi
ệ i thi u ệ i thi u
ấ2. C u trúc: 2. C u trúc:
M t c u trúc là m t t p các bi n đ
ộ ấ ộ ậ ế ượ ế c tham chi u
Nh ng bi n t o nên c u trúc đ
ạ ộ thông qua m t tên chung ấ ữ ượ ọ c g i là các
ế thành viên (members)
Ví d : C n t o c u trúc đ l u tr b ng d li u
ữ ả ữ ệ ể ư ụ ầ ạ ấ
sau:
Mã số
Họ tên
Điểm
Kết quả
0123
Lê An
19
Đậu
0124
Nguyễn Bê
12
Rớt
ồ
ố
ọ
◦C u trúc này g m các thành viên: mã s , h tên,
ấ ể
ế
ả
đi m, k t qu
ấ
Khai báo Khai báo
ấ2. C u trúc: 2. C u trúc:
structureName: Tên của
cấu trúc
struct structureName {
type: Kiểu dữ liệu của thành viên tương ứng member1,..., memberN: Tên các biến thành viên của cấu trúc
type member1; type member2; ... type memberN; .. .
varNames: Tên các biến cấu trúc (nếu có) phân cách nhau bởi dấu phẩy
} [varNames];
Struct phải được khai
báo liền sau những dòng include
ấ
Ví d 1ụVí d 1ụ
ấ2. C u trúc: 2. C u trúc:
ồ ộ ấ
ỗ
T o m t c u trúc sinh viên g m các thông tin: mã ọ ỗ s sinh viên (chu i), h tên (chu i), năm sinh (s ), đ a ch (chu i) struct SinhVien {
char MaSV[10]; char TenSV[30]; int NamSinh; char DiaChi[50];
} sv1, sv2; ế
ể
Có 2 bi n ki u c u trúc SinhVien là: ấ
sv1, sv2
ạ ố ố ỗ ỉ ị
ấ
Ví d 2ụVí d 2ụ
ấ2. C u trúc: 2. C u trúc:
ể ầ ộ
Thành ph n c a c u trúc có th có ki u là m t c đ nh nghĩa tr
ể ướ ủ ượ ấ ị c
int ngay; int thang; int nam;
}; struct HOSO {
char hoten [30]; struct NGAY ns; long LCB; long thuong; long thuclanh;
};
ấ c u trúc đã đ struct NGAY {
ấ
ấ ấ
ế Khai báo bi n c u trúc ế Khai báo bi n c u trúc
ấ2. C u trúc: 2. C u trúc:
Cú pháp (dùng 1 trong 2 cách):
struct structureName varName;
structureName varName;
◦Cách thứ 2 tương tự cách khai báo biến thông
thường
Ví dụ:
◦Khai báo biến s1, s2 có kiểu SinhVien
struct SinhVien s1, s2; SinhVien s1, s2;
// c1 // c2
ấ
ấ ấ
ậ ậ
ế Truy c p bi n c u trúc ế Truy c p bi n c u trúc
ấ2. C u trúc: 2. C u trúc:
Dùng toán t
ể ậ
ấ ộ
Cú pháp: Ph i dùng toán t ả ệ
ử ch mấ (dot operator) đ truy c p các ế ủ thành viên c a m t bi n c u trúc varName.memberName
ấ ậ ệ
Ví d :ụ
gets(sv1.MaSV)
gets(sv1.TenSV);
gets(sv1.NamSinh);
cout< ệ
ử ch mấ trong l nh nh p (cin,
gets), l nh xu t (cout, puts) và các l nh gán
thành viên Dùng l nh gán đ gán n i dung trong 1 bi n c u
ộ ệ ể ấ Ví d : ụ ể ừ struct SinhVien sv1, sv2; ặ
Ho c có th gán t ng thành
viên:
sv2.MaSV = sv1.MaSV;
sv2.TenSV=sv1.MaSV;
sv2.NamSinh=sv1.NamSinh
; ế ấ ộ ế
ể trúc cho m t bi n c u trúc khác có cùng ki u sv1 sv2 ả ấ ử ầ ỗ là M ng c u trúc là m t m ng mà m i ph n t
ộ
ể
m t bi n ki u c u trúc
ả ế Đ khai báo m t m ng các c u trúc, tr ấ
ộ ướ ấ ấ ủ ấ ế
c h t
ộ
ph i khai báo c u trúc, sau đó khai báo m t
m ng c a c u trúc đó struct DS{ char hoten[25];
float toan, ly, hoa;
}; ầ ử ể ả DS bangdiem[50]; //m ng 50 ph n t ki u DS ả
ộ
ể
ả
ả
Ví d : ụ ế ừ Đ truy c p đ n t ng thành viên c a t ng ph n
ầ
và ử ủ ỉ ủ ừ
ầ
ụ c a ph n t ch m c ậ
ả
ử ch mấ Ví d : Cho nh p li u vào m ng bangdiem
ệ
for( int i=0; i cout <<"Ho va ten: "; gets(bangdiem[i].hoten);
cout <<"Diem toan: "; cin>> bangdiem[i].toan;
cout <<"Diem ly: "; cin>> bangdiem[i].ly;
cout <<"Diem hoa: "; cin>> bangdiem[i].hoa; } ể
ử ủ
c a m ng, ta dùng
t
toán t
ụ ậ ả ế ấ ủ
a. Truy n thành viên c a bi n c u trúc vào hàm int x;
int y; };
double khcach( int x1, int y1, int x2, int y2 )
{ double kc;
kc = sqrt(pow((x2x1),2)+pow((y2y1),2));
return kc; } ề
Ví d :ụ
struct diem
{ ụ ế
Ví d (ti p theo):
void main()
{ diem a, b;
cout<<"\ntoa do diem a:";
cout<<"\nx1=";cin>>a.x;
cout<<"\ny1=";cin>>a.y;
cout<<"\ntoa do diem b:";
cout<<"\nx2=";cin>>b.x;
cout<<"\ny2=";cin>>b.y;
cout<<"\nKhoang cach giua a diem: ";
double kc = khcach(a.x, a.y, b.x, b.y);
cout<<"khoang cach giua a va b la: "< } ế ấ ộ ế
b. Truy n toàn b bi n c u trúc đ n hàm int x;
int y; };
double khcach( diem a, diem b )
{ double kc;
kc = sqrt(pow((b.xa.x),2)+pow((b.ya.y),2));
return kc; } ề
Ví d :ụ
struct diem
{ ụ ế
Ví d (ti p theo):
void main()
{ diem a, b;
cout<<"\ntoa do diem a:";
cout<<"\nx1=";cin>>a.x;
cout<<"\ny1=";cin>>a.y;
cout<<"\ntoa do diem b:";
cout<<"\nx2=";cin>>b.x;
cout<<"\ny2=";cin>>b.y;
cout<<"\nKhoang cach giua a diem: ";
double kc = khcach(a, b);
cout<<"khoang cach giua a va b la: "< } ế ả ấ c. Truy n m ng c u trúc đ n hàm int x;
int y; };
void NhapMangToaDo( diem list[], int n )
{ for (int i=0; i cout<<"\ntoa do diem thu "<>list[i].x;
cout<<"\ny1="; cin>>list[i].y; } } ề
Ví d :ụ
struct diem
{ ụ ế Ví d (ti p theo): void XuatMangToaDo( diem list[], int n )
{ for (int i=0; i cout<<"Toa do thu "<
} } void main() { diem d[10];
int n;
cout<<"Nhap so toa do: "; cin>>n;
NhapMangToaDo(d, n);
XuatMangToaDo (d,n); } ỏ ấ ủ ể ậ ộ Đ truy c p đ n thành viên c a m t con tr c u trúc, ta dùng toán t ế
ử > Ví d :ụ struct diem{ int x;
int y; };
void main() {
diem *p;
cout<<"Nhap x:";
cin>>p>x;
cout<<"Nhap y:";
cin>>p>y;
cout< x<<" "< y; } ệ
i thi u
ấ
ệ enum t kê typedef ớ
1. Gi
ể
2. Ki u c u trúc
ể
3. Ki u li
ừ
4. T khóa ộ ữ ệ t đ ượ
ệ
c
ộ
cho m t Ki u ể enum là m t ki u d li u đ c bi
ặ
ệ ứ ự
dùng đ đ nh nghĩa m t quan h th t
t p hậ
ỗ ể ị
ữ ượ enum t
ị ủ ộ
ộ ứ ấ Cú pháp: ế ế ể
ộ
ạ
ợp h u h n các tên
M i m t tên trong danh sách
ư
ng tr ng
ị
cho m t giá tr nguyên. Giá tr c a tên th nh t
trong enum là 0, k ti p là 1, ... ủ ằ ◦enumName: Tên c a enum
◦enumList: Danh sách các tên h ng phân cách nhau ở ấ ẩ
b i d u ph y ể ế ◦enumVars: Tên các bi n ki u enum Ví d khai báo enum: enum color {red, orange, yellow, green, blue, indigo}; enum Tên_enum; ụ Khai báo bi n ki u enum:
ế ể Ví d khai báo bi n ki u enum: color c1 = indigo; if (c1 == indigo) cout<< "c1 is indigo"<< endl; ụ ế ể ệ
i thi u
ấ
ệ enum t kê typedef ớ
1. Gi
ể
2. Ki u c u trúc
ể
3. Ki u li
ừ
4. T khóa T khóa ừ ể ị ộ ớ
typedef dùng đ đ nh nghĩa m t tên m i ữ ệ
ủ ộ
ổ ạ ể
cho m t ki u d li u đã có
D ng t ng quát c a dùng typedef là: ồ ạ
i ữ ệ
ể ◦existingType: là ki u d li u nào đã t n t
ể
◦newType: tên m i c a ki u d li u
ữ ệ
ớ ủ Trong cú pháp khai báo c u trúc, có th k t h p
ể ế ợ
ấ
ạ cho c u trúc đó ấ
ặ typedef để đ t tên l khóa i ớ ừ
v i t
Ví d :ụ typedef struct {
char* name;
int* age; } person; ỉ ầ ế ế t là: ư ậ
Nh v y khi khai báo bi n ch c n vi
person p1; ậ ủ ế ấ
bi n c u trúc ử ch m ấ (dot ế ế bi n con tr ỏ thì dùng toán t ử > (arrow ◦N u dùng
operator).
◦N u dùng
operator). ế
ế ộ ấ
thì dùng toán t Truy n tham s là con tr c u trúc thì m c đ nh là ỏ ấ ề ặ ố ị truy n ề tham chi uếấ
ệ
ệ
ấ
ấ
L nh gán c u trúc
L nh gán c u trúc
ấ2. C u trúc:
2. C u trúc:
sv1.MaSV= “a001”;
sv1.TenSV=“Nguyen van A”;
sv1.NamSinh=1977;
sv2 = sv1;
a001
Nguyen Van A
1977
ấ
ấ
ấ
ả
ả
M ng các c u trúc
M ng các c u trúc
ấ2. C u trúc:
2. C u trúc:
ấ
ấ
ấ
ả
ả
M ng các c u trúc
M ng các c u trúc
ấ2. C u trúc:
2. C u trúc:
ố ể
ố ể
ề
ề
Truy n tham s ki u
Truy n tham s ki u
ấ
ấ2. C u trúc:
2. C u trúc:
ấ
ấc u trúc
c u trúc
ố ể
ố ể
ề
ề
Truy n tham s ki u
Truy n tham s ki u
ấ
ấ2. C u trúc:
2. C u trúc:
ấ
ấc u trúc (tt)
c u trúc (tt)
ố ể
ố ể
ề
ề
Truy n tham s ki u
Truy n tham s ki u
ấ
ấ2. C u trúc:
2. C u trúc:
ấ
ấc u trúc (tt)
c u trúc (tt)
ố ể
ố ể
ề
ề
Truy n tham s ki u
Truy n tham s ki u
ấ
ấ2. C u trúc:
2. C u trúc:
ấ
ấc u trúc (tt)
c u trúc (tt)
ố ể
ố ể
ề
ề
Truy n tham s ki u
Truy n tham s ki u
ấ
ấ2. C u trúc:
2. C u trúc:
ấ
ấc u trúc (tt)
c u trúc (tt)
ố ể
ố ể
ề
ề
Truy n tham s ki u
Truy n tham s ki u
ấ
ấ2. C u trúc:
2. C u trúc:
ấ
ấc u trúc (tt)
c u trúc (tt)
ấ
ỏ ấ
Con tr c u trúc
ỏ ấ
Con tr c u trúc
ấ2. C u trúc:
2. C u trúc:
structureName *structurePointers;
ử ụ
ử ụ
ỏ ấ
ỏ ấ
S d ng con tr c u
S d ng con tr c u
ấ2. C u trúc:
2. C u trúc:
ấ
trúctrúc
ộ
ộN i dung trình bày
N i dung trình bày
ệ
ệ
ể
ể
3. Ki u li
3. Ki u li
t kê enum
t kê enum
enum enumName {enumList} [enumVars];
ệ
ệ
Ví dụVí dụ
ể
ể
3. Ki u li
3. Ki u li
t kê enum:
t kê enum:
ộ
ộN i dung trình bày
N i dung trình bày
ừ
ớ
ớ
Gi
Gi
ệ
i thi u
ệ
i thi u
ừ4. T khóa typedef:
4. T khóa typedef:
typedef existingType newType;
ừ
ớ
ớ
Gi
Gi
ệ
i thi u (tt)
ệ
i thi u (tt)
ừ3. T khóa typedef:
3. T khóa typedef:
ớ ấ
ớ ấ
Dùng v i c u
Dùng v i c u
ừ3. T khóa typedef:
3. T khóa typedef:
ừ
trúctrúc
ử ụ
ử ụ
ỏ ấ
ỏ ấ
2.7. S d ng con tr c u trúc
2.7. S d ng con tr c u trúc
L u ý:
ư
Đ truy c p đ n thành viên c a m t c u trúc:
ể