C# - C Sharp: switch-case

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Cũng giống như if-else, điều kiện switch-case dùng để thiết lập các điều kiện rẽ nhánh, tuy nhiên, phạm vi áp dụng lại bó hẹp hơn, nó chỉ áp dụng được cho loại hằng. Dưới đây là cú pháp cơ bản:

switch(Biểu_thức) {
  case Hằng_1:
    Khối_lệnh_1;
    break;
  case Hằng_2:
    Khối_lệnh_2;
    break;
  ...
  case Hằng_n:
    Khối_lệnh_n;
    break;
  default:
    Khối_lệnh;
}

, trong đó: Biểu_thức ở đây có thể là giá trị, biến, biểu thức hoặc một lời gọi đến một hàm trả về giá trị. Nếu Biểu_thức bằng với Hằng của case nào thì Khối_lệnh tương ứng với case đó sẽ được thực hiện, thực hiện xong khối lệnh thì sẽ thoát khỏi switch...case thông qua câu lệnh break; ngay dưới khối lệnh tương ứng đó. Nếu Biểu_thức không bằng bất kỳ hằng nào thì khối lệnh dưới default sẽ được thực hiện.

Lưu ý: default là không bắt buộc, nghĩa là bạn có thể bỏ đi phần default nếu bạn muốn cho phù hợp với bài toán của bạn.

Trong trường hợp có sự giống nhau của các Khối_lệnh ở các hằng khác nhau thì ta có cú pháp ngắn gọn hơn như sau:

switch(Giá_trị) {
  case Hằng_1:
  case Hằng_2:
  ...
  case Hằng_i:
    Khối_lệnh;
    break;
    ...
  default:
    Khối_lệnh0;
}

Ví dụ, hãy nhập vào một ký tự bất kỳ và xác định xem ký tự đó là nguyên âm hay phụ âm. Vì ngôn ngữ lập trình C không hỗ trợ ký tự có dấu nên ta chỉ xét các ký tự trong bảng chữ cái tiếng Anh. Những ký tự 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o' và 'u' là những nguyên âm. Những ký tự còn lại trong bảng chữ cái tiếng Anh là phụ âm. Vậy, ta có lời giải như sau:

namespace Demo1
{
    internal class CheckCharacter
    {
        static void Main(string[] args)
        {
            char ch = 'Z';
            Console.Write("Nhap vao mot ky tu (A-Z hoac a-z): ");
            ch = (char)Console.Read();
            if (!('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z'))
            {
                Console.WriteLine("Ky tu nhap vao '{0}' khong nam trong bang chu cai tieng Anh!", ch);
            }
            else
            {
                switch (ch)
                {
                    case 'a':
                    case 'A':
                    case 'e':
                    case 'E':
                    case 'i':
                    case 'I':
                    case 'o':
                    case 'O':
                    case 'u':
                    case 'U':
                        Console.WriteLine("'{0}' la nguyen am!", ch);
                        break;
                    default:
                        Console.WriteLine("'{0}' la phu am!", ch);
                        break;
                }
            }
        }
    }
}

Ta xét thêm một ví dụ nữa, ví dụ này yêu cầu nhập vào một tháng bất kỳ và xác định xem tháng đó có bao nhiêu ngày. Dưới đây là những phân tích cho ví dụ này:

- Tháng ở đây là tháng theo lịch dương (lịch Tây).

- Những tháng sau có 31 ngày: 1, 3, 5, 7, 8, 10 và tháng 12.

- Những tháng sau có 30 ngày: 4, 6, 9 và tháng 11.

- Riêng tháng 2: nếu là năm nhuận thì có 29 ngày, năm thường thì có 28 ngày.

- Năm nhuận là năm thoả mãn một trong hai điều kiện sau:

+ Điều kiện 1: Năm đó chia hết cho 4 nhưng không chia hết cho 100.

+ Điều kiện 2: Năm đó chia hết cho 400.

Chẳng hạn, năm 2000 là năm nhuận vì mặc dù nó không thoả mãn điều kiện 1 nhưng nó thoả mãn điều kiện 2 là chia hết cho 400; năm 2016 là năm nhuận vì 2016 chia hết cho 4 nhưng không chia hết cho 100.

Sau đây là chương trình thực hiện yêu cầu trên:

namespace Demo1
{
    internal class CheckDaysOfMonth
    {
        static void Main(string[] args)
        {
            int month, year;

            do
            {
                Console.Write("Input a month: ");
                month = Convert.ToInt32(Console.ReadLine());
            } while (!(1 <= month && month <= 12)); //trong khi tháng còn không nằm trong đoạn [1,12] thì còn yêu cầu nhập lại.

            switch (month)
            {
                case 4:
                case 6:
                case 9:
                case 11:
                    Console.WriteLine("There are 3 days in a month of {0}", month);
                    break;
                case 2:
                    Console.Write("Input a year: ");
                    year = Convert.ToInt32(Console.ReadLine());
                    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //nếu năm thỏa mãn một trong hai điều kiện đã phân tích ở trên
                        Console.WriteLine("There are 29 days in a month of 2 in the year {0}", month, year); //thì tháng tương ứng có 29 ngày (năm nhuận)
                    else  //nếu không thì
                        Console.WriteLine("There are 28 days in a month of 2 in the year {0}", year); //tháng tương ứng có 29 ngày (năm thường)
                    break;
                default:
                    Console.WriteLine("There are 31 days in a month of {0}", month); //những tháng còn lại có 31 ngày
                    break;
            }
        }
    }
}

Bài tập áp dụng:

Làm các Bài tập 4 và 5 của link bài tập sau: v1study.com/c-bai-tap-phan-dieu-kien-a492.html

» Tiếp: Vòng lặp while
« Trước: Toán tử điều kiện ba ngôi ?:
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!