Viết Cấu Trúc Rẽ Nhánh / Top 10 # Xem Nhiều Nhất & Mới Nhất 5/2023 # Top View | Nhatngukohi.edu.vn

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 Trong Java

Dẫn nhập

Sau khi tìm hiểu các khái niệm cơ bản về một ngôn ngữ lập trình. Bây giờ ta sẽ tìm hiểu điều cơ bản nhất trong lập trình là Cấu trúc rẽ nhánh .

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 sau:

Bài này chúng ta sẽ tìm hiểu những vấn đề sau:

Cấu trúc rẽ nhánh là gì? Phân loại

Cách sử dụng cấu trúc rẽ nhánh

Lời khuyên

Cấu trúc rẽ nhánh là gì? Phân loại

Trong lập trình, có những lúc ta cần phân chia các trường hợp và mỗi hoàn cảnh sẽ thực hiện những đoạn chương trình khác nhau. Như vậy dựa vào điều kiện ta sẽ rẽ nhánh cho chương trình chạy câu lệnh tương ứng.

Phân loại: Có 2 loại cấu trúc rẽ nhánh là dạng thiếu và dạng đủ

Dạng thiếu: Nếu biến age trên 18 thì ta sẽ in ra ‘Bạn đã đủ tuổi để đăng kí’.

Dạng đủ: Nếu biến age trên 18 thì ta sẽ in ra ‘Bạn đã đủ tuổi để đăng kí’, ngược lại thì in ra là ‘Bạn chưa đủ tuổi để đăng kí’

Cách sử dụng cấu trúc rẽ nhánh

Cấu trúc rẽ nhánh dạng thiếu

public class HelloWorld{ public static void main(String []args){ String s = "Kteam"; if (s == "Kteam") System.out.print("How Kteam"); } }

Cấu trúc rẽ nhánh dạng đủ

Dạng đủ sẽ chia ra 2 loại: Gồm if..else.. và if..else if..else..

Dạng if..else..

Dạng chúng tôi if..else

Đây là dạng cấu trúc rẽ nhiều nhánh nếu ta muốn xét nhiều trường hợp để thực hiện rõ ràng hơn.

public class HelloWorld{ public static void main(String []args){ String job = "Sinh viên"; if (job == "Học sinh") System.out.print("Bạn còn lứa tuổi học sinh"); else if (job == "Sinh viên") System.out.print("Sinh viên có thể tham gia"); else System.out.print("Không rõ công việc của bạn"); } }

Lưu ý: Nếu câu lệnh thực hiện gồm nhiều câu lệnh thì ta phải để vào trong cặp { }

Lời khuyên

Có thể không cần thực hiện nhưng những lời khuyên sau đây gần như là " Luật bất thành văn " trong lập trình cấu trúc rẽ nhánh không riêng ngôn ngữ Java.

Luôn dùng cặp { } và thụt lề dòng code vào trong

Mặc dù cặp { } chỉ dùng cho nhóm câu lệnh, nhưng việc sử dụng { } sẽ giúp ta dễ sửa đổi trong trường hợp sau này tao muốn thêm câu lệnh khác. Ngoài ra, ta sử dụng thụt lề để dễ nhìn hơn.

Không nên đưa câu lệnh chúng tôi trong chúng tôi quá nhiều lần

Có những trường hợp các bạn viết như thế này

Việc đưa quá nhiều câu rẽ nhánh vào trong trong câu rẽ nhánh là điều tối kị trong lập trình. Nó giống như tạo nhiều đường mê cung vậy. Có những lúc bạn sẽ không rõ vì sao kết quả trả về như vậy. Đặc biệt là khi có bug phát sinh. Lời khuyên là bạn nên để 1-2 câu điều kiện bên trong là hợp lý.

Kết

Như vậy chúng ta đã tìm hiểu cấu trúc rẽ nhánh trong Java

Ở bài sau, Kteam sẽ giới thiệu đến bạn về VÒNG LẶP WHILE TRONG JAVA

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 trong Java 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.

Bài 4. Cấu Trúc Rẽ Nhánh (If)

Cấu trúc rẽ nhánh (câu lệnh if)

Cấu trúc này được dùng khi một lệnh hay một khối lệnh chỉ được thực hiện khi một điều kiện nào đó thoả mãn.

Cú pháp:

– Cấu trúc if đơn:

if (bieu thuc dieu kien) { khối lệnh;... }

– Cấu trúc if - else:

if (bieu thuc dieu kien) { Khối lệnh 1;...; } else { Khối lệnh 2;...; }

– Cấu trúc if rẽ nhiều nhánh: Sau else có thể là một câu lệnh if khác.

– Cấu trúc if lồng nhau: trong trường hợp khối lệnh chính là cấu trúc if khác.

Ví dụ 1:

+ Yêu cầu: Nhập vào 3 số nguyên. In ra màn hình số lớn nhất, nhỏ nhất.

+ Code: 

using namespace std; int main() { int a, b, c; cout<<“n Nhap 3 so: “; cout<<“n a = “; cout<<“n b = “; cout<<“n c = “; int max = a; if (max<b) max = b; if (max<c) max = c; cout<<“n Max: “<<max; int min = a; cout<<“n Min: “<<min; return 0; }

Ví dụ 2:

+ Yêu cầu: Giải phương trình bậc nhất 1 ẩn ax + b = 0, với a, b nhập vào từ bàn phím. Tìm nghiệm thực?

+ Code:

using namespace std; int main() { float a, b; cout<<“n Nhap he so: “; cout<<“n a = “; cout<<“n b = “; if (a==0) if (b==0) cout<<“n Phuong trinh vo so nghiem”; else cout<<“n Phuong trinh vo nghiem”; else { float x = -b/a; cout<<“n Phuong trinh co 1 nghiem x = “<<x; } return 0; }

Ví dụ 3:

+ Yêu cầu: Giải và biện luận nghiệm thực của phương trình bậc 2 một ẩn ax^2 + bx +c = 0, với a, b, c nhập vào từ bàn phím.

+ Code:

using namespace std; int main() { float a, b, c; cout<<“n Nhap he so: “; cout<<“n a = “; cout<<“n b = “; cout<<“n c = “; if (a==0) if (b==0) if (c==0) cout<<“n Phuong trinh vo so nghiem”; else cout<<“n Phuong trinh vo nghiem”; else { float x = -c/b; cout<<“n Phuong trinh co 1 nghiem x= “<<x; } else { float delta = b*b-4*a*c; if(delta<0) cout<<“n Phuong trinh vo nghiem”; if(delta=0) cout<<“n Phuong trinh co nghiem kep, x1=x2= “<<-b/(2*a); { float x1 = (-b-(float)sqrt(delta))/(2*a); float x2 = (-b+(float)sqrt(delta))/(2*a); cout<<“n Phuong trinh co 2 nghiem, x1 = “<<x1<<“; x2 = “<<x2; } } return 0; }

Ví dụ 4:

+ Yêu cầu: Tính điểm cho sinh viên:

– Nhập vào điểm: điểm toán rời rạc (3 tín chỉ); điểm lập trình (4 tín chỉ); điểm cơ sở dữ liệu (3 tín chỉ)

– Tính điểm tổng kết.

– In kết quả điểm chữ (A,B,C,D,F) của điểm toán rời rạc.

+ Code:

using namespace std; int main() { float dTRR, dLT, dCSDL; cout<<“n Nhap diem: “; cout<<“n Diem toan roi rac: “; cout<<“n Diem lap trinh: “; cout<<“n Diem co so du lieu: “; float dTK dTK = (dTRR*3+dLT*4+dCSDL*3)/10; cout<<“n Diem tong ket: “<<dTK; char dChu; if(dTRR<4) dChu = ‘F’; else if (dTRR<5.5) dChu = ‘D’; else if (dTRR<7.0) dChu = ‘C’; else if (dTRR<8.5) dChu = ‘B’; else dChu = ‘A’; cout<<“n Diem chu: “<<dChu; 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.