Khám phá cấu trúc lặp for trong ngôn ngữ lập trình C/C++

Hãy tưởng tượng bạn muốn hiển thị các số nguyên từ 1 đến 5 trên màn hình. Cảm giác dễ dàng phải không? Chỉ cần đưa các số từ 1 đến 5 vào chuỗi định dạng của hàm printf và bạn đã xong. Nhưng hãy cân nhắc xem liệu bạn có đủ kiên nhẫn để thực hiện công việc tương tự với các số lớn như 100, 1.000, 1 triệu, thậm chí 1 tỷ không? Bạn sẽ nhận ra rằng, thực ra đối với yêu cầu như vậy, chúng ta chỉ cần làm một việc duy nhất là hiển thị một số nguyên, nhưng lặp đi lặp lại nhiều lần. Và để dễ dàng trong việc thực hiện các công việc lặp lại nhiều lần, ngôn ngữ C/C++ đã cung cấp cho chúng ta cấu trúc lặp for.

1. Cấu trúc lặp for

  • Cú pháp:
for (; <điều kiện>; ) {
    ;
}

Trong đó:

  • Lệnh khởi gán thường là lệnh gán giá trị cho biến đếm.

  • Điều kiện ở đây là điều kiện duy trì vòng lặp.

  • Bước nhảy thường là các phép tăng/giảm giá trị của biến.

  • Khối lệnh là các lệnh mà ta muốn chương trình thực hiện lặp lại nhiều lần.

  • Cách thức hoạt động của cấu trúc for: Đầu tiên, chương trình thực hiện lệnh khởi gán, sau đó kiểm tra điều kiện, nếu điều kiện thoả thì chương trình thực hiện các lệnh trong khối lệnh, rồi đến bước nhảy là kết thúc một lần lặp. Sau đó lại tiếp tục kiểm tra điều kiện và thực hiện tương tự như thế cho đến khi điều kiện không còn đúng thì thoát khỏi vòng lặp.

Hãy xem ví dụ sau để hiểu rõ hơn về cấu trúc lặp for:

for (int i = 1; i <= 10; i++) { 
    printf("%d ", i); 
}

Lưu ý: Đây là cách viết trong C++, đối với C, bạn không được khai báo biến i trong lệnh khởi gán mà phải khai báo ngoài vòng lặp for. Bây giờ hãy thử viết chương trình để xuất ra các số nguyên từ 10 đến 1 bằng cách sử dụng vòng lặp for.

  • Nếu bạn đã biết vòng lặp for trong Pascal, thì người ta thường nói dùng vòng lặp for khi lặp với số lần biết trước. Nhưng for trong C/C++ hoạt động theo cơ chế là lặp và kiểm tra điều kiện nên nếu bạn đã biết Pascal thì hãy bỏ qua tư tưởng đó về for của C/C++, vì nó linh hoạt hơn for trong Pascal.

Ngoài ra, các phần khởi gán, điều kiện, bước nhảy, mỗi phần có thể gồm nhiều câu lệnh nhưng phải viết cách nhau bởi dấu phẩy. Ví dụ đoạn code sau thực hiện xuất ra màn hình 2 số a, b, sau mỗi lần lặp tăng a thêm 1, tăng b thêm 2 và lặp cho đến khi tổng của chúng lớn hơn 10 thì dừng.

for (int a = 0, b = 0; a + b <= 10; a++, b += 2) {
    printf("a = %d, b = %dn", a, b);
}

Ví dụ này cũng minh hoạ cho việc vòng lặp for linh hoạt hơn việc chỉ lặp với số lần biết trước như Pascal.

Thêm một lưu ý nữa, là các phần khởi gán, điều kiện, bước nhảy trong for có thể để trống nhưng 2 dấu chấm phẩy huyền thoại trong nó thì phải luôn có. Cùng với đoạn mã trên, ta có thể viết như sau.

int a = 0, b = 0; 
for ( ; a + b <= 10; a++, b += 2) {
    printf("a = %d, b = %dn", a, b);
}

Luôn phải đủ 2 dấu chấm phẩy.

2. Câu lệnh break và continue trong vòng lặp

Hai lệnh này thường được sử dụng trong các vòng lặp, không chỉ trong vòng lặp for mà còn dùng trong các vòng lặp while, do-while.

a) Lệnh break: có chức năng thoát khỏi vòng lặp, tất nhiên các lệnh phía sau break sẽ bị bỏ qua. break thường đi kèm với if trong vòng lặp để dừng vòng lặp theo điều kiện mà bạn muốn. Xét lại ví dụ in ra số nguyên từ 1 đến 10, ta có thể viết lại đoạn mã với lệnh break như sau:

for (int i = 1; ; i++) {
    if (i > 10) break; 
    printf("%dn", i); 
}

Vòng lặp này không xác định điều kiện dừng trong for, nhưng khi i tăng đến 11 thì lệnh break sẽ được thực hiện và chương trình sẽ thoát khỏi vòng lặp. Lệnh printf phía sau không được thực hiện nên số 11 không xuất ra màn hình.

b) Lệnh continue: có chức năng bỏ qua lượt lặp hiện tại, thực hiện lượt lặp kế tiếp. Tất cả những lệnh sau continue cũng bị bỏ qua. Ví dụ yêu cầu in ra số nguyên từ 1 đến 10 nhưng không in ra số 5, ta có thể viết đoạn code như sau:

for (int i = 1; ; i++) {
    if (i == 5) continue; 
    printf("%dn", i); 
}

Khi i = 5, lệnh continue được thực hiện, lệnh xuất phía sau bị bỏ qua nên số 5 không được xuất ra màn hình.

Hãy thực hành và tìm hiểu thêm về cấu trúc lặp for để bạn có thể sử dụng nó linh hoạt trong lập trình. Cảm ơn bạn đã đọc bài viết này!

FEATURED TOPIC

hihi