Xin chào mọi người!
Hôm nay trời lạnh nên tay mình cứng, bấm bàn phím không được nên up blog trễ (đang che giấu sự lười biếng). Thời tiết mùa này thật khó chịu
Không lòng vòng nữa, hôm nay mình xin giới thiệu về cấu trúc vòng lặp trong C++. Cũng giống như cấu trúc rẽ nhánh, cấu trúc vòng lặp cũng là một trong những thành phần quan trọng của một ngôn ngữ lập trình Vòng lặp là hành động lặp lại một khối lệnh với số lần hữu hạn. Ở trong C++ hỗ trợ sẵn 3 loại vòng lặp là while, do while và for.
1. Cấu trúc while:
Cú pháp của cấu trúc while như sau:
1
2
3
4
| while (<điều kiện>) { // Khối lệnh khi điều kiện đúng } |
Nhìn có vẻ giống cấu trúc rẽ nhánh if nhỉ? Nếu đọc bằng ngôn ngữ tự nhiên sẽ là: Trong khi <điều kiện> còn đúng (true), câu lệnh trong ngoặc vẫn còn thực hiện, vòng lặp sẽ kết thúc khi <điều kiện> sai (false)
Ví dụ:
1
2
3
4
5
6
| int i = 0; while (i < 3) { cout << "Day la dong thu " << i << endl; ++i; } |
Kết quả sẽ là:
1
2
3
| Day la dong thu 0 Day la dong thu 1 Day la dong thu 2 |
2. Cấu trúc do while:
Cú pháp của cấu trúc do while:
1
2
3
4
5
| do { // Khối lệnh } while (<điều kiện>); |
Nhìn sơ thì có vẻ giống cấu trúc while nhỉ? Về cơ bản 2 cấu trúc này tương đối giống nhau, chỉ khác nhau duy nhất ở 1 điểm mà chúng ta sẽ xét ví dụ để hiểu thêm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| // While int i; i = 0; while (i < 3) { cout << "Day la dong thu " << i << endl; ++i; } cout << endl; // Do while i = 0; do { cout << "Day la dong thu " << i << endl; ++i; } while (i < 3); |
Kết quả sẽ là:
1
2
3
4
5
6
7
8
| Day la dong thu 0 Day la dong thu 1 Day la dong thu 2 Day la dong thu 0 Day la dong thu 1 Day la dong thu 2 Day la dong thu 3 |
Cùng là 1 khối lệnh, nhưng có vẻ 2 vòng lặp nó ra 2 kết quả khác nhau. Vậy là sao?
Ta cần phân biệt rõ sự khác biệt giữa 2 vòng lặp trên:
- while kiểm tra điều kiện TRƯỚC, nếu điều kiện đúng sẽ thực hiện vòng lặp
- do while thực hiện vòng lặp TRƯỚC xong rồi kiểm tra điều kiện, nếu điều kiện sai sẽ thoát vòng lặp
Tuỳ theo mục đích sử dụng thì ta nên lựa chọn while hay do while cho đúng nhé
3. Cấu trúc for:
Cú pháp của cấu trúc for:
1
2
3
4
| for (<khởi tạo>; <điều kiện>; <bước nhảy>) { // Khối lệnh } |
Với:
- <khởi tạo>: gồm các lệnh khởi động. Thường đây là nơi mình khai báo biến chạy
- <điều kiện>: kiểm tra điều kiện, nếu đúng sẽ thực hiện khối lệnh trong vòng lặp
- <bước nhảy>: đây là phần khác biệt giữa for so với while và do while. <bước nhảy> sẽ thực thi sau khi khối lệnh bên dưới thực hiện xong
Nói theo ngôn ngữ tự nhiên: Bắt đầu thực hiện việc <khởi tạo>, ta sẽ kiểm tra <điều kiện> của vòng lặp, nếu đúng sẽ chạy khối lệnh dưới, và sau đó sẽ thực hiện <bước nhảy>. Để nói rõ hơn về vấn đề này, mình đưa ra ví dụ sau:
1
2
3
4
| for ( int i = 0; i < 3; ++i) { cout << "Day la dong thu " << i << endl; } |
Có thể thấy ở ví dụ trên so với ví dụ vòng lặp while là không khác nhau, nhưng nhìn ví dụ dưới trông có vẻ “thoáng đãng” hơn nhỉ Cấu trúcfor rất mạnh và có thể sử dụng rất linh động trong nhiều tình huống khi viết chương trình. Ở ví dụ trên, <bước nhảy> đóng vai trò là 1 biến chạy, và cũng là trường hợp thông dụng nhất của vòng lặp for.
4. Break và continue
Ta cùng xét ví dụ sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // Break for ( int i = 0; i < 4; ++i) { if (i == 2) break ; cout << "Day la vong lap thu " << i << endl; } cout << endl; // Continue for ( int i = 0; i < 4; ++i) { if (i == 2) continue ; cout << "Day la vong lap thu " << i << endl; } |
Kết quả:
1
2
3
4
5
6
| Day la vong lap thu 0 Day la vong lap thu 1 Day la vong lap thu 0 Day la vong lap thu 1 Day la vong lap thu 3 |
Có thể nhìn rõ chức năng của break và continue ở ví dụ trên rồi nhỉ break thoát ra khỏi vòng lặp gần nhất ngay lập tức, trong khicontinue sẽ bỏ qua khối lệnh phía bên dưới và quay lên thực hiện vòng lặp tiếp theo. Trong thực tế, cả 2 lệnh thường sử dụng chung với if để kiểm tra khi nào cần phải thực hiện các lệnh đó
Lưu ý:
Vòng lặp có thể rơi vào trạng thái “lặp vĩnh viễn” (cũng thường gọi là bị “loop”) khi với mọi khả năng xảy ra đều thoả mãn điều kiện vòng lặp. Để hiểu rõ vấn đề này, ta cùng xét ví dụ sau:
1
2
3
4
5
6
| int i = 0; while (i >= 0) { cout << "Day la vong lap thu " << i << endl; ++i; } |
Vòng lặp của mình trong ví dụ trên thật “ngớ ngẩn” nhỉ Nếu chạy đoạn code trên thì nó sẽ xổ 1 tràng đầy màn hình console và không bao giờ ngừng lại. Lý do vì biến i luôn thoả mãn điều kiện cho dù nó có tăng 1 đơn vị. Ví dụ trên đơn giản nhưng trong thực tế sẽ có những vòng lặp phức tạp hơn, việc kiểm tra điều kiện dừng là 1 vấn đề quan trọng để không bị “loop”.
Một mẹo nhỏ trong việc sử dụng vòng lặp là kiểm tra điều kiện ngay trong thân vòng lặp. Điều này giúp cho vòng lặp trở nên linh động hơn, không bị ràng buộc bởi thứ tự “kiểm tra – chạy”. Lý thuyết quá nhỉ ta cùng đến với ví dụ dưới đây để hiểu rõ hơn nhé
1
2
3
4
5
6
7
8
9
10
11
12
13
| int i = 0; while ( true ) { cout << "Day la dong thu " << i << endl; if (i >= 3) break ; ++i; } int i = 0; for (;;) { cout << "Day la dong thu " << i << endl; if (i >=3) break ; ++i; } |
Ở ví dụ trên, ta đã đưa điều kiện vào trong thân vòng lặp bằng 1 dòng if – break. Mẹo đơn giản nhưng rất hữu ích phải không nào
Trên đây là bài viết về cấu trúc vòng lặp trong C++. Cảm ơn các bạn đã theo dõi!
Bình Luận:
0 bình luận: