Search…

While và Do...While trong C++

06/09/20203 min read
Bài viết giới thiệu hai cấu trúc lặp quen thuộc trong C++ while và do… while.

Cấu trúc while

Vòng lặp while có cấu trúc như sau:

while (condition)
{
	// Code while condition is true
}

Các biểu thức Initialization statement và Update statement không xuất hiện trong cấu trúc while. Do đó cần hiện thực chúng trước và trong vòng lặp để chương trình không bị lặp vô hạn.

Đoạn code trong thân vòng lặp (body of loop) có thể chứa các biểu thức tính toán logic, các cấu trúc điều kiện (if … else, switch … case) hoặc cả các cấu trúc lặp khác. Nhờ đó có thể xây dựng được các chu trình lặp lồng nhau (sử dụng để thao tác với mảng nhiều chiều, …).

Nguyên tắc hoạt động

Giống như cấu trúc for, quá trình lặp trong while sẽ diễn ra liên tục cho đến khi biểu thức Condition trả về giá trị false.

Một điều cần lưu ý là biểu thức Condition tồn tại trước khi quá trình lặp bắt đầu. Do đó vòng lặp có thể sẽ không được thực hiện lần nào, tuỳ thuộc vào việc khởi tạo giá trị cho các biến có liên quan.

Sơ đồ hoạt động của cấu trúc while như sau:

Vòng lặp while thường được sử dụng trong các trường hợp không biết rõ số lần lặp. Ví dụ:

#include <iostream>
using namespace std;

int main()
{
	int s = 0;
	int i = 0;

	while(s < 100)
	{
		i++;
		s += i;
	}

	s = 0;
	i = 0;

	while(i++, s < 100)
		s += i;

	s = 0;
	i = 0;

	while(1)
	{
		i++;
		s += i;

		if(s >= 100)
			break;
	}

	return 0;
}

Ba đoạn code trên đây thực hiện chính xác một công việc giống nhau (chỉ quan tâm đến kết quả, không quan tâm đến giá trị của các biến trong suốt quá trình). Có thể lồng ghép nhiều biểu thức vào Condition, phân cách với nhau bởi dấu , như ở đoạn code thứ hai. Khi đó biểu thức sau dấu , cuối cùng chính là điều kiện chính để dừng vòng lặp.

Cấu trúc do…while

Vòng lặp do … while có cấu trúc như sau:

do
{
	// Code
} while (Condition);

do … while có đầy đủ các tính chất mà một vòng lặp cần phải có. Tuy nhiên, khác với cấu trúc while, biểu thức điều kiện của do … while được đặt phía sau đoạn code, do đó vòng lặp sẽ được thực hiện ít nhất một lần, bất kể các giá trị đầu vào có thoả biểu thức điều kiện hay không.

Nguyên tắc hoạt động

Sơ đồ hoạt động của cấu trúc do … while như sau:

Cấu trúc do … while thường được sử dụng để kiểm tra các giá trị đầu vào (thường là các giá trị được nhập từ bàn phím).

Chương trình sau kiểm tra dữ liệu nhập vào có thể là một tháng trong năm hay không:

int main()
{
	int month;
	do
	{
		cin >> month;
	} while (month < 1 || month > 12);

	return 0;
}

Ngoài ra có thể tận dụng do … while để làm một số công việc "thú vị", chẳng hạn như sau:

#include <iostream>
using namespace std;

int main()
{
	int n;

	do
	{
		cin >> n;
	} while(n <= 0);

	int i;
	int s = 0;

	do
	{
		cin >> i;
	} while(s += i, --n);

	return 0;
}

Chương trình trên thực hiện việc tính tổng n số nguyên nhập vào từ bàn phím mà không cần tạo mảng để lưu trữ các số mà thực hiện cộng trực tiếp sau từng lần nhập.

Một số lưu ý

breakcontinue cũng có thể được sử dụng trong hai cấu trúc lặp này, break sẽ thoát khỏi vòng lặp ở mức thấp nhất (vòng lặp trong cùng nếu có nhiều vòng lặp lồng nhau).

Tương tự như trong cấu trúc for, sau dòng lệnh while không có dấu ";".

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024