Bài giảng Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc - Nguyễn Thanh Hùng

Khái niệm cấu trúc

Trong C, structure (gọi tắt là struct) ~ kiểu dữ liệu bản ghi (record) trong Pascal.

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, mỗi thành phần có thể thuộc những kiểu dữ liệu khác nhau.

Các thành phần dữ liệu trong cấu trúc được gọi là các trường dữ liệu (field).

“Mô tả” đối tượng có nhiều phần thông tin, ví dụ quản lý hồ sơ cán bộ, sinh viên

Ví dụ: Cấu trúc mô tả sinh viên:

Cần lưu giữ các thông tin liên quan đến sinh viên như họ tên, tuổi, kết quả học tập

Mỗi thông tin thành phần lại có kiểu dữ liệu khác nhau

Họ tên có kiểu dữ liệu là xâu kí tự

Tuổi có kiểu dữ liệu là số nguyên

Kết quả học tập có kiểu dữ liệu là số thực.

 

ppt 31 trang kimcuc 4140
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc - Nguyễn Thanh Hùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc - Nguyễn Thanh Hùng

Bài giảng Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc - Nguyễn Thanh Hùng
1 
TIN HỌC ĐẠI CƯƠNG  PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C BÀI 7: CẤU TRÚC (struct) 
KHOA C¤NG NGHÖ TH¤NG TIN 
FACULTY OF INFORMATION TECHNOLOGY 
2 
Bài 7: Cấu trúc (struct) 
7.1. Khái niệm cấu trúc 
7.2. Khai báo và sử dụng cấu trúc 
7.3. Xử lí dữ liệu cấu trúc 
7.4. Mảng cấu trúc 
7.5. Bài tập 
3 
Bài 7: Cấu trúc (struct) 
7.1. Khái niệm cấu trúc 
7.2. Khai báo và sử dụng cấu trúc 
7.3. Xử lí dữ liệu cấu trúc 
7.4. Mảng cấu trúc 
7.5. Bài tập 
4 
7.1. Khái niệm cấu trúc 
Trong C, structure (gọi tắt là struct) ~ kiểu dữ liệu bản ghi (record) trong Pascal. 
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, mỗi thành phần có thể thuộc những kiểu dữ liệu khác nhau. 
Các thành phần dữ liệu trong cấu trúc được gọi là các trường dữ liệu ( field ). 
5 
7.1. Khái niệm cấu trúc (tiếp) 
“Mô tả” đối tượng có nhiều phần thông tin, ví dụ quản lý hồ sơ cán bộ, sinh viên 
Ví dụ: Cấu trúc mô tả sinh viên: 
Cần lưu giữ các thông tin liên quan đến sinh viên như họ tên, tuổi, kết quả học tập 
Mỗi thông tin thành phần lại có kiểu dữ liệu khác nhau 
Họ tên có kiểu dữ liệu là xâu kí tự 
Tuổi có kiểu dữ liệu là số nguyên 
Kết quả học tập có kiểu dữ liệu là số thực. 
6 
Bài 7: Cấu trúc (struct) 
7.1. Khái niệm cấu trúc 
7.2. Khai báo và sử dụng cấu trúc 
7.3. Xử lí dữ liệu cấu trúc 
7.4. Mảng cấu trúc 
7.5. Bài tập 
7 
7.2.1. Khai báo kiểu dữ liệu cấu trúc 
Cú pháp: 
struct ten_cau_truc 
{ 
	; 
}; 
Ví dụ: 
struct Sinh_Vien 
{ 
	 char ma_so_sinh_vien[10]; 
	char ho_va_ten[30]; 
	float diem_TinDC; 
}; 
8 
7.2.2. Khai báo biến cấu trúc 
Cú pháp: 
 ten_cau_truc ten_bien_cau_truc; 
Hoặc: 
	 struct ten_cau_truc ten_bien_cau_truc; 
Ví dụ: 
Sinh_Vien a, b, c; 
Hoặc: 
	 struct Sinh_Vien a, b, c; 
9 
7.2.3. Khai báo kết hợp 
Có thể kết hợp vừa khai báo kiểu dữ liệu cấu trúc vừa khai báo biến cấu trúc: 
	 struct [ten_cau_truc] 
	{ 
	//khai_bao_cac_truong; 
	} ten_bien_cau_truc; 
Ví dụ: 
 struct Thi_Sinh 
	{ 
	char SBD[10]; // so bao danh 
	char ho_va_ten[30]; 
	float ket_qua; 
	} ts1, ts2; 
10 
Struct lồng nhau 
Struct có thể lồng nhau. Ví dụ: 
struct Dia_Chi{//địa chỉ 
	int so_nha; 
	char ten_pho[20]; 
	char thanh_pho[20]; 
}; 
struct Nhan_Su{ //nhân sự 
	char ho_ten[20]; 
	Dia_Chi address; //trường address có kiểu địa chỉ 
	float he_so_luong; 
}; 
11 
7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef 
Đặt tên mới cho kiểu dữ liệu cấu trúc cú pháp: 
	 	typedef struct tên_cũ ten_moi; 
Hoặc có thể định nghĩa kiểu dữ liệu cấu trúc ngay khi khai báo bằng cú pháp 
	 typedef struct [tên_cũ] 
	{ 
	//khai_bao_cac_truong; 
	}danh_sach_cac_tên_mới; 
Lưu ý : Được ph é p đặt t ê n_mới tr ù ng với t ê n_cũ. 
12 
7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef (tiếp) 
Ví dụ: 
	 struct point_3D 
	{ 
	float x, y, z; 
	} P; 
	 struct point_3D M; 
	typedef struct point_3D p_ 3D; 
	 p_ 3D N; 
13 
7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef (tiếp) 
Ví dụ (tiếp): 
typedef struct hocsinh { 
 char hoten[35]; 
 char lop[7]; 
 float diemtoan, diemly, diemhoa; 
} HOCSINH; 
HOCSINH hs1, hs2; 
14 
Bài 7: Cấu trúc (struct) 
7.1. Khái niệm cấu trúc 
7.2. Khai báo và sử dụng cấu trúc 
7.3. Xử l ý dữ liệu cấu trúc 
7.4. Mảng cấu trúc 
7.5. Bài tập 
15 
7.3. Xử l ý dữ liệu cấu trúc 
Truy nhập các trường dữ liệu của cấu trúc 
Phép gán giữa c á c biến cấu trúc 
Con trỏ cấu trúc 
16 
7.3.1. Truy nhập các trường dữ liệu của cấu trúc 
Cú pháp : 
	t e n_bi e n_c a u_tr u c.t e n_tr uo ng 
V í dụ: 
struct point_2D 
	{ 
	char ten_diem; 
	float x, y; 
	} p; 
Truy cập tên của 1 điểm: p.ten_diem 
17 
Vấn đề vào ra dữ liệu cho các biến struct 
Cũng như dữ liệu kiểu mảng, không thể nhập/xuất dữ liệu trực tiếp cho struct mà cần phải nhập/xuất dữ liệu lần lượt cho từng trường của struct. 
Ví dụ, để nhập dữ liệu cho biến sv1 , có thể viết như sau: 
printf(“Nhap SBD:”); 
scanf(“%d”,&sv1.sbd); 
printf(“Nhap ho ten:”); 
fflush(stdin); //xoá bộ đệm, nếu không sv1.sbd sẽ nhận giá trị “3” !!! 
gets(sv1.ho_ten); 
printf(“Nhap diem thi:”); 
scanf(“%f”,&sv1.diem_thi); 
//In kết quả ra màn hình: 
printf(“SBD:%d\nHo ten:%s\nDiem:%d”,sv1.sbd,sv1.ho_ten,sv1.diem_thi); 
18 
7.3.2. Phép gán giữa các biến cấu trúc 
Giả sử ta c ó 2 biến cấu tr ú c l à a v à b c ó c ù ng kiểu dữ liệu l à một cấu tr ú c n à o đ ó . 
Ph é p g á n cấu tr ú c c ó c ú ph á p tương tự như ph é p g á n th ô ng thường: 
	 bien_cau_truc_1 = bien_cau_truc_2; 
19 
7.3.3. Con trỏ cấu trúc 
Cú pháp: 
struct t en_cau_truc * ten_bien_con_tro_ctruc ; 
Có 2 cách truy nhập vào trường dữ liệu của cấu trúc từ biến con trỏ cấu trúc là 
(* ten_bien_con_tro_ctruc ). ten_truong_du_lieu 
Hoặc: 
ten_bien_con_tro_ctruc -> ten_truong_du_lieu 
20 
Con trỏ struct 
Ví dụ: 
struct SinhVien *p; //hoac SinhVien *p; 
struct SinhVien sv, *psv;//psv là con trỏ 
printf(“Nhap SBD: ”);scanf(“%d”,&sv.sbd); 
psv = &sv;//lấy địa chỉ của biến sv 
printf(“SBD vua nhap:%d”, psv->sbd); 
printf(“Nhap lai SBD:”); 
scanf(“%d”,&(psv->sbd)); 
printf(“SBD vua nhap:%d”, (*psv).sbd); 
21 
Chú ý 
Trong ví dụ trước, chúng ta rút ra một số nhận xét: 
&sv cho ta địa chỉ của struct sv 
*psv là nội dung của bản ghi có địa chỉ là psvpsv->sbd và (*psv).sbd là tương đương. 
22 
Bài 7: Cấu trúc (struct) 
7.1. Khái niệm cấu trúc 
7.2. Khai báo và sử dụng cấu trúc 
7.3. Xử l ý dữ liệu cấu trúc 
7.4. Mảng cấu trúc 
7.5. Bài tập 
23 
7.4. Mảng cấu trúc 
Cú pháp: 
 struct ten_cau_truc ten_mang_ctruc [s o_ptu ]; 
Ví dụ: 
	struct sinh_vien 
	{ 
	char ho_ten[20]; 
	float diem_thi; 
	}; 
	struct sinh_vien lop_Tin5[80]; 
24 
Truyền tham số struct cho hàm 
Hàm trong C cho phép truyền tham số là struct. Hãy xem ví dụ sau đây (hàm viết thông tin một sinh viên ra màn hình): 
void in_sinh_vien(sinh_vien sv){ 
	printf(“\nHo ten: %s\nDiem thi: %4.1f, sv.ho_ten, sv.diem_thi); 
} 
Trong ví dụ trên, sv được truyền theo kiểu “tham trị”. 
Muốn truyền “tham biến”, hãy sử dụng con trỏ struct. 
25 
Ví dụ 
#include 
#include 
#include 
void main() 
{ 
	struct sinh_vien 
	{ 
	char ma_sv[10]; 
	char ho_ten[20]; 
	float diem_thi; 
	}; 
	struct sinh_vien sv[3]; 
	 int i; 
	clrscr(); 
26 
Ví dụ (tiếp) 
for(i=0;i<3;i++) 
{ 
	char str[20]; 
	float diem; 
	printf(“\nNhap thong tin cho sinh vien %d”,i+1); 
	 printf(“\nMa so sinh vien:”); 
	 fflush(stdin); gets(str); 
	strcpy(sv[i].ma_sv,str); 
	printf(“\n Ho va ten: “); 
	 fflush(stdin); gets(str); 
	strcp(sv[i].ho_ten,str); 
	 printf(“\n Diem thi: “); 
	scanf(“%f”,&diem); 
	 sv[i].diem_thi = diem; 
} 
27 
Ví dụ (tiếp) 
 printf(“\n Thong tin ve cac sinh vien”); 
 for(i=0;i<3;i++) 
 { 
	 printf(“\n Sinh vien thu %d ”,i+1); 
	 printf(“%-10s %-20s %3.1f”, sv[i].ma_sv, sv[i].ho_ten, sv[i].diem_thi); 
 } 
 getch(); 
} 
28 
Ví dụ - Kết quả 
Nhap thong tin cho sinh vien thu 1 
Ma so sinh vien: SV0032 
Ho va ten: Nguyen Thanh Binh 
Diem thi: 8.5 
Nhap thong tin cho sinh vien thu 2 
Ma so sinh vien: SV0002 
Ho va ten: Pham Hong Phuc 
Diem thi: 9 
Nhap thong tin cho sinh vien thu 3 
Ma so sinh vien: SV0046 
Ho va ten: Le Minh Hoa 
Diem thi: 10 
Thong tin ve cac sinh vien 
Sinh vien thu 1: SV0032 Nguyen Thanh Binh 8.5 
Sinh vien thu 2: SV0002 Pham Hong Phuc 9.0 
Sinh vien thu 3: SV0046 Le Minh Hoa 10.0 
29 
Bài tập 
Viết 1 chương tr ì nh thực hiện những c ô ng việc sau: 
Y ê u cầu người d ù ng nhập v à o một số nguy ê n dương n với 5 n 20 (c ó kiểm tra t í nh hợp lệ của gi á trị được nhập v à o, nếu gi á trị n nhập v à o kh ô ng thỏa m ã n điều kiện th ì y ê u cầu nhập lại) 
Y ê u cầu người d ù ng nhập v à o th ô ng tin của n sinh vi ê n gồm những mục sau 
Họ v à t ê n: c ó kiểu dữ liệu l à x â u k í tự gồm kh ô ng qu á 30 k í tự 
Lớp: x â u k í tự c ó độ d à i kh ô ng qu á 5 k í tự 
Điểm thi Tin đại cương: l à một số nguy ê n c ó gi á trị từ 0 đến 10 
Đưa ra m à n h ì nh danh s á ch c á c sinh vi ê n c ù ng th ô ng tin của họ m à người d ù ng vừa nhập v à o. 
30 
Bài tập 
Viết 1 chương tr ì nh thực hiện những c ô ng việc sau (tiếp): 
Y ê u cầu người d ù ng nhập v à o từ b à n ph í m một số thực. Đưa ra m à n h ì nh danh s á ch c á c sinh vi ê n c ó điểm thi Tin đại cương nhỏ hơn gi á trị số thực vừa nhập v à o. 
Đưa ra m à n h ì nh danh s á ch sinh vi ê n được sắp xếp theo chiều giảm dần của điểm thi Tin đại cương. 
Đưa ra m à n h ì nh danh s á ch sinh vi ê n với họ v à t ê n được sắp xếp theo chiều của bảng chữ c á i. 
31 
Câu hỏi ? 

File đính kèm:

  • pptbai_giang_tin_hoc_dai_cuong_phan_2_lap_trinh_bang_ngon_ngu_c.ppt