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

Bài giảng ngôn ngữ lập trình c chương 8 cấu trúc

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 (89.71 KB, 10 trang )

CHƯƠNG 8: CẤU TRÚC
Nội dung
Kiểu cấu trúc
Truy nhập đến các thành phần của cấu trúc
Mảng cấu trúc
Nhập xuất kiểu cấu trúc
Khởi tạo cho một cấu trúc


Kiểu cấu trúc
 Cấu trúc trong C là một kiểu dữ liệu kiểu bản ghi, cho phép nhiều loại dữ
liệu được nhóm lại với nhau.
 Nhờ cấu trúc ta có thể mô tả một đối tượng với các tính chất đặc trưng, mỗi
tính chất là một thành phần của cấu trúc.
 Khai báo kiểu cấu trúc
• typedef struct
• {

<khai báo các thành phần của nó>
• } <tên kiểu cấu trúc>;
• <tên kiểu cấu trúc> <tên biến cấu trúc>;















Ví dụ 1:
typedef struct
{
int x, y;
} DIEM;
typedef struct
{
DIEM A, B, C;
} TAMGIAC;
DIEM m;
TAMGIAC tg;






DIEM là một kiểu cấu trúc gồm hai thành phần tọa độ x, y kiểu int.
TAMGIAC là một kiểu cấu trúc gồm ba thành phần A, B, C kiểu DIEM.
m là một biến kiểu DIEM
tg là một biến kiểu TAMGIAC











Truy nhập đến các thành phần của cấu trúc
Để truy nhập đến một thành phần của một cấu trúc ta sử dụng một trong
các cách viết sau:
<tên cấu trúc>.<tên thành phần>
<tên cấu trúc>. <tên cấu trúc>.<tên thành phần>
….
Ví dụ 2: xét lại ví dụ 1
m là một điểm có tọa độ nguyên m.x, m.y
tg là một tam giác có 3 đỉnh tg.A, tg.B, tg.C. Đỉnh A có tọa độ tg.A.x,
tg.A.y, đỉnh B có tọa độ tg.B.x, tg.B.y và đỉnh C có tọa độ tg.C.x, tg.C.y


















Mảng cấu trúc
Mảng cấu trúc là một mảng mà mỗi phần tử của nó là một cấu trúc bao
gồm nhiều thành phần.
Ví dụ 3:
typedef struct
{
char ma[11]; //ma hoc sinh toi da 10 ký tự
char ten[31]; //ten hoc sinh toi da 30 ký tự
float toan, ly, hoa;
} HOCSINH;
void main()
{
HOCSINH a[20];

}
Với khai báo trên thì a là một mảng gồm 20 phần tử kiểu HOCSINH.
Chẳng hạn, a[10].ho sẽ lưu họ của học sinh có chỉ số 10, a[5].toan sẽ lưu
điểm toán của hoc sinh có chỉ số 5 trong mảng.














Nhập xuất kiểu cấu trúc
Ví dụ 4: Nhập xuất một học sinh
//khai báo nguyên mẫu
void Nhap1HS(HOCSINH *hs);
void In1HS(HOCSINH hs);
//định nghĩa các hàm
void Nhap1HS(HOCSINH *hs)
{
float tam;
printf(“Ma hoc sinh:”); fflush(stdin); gets(hs->ma);
printf(“Ho ten:”); gets(hs->ten);
printf(“Diem toan:”); scanf(“%f”, &tam);
hs->toan = tam;
printf(“Diem ly:”); scanf(“%f”, &tam);
hs->ly = tam;
printf(“Diem hoa:”); scanf(“%f”, &tam);
hs->hoa = tam;
}

















void In1HS(HOCSINH hs)
{
printf(“%10s%30s%6.2f%6.2f%6.2f\n”,
hs.ma, hs.ten, hs.toan, hs.ly, hs.hoa);
}
//hàm chính
void main()
{
HOCSINH hocsinh;
Nhap1HocSinh(&hocsinh);
In1HocSinh(hocsinh);
}
Chú ý: Trong C đối với các thành phần không nguyên của kiểu dữ liệu cấu
trúc, ta không thể sử dụng toán tử lấy địa chỉ (&).




















Ví dụ 5: Nhập xuất danh sách học sinh
#define MAX 20
//khai báo nguyên mẫu
void Nhap1HS(HOCSINH *hs);
void In1HS(HOCSINH hs);
void NhapDSHS(HOCSINH a[], int *n);
void InDSHS(HOCSINH a[], int n);
//định nghĩa các hàm
void NhapDSHS(HOCSINH a[], int *n)
{
<nhap so hoc sinh *n>
for(i = 0; i < *n, i++) {
printf(“--Hoc sinh thu %d--\n”, i);
Nhap1HS(&a[i]);
}
}


















void XuatDSHS(HOCSINH a[], int n)
{
for(i = 0; i < n, i++)
Xuat1HS(a[i]);
}
void main()
{
HOCSINH a[MAX];
int n;
printf(“Nhap danh sach hoc sinh\n”);
NhapDSHS(a, &n);
printf(“danh sach hoc sinh vua nhap\n”);
XuatDSHS(a, n);
}








Khởi tạo cho một cấu trúc
Ví dụ 5: Khởi tạo biến cấu trúc
struct HOCSINH hocsinh = {
“12A08”, “Le Van Hoang”, 8.5, 9, 5
};









Ví dụ 5: Khởi tạo mảng cấu trúc
struct HOCSINH a[20] = {
{“12A00”, “Le Minh An”, 10, 7.5, 8},
{“12A01”, “Duong Thi Nam Phuong”, 8.5, 9, 5},
...
{“12A019”, “Nguyen Van Dung”, 6, 10, 9},
};



×