Cấu trúc điều kiện và vòng lặp trong Ngôn ngữ C

    Cấu trúc điều kiện và vòng lặp là những khái niệm cơ bản trong lập trình. Chúng cho phép lập trình viên kiểm soát luồng thực thi của chương trình và thực hiện các thao tác lặp lại nhiều lần. Trong bài viết này, chúng ta sẽ tìm hiểu về cấu trúc điều kiện và vòng lặp trong ngôn ngữ lập trình C và cung cấp một số ví dụ minh họa.

1. Câu điều kiện if-else:

    Được sử dụng để thực hiện một hành động nào đó nếu điều kiện đúng (true), và một hành động khác nếu điều kiện sai (false). Cú pháp của câu lệnh if-else như sau:

if (condition) {
  // code to execute if condition is true
} else {
  // code to execute if condition is false
}

    Dưới đây là một ví dụ minh họa cho câu lệnh if-else:

#include <stdio.h>

int main() {
  int num = 10;

  if (num > 0) {
    printf("So %d la so duong.", num);
  } else {
    printf("So %d la so am.", num);
  }

  return 0;
}

    Giải thích:

– Trong ví dụ này, chúng ta khai báo một biến số nguyên num và gán cho nó giá trị là 10.

– Sau đó, chúng ta sử dụng câu lệnh if-else để kiểm tra xem giá trị của biến num có lớn hơn 0 không.

– Nếu điều kiện là đúng (num > 0), chương trình sẽ in ra “So 10 la so duong.” bằng cách sử dụng hàm printf().

– Nếu điều kiện là sai (num <= 0), chương trình sẽ in ra “So 10 la so am.”.

– Cuối cùng, chương trình kết thúc và trả về giá trị 0.

    Kết quả của chương trình sẽ là:

So 10 la so duong.

    Như vậy, chương trình đã sử dụng câu lệnh if-else để kiểm tra giá trị của biến num và in ra kết quả tương ứng.

    Chúng ta hãy xem xét một ví dụ sử dụng câu lệnh điều kiện if-else if-else trong ngôn ngữ C:

#include <stdio.h>

int main() {
    int number = 15;

    if (number < 10) {
        printf("The number is less than 10.\n");
    } else if (number < 20) {
        printf("The number is between 10 and 20.\n");
    } else {
        printf("The number is greater than or equal to 20.\n");
    }

    return 0;
}

    Trong ví dụ này, chúng ta khai báo một biến nguyên number có giá trị bằng 15. Sau đó, chúng ta sử dụng câu lệnh điều kiện if-else if-else để kiểm tra giá trị của number.

    Đầu tiên, chúng ta kiểm tra xem number có nhỏ hơn 10 hay không bằng cách sử dụng câu lệnh if. Nếu điều này đúng, chúng ta in ra một thông báo cho biết number nhỏ hơn 10.

    Nếu number không nhỏ hơn 10, chúng ta tiếp tục kiểm tra xem number có nhỏ hơn 20 hay không bằng cách sử dụng câu lệnh else if. Nếu điều này đúng, chúng ta in ra một thông báo cho biết number nằm trong khoảng từ 10 đến 20.

    Nếu cả hai câu lệnh điều kiện trên đều sai, chúng ta sử dụng câu lệnh else để in ra một thông báo cho biết number lớn hơn hoặc bằng 20.

    Kết quả khi chạy chương trình sẽ là:

The number is between 10 and 20.

2. Vòng lặp for:

    Được sử dụng để lặp lại một khối lệnh một số lần nhất định. Cú pháp của vòng lặp for như sau:

for (initialization; condition; increment/decrement) {
  // code to execute repeatedly
}

    Trong đó:

– Initialization: là lệnh khởi tạo giá trị ban đầu cho biến sử dụng trong vòng lặp.

– Condition: là điều kiện để vòng lặp tiếp tục hoặc kết thúc.

– Increment/decrement: là lệnh tăng hoặc giảm giá trị của biến sử dụng trong vòng lặp.

    Dưới đây là một ví dụ minh họa cho vòng lặp for:

#include <stdio.h>

int main() {
  int i;

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

  return 0;
}

    Giải thích:

– Trong ví dụ này, chúng ta khai báo một biến số nguyên i.

– Sau đó, chúng ta sử dụng vòng lặp for để lặp lại việc in ra các số từ 1 đến 10 bằng cách sử dụng hàm printf().

– Vòng lặp for bắt đầu với giá trị ban đầu của biến i là 1 (initialization).

– Sau đó, vòng lặp sẽ tiếp tục nếu điều kiện i <= 10 là đúng (condition).

– Trong mỗi lần lặp lại, chúng ta sử dụng hàm printf() để in ra giá trị của biến i.

– Cuối cùng, chúng ta sử dụng lệnh i++ để tăng giá trị của biến i lên mỗi lần lặp (increment).

– Khi giá trị của biến i đạt đến 10, vòng lặp sẽ kết thúc và chương trình tiếp tục thực hiện các câu lệnh phía sau vòng lặp.

    Kết quả của chương trình sẽ là:

1 2 3 4 5 6 7 8 9 10

    Như vậy, chương trình đã sử dụng vòng lặp for để lặp lại việc in ra các số từ 1 đến 10.

3. Vòng lặp while:

    Cho phép lặp lại một khối mã cho đến khi một điều kiện đã cho là sai. Cú pháp của vòng lặp while như sau:

while (condition) {
    // block of code to be executed repeatedly
}

    Trong đó, condition là biểu thức điều kiện. Nếu giá trị của condition là true, khối mã bên trong vòng lặp while sẽ được lặp lại, ngược lại nếu condition là false thì vòng lặp sẽ kết thúc.

    Dưới đây là một ví dụ về việc sử dụng vòng lặp while để in ra các số từ 1 đến 10:

#include <stdio.h>

int main() {
    int i = 1;

    while (i <= 10) {
        printf("%d ", i);
        i++;
    }

    return 0;
}

    Trong ví dụ này, ta khởi tạo biến i với giá trị là 1. Sau đó, trong khi i vẫn nhỏ hơn hoặc bằng 10, khối mã bên trong vòng lặp while sẽ được lặp lại. Trong khối mã này, ta sử dụng hàm printf để in ra giá trị của biến i, và sau đó tăng giá trị của i lên 1 bằng phép toán i++. Sau khi i đạt giá trị 10, điều kiện của vòng lặp không còn đúng nữa và vòng lặp kết thúc.

    Kết quả khi chạy chương trình sẽ là:

1 2 3 4 5 6 7 8 9 10

    Như vậy, vòng lặp while cho phép ta lặp lại một khối mã cho đến khi một điều kiện đã cho là sai. Vòng lặp này rất hữu ích trong các tình huống mà số lần lặp lại không được xác định trước, hoặc phụ thuộc vào một điều kiện nào đó.

4. Vòng lặp do-while:

    Cũng giống như vòng lặp while, tuy nhiên, câu lệnh sẽ được thực hiện ít nhất một lần ngay cả khi điều kiện không đúng từ đầu.

    Cú pháp của vòng lặp do-while như sau:

do {
  // Thực hiện câu lệnh
} while (điều kiện);

    Ví dụ sau sẽ minh họa cách sử dụng vòng lặp do-while trong C. Chương trình sẽ in ra một danh sách số từ 1 đến 5 bằng cách sử dụng vòng lặp do-while:

#include <stdio.h>

int main() {
    int i = 1;
    do {
        printf("%d\n", i);
        i++;
    } while (i <= 5);
    return 0;
}

    Trong ví dụ này, chúng ta khởi tạo biến i bằng 1 và sử dụng vòng lặp do-while để in ra các số từ 1 đến 5. Câu lệnh printf được sử dụng để in ra giá trị của i trên mỗi vòng lặp. Sau đó, biến i sẽ được tăng lên một đơn vị và điều kiện i <= 5 sẽ được kiểm tra lại. Quá trình này sẽ tiếp tục cho đến khi i đạt giá trị 6 và điều kiện i <= 5 trở thành sai, lúc đó vòng lặp sẽ kết thúc. Kết quả của chương trình sẽ là:

1
2
3
4
5
– Trong ngôn ngữ lập trình C, breakcontinue là hai câu lệnh được sử dụng để kiểm soát luồng thực hiện của vòng lặp.
+ Câu lệnh break:

    Khi câu lệnh break được sử dụng bên trong một vòng lặp, nó sẽ dừng thực hiện vòng lặp đó ngay lập tức và tiếp tục thực hiện câu lệnh đứng sau vòng lặp.

    Ví dụ:

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

    Kết quả của chương trình sẽ là:

1 2 3 4

    Trong ví dụ này, vòng lặp for sẽ chạy từ 1 đến 10. Tuy nhiên, khi biến i đạt giá trị 5, câu lệnh break được thực thi và vòng lặp sẽ kết thúc ngay lập tức, các số tiếp theo không được in ra.

+ Câu lệnh continue:

    Khi câu lệnh continue được sử dụng bên trong một vòng lặp, nó sẽ bỏ qua phần còn lại của vòng lặp và tiếp tục vòng lặp với lần lặp tiếp theo.

    Ví dụ:

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

    Kết quả của chương trình sẽ là:

1 2 3 4 6 7 8 9 10

    Trong ví dụ này, vòng lặp for sẽ chạy từ 1 đến 10. Tuy nhiên, khi biến i đạt giá trị 5, câu lệnh continue được thực thi và các câu lệnh còn lại bên trong vòng lặp sẽ bị bỏ qua, vòng lặp sẽ tiếp tục với lần lặp tiếp theo. Do đó, số 5 sẽ không được in ra.

    Tổng kết:

    Câu lệnh breakcontinue là hai câu lệnh quan trọng giúp kiểm soát luồng thực hiện của vòng lặp. Khi sử dụng đúng cách, chúng có thể giúp cho chương trình của bạn chạy hiệu quả hơn. Tuy nhiên, nên sử dụng chúng một cách cẩn thận và đảm bảo rằng chúng không gây ra các lỗi không mong muốn trong chương trình của bạn.

5. Switch case:

    Cho phép kiểm tra một biến hoặc một biểu thức với nhiều giá trị khác nhau và thực hiện các hành động tương ứng với giá trị của biến hoặc biểu thức đó. Switch case thường được sử dụng khi cần xử lý nhiều trường hợp khác nhau, tùy thuộc vào giá trị của biến hay biểu thức.

    Dưới đây là một ví dụ về sử dụng switch case để hiển thị thông tin về các ngày trong tuần:

#include <stdio.h>

int main() {
   int day = 3;
   
   switch(day) {
      case 1 :
         printf("Monday");
         break;
      case 2 :
         printf("Tuesday");
         break;
      case 3 :
         printf("Wednesday");
         break;
      case 4 :
         printf("Thursday");
         break;
      case 5 :
         printf("Friday");
         break;
      case 6 :
         printf("Saturday");
         break;
      case 7 :
         printf("Sunday");
         break;
      default :
         printf("Invalid day");
   }

   return 0;
}

    Trong ví dụ này, chúng ta sử dụng biến day để lưu trữ giá trị ngày của tuần. Sử dụng câu lệnh switch case để kiểm tra giá trị của biến day, và hiển thị thông tin về ngày tương ứng.

    Câu lệnh switch case bắt đầu với từ khóa switch và theo sau đó là biến hoặc biểu thức cần kiểm tra. Trong ví dụ này, chúng ta kiểm tra giá trị của biến day.

    Sau đó, chúng ta sử dụng các câu lệnh case để xác định các trường hợp khác nhau của giá trị của biến day. Trong ví dụ này, chúng ta xác định 7 trường hợp tương ứng với 7 ngày trong tuần, từ case 1 cho đến case 7.

    Nếu giá trị của biến day trùng với giá trị của một trong các trường hợp, chương trình sẽ thực hiện câu lệnh trong khối lệnh tương ứng. Ví dụ, nếu giá trị của biến day là 3, chương trình sẽ thực hiện câu lệnh trong khối lệnh case 3, tức là in ra chuỗi “Wednesday”.

    Nếu giá trị của biến day không trùng với giá trị của bất kỳ trường hợp nào, chương trình sẽ thực hiện câu lệnh trong khối lệnh default.