Bài 7.3: Bài tập thực hành vòng lặp do-while trong C++

Bài 7.3: Bài tập thực hành vòng lặp do-while trong C++
Chào mừng các bạn đến với một bài viết mới trong series blog về C++ của FullhouseDev! Sau khi đã làm quen với vòng lặp while
và for
- những công cụ mạnh mẽ giúp tự động hóa các tác vụ lặp đi lặp lại, hôm nay chúng ta sẽ khám phá một "người anh em" khác cũng cực kỳ hữu ích: vòng lặp do-while
.
Nếu while
và for
kiểm tra điều kiện trước khi thực thi thân vòng lặp, thì do-while
có một đặc điểm độc đáo: nó luôn thực thi thân vòng lặp ít nhất một lần trước khi kiểm tra điều kiện lặp. Điều này tạo ra những tình huống sử dụng đặc thù mà các vòng lặp khác không linh hoạt bằng.
Hãy cùng đi sâu vào cú pháp, cách hoạt động và những ứng dụng thú vị của do-while
nhé!
Cú pháp của vòng lặp do-while
Cú pháp của do-while
khá đơn giản và dễ nhớ:
do {
// Các câu lệnh sẽ được thực thi
// ít nhất một lần
} while (điều_kiện); // Điều kiện kiểm tra sau khi thực thi khối lệnh
- Từ khóa
do
đánh dấu điểm bắt đầu của vòng lặp. - Khối mã bên trong cặp ngoặc nhọn
{}
chính là thân (body) của vòng lặp. Các câu lệnh trong đây sẽ được thực thi mỗi lần lặp. - Từ khóa
while
theo sau khối lệnh, kèm theođiều_kiện
trong cặp ngoặc đơn()
. Điều kiện này là một biểu thức logic, trả vềtrue
hoặcfalse
. - ĐẶC BIỆT quan trọng: Hãy chú ý đến dấu chấm phẩy
;
ở cuối câu lệnhwhile (điều_kiện);
. Đây là điều khác biệt so với vòng lặpwhile
thông thường!
Vòng lặp do-while
hoạt động như thế nào?
Quy trình hoạt động của do-while
rất rõ ràng:
- Chương trình thực thi tất cả các câu lệnh bên trong khối
{}
(thân vòng lặp). - Sau khi thực thi xong khối lệnh lần đầu tiên, chương trình sẽ kiểm tra
điều_kiện
trong câu lệnhwhile()
. - Nếu
điều_kiện
làtrue
, chương trình quay trở lại bước 1 và tiếp tục thực thi lại khối lệnh. - Quá trình này lặp đi lặp lại cho đến khi
điều_kiện
trở thànhfalse
. - Khi
điều_kiện
làfalse
, vòng lặp kết thúc, và chương trình tiếp tục thực thi các câu lệnh ngay sau dấu;
củawhile()
.
Điểm mấu chốt cần ghi nhớ: Thân vòng lặp do-while
luôn được thực thi ít nhất một lần, bất kể điều kiện ban đầu là đúng hay sai.
Khi nào nên sử dụng do-while
?
Như đã nói, do-while
tỏa sáng trong các tình huống mà bạn chắc chắn cần thực hiện một hành động ít nhất một lần trước khi quyết định có lặp lại hay không. Tình huống phổ biến nhất chính là:
- Nhập liệu từ người dùng và xác thực (validation): Bạn cần yêu cầu người dùng nhập dữ liệu (hành động 1 lần). Sau đó, bạn kiểm tra xem dữ liệu đó có hợp lệ không. Nếu không hợp lệ, bạn cần yêu cầu họ nhập lại (lặp lại hành động). Vòng lặp
do-while
rất phù hợp cho việc này vì bạn luôn cần nhập liệu lần đầu.
Hãy cùng xem một vài ví dụ minh họa để thấy rõ sức mạnh và tính ứng dụng của do-while
.
Các ví dụ minh họa vòng lặp do-while
trong C++
Ví dụ 1: Chắc chắn chạy ít nhất một lần
Hãy xem ví dụ này để thấy rằng do-while
sẽ chạy dù điều kiện ban đầu đã sai.
#include <iostream>
int main() {
using namespace std;
int dem = 0;
cout << "Bat dau vong lap do-while..." << endl;
do {
cout << "Day la lan chay thu: " << (dem + 1) << endl;
dem++;
} while (dem < 0);
cout << "Vong lap ket thuc. Tong so lan chay: " << dem << endl;
return 0;
}
Output:
Bat dau vong lap do-while...
Day la lan chay thu: 1
Vong lap ket thuc. Tong so lan chay: 1
Ví dụ 2: Nhập số dương từ người dùng
Đây là một ứng dụng kinh điển của do-while
: đảm bảo người dùng nhập vào một giá trị hợp lệ.
#include <iostream>
int main() {
using namespace std;
int n;
do {
cout << "Vui long nhap mot so nguyen DUONG: ";
cin >> n;
if (n <= 0) {
cout << "So ban vua nhap khong phai so duong. Hay nhap lai!" << endl;
}
} while (n <= 0);
cout << "Ban da nhap thanh cong so nguyen duong: " << n << endl;
return 0;
}
Output (ví dụ với nhập -5, rồi 0, rồi 10):
Vui long nhap mot so nguyen DUONG: -5
So ban vua nhap khong phai so duong. Hay nhap lai!
Vui long nhap mot so nguyen DUONG: 0
So ban vua nhap khong phai so duong. Hay nhap lai!
Vui long nhap mot so nguyen DUONG: 10
Ban da nhap thanh cong so nguyen duong: 10
Ví dụ 3: Xây dựng menu đơn giản
do-while
rất phù hợp để tạo ra một menu tương tác, nơi chương trình hiển thị các tùy chọn và lặp lại cho đến khi người dùng chọn tùy chọn thoát.
#include <iostream>
int main() {
using namespace std;
char chon;
do {
cout << "\n--- MENU DON GIAN ---" << endl;
cout << "1. Chuc nang A" << endl;
cout << "2. Chuc nang B" << endl;
cout << "3. Thoat" << endl;
cout << "Moi ban chon (1, 2 hoac 3): ";
cin >> chon;
switch (chon) {
case '1':
cout << "Ban da chon Chuc nang A." << endl;
break;
case '2':
cout << "Ban da chon Chuc nang B." << endl;
break;
case '3':
cout << "Dang thoat chuong trinh..." << endl;
break;
default:
cout << "Lua chon khong hop le. Vui long chon lai." << endl;
break;
}
} while (chon != '3');
cout << "Chuong trinh da ket thuc." << endl;
return 0;
}
Output (ví dụ với nhập 'a', rồi '1', rồi '3'):
--- MENU DON GIAN ---
1. Chuc nang A
2. Chuc nang B
3. Thoat
Moi ban chon (1, 2 hoac 3): a
Lua chon khong hop le. Vui long chon lai.
--- MENU DON GIAN ---
1. Chuc nang A
2. Chuc nang B
3. Thoat
Moi ban chon (1, 2 hoac 3): 1
Ban da chon Chuc nang A.
--- MENU DON GIAN ---
1. Chuc nang A
2. Chuc nang B
3. Thoat
Moi ban chon (1, 2 hoac 3): 3
Dang thoat chuong trinh...
Chuong trinh da ket thuc.
Ví dụ 4: Tính tổng các số nhập vào cho đến khi gặp giá trị dừng
Một ví dụ khác cho thấy sự hữu ích khi bạn cần xử lý giá trị nhập vào ngay lập tức trước khi quyết định có dừng lại dựa trên chính giá trị đó hay không.
#include <iostream>
int main() {
using namespace std;
int n;
int s = 0;
cout << "Nhap cac so nguyen de tinh tong. Nhap 0 de dung lai." << endl;
do {
cout << "Nhap mot so: ";
cin >> n;
s += n;
} while (n != 0);
cout << "Tong cac so da nhap (bao gom ca so 0 cuoi cung) la: " << s << endl;
return 0;
}
Output (ví dụ với nhập 5, rồi 10, rồi -2, rồi 0):
Nhap cac so nguyen de tinh tong. Nhap 0 de dung lai.
Nhap mot so: 5
Nhap mot so: 10
Nhap mot so: -2
Nhap mot so: 0
Tong cac so da nhap (bao gom ca so 0 cuoi cung) la: 13
Ví dụ 5: Lặp lại một số lần nhất định (Dù for
hay while
thường dùng hơn)
Mặc dù for
hoặc while
thường được ưu tiên khi bạn biết trước số lần lặp, bạn vẫn có thể sử dụng do-while
cho mục đích này để hiểu rõ hơn cách nó hoạt động.
#include <iostream>
int main() {
using namespace std;
int i = 0;
int n = 5;
cout << "Bat dau vong lap do-while de chay 5 lan..." << endl;
do {
cout << "Lan lap thu: " << (i + 1) << endl;
i++;
} while (i < n);
cout << "Da hoan thanh " << i << " lan lap." << endl;
return 0;
}
Output:
Bat dau vong lap do-while de chay 5 lan...
Lan lap thu: 1
Lan lap thu: 2
Lan lap thu: 3
Lan lap thu: 4
Lan lap thu: 5
Da hoan thanh 5 lan lap.
Lưu ý quan trọng khi sử dụng do-while
- Đừng quên dấu chấm phẩy
;
sau biểu thứcwhile (điều_kiện);
. Đây là lỗi cú pháp phổ biến nhất vớido-while
. - Giống như các vòng lặp khác, hãy đảm bảo rằng điều kiện trong
while
cuối cùng có thể trở thànhfalse
. Nếu không, bạn sẽ tạo ra một vòng lặp vô hạn (infinite loop), khiến chương trình chạy mãi không dừng. Hãy chắc chắn có một câu lệnh nào đó bên trong thân vòng lặp làm thay đổi các biến được sử dụng trongđiều_kiện
sao cho cuối cùng nó dẫn đến kết thúc vòng lặp.
So sánh ngắn gọn với while
Điểm khác biệt cốt lõi và duy nhất giữa do-while
và while
là thời điểm kiểm tra điều kiện:
while
: Kiểm tra điều kiện trước khi thực thi thân vòng lặp. Thân vòng lặp có thể không bao giờ được thực thi nếu điều kiện ban đầu làfalse
.do-while
: Thực thi thân vòng lặp trước, sau đó mới kiểm tra điều kiện. Thân vòng lặp luôn được thực thi ít nhất một lần, ngay cả khi điều kiện ban đầu làfalse
.
Lựa chọn giữa while
và do-while
phụ thuộc vào logic cụ thể của bài toán bạn đang giải quyết. Nếu bạn chắc chắn cần thực hiện hành động ít nhất một lần, do-while
là lựa chọn rõ ràng và thanh lịch nhất. Trong hầu hết các trường hợp khác, while
hoặc for
có thể phù hợp hơn.
Comments