Bài giảng Kỹ thuật lập trình - Chương 04: Cấu trúc rẽ nhánh - Nguyễn Thanh Tùng

nCác ứng dụng hữu ích trong thực tế điều có dùng đến cấu trúc rẽ nhánh

nVí dụ

nBài toán 1: Nhập một ngày (gồm ngày, tháng, năm)

nMột chương trình tốt KHÔNG giả sử ngày, tháng và năm được đọ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ó thể cấu trúc sau đã sử dụng

n

pptx 56 trang xuanthi 27/12/2022 2940
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 04: Cấu trúc rẽ nhánh - Nguyễn Thanh Tùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pptxbai_giang_ky_thuat_lap_trinh_chuong_04_cau_truc_re_nhanh_ngu.pptx

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 04: Cấu trúc rẽ nhánh - Nguyễn Thanh Tùng

  1. Nội dung ◼ Ứng dụng của 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 nhau ◼ Cấu trúc: switch-case ◼ Tổng kết Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 2 © 2016
  2. Ứng dụng của cấu trúc rẽ nhánh ◼ Ví dụ ◼ Bài toán 2: Giải Phương trình bậc 2 (PTB2) ◼ Nếu ứng dụng cho phép nhập các hệ số A, B, C của PTB2 ◼ A và B: không chắc sẽ khác 0 ◼ Phương trình đầu vào chưa chắc đã là bậc 2 hay bậc 1 ◼ => Chương trình có thể có lỗi thực thi khi không kiểm tra xem A và B có khác 0 hay không ◼ => Đã dùng đến cấu trúc rẽ nhánh để kiểm tra điều kiện nói trên Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 4 © 2016
  3. Ứng dụng của cấu trúc rẽ nhánh ◼ Ví dụ ◼ Bài toán 3: Trong ứng dụng về kế toán, xác định thuế suất của một cá nhân ◼ Bảng thuế suất Năm 2016 như bảng (nguồn Kế toán Thiên ứng) ◼ => Thuế suất phải tính từ “thu nhập tính thuế” ◼ Có nhiều trường hợp khác nhau mà áp thuế suất khác nhau ◼ => Dùng cấu trúc rẽ nhánh để xác định “thuế suất” Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 6 © 2016
  4. Câu lệnh & Chương trình ◼ Câu lệnh là gì? ◼ Là một câu chương trình viết bằng ngôn ngữ lập trình ◼ Kết thúc của câu này là dấu chấm phẩy (;) ◼ Tương tự như câu trong ngôn ngữ tự nhiện là dấu chấm (.) ◼ Các loại câu lệnh ◼ Câu lệnh đơn (câu đơn) ◼ Là các câu lệnh đơn giản đã học trước, như: ◼ Câu khai báo biến ◼ Câu lệnh gán ◼ Câu lệnh gọi hàm ◼ V.v Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 8 © 2016
  5. Câu lệnh & Chương trình ◼ Các loại câu lệnh ◼ 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) ◼ chỉ có dấu ; đứng cuối ◼ Vẫn cho phép trong C/C++ nhưng không hữu dụng nhiều Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 10 © 2016
  6. Câu lệnh: if Ý tưởng false : Biểu thức luận lý hoặc phải chuyển đổi sang luận lý được true : một trong các loại câu lệnh: đơn, kép hay rỗng Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 12 © 2016
  7. Câu lệnh: if ◼ Cú pháp: if ( ) if ( ) { //có thể có 1 hay nhiều câu lệnh if ( ) } if ( ) { //có thể có 1 hay nhiều câu lệnh } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 14 © 2016
  8. Câu lệnh: if ◼ Ví dụ ◼ Bài toán kiểm tra ngày, tháng, năm có hợp lệ if( (thang 12) ) exit(1); Chương trình sẽ kết thúc với lỗi khi tháng không hợp lệ Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 16 © 2016
  9. Câu lệnh: if ◼ Ví dụ ◼ Bài toán kiểm tra ngày, tháng, năm có hợp lệ ◼ Cũng có trường hợp người lập trình muốn: nếu dữ liệu (ngày, tháng, năm) không hợp lệ thì sẽ ngày, tháng, và năm chuyển về một ngày đặc biệt nào đó. Ví dụ: 01/01/1970 if( (thang 12) ) ngay = 1; thang = 1; nam = 1970; Sẽ không đúng theo logic nói trên nếu viết như thế này. Vì tháng và năm luôn luôn bị gán vào giá trị đặc biệt bất kể lỗi dữ liệu về tháng hay không Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 18 © 2016
  10. Câu lệnh: if-else Ý tưởng Cách thực hiện câu lệnh if-else: (1)Biểu thức điều kiện được đánh giá để lấy giá trị (2)Nếu giá trị này là true thì chương trình thực thi . Ngược lại thì chương trình thực thi câu lệnh . Chương trình đi đến câu lệnh kế tiếp (sau if-else) khi thực thi xong một trong hai câu lệnh nói trên Lưu ý: chương trình KHÔNG thực hiện cả hai câu lệnh T và F trong BẤT KỲ trường hợp nào Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 20 © 2016
  11. if ( ) { Câu lệnh: if-else // ◼ Cú pháp + phong cách lập trình } else{ if ( ) // else } if ( ) { // } else { // Trường Đại Học Bách Khoa } Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 22 © 2016
  12. Câu lệnh: if-else ◼ Cú pháp + phong cách lập trình if ( ) else Phong cách này chỉ nên dùng khi cả hai câu lệnh là câu đơn giản Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 24 © 2016
  13. Câu lệnh: if-else Ví dụ ◼ Giải Phương trình bậc 2 ◼ Phân tích ◼ Ba trường hợp đó là ◼ (1) Bậc 0: A = 0 và B = 0 ◼ Dựa vào C để biết vô hay vô số nghiệm ◼ (2) Bậc 1: A = 0, B 0 ◼ Giải Phương trình bậc 2 Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 26 © 2016
  14. Câu lệnh: if-else Ví dụ ◼ PTB2: Chương trình C #include #include int main(){ float a, b, c, delta; printf("Nhap vao gia tri cac so a, b, c: \n"); scanf("%f%f%f", &a, &b, &c); delta = b*b - 4*a*c; if(delta < 0) printf("Phuong trinh vo nghiem\n"); else printf("Phuong trinh co it nhat mot nghiem\n"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 28 © 2016
  15. Câu lệnh: if-else lồng nhau Ứng dụng Xét hai trường hợp vô nghiệm và vô số nghiệm được lồng trong cấu trúc lớn hơn: • Kiểm tra (A=0) AND (B=0) Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 30 © 2016
  16. Câu lệnh: if-else lồng nhau Ứng dụng Đầu vào: điểm false false false false diem < 5 diem < 6.5 diem < 8 diem < 9.5 true true true true loai = “G” loai = “XS” loai = “K” loai = “TB” loai = “Y” Đầu ra: loại Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 32 © 2016
  17. Câu lệnh: if-else lồng nhau Cú pháp - có nhiều cách biểu diễn if ( ) else if ( ) else if ( ) else if ( ) else if ( ) else if ( ) else Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 34 © 2016
  18. Câu lệnh: if-else lồng nhau Cú pháp – ví dụ #include #include int main(){ float diem = 8.7f; Phong cách: if(diem < 5.0f) Canh lề thẳng đứng printf("%s", "Yeu"); else if(diem < 6.5f) printf("%s", "Trung Binh"); else if(diem < 8.5f) printf("%s", "Kha"); else if(diem < 9.5f) printf("%s", "Gioi"); else printf("%s", "Xuat sac"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 36 © 2016
  19. Câu lệnh switch-case Ứng dụng ◼ Khi chương trình có một số công việc sẽ được thực thi tương ứng những trường hợp (tình huống) xác định trước. ◼ Số công việc: hữu hạn & đếm được. ◼ Các tình huống: hữu hạn & đếm được ◼ Ví dụ: chương trình quản lý sách ◼ Chương trình cung cấp những menu sau cho người dùng ◼ Đọc dữ liệu từ tập tin ◼ Nhập dữ liệu vào chương trình ◼ Tìm cuốn sách ◼ Lấy danh sách các người mượn chưa trả sách ◼ V.v. ◼ Số các chức năng (công việc) trên là hữu hạn Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 38 © 2016
  20. Câu lệnh switch-case Ý tưởng false false false true true true Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 40 © 2016
  21. Câu lệnh switch-case Cú pháp switch ( ){ case : case : case : default: } switch, case, default: Từ khoá : PHẢI LÀ biểu thức có một trong các kiểu sau đây (1) Các kiểu số nguyên, hoặc dẫn xuất từ nó thông qua typedef (2) Kiểu enum : (i=1, , N), các giá trị có thể của mã trường hợp Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 42 © 2016
  22. Câu lệnh switch-case Cú pháp switch ( ){ case : break; case : case : default: } Trường hợp muốn: khi được thực thi xong thi thoát khỏi cấu trúc switch- case luôn, không thực thi các câu lệnh kế tiếp. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 44 © 2016
  23. Câu lệnh switch-case Cú pháp switch ( ){ case : break; case : break; case : break; } Trường hợp muốn: Muốn mỗi câu lệnh được thực thi với chỉ trường hợp tương ứng. Không có cả phần thực thi mặc nhiên. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 46 © 2016
  24. Câu lệnh switch-case Ví dụ ◼ 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 Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 48 © 2016
  25. Câu lệnh chuyển đổi ◼ Ví dụ break: khiến chương trình chỉ in ra #include tên hành động tương ứng lựa chọn #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 Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 50 © 2016
  26. Kiểu liệt kê và câu lệnh chuyển đổi ◼ 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 Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 52 © 2016
  27. So sánh if – else với switch-case ◼ Tại sao không dùng switch-case cho bài toán phân loại sinh viên theo điểm Điểm không phải kiểu nguyên Đầu vào: điểm diem < 5 false diem < 6.5 false diem < 8 false diem < 9.5 false true true true true loai = “G” loai = “X” loai = “K” loai = “B” loai = “Y” Đầu ra: loại Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 54 © 2016
  28. Tổng kết ◼ Vận dụng được nguyên tắc phân rã bài toán để giải quyết vấn đề ◼ Xem các ví dụ về Giải PTB2 và các ví dụ khác ◼ Hiểu và vận dụng được các câu lệnh điều khiển của C ◼ Nguyên lý của 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 nhau ◼ Câu lệnh switch-case Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 56 © 2016