ươ

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) ◦bit­field ◦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

ệ ệ

ấ ấ

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:

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.MaSV= “a001”; sv1.TenSV=“Nguyen van A”; sv1.NamSinh=1977; sv2 = sv1;

a001

Nguyen Van A

1977

sv1

sv2

ấ ấ

ả ả

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:

ả ấ ử ầ ỗ 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 : ụ

ấ ấ

ả ả

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  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 ụ ậ ả

ố ể ố ể

ề ề

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

ế ấ ủ 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((x2­x1),2)+pow((y2­y1),2)); return kc;

}

ề Ví d :ụ struct diem {

ố ể ố ể

ề ề

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)

ụ ế 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: "<

}

ố ể ố ể

ề ề

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)

ế ấ ộ ế 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.x­a.x),2)+pow((b.y­a.y),2)); return kc;

}

ề Ví d :ụ struct diem {

ố ể ố ể

ề ề

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)

ụ ế 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: "<

}

ố ể ố ể

ề ề

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)

ế ả ấ 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 "<

}

}

void main()

{

diem d[10]; int n; cout<<"Nhap so toa do: ";  cin>>n; NhapMangToaDo(d, n); XuatMangToaDo (d,n);

}

ỏ ấ 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

ỏ ấ

 Đ  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;

}

ộ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

ệ ệ

ể ể 3. Ki u li 3. Ki u li

t kê enum t kê enum

ộ ữ ệ 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, ...

enum enumName {enumList} [enumVars];

◦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ụVí dụ

ể ể 3. Ki u li 3. Ki u li

t kê enum:  t kê 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;

ụ ế ể

ộ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

ừ4. T  khóa typedef:  4. T  khóa typedef:

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à:

typedef  existingType  newType;

ồ ạ 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 ữ ệ ớ ủ

ớ ớ

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

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;

ử ụ ử ụ

ỏ ấ ỏ ấ

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: ể

ế

ấ 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ế