C++ FLOW CONTROL – CẤU TRÚC ĐIỀU KHIỂN C++

By 08/01/2021Tháng Sáu 10th, 2021C/C++, KIẾN THỨC LẬP TRÌNH

1. C++ if, if… else và nested if… else

Ở hướng dẫn này, chúng ta sẽ tìm hiểu về câu lệnh if… else để tạo các chương trình đưa ra quyết định thông qua các ví dụ.

Trong lập trình máy tính, chúng ta sử dụng câu lệnh if để chạy block code chỉ khi có một điều kiện duy nhất được đáp ứng.

Ví dụ: Đánh giá học sinh theo thang điểm A, B, C:

  • Nếu tỷ lệ phần trăm trên 90, ấn định điểm A.
  • Nếu tỷ lệ phần trăm trên 75, ấn định điểm B.
  • Nếu tỷ lệ phần trăm trên 65, ấn định điểm C.

Có 3 dạng câu lệnh if … else trong C++

  • Câu lệnh if
  • Câu lệnh if … else
  • Câu lệnh if … else if … else

1.1. Câu lệnh if

Cú pháp của câu lệnh if là:

if (condition) {

   // body of if statement

}

Câu lệnh if đánh giá điều kiện bên trong dấu ngoặc đơn ().

Nếu điều kiện được đánh giá là đúng (True), code bên trong phần thân của if sẽ được thực thi.

Nếu điều kiện được đánh giá là sai (False), code bên trong phần thân của if sẽ bị bỏ qua.

Lưu ý: Đoạn code bên trong { } là phần thân của câu lệnh if.

https://cdn.programiz.com/sites/tutorial2program/files/cpp-if-working.png

Ví dụ 1: Câu lệnh IF

// Program to print positive number entered by the user

// If the user enters a negative number, it is skipped

 

#include <iostream>

using namespace std;

 

int main() {

    int number;

 

    cout << “Enter an integer: “;

    cin >> number;

 

    // checks if the number is positive

    if (number > 0) {

        cout << “You entered a positive integer: “ << number << endl;

    }

    cout << “This statement is always executed.”;

    return 0;

}

Đầu ra 1:

Enter an integer: 5

You entered a positive number: 5

This statement is always executed.

Khi người dùng nhập 5, điều kiện number > 0 được đánh giá là đúng và câu lệnh bên trong phần thân if được thực thi.

Đầu ra 2: 

Enter a number: -5

This statement is always executed.

Khi người dùng nhập -5, điều kiện number > 0 được đánh giá là sai và câu lệnh bên trong phần thân if không được thực thi.

1.2. Câu lệnh if … else

Câu lệnh if có thể có một mệnh đề else tùy chọn. Cú pháp của nó là:

if (condition) {

    // block of code if condition is true

}

else {

    // block of code if condition is false

}

Câu lệnh if … else đánh giá điều kiện bên trong dấu ngoặc đơn.

https://cdn.programiz.com/sites/tutorial2program/files/cpp-if-else-working.png 

Nếu điều kiện đánh giá là đúng:

  • Code bên trong phần thân của if được thực thi
  • Code bên trong phần thân của else bị bỏ qua, không thực thi.

Nếu điều kiện đánh giá là sai:

  • Code bên trong phần thân của else được thực thi
  • Code bên trong phần thân của if bị bỏ qua, không thực thi.

Ví dụ 2: Mệnh đề if …else trong C++

// Program to check whether an integer is positive or negative

// This program considers 0 as a positive number

 

#include <iostream>

using namespace std;

 

int main() {

     int number;

 

    cout << “Enter an integer: “;

    cin >> number;

    if (number >= 0) {

        cout << “You entered a positive integer: “ << number << endl;

    }

    else {

        cout << “You entered a negative integer: “ << number << endl;

    }

    cout << “This line is always printed.”;

    return 0;

}

Đầu ra 1:

Enter an integer: 4

You entered a positive integer: 4.

This line is always printed.

Ở chương trình bên trên, tôi có điều kiện number >= 0. Nếu tôi chọn một số lớn hơn hoặc bằng 0 thì điều kiện sẽ đánh giá là đúng.

Ở đây, tôi chọn số 4 nên điều kiện là đúng. Vì vậy câu lệnh trong phần thân của if dược thực thi.

Đầu ra 2:

Enter an integer: -4

You entered a negative integer: -4.

This line is always printed.

Ở đây, tôi chọn số -4 nên điều kiện là sai. Vì vậy câu lệnh trong phần thân của else dược thực thi.

1.3. Câu lệnh if… else… else… if

Câu lệnh if …else được sử dụng để thực thi một block code trong số 2 lựa chọn thay thế. Tuy nhiên, nếu chúng ta cần phải lựa chọn giữa nhiều hơn 2 lựa chọn thay thế, ta có thể sử dụng câu lệnh if… else if… else.

Cú pháp của câu lệnh if… else if… else là:

if (condition1) {

    // code block 1

}

else if (condition2){

    // code block 2

}

else {

    // code block 3

}

Ở đây:

  • Nếu điều kiện 1 được đánh giá là đúng, thì code block 1 được thực thi
  • Nếu điều kiện 1 được đánh giá là sai, thì điều kiện 2 được đánh giá.
  • Nếu điều kiện 2 là đúng thì code block 2 được thực thi
  • Nếu điều kiện 2 là sai thì code block 3 được thực thi

https://cdn.programiz.com/sites/tutorial2program/files/cpp-if-else-if-else-working.png

Lưu ý: có thể có nhiều câu lệnh else if nhưng chỉ có một câu lệnh if và else.

Ví dụ 3: If… else… else if

// Program to check whether an integer is positive, negative or zero

 

#include <iostream>

using namespace std;

 

int main() {

     int number;

 

    cout << “Enter an integer: “;

    cin >> number;

    if (number > 0) {

        cout << “You entered a positive integer: “ << number << endl;

    } 

else if (number < 0) {

      cout << “You entered a negative integer: “ << number << endl;

     } 

else {

        cout << “You entered 0.” << endl;

    }

     cout << “This line is always printed.”;

    return 0;

}

Đầu ra 1:

Enter an integer: 1

You entered a positive integer: 1.

This line is always printed.

Đầu ra 2:

Enter an integer: -2

You entered a negative integer: -2.

This line is always printed.

Đầu ra 3:

Enter an integer: 0

You entered 0.

This line is always printed.

Trong chương trình này, tôi lấy một số từ người dùng. Sau đó, tôi sử dụng thang if… else if… else để kiểm tra xem số đó là số dương, số âm hay số 0.

Nếu số lớn hơn 0, code bên trong block if sẽ được thực thi. Nếu số nhỏ hơn 0, code bên trong block if khác sẽ được thực thi. Nếu không, code bên trong block khác được thực thi.

1.4. If… else lồng nhau

Đôi khi, chúng ta cần sử dụng một câu lệnh if bên trong một câu lệnh if khác. Đây được gọi là câu lệnh if lồng nhau.

Hãy coi đó như nhiều lớp của câu lệnh if. Có một câu lệnh if đầu tiên, bên ngoài và bên trong đó là một câu lệnh if khác. Cú pháp của nó là:

// outer if statement

if (condition1) {

    // statements

 

    // inner if statement

    if (condition2) {

        // statements

    }

}

Lưu ý: 

  • Ta có thể thêm các câu lệnh else và else if vào bên trong câu lệnh if theo yêu cầu.
  • Câu lệnh if bên trong cũng có thể được chèn vào bên trong, bên ngoài else hoặc câu lệnh else if (nếu chúng tồn tại).
  • Ta có thể lồng nhiều lớp câu lệnh if

Ví dụ 4: câu lệnh if lồng nhau

// C++ program to find if an integer is even or odd or neither (0)

// using nested if statements

 

#include <iostream>

using namespace std;

 

int main() {

    int num;

    

    cout << “Enter an integer: “;  

     cin >> num;    

 

    // outer if condition

    if (num != 0) {

        

        // inner if condition

        if ((num % 2) == 0) {

            cout << “The number is even.” << endl;

        }

         // inner else condition

        else {

            cout << “The number is odd.” << endl;

        }  

    }

    // outer else condition

    else {

        cout << “The number is 0 and it is neither even nor odd.” << endl;

    }

    cout << “This line is always printed.” << endl;

}

Đầu ra 1:

Enter an integer: 34

The number is even.

This line is always printed.

Đầu ra 2:

Enter an integer: 35

The number is odd.

This line is always printed.

Đầu ra 3:

Enter an integer: 0

The number is 0 and it is neither even nor odd.

This line is always printed.

Ở ví dụ trên:

  • Tôi lấy một số nguyên làm đầu vào và lưu trữ nó trong biến num
  • Sử dụng câu lệnh if… else để kiểm tra xem num có bằng 0 không
  • Nếu đúng, câu lệnh if… else bên trong (inner) sẽ được thực thi
  • Nếu sai, code bên trong điều kiện else bên ngoài (outer) sẽ được thực thi. Mã này sẽ cho ra “Số là 0 và không chẵn cũng không lẻ”.
  • Câu lệnh if… else bên trong kiểm tra xem số đầu vào có chia hết cho 2 hay không.
  • Nếu đúng, sẽ cho ra câu lệnh thông báo rằng đó là số chẵn
  • Nếu sai, sẽ có thông báo đó là số lẻ.

Chú ý rằng 0 cũng chia hết cho 2 nhưng nó không phải là số chẵn. Đây là lý do tại sao trước tiên chúng ta phải đảm bảo rằng số đầu vào không phải là 0 trong điều kiện if bên ngoài.

Lưu ý: Như bạn có thể thấy, if… else lồng nhau làm cho mọi thứ phức tạp hơn. Nếu có thể, hãy cố gắng tránh sử dụng if… else lồng nhau.

1.5. Phần thân của if… else chỉ với một câu lệnh

Nếu phần thân của if… else chỉ có một câu lệnh, bạn có thể bỏ qua { } trong chương trình. Ví dụ, bạn có thể thay thế:

int number = 5;

 

    if (number > 0) {

        cout << “The number is positive.” << endl;

    }

    else {

        cout << “The number is negative.” << endl;

    }

 

Với

int number = 5;

 

    if (number > 0)

        cout << “The number is positive.” << endl;

    else

        cout << “The number is negative.” << endl;

Đầu ra của 2 chương trình đều sẽ giống nhau.

Lưu ý: Tuy không cần thiết phải sử dụng { } trong phần thân của if… else có một câu lệnh, nhưng sử dụng { } sẽ làm code của bạn dễ đọc hơn.

Thông tin thêm về việc ra quyết định

Trong một số tình huống nhất định, toán tử bậc ba có thể thay thế câu lệnh if… else. Để hiểu rõ hơn, hãy tìm hiểu về toán tử bậc ba C++.

Nếu cần phải lựa chọn giữa nhiều lựa chọn thay thế trên một điều kiện thử nghiệm đã cho, có thể sử dụng câu lệnh switch. Để hiểu rõ hơn, hãy tìm hiểu về C++ Switch.

  1. Vòng lặp – Loop

Trong lập trình máy tính, vòng lặp dùng để lặp lại một code block.

Ví dụ tôi muốn hiển thị một tin nhắn 100 lần, thay vì viết câu lệnh 100 lần, tôi có thể sử dụng vòng lặp.

Đó chỉ là một ví dụ đơn giản, ta có thể có được nhiều hiệu quả hơn trong các chương trình của mình bằng cách tận dụng vòng lặp.

Có 3 loại vòng lặp trong C++:

  • Vòng lặp for
  • Vòng lặp while
  • Vòng lặp do… while

Ở phần này, chúng ta sẽ tập trung tìm hiểu về vòng lặp for trong C++.

2.1. Vòng lặp for trong C++

Cú pháp của vòng lặp for là

for (initialization; condition; update) {

    // body of-loop 

}

Tại đây:

  • Initialization (Khởi tạo) – khởi tạo các biến và chỉ được thực thi 1 lần
  • Condition (điều kiện) – Nếu đúng, phần thân của vòng lặp for sẽ được thực thi, nếu sai vòng lặp for bị chấm dứt
  • Update (Cập nhật) – cập nhật giá trị của các biến được khởi tạo và kiểm tra lại điều kiện.

2.2. Lưu đồ vòng lặp for trong C++

https://cdn.programiz.com/sites/tutorial2program/files/cpp-for-loop-flowchart.png

Ví dụ 1: Hiển thị số từ 1 đến 5

#include <iostream>

 

using namespace std;

 

int main() {

        for (int i = 1; i <= 5; ++i) {

        cout << i << ” “;

    }

    return 0;

}

Đầu ra

1 2 3 4 5

Dưới đây là cách chương trình này chạy

Lặp lại Biến i<=5 Hoạt động
Lần 1 i = 1 Đúng 1 được xuất ra, i tăng lên 2
Lần 2 i = 2 Đúng 2 được xuất ra, i tăng lên 3
Lần 3 i = 3 Đúng 3 được xuất ra, i tăng lên 4
Lần 4 i = 4 Đúng 4 được xuất ra, i tăng lên 5
Lần 5 i = 5 Đúng 5 được xuất ra, i tăng lên 6
Lần 6 i = 6 Sai  Vòng lặp kết thúc

 

Ví dụ 2: Hiển thị văn bản 5 lần

// C++ Program to display a text 5 times

 

#include <iostream>

 

using namespace std;

 

int main() {

    for (int i = 1; i <= 5; ++i) {

        cout <<  “Hello World! “ << endl;

    }

    return 0;

}

 

Đầu ra

Hello World!

Hello World!

Hello World!

Hello World!

Hello World!

Dưới đây là cách chương trình này chạy

 

Lặp lại Biến i<=5 Hoạt động
Lần 1 i = 1 Đúng “Hello world” được xuất ra, i tăng lên 2
Lần 2 i = 2 Đúng “Hello world” được xuất ra, i tăng lên 3
Lần 3 i = 3 Đúng “Hello world” được xuất ra, i tăng lên 4
Lần 4 i = 4 Đúng “Hello world” được xuất ra, i tăng lên 5
Lần 5 i = 5 Đúng “Hello world” được xuất ra, i tăng lên 6
Lần 6 i = 6 Sai  Vòng lặp kết thúc

 

Ví dụ 3: Tìm tổng của n số tự nhiên đầu tiên

// C++ program to find the sum of first n natural numbers

// positive integers such as 1,2,3,…n are known as natural numbers

 

#include <iostream>

 

using namespace std;

 

int main() {

    int num, sum;

    sum = 0;

 

    cout << “Enter a positive integer: “;

    cin >> num;

 

    for (int count = 1; count <= num; ++count) {

        sum += count;

    }

 

    cout << “Sum = “ << sum << endl;

 

    return 0;

}

Đầu ra

Enter a positive integer: 10

Sum = 55

Trong ví dụ trên, tôi có 2 biến num và sum. Biến sum được gán bằng 0 và biến num được gán giá trị do người dùng cung cấp.

Ở đây, tôi đã sử dụng vòng lặp for:

for(int count = 1; count <= num; ++count)

  • int count = 1: Khởi tạo biến đếm
  • count <= num: chạy vòng lặp miễn là số đếm nhỏ hơn hoặc bằng num
  • ++count: tăng biến đếm lên 1 trong mỗi lần lặp

Khi số đếm thành 11, điều kiện là sai và tổng sẽ bằng 0 + 1 + 2 + … +10.

2.3. Vòng lặp for dựa trên phạm vi

Trong C++11, một vòng lặp for dựa trên phạm vi mới đã được giới thiệu hoạt động với các tập hợp như mảng và vectơ. Cú pháp của nó là:

for (variable : collection) {

    // body of loop

}

Tại đây, với mỗi giá trị của collection, vòng lặp for sẽ được thực thi và giá trị được gán cho biến.

Ví dụ 4: Vòng lặp for dựa trên phạm vi

#include <iostream>

 

using namespace std;

 

int main() {

  

    int num_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  

    for (int n : num_array) {

        cout << n << ” “;

    }

  

    return 0;

}

Đầu ra

1 2 3 4 5 6 7 8 9 10

Trong chương trình trên, tôi đã khai báo và khởi tạo một mảng int có tên là num_array. Nó có 10 ký tự.

Ở đây, tôi đã sử dụng vòng lặp for dựa trên phạm vi để truy cập tất cả các ký tự trong mảng.

2.4. Vòng lặp for vô hạn trong C++

Khi điều kiện trong vòng lặp for luôn đúng, nó sẽ chạy mãi (cho đến khi đầy bộ nhớ). Ví dụ:

// infinite for loop

for(int i = 1; i > 0; i++) {

    // block of code

}

Trong chương trình trên, vì điều kiện luôn đúng nên code sẽ chạy mãi. 

  1. Vòng lặp do… while

Tiếp theo, chúng ta sẽ tìm hiểu về vòng lặp while và do… while

3.1. Vòng lặp while trong C++

Cú pháp của vòng lặp while là:

while (condition) {

    // body of the loop

}

Ở đây:

  • Vòng lặp đánh giá điều kiện
  • Nếu điều kiện đánh giá là đúng, đoạn code bên trong vòng lặp while sẽ được thực thi
  • Điều kiện được thực thi lại
  • Quá trình này sẽ diễn ra cho đến khi điều kiện sai
  • Khi điều kiện được đánh giá là sai, vòng lặp sẽ kết thúc

3.2. Lưu đồ vòng lặp while

https://cdn.programiz.com/sites/tutorial2program/files/cpp-while-loop-flowchart.png

Ví dụ 1: Hiển thị số từ 1 đến 5

// C++ Program to print numbers from 1 to 5

 

#include <iostream>

 

using namespace std;

 

int main() {

    int i = 1

 

    // while loop from 1 to 5

    while (i <= 5) {

        cout << i << ” “;

        ++i;

    }

    

    return 0;

}

Đầu ra

1 2 3 4 5

Dưới đây là cách chương trình này chạy

Lặp lại Biến i<=5 Hoạt động
Lần 1 i = 1 Đúng 1 được xuất ra, i tăng lên 2
Lần 2 i = 2 Đúng 2 được xuất ra, i tăng lên 3
Lần 3 i = 3 Đúng 3 được xuất ra, i tăng lên 4
Lần 4 i = 4 Đúng 4 được xuất ra, i tăng lên 5
Lần 5 i = 5 Đúng 5 được xuất ra, i tăng lên 6
Lần 6 i = 6 Sai  Vòng lặp kết thúc

 

Ví dụ 2: Tình tổng của số dương

// program to find the sum of positive numbers

// if the user enters a negative number, the loop ends

// the negative number entered is not added to the sum

 

#include <iostream>

using namespace std;

 

int main() {

    int number;

    int sum = 0;

 

    // take input from the user

    cout << “Enter a number: “;

    cin >> number;

 

    while (number >= 0) {

        // add all positive numbers

        sum += number;

 

        // take input again if the number is positive

        cout << “Enter a number: “;

        cin >> number;

    }

 

    // display the sum

    cout << “\nThe sum is “ << sum << endl;

    

    return 0;

}

Đầu ra

Enter a number: 6

Enter a number: 12

Enter a number: 7

Enter a number: 0

Enter a number: -2

 

The sum is 25

Trong chương trình này, người dùng được yêu cầu nhập một số, số này được lưu trong biến number.

Để lưu trữ tổng các số, người dùng khai báo một biến tổng và khởi tạo giá trị đó bằng 0.

Vòng lặp while tiếp tục cho đến khi người dùng nhập một số âm. Trong mỗi lần lặp, số do người dùng nhập được thêm vào biến tổng.

Khi người dùng nhập một số âm, vòng lặp kết thúc. Cuối cùng, tổng được hiển thị.

3.3. Vòng lặp do… while

Vòng lặp do… while là một biến thể của vòng lặp while với một điểm khác biệt quan trọng: phần thân của vòng lặp do…while được thực thi một lần trước khi điều kiện được kiểm tra.

Cú pháp là:

do {

   // body of loop;

}

while (condition);

Ở đây:

  • Phần thân của vòng lặp được thực thi trước. Sau đó điều kiện được đánh giá
  • Nếu điều kiện được đánh giá là đúng, phần thân của vòng lặp bên trong câu lệnh do sẽ được thực thi lại.
  • Điều kiện được đánh giá lại một lần nữa
  • Nếu điều kiện được đánh giá là đúng, phần thân của vòng lặp bên trong câu lệnh do sẽ được thực thi lại.
  • Chương trình sẽ chạy cho đến khi điều kiện được đánh giá là sai. Khi đó vòng lặp sẽ kết thúc.

3.4. Lưu đồ của vòng lặp do… while

https://cdn.programiz.com/sites/tutorial2program/files/cpp-do-while-loop-flowchart.png

Ví dụ 3: Hiển thị số từ 1 đến 5

// C++ Program to print numbers from 1 to 5

 

#include <iostream>

 

using namespace std;

 

int main() {

    int i = 1

 

    // do…while loop from 1 to 5

    do {

        cout << i << ” “;

        ++i;

    }

    while (i <= 5);

    

    return 0;

}

Đầu ra

1 2 3 4 5

Dưới đây là cách chương trình này chạy

Lặp lại Biến i<=5 Hoạt động
i = 1 Không kiểm tra 1 được xuất ra, i tăng lên 2
Lần 1 i = 2 Đúng 2 được xuất ra, i tăng lên 3
Lần 2 i = 3 Đúng 3 được xuất ra, i tăng lên 4
Lần 3 i = 4 Đúng 4 được xuất ra, i tăng lên 5
Lần 4 i = 5 Đúng 5 được xuất ra, i tăng lên 6
Lần 5 i = 6 Sai  Vòng lặp kết thúc

 

Ví dụ 4: Tính tổng của các số dương

// program to find the sum of positive numbers

// If the user enters a negative number, the loop ends

// the negative number entered is not added to the sum

 

#include <iostream>

using namespace std;

 

int main() {

    int number = 0;

    int sum = 0;

 

    do {

        sum += number;

 

        // take input from the user

        cout << “Enter a number: “;

        cin >> number;

    }

    while (number >= 0);

    

    // display the sum

    cout << “\nThe sum is “ << sum << endl;

    

    return 0;

}

Đầu ra 1

Enter a number: 6

Enter a number: 12

Enter a number: 7

Enter a number: 0

Enter a number: -2

 

The sum is 25

Ở đây,  vòng lặp do… while tiếp tục cho đến khi người dùng nhập một số âm. Khi số được nhập là số âm, vòng lặp kết thúc, số âm không được thêm và biến tổng.

Đầu ra 2

Enter a number: -6

The sum is 0.

Phần thân của vòng lặp do… while chỉ chạy 1 lần nếu người dùng nhập một số âm.

3.5. Vòng lặp while vô hạn

Khi điều kiện trong vòng lặp while luôn đúng, vòng lặp sẽ chạy mãi (cho đến khi đầy bộ nhớ). Ví dụ:

// infinite while loop

while(true) {

    // body of the loop

}

Đây là một ví dụ về vòng lặp do… while vô hạn:

// infinite do…while loop

 

int count = 1;

 

do {

   // body of loop

while(count == 1);

Trong chương trình trên, vì điều kiện luôn đúng nên vòng lặp sẽ chạy mãi.

3.5. Vòng lặp for với while

Vòng lặp for thường được sử dụng khi biết số lần lặp. Ví dụ:

// This loop is iterated 5 times

for (int i = 1; i <=5; ++i) {

   // body of the loop

}

Ở đây, chúng ta biết rằng vòng lặp for sẽ được thực thi 5 lần.

Tuy nhiên, vòng lặp while và do… while thường được sử dụng khi chưa biết trước số lần lặp. Ví dụ:

while (condition) {

    // body of the loop

}

  1. Break trong C++

Trong C++, câu lệnh break làm kết thúc vòng lặp khi được gặp phải.

Cú pháp của câu lệnh break là:

break;

Trước khi tìm hiểu về câu lệnh break, hãy đảm bảo bạn đã biết về:

  • Vòng lặp for trong C++
  • If… else trong C++
  • Vòng lặp while trong C++

4.1. Hoạt động của câu lệnh break trong C++

https://cdn.programiz.com/sites/tutorial2program/files/cpp-break-statement.png

Ví dụ 1: Break với vòng lặp for

// program to print the value of i

 

#include <iostream>

using namespace std;

 

int main() {

    for (int i = 1; i <= 5; i++) {

        // break condition     

        if (i == 3) {

            break;

        }

        cout << i << endl;

    }

return 0;

}

Đầu ra

1

2

Trong chương trình trên, vòng lặp for dùng để xuất giá trị i trong mỗi lần lặp. Tại đây, hãy lưu ý đến code:

if (i == 3) {

    break;

}

Điều này có nghĩa là khi i = 3, câu lệnh break kết thúc vòng lặp. Do đó, đầu ra không bao gồm các giá trị lớn hơn hoặc bằng 3.

Lưu ý: câu lệnh break thường được sử dụng với các câu lệnh ra quyết định.

Ví dụ 2: Break với vòng lặp while

// program to find the sum of positive numbers

// if the user enters a negative numbers, break ends the loop

// the negative number entered is not added to sum

 

#include <iostream>

using namespace std;

 

int main() {

    int number;

    int sum = 0;

 

    while (true) {

        // take input from the user

        cout << “Enter a number: “;

        cin >> number;

 

        // break condition

        if (number < 0) {

            break;

        }

 

        // add all positive numbers

        sum += number;

    }

 

    // display the sum

    cout << “The sum is “ << sum << endl;

 

    return 0;

}

Đầu ra

Enter a number: 1

Enter a number: 2

Enter a number: 3

Enter a number: -5

The sum is 6.

Trong chương trình trên, người dùng sẽ nhập một con số. Vòng lặp while được dùng để xuất tổng của các số được nhập. Ở đây, lần lưu ý code:

if(number < 0) {

    break;

}

Điều này có nghĩa là khi người dùng nhập một số âm, câu lệnh break sẽ kết thúc vòng lặp và các code bên ngoài vòng lặp sẽ được thực thi.

Vòng lặp while tiếp tục cho đến khi người dùng nhập một số âm.

4.2. Break với vòng lặp lồng nhau

Khi break được sử dụng với các vòng lặp lồng nhau, break sẽ kết thúc vòng lặp bên trong. Ví dụ:

// using break statement inside

// nested for loop

 

#include <iostream>

using namespace std;

 

int main() {

    int number;

    int sum = 0;

 

    // nested for loops

 

    // first loop

    for (int i = 1; i <= 3; i++) {

        // second loop

        for (int j = 1; j <= 3; j++) {

            if (i == 2) {

                break;

            }

            cout << “i = “ << i << “, j = “ << j << endl;

        }

    }

 

    return 0;

}

Đầu ra

i = 1, j = 1

i = 1, j = 2

i = 1, j = 3

i = 3, j = 1

i = 3, j = 2

i = 3, j = 3

Trong chương trình trên, câu lệnh break được thực thi khi i==2. Nó kết thúc vòng lặp bên trong và luồng điều khiển của chương trình chuyển sang vòng lặp bên ngoài.

Do đó, giá trị i =  2 không bao giờ được hiển thị ở đầu ra.

Câu lệnh break cũng được sử dụng với câu lệnh switch. Để tìm hiểu thêm bạn có thể tham khảo “Câu lệnh switch trong C++”.

  1. Continue trong C++

Trong lập trình máy tính, câu lệnh continue được sử dụng để bỏ qua bước lặp hiện tại của vòng lặp và điều khiển chương trình sẽ chuyển sang bước lặp tiếp theo.

Cú pháp của câu lệnh continue là:

continue;

Trước khi tìm hiểu về câu lệnh continue, hãy đảm bảo bạn đã biết về:

  • Vòng lặp for trong C++
  • If… else trong C++
  • Vòng lặp while trong C++

5.1. Hoạt động của câu lệnh continue trong C++

https://cdn.programiz.com/sites/tutorial2program/files/cpp-continue-statement.png

Ví dụ 1: Continue với vòng lặp for

Trong vòng lặp for, continue bỏ qua lần lặp hiện tại và luồng điều khiển chuyển đến biểu thức mới.

// program to print the value of i

 

#include <iostream>

using namespace std;

 

int main() {

    for (int i = 1; i <= 5; i++) {

        // condition to continue

        if (i == 3) {

            continue;

        }

 

        cout << i << endl;

    }

 

    return 0;

}

Đầu ra

1

2

4

5

Trong chương trình trên, tôi đã dùng vòng lặp for để xuất giá trị i trong mỗi vòng lặp. Ở đây cần lưu ý code:

if (i == 3) {

    continue;

}

Nó có nghĩa là:

  • Khi i = 3, câu lệnh continue bỏ qua vòng lặp hiện tại và bắt đầu vòng lặp tiếp theo
  • Khi i = 4, điều kiện được đánh giá lại.
  • Khi đó, 4 và 5 được xuất ra trong 2 vòng lặp tiếp theo.

Lưu ý: 

  • Câu lệnh continue hầu hết được sử dụng với các câu lệnh ra quyết định.
  • Câu lệnh break kết thúc hoàn toàn vòng lặp. Tuy nhiên, câu lệnh continue chỉ bỏ qua lần lặp hiện tại.

Ví dụ 2: Continue với vòng lặp while

Trong vòng lặp while, continue bỏ qua vòng lặp hiện tại và luồng điều khiển của chương trình sẽ chuyển đến điều kiện while.

// program to calculate positive numbers till 50 only

// if the user enters a negative number,

// that number is skipped from the calculation

 

// negative number -> loop terminate

// numbers above 50 -> skip iteration

 

#include <iostream>

using namespace std;

 

int main() {

    int sum = 0;

    int number = 0;

 

    while (number >= 0) {

        // add all positive numbers

        sum += number;

 

        // take input from the user

        cout << “Enter a number: “;

        cin >> number;

 

        // continue condition

        if (number > 50) {

            cout << “The number is greater than 50 and won’t be calculated.” << endl;

            number = 0// the value of number is made 0 again

            continue;

        }

    }

 

    // display the sum

    cout << “The sum is “ << sum << endl;

 

    return 0;

}

Đầu ra

Enter a number: 12

Enter a number: 0

Enter a number: 2

Enter a number: 30

Enter a number: 50

Enter a number: 56

The number is greater than 50 and won’t be calculated.

Enter a number: 5

Enter a number: -3

The sum is 99

Trong chương trình trên, người dùng nhập một con số. Vòng lặp while được sử dụng để xuất ra tổng các số dương do người dùng nhập vào, miễn là các số được nhập không lớn hơn 50.

Cần chú ý khi sử dụng câu lệnh continue:

if (number > 50){

    continue;

}

  • Khi người dùng nhập một số lớn hơn 50, câu lệnh continue sẽ bỏ qua lần lặp hiện tại. Khi đó luồng điều khiển của chương trình chuyển sang điều kiện của vòng lặp while
  • Khi người dùng nhập một số nhỏ hơn 0, vòng lặp kết thúc.

Lưu ý: câu lệnh continue hoạt động theo cách tương tự đối với vòng lặp do… while

5.2. Continue với lòng lặp lồng nhau

Khi continue được sử dụng với các vòng lặp lồng nhau, nó sẽ bỏ qua lần lặp hiện tại của vòng lặp bên trong. Ví dụ:

// using continue statement inside

// nested for loop

 

#include <iostream>

using namespace std;

 

int main() {

    int number;

    int sum = 0;

 

    // nested for loops

 

    // first loop

    for (int i = 1; i <= 3; i++) {

        // second loop

        for (int j = 1; j <= 3; j++) {

            if (j == 2) {

                continue;

            }

            cout << “i = “ << i << “, j = “ << j << endl;

        }

    }

 

    return 0;

}

Đầu ra

i = 1, j = 1

i = 1, j = 3

i = 2, j = 1

i = 2, j = 3

i = 3, j = 1

i = 3, j = 3

Trong chương trình trên, khi câu lệnh continue thực thi, nó sẽ bỏ qua lần lặp hiện tại ở vòng lặp bên trong, và luồng điều khiển của chương trình sẽ chuyển sang biểu thức mới của vòng lặp bên trong.

Do đó, giá trị j = 2 không bao giờ được hiển thị ở đầu ra.

  1. Câu lệnh switch trong C++

Câu lệnh switch cho phép chúng ta thực thi một code block trong số nhiều lựa chọn thay thế.

Cú pháp của câu lệnh switch trong C++ là:

switch (expression)  {

    case constant1:

        // code to be executed if 

        // expression is equal to constant1;

        break;

 

    case constant2:

        // code to be executed if

        // expression is equal to constant2;

        break;

        .

        .

        .

    default:

        // code to be executed if

        // expression doesn’t match any constant

}

Cách câu lệnh switch hoạt động

Biểu thức được đánh giá một lần và so sánh với các giá trị của mỗi trường hợp:

  • Nếu khớp, mã tương ứng sau khi nhãn khớp sẽ được thực thi. Ví dụ: nếu giá trị của biến bằng hằng số 2 (constant2), đoạn code sau case constant2 được thực thi cho đến khi gặp câu lệnh break.
  • Nếu không khớp, đoạn code sau default sẽ được thực thi.

Lưu ý: Chúng ta có thể làm điều tương tự với if… else… if. Tuy nhiên, cú pháp của câu lệnh switch gọn gàng và dễ đọc, dễ viết hơn nhiều.

Lưu đồ của câu lệnh switch

https://cdn.programiz.com/sites/tutorial2program/files/cpp-switch-flowchart.png

Ví dụ: Tạo bảng tính bằng câu lệnh switch

// Program to build a simple calculator using switch Statement

#include <iostream>

using namespace std;

 

int main() {

    char oper;

    float num1, num2;

    cout << “Enter an operator (+, -, *, /): “;

    cin >> oper;

    cout << “Enter two numbers: “ << endl;

    cin >> num1 >> num2;

 

    switch (oper) {

        case ‘+’:

            cout << num1 << ” + “ << num2 << ” = “ << num1 + num2;

            break;

        case ‘-‘:

            cout << num1 << ” – “ << num2 << ” = “ << num1 – num2;

            break;

        case ‘*’:

            cout << num1 << ” * “ << num2 << ” = “ << num1 * num2;

            break;

        case ‘/’:

            cout << num1 << ” / “ << num2 << ” = “ << num1 / num2;

            break;

        default:

            // operator is doesn’t match any case constant (+, -, *, /)

            cout << “Error! The operator is not correct”;

            break;

    }

 

    return 0;

}

Đầu ra 1

Enter an operator (+, -, *, /): +

Enter two numbers: 

2.3

4.5

2.3 + 4.5 = 6.8

Đầu ra 2

Enter an operator (+, -, *, /): –

Enter two numbers: 

2.3

4.5

2.3 – 4.5 = -2.2

Đầu ra 3

Enter an operator (+, -, *, /): *

Enter two numbers: 

2.3

4.5

2.3 * 4.5 = 10.35

Đầu ra 4

Enter an operator (+, -, *, /): /

Enter two numbers: 

2.3

4.5

2.3 / 4.5 = 0.511111

Đầu ra 5

Enter an operator (+, -, *, /): ?

Enter two numbers: 

2.3

4.5

Error! The operator is not correct.

Trong chương trình trên, tôi đang sử dụng câu lệnh switch… case để thực hiện các phép tính cộng, trừ, nhân và chia.

Cách chương trình hoạt động:

  • Đầu tiên, người dùng cần nhập toán tử mong muốn. Đầu vào này sau đó được lưu trữ trong biến char có tên là oper.
  • Sau đó, người cùng nhập 2 số, được lưu trữ trong các biến số float là num1 và num2
  • Sau đó, câu lệnh switch được sử dụng để kiểm tra toán tử do người dùng nhập
  • Nếu người dùng nhập +, phép cộng được thực hiện trên các số
  • Nếu dùng dùng nhập – , phép trừ được thực hiện trên các số
  • Nếu dùng dùng nhập *, phép nhân được thực hiện trên các số
  • Nếu dùng dùng nhập /, phép chia được thực hiện trên các số
  • Nếu người dùng nhập bất kỳ ký tự nào khác, mã mặc định sẽ được xuất ra.

Lưu ý rằng câu lệnh break được sử dụng bên trong mỗi block case, làm kết thúc câu lệnh switch.

Nếu câu lệnh break không được sử dụng, tất cả các trường hợp sau trường hợp đúng sẽ được thực hiện.

  1. Câu lệnh goto

Trong lập trình C++, câu lệnh goto được sử dụng để thay đổi trình tự thực thi chương trình bình thường bằng cách chuyển quyền điều khiển của chương trình sang một số phần khác của chương trình.

Cú pháp của câu lệnh goto:

goto label;

… .. …

… .. …

… .. …

label: 

statement;

… .. …

Trong cú pháp trên, label là một định danh. Khi goto label được gặp phải, điều khiển chương trình sẽ chạy đến label và thực thi mã bên dưới đó.

https://cdn.programiz.com/sites/tutorial2program/files/working-goto.jpg

Ví dụ: Câu lệnh goto

// This program calculates the average of numbers entered by user.

// If user enters negative number, it ignores the number and 

// calculates the average of number entered before it.

 

# include <iostream>

using namespace std;

 

int main()

{

    float num, average, sum = 0.0;

    int i, n;

 

    cout << “Maximum number of inputs: “;

    cin >> n;

 

    for(i = 1; i <= n; ++i)

    {

        cout << “Enter n” << i << “: “;

        cin >> num;

        

        if(num < 0.0)

        {

           // Control of the program move to jump:

            goto jump;

        } 

        sum += num;

    }

    

jump:

    average = sum / (i – 1);

    cout << “\nAverage = “ << average;

    return 0;

}

Đầu ra

Maximum number of inputs: 10

Enter n1: 2.3

Enter n2: 5.6

Enter n3: -5.6

 

Average = 3.95

Bạn có thể viết bất cứ chương trình C++ nào mà không cần sử dụng câu lệnh goto. Câu lệnh goto thường được khuyến khích không nên sử dụng vì các lý do:

  • Câu lệnh goto cung cấp khả năng chuyển đến bất kỳ phần nào của chương trình, nhưng làm cho logic của chương trình trở nên phức tạp và rối.
  • Trong lập trình hiện đại, câu lệnh goto được coi là một cấu trúc có hại và là một lập trình xấu.
  • Câu lệnh goto có thể được thay thế trong hầu hết các chương trình C++ bằng cách sử dụng câu lệnh break và continue.

Để lại một câu trả lời