Phần này chưa học, nên muốn tìm hiểu trước. Code trên là của người khác
Đề thi là như thế này:
Cho một danh sách sinh viên được mô tả chi tiết như sau:
- Danh sách sinh viên gồm n sinh viên. với n được nhập bất kỳ.
- Thông tin một sinh viên bao gồm: Số thứ tự, Mã số sinh viên, Họ tên sinh viên, Điểm Nhập môn lập trình, Môn toán A1, Môn toán A2, Môn Vật lý kỹ thuật, Môn anh văn, Điểm trung bình tích lũy, Xếp loại (xuất sắc, giỏi, khá, trung bình, yếu).
- Thông tin môn học bao gồm: Mã môn, Tên môn, Số tín chỉ, Điểm.
Thực hiện các yêu cầu sau:
a) Hãy thiết kế và xây dựng các cấu trúc (struct) phù hợp cho bài toán (3 điểm).
b) Xây dựng một chương trình hoàn chỉnh cho một lớp học đảm bảo các thao tác sau:
- Hàm nhập xuất danh sách sinh viên (2 điểm).
- Tìm một sinh viên thông qua mã số sinh viên hoặc qua tên sinh viên (1 điểm)
- Tìm sinh viên có điểm trung bình cao nhất (1 điểm)
- Liệt kê danh sách các sinh viên thuộc một loại bất kỳ (1 điểm)
- Thêm, xóa một sinh viên ra khỏi danh sách (2 điểm)
- Sắp xếp danh sách sinh viên tăng dần (1 điểm).
- Theo điểm trung bình tích lũy
- Hoặc Theo tên theo thứ tự ABC …
Lưu ý:
- ĐTBTC là trung bình cộng của tất cả các môn dựa trên điểm số và số tín chỉ.
- Lưu ý: Xếp loại được tính như sau:
- Xuất sắc: ĐTBTL>=9
- Giỏi với: 8.0<=ĐTBTL<9
- Khá với: 6.5<=ĐTBTL<8.0
- Trung bình: 5.0<=ĐTBTL<6.5
- Yếu: ĐTBTL<5
#include <stdio.h>
#include <conio.h>
#pragma pack(1) // Tránh bị làm tròn bộ nhớ.
// Khai báo cấu trúc dữ liệu sinh viên.
struct SinhVien
{
char MaSo[30];
float DiemToan, DiemLy, DiemHoa;
};
typedef struct SinhVien SINHVIEN; // Đổi "struct SinhVien" thành "SINHVIEN"
void NhapDuLieu(SINHVIEN &);
void XuatSinhVien(SINHVIEN);
float TinhDiemTrungBinh(SINHVIEN);
// Hàm nhập dữ liệu sinh viên.
void NhapDuLieu(SINHVIEN &x) // Chú ý: Phải có &: Tham chiếu.
{
fflush(stdin); // Xóa bộ nhớ đệm.
printf("\nNhap vao ho ten: ");
gets(x.MaSo);
// Nhập điểm toán.
do{
printf("\nNhap vao diem toan: ");
scanf("%f", &x.DiemToan);
if(x.DiemToan < 0 || x.DiemToan > 10)
{
printf("\nDiem toan khong hop le. Xin kiem tra lai !");
}
}while(x.DiemToan < 0 || x.DiemToan > 10);
// Nhập điểm lý.
do{
printf("\nNhap vao diem ly: ");
scanf("%f", &x.DiemLy);
if(x.DiemLy < 0 || x.DiemLy > 10)
{
printf("\nDiem ly khong hop le. Xin kiem tra lai !");
}
}while(x.DiemLy < 0 || x.DiemLy > 10);
// Nhập điểm hóa.
do{
printf("\nNhap vao diem hoa: ");
scanf("%f", &x.DiemHoa);
if(x.DiemHoa < 0 || x.DiemHoa > 10)
{
printf("\nDiem hoa khong hop le. Xin kiem tra lai !");
}
}
while(x.DiemHoa < 0 || x.DiemHoa > 10);
}
// Hàm xuất sinh viên.
void XuatSinhVien(SINHVIEN x)
{
printf("\nMa so: %s", x.MaSo);
printf("\nDiem toan: %f", x.DiemToan);
printf("\nDiem ly: %f", x.DiemLy);
printf("\nDiem hoa: %f", x.DiemHoa);
printf("\nDiem trung binh la: %f", TinhDiemTrungBinh(x));
}
// Tính điểm trung bình của sinh viên.
float TinhDiemTrungBinh(SINHVIEN x)
{
return (x.DiemToan + x.DiemLy + x.DiemHoa) / 3;
}
void main()
{
SINHVIEN x;
NhapDuLieu(x);
XuatSinhVien(x);
printf("\nsizeof = %d", sizeof(x));
getch();
}