Tải bản đầy đủ (.pdf) (33 trang)

giáo trình C chương 7

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 (2.78 MB, 33 trang )

Chương 7
Kiu d liu cu trc
Mục tiêu - 1
 Tìm hiểu kiểu dữ liệu cấu trúc và công dụng
 Định nghĩa cấu trúc
 Khai báo các biến kiểu cấu trúc
 Cách truy cập vào các phần tử của cấu trúc
 Khởi tạo biến cấu trúc
 Sử dụng biến cấu trúc trong câu lệnh gán
 Cách truyền tham số cấu trúc
 Sử dụng mảng các cấu trúc
 Tìm hiểu cách khởi tạo mảng các cấu trúc .
 Con trỏ cấu trúc
 Cách truyền tham số kiểu con trỏ cấu trúc
Cấu Trúc
 Một cấu trúc bao gồm các thành phần dữ liệu, không
nhất thiết cùng kiểu, được nhóm lại với nhau.
1
Biến
I
L
L
U
S
I
O
N
Mảng
I L L U S I O N B A C H 1
Tên sách Tác giả
Lần


xuất bản
Định Nghĩa Cấu Trúc
 Cú pháp định nghĩa câu trúc:
struct <Tên cấu trúc>
{
Khai bo các thnh phn dữ liệu;
};
Ví dụ:
struct Sach{
char TenSach [25];
char TacGia [20];
int NamXB;
float Gia;
};
Định Nghĩa Cấu Trúc
 Một định định nghĩa cấu trúc:
 Tạo ra kiểu dữ liệu mới.
 Cho phép sử dụng để khai báo các biến kiểu cấu
trúc .
 Các biến trong cấu trúc được gọi là các phần tử của
cấu trúc hay thành phần của cấu trúc.
Khai Báo Biến Cấu Trúc
Khi một cấu trúc đã được định nghĩa, chúng ta có
thể khai báo một hoặc nhiều biến kiểu này.
Ví dụ:
struct Sach{
char TenSach[25];
char TacGia[20];
int NamXB;
float Gia;

} s1, s2;
struct Sach s1, s2;
hoặc
struct Sach s1;
struct Sach s2;
Từ Khóa typedef
 Một kiểu dữ liệu có thể được định nghĩa bằng cách
sử dụng từ khóa typedef
 Nó không tạo ra một kiểu dữ liệu mới, mà định
nghĩa một tên mới cho một kiểu đã có.
 Cú pháp:
typedef <Kiểu dữ liệu> <Tên mới>;
Ví dụ:
typedef int Int32;
 typedef không thể sử dụng với storage classes
 Sử dụng từ kháo typedef trong định nghĩa cấu trúc.
typedef struct
{
Khai bo các thnh phn dữ liệu;
} <Tên cấu trúc>;
Ví dụ:
typedef struct {
char TenSach [25];
char TacGia [20];
int NamXB;
float Gia;
}Sach;
Từ Khóa typedef
 Các cấu trúc được định nghĩa với từ khóa typedef.
 Không cần nhắc lại từ khóa struct khi khai báo biến

cấu trúc:
Từ Khóa typedef
typedef struct
{
int thuc;
int ao;
}SoPhuc;

SoPhuc sp;
Struct SoPhuc
{
int thuc;
int ao;
};

struct SoPhuc sp;
Khai Báo Biến Cấu Trúc
Bài tập 1: Viết chương trình:
 Định nghĩa cấu trúc Sach.
 Khai báo các biến cấu trúc Sach.
Truy Cập Phần Tử của Cấu Trúc
 Các phần tử của cấu trúc được truy cập thông qua
việc sử dụng toán tử chấm (.).
 Toán tử (.) còn được gọi là toán tử thành viên -
membership.
 Cú pháp:
<Tên biến cấu trúc>.<Tên thành phần>
Ví dụ:
scanf(“%s”, s1.TenSach);
Khởi Tạo Cấu Trúc

 Các biến kiểu cấu trúc có thể được khởi tạo tại thời
điểm khai báo
struct NhanVien {
int MaNV;
char TenNV [20];
};
 Các biến nv1và nv2 có kiểu NhanVien có thể
được khai báo và khởi tạo như sau:
struct NhanVien nv1 = {100,“John”};
struct NhanVien nv2 = {101,“David”};
Khai Báo Biến Cấu Trúc
Bài tập 2: Viết chương trình:
 Định nghĩa cấu trúc Sach.
 Khai báo và khởi tạo giá trị cho các biến cấu
trúc Sach.
 Hiển thị thông tin ra màn hình.
Khai Báo Biến Cấu Trúc
Bài tập 3: Viết chương trình:
 Định nghĩa cấu trúc Sach.
 Khai báo và nhập giá trị cho các biến cấu trúc
Sach.
 Hiển thị thông tin ra màn hình.
Câu Lệnh Gán
 Có thể sử dụng câu lệnh gán đơn giản để
gán giá trị của một biến cấu trúc cho một
biến khác có cùng kiểu
 Ví dụ, nếu s1 và s2 là các biến cấu trúc
có cùng kiểu, thì câu lệnh sau là hợp lệ
s2 = s1;
Khai Báo Biến Cấu Trúc

Bài tập 4: Viết chương trình:
 Định nghĩa cấu trúc Sach.
 Khai báo và nhập giá trị cho các biến cấu trúc
Sach.
 Kiểm tra phép gán các biến cấu trúc.
 Trường hợp không thể dùng câu lệnh gán trực tiếp, thì
có thể sử dụng hàm tạo sẵn memcpy()
 Cú pháp:
memcpy (void * destn, void *source, size_t size);
Ví dụ:
memcpy (&s2, &s1, sizeof(struct Sach));
Câu Lệnh Gán
Khai Báo Biến Cấu Trúc
Bài tập 5: Viết chương trình:
 Định nghĩa cấu trúc Sach.
 Khai báo và nhập giá trị cho các biến cấu trúc
Sach.
 Sử dụng hàm memcpy để gán giá trị từ 1 biến
cấu trúc cho 1 biến cấu trúc khác.
Cấu Trúc Lồng Trong Cấu Trúc
 Một cấu trúc có thể lồng trong một cấu trúc khác. Tuy
nhiên, một cấu trúc không thể lồng trong chính nó.
struct Date{
int Ngay, Thang, Nam;
};
struct SinhVien {
int MaSV;
char HoTen[30];
struct Date NgaySinh;
}sv;

Cấu Trúc Lồng Trong Cấu Trúc
 Việc truy cập vào các phần tử của cấu trúc này tương
tự như với cấu trúc bình thường khác,
sv.MaSV
 Để truy cập vào phần tử của cấu trúc cat là một phần
của cấu trúc issl ,
sv.NgaySinh.Ngay
Cấu trúc lồng trong cấu trúc
Bài tập 6: Viết chương trình:
 Định nghĩa cấu trúc SinhVien (MaSV, HoTen,
NgaySinh).
 Khai báo và nhập giá trị cho biến cấu trúc
SinhVien.
 Hiển thị thông tin ra màn hình.
Con Trỏ Đến Cấu Trúc
Toán tử -> được dùng để truy cập vào các phần
tử của một cấu trúc sử dụng một con trỏ
struct Sach s;
ptr = &s;
printf(“%s”,ptr->TacGia);
 Cú pháp khai báo con trỏ cấu trúc:
struct <Tên cấu trúc> * <Tên biến trỏ>
Ví dụ:
struct Sach *ptr;
Con Trỏ Đến Cấu Trúc
 Cấp phát bộ nhớ
ptr = (struct Sach*) malloc (sizeof (Sach));
 Truy xuất các thành phần của biến cấu trúc:
scanf (“%d”,ptr->NamXB);
 Sử dụng con trỏ để tạo mới một biến cấu trúc:

 Khai báo biến cần tạo ở dạng con trỏ

struct Sach *ptr;
Truyền tham số kiểu cấu trúc
 Tham số của hàm có thể là một cấu trúc.
 Là một phương tiện hữu dụng:
 Để truyền một nhóm các thành phần dữ liệu có
quan hệ logic với nhau thông qua một biến.
 Không cần phải truyền từng thành phần.
 Hai hình thức:
 Truyền theo tham trị.
 Truyền theo tham chiếu.
Truyền tham số kiểu cấu trúc
 Truyền tham trị.
 Khai báo nguyên mẫu hàm:
func (struct <Tên cấu trúc> <Tên biến >);
Ví dụ:
void HienThi (struct Sach s);
 Gọi hàm:
<Tên hàm> (<Tên biến cấu trúc>)
struct Sach s;
HienThi(s);

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×