Cấu trúc điều khiển trong C: Làm chủ if-else, switch và vòng lặp for, while

banner

Tóm tắt kiến thức

Cấu trúc điều khiển là trái tim của mọi chương trình C, cho phép bạn tạo logic phức tạp, xử lý các điều kiện khác nhau, và thực hiện các tác vụ lặp đi lặp lại. Bài viết này sẽ giúp bạn làm chủ if-else, switch-case, và các loại vòng lặp.

Cấu trúc điều khiển là những câu lệnh cho phép chương trình thực hiện các hành động khác nhau dựa trên điều kiện hoặc lặp lại một khối mã nhiều lần. Đây là nền tảng để tạo ra các chương trình có logic phức tạp và tương tác với người dùng.

Quảng cáo giúp chúng tôi duy trì trang web này

Câu lệnh điều kiện IF

Cú pháp cơ bản

Cú pháp if
if (điều_kiện) {
    // Mã thực hiện khi điều kiện đúng
}

Ví dụ thực tế:

Kiểm tra tuổi
#include <stdio.h>

int main() {
    int age = 18;

    if (age >= 18) {
        printf("Bạn đã trưởng thành!\n");
    }

    return 0;
}
Điều kiện trong C

Trong C, điều kiện được đánh giá là true nếu giá trị khác 0, và false nếu giá trị bằng 0. Điều này có nghĩa là bạn có thể sử dụng bất kỳ biểu thức nào trả về số.

Cấu trúc IF-ELSE

Cú pháp if-else
if (điều_kiện) {
    // Mã thực hiện khi điều kiện đúng
} else {
    // Mã thực hiện khi điều kiện sai
}

Ví dụ thực tế:

Kiểm tra điểm số
#include <stdio.h>

int main() {
    int score = 85;

    if (score >= 60) {
        printf("Bạn đã đậu!\n");
    } else {
        printf("Bạn đã trượt!\n");
    }

    return 0;
}

Cấu trúc IF-ELSE IF (Nested Conditions)

Cú pháp if-else if
if (điều_kiện_1) {
    // Mã thực hiện khi điều kiện 1 đúng
} else if (điều_kiện_2) {
    // Mã thực hiện khi điều kiện 2 đúng
} else {
    // Mã thực hiện khi tất cả điều kiện sai
}

Ví dụ thực tế: Chương trình xếp loại điểm

Xếp loại điểm
#include <stdio.h>

int main() {
    int score;

    printf("Nhập điểm của bạn: ");
    scanf("%d", &score);

    if (score >= 90) {
        printf("Xếp loại: Xuất sắc\n");
    } else if (score >= 80) {
        printf("Xếp loại: Giỏi\n");
    } else if (score >= 70) {
        printf("Xếp loại: Khá\n");
    } else if (score >= 60) {
        printf("Xếp loại: Trung bình\n");
    } else {
        printf("Xếp loại: Yếu\n");
    }

    return 0;
}

Cấu trúc SWITCH-CASE

Switch-case cho phép kiểm tra nhiều giá trị của một biến một cách hiệu quả, đặc biệt hữu ích khi có nhiều điều kiện rời rạc.

Cú pháp switch-case
switch (biến) {
    case giá_trị_1:
        // Mã thực hiện
        break;
    case giá_trị_2:
        // Mã thực hiện
        break;
    default:
        // Mã thực hiện mặc định
        break;
}

Ví dụ thực tế: Menu chương trình

#include <stdio.h>

int main() {
    int choice;

    printf("=== MENU ===\n");
    printf("1. Tính tổng\n");
    printf("2. Tính hiệu\n");
    printf("3. Tính tích\n");
    printf("4. Tính thương\n");
    printf("Nhập lựa chọn (1-4): ");
    scanf("%d", &choice);

    switch(choice) {
        case 1:
            printf("Bạn đã chọn tính tổng\n");
            break;
        case 2:
            printf("Bạn đã chọn tính hiệu\n");
            break;
        case 3:
            printf("Bạn đã chọn tính tích\n");
            break;
        case 4:
            printf("Bạn đã chọn tính thương\n");
            break;
        default:
            printf("Lựa chọn không hợp lệ!\n");
            break;
    }

    return 0;
}

Toán tử 3 ngôi (Ternary Operator)

điều_kiện ? giá_trị_đúng : giá_trị_sai

Ví dụ:

#include <stdio.h>

int main() {
    int a = 10, b = 20;
    int max = (a > b) ? a : b;

    printf("Số lớn nhất: %d\n", max);

    return 0;
}

Vòng lặp WHILE

Vòng lặp while thực hiện một khối mã nhiều lần khi điều kiện còn đúng.

Cú pháp while
while (điều_kiện) {
    // Mã thực hiện
    // Cập nhật điều kiện
}

Ví dụ thực tế: Đếm từ 1 đến 10

Đếm với while
#include <stdio.h>

int main() {
    int i = 1;

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

    return 0;
}

Vòng lặp DO-WHILE

Vòng lặp do-while thực hiện ít nhất một lần trước khi kiểm tra điều kiện.

Cú pháp do-while
do {
    // Mã thực hiện
} while (điều_kiện);

Ví dụ thực tế: Nhập số dương

#include <stdio.h>

int main() {
    int number;

    do {
        printf("Nhập một số dương: ");
        scanf("%d", &number);

        if (number <= 0) {
            printf("Số phải lớn hơn 0!\n");
        }
    } while (number <= 0);

    printf("Bạn đã nhập số: %d\n", number);

    return 0;
}

Vòng lặp FOR

Vòng lặp for có cú pháp gọn gàng và thường được sử dụng khi biết trước số lần lặp.

for (khởi_tạo; điều_kiện; cập_nhật) {
    // Mã thực hiện
}

Ví dụ: In bảng cửu chương

#include <stdio.h>

int main() {
    int n;

    printf("Nhập số để in bảng cửu chương: ");
    scanf("%d", &n);

    printf("Bảng cửu chương %d:\n", n);
    for (int i = 1; i <= 10; i++) {
        printf("%d x %d = %d\n", n, i, n * i);
    }

    return 0;
}

Từ khóa BREAK và CONTINUE

BREAK: Thoát khỏi vòng lặp

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break; // Thoát khỏi vòng lặp khi i = 5
        }
        printf("%d ", i);
    }
    printf("\n"); // Kết quả: 1 2 3 4

    return 0;
}

CONTINUE: Bỏ qua lần lặp hiện tại

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue; // Bỏ qua số chẵn
        }
        printf("%d ", i);
    }
    printf("\n"); // Kết quả: 1 3 5 7 9

    return 0;
}

Phạm vi biến (Variable Scope)

Biến cục bộ (Local Variables)

#include <stdio.h>

int main() {
    int local_var = 10; // Biến cục bộ trong hàm main

    if (local_var > 5) {
        int block_var = 20; // Biến cục bộ trong khối if
        printf("Block variable: %d\n", block_var);
    }

    // printf("%d\n", block_var); // Lỗi! block_var không tồn tại ở đây

    return 0;
}

Biến toàn cục (Global Variables)

#include <stdio.h>

int global_var = 100; // Biến toàn cục

void function1() {
    printf("Trong function1: %d\n", global_var);
}

void function2() {
    int local_var = 50;
    printf("Trong function2: global=%d, local=%d\n", global_var, local_var);
}

int main() {
    function1();
    function2();
    printf("Trong main: %d\n", global_var);

    return 0;
}

Ví dụ thực hành

1. Kiểm tra số nguyên tố

#include <stdio.h>

int main() {
    int n, is_prime = 1;

    printf("Nhập số cần kiểm tra: ");
    scanf("%d", &n);

    if (n < 2) {
        is_prime = 0;
    } else {
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                is_prime = 0;
                break;
            }
        }
    }

    if (is_prime) {
        printf("%d là số nguyên tố\n", n);
    } else {
        printf("%d không phải số nguyên tố\n", n);
    }

    return 0;
}

2. Giải phương trình bậc 2

#include <stdio.h>
#include <math.h>

int main() {
    float a, b, c, delta, x1, x2;

    printf("Nhập hệ số a, b, c: ");
    scanf("%f %f %f", &a, &b, &c);

    if (a == 0) {
        printf("Đây không phải phương trình bậc 2!\n");
    } else {
        delta = b * b - 4 * a * c;

        if (delta > 0) {
            x1 = (-b + sqrt(delta)) / (2 * a);
            x2 = (-b - sqrt(delta)) / (2 * a);
            printf("Phương trình có 2 nghiệm: x1 = %.2f, x2 = %.2f\n", x1, x2);
        } else if (delta == 0) {
            x1 = -b / (2 * a);
            printf("Phương trình có nghiệm kép: x = %.2f\n", x1);
        } else {
            printf("Phương trình vô nghiệm\n");
        }
    }

    return 0;
}

3. Tính trung bình cộng các số chẵn từ 1 đến 1000

#include <stdio.h>

int main() {
    int sum = 0, count = 0;

    for (int i = 1; i <= 1000; i++) {
        if (i % 2 == 0) {
            sum += i;
            count++;
        }
    }

    float average = (float)sum / count;
    printf("Trung bình cộng các số chẵn từ 1 đến 1000: %.2f\n", average);

    return 0;
}

Tổng kết

Nắm vững các cấu trúc điều khiển là bước quan trọng để tạo ra các chương trình C có logic phức tạp và tương tác.

Lưu ý quan trọng

Luôn đảm bảo rằng điều kiện trong vòng lặp sẽ được cập nhật để tránh vòng lặp vô hạn. Đặc biệt chú ý với vòng lặp while và do-while.

Với những kiến thức này, bạn đã sẵn sàng để tạo ra các chương trình C phức tạp hơn và tiếp tục khám phá các khái niệm nâng cao như hàm, mảng và con trỏ.

Last updated on