Khi nào dùng ngoặc nhọn, khi nào dùng ngoặc tròn

Trong quá trình học lập trình, có rất nhiều bạn không phân biệt được và cũng không biết được khi nào thì dùng ngoặc nhọn, khi nào thì dùng ngoặc tròn. Bài này chúng ta sẽ làm rõ hơn một chút về chúng.

1. Khi nào dùng ngoặc nhọn {} ?

Trong bài câu lệnh if-else chúng ta đã đề cập đến lệnh và khối lệnh, các bạn có thể nhớ lại một chút.

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.

Vậy túm cái váy lại là cặp ngoặc nhọn có nhiệm vụ là tạo khối lệnh, để tập hợp nhiều câu lệnh thành 1 khối lệnh.

Khi nào cần tạo ra khối lệnh? Đó là khi các bạn muốn thực hiện nhiều câu lệnh trong một trường hợp, trong một hoàn cảnh nào đó.

Ví dụ về giải phương trình bậc 2.

Nếu delta > 0 thì chúng ta phải làm các công việc là:

  • Tính nghiệm x1
  • Tính nghiệm x2
  • Thông báo phương trình có 2 nghiệm.

Khi đó chúng ta dùng cặp dấu ngoặc nhọn để nhóm 3 lệnh trên thành một khối lệnh.

Nếu delta = 0 thì chúng ta cần làm 2 công việc:

  • Tính nghiệm kép x.
  • Thông báo phương trình có nghiệm kép

Khi đó chúng ta dùng cặp dấu ngoặc nhọn để nhóm 2 lệnh trên thành 1 khối lệnh.

Nếu delta < 0 thì thông báo ra là phương trình vô nghiệm. Vậy là chỉ có 1 lệnh cần làm, không cần thiết có cặp dấu ngoặc nhọn. Tuy nhiên khuyến cáo các bạn dù có 1 hay nhiều lệnh cần làm thì cũng gom nó lại trong cặp dấu ngoặc nhọn.

// e.g about string - code by nguyenvanquan7826
#include <stdio.h>
#include <math.h>

int main() 
{
    float a, b, c, delta;
    printf("Nhap cac he so a, b, c:\n");
    scanf("%f%f%f", &a, &b, &c);

    delta = b * b - 4 * a * c;

    if( delta > 0 )
    {
        float x1 = ( -b + sqrt(delta) ) / (2 * a);
        float x2 = ( -b - sqrt(delta) ) / (2 * a);
        printf("Phuong trinh co 2 nghiem:\n x1 = %.2f \n x2 = %.2f \n", x1, x2);
    } 

    if( delta == 0 )
    {
        float x = -b  / (2 * a);
        printf("Phuong trinh co nghiem kep x = %.2f\n", x);
    } 

    if(delta < 0 )
    {
        printf("Phuong trinh vo nghiem\n");
    }

    return 0;
}

Ở trong ví dụ trên, nếu các bạn không dùng cặp dấu ngoặc nhọn để ghép các lệnh cùng làm thành một khối lệnh mà cứ thế viết, chúng ta sẽ bị lôi như sau:

if( delta > 0 )
    float x1 = ( -b + sqrt(delta) ) / (2 * a);  //(lenh 1)
    float x2 = ( -b - sqrt(delta) ) / (2 * a);  // (lenh 2)
    printf("Phuong trinh co 2 nghiem:\n x1 = %.2f \n x2 = %.2f \n", x1, x2);

if( delta == 0 )
    float x = -b  / (2 * a);
    printf("Phuong trinh co nghiem kep x = %.2f\n", x);

if(delta < 0 )
    printf("Phuong trinh vo nghiem\n");

Như thế này, dù các bạn viết thụt thò kiểu gì thì các lệnh trên vẫn coi như ngang hàng. VD trong TH delta < 0 hoặc delta = 0, khi đó chỉ có lệnh tính x1 (lenh 1) là nằm trong lệnh if, còn lệnh tính x2 (lenh 2), và lệnh thông báo 2 nghiệm (lenh 3) nằm ngoài if, nên 2 lệnh này (lenh 2 và lenh 3) luôn luôn được chạy.

2. Khi nào dùng ngoặc tròn () ?

Các bạn làm khá nhiều bài tập rồi, các lệnh printf, scanf hoặc ngay cả hàm main cũng có ngoặc tròn (), vậy đơn giản là khi gọi hoặc xây dựng các hàm thì chúng ta dùng cặp dấu ngoặc tròn này. Trong các ngoặc tròn này có thể có các tham số nếu có.

Ví dụ lệnh printf("hello"); thì lệnh printf (mà bản chất nó là một hàm được hệ thống xây dựng sẵn) dùng tới cặp ngoặc tròn và trong cặp ngoặc tròn có một chuỗi “hello”, đó chính là đối số cần truyền vào.

Ngoài ra trong cú pháp lệnh của vòng lặp for, while, do…while hoặc if-else, switch-case đều có ngoặc tròn, thì các cú pháp này không phải là hàm mà chỉ là cú pháp lệnh đã được định nghĩa sẵn thôi.

Túm lại là chúng ta dùng ngoặc tròn khi chúng ta gọi hàm, khi xây dựng hàm hoặc dùng trong một cú pháp nào đó đã được định nghĩa. Vì vậy các bạn cần học chắc cú pháp của các lệnh, các cấu trúc.