Trong bài viết ngày hôm nay mình sẽ giới thiệu cho các bạn về một cấu trúc rất quan trọng đó là vòng lặp, trong bài viết này sẽ là vòng lặp for. Vậy cấu trúc lặp là gì ? Có bao nhiêu kiểu cấu trúc lặp, chúng ta cùng tìm hiểu trong ngày hôm nay nhé !
Cấu trúc lặp là gì ?
Cấu trúc lặp trong một ngôn ngữ lập trình được sử dụng để lặp đi lặp lại một hoặc nhiều thao tác, câu lệnh với một số lần biết trước hoặc không biết trước, thậm chí là vô hạn. Các cấu trúc lặp trong bài học này mình sẽ gọi chung là Vòng lặp để các bạn có thể dễ tiếp cận hơn.
Vòng lặp for trong C#
Loại cấu trúc lặp đầu tiên mà mình giới thiệu cho các bạn là vòng lặp for. Vòng lặp for được sử dụng khi mà ta lặp với một số lần biết trước. Cấu trúc của vòng lặp này được sử dụng như sau:
for([khởi tạo biến tạm]; [điều kiện lặp]; [cập nhật giá trị biến tạm]) { [câu lệnh]; }
Lưu ý: Các giá trị tại ô mang cặp ngoặc []
là có thể có hoặc có thể không có.
Cách hoạt động của vòng lặp for này như sau:
Mình sẽ giải thích một chút về cách hoạt động của vòng lặp này. Vòng lặp for sẽ bắt đầu qua các bước đầu tiên vòng lặp sẽ khởi tạo biến lặp sau đó, kiểm tra điều kiện lặp. Nếu điều kiện lặp này đúng thì chương trình sẽ bắt đầu lần lặp và thực hiện các câu lệnh bên trong nó. Sau khi thực hiện xong mà không gặp câu lệnh break
(câu lệnh này sẽ được trình bày ở những bài học sau) thì chương trình sẽ thực thi câu lệnh ở ô [cập nhật giá trị biến tạm]
. Sau đó quay lại kiểm tra điều kiện lặp, rồi lại tiếp tục các công việc ở trên, cho đến khi điều kiện lặp sai thì vòng lặp mới thoát ra.
Ví dụ cho dễ hiểu về vòng lặp này như sau:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { for (int i = 0; i < 5; ++i) { Console.WriteLine(i); } Console.ReadKey(); // dừng màn hình } } }
Chương trình này cho ra kết quả:
0 1 2 3 4
Như chúng ta có thể thấy ở chương trình này. Mình đã khai báo một vòng lặp for, giá trị biến tạm này bắt đầu bằng 0
và sẽ lặp cho tới khi điều kiện i < 5
sai. Sau mỗi lần lặp mình sử dụng toán tử một ngôi ++
mà mình đã trình bày trong bài Toán tử trong C# để mỗi lần lặp sẽ tăng giá trị biến i
lên 1
đơn vị. Sau mỗi lần lặp mình sử dụng một câu lệnh xuất ra màn hình để in ra giá trị của biến i
. Các bạn có thể thấy biến i
khi in ra luôn thỏa mãn điều kiện i < 5
.
Ngoài ra đối với vòng lặp này các bạn có thể làm cho nó lặp ngược lại như sau:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { for (int i = 10; i > 0; i--) { Console.WriteLine(i); } Console.ReadKey(); // dừng màn hình } } }
Chương trình này cho ra kết quả:
10 9 8 7 6 5 4 3 2 1
Ở chương trình mình lặp ngược lại này mình đã khai báo một biến i
có giá trị là 10
với điều kiện lặp là i > 0
và thao tác cập nhật biến tạm này là i--
. Vậy nên sau mỗi lần lặp mà điều kiện lặp đúng, giá trị của biến i
sẽ nhỏ hơn 1
đơn vị, các bạn có thể thấy trên output rằng giá trị của i
in ra sau mỗi lần lặp đều thỏa mãn điều kiện i > 0
.
Lưu ý: Các giá trị được khai báo trên vòng lặp for sẽ không còn tác dụng khi thoát ra khỏi vòng lặp. Để dễ hiểu hơn mình có một ví dụ sau đây:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { for(int i = 5; i > 0; i--) { Console.WriteLine(i); } Console.WriteLine(i); Console.ReadKey(); // dừng màn hình } } }
Chương trình này khi chạy sẽ cho ra lỗi như sau:
main.cs(13,31): error CS0103: The name `i' does not exist in the current context
Lỗi này nói rằng ở dòng thứ 13, không có giá trị biến nào mang tên i
chứng tỏ rằng sau khi thoát ra khỏi vòng lặp chương trình đã giải phòng bộ nhớ cho biến i
nên biến i
không còn tồn tại sau vòng lặp.
Để khắc phục được điều này phải bạn khai báo ra biến i
trước đó như sau:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { int i; for(i = 5; i > 0; i--) { Console.WriteLine(i); } Console.WriteLine(); Console.WriteLine(i); Console.ReadKey(); // dừng màn hình } } }
Ở chương trình này cho ra kết quả sau:
5 4 3 2 1 0
Chương trình này sau khi thoát ra khỏi vòng lặp thì biến i
của chúng ta vẫn tồn tại vì chúng ta đã khai báo biến i
trước đó, đồng thời sử dụng chính biến i
đó để thực hiện các thao tác trong vòng lặp dẫn đến biến i
lúc này bị thay đổi giá trị. Mình đã in ra phân cách một dòng để các bạn dễ nhìn hơn giá trị của biến i
sau khi thoát ra khỏi vòng lặp.
Biến i
sau khi thoát ra khỏi vòng lặp có giá trị bằng 0
tại vì trong lúc lặp điều kiện lặp là i > 0
nên sau khi cập nhật giá trị của biến i
mang giá trị là 0
đã không thỏa mãn điều kiện của vòng lặp nên vòng lặp thoát ra để lại giá trị của biến i
là 0
.
Vòng lặp vô tận với for
Để vòng lặp for trở nên vô tận chúng ta chỉ cần bỏ trống điều kiện lặp hoặc làm cho điều kiện lặp của vòng lặp này luôn đúng.
Ví dụ chương trình với vòng lặp vô tận này như sau:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { for(int i = 0; ; ++i) { Console.WriteLine(i); } Console.ReadKey(); // dừng màn hình } } }
Hoặc một ví dụ khác:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { for(int i = 0; true; ++i) { Console.WriteLine(i); } Console.ReadKey(); // dừng màn hình } } }
Cả hai chương trình này sẽ liên tục xuất ra các giá trị tăng dần thêm 1 đơn vị không ngừng. Các bạn có thể chạy thử chương trình này. Để có thể thoát ra khỏi chương trình bạn có thể đóng tác vụ chương trình bắt nút thoát (nút Close trên góc cửa sổ) hoặc ấn phím Ctrl+C trong chương trình.
Tổng kết
Như vậy là trong bài học ngày hôm này mình đã hướng dẫn các bạn cấu trúc lặp đầu tiên trong C# đó là vòng lặp for. Ở bài học tiếp theo mình sẽ giới thiệu cho các bạn 2 cấu trúc lặp còn lại đó chính là vòng lặp while và do-while. Cảm ơn bạn đã đọc bài viết này. Hãy tiếp tục đồng hành cùng Lập trình không khó trong các bài viết tiếp theo nhé !
(ngoài ra các bạn có thể thử qua với các bài tập sau đây)
Để lại một bình luận