5.1 Khai báo, khởi tạo
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 3
Khai báo cấu trúc:
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.
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.
20 trang |
Chia sẻ: thanhle95 | Lượt xem: 524 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Bài giảng Kỹ thuật lập trình - Chương V: Kiểu dữ liệu cấu trúc, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LOGO
Chương V
Kiểu dữ liệu cấu trúc
COMPANY LOGO
www.themegallery.com
Nội dung chính
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 2
Khai báo, khởi tạo5.1
Truy nhập các thành phần5.2
Hàm với cấu trúc5.3
Câu lệnh typedef5.4
Hàm sizeof()5.5
COMPANY LOGO
www.themegallery.com
5.1 Khai báo, khởi tạo
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 3
Khai báo cấu trúc:
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.
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.
struct
{
các thành phần ;
} ;
COMPANY LOGO
www.themegallery.com
5.1 Khai báo, khởi tạo
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 4
- 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:
biến = { giá trị khởi tạo } ;
COMPANY LOGO
www.themegallery.com
Ví dụ 1:
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 5
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:
struct Phanso { int tu, mau ; };
COMPANY LOGO
www.themegallery.com
Ví dụ 2:
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 6
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 } ;
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
www.themegallery.com
Ví dụ 3:
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 7
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:
Lop daihoc = {" CN14A ", 60}, caodang ;
COMPANY LOGO
www.themegallery.com
5.2 Truy nhập các thành phần
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 8
Đố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.
Đố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
www.themegallery.com
Ví dụ
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 9
#include
#include
using namespace std;
int main()
{
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<<a.tuoi<<endl; // Xuất ra 22
p=new sinhvien;
strcpy(p->ten, a.ten); Copy thành phần ten tử cấu trúc a sang p
coutten; // Xuất ra Ly Minh Tai
}
COMPANY LOGO
www.themegallery.com
5.3 Hàm với cấu trúc
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 10
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
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
www.themegallery.com
Ví dụ: Con trỏ và địa chỉ cấu trúc
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 11
#include
using namespace std;
int main()
{
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
coutten<<endl; // Xuất ra Ly Minh Tai
q=&a[4]; Cho q trỏ vào a[4]
coutque_quan; // Xuất ra Nam Dinh
}
COMPANY LOGO
www.themegallery.com
Ví dụ: Đị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 12
#include
using namespace std;
int main()
{
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<<ht<<" "<<*t<<" tuoi"; //Tran Viet Hoang 19 tuoi
}
COMPANY LOGO
www.themegallery.com
5.3 Hàm với cấu trúc
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 13
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
đối thực sự là tên mảng 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
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 14
#include
using namespace std;
struct so_thuc{ //Khai báo cấu trúc so_thuc
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<<a.phan_nguyen<<"."<<a.thap_phan;
}
COMPANY LOGO
www.themegallery.com
5.3 Hàm với cấu trúc
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 15
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
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.
COMPANY LOGO
www.themegallery.com
Ví dụ
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 16
#include
using namespace std;
struct so_phuc{ float thuc;
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<<z.thuc<<"+"<<z.ao<<"*i";
}
COMPANY LOGO
www.themegallery.com
5.4 Câu lệnh typedef
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 17
Để 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:
typedef struct Date {
int ng;
int th;
int nam;
};
COMPANY LOGO
www.themegallery.com
5.5 Hàm sizeof()
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 18
Hàm sizeof() trả lại kích thước của một biến hoặc kiểu.
Ví dụ:
#include
using namespace std;
int main()
{
double x;
struct date{
int ngay; int thang; int nam;
}y;
cout<<sizeof(x)<<endl; // Xuất ra 8
cout<<sizeof(y); //Xuất ra 12 ( kiểu int kích thước là 4)
}
COMPANY LOGO
www.themegallery.com
Bài tập chương 5
Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình 19
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.
LOGO
www.themegallery.com