1
NGÔN NGỮ LẬP TRÌNH C
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)
NỘI DUNG
2
NỘI DUNG
Khái niệm cấu trúc
Khai báo sử dụng cấu trúc
Xử dữ liệu cấu trúc
Mảng cấu trúc
Con trỏ cấu trúc
Nội dung
3
KHÁI NIỆM 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 thể thuộc các
kiểu dữ liệu khác nhau
Các thành phần: gọi 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) theo tên của trường.
thể coi một biến cấu trúc 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.
dụ
Kết quả học tập của SV: TenSV, MaSV, Diem.
Thông tin cầu thủ: Ten, Tuoi, CLB, SoAo, Vitri,
Khái niệm kiểu cấu trúc
4
NỘI DUNG
Khái niệm cấu trúc
Khai báo sử dụng cấu trúc
Xử dữ liệu cấu trúc
Mảng cấu trúc
Con trỏ cấu trúc
Nội dung
5
Khai báo 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ách 1:
struct <Tên cấu trúc> {
<Kiểu> <Trường 1> ;
<Kiểu> <Trường 2> ;
……..
<Kiểu> <Trường n> ;
};
Cách 2: Sử dụng từ khóa
typedef
typedef struct {
<Kiểu> <Trường 1> ;
<Kiểu> <Trường 2> ;
……..
<Kiểu> <Trường n> ;
} <Tên cấu trúc>;
7
2 cách khai báo kiểu dữ liệu cấu trúc
Trong đó:
<Tên cấu trúc>: 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ẽ tên
kiểu cấu trúc.
<Kiểu> <Trường i> (i=1..n): mỗi trường trong cấu trúc
dữ liệu thuộc kiểu (tên của trường phải một
tên được đặt theo quy tắc đặt tên của danh biểu).
8
Khai báo kiểu dữ liệu cấu trúc
dụ 1
Cách 1:
struct NgayThang {
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
};
Cách 2:
typedef struct {
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
} NgayThang;
9
Để quản ngày, tháng, năm của một ngày trong m, có thể
khai báo kiểu cấu trúc gồm 3 thông tin: ngày, tháng, năm.
dụ 2
Cách 1:
struct SinhVien {
char MSSV[10];
char HoTen[40];
struct NgayThang NgaySinh;
int Phai;
char DiaChi[40];
};
Cách 2:
typedef struct {
char MSSV[10];
char HoTen[40];
NgayThang NgaySinh;
int Phai;
char DiaChi[40];
} SinhVien;
10
Mỗi sinh viên cần được quản bởi các thông tin: 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
thể khai báo một struct gồm các thông tin trên.
Khai báo biến cấu trúc
pháp
Đối với cấu trúc được khai báo theo cách 1:
struct <Tên cấu trúc> <Biến 1> [, <Biến 2>…];
Đối với các cấu trúc được khai báo theo cách 2:
<Tên cấu trúc> <Biến 1> [, <Biến 2>…];
11
dụ
Đối với cấu trúc được khai
báo theo cách 1:
struct NgayThang NgaySinh;
struct SinhVien SV;
Đối với các cấu trúc
được khai báo theo
cách 2:
NgayThang NgaySinh;
SinhVien SV;
12
Khai báo biến NgaySinh kiểu cấu trúc NgayThang; biến SV
kiểu cấu trúc SinhVien.
NỘI DUNG
Khái niệm cấu trúc
Khai báo sử dụng cấu trúc
Xử dữ liệu cấu trúc
Mảng cấu trúc
Con trỏ cấu trúc
Nội dung
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ử dữ liệu cấu trúc
14
TRUY CẬP CÁC TRƯỜNG DỮ
LIỆU
pháp
tên_biến_cấu_trúc.tên_trường
Lưu ý
Dấu . 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 một cấu trúc => sử dụng tiếp
dấu . để truy cập vào thành phần mức sâu hơn
Truy cập các trường dữ liệu
15
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 in biến mẩu tin đó lên màn hình.
#include<conio.h>
#include<stdio.h>
#include<string.h>
typedef struct {
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
} NgayThang;
typedef struct {
char MSSV[10];
char HoTen[40];
16
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
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 thể gán cho nhau.
Chương trình trên dòng s=SV mộtdụ.
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
logic.
19
Khởi tạo cấu trúc
Việc khởi tạo cấu trú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 { }, chúng được phân cách nhau bởi
dấu phẩy (,).
dụ: Khởi tạo biến cấu trúc NgaySinh:
struct NgayThang NgaySinh ={29, 8, 1986};
20

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