Bài tập switch case với continue trong c++

Trong bài học này, chúng ta sẽ cùng nhau tìm hiểu về cấu trúc điểu khiển Jump mà mình đã giới thiệu sơ lược đến các bạn. Sau bài học này, các bạn sẽ biết cách sử dụng từ khóa break, continue trong cấu trúc vòng lặp hoặc cấu trúc rẽ nhánh với switch case statement.


Break

Từ khóa break được dùng để kết thúc vòng lặp, hoặc cấu trúc switch.

Break a switch

Khi sử dụng trong switch case statement, từ khóa break thường được đặt tại cuối mỗi khối lệnh mỗi nhãn case.

switch (character)
{
  case '+':
    cout << "addition" << endl;
    break;
  case '-':
    cout << "subtraction" << endl;
    break;
  case '*':
    cout << "multiplication" << endl;
    break;
  case '/':
    cout << "division" << endl;
    break;
        default:
                break;
}

Break a loop

Khi sử dụng trong các dạng vòng lặp khác nhau, từ khóa break đều có cùng mục đích là kết thúc sớm quá trình thực thi của vòng lặp.

for (int i = 10; i >= 0; i--)
{
  cout << "Count down: " << i << endl;
  if (i <= 5)
    break;
}

Đoạn chương trình này thực hiện đếm ngược từ 10 về 0, nhưng khi đếm về 5 thì biểu thức điều kiện của lệnh if bên trong vòng lặp for đúng, nên chương trình sẽ break vòng lặp for.

Từ khóa break thường được dùng để dừng vòng lặp vô hạn:

bool running = true;
while (true)
{
  // do something on running variable
  if(!running)
    break;
}

Continue

Từ khóa continue thường được sử dụng trong vòng lặp for để chuyển đến bước cuối cùng trong 1 lần lặp (update variable). Cùng nhìn lại 4 bước thực thi cơ bản của 1 lần lặp của vòng lặp for:

(1) Initialize loop variables

(2) Check condition expression

(3) Execute the statements

(4) Update variables

Mỗi khi bắt gặp từ khóa continue trong bước (3), chương trình sẽ bỏ qua phần còn lại của bước (3) để chuyển đến thực hiện bước (4), và bắt đầu 1 lần lặp mới từ bước (2).

for (int i = 0; i <= 20; i++)
{
  if (i % 5 == 0)
    continue;
  cout << i << " ";
}

Đoạn chương trình này sẽ in ra tất cả các số nguyên từ 0 đến 20, ngoại trừ các số chia hết cho 5 như 0, 5, 10, 15.

Từ khóa continue ít được sử dụng trong vòng lặp while hoặc do-while bởi một số hạn chế của nó.

int i = 1; // (1)
while (i <= 20) // (2)
{
  if (i % 5 == 0) // (3)
    continue;
  cout << i << " ";
  i++; // (4)
}

Cũng với ví dụ mẫu trên, nhưng được chuyển sang sử dụng cấu trúc của vòng lặp while. Như các bạn thấy, vòng lặp này vẫn thực hiện đủ 4 bước như vòng lặp for ở trên. Nhưng kết quả chỉ in ra được:

1 2 3 4

Và sau đó, vòng lặp này lặp vô hạn vì biến i sẽ không bao giờ được tăng lên nữa sau khi câu lệnh if được thực thi, vì bước (4) đặt trong vòng lặp while được coi như thuộc bước (3) của vòng lặp for. Do đó, khi gặp từ khóa continue, bước 4 của vòng lặp while cũng bị bỏ qua luôn, mà dòng lệnh i++ sẽ không bao giờ được thực thi nữa.

Vì thế mà chúng ta thường xuyên sử dụng vòng lặp for hơn, và cũng thường đặt từ khóa continue trong vòng lặp for hơn.


Tổng kết

break và continue là 2 từ khóa tiêu biểu cho cấu trúc điều khiển Jump mà ngôn ngữ C++ cung cấp. Các bạn nên tránh lạm dụng 2 từ khóa này vì nó dễ gây sai sót cho chương trình.

Lệnh switch case là một cấu trúc điều khiển & rẽ nhánh hoàn toàn có thể được thay thế bằng cấu trúc if else. Tuy nhiên, việc sử dụng switch case sẽ giúp code của chúng ta dễ viết và dễ đọc hơn; Một điều nữa là sử dụng switch case có vẻ như cho hiệu năng tốt hơn so với sử dụng if else. Bạn có thể xem rõ hơn về ưu nhược điểm của dùng lệnh switch case ở phần tài liệu tham khảo

Video hướng dẫn lệnh switch case

Cách hoạt động của cấu trúc switch case

Dưới đây là cú pháp của lệnh switch case:

switch (expression) ​{

case constant1:
  // statements
  break;
case constant2:
  // statements
  break;
.
.
.
default:
  // default statements
}

  • expression phải bắt buộc là giá trị hằng, có thể là biểu thức nhưng kết quả cần là hằng số.
  • Trong đó, expression sẽ được tính toán 1 lần duy nhất và sau đó so sánh với các giá trị của các case.
  • Nếu có 1 case nào đó khớp giá trị, các khối lệnh tương ứng sau case đó sẽ được thực hiện cho tới khi gặp lệnh break. Do đó, nếu chúng ta không sử dụng break thì tất cả các case kể từ case khớp giá trị đều được thực hiện.
  • Case

include <stdio.h>

int main() {

int a, b;  
char opera;  
printf("nNhap phep toan: ");  
scanf("%c", &opera);  
printf("nNhap vao 2 so a, b: ");  
scanf("%d%d", &a, &b);  
switch (opera)  
{  
case '+':  
    printf("%d + %d = %d", a, b, a + b);  
    break;  
case '-':  
    printf("%d - %d = %d", a, b, a - b);  
    break;  
case '*':  
    printf("%d * %d = %d", a, b, a * b);  
    break;  
case '/':  
    if(b == 0){  
        printf("Khong the chia cho 0!");  
    }else{  
        printf("%d / %d = %.2f", a, b, (float)a / b);  
    }  
    break;  
default:  
printf("Khong co phep toan %c!", opera);  
    break;  
}  
} 1 sẽ được thực hiện nếu không có case nào khớp giá trị với expression.

Dưới đây là sơ đồ khối mô tả hoạt động của lệnh switch case:

Bài tập switch case với continue trong c++
Sơ đồ khối của lệnh switch case, nguồn: programiz.com

Bài tập thực hành

/*

Nhập vào 2 số nguyên a, b

Nhập vào phép toán +, -, *, /

Thực hiện tính toán theo phép toán nhập vào với hai số a, b

Ví dụ:

Lời giải tham khảo sử dụng lệnh switch case:

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

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

PS G:c_courcesday_22> .SwitchStatement.exe Nhap phep toan: + Nhap vao 2 so a, b: 2 3 2 + 3 = 52 - 3 = -1 PS G:c_courcesday_22> .SwitchStatement.exe Nhap phep toan: Nhap vao 2 so a, b: 2 3 2 3 = 6

Lệnh goto trong C

Lệnh

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

3 cho phép code của bạn nhảy đến thực hiện ở vị trí

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

4 bất kỳ của chương trình mà không cần nhất định phải theo thứ tự từ trên xuống. Do tính chất nhảy “lung tung” chẳng giống ai nên lệnh

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

3 không được khuyến khích sử dụng.

Cú pháp của lệnh

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

3 như sau:

goto label; ... .. ... ... .. ... label: statement;

Trong đó,

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

4 là một định danh. Hình dưới đây cho thấy code đang chạy nếu gặp lệnh

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

3 sẽ bỏ tiến trình sau nó mà nhảy tới nơi

include <stdio.h>

int main() {

int a, b;
char opera;
printf("nNhap phep toan: ");
scanf("%c", &opera);
printf("nNhap vao 2 so a, b: ");
scanf("%d%d", &a, &b);
switch (opera)
{
case '+':
    printf("%d + %d = %d", a, b, a + b);
    break;
case '-':
    printf("%d - %d = %d", a, b, a - b);
    break;
case '*':
    printf("%d * %d = %d", a, b, a * b);
    break;
case '/':
    if(b == 0){
        printf("Khong the chia cho 0!");
    }else{
        printf("%d / %d = %.2f", a, b, (float)a / b);
    }
    break;
default:
printf("Khong co phep toan %c!", opera);
    break;
}
}

4 để chạy tiếp.