Tổng quan về cấu trúc điều khiển
- Một chương trình không chỉ bao gồm các lệnh tuần tự nối tiếp nhau. Trong quá trình chạy nó có thể rẽ nhánh hay lặp lại một đoạn mã nào đó. Để làm điều này chúng ta sử dụng các cấu trúc điều khiển.
- Cùng với việc giới thiệu các cấu trúc điều khiển chúng ta cũng sẽ phải biết tới một khái niệm mới: khối lệnh, đó là một nhóm các lệnh được ngăn cách bởi dấu chấm phẩy (;) nhưng được gộp trong một khối giới hạn bởi một cặp ngoặc nhọn: { và }.
- Nếu khối lệnh chỉ có 1 lệnh thì không cần sử dụng 3 cặp dấu ngoặc nhọn { và }
Trong C# có 3 loại cấu trúc cơ bản:
- Cấu trúc tuần tự
- Cấu trúc quyết định chọn lựa rẽ nhánh
- Cấu trúc lặp
Các cấu trúc điều khiển
- Cấu trúc rẽ nhánh
- Toán tử điều kiện ?
- Cấu trúc lựa chọn switch
- Cấu trúc lặp while, do, for, foreach
Cấu trúc rẽ nhánh - IF
Cú pháp
if (<Điều kiện>)
{
<Khối lệnh A>
}
Ý nghĩa: Nếu <Điều kiện> Đúng Thì Thực hiện <Khối lệnh A>
<Điều kiện>: là 1 biểu thức logic, trả về true (Đúng) hoặc false (Sai)
Sơ đồ hoạt động:
Ví dụ: Kiểm tra điểm trung bình để xét kết quả đậu hay rớt. Nếu điểm trung bình >=5 thì kết quả là đạt
Console.Write("Nhập vào điểm trung bình: ");
float dtb = (float)Console.Read();
if (dtb >= 5)
Console.WriteLine("Kết quả đạt");
Dạng 2: if else … else …
- Đặt vấn đề: Trường Y có nhu cầu xét kết quả học tập của học sinh dựa vào điểm trung bình để quyết định xem học sinh đó có được lên lớp hay không. Có 2 trường hợp có thể xảy ra:
- Trường hợp 1: được lê l n lớp (điểm t bì h 5 0) rung bình >= 5.0)
- Trường hợp 2: không được lên lớp (điểm trung bình <= 5.0)
- 2 trường hợp của bài toán trên loại trừ nhau, để giải quyết bài toán này chúng ta dùng cấu trúc if … else …
Cú pháp
if (<Điều kiện>)
{
<Khối lệnh A>
}
else // khi điều kiện của if là false
{
<Khối lệnh B>
}
Ý nghĩa Nếu <Điều kiện> Đúng Thì Thực hiện <Khối lệnh A> Ngược lại, <Điều kiện> Sai Thực hiện <Khối lệnh B>
Sơ đồ hoạt động
Ví dụ 1: Xét kết quả học tập dựa vào điểm trung bình Nếu DTB <5 thì Kết quả là Ở lại lớp Ngược lại là Được lên lớp
if (dtb >= 5)
Console.Write("Được lên lớp");
else
Console.Write("Ở lại lớp");
Ví dụ 2: Xét kết quả học tập dựa vào điểm trung bình Nếu DTB <5 thì Kết quả là Ở lại lớp và phải thi lại Ngược lại là Được lên lớp và không phải thi lại
double dtb = double.Parse(Console.ReadLine());
if (dtb >= 5)
{
Console.Write("Kết quả đạt");
Console.Write("Bạn không phải thi lại");
}
else
{
Console.Write("Kết quả không đạt");
Console.Write("Bạn vui lòng thi lại");
}
Toán tử điều kiện - ?
- Toán tử ? hoạt động tương tự như dạng 2 của cú pháp IF
- Cú pháp
- Biến_kết_quả = <Điều kiện> ? <biểu_thức_1> : <biểu_thức_2>
- Ý nghĩa
- Nếu <Điều kiện> Đúng
- Thì Trả về <Biểu_thức_1>
- Ngược lại
- Trả về <Biểu thức 2>
- <Điều kiện>: là 1 biểu thức logic, trả về true hoặc false
Ví dụ: Xét kết quả học tập dựa vào điểm trung bình: Nếu DTB <5 thì Kết quả là Ở lại lớp. Ngược lại là Được lên lớp
double dtb = double.Parse(Console.ReadLine());
string ket_qua = (dtb > 5) = 5) ? "Được lê l n lớp" : "Ở lại lớp";
Console.WriteLine("Kết quả: {0}", ket_qua);
Cấu trúc lựa chọn – switch
- Với cấu trúc IF, khi có nhiều trường hợp cần xét, ta sẽ dùng toán tử || để nối các điều kiện phức tạp khi có quá nhiều điều kiện
- Do đó có thể sử dụng cấu trúc chọn switch để thay thế cho cấu trúc IF trong trường hợp này
switch (<biểu thức chọn lựa>)
{
case <giá trị 1>:
<Tập lệnh 1>
break;
case <giá trị 2>:
<Tập lệnh 2>
break;
…
default: // các lệnh thực thi khi <biểu thức> không bằng bất kỳ <giá trị> nào của case
<Tập lệnh n>
break;
}
Ý nghĩa
- case: Liệt kê các trường hợp cần xét
- Giá trị i: chứa các giá trị cần so sánh với <biểu thức>
- Tập lệnh x: được thực hiện khi biểu thức chọn lựa = một trong số các giá trị của <Tập giá trị i>
Ví dụ: nhập vào thứ, cho biết tên thứ trong tuần
int thu = Int.Parse(Console.ReadLine());
switch (thu)
{
case 2:
Console.WriteLine(“Thứ Hai”);
break;
...
case 8:
Console.WriteLine(“Chủ Nhật”);
break;
default:
Console.WriteLine(“Thứ nhập vào không hợp lệ”);
break;
}
Chú ý: Nếu như các trường hợp cần xét có cùng một tập giá trị thì lần lượt liệt kê các trường hợp, sau đó mới viết tập giá trị
int thang = int.Parse(Console.ReadLine());
int nam = int.Parse(Console.ReadLine());
switch(thang)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
Console.WriteLine(“Tháng {0} năm {1} có 31 ngày”, thang, nam);
break;
}
Bài viết tiếp theo
- Bài 4 Classes, objects và namespaces - Nền tảng lập trình C#
- Bài 5 Tính thừa kế và Đa hình - Nền tảng lập trình C#
- Bài 6 Interface - Nền tảng lập trình C#
- Bài 7 Xử lý nhập/xuất dữ liệu - Nền tảng lập trình C#
- Bài 8 Collection và Generics - Nền tảng lập trình C#
- Bài 9 Serialization - Nền tảng lập trình C#
- Bài 10 Threading - Nền tảng lập trình C#