Lập trình C: Vòng lặp for

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

I. Giới thiệu

Các loại vòng lặp khác nhau được dùng để thực hiện lặp đi lặp lại một khối lệnh nào đó liên tục nhiều lần. Vòng lặp sẽ giúp giảm công sức và sự nhàm chán cho Lập trình viên khi phải thực hiện lặp đi lặp lại câu lệnh hay khối lệnh nào đó nhiều lần.

Giả sử bạn muốn ra 1000 chuỗi "Lap trinh vien" thì thông thường bạn sẽ phải viết 1000 câu lệnh printf("\nLap trinh vien"); hoặc phải viết printf("\nLap trinh vien\nLap trinh vien\n..."); . Nhưng vòng lặp sẽ giúp bạn chỉ phải viết một câu lệnh duy nhất là printf("\nLap trinh vien"); .

II. Vòng lặp for

Vòng lặp for được gọi là vòng lặp xác định, vì ta có thể biết trước được số lần lặp của vòng lặp.

Cú pháp:

for (Khởi_tạo_biến_đếm; Điều_kiện; Thay_đổi_giá_trị_biến_đếm) {
    Khối_lệnh;
}

, trong đó:

- phần Khởi_tạo_biến_đếm thường dùng để khởi tạo giá trị cho biến đếm (hay còn gọi là biến chạy, biến điều khiển) của vòng lặp for

- phần Điều_kiện sẽ đưa ra điều kiện để thực hiện Khối_lệnh

- phần Thay_đổi_giá_trị_biến_đếm dùng để thay đổi (tăng hoặc giảm) giá trị biến đếm của vòng lặp for.

Các ví dụ:

1. Đoạn mã dưới đây in ra 100 chuỗi có nội dung: "Ngon ngu lap trinh C".

#include<stdio.h>

main(){
  int i;
  for(i=0; i<100; i++){ //i chy t 0 đến 99, tc là có 100 giá tr i tho mãn phn điu kin
    printf("\nNgon ngu lap trinh C");
  }

  return 0;
}

2. Còn đoạn mã sau in ra 1000 chuỗi dạng "Lap trinh vien thu 1", "Lap trinh vien thu 2", ..., "Lap trinh vien thu 1000", mỗi chuỗi trên một dòng.

#include<stdio.h>

main(){
  int i;
  for(i=0; i<1000; i++){
    printf("\nLap trinh vien thu %d", i+1);
  }

  return 0;
}

3. Đoạn mã sau in ra các số từ 1 đến 100:

#include<stdio.h>

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

  return 0;
}

4. Đoạn mã sau in ra các số từ 100 đến 1:

#include<stdio.h>

int main(){
  int i;
  for(i=100; i>=1; i--){
    printf("\n%d", i);
  }

  return 0;
}

5. Đoạn mã sau in ra các số lẻ từ 1 đến 100:

#include<stdio.h>

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

  return 0;
}

6. Đoạn mã sau in ra các số lẻ từ 100 đến 1:

#include<stdio.h>

int main(){
  int i;
  for(i=100; i>=1; i--){
    if(i%2!=0){
      printf("\n%d", i);
    }
  }

  return 0;
}

Bạn có thể bỏ đi tất cả các thành phần của vòng lặp for, có điều bạn phải giữ lại hai dấu ';' . Khi đó Điều_kiện sẽ là luôn luôn đúng vòng lặp for sẽ lặp vô hạn lần, tức là Khối_lệnh sẽ được thực hiện vô số lần.

Cú pháp của vòng lặp for trong tình huống này sẽ như sau:

for(;;){
    Khối_lệnh;
}

Đoạn mã dưới đây yêu cầu nhập vào một số nguyên n nằm trong khoảng từ 0 đến 1000 (0 < n < 1000).

#include<stdio.h>

int main(){
  int n;
  for(;;) {  //vòng lp không dng
    printf("\nNhap vao mot so nguyen n (0<n<1000): ");
    scanf("%d", &n);
    if(n>0 && n<1000){  //nếu giá tr nhp vào tho mãn điu kin
      break;  //thì thoát khi vòng lp
    }
  }
  printf("\nSau khi nhap, n = %d",n);

  return 0;
}

III. Vòng lặp for lồng

Nếu có hiện tượng vòng lặp nằm trong vòng lặp thì đây là loại vòng lặp lồng.

Vòng lặp for lồng có dạng:

for(Khởi_tạo_biến_đếm; Điều_kiện; Thay_đổi_giá_trị_biến_đếm){
  ...
  for(Khởi_tạo1; Điều_kiện1; Thay_đổi1){
    Khối_lệnh;
  }
}

Giả sử có hai vòng lặp for lồng nhau, vòng lặp for ngoài lặp N lần, vòng lặp for trong lặp M lần, thì mỗi lần lặp của vòng for ngoài thì vòng lặp for bên trong sẽ lặp M lần (Khối_lệnh sẽ được thực hiện M lần), tức là tổng số lần thực hiện Khối_lệnh nằm ở vòng lặp for lồng trong sẽ là N*M lần.

Ví dụ, hãy dùng vòng lặp để in ra màn hình tam giác có dạng như hình sau:

Tam giác vuông trái xuôi

Phân tích:

- Tam giác được tạo bởi các ký tự '*' đặt trên các hàng, trong đó có 5 hàng, hàng 1 có 1 ký tự '*', hàng 2 có 2 ký tự '*', .... Như vậy ở hàng i có i ký tự '*'.

- Sau khi in xong các ngôi sao trên một hàng thì xuống dòng để in tiếp.

Vậy ta có đoạn mã giải quyết vấn đề trên như sau:

#include<stdio.h>

main(){
  int i, j;
  for(i=1; i<=5; i++) {  //mi ln lp vòng for này s in ra 1 hàng (i đi din cho s hàng t 1 đến 5)
    for(j=0; j<i; j++) {  //vòng lp này s in ra s lượng ký t '*' trên mi hàng
      printf("*");
    }
    printf("\n");  //in xong các ngôi sao trên mt hàng thì xung dòng đ in tiếp
  }

  return 0;
}

Đoạn code dưới đây được cải tiến từ đoạn code trên, trong đó cho phép người dùng chủ động đưa vào số hàng của tam giác từ bàn phím (từ 2 đến 24).

#include<stdio.h>

main(){
  int i, j, n;
  do {
    printf("\nNhap vao so hang: "); //nhp s lượng hàng
    scanf("%d", &n);
  }while(n<2 || n>24); //t 2 đến 24 hàng
  for(i=1; i<=n; i++) {  //tam giác s có tng cng n hàng
    for(j=0; j<i; j++){
      printf("*");
    }
    printf("\n");
  }

  return 0;
}

Xem thêm

» Tiếp: Vòng lặp while
« Trước: switch-case
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!