Vòng lặp While trong C#.
Khóa học lập trình C# căn bản
Danh sách bài học
Vòng lặp While trong C#.
Dẫn nhập
Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về CẤU TRÚC VÒNG LẶP TRONG C#. Ở bài này chúng ta sẽ cùng đi sâu vào chi tiết cách sử dụng vòng lặp while 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 CƠ BẢN MỘT CHƯƠNG TRÌNH TRONG C# console application
- BIẾN và KIỂU DỮ LIỆU trong C#
- TOÁN TỬ TRONG C#
- CÂU ĐIỀU KIỆN TRONG C#
- CẤU TRÚC CƠ BẢN VÒNG LẶP
- VÒNG LẶP FOR 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 của một vòng lặp while trong C#
- Các ví dụ sử dụng while trong C#
Cấu trúc của một vòng lặp while trong C#
Cú pháp:
while (<Điều kiện lặp>)
{
// khối lệnh lặp lại
}
- Điều kiện lặp là một biểu thức logic bắt buộc phải có với kết quả trả về bắt buộc là true hoặc false.
- Từ khóa while biểu thị đây là một vòng lặp while. Các câu lệnh trong khối lệnh sẽ được lặp lại đến khi không còn thỏa mãn điều kiện lặp sẽ kết thúc vòng lặp while.
- Tiến trình:
- Đầu tiên trình biên dịch sẽ đi vào dòng while (<Điều kiện lặp>). Kiểm tra điều kiện lặp có thỏa mãn hay không. Nếu kết quả là true thì sẽ đi vào bên trong thực hiện khối code. Khi gặp ký tự } sẽ quay lên kiểm tra điều kiện lặp và tiếp tục thực hiện khối code. Quá trình chỉ kết thúc khi điều kiện lặp là false.
- Điều kiện lặp luôn bằng true thì vòng lặp while sẽ trở thành vòng lặp vô tận.
- Điều kiện lặp luôn bằng false thì vòng lặp sẽ không được thực thi.
Các ví dụ sử dụng while trong C#
Chúng ta cùng thử một ví dụ đầy đủ về các phần của vòng lặp while nhé.
- Ví dụ: In ra một ma trận số
static void Main(string[] args)
{
int countLoop = 0;
int countLoopTime = 0;
int valueNum = 10;
int loopTime = 5;
// Vẽ từ trên xuống LoopTime lần
while (countLoopTime < loopTime)
{
// reset lại biến countLoop về 0 để viết lại từ đầu
countLoop = 0;
// vẽ từ trái qua valueNum lần
while (countLoop < valueNum)
{
// in ra giá trị của countLoop trong 8 vị trí
Console.Write("{0,8}", countLoop);
// tăng giá trị của biến countLoop lên một đơn vị
countLoop++;
}
// Mỗi khi hoàn thành một vòng lặp nhỏ thì lại xuống dòng chuẩn vị vẽ lần tiếp theo
Console.WriteLine();
// tăng giá trị countLoopTime lên một đơn vị
countLoopTime++;
}
Console.ReadKey();
}
- Kết quả một ma trận số xuất hiện trên màn hình
- Chúng ta cũng có thể in ra ma trận số với giá trị ngẫu nhiên bằng cách sử dụng lớp Random. (Phần sử dụng lớp Random một cách chi tiết sẽ được hướng dẫn ở bài RANDOM TRONG C#)
static void Main(string[] args)
{
int countLoop = 0;
int countLoopTime = 0;
int valueNum = 10;
int loopTime = 5;
int minRandomValue = 0;
int maxRandomValue = 100;
Random rand = new Random();
// Vẽ từ trên xuống LoopTime lần
while (countLoopTime < loopTime)
{
// reset lại biến countLoop về 0 để viết lại từ đầu
countLoop = 0;
// vẽ từ trái qua valueNum lần
while (countLoop < valueNum)
{
// giá trị sinh ngẫu nhiên trong khoảng [minRandomValue . . maxRandomValue - 1]
int showValue = rand.Next(minRandomValue, maxRandomValue);
// in ra giá trị của showValue trong 8 vị trí
Console.Write("{0,8}", showValue);
// tăng giá trị của biến countLoop lên một đơn vị
countLoop++;
}
// Mỗi khi hoàn thành một vòng lặp nhỏ thì lại xuống dòng chuẩn vị vẽ lần tiếp theo
Console.WriteLine();
// tăng giá trị countLoopTime lên một đơn vị
countLoopTime++;
}
Console.ReadKey();
}
- Kết quả một ma trận số hoàn toàn ngẫu nhiên được xuất ra màn hình
- Chúng ta cũng có thể vẽ một hình chữ nhật rỗng NxM với vòng lặp while.
static void Main(string[] args)
{
int Vertical = 20;
int Horizontal = 50;
char drawChar = '*';
char insideChar = ' ';
int countLoopVertical = 0;
int countLoopHorizontal = 0;
// Vẽ từ trên xuống
while (countLoopVertical < Vertical)
{
// khởi tạo lại giá trị countLoopHorizontal = 0 mỗi lần lặp mới
countLoopHorizontal = 0;
// Vẽ từ trái sang
while (countLoopHorizontal < Horizontal)
{
/*
* Nếu đang ở tọa độ là cạnh trên hoặc dưới i % (N - 1) == 0
* hoặc đang ở cạnh trái hoặc phải (j % (M - 1) == 0)
* mà không nằm ở cạnh trên hoặc dưới (i % (N - 1) != 0)
* ((i % (N - 1) != 0) && (j % (M - 1) == 0))
* thì vẽ ra ký tự của hình chữ nhật
* ngược lại vẽ ra ký tự không thuộc hình chữ nhật
*/
if (countLoopVertical % (Vertical - 1) == 0 || ((countLoopVertical % (Vertical - 1) != 0) && (countLoopHorizontal % (Horizontal - 1) == 0)))
{
Console.Write(drawChar); // lúc này là ký tự *
}
else
{
Console.Write(insideChar); // lúc này là ký tự rỗng ' '
}
// tăng giá trị của countLoopHorizontal lên 1 đơn vị
countLoopHorizontal++;
}
// mỗi lần vẽ xong một hàng thì xuống dòng
Console.WriteLine();
// tăng giá trị của countLoopVertical lên 1 đơn vị
countLoopVertical++;
}
Console.ReadKey();
}
- Kết quả sẽ thấy một hình chữ nhật rỗng chiều ngang 20 chiều dài 50 được vẽ lên màn hình.
- Ta có thể thay đổi giá trị của M, N, drawChar và insideChar để có những hình chữ nhật màu mè cùng kích thước khác nhau.
- Bạn hãy thử thay đổi màu sắc hoặc vẽ hình chữ nhật ở bất cứ đâu trên màn hình console nhé. Thử vẽ hình chữ nhật đặc hay hình tam giác, hình tròn cũng là một thử thách thú vị đấy. Chúc các bạn thành công.
Kết luận
Qua bài này chúng ta đã nắm được cách sử dụng vòng lặp while. Một cấu trúc rất mạnh mẽ và tần xuất sử dụng cực kỳ nhiều trong lập trình. Những đặc điểm của vòng lặp while. Cùng những điều cần lưu ý.
Bài sau chúng ta sẽ đi sâu hơn vào cách sử dụng của CẤU TRÚC DO WHILE TRONG C#.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Vòng lặp While trong C#. dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Nội dung bài viết
Khóa học
Bạn mới bắt đầu học lập trình? Bạn đang muốn học thêm ngôn ngữ lập trình mới? C# là lựa chọn hoàn hảo để đáp ứng các nhu cầu trên.
Ngôn ngữ C# là một ngôn ngữ mới, cấu trúc rõ ràng, dễ hiểu và dễ học. C# thừa hưởng những ưu việt từ ngôn ngữ Java, C, C++ cũng như khắc phục được những hạn chế của các ngôn ngữ này. C# là ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, được xây dựng dựa trên C++ và Java.
Khoá học lần này sẽ mang đến toàn bộ những kiến thức cơ bản về C#. Chào mừng các bạn đã đến với khoá học LẬP TRÌNH C# CƠ BẢN của Kteam.
Đánh giá
nội dung rất chi tiết,đôi khi cũng hơi khó hiểu,ad nên cho thêm những bài tập để có thể biết những bài học được áp dụng như thế nào vào thực tế
using System;
namespace HocC_Coban {
internal class Program {
static void Main(string[] args) {
Console.Write("Nhap chieu cao tam giác: ");
int height = int.Parse(Console.ReadLine());
int row = 1;
while (row <= height) {
int space = height - row;
for (int i = 0; i < space; i++) {
Console.Write(" ");
}
if (row == height) {
for (int col = 0; col < row; col++) {
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("@ ");
}
} else {
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("@ ");
for (int col = 2; col < row; col++) {
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("* ");
}
if (row > 1) {
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("@ ");
}
}
Console.WriteLine();
row++;
}
Console.ReadKey();
}
}
}
//Từ trên xuống i = 0, n = 10
//Từ trái sang phải j = 0, m = 20
int i = 0, j = 0, n = 10, m= 20;
while(i < n)
{
j = 0;
while (j < m)
{
if ((i % (n - 1) == 0) || (i % (n - 1) != 0) && (j % (m - 1) == 0))
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
j++;
}
Console.WriteLine();
i++;
}
Console.ReadKey();
//ve hinh trai tim:
int Horizental = 12; //nhap chieu ngang cua trai tim
int Vertical = Horizental/2 + 1; //chieu doc
int countLoopX = 0; //count tu tren xuong
int countLoopY = 0; //count tu trai qua phai
string blank = " "; //khoang trong
char outer = '@'; //ve duong line
while (countLoopX < Vertical)//dua vao vong lap tu tren xuong theo bien X
{
countLoopY = 0;
while (countLoopY < Horizental) //dua vao vong lap tu trai qua phai theo bien Y
{
switch (countLoopX) //dua vao switch de xet cac truong hop: X = 0, X = 1, va cac X con lai
{
case 0:
if (countLoopY % (Horizental - 1) == 0 || countLoopY == (Horizental - 1) / 2)
//neu X = 0 (hang thu nhat), thi xet Y = 0, Y= hori-1, va Y o giua la khoang trang
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(blank);
}
else
{ //nguoc lai, nhung vi tri khac la ve hinh
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(outer);
}
break;
case 1: //tuong tu cho X =1
if(countLoopY % (Horizental - 1) == 0 || countLoopY == (Horizental - 1) / 2)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(outer);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(blank);
}
break;
default: //tuong tu cho X con lai
if (countLoopY == countLoopX -1 || countLoopY == (Horizental - countLoopX))
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(outer);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(blank);
}
break;
}
countLoopY++;
}
countLoopX++;
Console.WriteLine();
}
Console.ReadKey();
hinhTraiTim:
int hangDoc = 7;
int hangNgang = 9;
char traiTim = 'o';
char khung = '.';
int demHangDoc = 0;
int demHangNgang = 0;
while (demHangDoc < hangDoc) /*ve tu tren xuong*/
{
demHangNgang = 0;
while (demHangNgang < hangNgang) /*hang 1*/
{
if (demHangNgang == 1 || demHangNgang == 2 || demHangNgang == 6 || demHangNgang == 7)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.WriteLine();
demHangDoc++;
demHangNgang = 0;
while (demHangNgang < hangNgang) /*hang 2*/
{
if (demHangNgang == 0 || demHangNgang == 3 || demHangNgang == 5 || demHangNgang == 8)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.WriteLine();
demHangDoc++;
demHangNgang = 0;
while (demHangNgang < hangNgang)
{
if (demHangNgang == 0 || demHangNgang == 4 || demHangNgang == 8)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.WriteLine();
demHangDoc++;
demHangNgang = 0;
while (demHangNgang < hangNgang)
{
if (demHangNgang == 1 || demHangNgang == 7)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.WriteLine();
demHangDoc++;
demHangNgang = 0;
while (demHangNgang < hangNgang)
{
if (demHangNgang == 2 || demHangNgang == 6)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.WriteLine();
demHangDoc++;
demHangNgang = 0;
while (demHangNgang < hangNgang)
{
if (demHangNgang == 3 || demHangNgang == 5)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.WriteLine();
demHangDoc++;
demHangNgang = 0;
while (demHangNgang < hangNgang)
{
if (demHangNgang == 4)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(traiTim);
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(khung);
}
demHangNgang++;
}
Console.ReadKey();
}
goto hinhTraiTim;