Giới thiệu
Ngoài cấu trúc for đã được giới thiệu và hướng dẫn ở bài viết trước, C++ còn cung cấp cho chúng ta một số cấu trúc lặp khác. Bài viết này sẽ giới thiệu với các bạn 2 cấu trúc lặp thông dụng khác: while và do…while.
Tiền đề bài viết
Sau khi hoàn thành bài Vòng Lặp for Trong C++ :: www.stdio.vn/articles/read/62/vong-lap-for-trong-c, một người bạn của tôi mong muốn tìm hiểu thêm về các cấu trúc lặp khác. Do đó tôi viết bài này một phần giúp người bạn của tôi có nguồn tư liệu tham khảo, đồng thời giúp các bạn lập trình viên chuẩn bị tốt những kiến thức căn bản và cần thiết cho công việc.
Đối tượng hướng đến
Bài viết hướng đến đối tượng là lập trình viên MỚI BẮT ĐẦU, đang tìm hiểu về các cấu trúc lặp trong C++. Các đối tượng khác có thể xem bài ở mức độ tham khảo.
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 đó ta 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ờ đó ta 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, …). Tham khảo thêm bài viết Sử Dụng Mảng Trong C++ :: www.stdio.vn/articles/read/72/su-dung-mang-trong-c.
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ụ sau sẽ giúp các bạn dễ dàng hình dung cách làm việc của vòng lặp while:
- #include
- 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). Bạn 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 ta 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
- 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. Ta 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 ý
Ta có break và continue 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 ";"
nguồn http://www.stdio.vn/articles/read/77/while-va-dowhile-trong-c
0 nhận xét:
Đăng nhận xét