Tải bản đầy đủ (.ppt) (28 trang)

Bài giảng Phương pháp lập trình - Chương 8: Kiểu cấu trúc (2016)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (322.58 KB, 28 trang )

Chương 8


Nội dung trình bày
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.


1. Giới thiệu
 Vấn

đề: các kiểu dữ liệu cơ sở khơng đủ để
giải quyết các bài tốn phức tạp
 Ví dụ: Viết chương trình tính lương cho nhân
viên, hoặc viết chương trình cho nhập danh
sách sinh viên  giải quyết bài tốn phức
tạp vì C khơng có kiểu nhân viên, sinh viên
 Giải quyết: Cần phải có cách để tạo ra các
kiểu dữ liệu theo như ý muốn để giải quyết
bài tốn phức tạp
 Có 5 cách để tạo kiểu dữ liệu tùy biến
◦ Structure
(Cấu trúc)
◦ bit-field
◦ Union
◦ Enumeration
◦ typedef



Nội dung trình bày
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.


2. Cấu trúc: Giới thiệu
 Một

cấu trúc là một tập các biến được
tham chiếu thông qua một tên chung
 Những biến tạo nên cấu trúc đượ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ả


2. Cấu trúc: Khai báo
struct structureName
{
type member1;
type member2;
...
type memberN;
.. .
} [varNames];

 structureName:

Tên của


cấu trúc
 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
 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
 Struct phải được khai
báo liền sau những dòng
include


2. Cấu trúc: Ví dụ 1
 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



2. Cấu trúc: Ví dụ 2
 Thành

phần của cấu trúc có thể có kiểu
là một cấu trúc đã được định nghĩa trước
struct NGAY
{
int ngay;
int thang;
int nam;
};
struct HOSO
{
char hoten [30];
struct NGAY ns;
long LCB;
long thuong;
long thuclanh;
};


2. Cấu trúc: Khai báo biến 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


2. Cấu trúc: Truy cập biến cấu
trúc
 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

 Cú

pháp: varName.memberName
 Phải dùng toán tử 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
 Ví


dụ:

gets(sv1.MaSV)
gets(sv1.TenSV);
gets(sv1.NamSinh);
cout<Sinh;


2. Cấu trúc: Lệnh gán cấu trúc
 Dùng

lệnh gán để gán nội dung trong 1
biến cấu trúc cho một biến cấu trúc
khác có cùng kiểu
Hoặc có thể gán từng
 Ví dụ:
thành viên:
struct SinhVien sv1, sv2;
sv2.MaSV = sv1.MaSV;
sv1.MaSV= “a001”;
sv2.TenSV=sv1.MaSV;
sv1.TenSV=“Nguyen vansv2.NamSinh=sv1.NamS
A”;
inh;
sv1.NamSinh=1977;
sv2 = sv1;

sv1
sv2


a001

Nguyen Van
A

1977


2. Cấu trúc: Mảng các cấu trúc
 Mảng

cấu trúc là một mảng mà mỗi
phần tử là 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 đó
 Ví dụ:
struct DS{
char hoten[25];
float toan, ly, hoa;
};
DS bangdiem[50]; //mảng 50 phần tử kiểu
DS


2. Cấu trúc: Mảng các cấu trúc
 Để

truy cập đến từng thành viên của từng

phần tử của mảng, ta dùng chỉ mục của
phần tử và tốn tử 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;
}


2. Cấu trúc: Truyền tham số
kiểu cấu trúc
a. Truyền thành viên của biến cấu trúc vào
hàm
Ví dụ:
struct diem
{
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;

}


2. Cấu trúc: Truyền tham số
kiểu 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: "<}


2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
b. Truyền tồn bộ biến cấu trúc đến hàm
Ví dụ:
struct diem
{
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;
}


2. Cấu trúc: Truyền tham số
kiểu 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: "<}


2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
c. Truyền mảng cấu trúc đến hàm
Ví dụ:

struct diem
{
int x;
int y;
};
void NhapMangToaDo( diem list[], int n )
{
for (int i=0; icout<<"\ntoa do diem thu "<cout<<"\nx1="; cin>>list[i].x;
cout<<"\ny1="; cin>>list[i].y;
}
}


2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
Ví dụ (tiếp theo):
void XuatMangToaDo( diem list[], int n )
{
for (int i=0; icout<<"Toa do thu "<cout<}
}
void main()
{
diem d[10];
int n;
cout<<"Nhap so toa do: "; cin>>n;

NhapMangToaDo(d, n);
XuatMangToaDo (d,n);
}


2. Cấu trúc: Con trỏ cấu trúc

structureName *structurePointers;


2. Cấu trúc: Sử dụng con trỏ
cấu trúc
 Để

truy cập đến thành viên của một con
trỏ cấu trúc, ta dùng tố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
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.


3. Kiểu liệt kê enum
 Kiểu

enum là một kiểu dữ liệu đặc biệt
được dùng để định nghĩa một quan hệ thứ
tự cho một tập hợp hữu hạn các tên
 Mỗi một tên trong danh sách enum tượ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, ...
 Cú pháp:
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


3. Kiểu liệt kê enum: Ví dụ

 Ví

dụ khai báo enum:

enum color {red, orange, yellow, green,
blue, indigo};
enum Tên_enum;
Khai
Ví

báo biến kiểu enum:

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
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.


×