02/09/2016
Kỹ thuật lập trình
Tuần 4 - Điều khiển lặp (tiếp)
Giáo viên: Hà Đại Dương
02/09/2016
1
Nội dung
1.
2.
3.
4.
5.
Lệnh for
Lệnh while
Lệnh do - while
Lệnh break và lệnh continue
Bài tập
02/09/2016
2
1
02/09/2016
Bài trước …
• Các lệnh lặp:
for
while
02/09/2016
3
Lệnh do - while
02/09/2016
4
2
02/09/2016
Ý nghĩa
• Lặp lại một cơng việc nào đó khi điều kiện
logic cịn thỏa mãn.
• The do-while statement lets you repeat a statement
or compound statement until a specified expression
becomes false.
02/09/2016
5
Cú pháp
• Trong đó:
– do, while: từ khóa
– BTLG: Biểu thức logic
02/09/2016
6
3
02/09/2016
Trình tự thực hiện
1. Thực hiện các các lệnh: Lệnh 1, Lệnh 2 …
2. Tính giá trị của BTLG, V:
– Nếu V = đúng (1) quay lại bước 1
– Nếu V = sai (0) kết thúc vòng lặp và chuyển đến
lệnh tiếp sau do-while
02/09/2016
7
Ví dụ 1
• In các số từ 1 đến 10 ra màn hình
02/09/2016
8
4
02/09/2016
Ví dụ 2
• Tính USCLN của 2 số
– Xem lại cách tính ở ví dụ 6 tuần 3
– Viết chương trình sử dụng lệnh do-while (10 phút)
02/09/2016
9
• So sánh với cách dùng lệnh while
– Kết quả thực hiện với a = 3, b =6: USCLN = 3
– Khi n = 0 vấn đề gì xảy ra với 2 chương trình trên.
02/09/2016
10
5
02/09/2016
Ví dụ 3
• Viết chương trình cho phép hiển thị mã ASCII
của ký tự vừa gõ trên bàn phím. Chương trình
kết thúc khi nhấn phím Enter.
– Xem lại cách làm trong ví dụ 9 tuần 3
– Viết chương trình sử dụng lệnh do-while (10 phút)
02/09/2016
11
• So sánh:
– Hoạt động đáp
ứng yếu cầu
– Dùng do-while
“đẹp” hơn while
khi không phải
gán ch=‘~’
02/09/2016
12
6
02/09/2016
Một số lưu ý
• Các lệnh trong thân vịng lặp ln được thực
hiện ít nhất 1 lần (khác với for và while).
• Các lệnh của vịng lặp (Lệnh 1, Lệnh 2 …) phải
làm biến đổi BTLG, nếu khơng vịng lặp có thể
thực hiện mãi mãi.
02/09/2016
13
Nhận xét chung về các lệnh lặp
• Có thể sử dụng for, while và do-while cho
cùng một bài tốn.
• Cần kiểm tra điều kiện trước khi thực hiện:
nên dùng while (ví dụ 2)
• Khi cần kiểm tra điều kiện sau khi thực hiện
một số việc (thuộc vịng lặp) nên dùng dowhile (ví dụ 3)
02/09/2016
14
7
02/09/2016
Lệnh break và lệnh continue
02/09/2016
15
Vấn đề
• Nếu khơng có u cầu “bất thường” thì các
lệnh lặp for, while, do-while như đã học có thể
giải quyết được vấn đề đặt ra.
• Khi có u cầu “bất thường”, ví dụ Tính tổng
các số lẻ chia hết cho 3.
• Giải quyết:
– Theo cách thông thường: được
02/09/2016
16
8
02/09/2016
Tổng các số lẻ chia hết cho 3
02/09/2016
17
Tổng các số lẻ chia hết cho 3
• Nếu việc kiểm tra
(i%3==0) rất mất
thời gian
• Nên chăng:
– Chỉ kiểm tra
(i%3==0) với các
số lẻ.
– Với các số chẵn
khơng cần làm gì
cả.
02/09/2016
18
9
02/09/2016
Lệnh continue
• Cú pháp:
continue;
• Ý nghĩa: Cho phép chuyển đến vịng lặp tiếp
theo và bỏ qua các lệnh sau nó đến cuối vịng
lặp.
• Ví dụ: Tính tổng các số lẻ chia hết cho 3.
(debug để xem trình tự thực hiện)
02/09/2016
19
(debug để xem trình tự thực hiện)
Ví dụ 4
02/09/2016
20
10
02/09/2016
Một số lưu ý
• Dùng continue có thể tránh được việc thực thi
các lệnh không cần thiết (tăng tốc độ thực
hiện)
• Chỉ dùng trong thân các vịng lặp for, while,
do-while.
02/09/2016
21
Một số lưu ý …
• Chương trình: lỗi cú pháp
02/09/2016
22
11
02/09/2016
Lệnh break
• Tình huống bất thường, ví dụ:
– Tìm số nguyên nhỏ nhất chia hết cho 3, 5 và 7.
– Kiểm tra xem số nguyên N có phải số nguyên tố?
• Cú pháp:
break;
• Ý nghĩa: Kết thúc vịng lặp tức thời.
02/09/2016
23
Ví dụ 5
• Xét ví dụ: Tìm số ngun nhỏ nhất chia hết
cho 3, 5 và 7.
– Tìm trong giới hạn các số nguyên (int)
– Chỉ cần tìm 1 số duy nhất -> Nếu tìm thấy có thể
kết thúc ngay lập tức việc tìm kiểm.
– Kết thúc ngay khi tìm được 1 số.
02/09/2016
24
12
02/09/2016
Ví dụ 5 …
02/09/2016
25
Ví dụ 6
• Tìm số ngun nhỏ nhất chia hết cho 3, 5 và 7;
dùng các lệnh continue và break.
• Thời gian: 10 phút
02/09/2016
26
13
02/09/2016
Ví dụ 6 …
02/09/2016
27
Ví dụ 7
• Kiểm tra xem số ngun N có phải số ngun
tố?
• Cách làm:
– Gọi m là số các số từ 2 đến N-1 (???) mà N chia
hết.
– Nếu m = 0 -> N là số nguyên tố.
02/09/2016
28
14
02/09/2016
Ví dụ 7 …
• Kiểm tra xem số ngun N có khơng phải số
ngun tố?
• Cách làm:
– Gọi m là số các số từ 2 đến N-1 (???) mà N chia
hết.
– Nếu m >= 1 -> N không là số ngun tố.
02/09/2016
29
Ví dụ 7 …
• Kiểm tra xem số ngun N có khơng phải số
ngun tố?
• Cách khác:
– Tồn tại 1 số từ 2 đến N-1 mà N chia hết ->N khơng
là số ngun tố.
– Viết chương trình (10 phút)
02/09/2016
30
15
02/09/2016
Một số lưu ý
• Lệnh break được dùng trong các vịng lặp for,
while, do-while, và lệnh switch.
• Chương trình: lỗi cú pháp
02/09/2016
31
Bài tập
02/09/2016
32
16
02/09/2016
Bài tập
1. Sử dụng lệnh do-while viết chương trình tính
USCLN của hai số.
2. Một số nguyên dương chia hết cho 3 nếu
tổng các chữ số của nó chia hết cho 3. Viết
chương trình sử dụng do-while kiểm tra xem
một số có chia hết cho 3 hay khơng?.
3. Viết chương trình sử dụng do-while kiểm tra
xem một số có phải là nguyên tố hay không?
02/09/2016
33
Bài tập
4. In ra tất cả các số nguyên tố từ 1 đến N.
5. Số Hạnh phúc là số mà khi viết theo chiều
ngược lại có giá trị bằng chính nó, ví dụ 232,
4554 là số hạnh phúc. Viết chương trình kiểm
tra xem 1 số có phải là số hạnh phúc hay
không?
6. Biểu diễn một số từ hệ cơ số 10 thành số ở
hệ cơ số 2, 8 và 16.
02/09/2016
34
17
02/09/2016
Bài tập về nhà
1. Đo thời gian và so sánh thời gian thực hiện
chương trình ví dụ 5 và ví dụ 6. Giải thích
nguyên nhân.
2. Để kiểm tra N (N>2) có phải số ngun tố hay
khơng? thì cần kiểm tra N chia hết hay không
cho các số từ 2 đến bao nhiều là ít nhất?
02/09/2016
35
18