if else , switch case trong C

Trong cuộc sống có rất nhiêu điều chúng ta phải lựa chọn, ví như lựa chọn giữa người ta yêu và người yêu ta, chọn nghe theo con tim hay là lý trí,… Nếu hôm nay được nghỉ thì sẽ ở nhà học hay là đi chơi, nếu có người yêu thì ngồi code hay đi mua kem cùng ăn ngoài cổng trường, vân vân và mây mây. Và lập trình là đi từ cuộc sống, phục vụ cuộc sống nên nó cũng phải có những thứ như vậy. Bài này chúng ta sẽ tìm hiểu về các lệnh để phục vụ những lựa chọn như vậy, các lệnh này gọi là lệnh rẽ nhánh.

Bạn đang đọc: if else, switch case trong C

Trước khi tìm hiểu và khám phá về cấu trúc những lệnh rẽ nhánh, tất cả chúng ta nên tìm hiểu và khám phá một chút ít về lệnh đơn và khối lệnh .

1. Lệnh và khối lệnh

Lệnh là một tác vụ, biểu thức, hàm, cấu trúc điều khiển… nào đó đơn lẻ.

Ví dụ :

x = x + 2; // đây là một lệnh đơn 
printf("Day la mot lenh\n");  // đây cũng là một lệnh đơn.

Khối lệnh: là một dãy các câu lệnh được bọc bởi cặp dấu { }.

Ví dụ :

{ //dau khoi
    a = 78;
    b = 26;
    printf("Tong %d + %d = %d", a, b, a+b);
} //cuoi khoi

Khi muốn thực hiện một dãy các câu lệnh liên tiếp nào đó thì chúng ta dùng khối lệnh, tức là đặt chúng vào cặp dấu {} và viết thụt vào 1 tab cho dễ nhìn.

Lưu ý: Khi một lệnh được đặt trong cặp ngoặc {} thì cũng được coi là khối lệnh.

2. Lệnh if và if else

2.1 Lệnh if

Lệnh if dịch ra có nghĩa là nếu cái này thì làm cái kia. Ví dụ nếu bạn có người yêu thì chắc bạn sẽ đi chơi cùng ẻm chứ không ngồi xem bài của mình …

Cú pháp của lệnh if

Lệnh if
Cú pháp, lưu đồ và cách hoạt động của lệnh if

Chú ý:
Không đặt dấu chấm phẩy sau câu lệnh if. Ví dụ: if (a > 0);
Khi đặt dấu chấm phẩy ở lệnh if thì coi như kết thúc lệnh if tại đó nên khối lệnh sẽ không được thực hiện dù điều kiện đúng hay sai.

Ví dụ: Ban đầu bạn có 100 (tỷ), hãy nhập vào một số tiền. Nếu số tiền là số dương thì cộng thêm vào ví của bạn ngược lại thì không làm gì cả. In ra số tiền bạn có sau khi nhập.

#include 

int main()
{     
    int x = 100; // So tien ban dau ban co
    int y; // so tien nhap moi

    printf("Nhap so tien = ");
    scanf("%d", &y);

    if( y > 0 ) // neu so tien nhap vao lon hon 0 thi cong vao vi
    {
        x = x + y;
    }

    printf("So tien sau = %d \n", x);

    return 0;
}

Thật đơn thuần. Bạn chạy chương trình và xem cách nó hoạt động giải trí nhé .

2.2 Lệnh if – else

Lệnh if-else là dạng đủ của lệnh if. if là nếu, else là ngược lại .

Cú pháp lệnh if – else

Lệnh if else
Cú pháp, lưu đồ và cách hoạt động lệnh if – else

Ví dụ: Tương tự ví dụ trên. Ban đầu bạn có 100 (tỷ), vợ bạn có 50 (tỷ), hãy nhập vào một số tiền. Nếu số tiền là số dương thì cộng thêm vào ví của bạn một nửa, của vợ bạn một nửa, ngược lại thì chỉ cộng vào ví của bạn (bản chất là trừ đi vì số tiền có thể âm hoặc bằng 0). In ra số tiền bạn và vợ bạn có sau khi nhập.

#include 

int main()
{
    float x = 100, y = 50; // So tien ban va vo ban co
    float z; // so tien nhap moi

    printf("Nhap so tien = ");
    scanf("%f", &z);

    if( z > 0 ) // neu so tien nhap vao lon hon 0 thi cong vao vi
    {
        x = x + z / 2;
        y = y + z / 2;
    } else 
    {
        x = x + z;
    }

    printf("So tien cua ban = %.2f \n", x);
    printf("So tien cua vo ban = %.2f \n", y);

    return 0;
}

Khá là đơn thuần. Bạn thử chạy và xem hiệu quả nhé. ( Ở bài này mình dùng kiểu float vì có phép chia nên số tiền hoàn toàn có thể lẻ ) .

2.3 Lệnh if else lồng nhau và if-else-if

Trong nhiều trường hợp, tất cả chúng ta cần phải giải quyết và xử lý nhiều điều kiện kèm theo chứ không chỉ có 1 điều kiện kèm theo. Do vậy tất cả chúng ta hoàn toàn có thể lồng nhiều câu lệnh if else vào với nhau .

Ví dụ: Công ty đang triển khai một loại cân sao cho cân theo cặp phục vụ cho cân các cặp tình nhân, và thông báo ra bạn trai nặng hơn hay bạn gái nặng hơn hay hai bạn nặng bằng nhau.

Như vậy tất cả chúng ta cần giải quyết và xử lý 3 trường hợp chứ không phải chỉ đơn thuần là nếu và ngược lại nữa. Chúng ta có code như sau :

#include 

int main()
{
    float a; // can nang cua ban trai
    float b; // can nang cua ban gai

    printf("Nhap vao can nang ban trai va ban gai: \n");
    scanf("%f%f", &a, &b);

    if( a > b )
    {
        printf("Ban trai nang hon!\n");
    } else 
    {
        if( a < b)
        {
            printf("Ban gai nang hon\n");
        } else
        {
            printf("Hai ban nang bang nhau\n");
        }
    }

    return 0;
}

Ok. Vậy là tất cả chúng ta sử dụng được chúng lồng vào nhau. Tuy nhiên cách này sẽ làm code hơi rối và tốn giấy mực. Bạn hoàn toàn có thể sử dụng lệnh if-else-if như sau :

#include 

int main()
{
    float a; // can nang cua ban trai
    float b; // can nang cua ban gai

    printf("Nhap vao can nang ban trai va ban gai: \n");
    scanf("%f%f", &a, &b);

    if( a > b )
    {
        printf("Ban trai nang hon!\n");
    } else if( a < b)
    {
        printf("Ban gai nang hon\n");
    } else
    {
        printf("Hai ban nang bang nhau\n");
    }

    return 0;
}

Cách code và ý nghĩa cũng rất rõ ràng, dễ hiểu thôi :).

2.4 Toán tử điều kiện kèm theo – If else rút gọn

Chúng ta có một toán tử rút gọn của lệnh if else như sau :

điều kiện ? biểu thứ 1: biểu thức 2;

Nếu điều kiện kèm theo đúng thì biểu thức 1 được thực thi và giá trị của biểu thức 1 là giá trị của hàng loạt lệnh. Nếu điều kiện kèm theo sai thì biểu thức 2 được thực thi và giá trị của biểu thức 2 trở thành giá trị của hàng loạt lệnh .
Ví dụ :

#include 

int main()
{
    int x = 3;
    int y = 4;
    int z;

    z = x > y ? x : y;

    printf("z = %d\n", z);

    x = x > y ? x : 100;

    printf("x = %d\n", x);

    return 0;
}

Kết quả sau khi chạy chương trình :

z = 4
x = 100

Như vậy ta thấy biểu thức 2 và biểu thức 3 hoàn toàn có thể là 1 giá trị biến, hằng, hoặc một hàm nào đó có trả về giá trị .

2. Lệnh switch case

Lệnh switch cũng giống cấu trúc if, nhưng nó mềm dẻo hơn và linh động hơn nhiều so với sử dụng if. Tuy nhiên, nó cũng xuất hiện hạn chế là hiệu quả của biểu thức phải là giá trị hằng nguyên ( có giá trị đơn cử ). Một bài toán sử dụng lệnh switch thì cũng hoàn toàn có thể sử dụng if, nhưng ngược lại thì còn tùy thuộc vào giải thuật của bài toán .

Cấu trúc lệnh switch case

Lệnh switch case
Cú pháp, lưu đồ và cách hoạt động lệnh switch case

Ví dụ: Nhập vào 1 số từ 1->5 và in ra cách đọc tương ứng:

#include 

int main()
{
    int a;
    printf("Nhap a = ");
    scanf("%d",&a);

    switch(a)
    {
        case 1: printf("Mot\n"); 
                break;
        case 2: printf("Hai\n"); 
                break;
        case 3: printf("Ba\n"); 
                break;
        case 4: printf("Bon\n"); 
                break;
        case 5: printf("Nam\n"); 
                break;
    }

    return 0;
}

Các bạn chạy thử, và thử bỏ một vài lệnh break xem nó ra sao nhé .
Ngoài ra, tất cả chúng ta có cấu trúc switch-case-default nữa. Nguyên lý hoạt động giải trí giống như switch-case nhưng nếu những trường hợp đều không thỏa mãn nhu cầu thì sẽ thực thi lệnh của trường hợp default ( dịch là trường hợp mặc định ) .

#include 

int main()
{
    int a;
    printf("Nhap a = ");
    scanf("%d",&a);

    switch(a)
    {
        case 1: printf("Mot\n"); 
                break;
        case 2: printf("Hai\n"); 
                break;
        case 3: printf("Ba\n"); 
                break;
        case 4: printf("Bon\n"); 
                break;
        case 5: printf("Nam\n"); 
                break;
        default: printf("Ban da nhap mot so khac\n");
                break;
    }

    return 0;
}

3. Khi nào dùng if-else, khi nào dùng switch-case

Như mình đã nói ở trên, lệnh switch case có tính mềm dẻo và linh động hơn if else, cách viết cũng thoáng và khó nhầm hơn if else nhưng một bài dùng được switch case thí chắc như đinh dùng được bằng if else còn khi dùng if else lại chưa chắc dùng được bằng switch case .

Vậy các bạn nên dùng switch case khi:

  • Số lượng điều kiện là lớn như dạng menu chọn,… -> switch case viết sẽ lạch mạc, dễ kiểm soát.
  • Các trường hợp điều kiện phải có giá trị là số nguyên hoặc ký tự.

Các trường hợp còn lại, các bạn hãy dùng if – else.

Bài tập:

  1. Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất.
    Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp (a, b) và (c, d). Sau đó so sánh x và y để tìm ra số nguyên lớn nhất.
  2. Hãy nhập vào một số ít là 1 tháng trong năm, in ra xem tháng đó có bao nhiêu ngày. ( Coi như không có năm nhuận ) .
  3. Hãy lập trình chương trình giải phương trình bậc 2: ax^{2} + bx + c = 0 với a, b, c nhập từ bàn phím.

  4. Viết chương trình nhập vào 3 giá trị nguyên dương a, b, c. Kiểm tra xem a, b, c có phải là 3 cạnh của tam giác không ? Nếu là 3 cạnh của tam giác thì tính diện tích quy hoạnh của tam giác theo công thức :

    S = \sqrt{p(p-a)(p-b)(p-c)} với p là nửa chu vi tam giác. p = \frac{a+b+c}{2}

  5. Viết chương trình tính tiền điện gồm những điều kiện kèm theo sau :
  • Tiền thuê bao điện kế: 1000đ/tháng
  • Định mức sử dụng điện cho mỗi hộ là: 50 KW với giá 230đ/KW
  • Nếu phần vượt định mức <= 50KW thì tính giá 480đ/KW
  • Nếu 50KW < phần vượt định mức < 100KW thì tính giá 700đ/K
  • Nếu phần vượt định mức >= 100KW thì tính giá 900đ/KW

    Chỉ số mới và cũ được nhập vào từ bàn phím. In ra màn hình hiển thị chỉ số cũ, chỉ số mới, tiền trả định mức, tiền trả vượt định mức, tổng tiền phải trả .

Bạn hoàn toàn có thể sẽ thích :