Chương 04 CẤU TRÚC RẼ NHÁNH Lê Thành Sách Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Nội dung n n n n n n n Ứng dụng cấu trúc rẽ nhánh Câu lệnh & Chương trình Cấu trúc: if Cấu trúc: if-else Cấu trúc: if-else lồng Cấu trúc: switch-case Tổng kết Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Ứng dụng cấu trúc rẽ nhánh n n Các ứng dụng hữu ích thực tế điều có dùng đến cấu trúc rẽ nhánh Ví dụ n Bài toán 1: Nhập ngày (gồm ngày, tháng, năm) n Một chương trình tốt KHÔNG giả sử ngày, tháng năm đọc vào thuộc miền giá trị cho phép n Để khắc phục trường hợp lỗi với tháng, cấu trúc sau sử dụng if ( (tháng < 0) (tháng > 12) ) - Xử lý lỗi với tháng endif Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Ứng dụng cấu trúc rẽ nhánh n Ví dụ n Bài toán 2: Giải Phương trình bậc (PTB2) n Nếu ứng dụng cho phép nhập hệ số A, B, C PTB2 n A B: không khác n Phương trình đầu vào chưa bậc hay bậc n n => Chương trình có lỗi thực thi không kiểm tra xem A B có khác hay không => Đã dùng đến cấu trúc rẽ nhánh để kiểm tra điều kiện nói Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Ứng dụng cấu trúc rẽ nhánh n Ví dụ n Bài toán 3: Trong ứng dụng kế toán, xác định thuế suất cá nhân n Bảng thuế suất Năm 2016 bảng (nguồn: Kế toán Thiên ứng) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Ứng dụng cấu trúc rẽ nhánh n Ví dụ n Bài toán 3: Trong ứng dụng kế toán, xác định thuế suất cá nhân n Bảng thuế suất Năm 2016 bảng (nguồn Kế toán Thiên ứng) n n => Thuế suất phải tính từ “thu nhập tính thuế” n Có nhiều trường hợp khác mà áp thuế suất khác => Dùng cấu trúc rẽ nhánh để xác định “thuế suất” Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Ứng dụng cấu trúc rẽ nhánh n Ví dụ n Bài toán 4: Hiện thực cách tương tác người sử dụng cho phần mềm (có giao diện đồ hoạ hay không) n Chương trình phải lắng nghe kiện xảy ứng dụng n Có giao diện đồ hoạ: n Sự kiện, chuột trái, phải, giữa, chọn menu A, menu B, v.v n Trên console n Đó mã công việc (con số, chữ) nhập vào n Chương trình phải thực công việc khác tương ứng với kiện hay mã công việc n => Cần đến cấu trúc rẽ nhánh (switch, có nhiều trường hợp) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Câu lệnh & Chương trình n n Câu lệnh gì? n Là câu chương trình viết ngôn ngữ lập trình n Kết thúc câu dấu chấm phẩy ( ) n Tương tự câu ngôn ngữ tự nhiện dấu chấm (.) ; Các loại câu lệnh n Câu lệnh đơn (câu đơn) n Là câu lệnh đơn giản học trước, như: n Câu khai báo biến n Câu lệnh gán n Câu lệnh gọi hàm n V.v Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Câu lệnh & Chương trình n Các loại câu lệnh n n Câu lệnh đơn (câu đơn) Câu lệnh phức (câu phức) n Một danh sách câu lệnh thực Đánh dấu danh sách cặp dấu: { } { } n // Các cấu trúc điều khiển (if, if-else, switch, for, while, … while) xem câu lệnh phức Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Câu lệnh & Chương trình n Các loại câu lệnh n n n Câu lệnh đơn (câu đơn) Câu lệnh phức (câu phức) Câu lệnh rỗng (câu rỗng) n có dấu ; đứng cuối n Vẫn cho phép C/C++ không hữu dụng nhiều Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 10 Câu lệnh switch-case Cú pháp switch (){ case : case : case : default: } switch, case, default: Từ khoá : : (i=1, , N), giá trị mã trường hợp Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 42 Câu lệnh switch-case Cú pháp switch (){ case : case : case : case : default: } Trường hợp muốn: thực thi cho trường hợp 1,2, Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 43 Câu lệnh switch-case Cú pháp switch (){ case : break; case : case : default: } Trường hợp muốn: thực thi xong thi thoát khỏi cấu trúc switchcase luôn, không thực thi câu lệnh Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 44 Câu lệnh switch-case Cú pháp switch (){ case : break; case : break; case : break; default: } Trường hợp muốn: Muốn câu lệnh thực thi với trường hợp tương ứng Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 45 Câu lệnh switch-case Cú pháp switch (){ case : break; case : break; case : break; } Trường hợp muốn: Muốn câu lệnh thực thi với trường hợp tương ứng Không có phần thực thi Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 46 Câu lệnh switch-case Ví dụ n Bài toán: n n Chương trình nhận lựa chọn từ người dùng n Các lựa chọn n Ý nghĩa số chưa cần lúc In lựa chọn người dùng n Có thể thay chức in khối công việc sau Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 47 Câu lệnh switch-case Ví dụ n Ví dụ #include #include int main(){ int luachon; printf("Nhap vao lua chon: \n"); scanf("%d", &luachon); switch (luachon){ case 1: printf("Truong hop 1\n"); printf("Hanh dong 1\n"); case 2: printf("Truong hop 2\n"); printf("Hanh dong 2\n"); default: printf("Hanh dong mac dinh\n"); } return 0; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 48 Câu lệnh switch-case Ví dụ n Ví dụ Chương trình in tên hai hành động Vì lệnh break; #include #include int main(){ int luachon; printf("Nhap vao lua chon: \n"); scanf("%d", &luachon); switch (luachon){ case 1: printf("Truong hop 1\n"); printf("Hanh dong 1\n"); case 2: printf("Truong hop 2\n"); printf("Hanh dong 2\n"); default: printf("Hanh dong mac dinh\n"); } return 0; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 49 Câu lệnh chuyển đổi n Ví dụ break: khiến chương trình in tên hành động tương ứng lựa chọn #include #include int main(){ int luachon; printf("Nhap vao lua chon: \n"); scanf("%d", &luachon); switch (luachon){ case 1: printf("Truong hop 1\n"); printf("Hanh dong 1\n"); break; case 2: printf("Truong hop 2\n"); printf("Hanh dong 2\n"); break; default: printf("Hanh dong mac dinh\n"); } return 0; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 50 Câu lệnh switch-case Ví dụ n Một ví dụ khác menu: n Có sử dụng enum Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 51 Kiểu liệt kê câu lệnh chuyển đổi n Ví dụ #include #include enum Luachon {DongY, TuChoi, ChuaQuyetDinh}; int main(){ enum Luachon luachon; printf("Nhap vao lua chon cua ban \n"); printf("0 Ban dong y \n"); printf("1 Ban tu choi \n"); printf("2 Ban chua co quyet dinh \n"); scanf("%d", &luachon); switch (luachon){ case DongY: printf("Ban dong y\n"); break; case TuChoi: printf("Ban tu choi y\n"); break; case ChuaQuyetDinh:printf("Ban chua co quyet dinh\n"); break; default: printf("Ban khong nhap lua chon dung\n"); } return 0; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 52 Câu lệnh switch-case Bài tập n Bài toán: Quản lý kho hàng n n n Có chức n Nhập hàng hoá n Lưu hàng hoá n Đọc hàng hoá từ tập tin n V.v Chương trình in menu chờ người dùng chọn (nhập từ bàn phím) Với lựa chọn n In tên chức chọn nói n Sinh viên phát triển chức đầy đủ sau Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 53 So sánh if – else với switch-case n Tại không dùng switch-case cho toán phân loại sinh viên theo điểm Điểm kiểu nguyên Đầu vào: điểm diem < false true diem < 6.5 true false diem < true loai = “K” loai = “Y” false diem < 9.5 false true loai = “G” loai = “X” loai = “B” Đầu ra: loại Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 54 So sánh if – else với switch n n n Câu lệnh switch biểu diễn lại trình tự câu lệnh if-else Một số trường hợp switch tường minh dễ hiểu Tất cấu trúc điều khiển biểu diễn lại câu lệnh if-else câu lệnh goto (Với hỗ trợ nhãn) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 55 Tổng kết n Vận dụng nguyên tắc phân rã toán để giải vấn đề n n Xem ví dụ Giải PTB2 ví dụ khác Hiểu vận dụng câu lệnh điều khiển C n n n Nguyên lý việc thực thi có điều kiện Câu lệnh if-else, câu lệnh điều kiện lồng Câu lệnh switch-case Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 56