1. Cấu trúc rẽ nhánh là gì?

1.1 Trường hợp trong cuộc sống

Trong cuộc sống, ta sẽ bắt gặp nhiều trường hợp mà ta cần phải chọn và kiểm tra các trường hợp đó. Ví dụ như ta có một bảng điểm trung bình môn học, ta có thể phân ra các trường hợp sau:

TH1: Điểm 5 sẽ là danh hiệu học sinh trung bình

Th2: Điểm 7 sẽ là danh hiệu học sinh khá

TH3: Điểm 9 sẽ là danh hiệu học sinh giỏi

1.2 Các trường hợp trong ngôn ngữ C

Trong ngôn ngữ C cũng có một kiểu để xem xét và kiểm tra các trường hợp như ở trên, chúng được gọi là Switch…case ( cấu trúc rẽ nhánh).

Đầu vào sẽ là điều kiện cần kiểm tra và được đặt trong Switch và các trường hợp có thể sảy ra sẽ được đưa vào trong các case.

Nếu như đầu vào trùng với case nào đó thì sẽ thực hiện một khối lệnh được yêu cầu, giả sử đầu vào trong Switch không có trùng với bất kỳ case nào thì sẽ có một trường hợp gọi là default và các khối lệnh sẽ thực hiện ở đây.

2. Câu lệnh switch case

Cú pháp cho một câu lệnh switch case trong ngôn ngữ lập trình C như sau:

switch(condition) {
    case 1  :
      CodeBlock1;
      break; 
    case 2:
      CodeBlock2;
      break; 
    case 3:
      CodeBlock3;
      break; 
    case n:
      CodeBlockN;
      break; 
    default: 
      CodeBlockDefault;
}

Trong đó:

  • Condition trong switch là đầu vào cần kiểm tra
  • Case 1, case 2, case 3, case N: là các trường hợp có thể sảy ra
  • CodeBlock1, CodeBlock2, CodeBlock3, CodeBlockN: là các khối lệnh thực hiện khi đầu vào Condition trùng với Case
  • Break là câu lệnh kết thúc case khi thực hiện xong khối lệnh ở case
  • Default: là trường hợp mà không có Case nào trùng với điều kiện đầu vào Condition
  • CodeBlockDefault là trường hợp khối lệnh trong trường hợp Default

Chú ý: Câu lệnh breack ở đây nghĩa là khi thực hiện xong lệnh trong một khối lệnh trong case nào đó, sẽ lập tức dừng lại và không chuyển sang kiểm tra các case khác nữa.

Để hiểu rõ hơn về switch case chúng ta cùng đi vào ví dụ dưới đây:

Ví dụ này tôi sẽ lấy yêu cầu như ở phần 1.1 Trường hợp trong cuộc sống.

Tôi có một điểm do người dùng nhập từ bàn phím vào và tôi cần kiểm tra các trường hợp điểm:

TH1: Điểm 5 sẽ là danh hiệu học sinh trung bình

Th2: Điểm 7 sẽ là danh hiệu học sinh khá

TH3: Điểm 9 sẽ là danh hiệu học sinh giỏi

Giả sử tôi khai báo biến điểm và để người dùng nhập điểm từ bàn phím vào và tôi sẽ sử dụng switch case như sau:

Khi tôi nhập điểm bằng 5, kết quả là:

#include <stdio.h>
int main () {
    int diem;
    printf("Nhap vao diem: ");
    scanf("%d", &diem);
    switch(diem) {
      case 5 :
         printf("Hoc sinh trung binh" );
         break;
      case 7 :
         printf("Hoc sinh kha" );
         break;
      case 9 :
         printf("Hoc sinh gioi" );
         break;
      default :
         printf("Chua xep loai duoc" );
    }
}
Nhap vao diem: 5

Hoc sinh trung binh

Khi nhập điểm bằng 7, kết quả là:

Nhap vao diem: 7

Hoc sinh kha

Khi nhập điểm bằng 9, kết quả là:

Nhap vao diem: 9

Hoc sinh gioi

Và trường hợp tôi nhập một điểm khác các số 5,7,9 thì sẽ rơi vào trường hợp default. Ví dụ tôi nhập vào điểm là số 11, khi đó kết quả là:

Nhap vao diem: 11

Chua xep loai duoc

Như vậy ta có thể hiểu rõ hơn về switch case thông qua ví dụ trên: Nếu biến đầu vào trùng với giá trị của case nào thì khối lệnh sẽ được thực hiện ở trong case đó và sau khi thực hiện sẽ không chuyển sang kiểm tra ở các case tiếp theo do câu lệnh breack; làm kết thúc. Và trường hợp biến đầu vào không trùng với bất kỳ case nào thì default sẽ được thực hiện.

3. So sánh câu lệnh switch case và câu lệnh if else

Điểm giống nhau cả 2 câu lệnh đều giải quết vấn đề từ một biến đầu vào và đi kiểm tra xem biến đó thuộc trường hợp gì và thực hiện khối lệnh gì. Cả 2 câu lệnh switch case và if else đều thuộc loại cấu trúc ra quyết định trong lập trình.

Điểm khác nhau đối với switch case sẽ có cấu trúc rõ ràng, mạch lạc hơn, dễ hiểu hơn so với if else.

Trong khi đó if else lại viết ngắn ngọn hơn và if else kiểm tra điều kiện rồi thực thi một trường hợp nào đó (hay khối lệnh nào đó). Switch case lại kiểm tra đầu vào và thực hiện nhiều trường hợp khác nhau trong các case.

Tuy nhiên, vẫn tùy vào trường hợp và vấn đề mà ta áp dụng if else hay switch case cho phù hợp. Bài toán đưa ra nhiều điều kiện ta sẽ ưu tiên sử dụng switch case, ngược lại thì ta ưu tiên dùng if else cho ngắn ngọn.