TRƯỜNG ĐH SƯ PHẠM TP.HCM
KHOA/TỔ: CNTT/KHMT
Đề chính thức
Đề số 01
(Đề thi gồm có 02 trang)
ĐỀ THI KẾT THÚC HỌC PHẦN
Tên HP: CẤU TRÚC DỮ LIỆU
Mã HP: COMP1016 Số tín chỉ: 03
Học kỳ: 03 Năm học: 2023 - 2024
Ngày thi: ……………………………………………
Thời gian làm bài: 90 phút (không kể thời gian phát đề)
Câu 1 (3 điểm).
a) (0.5 điểm) Hãy cho biết đoạn chương trình bên
phải cài đặt thuật toán sắp xếp nào?
b) (2 điểm) Trình bày từng bước sắp xếp dãy số sau
theo thuật toán đã cài đặt trên: 18, 90, 91, 85, 10, 92,
71, 4.
c) (0.5 điểm) Nếu muốn sắp xếp theo thứ tự ngược
lại, ta chỉnh sửa đoạn chương trình bên như thế nào?
1
2
3
4
5
6
7
8
9
10
j=1;
while (j<n){
i=j-1; t=a[j];
while (i>=0 && t<a[i]){
a[i+1]=a[i];
i--;
}
a[i+1]=t;
j++;
}
Câu 2 (3 điểm).
a) (1 đim) Hãy v cây nh phân tìm kiếm, sao cho nếu duyt cây theo th t LRN, anh/ch s thu
được dãy s như sau: 1, 2, 4, 3, 7, 9, 8, 12, 11, 6. Sau khi vẽ, hãy xác định cây cân bng hay
không? Vì sao?
b) (1 điểm) S dng cây nh phân cân bng (AVL) câu a, lần lượt thêm các giá tr 5 và 10 vào cây.
V li cây sau mi thao tác thêm.
c) (1 điểm) S dng cây nh phân cân bng (AVL) câu b, lần lượt xóa các giá tr 9 7 khi cây.
V li cây sau mi thao tác xóa.
Câu 3: (4 điểm)
Phòng đào tạo cần xây dựng chương trình đăng ký môn học trong 1 học kỳ của sinh viên. Thông tin
cơ bản của môn học được tổ chức theo cấu trúc sau:
class MonHoc
{ string _strMaMH; //mã môn học
string _strTenMH; //tên môn học
int _iSoTC; //số tín chỉ
string _strGioHoc; //giờ học
int _iNgayHoc; //ngày học trong tuần là thông tin cho biết môn học sẽ được học vào thứ
mấy, có giá trị từ 1 (Chủ nhật) đến 7 (thứ Bảy)
MonHoc* _pNext; //con trỏ lưu địa chỉ của môn học tiếp theo
};
class ListMonHoc{
MonHoc* _pHead;
MonHoc* _pTail;
};
Mau KT.ĐT.01
Thông tin về Sinh viên gồm các thuộc tính: mã sinh viên, họ tên, giới tính, ngày sinh, danh sách các
môn học đã đăng ký. Mỗi sinh viên sẽ được phép đăng ký nhiều môn học, nhưng sẽ bị giới hạn bởi s
tín chỉ tối đa và tối thiểu trong 1 học kỳ. Yêu cầu anh/chị hãy:
a) (1 điểm) Xây dựng class SinhVien để lưu trữ thông tin của sinh viên.
b) (1 điểm) Viết hàm đăng ký môn học cho 1 sinh viên hàm thành phần của class SinhVien. Biết
rằng, số tín chỉ sinh viên được phép đăng trong 1 học kỳ từ 15 đến 28 tín chỉ. Hàm sẽ trả về true
nếu đăng ký thành công, trả về false nếu thất bại. Hàm được mô tả như sau:
bool SinhVien::dangKyMonHoc(MonHoc monHoc);
Trong đó: monHoc môn học được đăng ký.
c) (1 điểm) Viết hàm tính học phí cho 1 sinh viên hàm thành phần của class SinhVien. Biết rằng
học phí sẽ được tính theo công thức:
𝐻ọ𝑐 𝑝ℎí = 𝑆ố 𝑡í𝑛 𝑐ℎỉ Đơ𝑛 𝑔𝑖á
với 𝑆ố 𝑡í𝑛 𝑐ℎỉ là tổng số tín chỉ sinh viên đã đăng ký trong 1 học kỳ.
Hàm được mô tả như sau:
long SinhVien::tinhHocPhi(int donGia);
Trong đó: donGia đơn giá của 1 tín chỉ;
d) (1 điểm) Để quản lịch học, sinh viên cần phải sắp xếp các môn học đã đăng theo thứ tự ngày
giờ học trong tuần. Ví dụ: môn A học lúc 15g thứ Hai, phải đứng trước môn E học lúc 7g thứ Ba. Viết
hàm xếp lịch học là hàm thành phần của lớp SinhVien. Hàm được mô tả như sau:
void SinhVien::xepLichhoc();
Ghi chú: sinh viên thể bổ sung các m hỗ trợ khác cho class MonHoc, ListMH, SinhVien
trong quá trình thực hiện các yêu cầu trên. ----- HẾT -----
Lưu ý:
- Sinh viên chỉ được sử dụng “Giáo trình CTDL – NXB Đại học Sư phạm TPHCM” khi làm bài.
- Cán bộ coi thi không giải thích gì thêm.
- Sinh viên chỉ được sử dụng ngôn ngữ C/C++ khi làm bài.
Không in phần này khi sao in đề thi