Mẫu tin vàmảng hai chiều Nguyễn Đông Hà Khoa CNTT – ĐH KHTN... Mẫu tin Một mẫu tin structure là một tập hợp của một hoặc nhiều biến nhóm lại dưới một tên duy nhất để dễ thao tác.. Các
Trang 1Mẫu tin và
mảng hai chiều
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Trang 2Ví dụ
Mẫu tin biểu diễn tọa độ một điểm gồm 2 thành phần: x, y
typedef struct{
int x;
int y;
}TOADO;
Trang 3Mẫu tin
Một mẫu tin (structure ) là một tập hợp của một
hoặc nhiều biến nhóm lại dưới một tên duy
nhất để dễ thao tác Các biến trong mẫu tin có thể khác nhau về kiểu dữ liệu
Mỗi biến trong mẫu tin có thể thuộc bất kỳ
kiểu dữ liệu nào, kể cả mảng và mẩu tin
Trang 4Ví dụ khai báo mẫu tin
Kiểu dữ liệu lưu trữ điểm và tam giác trong mặt phẳng
typedef struct{
int x, y;
}POINT;
typedef struct{
POINT A, B, C;
}TRIANGLE;
Trang 5Ví dụ khai báo mẫu tin
Kiểu dữ liệu lưu trữ thông tin một học sinh cùng với điểm thi 3 môn Toán, Lý, Hóa
typedef struct{
char MaHS[11];
char Ho[31];
char Ten[8];
float DiemToan, DiemLy, DiemHoa; }HOCSINH;
Trang 6Sử dụng mẫu tin
Có thể dùng mẫu tin như là một kiểu dữ liệu trong chương trình
Sử dụng dấu chấm (.) để truy xuất đến từng thành phần trong mẫu tin
POINT d1, d2, d3;
TRIANGLE tg1, tg2;
d1.x = 100; d2.y = 200;
tg1.A = d1;
printf(“Hoanh do diem 1 la: %d”,d1.x);
Trang 7Bài tập ví dụ
Bài 2 chương 5: Nhập vào 1 danh sách n
quyển sách (1 <= n <= 25), mỗi quyển sách gồm các thông tin: mã sách, tên sách, tên tác giả, năm xuất bản và giá tiền
In ra màn hình thông tin chi tiết, các quyển xuất bản trước 1975, giá lớn hơn 1000.
Nhập vào tên của một tác giả, in ra thông tin chi tiết về các quyển sách của tác giả đó
Trang 8Hướng giải
Vì mỗi quyển sách bao gồm nhiều thông tin,
dữ liệu quyển sách phải lưu trữ bằng mẩu tin
typedef struct {
int ma_sach;
char ten_sach[20];
char ten_tac_gia[20];
int nam_xuat_ban;
long gia_tien;
}SACH;
Trang 9Hướng giải
Dùng mảng 1 chiều để chứa n quyển sách Mảng khai báo có kích thước tối đa là 25
SACH danh_sach[25];
Trang 10Hướng giải
In ra màn hình thông tin chi tiết, các quyển
xuất bản trước 1975, giá lớn hơn 1000
void XuatSachTheoYeuCau (SACH mang[25],
int n) {
int i = 0;
for (i = 0; i < n ; i++)
{
if (mang[i].nam_xuat_ban <1975 &&
mang[i].gia_tien > 1000)
XuatSach (mang[i]);
}
}
Trang 11Hướng giải
In ra màn hình thông tin chi tiết, các quyển
xuất bản trước 1975, giá lớn hơn 1000
void TimSach (SACH mang[25], int n)
{
/* Bien s chua ten tac gia can tim */
for (i = 0; i < n; i++)
{
if (strcmp(s,mang[i].ten_tac_gia)==0)
XuatSach (mang[i]);
}
}
Trang 12Kiểu mảng 2 chiều
/* Tạo mảng 2 chiều có 3 dòng, 5 cột */ int a[3][5];
Khai báo mảng 2 chiều:
Trang 13Truy xuất phần tử của mảng 2 chiều
a[0][1] = 6;
a[1][2] = 9;
scanf(“%d”,&a[0][2]);
Lấy giá trị phần tử của mảng 2 chiều:
Gán giá trị cho từng phần tử
x = a[0][0];
printf(“Dong 0, cot 1: %d”, a[0][1]);
Trang 14Ví dụ nhập mảng 2 chiều
int *socot) {
int i,j;
{
{
}
}
}
Trang 15Bài tập
Chương 5: 1,3,4,5