Trong các ứng dụng quản lý học tập, việc tự động phân loại học lực học sinh theo điểm trung bình (GPA) là rất quan trọng. Bài tập này sẽ hướng dẫn bạn xây dựng chương trình C++ để:
- Nhập điểm trung bình (double)
- Kiểm tra hợp lệ (0–10)
- Phân loại thành Xuất sắc, Giỏi, Khá, Trung bình, Yếu
- Hiển thị kết quả rõ ràng
- Báo lỗi khi đầu vào không hợp lệ
Toàn bộ dùng đúng cú phápif-else
theo yêu cầu kế hoạch.
📚 KIẾN THỨC CƠ BẢN
- Điểm trung bình (
diemTB
): số thập phân từ 0.0 đến 10.0 - Quy tắc phân loại:
- Xuất sắc:
diemTB >= 9.0
- Giỏi:
8.0 <= diemTB < 9.0
- Khá:
6.5 <= diemTB < 8.0
- Trung bình:
5.0 <= diemTB < 6.5
- Yếu:
diemTB < 5.0
- Xuất sắc:
- Cú pháp
if-else
if (đk1) { // ... } else if (đk2) { // ... } else { // ... }
🔧 THUẬT TOÁN
- Nhập
diemTB
- Nếu
diemTB
ngoài , in “Điểm không hợp lệ” và dừng - Ngược lại dùng chuỗi
if-else if-else
so sánh từ cao xuống thấp - In ra xếp loại tương ứng
🛠️ CODE MẪU
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double diemTB;
cout << "Nhập điểm trung bình (0–10): ";
cin >> diemTB;
// Bước 1: Kiểm tra hợp lệ
if (diemTB < 0.0 || diemTB > 10.0) {
cout << "❌ Điểm không hợp lệ. Vui lòng nhập số trong khoảng 0 đến 10.\n";
return 0;
}
// Hiển thị điểm với 1 chữ số thập phân
cout << fixed << setprecision(1);
cout << "Điểm TB: " << diemTB << "\n";
// Bước 2: Phân loại
if (diemTB >= 9.0) {
cout << "🏅 Xếp loại: Xuất sắc\n";
} else if (diemTB >= 8.0) {
cout << "🎖️ Xếp loại: Giỏi\n";
} else if (diemTB >= 6.5) {
cout << "👏 Xếp loại: Khá\n";
} else if (diemTB >= 5.0) {
cout << "🙂 Xếp loại: Trung bình\n";
} else {
cout << "⚠️ Xếp loại: Yếu\n";
}
return 0;
}
Giải thích
if (diemTB < 0.0 || diemTB > 10.0)
: validation- Mỗi nhánh
else if
kiểm từ mức cao xuống thấp - Nhánh cuối
else
cho điểm dưới 5.0
🌟 VÍ DỤ MINH HỌA
Điểm TB | Kết quả |
---|---|
9.5 | Xuất sắc |
8.3 | Giỏi |
7.0 | Khá |
5.5 | Trung bình |
4.0 | Yếu |
-1 | Không hợp lệ |
10.1 | Không hợp lệ |
📝 BÀI TẬP THỰC HÀNH
🟢 Cơ bản (Basic)
- Đổi độ chính xác
- In điểm với 2 chữ số thập phân
- Sử dụng
setprecision(2)
- Menu nhiều học sinh
- Dùng
for
lặp nhập 5 học sinh - In
"Tên – Điểm – Xếp loại"
- Dùng
- Bỏ dấu
- Nếu
diemTB
là số nguyên (vd 8.0), in là8
thay vì8.0
- Nếu
🟡 Trung bình (Intermediate)
- Tính tỉ lệ
- Nhập số học sinh
n
- Nhập điểm từng học sinh
- Đếm số học sinh mỗi loại
- In
Xuất sắc: x%
,Giỏi: y%
,…
- Nhập số học sinh
- Giai đoạn nâng cao
- Cho thêm điều kiện “Khen thưởng đặc biệt” khi điểm ≥9.5
- In thông báo riêng cho trường hợp này
- Lưu kết quả
- Lưu tên và xếp loại vào mảng struct
- Hiển thị danh sách cuối cùng
🔴 Nâng cao (Advanced)
- Phân loại kết hợp nhiều môn
- Nhập điểm Toán, Văn, Anh
- Tính TB = (Toán + Văn + Anh) / 3
- Phân loại theo TB
- Với TB ≥8.5 và mỗi môn ≥7.0, in “Xuất sắc toàn diện”
- Menu chọn quy tắc
- Quy tắc A như trên
- Quy tắc B:
- Xuất sắc: ≥9.0 và không môn nào <8.0
- Giỏi xuất sắc: TB ≥8.0 và không môn nào <7.0
- Đọc file điểm
- Input file
diem.txt
chứaTên1 8.5
mỗi dòng - Phân loại và ghi file
ketqua.txt
- Input file
💡 MẸO VÀ THỦ THUẬT
- Dùng
||
kết hợp điều kiện validation - Viết
else if
từ điều kiện hẹp (Xuất sắc) đến rộng (Yếu) - Comment ngắn gọn trước mỗi nhánh
- Tách hàm khi logic lặp lại (vd:
string phanLoai(double)
)
string phanLoai(double d) {
if (d >= 9.0) return "Xuất sắc";
else if (d >= 8.0) return "Giỏi";
//…
}
👨💻 Tổng kết
Phân loại học lực theo điểm trung bình là bài tập thiết thực giúp rèn tư duy phân nhánh, validation và hiển thị kết quả chuyên nghiệp. Thành thạo if-else
là nền tảng để giải quyết mọi yêu cầu điều kiện phức tạp hơn trong dự án thực tế!