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

Khóa học lập trình C# căn bản

5.0 (1 đánh giá)
Tạo bởi Trần Thành Vi Thanh Cập nhật lần cuối 22:09 22-03-2019 39.731 lượt xem 37 bình luận
Học nhanh

Danh sách bài học

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ài CẤU TRÚC RẼ NHÁNH IF - ELSE TRONG C# chúng ta đã tìm hiểu loại đầu tiên. Và hôm nay chúng ta sẽ tìm hiểu loại còn lại – Cấu trúc rẽ nhánh Switch case trong C#.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

 Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Cấu trúc switch case dạng thiếu và dạng đủ.
  • Ví dụ chương trình sử dụng cấu trúc switch case.

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

Dạng thiếu

Cú pháp:

switch (<biểu thức>)

{

case <giá tr th 1>: <câu lệnh thứ 1>;

                            break;

case <giá tr th 2>: <câu lệnh thứ 2>;

                            break;

. . .

case <giá trị thứ n>: <câu lệnh thứ n>;

                            break;

}

Trong đó:

  • switch, case là từ khóa 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ó (khái niệm về vòng lặp sẽ được trình bày ở bài CẤU TRÚC LẶP GOTO TRONG C# )
    • Ngoài break ra vẫn còn lệnh nhảy khác như goto nhưng ít được sử dụng (chi tiết về lệnh goto sẽ được trình bày trong bài CẤU TRÚC LẶP GOTO TRONG C#).
    • Vì trong cấu trúc switch. . . case chủ yếu chỉ sử dụng lệnh break nên mình cố tình để 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ài ENUM TRONG LẬP TRÌNH C# )
  • <giá trị thứ i> với i = 1..n là giá trị muốn so sánh với giá trị của <biểu thức>.
  • <câu lệnh thứ i> với i = 1..n là câu lệnh muốn thực hiện khi <giá trị thứ i> 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 và kiểm tra xem giá trị của <biểu thức> có bằng với <giá trị thứ i> đang xét hay không. Nếu bằng thì thực hiện <câu lệnh thứ i> tương ứng.

Lưu ý:

  • <giá trị thứ i> phải 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ứ i> có thể gồm nhiều câu lệnh và không nhất thiết phải đặt trong cặp dấu ngoặc nhọn { } nhưng tốt hơn bạn nên đặt trong cặp dấu { } để code được rõ ràng hơn.
  • Nếu case đang xét không rỗng (có lệnh để thực hiện) thì bắt buộc phải có lệnh nhảy (cụ thể là lệnh break) sau đó.
  • Ví dụ:
 int k = 8;

            switch (k)
            {
                case 3:
                    Console.WriteLine("HowKteam");
                    break; // Vì case này có lệnh thực hiện nên phải 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 cách thức hoạt động của cấu trúc switch. . . case dạng thiếu:

Kteam

  • Chú ý 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).
  • Đối với case cuối cùng dù có câu lệnh để thực hiện hay không vẫn phải có lệnh break để thoát khỏi cấu trúc.

Ví dụ:

int k = 10;

            switch (k) // giá trị biểu thức là giá trị của biến k (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 k = 3
                    break; // lệnh thoát ra khỏi cấu trúc
                case 9:
                    Console.WriteLine("Kteam"); // tương tự
                    break;
                case 10:
                    Console.WriteLine("Free Education"); // tương tự
                    break;
            }

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

Kteam


Dạng đủ

Cú pháp:

switch (<biểu thức>)

{

case <giá tr th 1>: <câu lệnh thứ 1>;

                            break;

case <giá tr th 2>: <câu lệnh thứ 2>;

                            break;

. . .

case <giá trị thứ n>: <câu lệnh thứ n>;

                            break;

default: <câu lệnh mặc định>;

                break;

 

}

Trong đó: 

  • switch, case, default là từ khóa bắt buộc.
  • <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ài ENUM TRONG LẬP TRÌNH C#)
  • <giá trị thứ i> với i = 1..n là giá trị muốn so sánh với giá trị của <biểu thức>.
  • <câu lệnh thứ i> với i = 1..n là câu lệnh muốn thực hiện khi <giá trị thứ i> tương ứng bằng với giá trị của <biểu thức>.
  • <câu lệnh mặc định> 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ứ i> nào.

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

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

Kteam

  • Về cơ bản cách thức hoạt động của 2 cấu trúc switch. . . case dạng đủ và 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 tự là lệnh else trong bài CẤU TRÚC RẼ NHÁNH IF ELSE) nên các bạn xem lại lưu ý của dạng thiếu để tránh mắc lỗi.

Ví dụ:

int k = 8;

            switch (k)
            {
                case 3:
                    Console.WriteLine("HowKteam");
                    break;
                case 9:
                    Console.WriteLine("Kteam");
                    break;
                case 10:
                    Console.WriteLine("Free Education");
                    break;
                default: // Nếu 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à:

Kteam

  • Vì không tìm thấy case nào có giá trị bằng với giá trị biến k nên sẽ thực hiện câu lệnh trong default. Do đó màn hình in ra Connecting to HowKteam. . ..

Ví dụ chương trình sử dụng cấu trúc switch case

Ví dụ: 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. Vì thế cần tính được Can và 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 ra Can tương ứng

 

  • 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 ra Chi tương ứng:

 

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

Các bạn tham khảo đ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 và é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 và Chi lại để được năm âm lịch

            Console.ReadLine();

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

Kteam

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

Bài tập tham khảo

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

Hãy khoe thành quả của bạn vào fanpage hoặc phần bình luận nhé.


Kết luận

Nội dung bài này giúp các bạn nắm được:

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

Bài học sau chúng ta sẽ cùng tìm hiểu một khái niệm tiếp theo đó là KIỂU DỮ LIỆU OBJECT TRONG C#.

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


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Cấu trúc rẽ nhánh Switch case trong C# dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

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

Nội dung bài viết

Tác giả

Mỗi buổi sáng thức dậy, bạn có 2 lựa chọn, tiếp tục ngủ để mơ những giấc mơ hoặc thức dậy và theo đuổi chúng!

Khóa học

Khóa học lập trình C# căn bản

Bạn mới bắt đầu học lập trình? Bạn đang muốn học thêm ngôn ngữ lập trình mới? C# là lựa chọn hoàn hảo để đáp ứng các nhu cầu trên.

Ngôn ngữ C# là một ngôn ngữ mới, cấu trúc rõ ràng, dễ hiểu và dễ học. C# thừa hưởng những ưu việt từ ngôn ngữ Java, C, C++ cũng như khắc phục được những hạn chế của các ngôn ngữ này. C# là ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, được xây dựng dựa trên C++ và Java.

Khoá học lần này sẽ mang đến toàn bộ những kiến thức cơ bản về C#. Chào mừng các bạn đã đến với khoá học LẬP TRÌNH C# CƠ BẢN của Kteam.

Đánh giá

phitungson đã đánh giá 15:57 26-03-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
phitungson đã bình luận 15:54 26-03-2019

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace bai_tap_1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 2019, b, d;
            string chuoi;
            bool kiemtra;
          
            Console.WriteLine("********                     **********");
            Console.WriteLine("********Chuong trinh tinh tuoi*********");
            Console.WriteLine("********                     **********");
           
            Console.WriteLine("Moi ban nhap nam:");
            chuoi = Console.ReadLine();
            
            kiemtra = int.TryParse(chuoi, out b);
            Console.WriteLine(kiemtra == true?"" : "Ban da nhap sai");
            
            d = a - b;
            switch (b > a)
            {
                case true: Console.WriteLine("Ban da nhap sai nam");
                    break;
            }
            switch (d < 16)
            {
                case true: Console.WriteLine("Ban tuoi: {0}, Tuoi vi thanh nien", d);
                    break;
            }
            switch (d)
            {
                case 16: Console.WriteLine("Ban tuoi: 16, Tuoi vi thanh nien");
                    break;
                case 17: Console.WriteLine("Ban tuoi: 17, Tuoi truong thanh");
                    break;
                case 18: Console.WriteLine("Ban tuoi: 18, Tuoi truong thanh");
                    break;
            }
            switch (d > 18)
            {
                case true: Console.WriteLine("Ban tuoi: {0}, Gia roi", d);
                    break;
            }

            Console.ReadKey();    
        }
    }
}
 

quyenvanboqmak đã bình luận 16:54 25-11-2018
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace howKteam_bai10 //cau truc re nhanh switch case trong c#
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * switch (<bieu thuc>)
             * {
             * case <gia tri thu 1>: <cau lenh thu 1>; break;
             * case <gia tri thu 2>: <cau lenh thu 2>; break;
             * ...
             * case <gia tri thu n>: <cau lenh thu n>; break;
             * default: <cau lenh mac dinh>; break;
             * }
             */
            int a = 5;
            int b = 2;
            switch (a-b)
            {
                case 1:;break;
                case 2:; break;
                case 3: Console.WriteLine("Case 3"); break;
            }
            Console.ReadKey();
        }
    }
}

 

hphuc4244 đã bình luận 10:55 30-10-2018

qua hay va bô ich

 

phongsmod1 đã bình luận 13:00 25-10-2018

Mình code đc cái trò kéo búa bao bằng cái Switch Case như này nhưng dài quá ko biết sao k nhỉ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2_keobuabao
{
    class Program
    {
        static void Main(string[] args)
        {
            bool kiemtra;
            int so, so_may;
            string nguoichon, maychon;
            maychon = "";
            nguoichon = "";

            Random ran = new Random();
            so_may = ran.Next(1, 3);

            Console.WriteLine("Hay chon so: ");
            kiemtra = int.TryParse(Console.ReadLine(), out so);

            switch (kiemtra)
            {
                case false:
                    {
                        Console.WriteLine("Ki tu nhap khong chinh xac!");
                        Console.ReadKey();
                        return;
                    }
            }

            switch (so - so_may)
            {
                case 0:
                    {
                        switch(so_may)
                        {
                            case 1:
                                {
                                    maychon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    maychon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    maychon = "bao";
                                    break;
                                }
                        }
                        switch (so)
                        {
                            case 1:
                                {
                                    nguoichon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    nguoichon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    nguoichon = "bao";
                                    break;
                                }
                        }
                        Console.WriteLine("Ban chon: " + nguoichon);
                        Console.WriteLine("May chon: " + maychon);
                        Console.WriteLine("Hoa!");
                        break;
                    }
                case -1 | 2:
                    {
                        switch (so_may)
                        {
                            case 1:
                                {
                                    maychon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    maychon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    maychon = "bao";
                                    break;
                                }
                        }
                        switch (so)
                        {
                            case 1:
                                {
                                    nguoichon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    nguoichon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    nguoichon = "bao";
                                    break;
                                }
                        }
                            Console.WriteLine("Ban chon: " + nguoichon);
                            Console.WriteLine("May chon: " + maychon);
                            Console.WriteLine("Ban thua!");
                            break;
                    }
                case 1:
                    {
                        switch (so_may)
                        {
                            case 1:
                                {
                                    maychon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    maychon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    maychon = "bao";
                                    break;
                                }
                        }
                        switch (so)
                        {
                            case 1:
                                {
                                    nguoichon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    nguoichon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    nguoichon = "bao";
                                    break;
                                }
                        }
                        Console.WriteLine("Ban chon: " + nguoichon);
                        Console.WriteLine("May chon: " + maychon);
                        Console.WriteLine("Ban thang!");
                        break;
                    }
                case -2:
                    {
                        switch (so_may)
                        {
                            case 1:
                                {
                                    maychon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    maychon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    maychon = "bao";
                                    break;
                                }
                        }
                        switch (so)
                        {
                            case 1:
                                {
                                    nguoichon = "keo";
                                    break;
                                }
                            case 2:
                                {
                                    nguoichon = "bua";
                                    break;
                                }
                            case 3:
                                {
                                    nguoichon = "bao";
                                    break;
                                }
                        }
                        Console.WriteLine("Ban chon: " + nguoichon);
                        Console.WriteLine("May chon: " + maychon);
                        Console.WriteLine("Ban thang!");
                        break;
                    }
            }
            Console.ReadKey();

            
        }

    }
}

 

habahaibn đã bình luận 11:30 24-09-2018

các bạn cho hỏi bài tập 

Cho a,b là 2 số nguyên, kt là 1 ký tự nhập từ bàn phím (+,-,*,/). Nếu nhập kt là phép toán nào thì tự động tính toán cho a,b.

bằng switch

switch

...

...

case '/';

console.writeline("{0}/{1}={2}",a,b,a/b);

break;

nếu viết như này thì nó chỉ lấy phần nguyên = 0 vậy để làm sao lấy được kq đúng vd như a= và b=3

Không có video.