Các phép toán trên danh sách sinh viên
CÀI ĐẶT
CẤU TRÚC SINH VIÊN
thông tin
Cấu trúc struct SinhVien gồm các trường:
charMSSV, HoTen: Lưu trữ mã số sinh viên và Họ tên sinh viên;floatDiemLT, DiemTH1, DiemTH2: Lưu trữ điểm lý thuyết, thực hành 1 và 2.
struct SinhVien
{
char MSSV[10], HoTen[50];
float DiemLT, DiemTH1, DiemTH2;
};
DANH SÁCH SINH VIÊN
typedef struct
{
SinhVien A[40];
int n;
} DanhSach;
CÁC PHÉP TOÁN
dsRong
Yêu cầu
Trả về một danh sách rỗng.
DanhSach dsRong()
{
DanhSach D;
D.n = 0;
return D;
}
chenCuoi
Yêu cầu
Thêm một sinh viên vào cuối danh sách.
void chenCuoi(struct SinhVien S, DanhSach *L)
{
L->A[L->n] = S;
L->n++;
}
tim
Yêu cầu
Trả về vị trí xuất hiện đầu tiên của sinh viên.
int tim(char MSSV[10], DanhSach L)
{
for (int i = 0; i < L.n; i++)
if (strcmp(MSSV, L.A[i].MSSV) == 0)
return i + 1;
return L.n + 1;
}
xoaTai
Yêu cầu
Xóa sinh viên tại vị trí p.
void xoaTai(int p, DanhSach *L)
{
for (int i = p; i < L->n; i++)
L->A[i - 1] = L->A[i];
L->n--;
}
hienthi
Yêu cầu
Hiển thị thông tin các sinh viên trong danh sách.
void hienthi(DanhSach danhSach)
{
for (int i = 0; i < danhSach.n; i++)
printf("%s - %s - %.2f - %.2f - %.2f - %.2f\n", danhSach.A[i].MSSV, danhSach.A[i].HoTen, danhSach.A[i].DiemLT, danhSach.A[i].DiemTH1, danhSach.A[i].DiemTH2, danhSach.A[i].DiemLT + danhSach.A[i].DiemTH1 + danhSach.A[i].DiemTH2);
}
nhap
Yêu cầu
Nhập danh sách sinh viên từ bàn phím.
int length(char *string)
{
int i = 0;
while (string[i])
i++;
return i;
}
struct SinhVien nhapSV()
{
struct SinhVien sinhVien;
getchar();
fgets(sinhVien.MSSV, 10, stdin);
sinhVien.MSSV[length(sinhVien.MSSV) - 1] = '\0';
fflush(stdin);
fgets(sinhVien.HoTen, 50, stdin);
sinhVien.HoTen[length(sinhVien.HoTen) - 1] = '\0';
fflush(stdin);
scanf("%f", &sinhVien.DiemLT);
scanf("%f", &sinhVien.DiemTH1);
scanf("%f", &sinhVien.DiemTH2);
return sinhVien;
}
DanhSach nhap()
{
DanhSach danhSach = dsRong();
struct SinhVien sinhVien;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
sinhVien = nhapSV();
if (tim(sinhVien.MSSV, danhSach) < 1 || tim(sinhVien.MSSV, danhSach) >= danhSach.n)
{
chenCuoi(sinhVien, &danhSach);
}
}
return danhSach;
}
chepKhongDat
Trả về danh sách sinh viên có tổng điểm <4
float tongDiem(struct SinhVien S)
{
return S.DiemLT + S.DiemTH1 + S.DiemTH2;
}
DanhSach chepKhongDat(DanhSach L)
{
DanhSach _L = dsRong();
for (int i = 0; i < L.n; i++)
if (tongDiem(L.A[i]) < 4)
chenCuoi(L.A[i], &_L);
return _L;
}
xoaSinhVien
Xóa một sinh viên bằng cách truyền vào
MSSV
void xoaSinhVien(char MSSV[10], DanhSach *pL)
{
while (tim(MSSV, *pL) <= pL->n)
xoaTai(tim(MSSV, *pL), pL);
}