Đến với Bài giảng Tin học đại cương Phần 2: Bài 7 - Cấu trúc do Nguyễn Thành Kiên biên soạn các bạn sẽ được tìm hiểu về 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; mảng cấu trúc. Hy vọng tài liệu là nguồn thông tin hữu ích cho quá trình học tập và nghiên cứu của các bạn.
Trang 1TIN H C Đ I C Ọ Ạ ƯƠ NG
Nguy n Thành Kiên ễ
B môn K thu t máy tính ộ ỹ ậ Khoa Công ngh thông tin – HBK HN ệ Đ
Trang 2Bài 7. C U TRÚC Ấ
7.3. X lí d li u c u trúc ử ữ ệ ấ
Trang 3 7.3. X lí d li u c u trúc ử ữ ệ ấ
Trang 47.1. Khái ni m c u trúc ệ ấ
Ki u c u trúc (Structure) là ki u d li u bao ể ấ ể ữ ệ
g m nhi u thành ph n, m i thành ph n có th ồ ề ầ ỗ ầ ể
có ki u khác nhau, m i thành ph n đ ể ỗ ầ ượ c g i là ọ
m t tr ộ ườ ng (field).
Trang 57.2. Khai báo và s d ng c u trúc ử ụ ấ
Khai báo ki u d li u c u trúc ể ữ ệ ấ
struct tên_c u_trúc ấ
{
<khai báo các tr ườ ng d li u>; ữ ệ }; struct sinh_vien
{ char ma_so_sv[10];
char ho_va_ten[30];
float diem_TinDC;
}
struct point_3D {
float x;
float y;
float z;
}
Trang 67.2. Khai báo và s d ng c u trúc ử ụ ấ
Khai báo bi n c u trúc ế ấ
C1: struct tên_c u_trúc tên_bi n; ấ ế
struct sinh_vien a, b, c;
C2: k t h p đ ng th i v a khai báo ki u d li u ế ợ ồ ờ ừ ể ữ ệ
c u trúc v a khai báo bi n: ấ ừ ế
struct [tên_c u_trúc] ấ {
<khai báo các tr ườ ng>;
} tên_bi n_c u_trúc; ế ấ
Trang 7struct diem_thi
{
float diem_Toan;
float diem_Ly;
float diem_Hoa;
}
struct thi_sinh
{
char SBD[10];
char ho_va_ten[30];
struct diem_thi ket_qua;
} thi_sinh_1, thi_sinh_2;
các c u trúc có th l ng nhau ấ ể ồ
m c đ l ng là không h n ch ứ ộ ồ ạ ế
Trang 87.2. Khai báo và s d ng c u trúc ử ụ ấ
Ngôn ng C còn cho phép khai báo tr c ti p ữ ự ế
tr ườ ng d li u là c u trúc bên trong c u trúc ữ ệ ấ ấ
ch a nó ứ
struct thi_sinh {
char SBD[10];
char ho_va_ten[30];
struct diem_thi {
float diem_Toan;
float diem_Ly;
float diem_Hoa;
}ket_qua;
} thi_sinh_1, thi_sinh_2;
Trang 97.2. Khai báo và s d ng c u trúc ử ụ ấ
Đ nh nghĩa ki u DL c u trúc v i typedef ị ể ấ ớ
Khai báo bi n c u trúc ph i b t đ u b ng ế ấ ả ắ ầ ằ
t khóa struct, sau đó đ n tên c u trúc r i ừ ế ấ ồ
m i đ n tên bi n => quên t khóa struct ớ ế ế ừ
=> đ t tên m i cho ki u d li u c u trúc ặ ớ ể ữ ệ ấ
b ng câu l nh ằ ệ typedef
typedef struct tên_cũ tên_m i; ớ
typedef struct [tên_cũ]
{
<khai báo các tr ườ ng>;
}danh_sách_các_tên_m i; ớ
L u ý ư : Đ ượ c phép đ t tên_m i trùng v i tên_cũ. ặ ớ ớ
Trang 107.2. Khai báo và s d ng c u trúc ử ụ ấ
Ví d : ụ
typedef struct point_2D {
float x, y;
}point_2D, diem_2_chieu, ten_bat_ki; point_2D X;
diem_2_chieu Y;
ten_bat_ki Z;
struct point_3D
{
float x, y, z;
} P;
struct point_3D M;
typedef struct point_3D point_3D;
point_3D N;
Trang 11 7.3. X lí d li u c u trúc ử ữ ệ ấ
Trang 127.3. X lí d li u c u trúc ử ữ ệ ấ
Truy nh p các tr ậ ườ ng DL c a c u trúc ủ ấ
tên_bi n_c u_trúc.tên_tr ế ấ ườ ng
ta có th “đ i x ” ể ố ử v i ớ
tên_bi n_c u_trúc.tên_tr ế ấ ườ ng gi ng ố
nh m t bi n thông th ư ộ ế ườ ng có ki u d li u ể ữ ệ
là ki u d li u c a tên_tr ể ữ ệ ủ ườ ng
Trang 13Ví dụ cách sử dụng
biến cấu trúc
#include <stdio.h>
#include <conio.h>
void main()
{
struct point_2D
{
char ten_diem;
struct {
float x, y;
} toa_do;
} p;
float temp_float;
char temp_char;
printf( “\n Hay nhap thong tin ve mot diem”);
printf( “\n Ten cua diem: “); fflush(stdin); scanf(“%c”,&temp_char);
p.ten_diem = temp_char;
printf( “\n nhap vao hoanh do cua diem: “); scanf(“%f”,&temp_float);
p.toa_do.x = temp_float;
// giả sử điểm đang x ét nằm trên đường thẳng y = 3x + 2;
p.toa_do.y = 3*p.toa_do.x + 2;
printf( “\n %c = (%5.2f,%5.2f)”,p.ten_diem, p.toa_do.x, p.toa_do.y);
getch();
}
Trang 14 Có th th c hi n phép gán bi n c u trúc ể ự ệ ế ấ
struct s {
char ho_ten[20];
float diem;
}a, b, c;
float temp_f;
printf("\na.ho_ten: ");fflush(stdin); gets(a.ho_ten);
printf("\na.diem = ");scanf("%f",&temp_f);
a.diem = temp_f;
strcpy(c.ho_ten, a.ho_ten);
c.diem = a.diem;
Trang 15 Con tr c u trúc ỏ ấ
Con tr c u trúc ỏ ấ ch a đ a ch c a m t c u ứ ị ỉ ủ ộ ấ trúc.
Cú pháp khai báo
struct <tên c u trúc> * <tên bi n con tr >; ấ ế ỏ
Truy nh p vào tr ậ ườ ng DL c a c u trúc t ủ ấ ừ
bi n con tr c u trúc ế ỏ ấ :
(*<tên bi n con tr c u trúc>).<tên tr ế ỏ ấ ườ ng DL>
<tên bi n con tr c u trúc>><tên tr ế ỏ ấ ườ ng DL>
Trang 16 7.1. Khái ni m c u trúc ệ ấ
7.3. X lí d li u c u trúc ử ữ ệ ấ
Trang 17struct <tên c u trúc> <tên m ng c u trúc> [s ph n t ]; ấ ả ấ ố ầ ử
Ví d : ụ struct sinh_vien {
char ho_ten[20];
float diem_thi;
};
struct sinh_vien lop_CNTT[50];
Trang 18Ví dụ về cách sử dụng
mảng cấu trúc
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
struct sinh_vien
{
char ma_sv[10];
char ho_ten[20];
float diem_thi;
};
struct sinh_vien sv[3];
int i;
clrscr();
for(i=0;i<3;i++)
{
char str[20]; float diem;
printf(“\n Nhap thong tin cho sinh vien thu %d”,i+1);
printf(“\n Ma 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;
}
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();
Trang 19 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 ).ể ợ ệ
Yêu c u ngầ ười dùng nh p vào thông tin c a n sinh viên g m:ậ ủ ồ
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 ộ ố ị ừ ế
Đi m thi Toán ể
Đ 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ừ ậ
Hi n th danh sách các sinh viên thi qua môn Tin.ể ị
Hi n th 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.ế ề ủ ả ữ
Trang 20Bài t p 2 ậ
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 10 ớ n
20 (có ki m tra tính h p l )ể ợ ệ
Yêu c u ngầ ười dùng nh p vào thông tin c a n m t hàng g m:ậ ủ ặ ồ
Tên m t hàng: có ki u d li u là xâu kí t g m không quá 30 kí t ặ ể ữ ệ ự ồ ự
S l ố ượ ng: là m t s nguyên d ộ ố ươ ng.
Đ n giá: là m t s th c d ơ ộ ố ự ươ ng.
Đ a ra màn hình danh sách các m t hàng cùng các thông tin liên ư ặ
quan (s lố ượng và đ n giá).ơ
Tìm và đ a ra màn hình danh sách các m t hàng có s lư ặ ố ượng nh ỏ
h n m t s nguyên nh p t bàn phím. M u hi n th là:ơ ộ ố ậ ừ ẫ ể ị
Tên mặt hàng Số lượng
Tìm và đ a ra màn hình nh ng m t hàng có giá tr l n h n m t s ư ữ ặ ị ớ ơ ộ ố
th c đự ược nh p t bàn phím, bi t r ng giá tr c a m t lo i ậ ừ ế ằ ị ủ ộ ạ
m t hàng tính b ng s lặ ằ ố ượng m t hàng đó nhân v i đ n giá ặ ớ ơ
c a nó. M u đ a ra màn hình làủ ẫ ư