Cấu trúc điều khiển trong C# 5.0 – Visual Studio 2015 – Bài 4

Cấu trúc điều khiển trong C# 5.0 – Visual Studio 2015 – Bài 4
access_time 11/7/2015 5:16:13 PM
person Nguyễn Mạnh Hùng
1. Giới thiệu
C# cung cấp khá đa dạng và linh hoạt các cấu trúc điều khiển cơ bản để lập trình viên có thể sử dụng khi viết mã lệnh, các cấu trúc lệnh này thông thường được chia làm 3 nhóm như sau :
Cấu trúc lựa chọn (Selection constructs): Các câu lệnh ifswitch là các câu lệnh nằm trong cấu trúc lựa chọn. Lập trình viên có thể lựa chọn dựa trên giá trị của biểu thức, chọn lọc thực thi các câu lệnh dựa trên các điều kiện đã được lựa chọn.
Cấu trúc lặp (Iteration constructs): Các câu lệnh while, do … while, for, foreach thực thi các khối lệnh dựa trên điều kiện kiểm tra đúng sai. Mục tiêu của cấu trúc lặp nhằm thực thi các câu lệnh được lặp đi lặp lại nhiều lần.
Các cấu trúc lệnh nhảy (Jump constructs): Trong quá trình thực thi các lệnh trong chương trình sẽ là “tuần tự, liên tục”. Tức là khi chương trình thi hành, các lệnh sẽ thực thi từ trên xuống dưới, từ trái qua phải, hết lệnh này sẽ thực thi đến lệnh kế tiếp. Tuy nhiên, trong những tình huống nào đó, sau khi thi hành đến lệnh thứ n thì không cần thiết phải thực thi những lệnh còn lại nữa bởi vì đến đó, bài toán đã được giải quyết, việc thực thi các lệnh còn lại là dư thừa. Để giải quyết vấ đề này, C# cung cấp cho chúng ta các lệnh: break, continue, return, goto, …
2. Cấu trúc lựa chọn
2.1 Câu lệnh if
Câu lệnh if sử dụng điều kiện logic nhằm kiểm tra điều kiện thực hiện của câu lệnh. Nếu điều kiện đúng (true) thì khối lệnh sau đó sẽ được thực thi.Nếu điều kiện là sai (false) thì khối lệnh đó sẽ bị bỏ qua.
Cú pháp
if (condition) //
{
  // one or more statements;
}
Mô tả
  • condition : Biểu thức điều kiện , kết quả trả về của biểu thức này là true hoặc false.
  • statements : Tập hợp các câu lệnh sẽ được thực hiện với điều kiện biểu thức condition trả về giá trị true.
Ví dụ :
Viết chương trình kiểm tra số âm, nếu số là số âm thì hiển thị thông báo, ngược lại thì kết thúc chương trình. Sử dụng Activity Diagram trong modeling project trong bộ Visual Studio 2015 để mô tả luồng thực thi của bài toán.
Hình số 1 : Lược đồ mô tả lệnh if
Code thực thi chương trình như sau :
Hình số 2 : Chương trình mô tả lệnh if
2.2 Cấu trúc lệnh if..else
Cấu trúc lệnh if…else bắt đầu bởi điều kiện kiểm tra if. Nếu điều kiện đúng thực thi khối lệnh trực thuộc if còn ngược lại nếu sai thì thực thi khối lệnh trực thuộc else.
Cú pháp:
if (condition)
{
// statements execution when condition is true;
}
else
{
// statements execution when condition is false;
}
Mô tả
  • condition : Biểu thức điều kiện , kết quả trả về của biểu thức này là true hoặc false.
  • statements : Tập hợp các câu lệnh sẽ được thực hiện với điều kiện biểu thức condition trả về giá trị true. Nếu true thực thi khối lệnh trực thuộc if, ngược lại thực thi khối lệnh trực thuộc else.
Ví dụ :
Viết chương trình kiểm tra số khi nhập vào từ bàn phím nếu là số âm thì thông báo là số âm và ngược lại nếu là số dương thì thông báo là số dương. Sử dụng Activity Diagram trong modeling project trong bộ Visual Studio 2015 để mô tả luồng thực thi của bài toán.
 
 Hình số 3 : Lược đồ mô tả lệnh if..else
Code thực thi chương trình.
Hình số 4 : Chương trình mô tả lệnh if-else
2.3 Cấu trúc if..else if
Cấu trúc if..else if cho phép lập trình viên kiểm tra nhiều điều kiện logic, mỗi điều kiện sẽ thực thi khối lệnh trực thuộc điều kiện đó.
Cú pháp
if (condition) {
// one or more statements;
}
else if (condition){
// one or more statements;
}
else if (condition){
// one or more statements;
}
else{
// one or more statements;
}
Mô tả
  • condition : Biểu thức điều kiện kiểm tra.
  • statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức condition.
Ví dụ: Viết chương trình kiểm tra số nguyên dương chẵn lẻ. Sử dụng Activity Diagram trong modeling project trong bộ Visual Studio 2015 để mô tả luồng thực thi của bài toán.
Sơ đồ thực hiện
 
Hình số 5 : Lược đồ mô tả lệnh if..else if ..else
Code thực thi được mô tả như sau :
Hình số 6 : Chương trình mô tả if..else if..else
3. Cấu trúc lệnh switch case
Khi có quá nhiều điều kiện để chọn thực hiện thì dùng câu lệnh if sẽ rất rối rắm và dài dòng, Các ngôn ngữ lập trình cấp cao đều cung cấp một dạng câu lệnh switch liệt kê các giá trị và chỉ thực hiện các giá trị thích hợp. C# cũng cung cấp câu lệnh nhảy switch có cú pháp sau:
Cú pháp :
switch (condition)
{
case <value>:
// one or more statements;
// Jump statement
default:
// default statements
}
Mô tả :
  • condition : Biểu thức điều kiện.
  • value : Giá trị kiểm tra của biểu thức điều kiện
  • defaule : Câu lệnh switch sẽ kiểm tra tất cả các giá trị tương ứng ở phía trên, nếu không có giá trị nào phù hợp với biểu thức điều kiện, thì chương trình sẽ thực thi các câu lệnh trực thuộc default.
  • statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.
Ví dụ :
Hình số 7 : Chương trình mô tả cấu trúc lệnh switch case
4. Cấu trúc lặp
C# cung cấp một bộ mở rộng các câu lệnh lặp, bao gồm các câu lệnh lặp for, whiledo... while. Ngoài ra ngôn ngữ C# còn bổ sung thêm một câu lệnh lặp foreach, lệnh này mới đối với người lập trình C/C++ nhưng khá thân thiện với người lập trình VB.
4.1 Cấu trúc while
Ý nghĩa của vòng lặp while là: “Trong khi điều kiện đúng thì thực hiện các công việc này”. Cú pháp sử dụng vòng lặp while như sau:
Cú pháp
initializer
while (condition)
{
// one or more statements;

// update
}
Biểu thức của vòng lặp while là điều kiện để các lệnh được thực hiện, biểu thức này bắt buộc phải trả về một giá trị kiểu bool là true/false. Nếu có nhiều câu lệnh cần được thực hiện trong vòng lặp while thì phải đặt các lệnh này trong khối lệnh.
Mô tả :
  • initializer : Biểu thức khởi tạo ban đầu
  • condition : Biểu thức điều kiện.
  • statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.
  • update : Cập nhật lại giá trị (Thông thường nó liên quan tới giá trị khởi tạo ban đầu), giá trị này chính là tác nhân làm thay đổi biểu thức điều kiện.
Ví dụ :
Viết chương trình in ra các số tự nhiên từ 0 đến 9. Sử dụng Activity Diagram trong modeling project trong bộ Visual Studio 2015 để mô tả luồng thực thi của bài toán.
Code chương trình.
Hình số 8 : Chương trình mô tả cấu trúc lệnh while
4.2 Cấu trúc do.. while
Đôi khi vòng lặp while không thoả mãn yêu cầu trong tình huống sau, chúng ta muốn chuyển ngữ nghĩa của while là “chạy trong khi điều kiện đúng” thành ngữ nghĩa khác như “làm điều này trong khi điều kiện vẫn còn đúng”. Nói cách khác thực hiện một hành động, và sau khi hành động được hoàn thành thì kiểm tra điều kiện. Cú pháp sử dụng vòng lặp do...while như sau:
Cú pháp
initializer
do
{
// one or more statements;
// update
} while (condition)
Mô tả :
  • initializer : Biểu thức khởi tạo ban đầu
  • condition : Biểu thức điều kiện.
  • statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.
  • update : Cập nhật lại giá trị (Thông thường nó liên quan tới giá trị khởi tạo ban đầu), giá trị này chính là tác nhân làm thay đổi biểu thức điều kiện.
Ở đây có sự khác biệt quan trọng giữa vòng lặp while và vòng lặp do...while là khi dùng
vòng lặp do...while thì tối thiểu sẽ có một lần các câu lệnh trong do...while được thực hiện. Điều này cũng dễ hiểu vì lần đầu tiên đi vào vòng lặp do...while thì điều kiện chưa được kiểm tra.
Ví dụ : Sử dụng câu lệnh do..while nhằm để in kết quả từ 0..9,tuy nhiên giá trị khởi đầu của Number = 11 trong khi điều kiện kiểm tra Number < 10, thì khối lệnh trong do.. while vẫn thực hiện in ra Number vì khối lệnh này được thực thi trước điều kiện của biểu thức logic được kiểm tra.
Hình số 9 : Chương trình mô tả cấu trúc lệnh do … while
4.3 Cấu trúc lệnh for
Không giống như cấu trúc while và do … whilefor là cấu trúc lặp thường sử dụng trong tình huống đã xác định trước số lần lặp trước khi vòng lặp thực hiện.
Cú pháp
for (initializer; condition; increment/decrement)
{
// one or more statements;
}
Mô tả :
  • initializer : Biến kiểm sát vòng lặp hữu hạn (thường hay dùng là kiểu nguyên như int, byte, short, long, char,...)
  • condition : Biểu thức logic để vòng lặp kết thúc (thực thi với số lần hữu hạn).
  • statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.
  • increment/decrement:  Biến kiểm soát vòng lặp phải bị biến đổi để tiến đến giá trị mong muốn tương ứng với việc làm cho biểu thức logic không thỏa mãn và vòng lặp sẽ dừng lại. Thông thường biến này là biến tăng hoặc giảm.
Ví dụ : Viết chương trình sử dụng cấu trúc for để in ra số nguyên từ 0 ..9.
Code thực hiện chương trình.
Hình số 10 : Chương trình mô tả cấu trúc lệnh for
4.4 Cấu trúc lệnh lặp foreach
Vòng lặp foreach cho phép tạo vòng lặp thông qua một tập hợp hay một mảng. Đây là một câu lệnh lặp mới không có trong ngôn ngữ C/C++. Câu lệnh foreach được mô tả như sau:
Cú pháp :
foreach (<datatype> <identifier> in <list>)
{
// one or more statements;
}
Mô tả :
  • datatype: Kiểu dữ liệu tập hợp
  • identifier: Tên truy cập thành phần.
  • list: Tập hợp dữ liệu cần duyệt.
Ví dụ : Viết chương trình sử dụng cấu trúc foreach để duyệt một mảng số nguyên.
Hình số 11 : Chương trình mô tả cấu trúc lệnh foreach
5. Cấu trúc lệnh nhảy
Khác với các cấu trúc khác của C#, các lệnh thuộc nhóm này thường dùng cho mục đích phá vỡ tính tuần tự, liên tục (Sequence, flow) đối với việc thi hành lệnh trong chương trình.Cấu trúc lệnh nhảy bao gồm có các lệnh continue, break, goto, return.
5.1 Lệnh nhảy Continue và Break
Khi đang thực hiện các lệnh trong vòng lặp, có yêu cầu như sau: không thực hiện các lệnh còn lại nữa mà thoát khỏi vòng lặp, hay không thực hiện các công việc còn lại của vòng lặp hiện tại mà nhảy qua vòng lặp tiếp theo. Để đáp ứng yêu cầu trên C# cung cấp hai lệnh nhảy là break và continue để thoát khỏi vòng lặp.
Break khi được sử dụng sẽ đưa chương trình thoát khỏi vòng lặp và tiếp tục thực hiện các lệnh tiếp ngay sau vòng lặp.
Continue ngừng thực hiện các công việc còn lại của vòng lặp hiện thời và quay về đầu vòng lặp để thực hiện bước lặp tiếp theo
Hai lệnh break và continue tạo ra nhiều điểm thoát và làm cho chương trình khó hiểu cũng như là khó duy trì. Do vậy phải cẩn trọng khi sử dụng các lệnh nhảy này.
Ví dụ
Chương trình mô phỏng hệ thống xử lý tín hiệu giao thông đơn giản. Tín hiệu mô phỏng là các ký tự chữ hoa hay số được nhập vào từ bàn phím, sử dụng hàm ReadLine của lớp Console để đọc một chuỗi ký tự từ bàn phím.
Thuật toán của chương trình khá đơn giản: Khi nhận tín hiệu ‘0’ có nghĩa là mọi việc bình thường, không cần phải làm bất cứ công việc gì cả, kể cả việc ghi lại các sự kiện. Trong chương trình này đơn giản nên các tín hiệu được nhập từ bàn phím, còn trong ứng dụng thật thì tín hiệu này sẽ được phát sinh theo các mẫu tin thời gian trong cơ sở dữ liệu. Khi nhận được tín hiệu thoát (mô phỏng bởi ký tự ‘T’) thì ghi lại tình trạng và kết thúc xử lý. Cuối cùng, bất cứ tín hiệu nào khác sẽ phát ra một thông báo, có thể là thông báo đến nhân viên cảnh sát chẳng hạn...Trường hợp tín hiệu là ‘X’ thì cũng sẽ phát ra một thông báo nhưng sau vòng lặp xử lý cũng kết thúc.
Code thực hiện chương trình.
Hình số 12 : Chương trình mô tả cấu trúc lệnh nhảy break và continue
 
5.2 Lệnh nhảy goto
Lệnh goto cho phép bạn có thể chuyển quyền thực thi chương trình đến 1 nhãn (label) đã được định nghĩa trong chương trình để thiếp tục thực thi các lệnh đặt ở phía sau nhãn này.
Cú pháp
goto <lable>;
Mô tả
lable là 1 nhãn định danh (identified) được tạo ra trong chương trình giống như việc ta tạo ra 1 điểm mốc để chương trình biết và chuyển đến đó, cách đặt tên nhãn cũng giống như đặt tên biến nhưng luôn phải bắt đầu bởi ký tự trong bảng chữ cái và kết thúc bở dấu “:” .
Hình minh họa dưới đây khi ứng dụng lệnh goto 
Hình số 13 : Chương trình mô tả cấu trúc lệnh nhảy goto
 
Ví dụ trên cho thấy lập trình viên có thể sử dụng goto để thực hiện cấu trúc lặp trong chương trình. Tuy nhiên điều này gây khó hiểu và có thể gây lỗi khi lập trình.
5.3 Lệnh nhảy return
Về cơ bản thì lệnh return cũng khá giống với lệnh goto, tuy nhiên nếu lệnh goto làm việc với 1 nhãn đã có trong chương trình, lệnh return chỉ làm việc với hàm, phương thức (function, method). Mục đích của việc sử dụng lệnh return là trả quyền điều khiển thực thi chương trình cho nơi đã gọi hàm có.
Hình ảnh minh họa việc sử dụng lệnh nhảy return.
Hình số 14 : Mô tả cấu trúc lệnh return
Ví dụ :
Viết chương trình hiển thị thông tin thời gian bắt đầu lớp học, với điều kiện số học sinh đến lớp > 0.
Hình số 15 : Chương trình mô tả cấu trúc lệnh return
vertical_align_top
share
Chat...