KIỂM TRA GIỮA KỲ
MÔN: LẬP TRÌNH C++ NÂNG CAO – THỜI GIAN: 60 phút (SV được sử
dụng tài liệu giấy)
Câu 1. Viết hàm tính giá trị biểu thức theo phương pháp đệ quy và không đệ quy
Sn= 1/(2*3) + 2/(3*5) + 3/(4*7) +...+n/(n+1)(2n+1) (n>0)
// Phương pháp không đệ quy
double calculateNonRecursive(int n) {
double sum = 0;
for (int i = 1; i <= n; i++) {
sum += (double)i / ((i + 1) * (2 * i + 1));
}
return sum;
}
// Phương pháp đệ quy
double calculateRecursive(int n) {
if (n == 1) {
return (double)1 / (2 * 3);
} else {
return (double)n / ((n + 1) * (2 * n + 1)) + calculateRecursive(n - 1);
}
}
Câu 2. Một học viên tại một trung tâm tin học với các thông tin như sau:
Mã học viên là một chuỗi có tối đa 10 ký tự
Họ lót học viên là một chuỗi có tối đa 30 ký tự
Tên học viên là một chuỗi có tối đa 15 ký tự
Tên lớp là một chuỗi có tối đa 30 ký tự
Học phí là một số nguyên
Điểm TB là một số thực
// Định nghĩa lớp HocVien
class HocVien {
string maHocVien; // Mã học viên là một chuỗi có tối đa 10 ký tự
string hoLot; // Họ lót học viên là một chuỗi có tối đa 30 ký tự
string ten; // Tên học viên là một chuỗi có tối đa 15 ký tự
string tenLop; // Tên lớp là một chuỗi có tối đa 30 ký tự
int hocPhi; // Học phí là một số nguyên
float diemTB; // ĐiểmTB là một số thực
public:
// Hàm khởi tạo, hàm getter, hàm setter, và các hàm khác
};
Viết các hàm thực hiện các yêu cầu sau:
1. Xuất thông tin của 1 học viên ra màn hình theo dạng cột (1.0 điểm)
Mã họ viên
Họ lót
Tên Lớp
Học phí
Điểm
2. Viết hàm tìm các sinh viên có điểm trung bình cao nhất trong một mảng có n
sinh viên
3. Viết hàm cho biết trong mảng có bao nhiêu học viên học ở lớp CTDL có điểm
lớn hơn 7
4. Viết hàm lưu danh sách học viên (n học viên) thành file [Link]
5. Viết hàm tính tổng tiền học phí của các học viên có trong mảng
6. Viết hàm tìm thông tin của một học viên trong mảng khi biết mã số sinh viên
7. Viết hàm sắp xếp mảng sinh viên giảm dần theo điểm TB
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
class HocVien {
string maHocVien;
string hoLot;
string ten;
string tenLop;
int hocPhi;
float diemTB;
public:
// Hàm khởi tạo, hàm getter, hàm setter, và các hàm khác
// 1. Xuất thông tin của 1 học viên ra màn hình theo dạng cột
void xuatThongTin() {
cout << maHocVien << "\t" << hoLot << "\t" << ten << "\t" << tenLop << "\
t" << hocPhi << "\t" << diemTB << endl;
}
// Các hàm khác
};
// 2. Viết hàm tìm các sinh viên có điểm trung bình cao nhất trong một mảng có n
sinh viên
vector<HocVien> timSVCoDiemTBCaoNhat(vector<HocVien> &danhSach) {
vector<HocVien> ketQua;
float diemCaoNhat = danhSach[0].diemTB;
for (HocVien hv : danhSach) {
if ([Link] > diemCaoNhat) {
diemCaoNhat = [Link];
}
}
for (HocVien hv : danhSach) {
if ([Link] == diemCaoNhat) {
ketQua.push_back(hv);
}
}
return ketQua;
}
// 3. Viết hàm cho biết trong mảng có bao nhiêu học viên học ở lớp CTDL có điểm
lớn hơn 7
int demSVLopCTDLDiemLonHon7(vector<HocVien> &danhSach) {
int dem = 0;
for (HocVien hv : danhSach) {
if ([Link] == "CTDL" && [Link] > 7) {
dem++;
}
}
return dem;
}
// 4. Viết hàm lưu danh sách học viên (n học viên) thành file [Link]
void luuDanhSach(vector<HocVien> &danhSach) {
ofstream file("[Link]");
for (HocVien hv : danhSach) {
file << [Link] << "\t" << [Link] << "\t" << [Link] << "\t" <<
[Link] << "\t" << [Link] << "\t" << [Link] << endl;
}
[Link]();
}
// 5. Viết hàm tính tổng tiền học phí của các học viên có trong mảng
int tinhTongHocPhi(vector<HocVien> &danhSach) {
int tong = 0;
for (HocVien hv : danhSach) {
tong += [Link];
}
return tong;
}
// 6. Viết hàm tìm thông tin của một học viên trong mảng khi biết mã số sinh viên
HocVien timThongTinHocVien(vector<HocVien> &danhSach, string maSV) {
for (HocVien hv : danhSach) {
if ([Link] == maSV) {
return hv;
}
}
return HocVien(); // Trả về một đối tượng HocVien rỗng nếu không tìm thấy
}
// 7. Viết hàm sắp xếp mảng sinh viên giảm dần theo điểm TB
void sapXepTheoDiemTB(vector<HocVien> &danhSach) {
sort([Link](), [Link](), {
return [Link] > [Link];
});
}