24/08/2016
Kỹ thuật lập trình
Tuần 2 - Điều khiển chọn
Giáo viên: Hà Đại Dương duonghd@mta.edu.vn
24/08/2016 1
Bài trước …
• Thuật toán được thiết kế dựa trên ba cấu trúc logic về thứ tự thực hiện câu lệnh sau đây: – Tuần tự (Sequential): Các công việc (lệnh) được
thực hiện một cách tuần tự, công việc này nối tiếp công việc kia (từ trên xuống dưới).
– Lựa chọn (Selection) : Lựa chọn một công việc (lệnh)
để thực hiện căn cứ vào một điều kiện nào đó. – Lặp (Repeating): Thực hiện lặp lại một công việc
(lệnh) không hoặc nhiều lần căn cứ vào một điều kiện nào đó.
1
24/08/2016 2
24/08/2016
Nội dung
1. Tuần tự (Sequential) 2. Lệnh if .. else … 3. Lệnh switch 4. Bài tập
24/08/2016 3
Tuần tự (Sequential)
2
24/08/2016 4
24/08/2016
Trên/dưới
• Chương trình
24/08/2016 5
Trước/sau
• Chương trình
3
24/08/2016 6
24/08/2016
Khối lệnh
• Các lệnh nằm giữa cặp dấu { } • Ví dụ
24/08/2016 7
Khối lệnh lồng nhau
• Ví dụ
4
24/08/2016 8
24/08/2016
Khai báo biến
• Trong 1 khối lệnh có thể khai báo biến, ví dụ
• Phạm vi tác động của biến: Trong khối lệnh và
các khối con của nó.
24/08/2016 9
Khai báo biến trùng tên
• Với khai báo biến như ví dụ sau:
• Khối lệnh cha khai báo 4 biến: a, b, c, d • Khối lệnh con khai báo a, b trùng với khối cha • Biến a, b của khối lệnh cha ảnh hưởng thế nào
đến biến a, b của khối lệnh con ???
5
24/08/2016 10
24/08/2016
Điều khiển chọn (Selection)
24/08/2016 11
Yêu cầu xử lý đặt ra
• Lựa chọn 1 trong 2 khả năng.
Ví dụ: Giải phương trình bậc nhất a.x + b = 0 Lựa chọn 1: a 0 -> nghiệm x = -b/a; Lựa chọn 2: a=0 -> vô nghiệm/vô số nghiệm.
• Lựa chọn 1 trong nhiều khả năng:
Ví dụ: Hiển thị thời khóa biểu theo ngày T Lựa chọn 1: T=T2 -> Lịch ngày thứ 2 … Lựa chọn 8: T=CN -> Lịch ngày chủ nhật
6
24/08/2016 12
24/08/2016
Lệnh if ... else …
24/08/2016 13
Ý nghĩa, cú pháp
• Ý nghĩa: Cho phép lựa chọn 1 trong hai khả
năng
• Cú pháp: or
• Trong đó
– if, else: từ khóa – BTLG: là 1 biểu thức logic (cho giá trị đúng hoặc sai)
7
24/08/2016 14
24/08/2016
Dạng 1
• Nếu BTLG có giá trị là đúng (1) thì các lệnh Lệnh 1, Lệnh 2 … được thực hiện
• Và nếu BTLG có giá trị sai (0)
thì không có công việc nào được thực hiện
24/08/2016 15
Dạng 2
• Nếu BTLG có giá trị là đúng (1) thì các lệnh Lệnh 1_1, Lệnh 1_2 … được thực hiện
• Và nếu BTLG có giá trị sai (0)
thì các lệnh Lệnh 2_1, Lệnh 2_2 … được thực hiện
8
24/08/2016 16
24/08/2016
Ví dụ 1
• Số a0 có nghịc đảo là 1/a. Viết chương trình nhập vào số a, in số nghịch đảo của nó ra màn hình.
24/08/2016 17
Ví dụ 2
• Tìm số lớn nhất trong 3 số a, b, c. Yêu cầu: – Trình bày thuật toán (Bài tập trong tuần 1). – Viết chương trình (10 phút)
9
24/08/2016 18
24/08/2016
Ví dụ 3
• In số ngày của tháng trong năm (dương lịch), ví dụ nhập vào tháng 8 thì in ra là 31 (ngày).
• Biết rằng:
– Tháng 1,3,5,7,8,10,12 có 31 ngày – Tháng 4,6,9,11 có 30 ngày – Tháng 2 có 28 hoặc 29 ngày. – Viết chương trình(10 phút)
24/08/2016 19
10
24/08/2016 20
24/08/2016
Ví dụ 4
• Giải hệ bậc nhất
a.x + b.y - c = 0 d.x + e.y - f = 0
– Trình bày thuật toán (Bài tập trong tuần 1). – Viết chương trình (10 phút)
24/08/2016 21
Một số lưu ý …
• Sau if và else nên dùng khối lệnh để tránh
nhầm lẫn. Ví dụ xét đoạn lệnh sau:
so1 = -1, so2 = 2, so3 = 3 a = ???
so1 = 1, so2 = 2, so3 = 3 a = ???
Khi không rõ ràng, mệnh đề else được hiểu là đi với if gần nhất.
11
24/08/2016 22
24/08/2016
Một số lưu ý …
• Sau if và else nên dùng khối lệnh để tránh
nhầm lẫn. Muốn else là của if thứ nhất ta nên dùng khối lệnh như sau:
24/08/2016 23
Một số lưu ý …
• Sai lỗi cú pháp
• Sai lỗi logic
12
24/08/2016 24
24/08/2016
Lệnh switch
24/08/2016 25
Ý nghĩa, cú pháp
• Ý nghĩa: Lựa chọn 1 (1 số )
trong nhiều khả năng.
• Cú pháp: • Trong đó:
– switch, case, break, default:
các từ khóa
– BT: biểu thức nguyên
13
24/08/2016 26
24/08/2016
Tiến trình thực hiện
1. Tính giá trị của BT, gọi là V 2. Nếu V = Hằng_K các lệnh
Lệnh K_1, Lệnh K_2 … được thực hiện đến khi gặp break hoặc kết thúc switch
…
3. Nếu V Hằng_K và có default thì các lệnh Lệnh N+1_1, Lệnh N+1_2 … được thực hiện
24/08/2016 27
Ví dụ 5
• Viết chương trình cho phép:
– Nhập vào 2 số: a, b ; – Một phép toán pt (số học: +, -, *, /); – Tính giá trị của a pt b – Ví dụ: a = 4, b = 7 và pt = ‘+’
thì a pt b = 11
14
24/08/2016 28
24/08/2016
24/08/2016 29
????
• Thay vì nhập vào:
– 2 số a, b và phép pt – rồi tính a pt b
• Có thể nhập vào biểu thức
– a pt b – Ví dụ 3 + 2 (hoặc 3*(2+5) …) – Rồi tính giá trị của biểu thức đó ???
15
24/08/2016 30
24/08/2016
Ví dụ 6
• In số ngày của tháng trong năm (dương lịch), ví dụ nhập vào tháng 8 thì in ra là 31 (ngày).
• Biết rằng:
– Tháng 1,3,5,7,8,10,12 có 31 ngày – Tháng 4,6,9,11 có 30 ngày – Tháng 2 có 28 hoặc 29 ngày. – Viết chương trình dùng switch (10 phút)
24/08/2016 31
16
24/08/2016 32
24/08/2016
Ví dụ 7
• Tên của năm âm lịch được cấu tạo từ hai thành phần là can và chi, ví dụ năm 2010 tương ứng với năm âm lịch là Canh Dần trong đó Canh là can và Dần là chi.
• Có tất cả 10 can là Giáp, Ất, Bính, Đinh, Mậu,
Kỷ, Canh, Tân, Nhâm, Quý
• Và 12 chi là Tí, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ,
Mùi, Thân, Dậu, Tuất, Hợi.
24/08/2016 33
Ví dụ 7 …
• Viết chương trình cho phép nhập vào một
năm dương lịch (ví dụ 2015), hãy đưa ra tên âm lịch tương ứng của năm đó.
• Ví dụ:
– 2016 : Bính Thân – 2017: Đinh Dậu – 2018: Mậu Tuất – …
17
24/08/2016 34
24/08/2016
Ví dụ 7 …
Ý tưởng 1. … 2. … 3. …
24/08/2016 35
Một số lưu ý
• BT: kiểu nguyên • Hằng_1, Hằng_2 …
Hằng_N: kiểu nguyên
18
24/08/2016 36
24/08/2016
Một số lưu ý …
• Đoạn chương trình
Hiển thị thông báo lỗi
24/08/2016 37
Một số lưu ý …
• Khi BT có giá trị bằng Hằng_K, chương trình thực
hiện Lệnh K_1 đến khi gặp break (hoặc kết thúc lệnh switch)
• Chương trình Kết quả
19
24/08/2016 38
24/08/2016
Bài tập
24/08/2016 39
Bài tập
1. Viết chương trình tìm số lớn nhất trong 10 số. 2. Viết chương trình tính giá điện sinh hoạt theo qui tắc nêu ra trong bài tập tuần 1 khi biết số điện tiêu thụ và giá trung bình.
3. Viết chương trình cho biết tên âm lịch (dạng
can/chi) của một năm dương lịch.
20
24/08/2016 40
24/08/2016
Bài tập về nhà
1. Việc khai báo biến a, b của khối lệnh cha ảnh hưởng thế nào đến biến a, b của khối lệnh con trong ví dụ ở sile 10.
2. Nếu không có lệnh fflush(stdin); trong
chương trình của ví dụ 5 (dòng 7) chương trình hoạt động như thế nào? Tại sao?
3. Ký hiệu (float) trong câu lệnh thuong = (float) so1/so2; chương trình của ví dụ 5 (dòng 17) có ý nghĩa gì? Tại sao?
24/08/2016 41
Bài tập về nhà …
4. Viết chương trình cho phép nhập vào tháng/năm, hãy cho biết số ngày của tháng/năm đó trong năm. Biết rằng: – Tháng 2 năm không nhuận có 28 ngày, năm
nhuận có 29 ngày.
– Những năm không chia hết cho 4 hoặc những
năm chẵn thế kỷ nhưng không chia hết cho 400 là năm không nhuận, ví dụ các năm 1996, 2000 là năm nhuận; các năm 1900 hay 2002 không nhuận.
21
24/08/2016 42
24/08/2016
Bài tập về nhà …
5. Viết chương trình tính số ngày tính từ ngày
bắt đầu (NBD) đến ngày kết thúc (NKT). Ví dụ NBD = 1/8/2016 và NKT = 20/8/2016 thì số ngày tính được là 20 (NBD=1/8/1916 và NKT = 1/8/2016 thì số ngày là ????).
6. A, B, C và M là các điểm trên mặt phẳng. Viết chương trình kiểm tra xem M có nằm trong tam giác ABC hay không?
22
24/08/2016 43