Bài tập

Cú pháp và cách sử dụng vòng lặp for trong C tốt nhất

Huy Erick

Trong quá trình xây dựng một chương trình C, việc lặp lại mã nhiều lần là điều không thể tránh khỏi. Tuy vậy, không chỉ là sao chép và dán mã, vẫn còn những thao...

Trong quá trình xây dựng một chương trình C, việc lặp lại mã nhiều lần là điều không thể tránh khỏi. Tuy vậy, không chỉ là sao chép và dán mã, vẫn còn những thao tác khác cần được thực hiện. Đó là lý do tại sao ngôn ngữ C có một số chức năng để giúp việc lặp mã trở nên dễ dàng và phổ biến, đó là vòng lặp for trong C và vòng lặp while. Hãy cùng tìm hiểu sâu hơn về chúng nhé!

Tổng quan về vòng lặp for trong C

Vòng lặp for trong C là một đoạn mã sẽ được thực hiện miễn là các tham số đúng. Cấu trúc của vòng lặp for ( ) bao gồm một mệnh đề khởi tạo (ví dụ như count = 1) và sau đó tiếp tục lặp cho đến khi một điều kiện cụ thể được đáp ứng (ví dụ như count = 25). Trong quá trình lặp lại, một hành động nhất định sẽ được thực hiện, ví dụ như tăng giá trị của count lên 1.

Điều đặc biệt là hầu hết các nhà lập trình viên cần hiểu rõ logic của vòng lặp for này, vì chúng tương tự nhau ở hầu hết mọi ngôn ngữ. Vòng lặp for là một dạng cơ bản và thiết yếu trong logic lập trình, thường được sử dụng sau cú pháp if / then.

Ý nghĩa của việc sử dụng vòng lặp for trong C

Vòng lặp for được coi là một yếu tố cơ bản trong bất kỳ ngôn ngữ lập trình phức tạp nào. Thay vì lặp đi lặp lại mã của bạn, bạn có thể sử dụng vòng lặp để đơn giản hóa mã. Khi bạn có một vòng lặp for, bạn chỉ cần chỉnh sửa mã bên trong vòng lặp mà không cần chỉnh sửa nhiều bản sao của mã.

Ngoài ra, vòng lặp for trong C còn cho phép bạn:

  • Lặp lại các mục trong cơ sở dữ liệu
  • Quét qua đầu vào từ người dùng
  • Đồng thời đếm số lần lặp lại của một hàm

Tuy nhiên, không phải lúc nào bạn cũng cần sử dụng vòng lặp for cho các tác vụ này. Bạn cũng có thể sử dụng các loại vòng lặp khác như while hoặc do-while. Ngoài ra, còn có các hàm như switch mà bạn có thể sử dụng để tạo ra kết quả tương tự mà vòng lặp for có thể đạt được.

Cấu tạo của vòng lặp for trong C

for ([biểu_thức]) {     [câu_lệnh] }

Để hiểu rõ hơn về vòng lặp for trong C, bạn cần nghiên cứu và tìm hiểu kỹ cấu trúc bên trong nó. Ban đầu, có thể bạn sẽ thấy vòng lặp for rất phức tạp vì nó trừu tượng và có nhiều chuỗi lặp. Tuy nhiên, thực tế cho thấy vòng lặp này khá đơn giản.

Ví dụ sau sẽ giúp bạn thấy rõ hơn cách lặp qua một biến num thông qua một đoạn mã trong một số lần nhất định.

#include  int main() {     int i;     for (i = 1; i  11; ++i) {         printf("%d\n", i);     } }

Trong câu lệnh lặp, chúng ta cần khai báo một biến i kiểu int. Sau đó, vòng lặp được thể hiện như sau:

i = 1; i  11; ++i;

Trong thân vòng lặp, chúng ta yêu cầu chương trình in ra số nguyên bằng lệnh printf(). %d đề cập đến một trong nhiều kiểu dữ liệu C. Như vậy, vòng lặp này sẽ thực hiện 10 lần, in ra các số từ 1 đến 10. Vòng lặp kết thúc khi giá trị của i không nhỏ hơn 11. Cuối cùng, vòng lặp sẽ tiếp tục thực thi toàn bộ khối mã bên trong nó.

Bạn cũng có thể viết như sau:

int main() {     int i;     for (i = 1; i  11; i=i+2) {         printf("%d\n", i);     } }

Điều này sẽ tăng giá trị của biến i lên 2 ở mỗi lần lặp lại. Ngoài ra, bạn cũng có thể viết:

for (i = 0; i  11; ++i) {     printf("%d\n", i); }

Trong trường hợp này, giá trị của biến i sẽ bắt đầu từ 0 thay vì 1. Bạn cũng có thể viết:

for (i = 1; i = 25; ++i) {     printf("%d\n", i); }

Lúc này, các số sẽ tăng lên cho đến 25. Nếu không sử dụng vòng lặp for, mã để in ra các số từ 1 đến 10 sẽ có dạng như sau:

int main() {     printf("1\n");     printf("2\n");     printf("3\n");     printf("4\n");     printf("5\n");     printf("6\n");     printf("7\n");     printf("8\n");     printf("9\n");     printf("10\n"); }

Nếu sau đó bạn quyết định rằng bạn muốn có một khoảng trắng thay vì một dòng mới, bạn sẽ phải cập nhật tất cả các dòng. Nhưng với vòng lặp for, bạn chỉ cần cập nhật mã lặp lại một lần duy nhất.

Các thao tác của vòng lặp for trong C

Các thao tác của vòng lặp for trong C là:

  • Lặp lại thông qua các mục trong cơ sở dữ liệu
  • Quét qua đầu vào từ người dùng
  • Đồng thời đếm số lần lặp lại của một hàm

Trong mỗi chương trình, vòng lặp for cơ bản là sao chép mã. Mọi thứ có thể nằm bên trong khối mã, bởi khối mã đang được "sao chép và dán" nhiều lần theo hướng của vòng lặp for - miễn là đáp ứng điều kiện.

Hãy xem xét đoạn mã sau:

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

Mã này sẽ không in ra các số từ 1 đến 10 vì không có gì được in trong khối mã. Và nó sẽ chỉ in ra số 10. Biến count được ảnh hưởng bởi vòng lặp for 10 lần, nhưng nó chỉ được in ra bên ngoài của vòng lặp for. Trên thực tế, nếu bạn muốn lặp lại từ số 1 đến 10, bạn có thể viết như sau:

for(count = 1; count = 10; ++count) {     printf("%d\n",count); }

Không cần thiết phải sử dụng "i", nó có thể là bất kỳ biến int nào.

So sánh vòng lặp for trong C và vòng lặp while trong C

Như bạn đã biết, vòng lặp for không phải là loại vòng lặp duy nhất trong C. Ngoài vòng lặp for, còn có vòng lặp while cũng được sử dụng tương tự. Vòng lặp while có cấu trúc như sau:

int i; i = 0; while (i = 10) {     printf("%d\n",i);     i=i+1; }

Vòng lặp while cũng in ra các số từ 1 đến 10. Chúng ta cần đặt biến i thành 0 trước khi bắt đầu vòng lặp và điều kiện được truyền vào vòng lặp while giống như câu lệnh kiểm tra trong vòng lặp for. Bạn cũng cần tăng giá trị của i bên trong vòng lặp. Thực tế, vòng lặp while chỉ là một phiên bản ít trừu tượng hơn của vòng lặp for.

So sánh vòng lặp for trong C và cấu trúc Switch trong C

Vòng lặp for lặp lại một khối mã đã đặt. Trong khi đó, cấu trúc Switch lặp lại các khối mã rời rạc.

Ví dụ:

int i = 4; switch(i) {     Case 1:         printf("1\n");         break;     Case 2:         printf("2\n");         break;     Case 3:         printf("3\n");         break;     Case 4:         printf("4\n");         break; }

Đoạn mã trên sẽ thực hiện printf("4\n") và sau đó thoát khỏi hàm switch. Với vòng lặp for, mục đích là lặp lại cùng một khối mã. Trong khi đó, cấu trúc Switch mục tiêu là lặp lại giữa các khối mã hoàn toàn khác nhau. Thông thường, sẽ có ít mã hơn trong cấu trúc Switch. Vì điều này sẽ làm cho mã dễ bảo trì.

Mặc dù cấu trúc Switch thường được thảo luận cùng với các vòng lặp, nhưng nó là một thay thế phù hợp cho cú pháp if / then khó sử dụng.

Những lỗi phổ biến của vòng lặp for

Mặc dù vòng lặp for khá phức tạp, nhưng nó ngày càng trở nên phổ biến với nhiều người hơn. Một điều khó khăn đó là về mặt cú pháp. Do đó, nếu bạn hiểu mỗi câu lệnh trong vòng lặp for có ý nghĩa gì, bạn sẽ có thể hiểu một cách chính xác hơn. Dưới đây là một số lỗi cơ bản của vòng lặp for:

  • Quên dấu chấm phẩy: Nhầm lẫn giữa dấu chấm phẩy và dấu phẩy khi viết một vòng lặp for dưới dạng "for (i = 1, i = 10, ++i)".
  • Không đảm bảo các tham số có thể đạt được: Một số tình huống có thể dẫn đến việc các tham số không đạt được, làm cho vòng lặp trở thành đệ quy vô hạn.
  • Lỗi bài hàng rào: Dễ dàng làm cho một vòng lặp for chạy ít hơn hoặc nhiều hơn mong muốn do cách lặp lại của vòng lặp for.
  • Có quá nhiều trong vòng lặp for: Vòng lặp for chỉ nên chứa mã cần lặp lại, một lỗi phổ biến là bao bọc mã tiếp theo trong vòng lặp để lặp lại quá nhiều.
  • Dễ dàng cập nhật các biến bên trong vòng lặp for: Các biến bên ngoài phạm vi có thể bị thay đổi bên trong vòng lặp for.

Tổng kết

Như vậy là chúng ta đã tìm hiểu về vòng lặp for trong ngôn ngữ lập trình C. Bài viết này đã chia sẻ các thông tin về đặc điểm, cấu trúc và so sánh của vòng lặp for với các vòng lặp khác trong ngôn ngữ lập trình C. Hi vọng rằng các thông tin này sẽ bổ sung kiến thức cho bạn.

1