Bài 2.02. Cấu trúc điều khiển if-else
Nội dung bài học
Video lý thuyết
Video minh họa
Vấn đề: Một trường đại học danh tiếng ở VN muốn viết chương trình C++ để phân loại học lực cho sinh viên trong từng môn học theo điểm trung bình của môn học. Chi tiết về tiêu chí phân loại như sau:
|
Điểm trung bình môn |
Xếp loại |
|
>= 9.0 |
Xuất sắc |
|
8.0 <= tb < 9.0 |
Giỏi |
|
7.0 <= tb < 8.0 |
Khá |
| 5.5 <= tb < 7.0 |
Trung bình |
| 4.0 <= tb < 5.5 |
Trung bình yếu |
| < 4.0 |
Trượt môn |
Bạn là người được giao nhiệm vụ hãy viết chương trình C++ trên để giải quyết vấn đề giúp trường.
Mục đích sử dụng
- Cấu trúc if hoặc if-else hoặc if-else-if dùng để đưa ra quyết định dựa vào một hoặc một số điều kiện nào đó xem liệu có thực hiện một đoạn chương trình hay không.
- Nó còn có tên là cấu trúc rẽ nhánh, câu lệnh ra quyết định, câu lệnh lựa chọn.
- Khi nào sử dụng cái nào?
- Nếu muốn chương trình chỉ thực hiện khi điều kiện được thỏa mãn. Dùng cấu trúc if đơn.
- Nếu muốn khi điều kiện thỏa mãn, thực hiện phương án A. Ngược lại, thực hiện phương án B, ta dùng cấu trúc if-else.
- Nếu có nhiều hơn 2 phương án để thực hiện và các phương án mang tính loại trừ nhau, dùng if-else-if.
- Chi tiết từng cấu trúc và ví dụ cho ở các phần phía dưới.
Cú pháp tổng quát
- Cú pháp tổng quát cấu trúc if:
if (điều_kiện) {
// các câu lệnh cần thực hiện
}
- Trong đó:
- Luôn bắt đầu cấu trúc này với từ khóa if
- Theo sau if là cặp ngoặc tròn ( ) và trong đó chứa điều kiện cần đánh giá
- Điều_kiện là các điều kiện cần thỏa mãn để các câu lệnh trong phần thân if của được thực hiện. Điều kiện của if luôn là giá trị hoặc biểu thức có tính đúng hoặc sai.
- Phần thân if bao bởi cặp ngoặc { } chứa các câu lệnh cần thực hiện nếu điều kiện thỏa mãn.
- Cấu trúc if kết thúc bởi dấu }
- Lưu ý rằng trong C++, mọi giá trị số khác 0, kí tự khác kí tự ’\0’, con trỏ khác NULL được coi là điều kiện đúng.
- Ví dụ:
- Nếu điểm trung bình môn của sinh viên >= 4.0, sinh viên sẽ qua môn.
- Thể hiện trong mã nguồn C++:
// Bài 9: cấu trúc điều khiển if-else
#include<iostream>
using namespace std;
int main() {
// ngưỡng điểm cần để qua môn
const float MINIMUM_SCORE = 4.0f;
float gpa = 5.5f; // điểm trung bình môn
if (gpa >= MINIMUM_SCORE) { // nếu điểm tb >= 4.0
cout << "Passed!" << endl; // sinh viên qua môn
}
}
// Kết quả: Passed!
- Vậy ta muốn chương trình cho ra kết quả cả trong trường hợp sinh viên trượt môn thì làm như thế nào? Lúc này ta cần sử dụng đến cấu trúc if-else.
- Cú pháp tổng quát cấu trúc if-else:
if(điều_kiện) {
// làm gì đó nếu điều kiện thỏa mãn
} else {
// làm gì đó nếu điều kiện không thỏa mãn
}
- Trong đó các thành phần giống với if và thêm:
- else là một từ khóa đi liền sau dấu ngoặc } của if trước nó.
- Mỗi if chỉ có nhiều nhất 1 else.
- Mỗi else chỉ thuộc về duy nhất 1 if liền trước nó.
- Không có else đứng riêng lẻ một mình mà else phải luôn đi theo cặp với if.
- Nếu điều_kiện không xảy ra thì nội dung khối else sẽ được thực hiện
- Ví dụ:
- Nếu điểm trung bình môn của sinh viên >= 4.0, sinh viên sẽ qua môn.
- Ngược lại, sinh viên trượt môn.
// Bài 9: cấu trúc điều khiển if-else
#include<iostream>
using namespace std;
int main() {
// ngưỡng điểm cần để qua môn
const float MINIMUM_SCORE = 4.0f;
float gpa = 3.5f; // điểm trung bình môn
if (gpa >= MINIMUM_SCORE) { // nếu điểm tb >= 4.0
cout << "Passed!" << endl; // sinh viên qua môn
} // end if
else { // ngược lại
cout << "Failed!" << endl; // trượt môn
} // end else
}
// kết quả: Failed!
- Trở lại vấn đề ban đầu của bài học. Làm sao để phân loại học lực cho sinh viên? Cách giải quyết trở nên đơn giản hơn với cấu trúc loại trừ if-else-if. Tức là:
- Nếu không phải loại xuất sắc thì có thể là loại giỏi
- Nếu không xuất sắc cũng không giỏi thì có thể là khá
- Nếu không xuất sắc, không giỏi, không khá thì có thể là trung bình
- Nếu không phải loại nào trong 4 loại trên thì có thể là loại yếu
- Cuối cùng, nếu không rơi vào bất kì trường hợp nào kể trên thì sinh viên trượt môn.
- Cú pháp tổng quát cấu trúc if-else-if:
if(điều_kiện1) {
// làm gì đó nếu điều_kiện1 thỏa
} else if(điều_kiện2) {
// làm gì đó nếu điều_kiện2 thỏa
} else if(điều_kiện3) {
// làm gì đó nếu điều_kiện3 thỏa
} else {
// làm gì đó nếu tất cả điều kiện không thỏa
}
- Trong đó giống cấu trúc if-else và thêm:
- Cấu trúc else if nối liền sau cấu trúc if trước đó. Nếu không phải là else if mà chỉ là if thì nó trở về cấu trúc if đơn đầu tiên ở trên.
- Cấu trúc else cuối cùng là tùy chọn, tức có thể có hoặc không tùy bài toán.
- Nếu điều_kiện1 thỏa, nội dung thân if đầu tiên được thực hiện.
- Nếu không, biểu thức điều_kiện2 sẽ được đánh giá. Nếu thỏa(tức true) thì khối if thứ hai sẽ được thực hiện.
- Nếu không, biểu thức điều_kiện3 sẽ được đánh giá. Nếu thỏa, khối if thứ 3 sẽ được thực hiện.
- Tương tự đánh giá được thực hiện cho biểu thức if thứ n.
- Sau cùng, nếu tất cả các điều kiện phía trên không thỏa. Khối else ở cuối(nếu có) sẽ được thực hiện.
- Ví dụ phân loại học lực cho sinh viên:
// Bài 9: cấu trúc điều khiển if-else
#include<iostream>
using namespace std;
int main() {
float gpa; // điểm trung bình môn
cout << "Enter your gpa: ";
cin >> gpa;
string rank = ""; // kết quả xếp loại
if (gpa >= 9.0f) { // điều kiện xuất sắc
rank = "Excellent!";
} else if(gpa >= 8.0f) { // đk loại giỏi
rank = "Very Good";
}
else if (gpa >= 7.0) { // đk loại khá
rank = "Good";
}
else if (gpa >= 5.5f) { // đk loại trung bình
rank = "Average";
}
else if (gpa >= 4.0) { // đk loại TB yếu
rank = "Below average";
}
else { // yếu
rank = "Weak";
}
// hiển thị kết quả
cout << "Your GPA: " << gpa << endl
<< "Rank: " << rank << endl;
}
Sơ đồ khối
- Các khối chức năng cơ bản:
- Hình thoi: khối kiểm tra điều kiện
- Hình bình hành: khối nhập xuất
- Hình chữ nhật: thực hiện lệnh
- Hình oval: bắt đầu, kết thúc
- Hình tròn nhỏ: một điểm nào đó trong chương trình
- Mũi tên: hướng thực hiện chương trình
- Cấu trúc if:
- Cấu trúc if-else:
- Cấu trúc if-else-if:
Ví dụ minh họa
- Yêu cầu: Giả sử có 3 mức học bổng là Khá, Giỏi và Xuất sắc. Điều kiện của 3 mức lần lượt là:
- Khá: >= 3.0 và < 3.2: thưởng 3.2 triệu đ.
- Giỏi: >= 3.2 và < 3.6: thưởng 4.6 triệu đ.
- Xuất sắc: >= 3.6 đến 4.0: thưởng 10 triệu đ.
- Nếu không đạt mức nào thì thưởng 0đ.
- Sơ đồ khối phần xét duyệt học bổng của bài này:
- Code tương ứng:
// Bài 9: cấu trúc điều khiển if-else
#include<iostream>
using namespace std;
int main() {
float gpa; // điểm trung bình môn
cout << "Enter your gpa: ";
cin >> gpa;
int award;
if (gpa >= 3.6f) { // đk xuất sắc
award = 10000000;
} else if(gpa >= 3.20f) { // đk loại giỏi
award = 4600000;
}
else if (gpa >= 3.0) { // đk loại khá
award = 3200000;
}
else { // không được học bổng
award = 0;
}
cout << "=============================" << endl;
cout << "Your GPA: " << gpa << endl;
cout << "Your award: " << award << "d" << endl;
}
Enter your gpa: 3.75
=============================
Your GPA: 3.75
Your award: 10000000d
Bài tập thực hành
Đề bài đầy đủ: nhấn vào đây
Lời giải mẫu: nhấn vào đây





