



















Preview text:
NGÔN NGỮ LẬP TRÌNH C 1 NỘI DUNG
▪ Chương 1: Ngôn ngữ lập trình và PP lập trình
▪ Chương 2: Tổng quan về ngôn ngữ C
▪ Chương 3: Kiểu dữ liệu và biểu thức trong C
▪ Chương 4: Cấu trúc lập trình trong C ▪ Chương 5: Hàm
▪ Chương 6: Mảng và xâu kí tự
▪ Chương 7: Con trỏ (Pointer)
▪ Chương 8: Kiểu cấu trúc (Structure)
▪ Chương 9: Kiểu tập tin (File) 2 Nội dung ❖ Khái niệm cấu trúc
❖ Khai báo và sử dụng cấu trúc
❖ Xử lý dữ liệu cấu trúc NỘI DUNG ❖ Mảng cấu trúc ❖ Con trỏ cấu trúc 3
Khái niệm kiểu cấu trúc
❖ Kiểu dữ liệu cấu trúc (struct) là kiểu dữ liệu phức
hợp, bao gồm nhiều thành phần có thể thuộc các kiểu dữ liệu khác nhau
▪ Các thành phần: gọi là trường dữ liệu (field)
▪ Các thành phần của một kiểu cấu trúc, không được truy
nhập theo chỉ số (mảng) mà theo tên của trường.
▪ Có thể coi một biến cấu trúc là một tập hợp thành một
biến duy nhất của các phần tử rời rạc. ❖ KHÁI
Ví dụ NIỆM CẤU TRÚC
▪ Kết quả học tập của SV: TenSV, MaSV, Diem.
▪ Thông tin cầu thủ: Ten, Tuoi, CLB, SoAo, Vitri,… 4 Nội dung ❖ Khái niệm cấu trúc
❖ Khai báo và sử dụng cấu trúc
❖ Xử lý dữ liệu cấu trúc NỘI DUNG ❖ Mảng cấu trúc ❖ Con trỏ cấu trúc 5
Khai báo và sử dụng cấu trúc
❖Khai báo kiểu cấu trúc
❖Khai báo biến cấu trúc 6
Khai báo kiểu dữ liệu cấu trúc
Có 2 cách khai báo kiểu dữ liệu cấu trúc Cách 1:
Cách 2: Sử dụng từ khóa
struct { typedef ; typedef struct { ; ; …….. ; ; …….. }; ; } ; 7
Khai báo kiểu dữ liệu cấu trúc ❖ Trong đó:
▪ : là một tên được đặt theo quy tắc đặt
tên của danh biểu; tên này mang ý nghĩa sẽ là tên kiểu cấu trúc.
▪ (i=1..n): mỗi trường trong cấu trúc
có dữ liệu thuộc kiểu gì (tên của trường phải là một
tên được đặt theo quy tắc đặt tên của danh biểu). 8 Ví dụ 1
Để quản lý ngày, tháng, năm của một ngày trong năm, có thể
khai báo kiểu cấu trúc gồm 3 thông tin: ngày, tháng, năm. Cách 1: Cách 2: struct NgayThang { typedef struct { unsigned char Ngay; unsigned char Ngay; unsigned char Thang; unsigned char Thang; unsigned int Nam; unsigned int Nam; }; } NgayThang; 9 Ví dụ 2
Mỗi sinh viên cần được quản lý bởi các thông tin: mã số sinh viên, họ
tên, ngày tháng năm sinh, giới tính, địa chỉ thường trú. Lúc này ta có
thể khai báo một struct gồm các thông tin trên. Cách 1: Cách 2: struct SinhVien { typedef struct { char MSSV[10]; char MSSV[10]; char HoTen[40]; char HoTen[40]; struct NgayThang NgaySinh; NgayThang NgaySinh; int Phai; int Phai; char DiaChi[40]; char DiaChi[40]; }; } SinhVien; 10 Khai báo biến cấu trúc Cú pháp
▪ Đối với cấu trúc được khai báo theo cách 1: struct [, …];
▪ Đối với các cấu trúc được khai báo theo cách 2: [, …]; 11 Ví dụ
Khai báo biến NgaySinh có kiểu cấu trúc NgayThang; biến SV
có kiểu cấu trúc SinhVien.
❖ Đối với cấu trúc được khai
❖ Đối với các cấu trúc báo theo cách 1:
được khai báo theo • struct NgayThang NgaySinh; cách 2: • struct SinhVien SV; • NgayThang NgaySinh; • SinhVien SV; 12 Nội dung ❖ Khái niệm cấu trúc
❖ Khai báo và sử dụng cấu trúc
❖ Xử lý dữ liệu cấu trúc NỘI DUNG ❖ Mảng cấu trúc ❖ Con trỏ cấu trúc 13
Xử lí dữ liệu cấu trúc
❖ Truy cập các trường dữ liệu ❖ Khởi tạo cấu trúc
XỬ LÝ DỮ LIỆU CẤU TRÚC 14
Truy cập các trường dữ liệu ❖ Cú pháp
tên_biến_cấu_trúc.tên_trường ❖ Lưu ý
▪ Dấu “.” là toán tử truy cập vào trường dữ liệu trong cấu trúc
▪ Nếu trường dữ liệu là một cấu trúc => sử dụng tiếp TRUY dấu “.”CẬP để truy CÁC cập vào TRƯỜNG
thành phần mức DỮ sâu hơn LIỆU 15 Ví dụ
Viết chương trình cho phép đọc dữ liệu từ bàn phím cho biến
mẩu tin SinhVien và in biến mẩu tin đó lên màn hình. #include #include #include typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; typedef struct { char MSSV[10]; char HoTen[40]; 16 Ví dụ (tt) NgayThang NgaySinh; int Phai; char DiaChi[40]; } SinhVien; void InSV(SinhVien s) {
printf("MSSV: | Ho va ten | Ngay Sinh | Dia chi\n"); printf("%s | %s | %d-%d-%d |
%s\n",s.MSSV,s.HoTen,s.NgaySinh.Ngay,
s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi); } 17 Ví dụ(tt) main() { SinhVien SV, s;
printf("Nhap MSSV: ");gets(SV.MSSV);
printf("Nhap Ho va ten: ");gets(SV.HoTen);
printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay);
printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang);
printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam);
printf("Gioi tinh (0: Nu), (1: Nam): ");
scanf("%d",&SV.Phai); flushall();
printf("Dia chi: ");gets(SV.DiaChi); InSV(SV);
s=SV; /* Gán trị cho mẩu tin s*/ InSV(s); getch(); } 18 Lưu ý
❖Các biến cấu trúc có thể gán cho nhau.
▪ Chương trình trên dòng s=SV là một ví dụ.
❖Với các biến kiểu cấu trúc ta KHÔNG thể
thực hiện được các thao tác sau đây:
▪ Sử dụng các hàm xuất nhập trên biến cấu trúc.
▪ Các phép toán quan hệ, các phép toán số học và logic. 19 Khởi tạo cấu trúc
❖Việc khởi tạo cấu trúc có thể được thực
hiện trong lúc khai báo biến cấu trúc.
▪ Các trường của cấu trúc được khởi tạo được đặt
giữa 2 dấu { và }, chúng được phân cách nhau bởi dấu phẩy (,).
❖ Ví dụ: Khởi tạo biến cấu trúc NgaySinh:
▪ struct NgayThang NgaySinh ={29, 8, 1986}; 20