Bài giảng Giới thiệu lập trình - Bài 10: Cấu trúc struct
Truyền Biến Cấu Trúc struct Cho Hàm
void _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ,
ToaDo & trungDiem ) {
trungDiem.x = ( td1.x + td2.x ) / 2;
trungDiem.y = ( td1.y + td2.y ) / 2;
}
ToaDo * _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ) {
ToaDo * trungDiem = new ToaDo;
(*trungDiem).x = ( td1.x + td2.x ) / 2;
(*trungDiem).y = ( td1.y + td2.y ) / 2;
return trungDiem;
}
Giới Thiệu Lập TrìnhTruyền Biến Cấu Trúc struct Cho Hàm
int main ( ) {
ToaDo td1 ;
_nhapToaDo ( td1 ) ;
ToaDo td2 ;
_nhapToaDo ( td2 ) ;
ToaDo tdTrgD1 ;
_trungDiem ( td1 , td2 , tdTrgD1 ) ;
ToaDo * tdTrgD2 = new ToaDo;
tdTrgD2 = _trungDiem ( td1 , td2 ) ;
_inToaDo ( tdTrgD1 ) ;
_inToaDo ( *tdTrgD2 ) ;
}
Giới Thiệu Lập
24 trang |
Chia sẻ: thucuc2301 | Lượt xem: 744 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Giới thiệu lập trình - Bài 10: Cấu trúc struct, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Giới Thiệu Lập Trình
Cấu Trúc struct
TS. Lê Nguyên Khôi
Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
Cấu trúc struct
Kiểu dữ liệu nhóm
Định nghĩa
Khai báo / Khởi tạo
Sử dụng
Truyền biến cho hàm
Giới Thiệu Lập Trình
Kiểu Dữ Liệu Nhóm
2
Kiểu Mảng:
Tập hợp dữ liệu cùng kiểu
Khai báo sau đó sử dụng như biến đơn lẻ
Truyền cho hàm: truyền địa chỉ
Kiểu cấu trúc struct:
Tập hợp dữ liệu có thể khác kiểu
Phải định nghĩa trước khi sử dụng
Khai báo sau đó sử dụng như biến đơn lẻ
Truyền cho hàm: giống biến đơn lẻ
Giới Thiệu Lập Trình
Kiểu DL Cấu Trúc struct
3
Tập hợp dữ liệu, có thể khác kiểu, được nhóm
Mỗi dữ liệu được lưu trong một biến (trường)
Mỗi dữ liệu có kiểu dữ liệu cụ thể
Hỗ trợ tổ chức dữ liệu phức tạp vào cùng một
đối tượng
Hỗ trợ làm việc giữa các dữ liệu trên đối tượng
Giới Thiệu Lập Trình
Kiểu DL Cấu Trúc struct – Ví Dụ
4
Tên Trường Kiểu Dữ Liệu Dữ Liệu
MSSV string 12345678
HoTen string Trach Van Doanh
NgaySinh string 01/01/1999
GioiTinh bool true
Giới Thiệu Lập Trình
Kiểu DL Cấu Trúc struct – Định Nghĩa
5
Định nghĩa bởi từ khóa struct
Định nghĩa toàn cục
Ngoài và trước int main()
Tất cả các hàm đều hiểu
Không được cấp phát bộ nhớ
Chỉ có mục đích miêu tả cấu trúc
Chỉ cấp phát bộ nhớ
Khi khai báo biến kiểu cấu trúc
Miêu tả:
Các thành phần (trường) và kiểu của chúng
Giới Thiệu Lập Trình
struct sinhvien – Định Nghĩa
6
struct sinhvien {
string MSSV;
string HoTen;
string NgaySinh;
bool GioiTinh;
} ;
Giới Thiệu Lập Trình
Tên Trường Kiểu Dữ Liệu Dữ Liệu
MSSV string 12345678
HoTen string Trach Van Doanh
NgaySinh string 01/01/1999
GioiTinh bool true
struct sinhvien – Khai Báo/Khởi Tạo
7
struct sinhvien {
string MSSV;
string HoTen;
string NgaySinh;
bool GioiTinh;
} ;
int main() {
struct sinhvien sv1;
struct sinhvien sv2 = { "12345678" ,
"Trach Van Doanh" ,
"01/01/1999" ,
true } ;
}
Giới Thiệu Lập Trình
Truy Cập Thành Phần struct
8
Sử dụng toán tử chấm (.)
sv1 . MSSV
sv1 . HoTen
sv1 . NgaySinh
sv1 . GioiTinh
Gọi tên là “biến thành phần”
Các thành phần của biến kiểu cấu trúc
Kiểu cấu trúc struct khác nhau có thể có cùng tên
biến thành phần
Biến thành phần là biến cục bộ
Giới Thiệu Lập Trình
Truy Cập Thành Phần struct – Ví Dụ
9
struct sinhvien {
string MSSV;
string HoTen;
string NgaySinh;
bool GioiTinh;
} ;
int main() {
struct sinhvien sv1;
sv1.MSSV = "12345678";
sv1.HoTen = "Trach Van Doanh";
sv1.NgaySinh = "01/01/1999";
sv1.GioiTinh = true;
}
Giới Thiệu Lập Trình
struct ngaythangnam
10
struct ngaythangnam {
int ngay;
int thang;
int nam;
} ;
int main() {
struct ngaythangnam homNay = {1, 4, 2000};
struct ngaythangnam ngayMai;
ngayMai.ngay = homNay.ngay + 1;
ngayMai.thang = homNay.thang;
ngayMai.nam = homNay.nam;
}
Giới Thiệu Lập Trình
Cấu Trúc struct – Phép Gán
11
Với cấu trúc struct ngaythangnam
Khai báo 2 biến cấu trúc
struct ngaythangnam homQua, homNay;
Cả 2 biến đều kiểu struct ngaythangnam
Thực hiện phép gán đơn giản hợp lệ
homQua = homNay;
Sao chép giá trị biến thành phần homNay của cho
các biến thành phần của homQua, tương đương
homQua.ngay = homNay.ngay;
homQua.thang = homNay.thang;
homQua.nam = homNay.nam;
Giới Thiệu Lập Trình
Cấu Trúc struct – Phép Toán Khác
12
Các phép toán khác không được định nghĩa
cho kiểu cấu trúc struct
So sánh bằng/khác (==, !=)
(homQua == homNay biểu thức không hợp lệ)
So sánh thứ tự (, ...)
(homQua < homNay biểu thức không hợp lệ)
Các phép toán
(homQua + homNay biểu thức không hợp lệ)
Nhập & in
(cin & cout không hợp lệ)
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
13
struct toado {
int x, y;
} ;
typedef struct toado ToaDo;
void _nhapToaDo(ToaDo & td) {
cin >> td.x >> td.y;
}
void _inToaDo(const ToaDo & td) {
cout << "(" << td.x << "," << td.y << ")";
}
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
14
struct toado { int x , y ; } ;
typedef struct toado ToaDo;
void _nhapToaDo ( ToaDo & td ) ;
void _inToaDo ( const ToaDo & td ) ;
int main ( ) {
ToaDo td1;
_nhapToaDo ( td1 ) ;
_inToaDo ( td1 ) ;
ToaDo td2;
_nhapToaDo ( td2 ) ;
_inToaDo ( td2 ) ;
}
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
15
void _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ,
ToaDo & trungDiem ) {
trungDiem.x = ( td1.x + td2.x ) / 2;
trungDiem.y = ( td1.y + td2.y ) / 2;
}
ToaDo * _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ) {
ToaDo * trungDiem = new ToaDo;
(*trungDiem).x = ( td1.x + td2.x ) / 2;
(*trungDiem).y = ( td1.y + td2.y ) / 2;
return trungDiem;
}
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
16
int main ( ) {
ToaDo td1 ;
_nhapToaDo ( td1 ) ;
ToaDo td2 ;
_nhapToaDo ( td2 ) ;
ToaDo tdTrgD1 ;
_trungDiem ( td1 , td2 , tdTrgD1 ) ;
ToaDo * tdTrgD2 = new ToaDo;
tdTrgD2 = _trungDiem ( td1 , td2 ) ;
_inToaDo ( tdTrgD1 ) ;
_inToaDo ( *tdTrgD2 ) ;
}
Giới Thiệu Lập Trình
Cấu Trúc struct & Con Trỏ
17
Giống các kiểu dữ liệu khác:
struct toado * là con trỏ tới struct toado
Toán tử & trả về địa chỉ của biến cấu trúc
Theo thứ tự ưu tiên: “.” được ưu tiên trước “*”
Nếu td là con trỏ tới cấu trúc struct toado:
*p.x tương đương *(p.x) không hợp lệ
Phải sử dụng (*p).x
Để thuận tiện, có thể dùng toán tử ->:
kết hợp con trỏ (*) với truy cập trường (.)
p->a tương đương (*p).a
Giới Thiệu Lập Trình
struct thoigian
18Giới Thiệu Lập Trình
struct thoigian
19Giới Thiệu Lập Trình
struct sohuuti
20Giới Thiệu Lập Trình
struct sohuuti
21Giới Thiệu Lập Trình
struct dathuc
22Giới Thiệu Lập Trình
struct dathuc
23Giới Thiệu Lập Trình
Các file đính kèm theo tài liệu này:
- ts_le_nguyen_khoibaigiang10_cautrucstruct_4275_2032121.pdf