
Nguyen Dinh Phuong
Bài 7 Đi u ki nề ệ
M c tiêu:ụ
K t thúc bài h c này, b n có th :ế ọ ạ ể
Gi i thích v C u trúc l a ch nả ề ấ ự ọ
Câu l nh ệif
Câu l nh ệif – else
Câu l nh v i nhi u l nh ệ ớ ề ệ if
Câu l nh ệif l ng nhauồ
Câu l nh ệswitch.
Gi i thi uớ ệ
Các v n đ đ c đ c p t đ u đ n nay cho phép chúng ta vi t nhi u ch ng trình. Tuyấ ề ượ ề ậ ừ ầ ế ế ề ươ
nhiên các ch ng trình đó có nh c đi m là b t c khi nào đ c ch y, chúng luôn th cươ ượ ể ấ ứ ượ ạ ự
hi n m t chu I các thao tác gi ng nhau, theo cách th c gi ng nhau. Trong khi đó, chúng taệ ộ ỗ ố ứ ố
th ng xuyên ch cho phép th c hi n các thao tác nh t đ nh n u ườ ỉ ự ệ ấ ị ế nó th a mãn đi u ki n đ tỏ ề ệ ặ
ra.
Các y u t l p trình C đ c th o lu n nh ng ch ng tr c đã có th giúp b n vi t h u h t cácế ố ậ ượ ả ậ ở ữ ươ ướ ể ạ ế ầ ế
ch ng trình. Tuy nhiên, v n đ là khi đ c th c thi, các ch ng trình d ng này luôn th c hi nươ ấ ề ượ ự ươ ạ ự ệ
m t chu i các hành đ ng gi ng nhau, theo cùng m t cách th c, đúng m t l n. Trong khi l p trình,ộ ỗ ộ ố ộ ứ ộ ầ ậ
chúng ta th ng xuyên c n th c hi n m t s hành đ ng ch khi m t đi u ki n nào đó đ c th aườ ầ ự ệ ộ ố ộ ỉ ộ ề ệ ượ ỏ
mãn.
7.1. Câu l nh đi u ki n là gì ?ệ ề ệ
Các câu l nh đi u ki n cho phép chúng ta thay đ I lu ng ch ng trình. D a trên m t đi uệ ề ệ ổ ồ ươ ự ộ ề
ki n nào đó, m t câu l nh hay m t chu I các câu l nh có th đ c th c hi n ho c không.ệ ộ ệ ộ ỗ ệ ể ượ ự ệ ặ
H u h t các ngôn ng l p trình đ u s d ng l nh if đ đ a ra đi u ki n. Nguyên t c th cầ ế ữ ậ ề ử ụ ệ ể ư ề ệ ắ ự
hi n nh sau n u đi u ki n đ a ra là ệ ư ế ề ệ ư đúng (true), ch ng trình s th c hi n m t côngươ ẽ ự ệ ộ
vi c nào đó, n u đi u ki n đ a ra là ệ ế ề ệ ư sai (false), ch ng trình s th c hi n m t công vi cươ ẽ ự ệ ộ ệ
khác.
Các câu l nh đi u ki n cho phép chúng ta thay đ i h ng th c hi n c a ch ng trình. D a vàoệ ề ệ ổ ướ ự ệ ủ ươ ự
m t điộ ều ki n, m t l nh ho c m t chu i các câu l nh s th c ệ ộ ệ ặ ộ ỗ ệ ẽ ự hi n các hành đ ng l a ch n.ệ ộ ự ọ
H u h t các ngôn ng l p trình s d ng câu l nh ầ ế ữ ậ ử ụ ệ if đ t o ra các quy t đ nh. M t trong nh ng kháiể ạ ế ị ộ ữ
ni m c b n c a ngành khoa h c máy tính là ệ ơ ả ủ ọ n uế đi u ki n xác đ nh là ề ệ ị đúng (true), máy tính đ cượ
đ nh h ng đ nh n m t hành đ ng, và ị ướ ể ậ ộ ộ n u ếđi u ki n là ề ệ sai (false), nó đ c đ nh h ng đ th cượ ị ướ ể ự
hi n m t hành đ ng khác.ệ ộ ộ
Ví d 7.1:ụ
Đ xác đ nh m t s là s ch n hay s l , ta th c hi n nh sau:ể ị ộ ố ố ẳ ố ẻ ự ệ ư
1. Nh p vào m t s .ậ ộ ố
2. Chia s đó cho 2 đ xác đ nh s d .ố ể ị ố ư
3. N u s d c a phép chia là 0, đó là s “Ch n”.ế ố ư ủ ố ẵ
HO CẶ
Ma$ter.P - Đi u ki nề ệ Smith.N Studio E-book - 1

King.P
N u s d c a phép chia khác 0, đó là s “L ”.ế ố ư ủ ố ẻ
B c 2 trong gi I thu t trên ki m tra ph n d c a s đó khi chia cho 2 có b ng 0 không?ướ ả ậ ể ầ ư ủ ố ằ
N u đúng, ta th c hi n vi c hi n th thông báo đó là s ch n. N u s d đó khác 0, ta th cế ự ệ ệ ể ị ố ẵ ế ố ư ự
hi n vi c hi n th thông báo đó là s l .ệ ệ ể ị ố ẻ
B c 2 trong gi i thu t ki m tra xem k t qu s d c a phép chia 2 có là 0 không ? Trong tr ngướ ả ậ ể ế ả ố ư ủ ườ
h p này, chúng ta nh n m t hành đ ng xác đ nh đó là hi n th s đã đ c nh p vào là m t s ch n.ợ ậ ộ ộ ị ể ị ố ượ ậ ộ ố ẵ
N u k t qu c a phép chia l y s d khác 0, m t h ng hành đ ng khác đ c th c hi n, hi n thế ế ả ủ ấ ố ư ộ ướ ộ ượ ự ệ ể ị
đó là m t s l .ộ ố ẻ
Trong C m t đi u ki n đ c coi là đúng (true) khi nó có giá tr khác 0, là sai (false) khi nó có giá trộ ề ệ ượ ị ị
b ng 0.ằ M t đi m c n chú ý. Trong ngôn ng C m t câu l nh đi u ki n đ c đánh giá là ộ ể ầ ữ ộ ệ ề ệ ượ true
(đúng) t ng đ ng giá tr khác 0 và ươ ươ ị false (sai) t ng đ ng giá tr là 0.ươ ươ ị
2G-Unit L p trình c b n Cậ ơ ả

Nguyen Dinh Phuong
7.2. Các câu l nh l a ch n:ệ ự ọ
C cung c p hai d ng câu l nh l a ch n:ấ ạ ệ ự ọ
Câu l nh ệif
Câu l nh ệswitch
Chúng ta hãy tìm hi u hai câu l nh l a ch n này.ể ệ ự ọ
7.2.1 Câu l nh ‘ệif’:
Câu l nh ệif cho phép ta đ a ra các quy t đ nh d a trên vi c ki m tra m t đi u ki n nào đó là ư ế ị ự ệ ể ộ ề ệ đúng
(true) hay sai (false).
Câu l nh ệif cho phép các quy t đ nh đ c th c hi n b i vi c ki m tra đi u ki n đ c đ a ra làế ị ượ ự ệ ở ệ ể ề ệ ượ ư
đúng (true) hay sai (false).
Các đi u ki n g m các toán t so sánh và logic mà chúng ta đã th o lu n bài 4.ề ệ ồ ử ả ậ ở
D ng t ng quát c a câu l nh ạ ổ ủ ệ if:
if (bi u th c)ể ứ
Các câu l nh;ệ
Bi u th c ph i luôn đ c đ t trong c p d u ngo c (). M nh đ theo sau t khoá ể ứ ả ượ ặ ặ ấ ặ ệ ề ừ if là m t đi uộ ề
ki n (ho c m t bi u th c đi u ki n) c n đ c ki m tra. Ti p đ n là m t l nh hay m t t p cácệ ặ ộ ể ứ ề ệ ầ ượ ể ế ế ộ ệ ộ ậ
l nh s đ c th c thi khi đi u ki n (ho c bi u th c đi u ki n) có k t qu ệ ẽ ượ ự ề ệ ặ ể ứ ề ệ ế ả true.
Ví d 7.2:ụ
#include <stdio.h>
void main()
{
int x, y;
char a = ‘y’;
x = y = 0;
if (a == ‘y’)
{
x += 5;
printf(“The numbers are %d and \t%d”, x, y);
}
}
K t qu c a ch ng trình nh sau:ế ả ủ ươ ư
The numbers are 5 and 0
Có k t qu này là do bi n ế ả ế a đã đ c gán giá tr 'ượ ị y'.
Chú ý r ng, kh i l nh sau l nh ằ ố ệ ệ if đ c đ t trong c p ngo c nh n {}. Khi có nhi u l nh c n đ cượ ặ ặ ặ ọ ề ệ ầ ượ
th c hi n, các câu l nh đó đ c coi nh m t block (kh I l nh) và ph I đ c đ t trong c p d u {}.ự ệ ệ ượ ư ộ ố ệ ả ượ ặ ặ ấ
N u trong ví d trên ta không đ a vào d u ngo c nh n câu l nh if, ch có câu l nh đ u tiên (x +=ế ụ ư ấ ặ ọ ở ệ ỉ ệ ầ
5) đ c th c hi n khi đi u ki n trong câu l nh if là đúng.ượ ự ệ ề ệ ệ
Chú ý r ng, kh i các câu l nh theo sau l nh ằ ố ệ ệ if đ c đ t trong c p ngo c xo n ượ ặ ặ ặ ắ { }. Hãy nh r ng,ớ ằ
n u các c u trúc có nhi u h n m t câu l nh theo sau nó, các câu l nh ph i đ c xem nh m t kh iế ấ ề ơ ộ ệ ệ ả ượ ư ộ ố
và ph i đ c đ t gi a c p ngo c xo n. N u trong ví d trên không t n t i c p ngo c xo n thì chả ượ ặ ữ ặ ặ ắ ế ụ ồ ạ ặ ặ ắ ỉ
có câu l nh đ u tiên (x += 5) đ c th c thi khi l nh ệ ầ ượ ự ệ if có giá tr ịtrue.
Ma$ter.P - Đi u ki nề ệ Smith.N Studio E-book - 3

King.P
Ví d d i đây s ki m tra m t năm có ph i là năm nhu n hay không. Năm nhu n là năm chia h tụ ướ ẽ ể ộ ả ậ ậ ế
cho 4 ho c 400 nh ng không chia h t cho 100. Chúng ta s d ng l nh ặ ư ế ử ụ ệ if đ ki m tra đi u ki n.ể ể ề ệ
Ví d 7.3:ụ
/* To test for a leap year */
#include <stdio.h>
void main()
{
int year;
printf(“\nPlease enter a year:”);
scanf(“%d”, &year);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf(“\n%d is a leap year!”, year);
}
Ch ng trình trên cho ra k t qu nh sau:ươ ế ả ư
Please enter a year: 1988
1988 is a leap year!
Đi u ki n ề ệ year % 4 == 0 && year % 100 != 0 || year % 400 == 0 tr v giá tr 1 n u năm đó làả ề ị ế
năm nhu n. Khi đó, ch ng trình hi n th thông báo g m bi n year và dòng ch ậ ươ ể ị ồ ế ữ “is a leap year”.
N u đi u ki n trên không th a mãn, ch ng trình không hi n th thông báo nào.ế ề ệ ỏ ươ ể ị Đi u ki n ề ệ year % 4
== 0 && year % 100 != 0 || year % 400 == 0 cho k t qu mang giá tr 1 n u bi n ế ả ị ế ế year đ c nh pượ ậ
vào là m t năm nhu n. Trong tr ng h p này, giá tr bi n ộ ậ ườ ợ ị ế year theo sau b i dòng ở“is a leap year”
đ c xu t ra màn hình. N u đi u ki n không đ t, không có dòng thông tin nào đ c xu t ra mànượ ấ ế ề ệ ạ ượ ấ
hình.
7.2.2 Câu l nh ‘ệif … else’:
trên chúng ta đã bi t d ng đ n gi n nh t c a câu l nh Ở ế ạ ơ ả ấ ủ ệ if, cho phép ta l a ch n đ th c hi n hayự ọ ể ự ệ
không m t câu l nh ho c m t chu I các l nh. C cũng cho phép ta l a ch n trong hai kh I l nh độ ệ ặ ộ ỗ ệ ự ọ ố ệ ể
th c hi n b ng cách dùng c u trúc ự ệ ằ ấ if – else. Cú pháp nh sau:ư
trên chúng ta đã bi t đ n d ng đ n gi n nh t c a m t l nh Ở ế ế ạ ơ ả ấ ủ ộ ệ if, đ a ra cho chúng ta m t s l aư ộ ự ự
ch n đ th c thi m t l nh, m t kh i các l nh ho c b qua chúng. C cũng cho phép chúng ta l aọ ể ự ộ ệ ộ ố ệ ặ ỏ ự
ch n gi a hai l nh b ng cách s d ng c u trúc ọ ữ ệ ằ ử ụ ấ if – else. Cú pháp nh sau:ư
if (bi u th c)ể ứ
câu_l nh – 1;ệ
else
câu_l nh – 2;ệ
N u bi u th c đi u ki n trên là ế ể ứ ề ệ đúng (khác 0), câu l nh 1 đ c th c hi n. N u nó ệ ượ ự ệ ế sai (khác 0) câu
l nh 2 đ c th c hi n. Câu l nh sau ệ ượ ự ệ ệ if và else có th là l nh đ n ho c l nh ph c. Các câu l nh đóể ệ ơ ặ ệ ứ ệ
nên đ c lùi vào trong dòng m c dù không b t bu c. Cách vi t đó giúp ta nhìn th y ngay nh ngượ ặ ắ ộ ế ấ ữ
l nh nào s đ c th c hi n tùy theo k t qu c a bi u th c đi u ki n.ệ ẽ ượ ự ệ ế ả ủ ể ứ ề ệ Bi u th c đ c xác đ nh giáể ứ ượ ị
tr , n u nó mang giá tr ị ế ị true (khác 0), câu_l nh – 1 đ c th c thi. N u bi u th c mang giá tr ệ ượ ự ế ể ứ ị false
(0) thì câu_l nh – 2 đ c th c thi. Nh ng câu l nh theo sau ệ ượ ự ữ ệ if và else có th là l nh đ n ho c l nhể ệ ơ ặ ệ
4G-Unit L p trình c b n Cậ ơ ả

Nguyen Dinh Phuong
ghép. S canh l các dòng l nh là không đòi h i, tuy nhiên đó là m t phong cách vi t ch ng trìnhự ề ệ ỏ ộ ế ươ
t t. Nó cho bi t nh ng câu l nh th c thi thu c vào s ki m soát nào.ố ế ữ ệ ự ộ ự ể
Bây gi chúng ta vi t m t ch ng trình ki m tra m t s là s ch n hay s l . N u ờ ế ộ ươ ể ộ ố ố ẵ ố ẻ ế sau khi đem chia
s đó cho 2 ốs ốđ c ượ d là 0 ch ng trình s hi n th dòngư ươ ẽ ể ị ch ữ “The number is Even”, ng c l i sượ ạ ẽ
hi n th dòngể ị ch ữ “The number is Odd”.
Ví d 7.4:ụ
#include <stdio.h>
void main()
{
int num, res;
printf(“Enter a number: ”);
scanf(“%d”, &num);
res = num % 2;
if (res == 0)
printf(“The number is Even”);
else
printf(“The number is Odd”);
}
Xem m t ví d khác, ộ ụ ví d s ụ ẽ đ i m t ký t hoa thành ký t th ng. N u ký t không ph i là m tổ ộ ự ự ườ ế ự ả ộ
ký t hoa, nó s đ c in ra mà không c n thay đ i. Ch ng trình s d ng c u trúc ự ẽ ượ ầ ổ ươ ử ụ ấ if-else đ ki mể ể
tra xem m t ký t có ph i là ký t hoa không, ộ ự ả ự và sau đó s l a ch n gi a hai h ng s n cóẽ ự ọ ữ ướ ẵ r I th cồ ự
hi n các thao tác t ng ngệ ươ ứ .
Ví d 7.5: ụ
/* Doi mot ky tu hoa thanh ky tu thuong */
#include <stdio.h>
void main()
{
char c;
printf(“Please enter a character: ”);
scanf(“%c”, &c);
if (c >= ‘A’ && c <= ‘Z’)
printf(“Lowercase character = %c”, c + ‘a’ – ‘A’);
else
printf(“Character Entered is = %c”, c);
}
Bi u th c ể ứ c >= ‘A’ && c <= ‘Z’ ki m tra ký t ể ự nh p vào ậcó là ký t hoa không. N u bi u th c ự ế ể ứ có
k t quế ảtr v ả ề true, ký t ựxu t ấđó s đ c đ i thành ký t th ng b ng cách s d ng bi u th c ẽ ượ ổ ự ườ ằ ử ụ ể ứ c
+ ‘a’ – ‘A’, và đ c in ra màn hình qua ượ s d nử ụ g hàm printf() đ ểxu t ấra màn hình. N u giá tr c aế ị ủ
bi u th c là ể ứ false, câu l nh sau ệelse đ c ượ ch yạ và ch ng trình hi n th kí t đó ra màn hình màươ ể ị ự
không c n ầth c hi n b t c s thay đự ệ ấ ứ ự ổI nào. l nh theo sau ệelse đ c th c thi và ký t đ c hi nượ ự ự ượ ể
th ra màn hình mà không c n b t c s thay đ i nào c .ị ầ ấ ứ ự ổ ả
7.2.3 Nhi u l a ch n – Các câu l nh ‘ề ự ọ ệ if … else’:
Ma$ter.P - Đi u ki nề ệ Smith.N Studio E-book - 5

