5.4.3|
Một cấu trúc có thể được sử dụng để l{m đối số của h{m dưới các dạng sau đ}y:
Tài liệu giảng dạy Trang 49
Là một biến cấu trúc, khi đó tham đối thực sự là một cấu trúc. -
Là một con trỏ cấu trúc, tham đối thực sự l{ địa chỉ của một cấu trúc. -
Là một tham chiếu cấu trúc, tham đối thực sự là một cấu trúc. -
Là một mảng cấu trúc hình thức hoặc con trỏ mảng, tham đối thực sự là -
tên mảng cấu trúc. Ví dụ:
struct DIEM { int nx, ny; }; void xuat1(DIEM xDiem) { … }; void xuat2(DIEM *diem) { … }; void xuat3(DIEM &diem) { … };
void xuat4(DIEM arrDiem[], int n) { … };
VÍ DỤ 5.4.4| 5.4.4|
Ví dụ: Chương trình đơn giản về quản lý sinh viên.
#include <iostream> #include <string> using namespace std;
//Khai báo.
struct NgayThang { // Kiểu ngày tháng
int nNgay; int nThang; int nNam;
};
struct SinhVien { // cấu trúc sinh viên
char szHoTen[25];
NgayThang xNgaySinh;
int nGT; float fDiem;
};
SinhVien xLop[3]; // lớp chứa tối đa 3 sinh viên
/*Hàm in thông tin về sinh viên sử dụng biến cấu trúc l{m đối. Trong lời gọi sử dụng biến cấu trúc để truyền cho hàm.*/
void in(SinhVien x)
{
cout << x.szHoTen << "\t";
cout << x.xNgaySinh.nNgay << "/" << x.xNgaySinh.nThang << "/" <<
x.xNgaySinh.nNam << "\t";
cout << x.nGT << "\t"; cout << x.fDiem << endl; }
/*Hàm nhập thông tin về sinh viên sử dụng con trỏ sinh viên l{m đối. Trong lời gọi sử dụng địa chỉ của một cấu trúc để truyền cho hàm.*/
void nhap(SinhVien *p)
{
Tài liệu giảng dạy Trang 50
cout << "Họ tên: "; cin.getline(p->szHoTen, 25); cout << "Ngày sinh: ";
cin >> (p->xNgaySinh).nNgay >> (p->xNgaySinh).nThang >> (p- >xNgaySinh).nNam;
cout << "Giới tính: "; cin >> (p->nGT); cout << "Điểm: "; cin >> (p->fDiem); }
/*Hàm sửa thông tin về sinh viên sử dụng tham chiếu cấu trúc l{m đối. Trong lời gọi sử dụng biến cấu trúc để truyền cho hàm.*/
void sua(SinhVien &r)
{
int nChon; do {
cout << "1: Sửa họ tên" << endl; cout << "2: Sửa ngày sinh" << endl; cout << "3: Sửa giới tính" << endl; cout << "4: Sửa điểm" << endl; cout << "0: Thôi" << endl; cout << "Sửa (0/1/2/3/4) ?"; cin >> nChon; cin.ignore();
switch (nChon)
{
case 1: cin.getline(r.szHoTen, 25); break;
case 2: cin >> r.xNgaySinh.nNgay >> r.xNgaySinh.nThang >>
r.xNgaySinh.nNam; break;
case 3: cin >> r.nGT; break; case 4: cin >> r.fDiem; break;
}
}while(nChon); }
/*Hàm nhapds nhập thông tin của mọi sinh viên trong mảng, sử dụng con trỏ mảng SinhVien l{m tham đối hình thức. Trong lời gọi sử dụng tên mảng để truyền cho hàm.*/
void nhapds(SinhVien *a)
{
int nSosv = sizeof(xLop) / sizeof(SinhVien); for (int i = 0; i < nSosv; i++)
nhap(&a[i]); }
/*Hàm suads cho phép sửa thông tin của sinh viên trong mảng, sử dụng con trỏ mảng SinhVien l{m tham đối hình thức. Trong lời gọi sử dụng tên mảng để truyền cho hàm.*/
void suads(SinhVien *a)
{
int nChon;
cout << "Chọn sinh viên cần sửa: "; cin >> nChon;
cin.ignore(); sua(a[nChon]); }
Tài liệu giảng dạy Trang 51
/*Hàm inds hiện thông tin của mọi sinh viên trong mảng, sử dụng hằng con trỏ mảng SinhVien l{m tham đối hình thức. Trong lời gọi sử dụng tên mảng để truyền cho hàm.*/
void inds(const SinhVien *a)
{
int nSosv = sizeof(xLop) / sizeof(SinhVien); for (int i = 0; i < nSosv; i++)
in(a[i]); }
/*Hàm main() gọi chạy c|c h{m trên để nhập, in, sửa danh sách sinh viên.*/
void main() { nhapds(xLop); inds(xLop); suads(xLop); inds(xLop); system("pause"); }
Tài liệu giảng dạy Trang 52
6. TẬP TIN
Chương n{y nhằm giúp sinh vie n có the sử dụng kie u dư lie ̣u ta ̣p tin đe lưu trư hoa ̣c đọc dư lie ̣u cho chương tr ̀nh, các bước đe truy ca ̣p ta ̣p tin theo kie u tuàn tự.
Tài liệu giảng dạy Trang 53