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 |
Chia sẻ: thanhle95 | Lượt xem: 616 | 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