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
                
              
                                            
                                
            
                       
            
                 32 trang
32 trang | 
Chia sẻ: thanhle95 | Lượt xem: 850 | Lượt tải: 1 
              
            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