• 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);
14 trang |
Chia sẻ: lylyngoc | Lượt xem: 1696 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Kỹ thuật lập trình C Chương 4: Cấu trúc lặp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
bangtqh@hotmail.com
KỸ THUẬT LẬP TRÌNH C
Chương 4: Cấu trúc lặp
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 2bangtqh@hotmail.com
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);
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 3bangtqh@hotmail.com
Lặp dạng for
– Cú pháp
for([B.Thức 1]; [B.thức 2]; [B.Thức 3])
;
• Các phần trong cặp dấu “[” và “]” là không bắt buộc
• Các dấu “;” và cặp ngoặc “(” và “)” bắt buộc phải có
– Ví dụ:
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 4bangtqh@hotmail.com
Lặp dạng for
Các bước hoạt động:
1.Tính B.Thức 1.
2.Tính B.Thức 2.
• Nếu sai thoát vòng lặp.
• Nếu đúng ñi vào thực hiện
việc cần lặp
3.Tính B.Thức 3, sau đó
quay trở lại bước 2 ñể bắt
đầu các bước lặp mới.
FALSE
TRUE
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 5bangtqh@hotmail.com
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
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 6bangtqh@hotmail.com
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 7bangtqh@hotmail.com
NSTính 3...963 ++++=
Vòng lặp chạy
ngược từ N trở
về 1
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 8bangtqh@hotmail.com
Lặp dạng for
• Nhận xét
– Biểu thức 1 chỉ ñược tính một lần
– Biểu thức 2, biểu thức 3 và khối lệnh trong
thân lệnh for ñược lặp đi lặp lại nhiều lần
– Dựa các giá trị khởi tạo biến điều khiển, ñiều
kiện lặp và biểu thức 3 có thể tính được số lần
lặp.
• 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.
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 9bangtqh@hotmail.com
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
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 10bangtqh@hotmail.com
Kiểu array – mng
• Mảng là một kiểu dữ liệu có cấu trúc do
người lập trình định nghĩa
• Dùng biểu diễn các đối tượng dữ liệu ở dạng
một dãy các thành phần có cùng kiểu với
nhau (kiểu cơ sở)
• NNLT C luôn chỉ ñịnh một khối nhớ liên tục
cho một biến kiểu mảng
• Kích thước của mảng ñược xác định ngay
khi khai báo và không bao giờ thay ñổi
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 11bangtqh@hotmail.com
Khai báo array trong C
kiểucơsở TênBiến[Sốphầntử];
kiểu của mỗi thành phần hằng số, số thành phần
tối đa của mảng
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
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 12bangtqh@hotmail.com
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
int a[5] = { 10, 20, 30, 40, 50};
double d[100] = { 1.5, 2.7};
short primes[] = { 1, 2, 3, 5, 7, 11, 13};
long b[50] = { 0 };
cách nhanh nhất để khởi tạo
tất cả các thành phần bằng 0
Trình biên dịch xác định kích
thước gồm 7 thành phần
int i = 7;
const int c = 5;
int a[i];
double d[c];
short primes[];
2 thành phần đầu tiên
được khởi tạo, phần
còn lại: 0
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 13bangtqh@hotmail.com
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 main()
{
int a[6];
int i = 7;
a[0] = 59;
a[5] = -10;
a[i/2] = 2;
a[6] = 0;
a[-1] = 5;
return 0;
}
int main()
{
int a[6];
int i = 7;
a[0] = 59;
a[5] = -10;
a[i/2] = 2;
a[6] = 0;
a[-1] = 5;
return 0;
}
0
a
1
2
3
4
5
59
-10
2
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 14bangtqh@hotmail.com
Kiểu array – Thao tác cơ sở
Giới hạn chỉ
số mảng ?
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 15bangtqh@hotmail.com
Lặp dạng for
1. Tính TBC các số lẻ trong dãy số a1,
a2,…,aN
2. Tìm giá trị min/max trong dãy a1, a2,…,aN
3. Đếm xem trong dãy a1, a2,…,aN có bao
nhiêu số nguyên tố ?
4. Cho dãy điểm M1(x1, y1), M2(x2,
y2),…,Mn(xn, yn) trên mặt phẳng. Hãy:
• Tìm độ dài đường gấp khúc M1M2..Mn
• Tìm đoạn MiMj (i≠j) có ñộ dài lớn nhất
• Đếm xem có bao nhiêu ñoạn cắt trục 0y
• Có bao nhiêu ñiểm thuộc góc phần tư thứ
nhất.
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 16bangtqh@hotmail.com
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
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 17bangtqh@hotmail.com
Lặp dạng while – Ví dụ
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 18bangtqh@hotmail.com
Lặp dạng while – Lưu ý
• Nhận xét
– Biểu thức điều kiện luôn dược đặt trong cặp dấu
“(” và “)”
– Biểu thức điều kiện sẽ ñược tính toán đầu tiên
nên phải có giá trị xác định
• Câu lệnh sau làm gì ?
while(0) printf(“nothing\n”);
• Hãy chuyển lệnh for dạng tổng quát thành
lệnh while
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 19bangtqh@hotmail.com
Lặp dạng do…while
• 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
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 20bangtqh@hotmail.com
Lặp do…while - ví dụ
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 21bangtqh@hotmail.com
Lặp while và do…while
1. Viết chương trình nhập vào số nguyên
N. Hãy in ra màn hình biểu diễn của nó
ở dạng nhị phân (Binary)
2. Viết chương trình tìm phần tử ñầu tiên
trong dãy a1, a2,…,an thỏa mãn: bằng
tổng các phần tử ñứng trước nó.
3. Viết lại chương trình kiểm tra xem số N
có nguyên tố hay không bằng cách sử
dụng do…while
4. Chuyển đoạn mã lệnh dạng do…while
thành dạng while
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 22bangtqh@hotmail.com
Kỹ thuật bắt phím
• Đọc trong bộ ñệm bàn phím bằng hàm
getch() có ñược mã của phím bị nhấn.
• Nếu bộ ñệm bàn phím rỗng ñợi nhấn 1
phím.
– Phím bị nhấn là phím thường bộ ñệm bàn
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.
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 23bangtqh@hotmail.com
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.
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 24bangtqh@hotmail.com
Bắt phím
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 25bangtqh@hotmail.com
Viết chương trình hiển thị lên
màn hình 1 dấu ‘*’ sau ñó
cho phép người dùng dùng
các phím mũi tên di chuyển
dấu ‘*’ khắp màn hình.
Chương trình sẽ kết thúc nếu
người dùng bấm phím ESC.
Kỹ thuật bắt phím
……
Phím PgDn0/81
Phím PgUp0/73
Phím Delete0/83
Phím F20/60
Phím F10/59
Phím ESC27
Phím sang phải →0/77
Phím sang trái ←0/75
Phím xuống ↓0/80
Phím lên ↑0/72
Phím điều khiểnMã
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 26bangtqh@hotmail.com
break và continue
• Lệnh break thường được sử dụng kết hợp
lệnh lặp
– Dùng để thoát khỏi vòng lặp một cách bất
thường (không quan tâm tới điều kiện lặp)
– Nếu có nhiều lệnh lặp lồng nhau thì lệnh break
chỉ thoat vòng lặp trực tiếp chứa nó
• Lệnh continue
– Dùng để quay trở lại từ ñầu vòng lặp
– 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
04/2010
Kỹ thuật lập trình C - Cấu trúc lặp 27bangtqh@hotmail.com