Bài 9 · Vận dụng · 20 phút· Cập nhật 11/06/2026
Rẽ nhánh: if/else & switch
Biên soạn bởi Nguyễn Anh Tuấn
Viết if/else-if/else và switch/case; hiểu thứ tự xét nhánh, break/default, fall-through và khi nào dùng mỗi dạng rẽ nhánh.
if chạy một khối lệnh khi điều kiện đúng; phần else chạy khi điều kiện sai. Điều kiện đặt trong ngoặc (…):
if.c
#include <stdio.h>
int main() {
int tuoi = 20;
if (tuoi >= 18) {
printf("Du tuoi bau cu\n");
} else {
printf("Chua du tuoi\n");
}
return 0;
} Kết quả khi chạy
Du tuoi bau cu
- ▸if (điều_kiện) { … } chạy khối khi điều kiện ĐÚNG.
- ▸else { … } chạy khi điều kiện SAI (tuỳ chọn).
- ▸Điều kiện đúng = khác 0 (xem Bài Toán tử & biểu thức).
Nối nhiều điều kiện bằng else if. Chúng được kiểm tra lần lượt từ trên xuống; nhánh đúng ĐẦU TIÊN chạy, các nhánh sau bị bỏ qua. Kéo thử điểm để xem nhánh nào chạy:
Với điểm 7.5 → kết quả loai = 'B' - Khá.
Các điều kiện được kiểm tra lần lượt từ trên xuống; nhánh ĐÚNG đầu tiên chạy, các nhánh sau bị bỏ qua - vì vậy thứ tự rất quan trọng.
xep-loai.c
#include <stdio.h>
int main() {
float diem = 7.5;
if (diem >= 9) printf("Gioi\n");
else if (diem >= 7) printf("Kha\n");
else if (diem >= 5) printf("Trung binh\n");
else printf("Yeu\n");
return 0;
} Kết quả khi chạy
Kha
Thứ trong ngoặc của if chính là một biểu thức (Bài Toán tử): cho kết quả khác 0 thì “đúng”. Ghép nhiều điều kiện bằng && (và), || (hoặc):
- ▸Khoảng: if (tuoi >= 13 && tuoi <= 19) - “tuổi teen”.
- ▸Hoặc: if (ngay == 7 || ngay == 1) - cuối tuần.
- ▸Nhớ dùng == để so sánh bằng (không phải =).
Khi cần so một giá trị với nhiều khả năng rời rạc, switch gọn hơn chuỗi else if. Mỗi case là một khả năng; nhớ break để dừng, và default cho trường hợp còn lại:
switch.c
#include <stdio.h>
int main() {
int thu = 3;
switch (thu) {
case 2: printf("Thu hai\n"); break;
case 3: printf("Thu ba\n"); break;
case 4: printf("Thu tu\n"); break;
default: printf("Ngay khac\n");
}
return 0;
} Kết quả khi chạy
Thu ba
Hai lỗi rẽ nhánh phổ biến nhất. Thứ nhất - quên break trong switch khiến nó “rơi xuống” chạy luôn các case sau:
quen-break.c
int x = 1;
switch (x) {
case 1: printf("mot\n"); // KHONG co break ->
case 2: printf("hai\n"); // chay luon xuong day
default: printf("khac\n");
} Kết quả khi chạy
mot hai khac
Lỗi thứ hai: “=” thay vì “==”
Bài tiếp theo
Câu hỏi thường gặp
if mở đầu chuỗi điều kiện. Mỗi else if CHỈ được kiểm tra khi tất cả if/else if phía trên đều SAI. Trong cả chuỗi, chỉ đúng MỘT nhánh được chạy (nhánh đúng đầu tiên), rồi bỏ qua phần còn lại.
Nếu thân chỉ một câu lệnh thì không bắt buộc, nhưng NÊN luôn dùng { }. Thiếu { }, khi thêm dòng thứ hai sau này rất dễ sinh lỗi (câu thứ hai không còn thuộc if nữa).
switch so khớp MỘT giá trị với các case bằng phép “==”. Hợp khi có nhiều trường hợp rời rạc (thứ trong tuần, lựa chọn menu). if/else if linh hoạt hơn: dùng được khoảng (>=, <=) và && / ||. switch chỉ chạy trên số nguyên hoặc char.
Để DỪNG sau khi chạy xong một case. Thiếu break, chương trình “rơi xuống” (fall-through) chạy luôn các case bên dưới cho tới khi gặp break hoặc hết switch - nguồn lỗi rất hay gặp.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Trong một chuỗi if / else if / else, bao nhiêu nhánh được chạy?
- 1
Dương hay không?
Viết chương trình đọc một số rồi in “Duong” nếu lớn hơn 0, ngược lại in “Khong duong”.
Hoàn thành khi:
if (n > 0) printf("Duong\n"); else printf("Khong duong\n"); - 2
Xếp loại
Dùng công cụ ở Bước 2: điểm 6.5 cho ra loại gì?
Hoàn thành khi: C - Trung bình (6.5 không ≥ 9, không ≥ 7, nhưng ≥ 5).
- 3
Thứ tự nhánh
Nếu đảo nhánh “else if (diem >= 5)” lên TRƯỚC “else if (diem >= 7)”, thì điểm 8 sẽ ra loại gì? Vì sao?
Hoàn thành khi: Ra Trung bình (sai!) - vì 8 ≥ 5 khớp trước nên dừng luôn. Bài học: xếp điều kiện chặt nhất lên đầu.
- 4
switch thứ trong tuần
Viết
switchin tên thứ ứng với sốthu= 2..8 (2 = Thứ hai … 8 = Chủ nhật),defaultin “Khong hop le”.Hoàn thành khi: Mỗi
casecóbreak;thu = 3→ in “Thu ba”. - 5
Quên break
Một
switchbị thiếubreakởcase 1. Vớix = 1nó in ra những gì?Hoàn thành khi: In nội dung
case 1RỒI rơi xuống cáccasedưới (fall-through) cho tới khi gặpbreak/hếtswitch. - 6
Chẵn hay lẻ
Viết
ifdùng phép “%” để in “Chan” nếunchẵn, “Le” nếunlẻ.Hoàn thành khi:
if (n % 2 == 0) printf("Chan\n"); else printf("Le\n");