Bài giảng Kỹ thuật lập trình - Chương 4: Cấu trúc rẽ nhánh - Trần Quang

Câu lệnh  Câu lệnh là một câu viết bằng ngôn ngữ lập trình. Kết thúc câu lệnh là dấu chấm phẩy (;)  Các loại câu lệnh  Câu lệnh đơn (câu đơn)  Ví dụ: câu khai báo biến, câu lệnh gán,  Câu lệnh phức (câu phức)  Nhiều câu lệnh được đặt trong cặp ngoặc { }  Cạu lệnh thuộc cấu trúc điều khiển như: if, ifelse, switch, for, while, do while  Câu lệnh rỗng:  Chỉ có dấu ; đứng cuối

pdf32 trang | Chia sẻ: thanhle95 | Lượt xem: 479 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật lập trình - Chương 4: Cấu trúc rẽ nhánh - Trần Quang, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Trần Quang © 2016 Kỹ thuật lập trình 1 Chương 04: Cấu trúc rẽ nhánh Chương 04 CẤU TRÚC RẼ NHÁNH CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 2 Chương 04: Cấu trúc rẽ nhánh Nội dung  Đặt vấn đề  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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 3 Chương 04: Cấu trúc rẽ nhánh Đặt vấn đề Bài toán 1: nhập một ngày (gồm ngày, tháng, năm)  Một chương trình tốt không được giả sử người dùng phải nhập đúng ngày, tháng, năm (đã thuộc miền giá trị cho phép)  Để kiểm tra trường hợp nhập sai tháng, ta có thể sử dụng cấu trúc: if ( (tháng 12) ) // Xử lý lỗi với tháng nhập sai endif CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 4 Chương 04: Cấu trúc rẽ nhánh Đặt vấn đề Bài toán 2: Giải phương trình bậc 2  Chương trình cần yêu cầu nhập các hệ số A, B, C  Tuy nhiên A và B nhập vào không chắc sẽ khác 0 -> có thể suy biến về phương trình bậc 1  Dùng cấu trúc rẽ nhánh để kiểm tra các điều kiện nói trên CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 5 Chương 04: Cấu trúc rẽ nhánh Câu lệnh  Câu lệnh là một câu viết bằng ngôn ngữ lập trình. Kết thúc câu lệnh là dấu chấm phẩy (;)  Các loại câu lệnh  Câu lệnh đơn (câu đơn)  Ví dụ: câu khai báo biến, câu lệnh gán,  Câu lệnh phức (câu phức)  Nhiều câu lệnh được đặt trong cặp ngoặc { }  Cạu lệnh thuộc cấu trúc điều khiển như: if, if- else, switch, for, while, do while  Câu lệnh rỗng:  Chỉ có dấu ; đứng cuối CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 6 Chương 04: Cấu trúc rẽ nhánh Chương trình  Chương trình là một danh sách tuyến tính (có thứ tự) của các câu lệnh (đơn, phức, )  Mặc định máy tính sẽ thực hiện lần lượt từ câu đầu tiên đến câu lệnh cuối cùng.  Trừ khi gặp các cấu trúc điều khiển như:  Rẽ nhánh  if, if-else, switch  Lặp  for, while, do while CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 7 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if  Cú pháp: if () if () if () { } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 8 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if true false : Biểu thức luận lý hoặc phải chuyển đổi sang luận lý được : một trong các loại câu lệnh đơn, kép hay rỗng CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 9 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if  Cú pháp + phong cách lập trình: if () { //có thể có 1 hay nhiều câu lệnh } if () if () if () { //có thể có 1 hay nhiều câu lệnh } TAB TAB CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 10 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else  Cú pháp: if () else CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 11 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else : Biểu thức luận lý hoặc phải chuyển đổi sang luận lý được , : một trong các loại câu lệnh đơn, kép hay rỗng true false CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 12 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else  Cú pháp + phong cách lập trình if () { //... } else { //... } if () else if () { //... } else { //... } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 13 Chương 04: Cấu trúc rẽ nhánh Cần phân rã các công việc con trong đó để có giải thuật hoàn thiện CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 14 Chương 04: Cấu trúc rẽ nhánh Giải Phương trình bậc 2 #include #include void main(){ float a, b, c, delta; printf("Nhap vao gia tri cac so a, b, c: \n"); scanf("%f%f%f", &a, &b, &c); if(a == 0) { // giai phuong trinh bac 1 } else { delta = b*b - 4*a*c; if(delta < 0) // tiep tuc giai phuong trinh bac 2 ... } getch(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 15 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else lồng nhau Bài toán: xếp loại học sinh dựa theo điểm  Yếu: điểm thuộc [0, 5]  Trung bình: điểm thuộc [5, 6.5)  Khá: điểm thuộc [6.5, 8)  Giỏi: điểm thuộc [8, 9.5)  Xuất sắc: điểm thuộc [9.5, 10] CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 16 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else lồng nhau diem < 5 diem < 6.5 diem < 8 diem < 9.5 Đầu vào: điểm loai = “Y” loai = “TB” loai = “K” loai = “G” loai = “XS” true true true true false false false false Đầu ra: loại CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 17 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else lồng nhau Có nhiều cách biểu diễn if () else if () else if () else if () else if () else if () else CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 18 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else lồng nhau if () else if () else if () else if () else if () else if () else CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 19 Chương 04: Cấu trúc rẽ nhánh Câu lệnh: if-else lồng nhau #include #include void main(){ float diem = 8.7f; if(diem < 5.0f) 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"); getch(); } Phong cách: Canh lề thẳng đứng CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 20 Chương 04: Cấu trúc rẽ nhánh Biểu thức điều kiện ? : Cú pháp : ? : nếu đúng thì trả về , ngược lại trả về Ví dụ: lệnh if (hours > 40) rate = 0.45; else rate = 0.02; có thể thay bằng : rate = (hours > 40) ? 0.45 : 0.02; CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 21 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case Ví dụ: chương trình quản lý sách  Chương trình cung cấp menu các chức năng cho người dùng chọn  Người dùng chọn một mục của menu  Chương trình thực hiện khối công việc tương ứng với menu đã chọn => Phù hợp cấu trúc switch-case CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 22 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case Cú pháp: switch (){ case : case : ... case : default: <câu lệnh mặc nhiên> } switch, case, default: Từ khoá : là biểu thức thuộ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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 23 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case true true true false false false CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 24 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case  Chương trình kiểm tra xem trường hợp nào xảy ra trong các trường hợp được liệt kê: , , ..,  Nếu trường hợp thứ i xảy ra (i = 1 .. N):  Thực hiện lần lượt các câu lệnh từ i đến N, kể cả câu lệnh  Nếu gặp lệnh break; thì chương trình thoát khỏi cấu trúc switch-case  Nếu không có trường hợp nào xảy ra thì chương trình thực thi câu lệnh và thoát khỏi cấu trúc switch-case CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 25 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case switch (){ case : case : case : case : default: } Trường hợp muốn: được thực thi cho cả 3 trường hợp 1,2, và 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 26 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case 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. switch (){ case : break; case : case : default: } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 27 Chương 04: Cấu trúc rẽ nhánh Câu lệnh switch-case Trường hợp muốn: Muốn mỗi câu lệnh thực thi với chỉ trường hợp tương ứng switch (){ case : break; case : break; case : break; default: } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 28 Chương 04: Cấu trúc rẽ nhánh Ví dụ #include #include void 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"); } getch(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 29 Chương 04: Cấu trúc rẽ nhánh Ví dụ #include #include void 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"); } getch(); } break: khiến chương trình chỉ in ra tên hành động tương ứng lựa chọn CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 30 Chương 04: Cấu trúc rẽ nhánh Sử dụng kiểu liệt kê (enum) #include #include enum THop {DongY, TuChoi, ChuaQuyetDinh}; void main(){ enum THop 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"); } getch(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 31 Chương 04: Cấu trúc rẽ nhánh So sánh if - else với switch  không dùng switch-case cho bài toán xếp loại sinh viên theo điểm vì điểm không phải kiểu số nguyên  Câu lệnh switch có thể được biểu diễn lại bằng một trình tự các câu lệnh if-else  Một số trường hợp switch-case tường minh và dễ hiểu hơn.  Tất cả các cấu trúc điều khiển có thể được biểu diễn lại bằng các câu lệnh if-else và các câu lệnh goto (Với sự hỗ trợ của các nhãn) CuuDuongThanCong.com https://fb.com/tailieudientucntt Trần Quang © 2016 Kỹ thuật lập trình 32 Chương 04: Cấu trúc rẽ nhánh Tổng kết  Đặt vấn đề  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 CuuDuongThanCong.com https://fb.com/tailieudientucntt
Tài liệu liên quan