LOGO
Chương V Kiểu dữ liệu cấu trúc
www.themegallery.com
Nội dung chính Nội dung chính
Khai báo, khởi tạo 5.1
Truy nhập các thành phần 5.2
Hàm với cấu trúc 5.3
Câu lệnh typedef 5.4
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
Hàm sizeof() 5.5
COMPANY LOGO
2
www.themegallery.com
5.1 Khai báo, khởi tạo 5.1 Khai báo, khởi tạo
Khai báo cấu trúc:
struct
các thành phần ;
}
Mỗi thành phần giống như một biến riêng của kiểu, nó gồm
kiểu và tên thành phần.
Phần tên của kiểu cấu trúc và phần danh sách biến có thể có
hoặc không.
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
Các kiểu cấu trúc được phép khai báo lồng nhau. Một biến có kiểu cấu trúc sẽ được phân bố bộ nhớ sao cho các thực hiện của nó được sắp liên tục theo thứ tự xuất hiện trong khai báo.
COMPANY LOGO
3
www.themegallery.com
5.1 Khai báo, khởi tạo 5.1 Khai báo, khởi tạo
- Khai báo biến kiểu cấu trúc cũng giống như khai báo
các biến kiểu cơ sở dưới dạng:
struct
Hoặc:
- Các biến được khai báo cũng có thể đi kèm khởi tạo:
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
COMPANY LOGO
4
www.themegallery.com
Ví dụ 1: Ví dụ 1:
Khai báo kiểu cấu trúc chứa phân số gồm 2 thành phần
nguyên chứa tử số và mẫu số. struct Phanso {
int tu ; int mau ;
} ;
hoặc:
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
struct Phanso { int tu, mau ; };
COMPANY LOGO
5
www.themegallery.com
Ví dụ 2: Ví dụ 2:
Kiểu ngày tháng gồm 3 thành phần nguyên chứa ngày,
tháng, năm.
struct Ngaythang {
int ng ; int th ; int nam ; } holiday = { 1,5,2000 } ;
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
Một biến holiday cũng được khai báo kèm cùng kiểu này và được khởi tạo bởi bộ số 1. 5. 2000. Các giá trị khởi tạo này lần lượt gán cho các thành phần theo đúng thứ tự trong khai báo, tức ng = 1, th = 5 và nam = 2000.
COMPANY LOGO
6
www.themegallery.com
Ví dụ 3: Ví dụ 3:
Kiểu Lop dùng chứa thông tin về một lớp học gồm tên lớp và sĩ số sinh viên. Các biến kiểu Lop được khai báo là daihoc và caodang, trong đó daihoc được khởi tạo bởi bộ giá trị {“CN14A", 60} với ý nghĩa tên lớp đại học là CN14A và sĩ số là 60 sinh viên.
struct Lop {
char tenlop[10], int soluong;
} ; struct Lop daihoc = {" CN14A ", 60}, caodang ;
hoặc:
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
Lop daihoc = {" CN14A ", 60}, caodang ;
COMPANY LOGO
7
www.themegallery.com
5.2 Truy nhập các thành phần 5.2 Truy nhập các thành phần
Đối với biến thường: Tên biến.Tên thành phần Đối với biến con trỏ : Tên biến -> Tên thành phần Đối với biến mảng: Truy nhập thành phần mảng rồi đến thành
phần cấu trúc.
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
Đối với cấu trúc lồng nhau. Truy nhập thành phần ngoài rồi đến thành phần của cấu trúc bên trong, sử dụng các phép toán . hoặc -> (các phép toán lấy thành phần) một cách thích hợp.
COMPANY LOGO
8
www.themegallery.com
Ví dụVí dụ
#include
struct sinhvien //Khai báo cấu trúc sinhvien {
char ten[33]; int tuoi; char que_quan[33];
}*p;
sinhvien a={"Ly Minh Tai", 22, "Hai Duong"};
cout<
}
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
COMPANY LOGO
9
www.themegallery.com
5.3 Hàm với cấu trúc 5.3 Hàm với cấu trúc
A. Con trỏ và địa chỉ cấu trúc
Một con trỏ cấu trúc cũng giống như con trỏ trỏ đến các kiểu dữ liệu khác, có nghĩa nó chứa địa chỉ của một biến cấu trúc hoặc một vùng nhớ có kiểu cấu trúc nào đó
B. Địa chỉ của các thành phần của cấu trúc
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
Các thành phần của một cấu trúc cũng giống như các biến, do vậy cách lấy địa chỉ của các thành phần này cũng tương tự như đối với biến bình thường.
COMPANY LOGO
10
www.themegallery.com
Ví dụ: Con trỏ và địa chỉ cấu trúc Ví dụ: Con trỏ và địa chỉ cấu trúc
#include
struct sinhvien {
char ten[33]; int tuoi; char que_quan[33];
}*p,*q, a[20], b={"Ly Minh Tai", 22, "Nam Dinh"};
p=&b; a[4]=b; //Cho p trỏ vào b, a[4] gán bằng b
cout<
}
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình
COMPANY LOGO
11
www.themegallery.com
Ví dụ: Địa chỉ của các thành phần của cấu trúc Ví dụ: Địa chỉ của các thành phần của cấu trúc
#include
struct sinhvien {
char ten[33]; int tuoi; char que_quan[33];
}b={"Tran Viet Hoang",19,"Ca Mau"};
int *t; char *ht;
t=&(b.tuoi); // t trỏ vào thành phần tuoi của b
ht=b.ten; // ht trỏ vào thành phần ten của b (không cần dấu &)
cout< } Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 12 C. Đối của hàm là cấu trúc Một cấu trúc có thể được sử dụng để làm đối của hàm dưới các dạng sau đây:
Là một biến cấu trúc, khi đó tham đối thực sự là một cấu trúc. Là một con trỏ cấu trúc, tham đối thực sự là địa chỉ của một cấu trúc. Là một tham chiếu cấu trúc, tham đối thực sự là một cấu trúc. Là một mảng cấu trúc hình thức hoặc con trỏ mảng, tham Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình đối thực sự là tên mảng cấu trúc. 13 #include int phan_nguyen;
unsigned thap_phan;}; void hien(so_thuc a);
int main()
{ so_thuc x={-222,178}; // x là cấu trúc so_thuc
hien(x); // Đối số x là một cấu trúc }
void hien(so_thuc a) // Hàm hiện số thực
{ cout< } Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 14 D. Giá trị hàm là cấu trúc Cũng tương tự như các kiểu dữ liệu cơ bản, giá trị trả lại Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình của một hàm cũng có thể là các cấu trúc dưới các dạng sau:
Là một biến cấu trúc.
Là một con trỏ cấu trúc.
Là một tham chiếu cấu trúc. 15 #include float ao;};
so_phuc tong(so_phuc a, so_phuc b)
{ so_phuc kq;
kq.thuc=a.thuc+b.thuc;
kq.ao=a.ao+b.ao;
return kq; }
int main()
{ so_phuc x={1,23}, y={2,22}, z;
z = tong(x, y);
cout< } Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 16 Để thuận tiện trong sử dụng, thông thường các kiểu được
người sử dụng tạo mới sẽ được gán cho một tên kiểu bằng câu
lệnh typedef như sau: typedef Ví dụ: Có thể đặt tên cho kiểu ngày tháng là Date với khai báo
sau: Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình typedef struct Date {
int ng;
int th;
int nam;
}; 17 Hàm sizeof() trả lại kích thước của một biến hoặc kiểu.
Ví dụ: #include double x;
struct date{ int ngay; int thang; int nam; }y; Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình cout< 18 Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình Bài 1. Cho phân số dưới dạng cấu trúc gồm 2 thành phần là tử và
mẫu. Viết chương trình nhập 2 phân số, in ra tổng, tích, hiệu,
thương của chúng dưới dạng tối giản.
Bài 2. Nhập một ngày tháng năm dưới dạng cấu trúc. Tính chính
xác (kể cả năm nhuận) số ngày đã qua kể từ ngày 1/1/1 cho đến
ngày đó.
Bài 3. Hiện thứ của một ngày bất kỳ nào đó, lấy ngày thứ hiện tại
để làm chuẩn.
Bài 4. Viết chương trình nhập một mảng sinh viên, thông tin về
mỗi sinh viên gồm họ tên và ngày sinh (kiểu cấu trúc). Sắp xếp
mảng theo tuổi và in ra màn hình.
Bài 5. Tính số ngày đã qua kể từ đầu năm cho đến ngày hiện tại. 19COMPANY LOGO
www.themegallery.com
5.3 Hàm với cấu trúc
5.3 Hàm với cấu trúc
COMPANY LOGO
www.themegallery.com
Ví dụ: Sử dụng cấu trúc làm đối số của hàm
Ví dụ: Sử dụng cấu trúc làm đối số của hàm
COMPANY LOGO
www.themegallery.com
5.3 Hàm với cấu trúc
5.3 Hàm với cấu trúc
COMPANY LOGO
www.themegallery.com
Ví dụVí dụ
COMPANY LOGO
www.themegallery.com
5.4 Câu lệnh typedef
5.4 Câu lệnh typedef
COMPANY LOGO
www.themegallery.com
5.5 Hàm sizeof()
5.5 Hàm sizeof()
COMPANY LOGO
www.themegallery.com
Bài tập chương 5
Bài tập chương 5
COMPANY LOGO
LOGO
www.themegallery.com