Lệnh switch case và lệnh if else?

Như mình đã giới  thiệu tới các lệnh switch caseif else trong bài viết ngôn ngữ lập trình C.

Lệnh switch caseif else được dùng khi cần so sánh biểu thức điều kiện và đưa ra quyết định. Tuy nhiên, switch caseif else lại có đặc điểm riêng được dùng trong từng bài toán khác nhau. Dưới đây là một số ví dụ minh họa giúp các bạn lựa chọn sử dụng switch case hoặc if else một cách phù hợp.

Lệnh switch case

  • Sử dụng lệnh switch case dễ nhìn, dễ maintain.
  • Chỉ cần so sánh biểu thức điều kiện 1 lần.
  • Khi biểu nhiều case thực hiện lệnh như nhau. Chúng ta có thể viết case liên tục và không sử dụng break.

Ví dụ 1: Nhập vào ngày trong tuần, in ra màn hình là ngày làm việc ( thứ 2 – 6) hay ngày nghỉ (thứ 7, chủ nhật)

Cách 1: Viết bằng lệnh switch case

#include <stdio.h>
#include <conio.h>

enum day
{
    MONDAY=2,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

void main()
{
    int dayOfWeek = MONDAY;
    switch (dayOfWeek)
    {
    case MONDAY:
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
    case FRIDAY:
        printf("\nWeekday");
        break;
    case SATURDAY:
    case SUNDAY:
        printf("\nWeekend");
        break;
    default:
        printf("\nInvalid");
        break;
    }
    getch();
}

Cách 2: Viết bằng lệnh if else

#include <stdio.h>
#include <conio.h>

enum day
{
    MONDAY=2,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

void main()
{
    int dayOfWeek = MONDAY;

    if(dayOfWeek == MONDAY ||
        dayOfWeek == TUESDAY ||
        dayOfWeek == WEDNESDAY ||
        dayOfWeek == THURSDAY ||
        dayOfWeek == FRIDAY)
        printf("\nWeekday");
    else if (dayOfWeek == SATURDAY ||
        dayOfWeek == SUNDAY)
        printf("\nWeekend");
    else
        printf("\nInvalid");

    getch();
}

Qua đây, các bạn có thể thấy rằng sử dụng lệnh switch case dễ nhìn và có performance cao hơn lệnh if else. Trong lệnh switch case, chỉ cần so sánh biểu thức dayOfWeek 1 lần và goto tới case tương ứng. Trong lệnh if else, biểu thức dayOfWeek được so sánh với với MONDAY, TUESDAY,…, FRIDAY trong lệnh if, nếu không thỏa mãn lại tiếp tục được so sánh với SATURDAY, SUNDAY trong lệnh else if.

Lệnh If else

  • Lệnh switch case có hạn chế là biểu thức điều kiện phải là số nguyên. Đối với lệnh if else, biểu thức điều kiện là true hoặc false. Do vậy, một số trường hợp, bắt buộc phải sử dụng lệnh if else thay vì switch case.

Ví dụ 2: Quy đổi thang điểm 10 sang thang điểm ABCD

Score < 4: điểm F

4  <= Score < 6: điểm D

6 <= Score < 7: điểm C

7 <= Score <= 8: điểm B

Score >= 8.5: điểm A

#include <stdio.h>
#include <conio.h>

void main()
{
    float score = 7.5;

    if(score < 4 && score >= 0)
        printf("\nDiem F");
    else if(score >= 4 && score < 6) printf("\nDiem D"); else if(score >= 6 && score < 7) printf("\nDiem C"); else if(score >= 7 && score <= 8) printf("\nDiem B"); else if(score >= 8.5 && score <= 10)
        printf("\nDiem A");
    else
        printf("\nInvalid");
    getch();
}

Kết luận:

  • Nên sử dụng switch case trong bài toán mul-ti choice, biểu thức điều kiện tính toán phức tạp nhưng phải có giá trị nguyên.
  • Nên sử dụng if else trong bài toán ít trường hợp, các biểu thức điều kiện đơn giản

Be the first to comment

Leave a Reply