Cấu trúc rẽ nhánh Switch case trong C#

Dẫn nhập

Cấu trúc rẽ nhánh có 2 loại, ở bàι CẤᑗ TRÚ₵ RẼ NHÁNH IF – ELSE TRONG ₵# tất cả chúng ta đã khám phá loại trước nhất. & bây giờ tất cả chúng ta sẽ khám phá loại còn sót lại – Cấu trúc rẽ nhánh Switch case trong ₵#.

Bài viết

Để đọc hiểu bài này tốt nhất các chúng ta nên có tri thức căn bản về các phần:

 Trong bài học này, tất cả chúng ta sẽ cùng khám phá các vấn đề:

  • Cấu trúc switch case dạng thiếu & dạng đủ.
  • Chẳng hạn chương trình sử dụng cấu trúc switch case.

Cấu trúc switch case dạng thiếu & dạng đủ

Dạng thiếu

Cú pháp:

switch (<biểu thứcvàgt;)

{

case <giá trị thứ 1vàgt;: <câu lệnh thứ 1vàgt;;

                            break;

case <giá trị thứ 2vàgt;: <câu lệnh thứ 2vàgt;;

                            break;

. . .

case <giá trị thứ ռvàgt;: <câu lệnh thứ ռvàgt;;

                            break;

}

Trong đó:

  • switch

    ,

    case

    là keyword bắt buộc.

  • break

    là một lệnh nhảy

    • Ý nghĩa của nó là thoát ra khỏi cấu trúc, vòng lặp chứa nó (định nghĩa về vòng lặp sẽ được trình bày ở bàι

      CẤᑗ TRÚ₵ LẶᴘ GOTO TRONG ₵#

      )

    • Ngoài

      break

      ra vẫn còn lệnh nhảy khác như

      goto

      nhưng ít được sử dụng (cụ thể về lệnh goto sẽ được trình bày trong bàι

      CẤᑗ TRÚ₵ LẶᴘ GOTO TRONG ₵#).

    • Vì trong cấu trúc switch. . . case chủ chốt chỉ sử dụng lệnh

      break

      nên mình cố ý để lệnh

      break

      vào trong cú pháp thay vì ghi chung chung là lệnh nhảy.

  • <

    biểu thức

    > phải là biểu thức trả về kết quả kiểu:

    • Số nguyên (

      int

      ,

      long

      ,

      byte

      , . . .)

    • Ký tự hoặc chuỗi (

      char

      ,

      string

      )

    • Kiểu liệt kê (enum, sẽ được trình bày trong bàι ENUM TRONG LẬᴘ TRÌNH ₵# )
  • <

    giá trị thứ ι

    > với ι = 1..ռ là giá trị mong muốn so sánh với giá trị của <

    biểu thức

    >.

  • <

    câu lệnh thứ ι

    > với ι = 1..ռ là câu lệnh mong muốn thực hiện khi <

    giá trị thứ ι

    > tương ứng bằng với giá trị của <

    biểu thức

    >.

Ý nghĩa: Duyệt lần lượt từ trên xuống dưới & kiểm soát xem giá trị của <biểu thứcvàgt; có bằng với <giá trị thứ ivàgt; đang xét hay không. Nếu bằng thì thực hiện <câu lệnh thứ ivàgt; tương ứng.

Chú ý:

  • <

    giá trị thứ ι

    > cần có kiểu dữ liệu giống với kiểu dữ liệu của giá trị của biểu thức.

  • <

    câu lệnh thứ ι

    > có thể gồm nhiều câu lệnh & không nhất thiết phải đặt trong cặp dấu ngoặc nhọn { } nhưng tốt hơn chúng ta nên đặt trong cặp dấu { } để code được rõ ràng và cụ thể hơn.

  • Nếu

    case

    đang xét không rỗng (có lệnh để thực hiện) thì bắt buộc cần có lệnh nhảy (rõ ràng và cụ thể là lệnh

    break

    ) sau đó.

  • Chẳng hạn:

 int ƙ = 8;

            switch (ƙ)
            {
                case 3:
                    Console.WriteLine("HowKteam");
                    break; // Vì case này có lệnh thực hiện nên cần có lệnh break 
                case 9: // case này rỗng (không có lệnh thực hiện) nên không cần lệnh break
                case 10:
                    Console.WriteLine("Free Education");
                    break;
            }

Lưu đồ sau sẽ minh họa cho các bạn phương pháp hoạt động của cấu trúc switch. . . case dạng thiếu:

  • Lưu ý là trường hợp không có lệnh

    break

    như trong hình đồng nghĩa với việc

    case

    đó rỗng (không có câu lệnh thực hiện).

  • So với

    case

    cuối cùng dù có câu lệnh để thực hiện hay không vẫn cần có lệnh

    break

    để thoát khỏi cấu trúc.

Chẳng hạn:

int ƙ = 10;

            switch (ƙ) // giá trị biểu thức là giá trị của biến ƙ (kiểu số nguyên)
            {
                case 3: // các giá trị so sánh cũng là kiểu số nguyên
                    Console.WriteLine("HowKteam"); // lệnh thực hiện nếu ƙ = 3
                    break; // lệnh thoát ra khỏi cấu trúc
                case 9:
                    Console.WriteLine("Kteam"); // tương đương
                    break;
                case 10:
                    Console.WriteLine("Free Education"); // tương đương
                    break;
            }

 Kết quả khi chạy chương trình trên là:

Dạng đủ

Cú pháp:

switch (<biểu thứcvàgt;)

{

case <giá trị thứ 1vàgt;: <câu lệnh thứ 1vàgt;;

                            break;

case <giá trị thứ 2vàgt;: <câu lệnh thứ 2vàgt;;

                            break;

. . .

case <giá trị thứ ռvàgt;: <câu lệnh thứ ռvàgt;;

                            break;

default: <câu lệnh mặc địnhvàgt;;

                break;

}

Trong đó: 

  • switch

    ,

    case

    ,

    default

    là keyword bắt buộc.

  • <biểu thứcvàgt;

    phải là biểu thức trả về kết quả kiểu:

    • Số nguyên (

      int

      ,

      long

      ,

      byte

      , . . .)

    • Ký tự hoặc chuỗi (

      char

      ,

      string

      )

    • Kiểu liệt kê (enum, sẽ được trình bày trong bàι ENUM TRONG LẬᴘ TRÌNH ₵#)
  • <

    giá trị thứ ι

    > với ι = 1..ռ là giá trị mong muốn so sánh với giá trị của <

    biểu thức

    >.

  • <câu lệnh thứ ivàgt;

    với ι = 1..ռ là câu lệnh mong muốn thực hiện khi <

    giá trị thứ ι

    > tương ứng bằng với giá trị của <

    biểu thức

    >.

  • <câu lệnh mặc địnhvàgt;

    là câu lệnh sẽ được thực hiện nếu giá trị <

    biểu thức

    > không bằng với <

    giá trị thứ ι

    > nào.

Ý nghĩa: Duyệt lần lượt từ trên xuống dưới & kiểm soát xem giá trị của <biểu thứcvàgt; có bằng với <giá trị thứ ivàgt; đang xét hay không. Nếu bằng thì thực hiện <câu lệnh thứ ivàgt; tương ứng. Còn nếu như không bằng toàn bộ các <giá trị thứ ivàgt; thì sẽ thực hiện <câu lệnh mặc địnhvàgt;.

Lưu đồ sau sẽ minh họa phương pháp hoạt động của cấu trúc switch. . . case. . . default. . . :

Về căn bản phương pháp hoạt động của 2 cấu trúc switch. . . case dạng đủ & dạng thiếu là như nhau, chỉ khác nhau ở một diểm là dạng đủ có thêm dòng default. . . (tương đương là lệnh else trong bàι CẤᑗ TRÚ₵ RẼ NHÁNH IF ELSE) nên các bạn xem lại Note của dạng thiếu để tránh mắc lỗi.

Chẳng hạn:

int ƙ = 8;

            switch (ƙ)
            {
                case 3:
                    Console.WriteLine("HowKteam");
                    break;
                case 9:
                    Console.WriteLine("Kteam");
                    break;
                case 10:
                    Console.WriteLine("Free Education");
                    break;
                default: // Còn nếu như không thỏa các trường hợp trên sẽ thực hiện lệnh sau đây
                    Console.WriteLine("Connecting to HowKteam. . .");
                    break;
            }

Kết quả khi chạy chương trình trên là:

  • Vì không tìm ra

    case

    nào có giá trị bằng với giá trị biến ƙ nên sẽ thực hiện câu lệnh trong

    default

    . Cho nên màn hình in ra

    Connecting to HowKteam. . .

    .

Chẳng hạn chương trình sử dụng cấu trúc switch case

Chẳng hạn: Viết chương trình tính năm âm lịch từ năm dương lịch đã nhập.

Thuật toán tính năm âm lịch:

  • Năm âm lịch = Can + Chi. Chính vì như vậy cần tính được Can & Chi sau đó ghép lại là xong.
  • Tính Can bằng cách:
    • Tìm phần dư của phép chia năm dương lịch cho 10.
    • Tra bảng sau để tìm thấy Can tương ứng

Năm dương % 10

1

2

3

4

5

6

7

8

9

Can

Canh

Tân

Nhâm

Quý

Giáp

Ất

Bính

Đinh

Mậu

Kỷ

  • Tìm Chi bằng cách:
    • Tìm phần dư của phép chia năm dương lịch cho 12.
    • Tra bảng sau để tìm thấy Chi tương ứng:

Năm dương % 12

1

2

3

4

5

6

7

8

9

10

11

Can

Thân

Dậu

Tuất

Hợi

Sửu

Dần

Phương thức

Thìn

Tỵ

Ngọ

Mùi

  • Nối Can & Chi lại để được kết quả.

Các bạn xem qua đoạn chương trình sau:

int Year; // Biến chứa giá trị năm cần tính.
            string Can = "", Chi = ""; // Biến chứa kết quả.

            Console.Write(" Moi ban nhap mot nam bat ky: ");
            Year = Int32.Parse(Console.ReadLine()); // Nhập năm dương lịch & ép kiểu về kiểu số nguyên
            
            switch (Year % 10) // Tìm Can như thuật toán đã trình bày.
            {
                case 0: // Mỗi case này tương ứng một kết quả cần tra cứu trong bảng tra cứu Can
                    Can = "Canh"; // Giá trị tương ứng với mỗi case
                    break;
                case 1:
                    Can = "Tan";
                    break;
                case 2:
                    Can = "Nham";
                    break;
                case 3:
                    Can = "Quy";
                    break;
                case 4:
                    Can = "Giap";
                    break;
                case 5:
                    Can = "At";
                    break;
                case 6:
                    Can = "Binh";
                    break;
                case 7:
                    Can = "Dinh";
                    break;
                case 8:
                    Can = "Mau";
                    break;
                case 9:
                    Can = "Ky";
                    break;
            }

            switch (Year % 12) // Tìm Chi như thuật toán đã trình bày
            {
                case 0: // Mỗi case này tương ứng một kết quả cần tra cứu trong bảng tra cứu Chi
                    Chi = "Than"; // Giá trị tương ứng với mỗi case
                    break;
                case 1:
                    Chi = "Dau";
                    break;
                case 2:
                    Chi = "Tuat";
                    break;
                case 3:
                    Chi = "Hoi";
                    break;
                case 4:
                    Chi = "Ty";
                    break;
                case 5:
                    Chi = "Suu";
                    break;
                case 6:
                    Chi = "Dan";
                    break;
                case 7:
                    Chi = "Meo";
                    break;
                case 8:
                    Chi = "Thin";
                    break;
                case 9:
                    Chi = "Ti";
                    break;
                case 10:
                    Chi = "Ngo";
                    break;
                case 11:
                    Chi = "Mui";
                    break;
            }

            Console.WriteLine("Nam {0} co nam am lich la: {1} {2}", Year, Can, Chi); // Nối Can & Chi lại để được năm âm lịch

            Console.ReadLine();

Kết quả khi chạy chương trình trên là:

  • Ở chẳng hạn trên mình đã bỏ qua việc kiểm soát dữ liệu nhập vào có đúng hay không nên các bạn có thể ứng dụng tri thức đã học để thực hiện (xem qua chẳng hạn trong CẤᑗ TRÚ₵ RẼ NHÁNH IF ELSE TRONG ₵#).

Bài tập tham khảσ

Tương đương phần bài tập của bài CẤᑗ TRÚ₵ RẼ NHÁNH IF ELSE TRONG ₵# nhưng sử dụng cấu trúc Switch case.

Hãy khoe thành tựu của các bạn vào fanpage hoặc phần comment nhé.

Tổng kết

Bài viết bài này giúp các bạn nắm được:

  • Cấu trúc switch case dạng thiếu & dạng đủ.
  • Viết chương trình sử dụng cấu trúc switch case.

Bài học sau tất cả chúng ta sẽ cùng khám phá một định nghĩa kế tiếp này là KIỂᑗ DỮ LIỆᑗ OBJECT TRONG ₵#.

Cảm ơn các bạn đã theo dõi nội dung. Hãy để lại comment hoặc phản hồi của mình để tiến triển nội dung tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

Luận bàn

Nếu bạn có bất kỳ khốn khó hay khúc mắc gì về khóa học, đừng ngần ngại đặt thắc mắc trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để thu được sự phụ trợ từ cộng đồng.

Xem Thêm  Thêm biểu tượng yêu thích vào trang HTML tĩnh - thêm favicon vào html

Viết một bình luận