Top 11 # Xem Nhiều Nhất Trình Bày Cấu Trúc Rẽ Nhánh Switch Mới Nhất 3/2023 # Top Like | Comforttinhdauthom.com

Cấu Trúc Rẽ Nhánh Switch

1. Mô tả cấu trúc rẽ nhánh switch – case.

Cấu trúc rẽ nhánh switch – case cho phép bạn lựa chọn một trong nhiều phương án có khả năng xảy ra, nó có thể dùng dể thay thế cho cấu trúc điều khiển if - else if - else mà tôi đã trình bày trong bài cấu trúc điều khiển if – else trong Java.

Vậy khi nào chúng ta nên sử dụng cấu trúc rẽ nhánh switch – case thay thế cho cấu trúc điều khiển if - else if - else? Khi mà chúng ta có số trường hợp cần xử lý lớn hơn 3 thì khi đó chúng ta nên sử dụng switch - case để dễ dàng kiểm tra và xử lý, giúp cho chương trình dễ quan sát hơn.

switch (biểu_thức) { case giá_trị_1: Lệnh 1; break; case giá_trị_2: Lệnh 2; break; ... case giá_trị_n: Lệnh n; break; [default: Lệnh 0;] }

trong đó:

Biểu_thức phải trả về kết quả là một số nguyên, chuỗi hoặc một ký tự.

Giá_trị_1, giá_trị_2,..., giá_trị_n là các biểu thức hằng, nguyên hoặc ký tự và chúng phải khác nhau.

Lệnh 1, Lệnh 2, ..., Lệnh n, Lệnh 0 là các lệnh trong thân của switch. Các bạn thấy sau mỗi lệnh này chúng ta có từ khóa break;, từ khóa này có thể có hoặc không có tùy theo từng trường hợp.

Cách thức hoạt động của switch – case như sau:

Đầu tiên, chương trình sẽ so sánh giá trị của biểu_thức với các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n. Nếu trong các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n có giá trị nào bằng với giá trị của biểu_thức thì chương trình sẽ bắt đầu thực hiện các lệnh tương ứng nằm trong case của giá trị đó cho đến khi gặp một lệnh break đầu tiên thì thoát ngay khỏi switch, bỏ qua các case (trường hợp) còn lại và thực hiện lệnh đầu tiên nằm ngay sau cấu trúc này. Nếu giá trị của biểu_thức không bằng với bất kỳ giá trị nào trong danh sách giá_trị_1, giá_trị_2 ... giá_trị_n thì Lệnh 0 sẽ được thực hiện nếu có thành phần default.

Lưu đồ hoạt động:

Dạng 1 là cấu trúc switch có sử dụng từ khóa default, còn dạng 2 là cấu trúc switch không sử dụng từ khóa default.

Lưu ý:

Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu }) (vì chưa gặp break coi như chưa ra khỏi lệnh switch).

Khi sử dụng lệnh switch có thể xảy ra nhiều giá trị trả về cho một trường hợp (một khả năng xảy ra của biểu thức).

2. Ví dụ switch đơn giản.

Chúng ta có ví dụ sau: Nhập vào một số nguyên từ 1 – 12 từ bàn phím và hiển thị ra tháng tương ứng với số đó ( nhập vào số 1 thì sẽ hiển thị ra là “Tháng 1”.

package cau_truc_switch_case; import java.util.Scanner; public class HienThiThangTuongUng { public static void main(String[] args) { int thang; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): "); thang = scanner.nextInt(); switch (thang) { case 1: System.out.println("Tháng 1"); break; case 2: System.out.println("Tháng 2"); break; case 3: System.out.println("Tháng 3"); break; case 4: System.out.println("Tháng 4"); break; case 5: System.out.println("Tháng 5"); break; case 6: System.out.println("Tháng 6"); break; case 7: System.out.println("Tháng 7"); break; case 8: System.out.println("Tháng 8"); break; case 9: System.out.println("Tháng 9"); break; case 10: System.out.println("Tháng 10"); break; case 11: System.out.println("Tháng 11"); break; case 12: System.out.println("Tháng 12"); break; default: System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12."); } } }

Kết quả sau khi biên dịch chương trình:

Nếu bạn nhập vào tháng 14 thì chương trình sẽ hiển thị kết quả như sau:

Giải thích hoạt động của chương trình trên:

Khi chương trình được thực thi, tôi nhập vào số 4 thì chương trình sẽ nhận thấy số 4 đó ứng với giá trị tại chỉ thị case 4 nên chương trình sẽ chạy tới case 4, sau đó thực hiện lệnh bên trong case này – đó là hiển thị ra màn hình dòng thông báo “Tháng 4“.

Giả sử sau đó tôi nhập vào số 14 thì chương trình sẽ nhận thấy nó khác với các giá trị từ 1 đến 12, không ứng với bất kỳ giá trị tại chỉ thị case nào nên trường hợp mặc định (ứng với nhãn default) được làm. Vì vậy, dòng thông báo “Số nhập vào phải nằm trong khoảng từ 1 đến 12” sẽ được hiển thị.

Giả sử tôi sửa đoạn chương trình trên thành như sau:

package cau_truc_switch_case; import java.util.Scanner; public class HienThiThangTuongUng { public static void main(String[] args) { int thang; String thangTuongUng = ""; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): "); thang = scanner.nextInt(); switch (thang) { case 1: thangTuongUng = "Tháng 1"; case 2: thangTuongUng = "Tháng 2"; case 3: thangTuongUng = "Tháng 3"; case 4: thangTuongUng = "Tháng 4"; case 5: thangTuongUng = "Tháng 5"; case 6: thangTuongUng = "Tháng 6"; case 7: thangTuongUng = "Tháng 7"; case 8: thangTuongUng = "Tháng 8"; break; case 9: thangTuongUng = "Tháng 9"; break; case 10: thangTuongUng = "Tháng 10"; break; case 11: thangTuongUng = "Tháng 11"; break; case 12: thangTuongUng = "Tháng 12"; break; default: System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12."); } System.out.println(thangTuongUng); } }

Sau khi biên dịch thì chương trình sẽ hiển thị kết quả như sau:

Các bạn thấy tôi nhập vào số 1 nhưng kết quả hiển thị ra là tháng 8. Các bạn biết vì sao không? Như tôi đã nói ở trên, ” Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu })“, vì vậy khi bạn nhập vào số 1 thì chương trình sẽ lần lượt gán các giá trị tháng tương ứng cho chuỗi thangTuongUng và khi chạy đến case 8 thì lúc này chuỗi thangTuongUng sẽ có giá trị là ” Tháng 8” và sau đó gặp lệnh break nên sẽ kết thúc lệnh switch này và hiển thị giá trị ” Tháng 8” ra màn hình.

3. Ví dụ switch có nhiều giá trị trả về cho một trường hợp.

Các bạn theo dõi ví dụ sau: Viết chương trình nhập vào 1 số nguyên, nếu:

Số nhập vào là 0 thì thông báo “Số 0“.

Số nhập vào là 1, 2 thì thông báo “Số nhỏ“.

Số nhập vào là 3, 4, 5 thì thông báo “Số trung bình“.

Số nhập vào lớn hơn 5 thì thông báo “Số lớn“.

Chúng ta sẽ làm ví dụ này như sau:

package cau_truc_switch_case; import java.util.Scanner; public class HienThiChuoiSoTuongUng { public static void main(String[] args) { int number; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số bất kỳ: "); number = scanner.nextInt(); switch (number) { case 0: System.out.println("Số 0"); break; case 1: case 2: System.out.println("Số nhỏ"); break; case 3: case 4: case 5: System.out.println("Số trung bình"); break; default: System.out.println("Số lớn"); } } }

Kết quả sau khi biên dịch chương trình:

Các bạn thấy trong đề bài trên chúng ta có 3 trường hợp số 3, 4, 5 cùng có kết quả chung là ” Số trung bình“, vì vậy 3 trường hợp này chỉ dùng chung một chỉ thị break. Chẳng hạn khi số nhập vào là 3: chương trình chạy tới case 3, sau đó chạy tiếp và hiển thị dòng thông báo ” Số trung bình” ra màn hình và chỉ nhảy khỏi cấu trúc switch khi gặp chỉ thị break ở dòng 26.

4. Lời kết.

Cấu Trúc Rẽ Nhánh Switch Case Trong C#

Dẫn nhập

Cấu trúc rẽ nhánh có 2 loại, ở bài CẤU TRÚC RẼ NHÁNH IF – ELSE TRONG C# chúng ta đã tìm hiểu loại đầu tiên. Và hôm nay chúng ta sẽ tìm hiểu loại còn lại – Cấu trúc rẽ nhánh Switch case trong C# .

Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

Cấu trúc switch case dạng thiếu và dạng đủ.

Ví dụ chương trình sử dụng cấu trúc switch case.

Cấu trúc switch case dạng thiếu và dạng đủ

Dạng thiếu

Cú pháp:

Trong đó:

switch, case là từ khóa bắt buộc.

break là một lệnh nhảy

Ý nghĩa của nó là thoát ra khỏi cấu trúc, vòng lặp chứa nó (khái niệm về vòng lặp sẽ được trình bày ở bàiCẤU TRÚC LẶP GOTO TRONG C#)

Ngoài break ra vẫn còn lệnh nhảy khác như goto nhưng ít được sử dụng (chi tiết về lệnh goto sẽ được trình bày trong bàiCẤU TRÚC LẶP GOTO TRONG C#).

Vì trong cấu trúc switch. . . case chủ yếu chỉ sử dụng lệnh break nên mình cố tình để lệnh break vào trong cú pháp thay vì ghi chung chung là lệnh nhảy.

Ký tự hoặc chuỗi (char, string)

Kiểu liệt kê (enum, sẽ được trình bày trong bài ENUM TRONG LẬP TRÌNH C# )

Nếu case đang xét không rỗng (có lệnh để thực hiện) thì bắt buộc phải có lệnh nhảy (cụ thể là lệnh break) sau đó.

int k = 8; switch (k) { case 3: Console.WriteLine("HowKteam"); break;

Lưu đồ sau sẽ minh họa cho các bạn cách thức hoạt động của cấu trúc switch. . . case dạng thiếu:

Chú ý là trường hợp không có lệnh break như trong hình đồng nghĩa với việc case đó rỗng (không có câu lệnh thực hiện).

Đối với case cuối cùng dù có câu lệnh để thực hiện hay không vẫn phải có lệnh break để thoát khỏi cấu trúc.

int k = 10; switch (k)

Kết quả khi chạy chương trình trên là:

Dạng đủ

Cú pháp:

Trong đó:

switch, case, default là từ khóa bắt buộc.

Ký tự hoặc chuỗi (char, string)

Kiểu liệt kê (enum, sẽ được trình bày trong bài ENUM TRONG LẬP TRÌNH C#)

Lưu đồ sau sẽ minh họa cách thức hoạt động của cấu trúc switch. . . case. . . default. . . :

Về cơ bản cách thức hoạt động của 2 cấu trúc switch. . . case dạng đủ và dạng thiếu là như nhau, chỉ khác nhau ở một diểm là dạng đủ có thêm dòng default. . . (tương tự là lệnh else trong bài CẤU TRÚC RẼ NHÁNH IF ELSE) nên các bạn xem lại lưu ý của dạng thiếu để tránh mắc lỗi.

int k = 8; switch (k) { case 3: Console.WriteLine("HowKteam"); break; case 9: Console.WriteLine("Kteam"); break; case 10: Console.WriteLine("Free Education"); break; default:

Kết quả khi chạy chương trình trên là:

Vì không tìm thấy case nào có giá trị bằng với giá trị biến k nên sẽ thực hiện câu lệnh trong default. Do đó màn hình in ra ” Connecting to HowKteam. . . “.

Ví dụ chương trình sử dụng cấu trúc switch case

Ví dụ: Viết chương trình tính năm âm lịch từ năm dương lịch đã nhập.

Thuật toán tính năm âm lịch:

Năm âm lịch = Can + Chi. Vì thế cần tính được Can và Chi sau đó ghép lại là xong.

Tính Can bằng cách:

Tìm phần dư của phép chia năm dương lịch cho 10.

Tra bảng sau để tìm ra Can tương ứng

Tìm Chi bằng cách:

Tìm phần dư của phép chia năm dương lịch cho 12.

Tra bảng sau để tìm ra Chi tương ứng:

Nối Can và Chi lại để được kết quả.

Các bạn tham khảo đoạn chương trình sau:

int Year;

Kết quả khi chạy chương trình trên là:

Ở ví dụ trên mình đã bỏ qua việc kiểm tra dữ liệu nhập vào có đúng hay không nên các bạn có thể áp dụng kiến thức đã học để thực hiện (tham khảo ví dụ trong CẤU TRÚC RẼ NHÁNH IF ELSE TRONG C#).

Bài tập tham khảo

Tương tự phần bài tập của bài CẤU TRÚC RẼ NHÁNH IF ELSE TRONG C# nhưng sử dụng cấu trúc Switch case.

Kết luận

Nội dung bài này giúp các bạn nắm được:

Cấu trúc switch case dạng thiếu và dạng đủ.

Viết chương trình sử dụng cấu trúc switch case.

Bài học sau chúng ta sẽ cùng tìm hiểu một khái niệm tiếp theo đó là KIỂU DỮ LIỆU OBJECT TRONG C#.

Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Cấu trúc rẽ nhánh Switch case trong C# dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện chúng tôi để nhận được sự hỗ trợ từ cộng đồng.

Cấu Trúc Rẽ Nhánh Switch … Case Trong Ngôn Ngữ C++

C/C++ cung cấp cho chúng ta 1 số cấu trúc rẽ nhánh cho chương trình trong đó có switch … case để giải quyết các logic.

switch so sánh 1 biểu thức nguyên với 1 danh sách giá trị các số nguyên, các hằng kí tự hoặc biểu thức hằng. Mỗi giá trị trong danh sách chính là 1 case (trường hợp) trong khối lệnh của switch.

Trong khối lệnh switch còn có thể có 1 default case (trường hợp mặc định) có thể có hoặc không. Mặt khác, trong mỗi trường hợp còn chứa các khối lệnh chờ được thực thi.

Cú pháp của cấu trúc rẽ nhánh switch…case

Muốn sử dụng cấu trúc switch … case, sử dụng cú pháp sau:

switch (expression) { case constant_1: { Statements; break; } case constant_2: { Statements; break; } . . . case constant_n: { Statements; break; } default: { Statements; } }

Ví dụ:

using namespace std;

int main() { int month; cout << “Month: ” << endl;

switch (month) { case 1: { cout << “January” << endl; break; } case 2: { cout << “February” << endl; break; } case 3: { cout << “March” << endl; break; } case 4: { cout << “April” << endl; cout << “April 2” << endl; break; } case 5: { cout << “May” << endl; break; } case 6: { cout << “June” << endl; break; } case 7: { cout << “July” <<endl; break; } case 8: { cout << “August” << endl; break; } case 9: { cout << “September” << endl; cout << “September 2” << endl; break; } case 10: { cout << “October” << endl; break; } case 11: { cout << “November” << endl; break; } case 12: { cout << “December” << endl; break; } default: { cout << “Input is false” << endl; } }

return 0; }

Nguyên tắc hoạt động cấu trúc switch…case

Biểu thức nguyên trong switch được tính toán và kiểm tra lần lượt với giá trị của từng case.

Đầu tiên, nó sẽ được so sánh với giá trị của case đầu tiên, nếu bằng nhau thì sẽ thực hiện các lệnh (statement) trong case này cho đến khi nó gặp được từ khoá break.

Ngược lại, nếu như giá trị biểu thức nguyên không bằng giá trị case đầu tiên thì nó sẽ tiếp tục so sánh đến giá trị của case thứ hai và tiếp tục thực hiện như những bước trên. Giả sử, đến cuối cùng vẫn không tìm được giá trị bằng nó thì các khối lệnh trong default sẽ được thực hiện nếu như có tồn tại default.

Khi cấu trúc switch … case kết thúc, chương trình sẽ thực hiện tiếp những dòng lệnh sau cấu trúc switch … case.

Ta có sơ đồ hoạt động của cấu trúc switch… case như sau:

Sơ đồ cấu trúc switch … case

1 số lưu ý khi dùng cấu trúc rẽ nhánh chúng tôi

Các giá trị của mỗi case phải cùng kiểu dữ liệu với giá trị của biểu thức được so sánh.

Số lượng các case là không giới hạn nhưng chỉ có thể có duy nhất 1 default.

Giá trị của các case là 1 hằng số và các giá trị của các case phải khác nhau.

Từ khóa break có thể sử dụng hoặc không.

Nếu không được sử dụng thì chương trình sẽ không kết thúc cấu trúc switch … case khi đã thực hiện hết khối lệnh của case đó. Thay vào đó, nó sẽ thực hiện tiếp các khối lệnh tiếp theo cho đến khi gặp từ khoá break hoặc dấu } cuối cùng của cấu trúc switch … case. Vì vậy, các bạn có thể sử dụng 1 khối lệnh cho nhiều trường hợp khác nhau.

Ví dụ:

using namespace std;

int main() { int month, day; cout << “Month: ” << endl;

switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { day = 30; break; } case 4: case 6: case 9: case 11: { day = 31; break; } default: { day = 28; } }

return 0; }

Bài 9: Cấu Trúc Rẽ Nhánh

1. Cấu trúc rẽ nhánh

– Xét các ví dụ sau:

VD1: Chiều mai nếu trời không mưa thì Hùng đến nhà Tâm để học nhóm.

VD2: Chiều mai nếu trời không mưa thì Hùng đến nhà Tâm để học nhóm, nếu trời mưa thì Hùng gọi điện cho Tâm trao đổi.

– Nhận xét: Các mênh đề rẽ nhánh thường có dạng:

Nếu…..Thì……. → Đây là cách diễn đạt dạng thiếu

Nếu……Thì……Nếu không thì…… → cách diễn đạt dạng đủ

– Ví dụ: Thuật toán giải và biện luận phương trình bậc nhất ax + b = 0

Bước 1: Nhập a, b

Ngược lại → bước 3

Ngược lại thông báo phương trình vô số nghiệm.

Bước 4: Đưa x ra màn hình.

2. Cấu trúc if….. then….. (dạng thiếu)

– Cấu trúc: – Sơ đồ khối:

– Hoạt động:

Bước 1: Tính giá trị của biểu thức điều kiện.

Bước 2: Kiểm tra giá trị của biểu thức điều kiện

Nếu biểu thức điều kiện có giá trị đúng thì thực hiện câu lệnh sau từ khoá THEN, rồi thoát ra khỏi câu lệnh IF, chuyển sang câu lệnh tiếp theo.

Nếu biểu thức điều kiện có giá trị sai thì thoát ra khỏi câu lệnh IF và chuyển đến thực hiện lệnh tiếp theo.

3. Cấu trúc if….. then….. else….. (dạng đủ)

– Cấu trúc:

– Trong đó:

IF, THEN, ELSE là từ khoá

Điều kiện: Là biểu thức Logic hoặc biểu thức quan hệ.

– Sơ đồ khối: – Hoạt động:

Bước 1: Tính giá trị của biểu thức điều kiện.

Bước 2: Kiểm tra giá trị của biểu thức điều kiện

Nếu biểu thức điều kiện có giá trị đúng thì thực hiện câu lệnh sau từ khoá THEN, rồi thoát ra khỏi câu lệnh IF, chuyển đến thực hiện lệnh tiếp theo.

Nếu biểu thức điều kiện có giá trị sai thì thực hiện câu lệnh 2 sau từ khóa ELSE, rồi thoát ra khỏi câu lệnh IF, chuyển đến thực hiện lệnh tiếp theo.

4. Câu lệnh ghép

a. Định nghĩa

– Khi sau THEN và sau ELSE có từ 2 câu lệnh trở lên ta phải ghép chúng lại thành một nhóm nằm giữa 2 từ khoá BEGIN và END.

– Trong đó:

BEGIN, END là từ khoá

câu lệnh 1, câu lệnh 2, … câu lệnh n là các câu lệnh đơn bất kỳ.

c. Ví dụ

– Ví dụ 1: Tìm nghiệm của phương trình bậc 2: ax 2 + bx + c = 0 với a(ne)0

– Ví dụ 2: Chương trình tìm nghiệm của phương trình bậc nhất ax + b = 0

* Lưu ý:

– Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh ghép lớn hơn bao ngoài của nó và có thể hiểu tương tự như cấu trúc ngoặc đơn ( ) trong các biểu thức toán học.