-
- Tổng tiền thanh toán:
Bài 10 C# cơ bản - 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:
- CẤU TRÚC LỆNH CỦA C# viết trên nền Console Application.
- CẤU TRÚC NHẬP XUẤT của C# trên nền Console Application.
- BIẾN trong C#.
- KIỂU DỮ LIỆU trong C#.
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 đó.
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>.
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
Năm dương % 10 |
0 |
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 ra Chi tương ứng:
Năm dương % 12 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
Can |
Thân |
Dậu |
Tuất |
Hợi |
Tý |
Sửu |
Dần |
Mẹo |
Thìn |
Tỵ |
Ngọ |
Mùi |
- Nối Can và Chi lại để được kết quả.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bai_10_01
{
class Program
{
static void Main(string[] args)
{
int Nam;
String StrCan="", StrChi="";
Console.Write("Nhap nam sinh cua ban : ");
Nam = Int32.Parse(Console.ReadLine());
switch (Nam % 10) //Tim can theo thuat toan
{
case 0:
StrCan = "Canh";
break;
case 1:
StrCan = "Tan";
break;
case 2:
StrCan = "Nham";
break;
case 3:
StrCan = "Quy";
break;
case 4:
StrCan = "Giap";
break;
case 5:
StrCan = "At";
break;
case 6:
StrCan = "Binh";
break;
case 7:
StrCan = "Dinh";
break;
case 8:
StrCan = "Mau";
break;
case 9:
StrCan = "Ky";
break;
}
switch (Nam % 12) //Tinh Chi
{
case 0:
StrChi = "Than";
break;
case 1:
StrChi = "Dau";
break;
case 2:
StrChi = "Tuat";
break;
case 3:
StrChi = "Hoi";
break;
case 4:
StrChi = "Ty";
break;
case 5:
StrChi = "Suu";
break;
case 6:
StrChi = "Dan";
break;
case 7:
StrChi = "Meo";
break;
case 8:
StrChi = "Thin";
break;
case 9:
StrChi = "Ty";
break;
case 10:
StrChi = "Ngo";
break;
case 11:
StrChi = "Mui";
break;
}
Console.WriteLine("Nam {0} co nam am lich la {1} {2} ",Nam, StrCan, StrChi);
Console.ReadKey();
}
}
}
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#.