Câu lệnh điều khiển

Khối lệnh

Khối lệnh là nhiều câu lệnh đặt trong dấu {}. Về mặt ngữ nghĩa thì một câu lệnh với một khối lệnh là tương đương với nhau.

Câu lệnh if

Sử dụng câu lệnh if để thực thi một câu lệnh nếu một điều kiện logic là true. Có thể sử dụng mệnh đề else để thực thi một câu lệnh nếu điều kiện là false.

1
2
if (x == 100)
  printf("%d", x);

tương đương với

1
2
3
if (x == 100) {
  printf("%d", x);
}

Ví dụ câu lệnh else

1
2
3
4
5
if (x == 100) {
  printf("x is 100");
} else {
  printf("x is not 100");
}

Vòng lặp với for

Một vòng lặp for, while hoặc do-while lặp lại cho đến khi một điều kiện xác định ước tính thành false.

Với vòng lặp for có cấu trúc như sau:

1
2
3
for ([khởi tạo]; [điều kiện]; [biểu thức gia tăng]) {
  câu lệnh lặp
}

Khi một vòng lặp for thực thi theo thứ tự sau đây:

  1. Biểu thức khởi tạo, được thực thi một lần duy nhất.
  2. Biểu thức điều kiện được kiểm tra. Nếu là đúng, các câu lệnh lặp thực thi, nếu sai thì vòng lặp for kết thúc.
  3. Thực thi các câu lệnh lặp trong vòng for.
  4. Biểu thức gia tăng được thực thi.
  5. Trở lại Bước 2.

Ví dụ sau in các số từ 0 đến 9:

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

Vòng lặp while

Tương tự vòng lặp for, chỉ khác là bỏ biểu thức khởi tạo và biểu thức gia tăng.
Ví dụ sau cũng in từ 0 đến 9 nhưng sử dụng vòng lặp while thay vì vòng lặp for trong ví dự trên:

1
2
3
4
5
int i = 0;
while (i < 10) {
  printf("i = %d\n", i);
  i++;
}

Vòng lặp do-while

Tương tự vòng lặp while, chỉ khác là lần lặp đầu tiên không kiểm tra điều kiện.
Ví dụ sau cũng in từ 0 đến 9 nhưng sử dụng vòng lặp do-while:

1
2
3
4
5
int i = 0;
do {
  printf("i = %d\n", i);
  i++;
} while (i < 10)

Điều kiện switch-case

Biểu thức switch-case kiểm tra biểu thức đúng với từng case nào thì chạy case đó trở về sau. Câu lệnh break; sẽ dừng các case tiếp theo. Nhãn default sẽ thực thi khi không có case nào đúng. Giá trị trong biểu thức switch phải là số (int, long, char,… hoặc kiểu enum).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
switch (x) {
  case 1:
    cout << "x is 1";
    break;
  case 2:
    cout << "x is 2";
    break;
  default:
    cout << "value of x unknown";
}

Thực hiện các case liên tiếp nhau

1
2
3
4
5
6
7
8
9
switch (x) {
  case 1:
  case 2:
  case 3:
    cout << "x is 1, 2 or 3";
    break;
  default:
    cout << "x is not 1, 2 nor 3";
}

Câu lệnh break, continue, goto

Sử dụng câu lệnh break để chấm dứt vòng lặp for, while, do-whileswitch-case.
Còn câu lệnh continue sẽ chạy tiếp biểu thức kiểm tra điều kiện câu lệnh while, do-while, for thay vì chạy các câu lệnh bên dưới.

Ví dụ sẽ tính tổng các số từ 0 đến 4:

1
2
3
4
5
6
7
int sum = 0;
for (int i = 0; i < 10; i++) {
  if (i == 5) {
    break;
  }
  sum += i;
}

Ví dụ sẽ tính tổng các số chẵn từ 0 đến 9 sử dụng câu lệnh continue:

1
2
3
4
5
6
7
int sum = 0;
for (int i = 0; i < 10; i++) {
  if (i % 2 == 1) { // kiểm tra có phải số lẻ
    continue;
  }
  sum += i;
}

Câu lệnh goto sẽ di chuyển câu lệnh thực thi tiếp theo tới một vị trí đã đánh dấu. Vị trí này được gọi là label.

1
2
3
4
5
6
7
8
  int n = 10;
mylabel:
  printf("%d", n);
  n--;
  if (n > 0) {
    goto mylabel;
  }
  printf("%s", "finish");

Lệnh breakcontinue cũng có thể sử dụng với label. Nhưng thường chúng ta không sử dụng goto, breakcontinue với label để chương trình dễ đọc và dễ debug hơn.