KỸ THUẬT LẬP TRÌNH C
Chương 4: Cấu trúc lặp
04/2010
Khái niệm vòng lặp
• Một công việc nào đó ñược thực hiện
lặp đi lặp lại nhiều lần
• Ví dụ
– In ra màn hình các số từ 1 đến 10, mỗi số
trên một dòng
• Giải pháp đơn giản
– printf(“1\n”);
– printf(“2\n”);
–…
– printf(“10\n”);
• Giải pháp tổng quát
– Lặp i chạy từ 1 tới 10
printf(“%d\n”, i);
Kỹ thuật lập trình C - Cấu trúc lặp
2
04/2010
quay trở lại bước 2 ñể bắt
đầu các bước lặp mới.
Kỹ thuật lập trình C - Cấu trúc lặp
FALSE
TRUE
4
04/2010
Lặp dạng for
• Biểu thức 1: Thường là 1 phép gán để khởi tạo giá trị ban ñầu cho
biến điều khiển
• Biểu thức 2: Thường là 1 biểu thức điều kiện
• Biểu thức 3: Cũng là 1 phép gán để thay ñổi giá trị biến điều khiển
Kỹ thuật lập trình C - Cấu trúc lặp
5
04/2010
• Khi biểu thức 2 vắng mặt thì nó ñược xem
là ñúng (vòng lặp vô hạn).
– Để thoát khỏi lệnh for trong trường hợp này
phải dùng lệnh break hoặc return
• Có thể sử dụng các lệnh for lồng nhau.
Kỹ thuật lập trình C - Cấu trúc lặp
8
04/2010
Lặp dạng for
1. Tính TBC các số lẻ ≤ N
2. Tìm ước số chung lớn nhất (UCLN) của 2
số a, b
3. Kiểm tra xem số N có phải là số nguyên
tố không?
4. Số tiền nhiều nhất 1 người tham gia “Đấu
trường 100” có thể ñạt được là bao nhiêu
?
5. Hiển thị tất cả các số nguyên tố ≤ N
6. In ra màn hình tam giác cân độ cao N
gồm toàn các dấu ‘*’ có dạng bên
Kỹ thuật lập trình C - Cấu trúc lặp
Do lập trình viên đặt tên
int
a[100];
//a là mảng biểu diễn dãy gồm 100 số nguyên int
Kỹ thuật lập trình C - Cấu trúc lặp
11
04/2010
Kiểu array – ví dụ
#define
SIZE
10
int
a[5];
// a dãy gồm 5 số nguyên
long int big[100]; // big: chiếm 400 bytes!
double d[100];
// d: chiếm 800 bytes!
long double
v[SIZE];
// v:10 long doubles
2 thành phần đầu tiên
được khởi tạo, phần
còn lại: 0
int
i = 7;
const int c = 5;
int
a[i];
double
d[c];
short
primes[];
Kỹ thuật lập trình C - Cấu trúc lặp
12
04/2010
Kiểu array – Lưu ý
• Các thành phần của mảng được truy xuất thông qua chỉ
số của chúng 0..n-1
• Thao tác truy xuất không kiểm tra giới hạn của chỉ số
int
int main()
main()
}}
a
59
0
1
2
2
3
4
-10
5
Kỹ thuật lập trình C - Cấu trúc lặp
13
04/2010
Kiểu array – Thao tác cơ sở
Giới hạn chỉ
số mảng ?
Kỹ thuật lập trình C - Cấu trúc lặp
15
04/2010
Lặp dạng while
• Lệnh lặp while
– Cú pháp
while (biểu thức)
khối lệnh cần lặp;
– Ý nghĩa
• Trong khi biểu thức có giá trị ñúng (khác 0) thì còn
phải thực hiện khối lệnh. Việc lặp dừng lại khi biểu
thức có giá trị sai (bằng 0).
• Lặp while kiểm tra điều kiện trước khi thực hiện
khối lệnh.
– Hãy vẽ sơ ñồ khối biểu diễn lệnh while
Kỹ thuật lập trình C - Cấu trúc lặp
16
04/2010
Lặp dạng while – Ví dụ
• Cú pháp
do
khối lệnh;
while (biểu thức);
• Ý nghĩa
– Thực hiện khối lệnh trong khi biểu thức có giá trị ñúng (khác
0)
– Thực hiện khối lệnh trước khi kiểm tra biểu thức điều kiện
– Khối lệnh được thực hiện ít nhất 1 lần
• Hãy vẽ sơ ñồ khối biểu diễn lệnh do … while
Kỹ thuật lập trình C - Cấu trúc lặp
19
04/2010
Lặp do…while - ví dụ
Kỹ thuật lập trình C - Cấu trúc lặp
20
04/2010
phím nhận 1 mã x
– Nếu phím bị nhấn là phím điều khiển
bộ ñệm
bàn phím tiếp nhận 2 mã liên tiếp ( x và 0 )
• Hàm getch() sẽ ñọc các ký tự có trong bộ
đệm theo thứ tự ngược với thứ tự ñưa vào.
Kỹ thuật lập trình C - Cấu trúc lặp
22
04/2010
Kỹ thuật bắt phím
Bước 1: Kiểm tra bộ ñệm bàn phím xem có
phím nào bị nhấn không kbhit()
Bước 2: Nếu hàm kbhit() trả về giá trị ≠ 0
2.1. Bắt phím lần 1: key1 = getch();
2.2. Kiểm nếu tra key1 == 0
• Sai: xử lý ñối với trường hợp phím thường
• Đúng: Bắt phím lần 2: key2 = getch();
xử lý trường hợp phím điều khiển.
Kỹ thuật lập trình C - Cấu trúc lặp
Phím sang trái ←
0/77
Phím sang phải →
27
Phím ESC
0/59
Phím F1
0/60
Phím F2
0/83
Phím Delete
0/73
Phím PgUp
0/81
Phím PgDn
– Thực hiện lần lặp mới mà không ñi hết các lệnh
còn lại trong thân vòng lặp
Kỹ thuật lập trình C - Cấu trúc lặp
26
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp
27