Slide 1 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 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ệ[.]
Trang 1Trầ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
Trang 3Trầ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)
dùng phải nhập đúng ngày, tháng, năm (đã thuộc miền giá trị cho phép)
sử dụng cấu trúc:
if ( (tháng < 0) hoặc (tháng > 12) )
// Xử lý lỗi với tháng nhập sai
endif
Trang 4Đặt vấn đề
Bài toán 2: Giải phương trình bậc 2
-> có thể suy biến về phương trình bậc 1
nói trên
Trang 5Trầ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
if-else, switch, for, while, do … while
Câu lệnh rỗng:
Trang 6Chương trình
tự) của các câu lệnh (đơn, phức, …)
đầu tiên đến câu lệnh cuối cùng.
Trang 7Trầ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
if (<biểu thức điều kiện>) <câu lệnh>
if (<biểu thức điều kiện>)
Trang 8lý được
<câu lệnh> : một trong các loại câu lệnh đơn, kép hay rỗng
<biểu thức điều kiện>
Trang 9Trần Quang
© 2016
Kỹ thuật lập trình
9 Chương 04: Cấu trúc rẽ nhánh
if (<biểu thức điều kiện>) <câu lệnh>
if (<biểu thức điều kiện>)
Trang 11Trầ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 điều kiện> : Biểu thức luận lý hoặc phải chuyển đổi sang luận lý được
<câu lệnh T>,
<câu lệnh T> : một trong các loại câu lệnh đơn, kép hay rỗng
Trang 12<câu lệnh đơn/kép khi sai>
//
<câu lệnh đơn/kép khi sai>
}
if (<biểu thức điều kiện>)
<câu lệnh đơn khi đúng>
else
<câu lệnh đơn khi sai>
if (<biểu thức điều kiện>) {
<câu lệnh đơn/kép khi đúng>
Trang 13Trầ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
Trang 14printf( "Nhap vao gia tri cac so a, b, c: \n" );
scanf( "%f%f%f" , &a, &b, &c);
Trang 15Trầ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
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]
Trang 16Câu lệnh: if-else lồng nhau
Đầu vào: điểm
loai = “K” loai = “G” loai = “XS”
Đầu ra: loại
Trang 17Trầ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 (<biểu thức điều kiện 1>) <Câu lệnh thực thi 1>
else if (<biểu thức điều kiện 2>) <Câu lệnh thực thi 2>
else if (<biểu thức điều kiện 3>) <Câu lệnh thực thi 3>
else <Câu lệnh thực thi 4>
if (<biểu thức điều kiện 1>)
Trang 18Câu lệnh: if-else lồng nhau
if (<biểu thức điều kiện 1>) <Câu lệnh thực thi 1>
else if (<biểu thức điều kiện 2>) <Câu lệnh thực thi 2>
else if (<biểu thức điều kiện 3>) <Câu lệnh thực thi 3>
else <Câu lệnh thực thi 4>
if (<biểu thức điều kiện 1>)
Trang 19Trầ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
Phong cách:
Canh lề thẳng đứng
Trang 20Biểu thức điều kiện ? :
Cú pháp :
<điều kiện> ? <giá trị 1> : <giá trị 2>
nếu <điều kiện> đúng thì trả về <giá trị 1>, ngược lại trả về <giá trị 2>
Trang 21Trầ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
người dùng chọn
với menu đã chọn
=> Phù hợp cấu trúc switch-case
Trang 22switch, case, default: Từ khoá
< mã trường hợp >: 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
Trang 23Trần Quang
© 2016
Kỹ thuật lập trình
23 Chương 04: Cấu trúc rẽ nhánh
Trang 24Câu lệnh switch-case
các trường hợp được liệt kê: <case 1>, <case 2>, ,
<case N>
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 <mặc nhiên>
trúc switch-case
thực thi câu lệnh <mặc nhiên> và thoát khỏi cấu trúc
switch-case
Trang 25Trần Quang
© 2016
Kỹ thuật lập trình
25 Chương 04: Cấu trúc rẽ nhánh
Trang 26Câu lệnh switch-case
Trường hợp muốn:
<câu lệnh 1> 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.
Trang 27Trầ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 (< mã trường hợp >){
case < mã 1 >: <câu lệnh 1> break;
case < mã 2 >: <câu lệnh 2> break;
case < mã N >: <câu lệnh N> break;
default : <câu lệnh mặc nhiên>
}
Trang 29Trần Quang
© 2016
Kỹ thuật lập trình
29 Chương 04: Cấu trúc rẽ nhánh
Trang 30Sử dụng kiểu liệt kê (enum)
#include <stdio.h>
#include <conio.h>
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();
Trang 31Trần Quang
© 2016
Kỹ thuật lập trình
31 Chương 04: Cấu trúc rẽ nhánh
viên theo điểm vì điểm không phải kiểu số nguyên
một trình tự các câu lệnh if-else
hiểu hơn.
diễn lại bằng các câu lệnh if-else và các câu lệnh