
Bài 9 Vòng l pặ
M c tiêu:ụ
K t thúc bài h c này, b n có th :ế ọ ạ ể
Hi u đ c vòng l p ‘for’ trong Cể ượ ặ
Làm vi c v i toán t ‘ph y’ệ ớ ử ẩ
Hi u các vòng l p l ng nhauể ặ ồ
Hi u vòng l p ‘while’ và vòng l p ‘do-while’ể ặ ặ
Làm vi c v i l nh ‘break’ và l nh ‘continue’ệ ớ ệ ệ
Hi u hàm ‘exit()’.ể
Gi i thi u:ớ ệ
M t trong nh ng đi m m nh l n nh t c a máy tính là kh năng th c hi n m t chu i các l nh l pộ ữ ể ạ ớ ấ ủ ả ự ệ ộ ỗ ệ ặ
đi l p l i. Đi u đó có đ c là do s d ng các c u trúc l p trong ngôn ng l p trình. Trong bài nàyặ ạ ề ượ ử ụ ấ ặ ữ ậ
b n s tìm hi u các lo i vòng l p khác nhau trong C.ạ ẽ ể ạ ặ
M t trong nh ng u đi m l n nh t c a máy tính là kh năng th c thi m t chu i các ch th l p diộ ữ ư ể ớ ấ ủ ả ự ộ ỗ ỉ ị ặ
l p l i. Đi u này có đ c là nh vào các c u trúc l p trong ngôn ng l p trình. Trong bài này chúngặ ạ ề ượ ờ ấ ặ ữ ậ
ta s tìm hi u các c u trúc vòng l p khác nhau trong C.ẽ ể ấ ặ
9.1 C u trúc l pấ ặ Vòng l pặ:
Vòng l p là m t đo n mã l nh trong ch ng trình đ c th c hi n l p đi l p l i cho đ n khi th aặ ộ ạ ệ ươ ượ ự ệ ặ ặ ạ ế ỏ
mãn m t đi u ki n nào đó. Vòng l p là m t khái ni m c b n trong l p trình c u trúc.ộ ề ệ ặ ộ ệ ơ ả ậ ấ
M t vòng l p là ph n mã l nh trong m t ch ng trình đ c th c hi n l p đi l p l i mãi cho đ nộ ặ ầ ệ ộ ươ ượ ự ệ ặ ặ ạ ế
khi m t đi u ki n xác đ nh đ c th a. Khái ni m vòng l p là n n t n c a l p trình c u trúc.ộ ề ệ ị ượ ỏ ệ ặ ề ả ủ ặ ấ
Trong C có các lo i vòng l p sau:ạ ặ
Vòng l p ặfor
Vòng l p ặwhile
Vòng l p ặdo…while
Ta s d ng các ử ụ toán t quan hử ệ và toán t logicử trong các bi u th c đi u ki n đ đi u khi n sể ứ ề ệ ể ề ể ự
th c hi n c a vòng l p.ự ệ ủ ặ
Các c u trúc l p s n có trong C là:ấ ặ ẵ
L p ặfor.
L p ặwhile.
L p ặdo …while
Trong C, đi u ki n đi u khi n s th c thi c a vòng l p đ c t o ra b ng vi c s d ng các toán tề ệ ề ể ự ự ủ ặ ượ ạ ằ ệ ử ụ ử
Quan h ệvà Logic.
9.2 Vòng l p ‘ặfor’:
Cú pháp t ng quát c a vòng l p ổ ủ ặ for nh sau:ư
for(kh i t o giá tr cho bi n đi u khi n; bi u th c đi u ki n;bi uở ạ ị ế ề ể ể ứ ề ệ ể
th c thay đ i giá tr c a bi n đi u khi n)ứ ổ ị ủ ế ề ể
{
Câu l nh (các câu l nh);ệ ệ
Vòng l pặ1

}
Kh i t o giá tr cho bi n đi u khi nở ạ ị ế ề ể là m t câu l nh gán giá tr ban đ u cho bi n đi u khi n tr cộ ệ ị ầ ế ề ể ướ
khi th c hi n vòng l p. L nh này ch đ c th c hi n duy nh t m t l n. ự ệ ặ ệ ỉ ượ ự ệ ấ ộ ầ Bi u th c đi u ki nể ứ ề ệ là m tộ
bi u th c quan h , xác đ nh đi u ki n thoát cho vòng l p. ể ứ ệ ị ề ệ ặ Bi u th c thay đ i giá tr c a bi n đi uể ứ ổ ị ủ ế ề
khi nể xác đ nh bi n đi u khi n s b thay đ i nh th nào sau m i l n vòng l p đ c l p l iị ế ề ể ẽ ị ổ ư ế ỗ ầ ặ ượ ặ ạ
(th ng là tăng ho c gi m giá tr c a bi n đi u khi n). Ba ph n trên đ c phân cách b i d uườ ặ ả ị ủ ế ề ể ầ ượ ở ấ
ch m ph y. Câu l nh trong thân vòng l p có th là m t l nh duy nh t (l nh đ n) ho c l nh ph cấ ẩ ệ ặ ể ộ ệ ấ ệ ơ ặ ệ ứ
(nhi u l nh).ề ệ
Vòng l p for s ti p t c đ c th c hi n ch ng nào mà bi u th c đi u ki n còn ặ ẽ ế ụ ượ ự ệ ừ ể ứ ề ệ đúng (true). Khi
bi u th c đi u ki n là ể ứ ề ệ sai (false), ch ng trình s thoát ra kh i vòng l p ươ ẽ ỏ ặ for.
Cú pháp t ng quát c a vòng l p ổ ủ ặ for nh sau:ư
for(kh i t o b đ m;đi u ki n ki m tra;đ nh l i giá tr tham s )ở ạ ộ ế ề ệ ể ị ạ ị ố
{
Các câu l nh;ệ
}
kh i t o b đ mở ạ ộ ế là m t l nh gán đ thi t l p bi n đi u khi n c a vòng l p tr c khi b t đ uộ ệ ể ế ậ ế ề ể ủ ặ ướ ắ ầ
vòng l p. Câu l nh này ch đ c th c thi m t l n.ặ ệ ỉ ượ ự ộ ầ
Đi u ki n ki m traềệể là m t bi u th c quan h , xác đ nh khi nào vòng l p s k t thúc .ộ ể ứ ệ ị ặ ẽ ế
Đ nh l i giá tr tham sị ạ ị ố đ nh nghĩa cách thay đ i giá tr c a bi n đi u khi n vòng l p (thôngị ổ ị ủ ế ề ể ặ
th ng, bi n này s tăng ho c gi m giá tr thi t l p t i th i đi m b t đ u) m i khi vòng l p đ cườ ế ẽ ặ ả ị ế ậ ạ ờ ể ắ ầ ỗ ặ ượ
l p l i.ặ ạ
Ba ph n này c a vòng l p ầ ủ ặ for đ c phân cách b i d u ch m ph y (ượ ở ấ ấ ẩ ;). Các câu l nh, ph n thân c aệ ầ ủ
vòng l p, có th là m t câu l nh đ n ho c m t l nh ghép (nhi u câu l nh).ặ ể ộ ệ ơ ặ ộ ệ ề ệ
Vòng l p ặfor ti p t c đ c th c thi khi đi u ki n ki m tra có k t qu ế ụ ượ ự ề ệ ể ế ả true. Ng c l i, khi đi uượ ạ ề
ki n có k t qu ệ ế ả false, ch ng trình ti p t c câu l nh sau vòng l p ươ ế ụ ệ ặ for.
Xem ví d sau:ụ
/* Đây là ch ng trình minh h a vòng l p for trong ch ng trình C*/ươ ọ ặ ươ
#include <stdio.h>
main()
{
int count;
printf(“\t This is a \n”);
for (count = 1; count <= 6; count++)
printf(“\n \t \t nice”);
printf(“\n\t\t world. \n”);
}
K t qu c a ch ng trình trên đ c minh h a nh sau:ế ả ủ ươ ượ ọ ư
K t qu c a ch ng trình hi n th nh sau:ế ả ủ ươ ể ị ư
This is a
nice
nice
nice
nice
nice
nice
world.
2 L p trình c b n Cậ ơ ả

Chúng ta s xem xét kĩ đo n vòng l p ẽ ạ ặ for trong ch ng trình trên:ươ
1. Kh i t o giá tr cho bi n đi u khi n: cở ạ ị ế ề ể ount = 1.
L nh này đ c th c hi n duy nh t m t l n khi vòng l p b t đ u đ c th c hi n, và bi n countệ ượ ự ệ ấ ộ ầ ặ ắ ầ ượ ự ệ ế
đ c đ t giá tr là 1.ượ ặ ị
2. Bi u th c đi u ki n: ể ứ ề ệ count < = 6.
Ch ng trình ki m tra xem giá tr hi n t i c a bi n count có nh h n hay b ng 6 hay không. N uươ ể ị ệ ạ ủ ế ỏ ơ ằ ế
đúng, các câu l nh trong thân vòng l p s đ c th c hi n.ệ ặ ẽ ượ ự ệ
3. Thân c a vòng l p có duy nh t m t l nhủ ặ ấ ộ ệ
printf(“\n \t \t nice”);
Câu l nh này có th đ t trong c p d u ngo c nh n ệ ể ặ ặ ấ ặ ọ {} cho d nhìn.ễ
4. Bi u th c thay đ i giá tr c a bi n đi u khi n ể ứ ổ ị ủ ế ề ể count++ , tăng giá tr c a bi n ị ủ ế count lên 1 cho
l n l p k ti p.ầ ặ ế ế
Các b c 2, 3, 4 đ c l p l i cho đ n khi bi u th c đi u ki n là ướ ượ ặ ạ ế ể ứ ề ệ sai. Vòng l p trên s đ c th cặ ẽ ượ ự
hi n 6 l n v i giá tr c a ệ ầ ớ ị ủ count thay đ i t 1 đ n 6. Vì v y, t ổ ừ ế ậ ừ nice xu t hi n 6 l n trên màn hình.ấ ệ ầ
Sau đó, count tăng lên 7. Do giá tr này l n h n 6, vòng l p k t thúc và câu l nh sau vòng l p đ cị ớ ơ ặ ế ệ ặ ượ
th c hi n.ự ệ
Quan sát vòng l p ặfor trong ch ng trình:ươ
1. Kh i t o b đ m ở ạ ộ ế count = 1.
Đ c th c thi ch m t l n khi b t đ u vòng l p, và bi n ượ ự ỉ ộ ầ ắ ầ ặ ế count đ c thi t l p giá tr là 1.ượ ế ậ ị
2. Đi u ki n ki m tra là ềệể count < = 6.
M t s ki m tra đ c th c hi n đ xác đ nh giá tr hi n hành c a bi n ộ ự ể ượ ự ệ ể ị ị ệ ủ ế count có nh h n hay b ngỏ ơ ằ
6 không. N u k t qu là ế ế ả true, thì thân c a vòng l p đ c th c thi.ủ ặ ượ ự
3. Ph n thân c a vòng l p ch a m t câu l nh đ n.ầ ủ ặ ứ ộ ệ ơ
printf(“\n \t \t nice”);
Câu l nh này có th đ t trong c p d u ngo c ệ ể ặ ặ ấ ặ {} đ giúp d nhìn h n.ể ễ ơ
4. Ph n đ nh l i giá tr tham s là ầ ị ạ ị ố count++, tăng giá tr c a bi n ị ủ ế count lên 1 cho l n l p k ti p.ầ ặ ế ế
Các b c 2, 3, 4 đ c l p l i cho đ n khi đi u ki n ki m tra tr thành ướ ượ ặ ạ ế ề ệ ể ở false. Vòng l p s đ cặ ẽ ượ
th c hi n 6 l n v i giá tr c a ự ệ ầ ớ ị ủ count ch y t 1 đ n 6. Vì v y, t ạ ừ ế ậ ừ nice xu t hi n 6 l n trên màn hình.ấ ệ ầ
l n l p k ti p, Ở ầ ặ ế ế count tăng lên 7. Do giá tr này l n h n 6, vòng l p k t thúc và câu l nh sauị ớ ơ ặ ế ệ
vòng l p đ c th c thi.ặ ượ ự
Ch ng trình sau in ra các s ch n t 1 đ n 25.ươ ố ẵ ừ ế
Ví d 9.2:ụ
#include <stdio.h>
main()
{
int num;
printf(“The even numbers from 1 to 25 are: \n\n”);
for (num2; num <= 25; num+=2)
printf(“%d\n”, num);
}
Vòng l pặ3

K t qu c a ch ng trình trên nh sau:ế ả ủ ươ ư
The even numbers from 1 to 25 are:
2
4
6
8
10
12
14
16
18
20
22
24
Vòng l p ặfor trên kh i t o giá tr c a bi n nguyên ở ở ạ ị ủ ế num là 2 (đ l y m t s ch n) và tăng giá trể ấ ộ ố ẵ ị
c a nó lên 2 m i l n vòng l p đ c l p l i.ủ ỗ ẫ ặ ượ ặ ạ
Vòng l p ặfor trên kh i t o bi n s nguyên ở ạ ế ố num là 2 (đ l y m t s ch n) và m i khi vòng l p đ c th c thiể ấ ộ ố ẵ ỗ ặ ượ ự
giá tr c a nó s đ c tăng 2.ị ủ ẽ ượ
Trong các vòng l p ặfor, bi u th c đi u ki n luôn đ c ki m tra ngay khi b t đ u vòng l p. Do đóể ứ ề ệ ượ ể ắ ầ ặ
các l nh trong thân vòng l p s không đ c th c hi n n u ngay t ban đ u đi u ki n đó là ệ ậ ẽ ượ ự ệ ế ừ ầ ề ệ sai.
Trong các vòng l p ặfor, đi u ki n ki m tra luôn luôn đ c th c hi n t i đ u vòng l p. Đi u này cóề ệ ể ượ ự ệ ạ ầ ặ ề
nghĩa r ng, đo n mã l nh bên trong vòng l p không đ c th c thi n u đi u ki n là ằ ạ ệ ặ ượ ự ế ề ệ false khi b tắ
đ u l n l p đó.ầ ầ ặ
Toán t ử ‘ph y (comma)’ẩ :
Ph n bi u th c trong toán t for có th đ c m r ng đ thêm vào các l nh kh i t o hay các l nhầ ể ứ ử ể ượ ở ộ ể ệ ở ạ ệ
thay đ i giá tr c a bi n. Cú pháp nh sau:ổ ị ủ ế ư
Ph m vi c a vòng l p ạ ủ ặ for có th đ c m r ng b ng s thêm vào nhi u h n m t bi u th c kh iể ượ ở ộ ằ ự ề ơ ộ ể ứ ở
t o ho c bi u th c tăng tr trong ph n đ c t c a vòng l p ạ ặ ể ứ ị ầ ặ ả ủ ặ for. Đ nh d ng nh sau:ị ạ ư
bi u_th c1 , bi u_th c2ể ứ ể ứ
Các bi u th c trên đ c phân cách b i toán t ể ứ ượ ở ử ‘ph y’ẩ ( , ), và đ c th c hi n t trái sang ph i.ượ ự ệ ừ ả
Th t c a các bi u th c là quan tr ng trong tr ng h p giá tr c a bi u th c th hai ph thu cứ ự ủ ể ứ ọ ườ ợ ị ủ ể ứ ứ ụ ộ
vào giá tr c a ị ủ bi u th c th nh tể ứ ứ ấ . Toán t này có đ u tiên th p nh t trong các toán t c a C.ử ộ ư ấ ấ ử ủ
Các bi u th c đ c phân cách b i toán t ‘ể ứ ượ ở ử ph yẩ’ và đ c đ nh tr t trái sang ph i. Th t đ nh trượ ị ị ừ ả ứ ự ị ị
bi u th c là quan tr ng n u giá tr c a ể ứ ọ ế ị ủ bi u_th c2ể ứ l thu c vào giá tr m i đ c tính toán c aệ ộ ị ớ ượ ủ
bi u_th c1ể ứ . Toán t này có đ u tiên th p nh t trong các toán t c a C.ử ộ ư ấ ấ ử ủ
Ví d d i đây in ra m t b ng các phép c ng v i k t qu không đ i đ minh h a khái ni m vụ ướ ộ ả ộ ớ ế ả ổ ể ọ ệ ề
toán t ph y rõ ràng h n.ử ẩ ơ
Ví d sau đây s in ra m t b ng phép c ng v i k t qu là m t h ng s , nh m minh h a khái ni mụ ẽ ộ ả ộ ớ ế ả ộ ằ ố ằ ọ ệ
v toán t ‘ph y’ rõ ràng h n:ề ử ẩ ơ
Ví d 9.3:ụ
#include <stdio.h>
main()
{
int i, j, max;
4 L p trình c b n Cậ ơ ả

printf(“Please enter the maxinum value \n”);
printf(“for which a table can be printed: “);
scanf(“%d”, &max);
for (i = 0, j = max; i < = max; i++, j--)
printf(“\n%d + %d = %d”, i, j, i + j);
}
K t qu c a ch ng trình trên đ c minh h a nh sau:ế ả ủ ươ ượ ọ ư
M t ví d th c thi ch ng trình trên nh sau:ộ ụ ự ươ ư
Please enter the maxinum value
for which a table can be printed: 5
0 + 5 = 5
1 + 4 = 5
2 + 3 = 5
3 + 2 = 5
4 + 1 = 5
5 + 0 = 5
Chú ý trong vòng l p for, ph n kh i t o giá tr là:ặ ầ ở ạ ị
i = 0, j = max
Khi vòng l p b t đ u ch y, ặ ắ ầ ạ i đ c gán giá tr 0 và ượ ị j đ c gán giá tr c a ượ ị ủ max.
Ph n thay đ i giá tr c a bi n đi u khi n g m hai bi u th c:ầ ổ ị ủ ế ề ể ồ ể ứ
i++, j—
sau m i l n th c hi n thân vòng l p, ỗ ầ ự ệ ặ i đ c tăng lên 1 và ượ j gi m đi 1. T ng c a hai bi n đó luônả ổ ủ ế
b ng ằmax và đ c in ra màn hình:ượ
Chú ý, trong vòng l p ặfor, kh i t o tham s là:ở ạ ố
i = 0 , j = max
Khi đ c th c thi, ượ ự i đ c gán giá tr 0 và ượ ị j đ c ượ gán giá tr c a ị ủ max..
Bi u th c đ nh l i tr tham s (tăng tr ) cũng ch a hai bi u th c:ể ứ ị ạ ị ố ị ứ ể ứ
i ++ , j--
sau m i l n l p, ỗ ầ ặ i đ c tăng lên 1 và ượ j đ c gi m xu ng 1. T ng c a hai bi n luôn luôn b ng giáượ ả ố ổ ủ ế ằ
tr ịmax đ c in ra màn hình.ượ
Vòng l p ‘ặ for l ng nhau’ồ :
M t vòng l p ộ ặ for đ c g i là l ngượ ọ ồ nhau vào khi nó n m bên trong m t vòng l p ằ ộ ặ for khác. Mã l nhệ
s có d ng t ng t nh sau:ẽ ạ ươ ự ư Nó s có d ng t ng t nh sau:ẽ ạ ươ ự ư
for (i = 1; i < max1; i++)
{ ….
….
for (j = 0; j < max2 ; j++)
{
…..
}
….
}
Xem ví d sau:ụ
Vòng l pặ5

