C语言中的Switch语句:初学者指南

Xin chào các bạnfuture programmers! Hôm nay, chúng ta sẽ cùng tìm hiểu về một trong những cấu trúc điều khiển hữu ích nhất trong lập trình C: câu lệnh switch. Đừng lo lắng nếu bạn mới bắt đầu; tôi sẽ hướng dẫn bạn từng bước, giống như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Vậy, hãy cầm ly đồ uống yêu thích của bạn và cùng bắt đầu chuyến phiêu lưu lập trình này nhé!

C - switch statement

Câu lệnh Switch-Case là gì?

Hãy tưởng tượng bạn đang ở một cửa hàng kem, và bạn phải chọn một hương vị. Bạn có vani, sô-cô-la, dâu tây và bạc hà. Mỗi lựa chọn sẽ dẫn đến một phần kem khác nhau trong cối của bạn. Đó chính xác là cách mà câu lệnh switch hoạt động trong lập trình!

Câu lệnh switch là một câu lệnh điều khiển luồng cho phép bạn thực thi các khối mã khác nhau dựa trên giá trị của một biến hoặc biểu thức. Nó giống như một phiên bản tinh tế và hiệu quả hơn của nhiều câu lệnh if-else.

Cú pháp của câu lệnh switch-case

Hãy cùng nhìn vào cấu trúc cơ bản của câu lệnh switch:

switch (biểu thức) {
case hằng số1:
// mã cần thực thi nếu biểu thức bằng hằng số1
break;
case hằng số2:
// mã cần thực thi nếu biểu thức bằng hằng số2
break;
...
default:
// mã cần thực thi nếu biểu thức không khớp với bất kỳ hằng số nào
}

Đừng lo lắng nếu điều này trông có vẻ đáng sợ ban đầu. Chúng ta sẽ phân tích nó từng phần.

Các thành phần chính:

  1. switch: Từ khóa này khởi đầu câu lệnh switch.
  2. biểu thức: Đây là giá trị được đánh giá.
  3. case: Mỗi case đại diện cho một giá trị có thể của biểu thức.
  4. break: Từ khóa này kết thúc mỗi khối case.
  5. default: Đây là khối tùy chọn sẽ chạy nếu không có case nào khớp.

Cách hoạt động của câu lệnh switch-case

Bây giờ, hãy xem cách này thực sự hoạt động trong thực tế. Hãy tưởng tượng chúng ta đang tạo một chương trình đơn giản cho ra một thông báo dựa trên điểm số của học sinh:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
printf("Excellent!");
break;
case 'B':
printf("Well done!");
break;
case 'C':
printf("Good job!");
break;
case 'D':
printf("You passed.");
break;
case 'F':
printf("Better luck next time.");
break;
default:
printf("Invalid grade");
}

return 0;
}

Trong ví dụ này:

  1. Chúng ta có một biến grade được đặt là 'B'.
  2. Câu lệnh switch đánh giá grade.
  3. Nó kiểm tra từng case cho đến khi tìm thấy một khớp ('B' trong trường hợp này).
  4. Khi tìm thấy khớp, nó thực thi mã trong case đó ("Well done!").
  5. Từ khóa break sau đó thoát khỏi khối switch.

Nếu grade không khớp với bất kỳ case nào, khối default sẽ chạy.

Sơ đồ lưu đồ của câu lệnh switch-case

Để trực quan hóa cách một câu lệnh switch hoạt động, hãy cùng nhìn vào một sơ đồ lưu đồ:

+-------------+
|   Start     |
+-------------+
|
v
+-------------------+
| Evaluate expression|
+-------------------+
|
v
+----------------------+
| Compare with case 1  |
+----------------------+
|
v
+-------------+
|    Match?   |
+-------------+
Yes |     | No
|     |
v     v
+-----------------+    +----------------------+
| Execute case 1  |    | Compare with case 2  |
+-----------------+    +----------------------+
|                     |
v                     v
+-----------+         +-------------+
|   Break   |         |    Match?   |
+-----------+         +-------------+
|               Yes |     | No
|                   |     |
|                   v     v
|         +-----------------+    +------------+
|         | Execute case 2  |    |   ...      |
|         +-----------------+    +------------+
|                   |
|                   v
|            +-----------+
|            |   Break   |
|            +-----------+
|                   |
v                   v
+-----------+        +-----------+
|    End    | <------| Default   |
+-----------+        +-----------+

Sơ đồ lưu đồ này cho thấy cách câu lệnh switch đánh giá từng case và thực thi khối mã khớp.

Quy tắc sử dụng câu lệnh switch-case

Để sử dụng câu lệnh switch hiệu quả, hãy nhớ các quy tắc sau:

Quy tắc Mô tả
Loại biểu thức Biểu thức switch phải là loại nguyên (int, char, v.v.) hoặc loại liệt kê.
Constant Cases Các nhãn case phải là hằng số hoặc giá trịLiter.
Các case duy nhất Mỗi giá trị case phải duy nhất trong câu lệnh switch.
Câu lệnh Break Sử dụng break để thoát khỏi khối switch sau khi một case được thực thi.
Khối Default Khối default là tùy chọn và có thể xuất hiện ở bất kỳ đâu trong khối switch.

Ví dụ câu lệnh switch-case khác

Hãy cùng xem một vài ví dụ khác để củng cố kiến thức của chúng ta.

Ví dụ 1: Ngày trong tuần

#include <stdio.h>

int main() {
int day = 4;

switch(day) {
case 1:
printf("Monday");
break;
case 2:
printf("Tuesday");
break;
case 3:
printf("Wednesday");
break;
case 4:
printf("Thursday");
break;
case 5:
printf("Friday");
break;
case 6:
printf("Saturday");
break;
case 7:
printf("Sunday");
break;
default:
printf("Invalid day number");
}

return 0;
}

Chương trình này sẽ xuất ra "Thursday" vì day được đặt là 4.

Ví dụ 2: Máy tính đơn giản

#include <stdio.h>

int main() {
char operator;
double n1, n2;

printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter two operands: ");
scanf("%lf %lf",&n1, &n2);

switch(operator)
{
case '+':
printf("%.1lf + %.1lf = %.1lf", n1, n2, n1+n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf", n1, n2, n1-n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf", n1, n2, n1*n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf", n1, n2, n1/n2);
break;
default:
printf("Error! operator is not correct");
}

return 0;
}

Chương trình này tạo một máy tính đơn giản sử dụng câu lệnh switch.

Kết hợp nhiều case để thực thi cùng một mã

Đôi khi, bạn có thể muốn nhiều case thực thi cùng một mã. Bạn có thể làm điều này bằng cách liệt kê các case cùng nhau:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
case 'B':
case 'C':
printf("You passed!");
break;
case 'D':
case 'F':
printf("You need to improve.");
break;
default:
printf("Invalid grade");
}

return 0;
}

Trong ví dụ này, các điểm A, B và C đều kết quả trong "You passed!", trong khi D và F kết quả trong "You need to improve."

Và thế là bạn đã học về câu lệnh switch trong C! Hãy nhớ, thực hành là cách tốt nhất để thành thạo. Hãy thử viết các câu lệnh switch của riêng bạn và thử nghiệm với các tình huống khác nhau. Trước khi bạn biết điều gì, bạn sẽ thành thạo việc sử dụng switch!

Chúc các bạn lập trình vui vẻ, và mong rằng các switch của bạn luôn tìm thấy đúng case!

Credits: Image by storyset