You are on page 1of 46

Ng«n ng÷ lËp tr×nh C

phÇn I: c¸c kh¸i niÖm c¬ b¶n

Bµi 1. Më ®Çu
Tãm t¾t lÞch sö ph¸t triÓn cña ng«n ng÷ C
Ng«n ng÷ lËp tr×nh C do Dennis Ritchie t¹o lËp vµo n¨m 1972 t¹i Bell Telephone
Laboratories. Môc ®Ých ban ®Çu cña ng«n ng÷ nµy lµ ®Ó thiÕt kÕ hÖ ®iÒu hµnh UNIX.

C lµ mét ng«n ng÷ m¹nh vµ mÒm dÎo nªn nã ®: ®îc rÊt nhiÒu ngêi sö dông. Kh¾p n¬i ng-
êi ta ®: b¾t ®Çu dïng nã ®Ó viÕt mäi lo¹i ch¬ng tr×nh. Tuy nhiªn, c¸c tæ chøc kh¸c nhau ®:
b¾t ®Çu sö dông c¸c version kh¸c nhau cña C, vµ ®: ph¸t sinh nhiÒu sù kh¸c nhau trong
c¸c thao t¸c lµm cho ngêi lËp tr×nh ph¶i ®au ®Çu. §Ó kh¾c phôc vÊn ®Ò nµy, n¨m 1983,
ViÖn Tiªu chuÈn Quèc gia cña Mü (ANSI) ®: thµnh lËp mét ñy ban ®Ó ®a ra mét ®Þnh
nghÜa chuÈn cho ng«n ng÷ C, ®îc gäi lµ ANSI Standard C.

Cã lÏ ph¶i nãi thªm mét chót vÒ tªn cña ng«n ng÷. Ng«n ng÷ nµy cã tªn lµ C v× tríc nã ®:
cã mét ng«n ng÷ ®îc gäi lµ B. Ng«n ng÷ B do Ken Thompson ph¸t triÓn còng t¹i Bell
Labs. Cã thÓ, B lµ ®Ó chØ tªn cña phßng thÝ nghiÖm, cßn C ch¾c lµ do ®øng sau B.

T¹i sao l¹i dïng C?

Trong thÕ giíi lËp tr×nh ngµy nay, cã rÊt nhiÒu ng«n ng÷ lËp tr×nh bËc cao ®Ó lùa chän,
ch¼ng h¹n nh C, Pascal, BASIC, Modula, v.v. TÊt c¶ ®Òu lµ nh÷ng ng«n ng÷ tuyÖt vêi phï
hîp cho hÇu hÕt c¸c c«ng viÖc lËp tr×nh. Nhng tuy vËy, vÉn cã mét vµi lý do ®Ó nhiÒu nhµ
lËp tr×nh chuyªn nghiÖp c¶m thÊy C lµ ng«n ng÷ ®øng ®Çu, v×:

C lµ mét ng«n ng÷ m¹nh vµ mÒm dÎo. H¹n chÕ duy nhÊt cña C chÝnh lµ sù h¹n chÕ trong t
duy trõu tîng cña chÝnh ngêi lËp tr×nh mµ th«i. C ®îc sö dông cho nhiÒu môc ®Ých kh¸c
nhau, nh thiÕt kÕ c¸c hÖ ®iÒu hµnh, c¸c bé so¹n th¶o v¨n b¶n, ®å ho¹, trang tÝnh, vµ thËm
chÝ lµm c¸c ch¬ng tr×nh dÞch cho c¸c ng«n ng÷ kh¸c.

C lµ mét ng«n ng÷ b×nh d©n ®îc nhiÒu ngêi lËp tr×nh chuyªn nghiÖp a dïng. B»ng chøng
lµ ®: cã rÊt nhiÒu ch¬ng tr×nh dÞch kh¸c nhau vµ nhiÒu tiÖn Ých kÌm theo.

C lµ mét ng«n ng÷ chuyÓn ®æi ®îc tøc lµ mét ch¬ng tr×nh C ®îc viÕt cho mét hÖ m¸y vi
tÝnh (vÝ dô IBM PC) cã thÓ ®îc dÞch vµ ch¹y trªn mét hÖ thèng kh¸c (vÝ dô DEC VAX)
mµ chØ cÇn thay ®æi chót Ýt hoÆc kh«ng cÇn thay ®æi g× c¶.
C lµ mét ng«n ng÷ ng¾n gän, nã chØ bao gåm mét sè c¸c tõ ®îc gäi lµ tõ khãa (keyword)
lµm c¬ së ®Ó t¹o ra c¸c c©u lÖnh cña ng«n ng÷.

Víi c¸c ®Æc ®iÓm trªn, C lµ sù lùa chän tuyÖt vêi ®èi víi mét ng«n ng÷ lËp tr×nh. Nhng cã
lÏ ngêi ta cßn nghe nãi vÒ C++ vµ mét kü thuËt lËp tr×nh míi ®îc gäi lµ lËp tr×nh híng ®èi
tîng. Còng kh«ng cã g× ®¸ng hoang mang cho l¾m v× thùc ra C++ chØ lµ mét ng«n ng÷ siªu
C víi tÊt c¶ nh÷ng g× mµ C cã céng thªm víi kü thuËt lËp tr×nh híng ®èi tîng. NÕu ai ®ã
b¾t ®Çu ngay b»ng viÖc häc C++, th× tÊt c¶ nh÷ng g× ®: ®îc d¹y khi häc C vÉn cßn ®îc ¸p
dông cho C++. Trong khi häc C, kh«ng nh÷ng chØ häc mét ng«n ng÷ lËp tr×nh phæ th«ng vµ
m¹nh nhÊt h«m nay mµ cßn tù chuÈn bÞ cho m×nh mét kü thuËt lËp tr×nh híng ®èi tîng
cho ngµy mai.

ChuÈn bÞ cho viÖc lËp tr×nh


Khi gi¶i mét bµi to¸n cÇn ph¶i tiÕn hµnh mét sè bíc nhÊt ®Þnh. §Çu tiªn ph¶i h×nh thµnh
hay cßn gäi lµ ®Þnh nghÜa bµi to¸n. NÕu kh«ng biÕt bµi to¸n cÇn ph¶i gi¶i quyÕt lµ g× th×
kh«ng thÓ nµo t×m ra kÕt qña ®îc. Mét khi bµi to¸n ®: ®îc ®Þnh râ, th× cã thÓ lËp ra mét kÕ
ho¹ch ®Ó gi¶i quyÕt nã. Sau khi ®: cã mét kÕ ho¹ch th× viÖc thùc hiÖn bµi to¸n nµy sÏ trë
nªn dÔ dµng. Cuèi cïng, mét khi kÕ ho¹ch ®: ®îc thùc thi, th× c¸c kÕt qña ph¶i ®îc thö l¹i
®Ó kiÓm chøng xem liÖu bµi to¸n ®: ®îc gi¶i quyÕt ®óng vµ trän vÑn cha. Mét logic nh
trªn cã thÓ ®îc ¸p dông cho nhiÒu lÜnh vùc kh¸c nhau bao gåm c¶ viÖc lËp tr×nh trªn m¸y
tÝnh.

Khi t¹o lËp mét ch¬ng tr×nh trong C, cÇn ph¶i tu©n theo mét thø tù cña c¸c bíc sau ®©y:

X¸c ®Þnh c¸c môc tiªu cña ch¬ng tr×nh.

X¸c ®Þnh c¸c ph¬ng ph¸p cÇn ph¶i sö dông trong khi viÕt ch¬ng tr×nh.

T¹o lËp ch¬ng tr×nh ®Ó gi¶i quyÕt bµi to¸n.

Ch¹y ch¬ng tr×nh ®Ó xem kÕt qña.

Chu tr×nh ph¸t triÓn ch¬ng tr×nh


Chu tr×nh ph¸t triÓn ch¬ng tr×nh cã c¸c bíc riªng cña nã. Trong bíc thø nhÊt, mét bé so¹n
th¶o sÏ ®îc sö dông ®Ó t¹o ra mét tÖp ®Üa chøa c¸c m, gèc (source code). T¹i bíc thø hai,
c¸c m: gèc sÏ ®îc dÞch ®Ó t¹o ra mét tÖp ®Ých (object file). T¹i bíc thø ba, c¸c m: ®: ®îc
dÞch sÏ ®îc kÕt nèi l¹i ®Ó t¹o ra mét tÖp ch¬ng tr×nh cã thÓ ch¹y ®îc (executable file).
Cuèi cïng, bíc bèn lµ ®Ó ch¹y ch¬ng tr×nh vµ xem kÕt qu¶.

T¹o lËp m· gèc

C¸c m: gèc lµ mét lo¹t c¸c c©u lÖnh, hoÆc lÖnh chØ thÞ cho m¸y tÝnh thùc hiÖn c¸c c«ng
viÖc mµ ngêi lËp tr×nh mong muèn. VÝ dô, díi ®©y lµ mét dßng cña m: gèc:
printf ("Chµo c¸c b¹n");

LÖnh nµy chØ thÞ cho m¸y tÝnh hiÖn trªn mµn h×nh th«ng ®iÖp Chµo c¸c b¹n.

DÞch c¸c m· gèc

C¸c m¸y tÝnh chØ hiÓu ®îc mét ng«n ng÷, ®ã lµ ng«n ng÷ m¸y (machine language). Bëi
vËy, tríc khi mét ch¬ng tr×nh C cã thÓ ch¹y ®îc trªn mét m¸y tÝnh, nã ph¶i ®îc dÞch tõ
c¸c m: gèc sang m: m¸y b»ng mét ch¬ng tr×nh ®îc gäi lµ ch¬ng tr×nh dÞch (compiler).
Ch¬ng tr×nh dÞch lÊy c¸c m: gèc lµm input vµ cho ra mét tÖp ®Üa chøa c¸c c©u lÖnh m:
m¸y t¬ng øng víi c¸c c©u lÖnh m: gèc. C¸c c©u lÖnh m: m¸y ®îc t¹o ra bëi ch¬ng tr×nh
dÞch ®îc gäi lµ c¸c m: ®Ých vµ tÖp ®Üa chøa chóng ®îc gäi lµ tÖp ®Ých. TÖp ®Ých cã tªn
trïng víi tªn tÖp gèc vµ lu«n cã ®u«i lµ OBJ. §u«i OBJ ®Ó chØ r»ng tÖp nµy lµ tÖp ®Ých vµ
sÏ ®îc sö dông bëi ch¬ng tr×nh kÕt nèi (linker).

KÕt nèi ®Ó t¹o ra mét tÖp cã thÓ ch¹y ®îc

CÇn ph¶i thùc hiÖn thªm mét bíc n÷a th× ch¬ng tr×nh míi cã thÓ ch¹y ®îc. Trong C cã
mét bé phËn ®îc gäi lµ th viÖn. Th viÖn cña C chøa c¸c m: ®Ých cña c¸c hµm ®: ®îc lËp
s½n. VÝ dô, hµm printf ®îc sö dông trong vÝ dô tríc lµ mét hµm th viÖn. C¸c hµm th viÖn
thùc hiÖn c¸c c«ng viÖc thêng hay ph¶i dïng ®Õn, ch¼ng h¹n nh hiÖn c¸c th«ng tin lªn
mµn h×nh, ®äc sè liÖu tõ c¸c tÖp ®Üa. NÕu mét ch¬ng tr×nh cã sö dông c¸c hµm th viÖn th×
tÖp ®Ých cña nã cÇn ph¶i ®îc kÕt nèi víi m: ®Ých cña c¸c hµm nµy ®Ó t¹o ra mét ch¬ng
tr×nh cã thÓ ch¹y ®îc. TÖp nµy cã tªn trïng víi tªn tÖp gèc vµ cã ®u«i lµ .EXE.

Hoµn thiÖn chu tr×nh ph¸t triÓn

Sau khi dÞch vµ kÕt nèi cÇn ph¶i ch¹y thö ch¬ng tr×nh. NÕu kÕt qña nhËn ®îc kh«ng nh
mong muèn th× cÇn ph¶i t×m ra nguyªn nh©n dÉn ®Õn c¸c sai sãt vµ söa l¹i ch¬ng tr×nh cho
®óng. Khi cã bÊt kú mét thay ®æi nµo trong m: gèc, ch¬ng tr×nh ph¶i ®îc dÞch vµ kÕt nèi
l¹i. Chu tr×nh trªn sÏ ph¶i lÆp ®i lÆp l¹i cho ®Õn khi nµo nhËn ®îc kÕt qña nh mong muèn.

Mét ®iÓm lu ý cuèi cïng vÒ viÖc dÞch vµ kÕt nèi lµ, mÆc dï viÖc dÞch vµ kÕt nèi nh ®:
tr×nh bÇy trªn ®©y lµ hai giai ®o¹n t¸ch biÖt nhng nhiÒu ch¬ng tr×nh dÞch, ch¼ng h¹n c¸c
ch¬ng tr×nh dÞch ch¹y díi DOS l¹i gép hai bíc trªn thµnh mét. Cho dï nh vËy nhng vÉn
cø ph¶i hiÓu r»ng ®©y lµ hai qóa tr×nh riªng rÏ ngay c¶ khi chóng chØ ®îc thùc hiÖn b»ng
mét lÖnh.

Chu tr×nh ph¸t triÓn mét ch¬ng tr×nh C

Bíc 1: Sö dông mét bé so¹n th¶o ®Ó viÕt c¸c m· gèc.

Th«ng thêng c¸c tÖp gèc cña C cã ®u«i lµ .C

Bíc 2: Dïng mét ch¬ng tr×nh ®Ó dÞch ch¬ng tr×nh gèc.


NÕu ch¬ng tr×nh dÞch kh«ng ph¸t hiÖn mét sai sãt nµo trong ch¬ng tr×nh gèc nã sÏ sinh ra
mét tÖp ®Ých. TÖp nµy cã cïng tªn víi tÖp ch¬ng tr×nh gèc vµ ®u«i lµ .OBJ. NÕu ch¬ng
tr×nh dÞch t×m thÊy mét lçi nµo ®ã, nã sÏ th«ng b¸o lªn mµn h×nh vµ ta ph¶i trë l¹i tõ bíc
mét ®Ó söa c¸c lçi ®: ®îc ph¸t hiÖn trong ch¬ng tr×nh gèc.

Bíc 3: KÕt nèi ch¬ng tr×nh b»ng bé kÕt nèi.


NÕu kh«ng cã lçi, bé kÕt nèi sÏ sinh ra mét tÖp ®Üa cã tªn trïng víi tªn ch¬ng tr×nh ®Ých
víi ®u«i .EXE chøa mét ch¬ng tr×nh cã thÓ ch¹y ®îc.

Bíc 4: Ch¹y ch¬ng tr×nh.


CÇn ph¶i ch¹y thö ch¬ng tr×nh sau khi kÕt thóc bíc 3 ®Ó xem kÕt qña ®: ®óng nh mong
muèn cha. NÕu cha th× ph¶i quay l¹i tõ bíc 1 vµ tiÕn hµnh c¸c thay ®æi cÇn thiÕt trong m:
gèc.

KÕt luËn
C lµ mét c«ng cô lËp tr×nh m¹nh, th«ng dông vµ chuyÓn ®æi ®îc. Bµi nµy gi¶i thÝch c¸c b-
íc kh¸c nhau trong qóa tr×nh viÕt mét ch¬ng tr×nh C. §ã lµ chu tr×nh so¹n th¶o/dÞch/kÕt
nèi/kiÓm tra.

ViÖc m¾c lçi trong khi ph¸t triÓn ch¬ng tr×nh lµ mét ®iÒu kh«ng thÓ tr¸nh khái. Ch¬ng
tr×nh dÞch cña C sÏ ph¸t hiÖn c¸c lçi trong m: gèc vµ hiÖn mét th«ng b¸o lçi vÒ kiÓu lçi vµ
vÞ trÝ cña lçi. C¸c th«ng tin nµy gióp ngêi lËp tr×nh söa l¹i m: gèc mét c¸ch dÔ dµng. Tuy
nhiªn, ch¬ng tr×nh dÞch kh«ng ph¶i lóc nµo còng th«ng b¸o ®îc chÝnh x¸c kiÓu cña lçi
còng nh vÞ trÝ cña chóng. §«i khi ngêi lËp tr×nh ph¶i vËn dông c¸c kiÕn thøc vÒ C ®Ó ph¸t
hiÖn c¸c sai sãt ®: g©y ra th«ng b¸o lçi.

C©u hái vµ tr¶ lêi


NÕu muèn cho mét ngêi nµo ®ã mét ch¬ng tr×nh C th× ph¶i cho tÖp nµo?

C lµ mét ng«n ng÷ cã ch¬ng tr×nh dÞch. §iÒu ®ã cã nghÜa lµ, sau khi m: gèc ®: ®îc dÞch
sÏ ph¸t sinh mét ch¬ng tr×nh cã thÓ ch¹y ®îc. Ch¬ng tr×nh nµy cã thÓ tù ch¹y mét m×nh.
NÕu muèn chuyÓn CHAO ®Õn nh÷ng ngêi nµo ®ã, ®iÒu duy nhÊt cÇn lµm lµ h:y chuyÓn
cho hä tÖp CHAO.EXE. Hä kh«ng cÇn tÖp gèc CHAO.C, hoÆc tÖp ®Ých CHAO.OBJ vµ
thËm chÝ ngay c¶ ch¬ng tr×nh dÞch C n÷a.

Sau khi ®, t¹o ®îc tÖp cã thÓ ch¹y ®îc, th× cã cÇn ph¶i gi÷ tÖp gèc hoÆc tÖp ®Ých n÷a
kh«ng?

NÕu tÖp gèc bÞ mÊt th× sau nµy kh«ng cßn c¸ch nµo kh¸c ®Ó cã thÓ thay ®æi ®îc ch¬ng
tr×nh ®: dÞch vµ kÕt nèi. Do vËy nªn gi÷ l¹i c¸c tÖp gèc. Nhng ®èi víi c¸c tÖp ®Ých th× l¹i
kh¸c. Cã mét vµi lý do cÇn ph¶i gi÷ l¹i c¸c tÖp ®Ých, tuy nhiªn nÕu nãi ngay b©y giê th×
cßn h¬i sím. Do vËy, cã thÓ xãa tÖp ®Ých mét khi ®: cã tÖp cã thÓ ch¹y ®îc. NÕu cÇn tÖp
®Ých, cã thÓ dÞch l¹i tõ tÖp gèc.

LiÖu cã thÓ bá qua c¸c th«ng b¸o nh¾c nhë kh«ng?


Mét sè th«ng b¸o nh¾c nhë kh«ng lµm ¶nh hëng ®Õn viÖc ch¹y cña ch¬ng tr×nh. Mét sè
kh¸c l¹i cã. NÕu ch¬ng tr×nh dÞch cho ra mét th«ng b¸o nh¾c nhë, th× ®ã lµ mét dÊu hiÖu
b¸o r»ng cã mét c¸i g× ®ã kh«ng hoµn toµn ®óng. HÇu hÕt c¸c ch¬ng tr×nh dÞch ®Òu cho
phÐp ®Æt møc nh¾c nhë. B»ng c¸ch dã th× chØ nhËn ®îc c¸c nh¾c nhë tõ møc nµy trë ®i.
Trong ch¬ng tr×nh, cÇn ph¶i xem tõng nh¾c nhë mét vµ quyÕt ®Þnh nªn kh¾c phôc nã hay
lµ kh«ng. Tèt nhÊt lµ nªn söa l¹i m: gèc sao cho kh«ng cßn mét th«ng b¸o lçi vµ nh¾c
nhë nµo.

LuyÖn lËp
Môc LuyÖn tËp cho c¸c c©u hái ®Ó gióp ngêi ®äc cñng cè l¹i kiÕn thøc cña m×nh vµ c¸c
bµi tËp nh»m cung cÊp c¸c kinh nghiÖm khi sö dông nh÷ng ®iÒu ®: häc.

C©u hái

H:y nªu ba lý do t¹i sao C lµ mét lùa chän tèt nhÊt vÒ ng«n ng÷ lËp tr×nh.

Ch¬ng tr×nh dÞch lµm c«ng viÖc g×?

C¸c bíc trong chu tr×nh ph¸t triÓn ch¬ng tr×nh lµ g×?

CÇn ph¶i gâ lÖnh nµo ®Ó dÞch mét ch¬ng tr×nh cã tªn PROG1.C b»ng ch¬ng tr×nh dÞch C ?

Ch¬ng tr×nh dÞch C kÕt nèi vµ dÞch b»ng mét lÖnh hay b»ng hai lÖnh riªng rÏ?

Nªn dïng ®u«i nµo cho c¸c tÖp gèc cña C?

FILENAME.TXT cã hîp lÖ cho mét tÖp gèc cña C kh«ng?

NÕu mét ch¬ng tr×nh ®: ®îc dÞch vµ nã kh«ng lµm viÖc nh mong muèn, th× nªn lµm nh thÕ
nµo ?

M: m¸y lµ g×?

Bé kÕt nèi lµm c«ng viÖc g×?

Bµi tËp

H:y nhËp vµ dÞch ch¬ng tr×nh sau ®©y. Ch¬ng tr×nh nµy lµm viÖc g×? (kh«ng viÕt c¸c sè
hiÖu dßng khi so¹n ch¬ng tr×nh)

include <stdio.h>

int bankinh, dientich;

main()
{

printf( "NhËp b¸n kÝnh: " );

scanf( "%d", &bankinh );

dientich = 3.14159 * bankinh * bankinh;

printf( "\n\nDiÖn tÝch = %d", dientich );

return 0;

2. NhËp vµ dÞch ch¬ng tr×nh sau. Ch¬ng tr×nh nµy lµm viÖc g×?

#include <stdio.h>

int x,y;

main()

for ( x = 0; x < 10; x++, printf( "\n" ) )

for ( y = 0; y < 10; y++ )

printf( "X" );

return 0;

3. Ch¬ng tr×nh sau ®©y cã mét vÊn ®Ò. H:y nhËp vµ dÞch nã. C¸c dßng nµo sinh ra
th«ng b¸o lçi?

#include <stdio.h>

main();

printf( "H·y nh×n xem!" )

printf( "B¹n sÏ t×m thÊy nã!" );


return 0;

4. Ch¬ng tr×nh sau ®©y còng cã mét vÊn ®Ò. H:y nhËp vµ dÞch nã. C¸c dßng nµo sinh
ra th«ng b¸o lçi?

#include <stdio.h>

main()

printf( "§©y lµ mét ch¬ng tr×nh" )

do_it( "cã lçi!" );

return 0;

5. Thay lÖnh sè 9 trong ch¬ng tr×nh ë bµi tËp 2 nh díi ®©y. DÞch vµ ch¹y l¹i
ch¬ng tr×nh. B©y giê ch¬ng tr×nh nµy lµm g×?

9: printf( "%c", 1 );

Bµi 2. C¸c thµnh phÇn cña mét


ch¥ng tr×nh C
Mäi ch¬ng tr×nh C ®Òu chøa mét sè c¸c thµnh phÇn ®îc liªn kÕt víi nhau theo mét c¸ch
nhÊt ®Þnh. §Ó cã mét bøc tranh tæng thÓ, tríc hÕt nªn b¾t ®Çu xÐt mét ch¬ng tr×nh C ng¾n
nhng hoµn chØnh víi tÊt c¶ c¸c thµnh phÇn cña nã.

Mét ch¬ng tr×nh C ng¾n


Chong tr×nh 2.1 lµ m: gèc cña mét ch¬ng tr×nh cã tªn lµ NHAN.C. §©y lµ mét ch¬ng
tr×nh rÊt ®¬n gi¶n: nã chØ bao gåm viÖc nhËp hai sè tõ bµn phÝm vµ tÝnh tÝch cña chóng. ë
®©y cha cÇn ph¶i hiÓu tÊt c¶ c¸c lÖnh cña ch¬ng tr×nh, mµ chñ yÕu lµ lµm quen víi c¸c
thµnh phÇn cña mét ch¬ng tr×nh C mµ th«i.
Tríc khi xÐt chi tiÕt ch¬ng tr×nh nµy, cÇn ph¶i hiÓu râ kh¸i niÖm vÒ hµm (function), v×
hµm lµ mét yÕu tè c¬ b¶n trong viÖc lËp tr×nh C. Mét hµm lµ mét bé phËn ®éc lËp cña ch-
¬ng tr×nh, ®îc ®Æt tªn vµ thùc hiÖn mét c«ng viÖc nµo ®ã. B»ng viÖc gäi tªn mét hµm, ch-
¬ng tr×nh chÝnh cã thÓ thùc hiÖn c¸c lÖnh trong hµm nµy. Ch¬ng tr×nh chÝnh cã thÓ göi c¸c
th«ng tin, ®îc gäi lµ ®èi sè (argument), cho hµm, vµ hµm cã thÓ ®a ra c¸c th«ng tin cho
ch¬ng tr×nh. Cã hai kiÓu hµm: c¸c hµm th viÖn - mét bé phËn cña ch¬ng tr×nh dÞch cña C;
vµ c¸c hµm do ngêi sö dông tù ®Þnh nghÜa.

Ch¬ng tr×nh 2.1. NHAN.C.

1: /* Ch¬ng tr×nh tÝnh tÝch cña hai sè. */

2: #include<stdio.h>

3: int a,b,c;

4: int tich(int x, int y);

5: main()

6: {

7: /* NhËp sè thø nhÊt */

8: printf("NhËp mét sè n»m gi÷a 1 vµ 100: ");

9: scanf("%d", &a);

10

11: /* NhËp sè thø hai */

12: printf("NhËp mét sè kh¸c n»m gi÷a 1 vµ 100: ");

13: scanf("%d", &b);

14:

15: /* TÝnh vµ hiÖn kÕt qña */

16: c = tich(a,b);

17: printf( "\n%d nh©n %d = %d", a, b, c);

18: }
19:

20: /* Hµm tÝnh tÝch cña hai ®èi sè */

21: int tich(int x, int y)

22: {

23: return ( x * y );

24: }

Ch¬ng tr×nh nµy sÏ hiÖn trªn mµn h×nh c¸c dßng kÕt qña sau:

NhËp mét sè n»m gi÷a 1 vµ 100: 35

NhËp mét sè kh¸c n»m gi÷a 1 vµ 100: 23

35 nh©n 23 = 805

C¸c thµnh phÇn cña ch¬ng tr×nh


Sau ®©y lµ m« t¶ cña c¸c thµnh phÇn kh¸c nhau cña ch¬ng tr×nh mÉu nãi trªn. C¸c sè hiÖu
dßng kh«ng ph¶i lµ thµnh phÇn cña ch¬ng tr×nh mµ chØ ®îc ®a vµo ®Ó tiÖn viÖc theo dâi vµ
ph©n tÝch.

Hµm main() (C¸c dßng 5-18)

Bé phËn duy nhÊt cÇn ph¶i cã trong mäi ch¬ng tr×nh C lµ hµm main(). D¹ng ®¬n gi¶n
nhÊt cña nã lµ: tªn hµm main theo sau lµ mét cÆp dÊu ngoÆc trßn ( ) vµ mét cÆp dÊu ngoÆc
nhän { } . N»m gi÷a c¸c dÊu ngoÆc nhän lµ c¸c lÖnh t¹o nªn th©n chÝnh cña ch¬ng tr×nh.
Díi ®iÒu kiÖn b×nh thêng, ch¬ng tr×nh sÏ b¾t ®Çu thùc hiÖn tõ lÖnh thø nhÊt trong main()
vµ kÕt thóc b»ng lÖnh cuèi cïng trong main().

ChØ thÞ #include (Dßng 2)

ChØ thÞ #include b¸o cho ch¬ng tr×nh dÞch cña C biÕt ph¶i thªm vµo ch¬ng tr×nh mét tÖp
trong khi dÞch. Mét tÖp ®îc thªm vµo lµ mét tÖp ®Üa riªng biÖt chøa c¸c th«ng tin cÇn thiÕt
cho ch¬ng tr×nh dÞch. Mét sè tÖp trong c¸c tÖp nµy (®«i khi cßn gäi lµ c¸c tÖp tiªu ®Ò -
header files) ®îc cung cÊp cïng víi ch¬ng tr×nh dÞch. TÊt c¶ c¸c tÖp nµy ®Òu cã ®u«i lµ
.H.

ChØ thÞ #include trong vÝ dô nµy cã nghÜa lµ "Céng thªm néi dung cña tÖp stdio.h". HÇu
hÕt c¸c ch¬ng tr×nh C ®Òu yªu cÇu mét hoÆc nhiÒu tÖp céng thªm.
§Þnh nghÜa biÕn

Mét biÕn lµ mét tªn gäi cho mét ®¹i lîng hoÆc mét ®èi tîng nµo ®ã. Mçi biÕn ®Òu ®îc
ph©n bæ mét ®Þa chØ trong bé nhí. Ch¬ng tr×nh C sö dông c¸c biÕn ®Ó lu gi÷ c¸c lo¹i d÷
liÖu kh¸c nhau trong qu¸ tr×nh thùc hiÖn ch¬ng tr×nh. Trong C, mét biÕn chØ cã thÓ ®îc sö
dông sau khi ®: ®îc ®Þnh nghÜa. Mét ®Þnh nghÜa biÕn cho ch¬ng tr×nh dÞch biÕt tªn cña
biÕn vµ kiÓu cña d÷ liÖu mµ nã lu gi÷. Trong vÝ dô mÉu, ®Þnh nghÜa ë dßng 3, int
a,b,c, ®Þnh nghÜa ba biÕn cã tªn lµ a, b, vµ c vµ mçi biÕn sÏ chøa mét gi¸ trÞ nguyªn
(integer). Trong Bµi 3 sÏ nãi râ h¬n vÒ c¸c biÕn vµ c¸c ®Þnh nghÜa biÕn.

Khai b¸o hµm (Dßng 4)

Mét khai b¸o hµm cho ch¬ng tr×nh dÞch biÕt tªn vµ ®èi sè cña hµm sÏ ®îc sö dông trong
ch¬ng tr×nh. Khai b¸o nµy ph¶i xuÊt hiÖn tríc khi hµm ®îc sö dông. Khai b¸o hµm kh¸c
víi ®Þnh nghÜa hµm. Mét ®Þnh nghÜa hµm chøa c¸c lÖnh t¹o ra hµm ®ã.

C¸c lÖnh ch¬ng tr×nh (C¸c dßng 8, 9, 12, 13, 16, 17, 23)

C«ng viÖc thùc sù cña mét ch¬ng tr×nh C ®îc thùc hiÖn bëi c¸c lÖnh cña nã. C¸c lÖnh cña
C lµ: hiÖn c¸c th«ng tin trªn mµn h×nh, ®äc c¸c phÝm ®îc gâ vµo tõ bµn phÝm, thùc hiÖn
c¸c phÐp sè häc, gäi c¸c hµm, ®äc c¸c tÖp ®Üa, vµ tÊt c¶ c¸c thao t¸c kh¸c mµ mét ch¬ng
tr×nh cÇn ph¶i thùc hiÖn. Tõ bµi nµy trë ®i, mçi mét lÖnh C ®îc viÕt riªng trªn mét dßng
vµ lu«n lu«n ®îc kÕt thóc b»ng mét dÊu chÊm phÈy (;). Sau ®©y lµ c¸c gi¶i thÝch ng¾n gän
cho c¸c lÖnh cña ch¬ng tr×nh NHAN.C.

printf()

LÖnh printf() (c¸c dßng 8, 12, vµ 17) lµ mét hµm th viÖn dïng ®Ó hiÖn th«ng tin lªn
mµn h×nh. LÖnh nµy cã thÓ dïng ®Ó hiÖn mét th«ng b¸o v¨n b¶n ®¬n gi¶n (nh ë dßng 8 vµ
12) hoÆc mét th«ng b¸o vµ mét hoÆc nhiÒu biÕn ch¬ng tr×nh (nh ë dßng 17).

scanf()

LÖnh scanf() (c¸c dßng 9 vµ 13) còng lµ mét hµm th viÖn dïng ®Ó ®äc d÷ liÖu tõ bµn
phÝm vµ g¸n d÷ liÖu nµy cho mét hoÆc nhiÒu biÕn ch¬ng tr×nh.

c = tich (a, b);

LÖnh nµy gäi mét hµm cã tªn lµ tich().NghÜa lµ, nã thùc hiÖn c¸c lÖnh ch¬ng tr×nh
chøa trong hµm tich(). Nã cßn göi c¸c ®èi sè a vµ b cho hµm. Sau khi c¸c lÖnh trong
hµm tich() ®îc hoµn tÊt, tich() cßn ®a ra mét gi¸ trÞ cho ch¬ng tr×nh. Gi¸ trÞ nµy ®-
îc lu gi÷ trong biÕn cã tªn lµ c.

return (x * y);
LÖnh nµy lµ mét bé phËn cña hµm tich(). Nã tÝnh tÝch cña c¸c biÕn x vµ y råi chuyÓn
kÕt qña cho ch¬ng tr×nh ®: gäi tich().

§Þnh nghÜa hµm (C¸c dßng 21-24)

Mét hµm lµ mét ®o¹n m: gèc ®éc lËp thùc hiÖn mét nhiÖm vô nhÊt ®Þnh. Mçi hµm ®Òu cã
mét tªn, vµ c¸c m: gèc cña hµm nµy ®îc thùc hiÖn mçi khi tªn hµm ®îc gäi trong mét ch-
¬ng tr×nh.

Hµm cã tªn tich() ë c¸c dßng 21-24 lµ mét hµm do ngêi sö dông tù ®Þnh nghÜa vµ tù
viÕt trong qu¸ tr×nh ph¸t triÓn ch¬ng tr×nh. Hµm nµy rÊt ®¬n gi¶n: nã chØ lµm mçi mét viÖc
lµ nh©n hai gi¸ trÞ víi nhau vµ ®a kÕt qña cho ch¬ng tr×nh ®: gäi nã.

C cßn cã c¸c hµm th viÖn ®îc cung cÊp cïng víi ch¬ng tr×nh dÞch. C¸c hµm th viÖn thùc
hiÖn hÇu hÕt c¸c c«ng viÖc c¬ b¶n nhÊt (nh c¸c thao t¸c trªn mµn h×nh, bµn phÝm, ®äc/ghi
®Üa) mµ mét ch¬ng tr×nh cÇn ®Õn. Trong vÝ dô nµy, printf() vµ scanf() lµ c¸c hµm
th viÖn.

C¸c chó thÝch trong ch¬ng tr×nh (C¸c dßng 1, 7, 11, 15, 20)

BÊt kú phÇn nµo mµ khëi ®Çu b»ng /* vµ kÕt thóc b»ng */ ®Òu ®îc gäi lµ mét chó thÝch.
Ch¬ng tr×nh dÞch bá qua tÊt c¶ c¸c chó thÝch vµ nh vËy th× chóng tuyÖt ®èi kh«ng ¶nh h-
ëng ®Õn sù ho¹t ®éng cña mét ch¬ng tr×nh. Cã thÓ viÕt bÊt cø thø g× trong mét chó thÝch
vµ nã sÏ kh«ng ¶nh hëng ®Õn ho¹t ®éng cña ch¬ng tr×nh. Mét chó thÝch cã thÓ chØ chiÕm
mét phÇn nµo ®ã cña mét dßng, toµn bé mét dßng, hoÆc còng cã thÓ nhiÒu dßng. Tuy
nhiªn, kh«ng nªn lång chó thÝch nµy trong mét chó thÝch kh¸c. HÇu hÕt c¸c ch¬ng tr×nh
dÞch ®Òu kh«ng chÊp nhËn lo¹i h×nh nµy.

NhiÒu ngêi míi b¾t ®Çu häc lËp tr×nh cho r»ng kh«ng cÇn ®Õn chó thÝch vµ lµm nh vËy lµ
mÊt th× giê. Thùc ra th× kh«ng h¼n lµ nh vËy. C¸c thao t¸c trong ch¬ng tr×nh cã thÓ rÊt râ
rµng vµ dÔ theo dâi trong khi ®ang viÕt. Nhng khi ch¬ng tr×nh trë nªn dµi h¬n vµ phøc t¹p
dÇn lªn, hoÆc khi cÇn ph¶i söa ®æi mét ch¬ng tr×nh ®: viÕt tõ nhiÒu th¸ng tríc th× c¸c chó
thÝch thËt lµ cã gi¸ trÞ. Râ rµng lµ cÇn ph¶i t¹o ra mét thãi quen dïng c¸c chó thÝch ®Ó lµm
s¸ng tá tÊt c¶ c¸c cÊu tróc vµ c¸c ho¹t ®éng trong ch¬ng tr×nh.

C¸c dÊu ngoÆc nhän (C¸c dßng 6, 18, 22, 24)

C¸c dÊu ngoÆc nhän ({ } ) dïng ®Ó nhãm c¸c dßng lÖnh thµnh mét khèi. C¸c lÖnh cña
mét hµm, kÓ c¶ hµm main(), ph¶i ®îc ®Ó trong c¸c dÊu ngoÆc nµy.

Ch¹y ch¬ng tr×nh


ChuyÓn vµo th môc chøa ch¬ng tr×nh dÞch C.
Khëi ®éng bé so¹n th¶o.

NhËp m: gèc cña NHAN.C (lu ý, kh«ng nhËp c¸c sè hiÖu dßng).

CÊt gi÷ tÖp ch¬ng tr×nh.

DÞch vµ kÕt nèi ch¬ng tr×nh b»ng c¸ch ra c¸c lÖnh thÝch hîp víi ch¬ng tr×nh dÞch hiÖn cã.
NÕu kh«ng cã sai sãt g× trong qóa tr×nh dÞch còng nh kÕt nèi, ch¹y ch¬ng tr×nh b»ng lÖnh
run, hoÆc b»ng c¸ch gâ nhan t¹i dÊu nh¾c cña DOS.

NÕu xuÊt hiÖn mét hoÆc nhiÒu th«ng b¸o lçi, quay l¹i tõ bíc hai vµ söa c¸c lçi ®: m¾c
ph¶i.

KÕt luËn
Bµi nµy tuy ng¾n nhng rÊt quan träng. Nã cho biÕt cÊu tróc vµ c¸c thµnh phÇn cña mét ch-
¬ng tr×nh C. Bé phËn duy nhÊt mµ mét ch¬ng tr×nh C yªu cÇu lµ hµm main(). C«ng viÖc
thùc sù cña ch¬ng tr×nh ®îc thùc hiÖn bëi c¸c lÖnh ch¬ng tr×nh. C¸c lÖnh nµy híng dÉn
cho m¸y tÝnh thùc hiÖn c¸c hµnh ®éng mµ ch¬ng tr×nh mong muèn. Bµi nµy cßn nãi vÒ
c¸c biÕn vµ c¸c ®Þnh nghÜa biÕn, vµ chØ ra lîi Ých cña viÖc sö dông c¸c chó thÝch vµ c¸ch
dïng chóng.

Ngoµi hµm main() ra, mét ch¬ng tr×nh C cßn cã thÓ sö dông hai kiÓu hµm kh¸c: c¸c
hµm th viÖn ®îc cung cÊp cïng víi bé ch¬ng tr×nh dÞch vµ c¸c hµm do ngêi sö dông tù
®Þnh nghÜa.

C©u hái vµ tr¶ lêi

C¸c chó thÝch cã t¸c ®éng g× trªn mét ch¬ng tr×nh?

C¸c chó thÝch lµ ®Ó cho ngêi lËp tr×nh. Khi ch¬ng tr×nh dÞch chuyÓn c¸c m: gèc thµnh c¸c
m: ®Ých, nã sÏ vøt bá c¸c chó thÝch vµ c¸c vïng tr¾ng. §iÒu ®ã cã nghÜa lµ chóng kh«ng
hÒ cã mét t¸c ®éng nµo lªn ch¬ng tr×nh cã thÓ ch¹y ®îc. C¸c chó thÝch cã lµm cho ch¬ng
tr×nh gèc dµi h¬n, nhng ®iÒu ®ã còng kh«ng ®¸ng kÓ l¾m. VÒ l©u dµi, nªn sö dông c¸c chó
thÝch vµ c¸c kho¶ng trèng ®Ó ch¬ng tr×nh gèc dÔ ®äc vµ dÔ hiÓu h¬n.

Sù kh¸c nhau gi÷a mét lÖnh vµ mét khèi lµ g×?

Mét khèi lµ mét nhãm c¸c lÖnh ®îc ®Æt gi÷a c¸c dÊu ngoÆc nhän. Mét khèi cã thÓ ®îc sö
dông ë hÇu hÕt c¸c vÞ trÝ mµ t¹i ®ã cã thÓ sö dông mét lÖnh.

Lµm thÕ nµo ®Ó t×m thÊy danh s¸ch c¸c hµm th viÖn cã thÓ sö dông?

NhiÒu ch¬ng tr×nh dÞch cã kÌm theo tµi liÖu m« t¶ c¸c hµm th viÖn. Chóng thêng ®îc xÕp
theo thø tù tõ ®iÓn.
LuyÖn tËp

C©u hái

ThuËt ng÷ nµo dïng ®Ó chØ mét nhãm cña mét hoÆc nhiÒu lÖnh C ®îc ®Ó gi÷a c¸c dÊu
ngoÆc nhän?

Thµnh phÇn nµo ph¶i lu«n lu«n cã mÆt trong mét ch¬ng tr×nh C?

Lµm thÕ nµo ®Ó thªm vµo c¸c chó thÝch ch¬ng tr×nh vµ t¹i sao ph¶i dïng chóng?

Mét hµm lµ g×?

Trong C cã hai kiÓu hµm. C¸c hiÓu ®ã lµ kiÓu g× vµ chóng kh¸c nhau nh thÕ nµo?

ChØ thÞ #include dïng ®Ó lµm g×?

Bµi tËp

I. H:y viÕt mét ch¬ng tr×nh C ng¾n nhÊt.

II. Dïng ch¬ng tr×nh sau ®©y ®Ó tr¶ lêi cho c¸c c©u hái sau:

A. C¸c dßng nµo chøa c¸c lÖnh?

B. C¸c dßng nµo chøa c¸c ®Þnh nghÜa biÕn?

C. C¸c dßng nµo chøa c¸c khai b¸o hµm?

D. C¸c dßng nµo chøa c¸c ®Þnh nghÜa hµm?

E. C¸c dßng nµo chøa c¸c chó thÝch?

/* BT2-2.C */

#include <stdio.h>

void in_dong(void);

main()

in_dong();

printf("\n Tù d¹y ch¬ng tr×nh C trong 21 ngµy!\n";


in_dong();

return 0}

/* In mét dßng dÊu sao */

void in_dong(void)

int dem;
++
for(dem = 0; dem = 21; dem )

printf("*");

/* kÕt thóc ch¬ng tr×nh */

III. Ch¬ng tr×nh sau ®©y lµm viÖc g×?

/*BT2-3.C */

#include<stdio.h>

main()

int ctr;

for ( ctr=65; ctr,91; ctr++ );

printf( "%c", ctr );

return 0;

/* kÕt thóc ch¬ng tr×nh */

IV. Ch¬ng tr×nh sau ®©y lµm viÖc g×?

/* BT2-4.C */
#include<stdio.h>

main()

char buffer(256);

printf( "H·y viÕt tªn cña b¹n vµ Ên <Enter>:\n";

gets(buffer);

printf( "\nTªn cña b¹n cã %d ch÷ c¸i vµ dÊu cÊch!",

strlen( bufferr);

return 0;

Bµi 3. C¸c biÕn vµ c¸c h»ng


C¸c ch¬ng tr×nh m¸y tÝnh thêng lµm viÖc víi c¸c kiÓu d÷ liÖu kh¸c nhau vµ cÇn mét c¸ch
nµo ®ã ®Ó lu gi÷ c¸c gi¸ trÞ sÏ ph¶i sö dông. C¸c gi¸ trÞ nµy cã thÓ lµ c¸c sè hoÆc c¸c ký
tù. C cã hai c¸ch ®Ó lu gi÷ c¸c gi¸ trÞ sè - biÕn (variable) vµ h»ng (contstant) - víi nhiÒu
tuú chän kh¸c nhau cho mçi c¸ch. Mét biÕn lµ mét tªn gäi vµ ®îc ph©n bæ mét ®Þa chØ lu
tr÷. §Þa chØ nµy ®îc dïng ®Ó lu gi÷ gi¸ trÞ cña biÕn. Gi¸ trÞ nµy cã thÓ thay ®æi trong khi
ch¬ng tr×nh thùc hiÖn. Ngîc l¹i, mét h»ng cã mét gi¸ trÞ cè ®Þnh kh«ng ®îc thay ®æi.

Tríc khi ®i vµo c¸c biÕn, cÇn biÕt qua mét chót vÒ sù ho¹t ®éng cña bé nhí m¸y tÝnh.

Bé nhí cña m¸y tÝnh


M¸y tÝnh dïng mét bé nhí truy nhËp ngÉu nhiªn (random access memory - RAM) ®Ó lu
gi÷ th«ng tin trong khi ®ang ho¹t ®éng. RAM ®îc ®Æt trong c¸c m¹ch tÝch hîp, hay cßn
gäi lµ chip, n»m bªn trong m¸y tÝnh. C¸c th«ng tin lu trong RAM thêng xuyªn cã thÓ bÞ
xãa vµ ®îc thay thÕ b»ng c¸c th«ng tin míi. Ngoµi ra RAM chØ nhí th«ng tin khi m¸y
®ang ch¹y vµ c¸c th«ng tin sÏ bÞ mÊt khi t¾t m¸y.

Mét byte lµ ®¬n vÞ c¬ b¶n cña bé nhí d÷ liÖu cña m¸y tÝnh. C¸c kiÓu d÷ liÖu kh¸c nhau ®-
îc lu gi÷ b»ng c¸c sè lîng byte kh¸c nhau. B¶ng 3.1. cho thÊy sù kh¸c nhau nµy.
B¶ng 3.1. Sè lîng bytes cÇn thiÕt ®Ó lu gi÷ d÷ liÖu

D÷ liÖu Sè bytes cÇn thiÕt

Ch÷ c¸i x 1
Sè 100 2
Sè 120.145 4
Côm tõ Tù häc ng«n ng÷ C 17
Mét trang ®¸nh m¸y 3000 (gÇn ®óng)

RAM trong m¸y tÝnh ®îc tæ chøc theo kiÓu tuÇn tù, byte nµy tiÕp byte kia. Mçi byte cã
mét ®Þa chØ duy nhÊt ®Ó ®Þnh danh cho nã vµ ph©n biÖt nã víi tÊt c¶ c¸c byte kh¸c trong
bé nhí. C¸c ®Þa chØ ®îc g¸n cho c¸c vÞ trÝ bé nhí mét c¸ch tuÇn tù, khëi ®Çu tõ 0 cho ®Õn
hÕt bé nhí cña m¸y.

C¸c biÕn
Mét biÕn lµ mét tªn gäi vµ ®îc ph©n bæ mét ®Þa chØ lu tr÷. §Þa chØ nµy ®îc dïng ®Ó lu gi÷
gi¸ trÞ cña biÕn. Gi¸ trÞ nµy cã thÓ thay ®æi trong khi ch¬ng tr×nh thùc hiÖn.

C¸c tªn biÕn

Trong C, c¸c tªn biÕn ph¶i tu©n theo c¸c qui t¾c sau:

Tªn biÕn cã thÓ chøa c¸c ch÷, c¸c ch÷ sè vµ dÊu g¹ch díi (_).

Ký tù ®Çu tiªn cña tªn ph¶i lµ mét ch÷. Cã thÓ dïng dÊu g¹ch díi nh lµ ký tù ®Çu tiªn, nh-
ng kh«ng nªn lµm nh vËy v× xem ra kh«ng ®îc hîp lý cho l¾m.

Ch÷ hoa vµ ch÷ thêng lµ kh¸c nhau. Tøc lµ, Count vµ count lµ hai biÕn kh¸c nhau.

C¸c tõ giµnh riªng (keyword) cña C kh«ng ®îc sö dông lµm tªn biÕn. Mét keyword lµ mét
tõ mµ C sö dông nh lµ mét thµnh phÇn cña nã.

Sau ®©y lµ mét sè vÝ dô vÒ c¸c tªn biÕn hîp lÖ vµ kh«ng hîp lÖ trong C:

phantram /* hîp lÖ */

y2x5_fg7h /* hîp lÖ */

loinhuan_hangnam /* hîp lÖ */

_1995_thue /* hîp lÖ, nhng kh«ng nªn dïng */

Taikhoan#tk /* kh«ng hîp lÖ, v× ký tù # kh«ng hîp lÖ */


double /* kh«ng hîp lÖ, v× lµ keyword cña C */

9thang /* kh«ng hîp lÖ, v× ký tù ®Çu tiªn lµ sè */

V× C ph©n biÖt ch÷ hoa víi ch÷ thêng, nªn phantram, Phantram, vµ PHANTRAM lµ
tªn cña ba biÕn kh¸c nhau. Dï r»ng kh«ng b¾t buéc, nhng c¸c tªn biÕn trong C thêng ®îc
viÕt b»ng ch÷ thêng, cßn tªn cña c¸c h»ng th× ®îc viÕt b»ng ch÷ hoa.

§èi víi nhiÒu ch¬ng tr×nh dÞch, mét tªn biÕn cña C cã thÓ dµi tíi 31 ký tù. Víi ®é dµi nh
vËy, cã thÓ t¹o ra c¸c tªn biÕn nãi lªn ®îc ý nghÜa cña d÷ liÖu ®îc lu gi÷ trong chóng.

C¸c tªn cã bao hµm ý nghÜa thêng gåm nhiÒu tõ. Cã thÓ dïng dÊu g¹ch díi ®Ó ph©n c¸ch
c¸c tõ hoÆc c¸c côm tõ víi nhau cho dÔ hiÓu. Cßn mét kiÓu kh¸c gäi lµ bíu l¹c ®µ. Thay
cho dÊu c¸ch, ngêi ta viÕt hoa ch÷ ®Çu tiªn cña mçi tõ. VÝ dô, TyLeLaiSuat, hoÆc
TyleLaisuat. KiÓu nµy cã vÎ thuËn tiÖn h¬n v× kh«ng ph¶i gâ thªm dÊu g¹ch díi.

C¸c kiÓu biÕn sè

C cung cÊp mét sè kiÓu biÕn sè kh¸c nhau. T¹i sao l¹i ph¶i cÇn mét sè kiÓu biÕn kh¸c
nhau? §ã lµ v×, c¸c gi¸ trÞ sè kh¸c nhau yªu cÇu sè bytes ®Ó lu gi÷ kh¸c nhau vµ c¸c phÐp
to¸n sè häc cã thÓ thùc hiÖn trªn chóng còng kh¸c nhau. C¸c sè nguyªn nhá (vÝ dô, 1, 19,
-8) yªu cÇu Ýt byte ®Ó lu gi÷, vµ c¸c phÐp to¸n sè häc (céng, nh©n, v.v.) trªn c¸c sè nµy cã
thÓ ®îc thùc hiÖn rÊt nhanh b»ng m¸y tÝnh. Ngîc l¹i, nh÷ng sè nguyªn lín vµ c¸c sè dÊu
chÊm ®éng (vÝ dô, 123000000 hoÆc 0.000000345213) yªu cÇu nhiÒu bytes h¬n vµ thêi
gian tÝnh to¸n víi chóng còng l©u h¬n. B»ng c¸ch dïng c¸c kiÓu biÕn sè thÝch hîp, ch¬ng
tr×nh sÏ ch¹y mét c¸ch hiÖu qña h¬n.

C¸c biÕn sè cña C r¬i vµo hai nhãm chÝnh sau ®©y:

C¸c biÕn nguyªn (interger) dïng ®Ó lu gi÷ c¸c gi¸ trÞ kh«ng cã phÇn thËp ph©n. C¸c biÕn
nguyªn l¹i ph©n thµnh hai líp: biÕn nguyªn cã dÊu ®Ó ghi c¸c gi¸ trÞ nguyªn d¬ng vµ
nguyªn ©m; biÕn nguyªn kh«ng dÊu chØ ®Ó ghi c¸c gi¸ trÞ kh«ng ©m (bao gåm c¶ sè 0).

C¸c biÕn dÊu chÊm ®éng (Floating-point) gi÷ c¸c gi¸ trÞ cã phÇn thËp ph©n (sè thùc). Lu ý
mét ®iÓm lµ, tríc ®©y ta vÉn quen dïng dÊu phÈy ®Ó ng¨n c¸ch phÇn nguyªn vµ phÇn ph©n
cña mét sè, nªn míi cã tªn gäi dÊu phÈy ®éng, nay theo chuÈn cña ANSI th× ngêi ta dïng
dÊu chÊm thËp ph©n, bëi vËp míi cã tªn gäi dÊu chÊm ®éng. Tõ nay trë ®i sÏ dïng dÊu
chÊm thËp ph©n thay cho dÊu phÈy thËp ph©n. Cßn dÊu phÈy ®îc dïng lµm dÊu ng¨n c¸ch
hµng ngh×n, hµng triÖu, hµng tû, v.v.

B¶ng 3.2. C¸c kiÓu d÷ liÖu sè cña C

KiÓu biÕn Keyword S« bytes MiÒn gi¸ trÞ

ký tù char 1 -128 ®Õn 127


nguyªn int 2 -32768 ®Õn 32767

nguyªn ng¾n short 2 -32768 ®Õn 32767

nguyªn dµi long 4 -2147483648 ®Õn 2147483647

ký tù kh«ng dÊu unsigned char 1 0 ®Õn 255

nguyªn kh«ng dÊu unsigned int 2 0 ®Õn 65535

nguyªn ng¾n kh. dÊu unsigned short 2 0 ®Õn 65535

nguyªn dµi kh. dÊu unsigned long 4 0 ®Õn 4294967295

dÊu chÊm ®éng float 4 1.2E-38 ®Õn 3.4E38*


®é chÝnh x¸c ®¬n

dÊu chÊm ®éng float 8 2.2E-308 ®Õn 1.8E308**


®é chÝnh x¸c gÊp ®«i
*
MiÒn gÇn ®óng; ®é chÝnh x¸c= 7 ch÷ sè.
**
MiÒn gÇn ®óng; ®é chÝnh x¸c= 19 ch÷ sè.

MiÒn gÇn ®óng trong b¶ng nµy cã nghÜa lµ c¸c gi¸ trÞ cao nhÊt vµ thÊp nhÊt mµ mét biÕn
®: cho cã thÓ nhËn. §é chÝnh x¸c nghÜa lµ ®óng ®Õn bao nhiªu ch÷ sè cña gi¸ trÞ ®îc ghi
trong biÕn ®: cho. (VÝ dô, nÕu tÝnh 1/3, th× kÕt qña ®óng lµ 0.333333.... víi c¸c sè 3 cø
tiÕp tôc ®Õn v« h¹n. Mét biÕn víi ®é chÝnh x¸c ®¬n chØ ghi ®îc 7 con 3.)

Trong b¶ng nµy, c¸c kiÓu int vµ short int lµ gièng nhau. Nhng t¹i sao l¹i ph¶i cã
hai kiÓu kh¸c nhau nh vËy? C¸c kiÓu biÕn int vµ short int lµ gièng hÖt nhau trªn c¸c
hÖ thèng t¬ng thÝch víi c¸c m¸y tÝnh IBM-PC 16-bit, nhng chóng cã thÓ sÏ kh¸c nhau trªn
c¸c phÇn cøng kiÓu kh¸c. Trªn mét hÖ VAX, mét biÕn short vµ mét biÕn int kh«ng
cïng cì víi nhau. Mét biÕn short chiÕm 2 bytes, nhng mét biÕn int l¹i chiÕm nh÷ng 4
bytes. Do vËy, ®èi víi c¸c m¸y PC, hai kiÓu nµy lµ nh nhau.

C¸c khai b¸o biÕn

Mäi biÕn cÇn ph¶i ®îc khai b¸o tríc khi ®îc ®em ra sö dông. Mét khai b¸o biÕn cho ch-
¬ng tr×nh dÞch biÕt tªn vµ kiÓu cña mét biÕn vµ cã thÓ khëi t¹o cho biÕn mét gi¸ trÞ nµo ®ã.
Mét khai b¸o biÕn cã d¹ng sau:

tªnkiÓu tªnbiÕn

TªnkiÓu x¸c ®Þnh kiÓu cña biÕn vµ ph¶i lµ mét trong c¸c keyword ®: cho trong B¶ng 3.2.
TªnbiÕn lµ tªn cña biÕn ®îc ®Æt theo c¸c qui t¾c ®: nãi ë phÇn tríc. Cã thÓ khai b¸o nhiÒu
biÕn cïng mét kiÓu trªn mét dßng, mçi biÕn c¸ch nhau b»ng mét dÊu phÈy. VÝ dô:
int tuoi, luong, con; /* ba biÕn nguyªn */

float phantram, tong; /* hai biªn ®éng */

Keyword typedef

Tõ khãa typedef ®îc sö dông ®Ó t¹o lËp mét tªn míi cho mét kiÓu d÷ liÖu ®: cã. Nãi mét
c¸ch chÝnh x¸c, typedef t¹o ra mét kiÓu ®ång nghÜa. VÝ dô, lÖnh

typedef int integer;

t¹o ra kiÓu integer tõ kiÓu int. Sau ®ã, cã thÓ dïng integer ®Ó ®Þnh nghÜa c¸c biÕn
kiÓu int.

Khëi t¹o c¸c biÕn sè

Khi mét biÕn ®îc khai b¸o, ch¬ng tr×nh dÞch sÏ dµnh ra mét vïng nhí cho biÕn nµy. Tuy
nhiªn, gi¸ trÞ ®îc nhí t¹i vïng nµy cha ®îc x¸c ®Þnh. Nã cã thÓ lµ 0, hoÆc cã thÓ lµ mét
gi¸ trÞ ngÉu nhiªn nµo ®ã cßn l¹i sau khi vïng nµy ®îc gi¶i phãng. Bëi vËy, tríc khi mét
biÕn ®îc sö dông, nã ph¶i ®îc khëi t¹o b»ng mét gi¸ trÞ x¸c ®Þnh nµo ®ã. ViÖc nµy cã thÓ
thùc hiÖn hoµn toµn ®éc lËp víi viÖc khai b¸o biÕn b»ng c¸ch dïng mét lÖnh g¸n. VÝ dô:

int count; /* Dµnh mét vïng nhí cho biÕn count */

count = 0; /* Ghi 0 vµo count */

Cã thÓ khëi t¹o mét biÕn ngay khi khai b¸o b»ng c¸ch viÕt dÊu b»ng vµ gi¸ trÞ khëi t¹o
sau tªn biÕn. VÝ dô

int count = 0;

double phantram = 0.01, tyle_thue = 20.5;

C¸c h»ng
Gièng nh mét biÕn, mét h»ng còng lµ mét tªn gäi vµ còng ®îc ph©n bæ mét ®Þa chØ trong
bé nhí. Nhng kh«ng gièng nh mét biÕn, gi¸ trÞ ®îc ghi trong mét h»ng kh«ng ®îc thay
®æi trong qu¸ tr×nh thùc hiÖn cña ch¬ng tr×nh. C cã hai kiÓu h»ng, mçi kiÓu l¹i cã c¸c c¸ch
sö dông kh¸c nhau.

C¸c h»ng thùc sù (literal constant)

Mét h»ng literal lµ mét gi¸ trÞ ®îc gâ trùc tiÕp vµo ch¬ng tr×nh gèc bÊt cø khi nµo nã ®îc
cÇn ®Õn. §©y lµ hai thÝ dô:

int count = 20;


float tyle_thue = 0.20;

C¸c gi¸ trÞ 20 vµ .20 lµ c¸c h»ng literal. C¸c lÖnh trªn lu gi÷ c¸c gi¸ trÞ nµy vµo c¸c biÕn
count vµ tyle_thue.

Mét h»ng literal víi dÊu chÊm thËp ph©n lµ mét h»ng dÊu chÊm ®éng vµ ®îc ch¬ng tr×nh
dÞch C xem nh mét sè cã ®é chÝnh x¸c gÊp ®«i.

Mét h»ng kh«ng cã dÊu chÊm thËp ph©n ®îc ch¬ng tr×nh dÞch biÓu diÔn nh mét sè
nguyªn. C¸c h»ng nguyªn cã thÓ ®îc viÕt theo ba d¹ng díi ®©y:

Mét h»ng khëi ®Çu b»ng mét ch÷ sè kh¸c 0 ®îc xem lµ sè nguyªn c¬ sè 10 (decimal).
Mét h»ng nguyªn hÖ 10 cã thÓ chøa c¸c sè 0-9 vµ mét dÊu trõ hoÆc + ë ®»ng tríc.

Mét h»ng khëi ®Çu b»ng ch÷ sè 0 ®îc xem lµ mét sè nguyªn c¬ sè 8 (octal). C¸c h»ng hÖ
8 cã thÓ chøa c¸c ch÷ sè 0-7 vµ phÝa tríc cã thÓ cã thªm dÊu trõ hoÆc céng.

Mét h»ng khëi ®Çu b»ng 0x hoÆc 0X ®îc xem lµ mét h»ng hÖ c¬ sè 16 (hexadecimal).
C¸c h»ng hÖ 16 cã thÓ chøa c¸c ch÷ sè 0-9 vµ c¸c ch÷ A, B, C, D vµ F, vµ mét dÊu trõ
hoÆc céng ë ®»ng tríc.

C¸c h»ng ký hiÖu (symbolic constant)

Mét h»ng ký hiÖu lµ mét h»ng ®îc ký hiÖu bëi mét tªn gäi (symbolic) nµo ®ã. Gièng nh
mét h»ng literal, gi¸ trÞ cña mét h»ng symbolic kh«ng thÓ thay ®æi. Gi¸ trÞ thùc sù cña
h»ng symbolic chØ ®îc nhËp vµo khi nã ®îc ®Þnh nghÜa. ViÖc sö dông mét h»ng kiÓu nµy
y hÖt nh sö dông mét biÕn.

H»ng ký hiÖu cã hai u ®iÓm næi bËt so víi h»ng thùc sù. VÝ dô, ®Ó tÝnh chu vi vµ diÖn tÝch
cña mét h×nh trßn khi biÕt b¸n kÝnh, cã thÓ viÕt nh sau:

chu_vi = 3.14 * (2 * ban_kinh);

dien_tich = 3.14 * ban_kinh * ban_kinh;

Tuy nhiªn, nÕu ®Þnh nghÜa mét h»ng ký hiÖu víi tªn lµ PI vµ gi¸ trÞ lµ 3.14, th× ®o¹n ch-
¬ng tr×nh trªn cã thÓ thay b»ng:

chu_vi = PI * (2 * ban_kinh);

dien_tich = PI * ban_kinh * ban_kinh;

Hai lÖnh nµy trë nªn s¸ng sña vµ dÔ hiÓu h¬n. Thay v× ph¶i b¨n kho¨n vÒ gi¸ trÞ 3.14 cã
nghÜa lµ g×, ë ®©y cã thÓ hiÓu ngay ®îc PI lµ g×.

¦u ®iÓm thø hai cña h»ng ký hiÖu lµ ë chç dÔ thay ®æi. TiÕp tôc vÝ dô trªn, ®Ó cho kÕt qña
cña ch¬ng tr×nh chÝnh x¸c h¬n cÇn ph¶i thay gi¸ trÞ cña PI lµ 3.14 b»ng mét gi¸ trÞ kh¸c
víi ®é chÝnh x¸c cao h¬n, ch¨ng h¹n 3.14159. NÕu ®: chãt dïng mét h»ng thùc sù cho sè
PI, th× b©y giê ph¶i duyÖt l¹i tÊt c¶ ch¬ng tr×nh ®Ó thay c¸c gi¸ trÞ 3.14 b»ng 3.14159. Víi
mét h»ng ký hiÖu, chØ cÇn thay ë ®óng mét chç, n¬i h»ng nµy ®îc ®Þnh nghÜa.

C cã hai ph¬ng ph¸p dïng ®Ó ®Þnh nghÜa mét h»ng ký hiÖu: chØ thÞ #define vµ tõ khãa
const. ChØ thÞ #define lµ mét trong nh÷ng chØ thÞ tiÒn xö lý sÏ ®îc tr×nh bÇy trong
c¸c bµi sau. ChØ thÞ nµy ®îc sö dông nh sau:

#define TENHANG giatri

Dßng nµy t¹o lËp mét h»ng cã tªn lµ TENHANG víi gi¸ trÞ lµ giatri. Trong ®ã
giatri chÝnh lµ mét h»ng sè, cßn TENHANG tu©n theo c¸c qui luËt gièng nh cña tªn
biÕn. §Ó cho dÔ ph©n biÖt gi÷a mét h»ng vµ mét biÕn, ta nªn viÕt c¸c tªn h»ng b»ng ch÷
hoa, cßn tªn biÕn viÕt b»ng ch÷ thêng. Trong vÝ dô tríc, ®Ó ®Þnh nghÜa h»ng ký hiÖu PI, cã
thÓ viÕt nh sau:

#define PI 3.14159

Chó ý lµ, chØ thÞ #define kh«ng kÕt thóc b»ng dÊu chÊm phÈy (;).#define cã thÓ ®îc
®Æt ë bÊt cø chç nµo trong ch¬ng tr×nh gèc, nhng chØ cã hiÖu lùc cho phÇn m: gèc ®øng
sau nã mµ th«i. Nãi chung, ngêi ta hay gom tÊt c¶ c¸c #define l¹i víi nhau vµ ®Æt
chóng ë ®Çu tÖp ngay tríc hµm main().

C¸ch thø hai ®Ó ®Þnh nghÜa mét h»ng ký hiÖu lµ dïng tõ khãa const. Mét biÕn ®îc khai
b¸o lµ const th× kh«ng thÓ thay ®æi gi¸ trÞ trong khi ch¬ng tr×nh thùc hiÖn. §©y lµ mét
vµi vÝ dô:

const int count = 100;

const float pi= 3.14159;

const long no= 12000000, float tyle_thue = 0.21;

const t¸c ®éng lªn tÊt c¶ c¸c biÕn trªn dßng khai b¸o. Trong dßng thø ba, no vµ
tyle_thue lµ c¸c h»ng ký hiÖu. NÕu trong ch¬ng tr×nh cã mét lÖnh nµo ®ã ®Þnh thay
®æi gi¸ trÞ cña mét biÕn h»ng, th× ch¬ng tr×nh dÞch sÏ sinh ra mét th«ng b¸o lçi. VÝ dô,

const int count = 100;

count = 200; /* Sai! Kh«ng thÓ g¸n l¹i hoÆc thay ®æi
gi¸ trÞ cña mét h»ng */

C¸c h»ng ký hiÖu ®îc ®Þnh nghÜa b»ng chØ thÞ #define vµ c¸c h»ng ®îc ®Þnh nghÜa b»ng
const cã sù kh¸c nhau. Sù kh¸c nhau nµy cã liªn quan ®Õn c¸c con trá vµ ph¹m vi cña
c¸c biÕn. Con trá vµ ph¹m vi cña c¸c biÕn lµ hai kh¸i niÖm quan träng sÏ ®îc tr×nh bÇy
trong c¸c bµi sau.
KÕt luËn
Bµi nµy ®: tr×nh bÇy kü vÒ c¸c biÕn sè dïng ®Ó lu gi÷ c¸c d÷ liÖu trong qóa tr×nh thùc hiÖn
ch¬ng tr×nh. Cã hai líp lín c¸c biÕn sè: nguyªn vµ dÊu chÊm ®éng. Trong mçi líp l¹i cã
mét sè kiÓu. ViÖc sö dông kiÓu nµo - int, long, float, hoÆc double - cho mét øng
dông lµ tuú thuéc vµo b¶n chÊt cña c¸c d÷ liÖu ®îc ghi trong biÕn. Mét biÕn cÇn ph¶i ®îc
khai b¸o tríc khi ®îc sö dông. Mét khai b¸o biÕn cho ch¬ng tr×nh dÞch biÕt tªn vµ kiÓu
cña biÕn.

Bµi nµy cßn nãi vÒ hai kiÓu h»ng cña C, h»ng thùc sù, vµ h»ng ký hiÖu. Kh«ng gièng nh
c¸c biÕn, gi¸ trÞ cña mét h»ng kh«ng ®îc thay ®æi trong qu¸ tr×nh thùc hiÖn ch¬ng tr×nh.
C¸c h»ng thùc sù lµ nh÷ng gi¸ trÞ ®îc gâ trùc tiÕp vµo ch¬ng tr×nh gèc bÊt cø khi nµo gi¸
trÞ nµy ®îc cÇn ®Õn. C¸c h»ng ký hiÖu ®îc ®Æt tªn vµ tªn nµy ®îc sö dông bÊt cø khi nµo
gi¸ trÞ cña h»ng ®îc cÇn ®Õn. C¸c h»ng ký hiÖu cã thÓ ®îc ®Þnh nghÜa vµ khëi t¹o b»ng chØ
thÞ #define hoÆc tõ khãa const.

C©u hái vµ tr¶ lêi


C¸c biÕn long int chøa ®îc c¸c sè nguyªn lín h¬n, vËy t¹i sao kh«ng dïng chóng
thay cho c¸c biÕn int ?

Mét biÕn long int chiÕm nhiÒu RAM h¬n mét biÕn int. Trong c¸c ch¬ng tr×nh nhá,
®iÒu nµy kh«ng ¶nh hëng l¾m. Tuy nhiªn, khi ch¬ng tr×nh cµng ngµy cµng lín h¬n, th×
nªn nghÜ ®Õn viÖc sö dông thËt tiÕt kiÖm bé nhí.

§iÒu g× sÏ x¶y ra, nÕu g¸n mét sè thËp ph©n cho mét biÕn nguyªn?

Cã thÓ g¸n mét sè thËp ph©n cho mét biÕn nguyªn. NÕu biÕn nguyªn nµy lµ mét biÕn
h»ng th× ch¬ng tr×nh dÞch sÏ cho ra mét th«ng b¸o nh¾c nhë (warning). Gi¸ trÞ ®îc g¸n sÏ
bÞ chÆt ®i phÇn thËp ph©n. VÝ dô, nÕu g¸n gi¸ trÞ 3.14 cho mét biÕn nguyªn tªn gäi lµ pi,
th× pi sÏ chØ chøa 3. PhÇn ph©n .14 bÞ bá ®i.

§iÒu g× sÏ xÈy ra, nÕu g¸n mét sè vµo mét kiÓu kh«ng ®ñ lín ®Ó chøa nã?

NhiÒu ch¬ng tr×nh dÞch cho phÐp lµm ®iÒu nµy mµ kh«ng th«ng b¸o g× c¶. Tuy nhiªn, sè
nµy sÏ bÞ biÕn ®æi ®Ó võa víi kiÓu ®: cho vµ ®«i khi cßn lµm thay ®æi h¼n gi¸ trÞ cña nã.
VÝ dô, nÕu g¸n 32768 cho mét biÕn kiÓu nguyªn cã dÊu hai bytes, th× biÕn nµy sÏ nhËn gi¸
trÞ nguyªn lµ -1. NÕu g¸n gi¸ trÞ 65535 cho biÕn nguyªn nµy, th× nã sÏ chøa gi¸ trÞ -32768.
Nguyªn t¾c biÕn ®æi nµy lµ, lÊy gi¸ trÞ lín nhÊt mµ kiÓu ®îc g¸n cã thÓ chøa ®îc trõ ®i gi¸
trÞ ®îc g¸n vµ chøa kÕt qña vµo biÕn nµy.

§iÒu g× sÏ x¶y ra, nÕu g¸n mét sè ©m cho mét biÕn kiÓu kh«ng dÊu?

Còng gièng nh c©u hái tríc, ch¬ng tr×nh dÞch cã thÓ sÏ kh«ng b¶o g× c¶ nhng kÕt qña l¹i
kh«ng ®óng nh mong muèn. VÝ dô, nÕu g¸n -1 cho mét biÕn nguyªn kh«ng dÊu hai bytes,
th× ch¬ng tr×nh dÞch sÏ ®Æt vµo biÕn nµy sè cao nhÊt cã thÓ (65535).
LuyÖn lËp
C©u hái

Cã g× kh¸c nhau gi÷a mét biÕn nguyªn vµ mét biÕn dÊu chÊm ®éng?

H:y cho biÕt hai lý do t¹i sao l¹i ph¶i dïng mét biÕn dÊu chÊm ®éng ®é chÝnh x¸c gÊp ®«i
(kiÓu double) thay cho mét biÕn dÊu chÊm ®éng ®é chÝnh x¸c ®¬n (kiÓu float.)

ViÖc dïng mét h»ng ký hiÖu thay cho mét h»ng thùc sù cã nh÷ng u ®iÓm nµo?

H:y nªu hai ph¬ng ph¸p ®Ó ®Þnh nghÜa mét h»ng ký hiÖu cã tªn lµ MAXIMUM vµ cã gi¸ trÞ
lµ 100.

C¸c ký tù nµo cã thÓ ®îc dïng ®Ó ®Æt tªn c¸c biÕn C?

Sù kh¸c nhau gi÷a mét h»ng ký hiÖu vµ mét h»ng thùc sù lµ g×?

Bµi tËp

I. Nªn dïng kiÓu biÕn nµo ®Ó lu gi÷ tèt nhÊt c¸c gi¸ trÞ sau ®©y:

A. Tuæi cña mét ngêi trong nh÷ng n¨m s¾p tíi.

B. Träng lîng cña mét ngêi b»ng kilogram.

C. B¸n kÝnh cña mét ®êng trßn.

D. L¬ng th¸ng cña b¹n.

E. Gi¸ cña mét mÆt hµng nµo ®ã.

F. NhiÖt ®é.

G. Kho¶ng c¸ch b»ng kilomet tõ tr¸i ®Êt ®Õn mét ng«i sao nµo ®ã.

II. H:y t¹o lËp c¸c tªn biÕn thÝch hîp cho c¸c gi¸ trÞ trong bµi tËp mét.

III. H:y viÕt c¸c khai b¸o cho c¸c biÕn trong bµi tËp hai.

IV. C¸c biÕn nµo lµ hîp lÖ vµ kh«ng hîp lÖ trong sè c¸c biÕn sau? T¹i sao kh«ng
hîp lÖ?
A. 123abc

B. x

C. tong_so

D. trong_luong_#s

E. mot

F. tyle-phantram

G. BAN_KINH

H. Ban_kinh

I. ban_kinh

J. day_la_mot_bien_de_chua_chieu_rong_hop

Bµi 4. C©u lÖnh, BiÓu thøc vµ PhÐp to¸n


C¸c ch¬ng tr×nh C chøa c¸c c©u lÖnh (statement), vµ hÇu hÕt c¸c c©u lÖnh ®Òu chøa c¸c
biÓu thøc (expression) vµ c¸c phÐp to¸n (operator). Bµi nµy bao gåm c¸c môc sau:

Mét c©u lÖnh lµ g×?

Mét biÓu thøc lµ g×?

C¸c phÐp to¸n to¸n häc, quan hÖ, vµ logic.

TiÒn to¸n tö lµ g×?

C©u lÖnh if.

C¸c c©u lÖnh


Mét c©u lÖnh lµ mét ph¬ng híng hµnh ®éng híng dÉn cho m¸y tÝnh thùc hiÖn mét nhiÖm
vô nµo ®ã. Trong C, c¸c c©u lÖnh thêng ®îc viÕt trªn mét dßng, nhng còng cã nh÷ng c©u
lÖnh ph¶i viÕt trªn nhiÒu dßng. Mäi c©u lÖnh cña C ®Òu kÕt thóc b»ng mét dÊu chÊm phÈy
(;) (trõ c¸c chØ thÞ, ch¼ng h¹n nh #include vµ #define).
VÝ dô,

x = 2+3;

lµ mét c©u lÖnh g¸n. Nã chØ ra cho m¸y tÝnh lÊy 2 céng víi 3, g¸n kÕt qña vµo biÕn x.

C¸c c©u lÖnh vµ c¸c kho¶ng tr¾ng

ThuËt ng÷ kho¶ng tr¾ng (whitespace) lµ ®Ó chØ c¸c dÊu c¸ch, tabs vµ c¸c dßng rçng trong
ch¬ng tr×nh gèc. Ch¬ng tr×nh dÞch C kh«ng xÐt ®Õn c¸c kho¶ng tr¾ng. Khi ch¬ng tr×nh
dÞch ®äc mét c©u lÖnh trong mét ch¬ng tr×nh gèc, nã sÏ ®äc tÊt c¶ c¸c ký tù trong c©u
lÖnh nµy cho ®Õn khi gÆp dÊu chÊm phÈy nhng bá qua tÊt c¶ c¸c kho¶ng tr¾ng. V× vËy,
c©u lÖnh x=2+3; trªn ®©y lµ hoµn toµn t¬ng ®¬ng víi

x = 2 + 3;

vµ víi

x =

3 ;

Mçi c©u lÖnh nªn viÕt trªn mét dßng vµ nªn cã mét dÊu c¸ch ®øng tríc vµ mét dÊu c¸ch
®øng sau mçi tªn biÕn. Tríc vµ sau mçi khèi nªn cã mét dßng rçng ®Ó dÔ nhËn biÕt tõng
khèi mét. Ngoµi ra, cã thÓ dïng tabs ®Ó ®Èy mét khèi thôt vµo so víi lÒ tr¸i nh»m t¹o ra
mét cÊu tróc cã tÝnh chÊt ph©n cÊp trong ch¬ng tr×nh.

Tuy nhiªn, trong mét h»ng c¸c ký tù (string constant) th× c¸c dÊu c¸ch vµ c¸c dÊu tabs l¹i
kh«ng bÞ bá qua, chóng ®îc coi lµ mét bé phËn cña x©u ký tù nµy. Mét x©u lµ mét d:y
c¸c ký tù. C¸c h»ng ký tù thùc sù lµ c¸c x©u ®îc ®Æt trong c¸c dÊu nh¸y vµ ®îc ch¬ng
tr×nh dÞch xö lý tõng ký tù mét.

NÕu chØ cã ®óng mét dÊu chÊm phÈy trªn mét dßng nµo ®ã, th× dßng nµy ®îc gäi lµ c©u
lÖnh rçng. C©u lÖnh rçng kh«ng thùc hiÖn bÊt kú hµnh ®éng nµo.

C¸c c©u lÖnh phøc hîp

Mét c©u lÖnh phøc hîp (compound statement), hay cßn gäi lµ mét khèi (block), lµ mét
nhãm gåm hai hay nhiÒu c©u lÖnh cña C ®îc ®Æt trong c¸c dÊu ngoÆc nhän. §©y lµ mét vÝ
dô vÒ mét khèi:

{
printf("Xin chµo, ");

printf(c¸c b¹n!");

Trong C, mét c©u lÖnh phøc hîp cã thÓ ®îc sö dông ë bÊt cø n¬i nµo mµ mét c©u lÖnh ®¬n
cã thÓ ®îc sö dông. Chó ý r»ng, cã thÓ cã mét vµi c¸ch ®Ó viÕt c¸c dÊu ngoÆc. C©u lÖnh
phøc hîp sau ®©y lµ t¬ng ®¬ng víi c©u lÖnh trªn:

{ printf("Xin chµo, ");

printf(c¸c b¹n!");}

Tuy nhiªn, viÖc ®Ó c¸c dÊu ngoÆc trªn hai dßng riªng biÖt lµm cho dÔ nhËn ra n¬i b¾t ®Çu
vµ n¬i kÕt thóc cña mét khèi h¬n.

C¸c biÓu thøc


Trong C, mét biÓu thøc lµ mét mÖnh ®Ò dïng ®Ó tÝnh ra mét gi¸ trÞ nµo ®ã. C¸c biÓu thøc
C cã thÓ cã ®é phøc t¹p tïy ý.

C¸c biÓu thøc ®¬n gi¶n

BiÓu thøc ®¬n gi¶n nhÊt cña C lµ biÓu thøc chØ cã mét biÕn, mét h»ng thùc sù, hoÆc mét
h»ng ký hiÖu. §©y lµ mÊy vÝ dô:

PI /* mét h»ng ký hiÖu (®· ®Þnh nghÜa trong ch¬ng tr×nh )*/

20 /* mét h»ng thùc sù */

ty_le /* mét biÕn */

-1.25 /* mét h»ng thùc sù kh¸c */

C¸c biÓu thøc phøc t¹p

C¸c biÓu thøc phøc t¹p h¬n bao gåm c¸c biÓu thøc ®¬n gi¶n h¬n ®îc liªn kÕt víi nhau
b»ng c¸c phÐp to¸n.

VÝ dô,

2 + 10

lµ mét biÓu thøc gåm c¸c biÓu thøc con 2 vµ 10, vµ phÐp to¸n +. BiÓu thøc 2+10 cho ra
kÕt qña lµ 12. Cã thÓ viÕt c¸c biÓu thøc phøc t¹p h¬n:
1.25 / 8 + 5 * ty_le + ty_le * ty_le / gia

Khi mét biÓu thøc chøa nhiÒu phÐp to¸n, th× viÖc tÝnh to¸n biÓu thøc nµy phô thuéc vµo
thø tù thùc hiÖn vµ ®é u tiªn cña phÐp to¸n.

C¸c biÓu thøc cña C cßn cã rÊt nhiÒu ®iÒu thó vi. H:y xÐt biÓu thøc sau:

x = a + 10;

C©u lÖnh nµy tÝnh biÓu thøc a + 10 vµ g¸n kÕt qña cho x. Ngoµi ra, toµn bé c©u lÖnh
nµy ®Õn lît nã còng lµ mét biÓu thøc tÝnh ra gi¸ trÞ cña biÕn sè n»m bªn tr¸i dÊu b»ng. V×
vËy cã thÓ viÕt c©u lÖnh sau:

y = x = a +10;

C©u lÖnh nµy g¸n gi¸ trÞ cña biÓu thøc a + 10 cho c¶ hai biÕn x vµ y. Còng cã thÓ viÕt

x = 6 + (y = 4 + 5);

KÕt qña cña c©u lÖnh nµy lµ y nhËn gi¸ trÞ 9 vµ x nhËn gi¸ trÞ 15. H:y chó ý ®Õn c¸c dÊu
ngoÆc ®¬n, chóng rÊt cÇn cho viÖc dÞch lÖnh nµy.

C¸c phÐp to¸n


Mét phÐp to¸n lµ mét ký hiÖu b¸o cho C biÕt ph¶i thùc hiÖn mét ho¹t ®éng, hoÆc mét thao
t¸c nµo ®ã trªn mét hoÆc nhiÒu to¸n h¹ng (operand). Mét to¸n h¹ng lµ mét biÓu thøc. C¸c
phÐp to¸n cña C ®îc chia thµnh mét sè nhãm.

PhÐp g¸n

PhÐp g¸n ®îc ký hiÖu lµ dÊu b»ng (=). C¸ch dïng cña nã trong C cã kh¸c mét chót so víi
c¸ch dïng cña nã trong to¸n häc th«ng thêng. NÕu viÕt

x = y;

trong mét ch¬ng tr×nh C, th× kh«ng ph¶i cã nghÜa lµ "x b»ng y.", mµ lµ "g¸n gi¸ trÞ cña y
cho x." Trong mét c©u lÖnh g¸n, vÕ ph¶i cã thÓ lµ mét biÓu thøc bÊt kú cßn vÕ tr¸i ph¶i lµ
mét tªn biÕn. V× vËy, d¹ng cña c©u lÖnh g¸n lµ:

tenbien = bieuthuc;

Khi ®îc thùc hiÖn, bieuthuc ®îc íc lîng vµ gi¸ trÞ cña kÕt qña ®îc g¸n cho tenbien.

C¸c phÐp to¸n häc


C cã hai phÐp to¸n häc mét to¸n h¹ng (®¬n nguyªn) vµ n¨m phÐp to¸n häc hai to¸n h¹ng
(nhÞ nguyªn).

C¸c phÐp to¸n häc ®¬n nguyªn

B¶ng 4.1. C¸c phÐp to¸n häc ®¬n nguyªn

PhÐp to¸n Ký hiÖu Hµnh ®éng VÝ dô

T¨ng ++ T¨ng gi¸ trÞ cña to¸n h¹ng lªn mét ++x, x++

Gi¶m -- Gi¶m gi¸ trÞ cña to¸n h¹ng ®i mét --x, x--

C¸c phÐp t¨ng vµ gi¶m chØ ®îc sö dông víi c¸c biÕn, kh«ng ®îc sö dông víi c¸c h»ng.

++x; lµ t¬ng ®¬ng víi x = x + 1;

--y; lµ t¬ng ®¬ng víi y = y - 1;

C¸c phÐp to¸n ®¬n nguyªn cã hai kiÓu: kiÓu tríc vµ kiÓu sau. Hai kiÓu nµy lµ kh«ng t¬ng
®¬ng. Chóng kh¸c nhau ë chç khi nµo viÖc t¨ng hoÆc gi¶m ®îc thùc hiÖn.

Khi ®îc sö dông ë kiÓu tríc, phÐp t¨ng vµ gi¶m sÏ thay ®æi gi¸ trÞ cña to¸n h¹ng tríc khi
to¸n h¹ng ®îc sö dông.

Khi ®îc sö dông ë kiÓu sau, phÐp t¨ng vµ gi¶m sÏ thay ®æi gi¸ trÞ cña to¸n h¹ng sau khi
to¸n h¹ng ®îc sö dông.

H:y xÐt hai c©u lÖnh sau ®©y sÏ thÊy râ ®iÒu ®ã:

x = 10;

y = x++;

Sau khi c¸c lÖnh nµy ®îc thùc hiÖn, x cã gi¸ trÞ lµ 11, cßn y cã gi¸ trÞ lµ 10; gi¸ trÞ cña x
®îc g¸n cho y, vµ sau ®ã x míi ®îc t¨ng thªm mét. Ngîc l¹i, c¸c c©u lÖnh

x = 10;

y = ++x;

cho x vµ y cïng mét gi¸ trÞ lµ 11; x ®îc t¨ng thªm mét, sau ®ã gi¸ trÞ cña nã míi ®îc
g¸n cho y.

Ch¬ng tr×nh sau minh häa sù kh¸c nhau gi÷a kiÓu tríc vµ kiÓu sau.
Ch¬ng tr×nh 4.1. MOT.C

/*Minh ho¹ kiÓu tríc vµ kiÓu sau cña phÐp to¸n mét to¸n h¹ng */

#include<stdio.h>

int a , b;

main()

/* §Æt c¶ a vµ b b»ng 5 */

a = b =5;

/* Sau ®ã in chóng vµ gi¶m ®i mét */

/* dïng kiÓu tríc cho b vµ kiÓu sau cho a */

printf("\n%d %d", a--, --


b);

printf("\n%d %d", a--, --


b);

printf("\n%d %d", a--, --


b);

printf("\n%d %d", a--, --


b);

printf("\n%d %d", a--, --


b);

return 0;

KÕt qña cña ch¬ng tr×nh lµ

5 4

4 3

3 2

2 1

1 0
C¸c phÐp to¸n häc nhÞ nguyªn

B¶ng 4.2. lµ danh s¸ch c¸c phÐp to¸n häc nhÞ nguyªn. Bèn phÐp ®Çu rÊt quen thuéc. PhÐp
thø n¨m, modulus (lÊy phÇn d cña phÐp chia), cã thÓ lµ cßn míi. Modulus cho phÇn d cña
phÐp chia to¸n h¹ng thø nhÊt cho to¸n h¹ng thø hai. VÝ dô, 11 modulus 4 b»ng 3.

B¶ng 4.2. C¸c phÐp to¸n häc nhÞ nguyªn

PhÐp to¸n Ký hiÖu Hµnh ®éng VÝ dô

Céng + Céng hai to¸n h¹ng x + y

Trõ - To¸n h¹ng thø nhÊt trõ to¸n h¹ng thø hai x - y

Nh©n * Nh©n hai to¸n h¹ng cña nã x * y

Chia / To¸n h¹ng thø nhÊt chia to¸n h¹ng thø hai x / y

Modulus % LÊy phÇn d cña phÐp chia x % y

Thø tù thùc hiÖn c¸c phÐp to¸n vµ c¸c dÊu ngoÆc

Trong mét biÓu thøc cã chøa tõ hai phÐp to¸n trë lªn th× thø tù ®Ó thùc hiÖn chóng nh thÕ
nµo? TÇm quan träng cña c©u hái nµy cã thÓ ®îc minh häa b»ng c©u lÖnh g¸n sau ®©y:

x = 4 + 5 * 3;

NÕu phÐp céng ®îc thùc hiÖn tríc, th×

x = 9 *3;

vµ x ®îc g¸n gi¸ trÞ 27. Ngîc l¹i, nÕu phÐp nh©n ®îc thùc hiÖn tríc, th× l¹i kh¸c:

x = 4 + 15;

vµ x ®îc g¸n gi¸ trÞ 19. Nh vËy lµ cÇn ph¶i cã c¸c luËt nµo ®ã vÒ thø tù thùc hiÖn cña c¸c
phÐp to¸n trong mét biÓu thøc. Thø tù nµy ®îc gäi lµ quyÒn u tiªn cña c¸c phÐp to¸n. Mçi
phÐp to¸n ®Òu cã mét quyÒn u tiªn x¸c ®Þnh. Khi mét biÓu thøc ®îc tÝnh to¸n, c¸c phÐp
to¸n cã quyÒn u tiªn cao h¬n sÏ ®îc thùc hiÖn tríc.

Thø tù thùc hiÖn cña c¸c phÐp to¸n lµ:

T¨ng vµ gi¶m ®¬n nguyªn.

Nh©n, chia, vµ modulus.


Céng vµ trõ

NÕu mét biÓu thøc chøa tõ hai phÐp to¸n trë lªn cã cïng mét h¹ng u tiªn, th× chóng ®îc
thùc hiÖn theo thø tù tõ tr¸i sang ph¶i.

Trë l¹i vÝ dô tríc, c©u lÖnh x = 4 + 5 *3; g¸n gi¸ trÞ 19 cho x bëi v× phÐp nh©n ®îc thùc
hiÖn tríc phÐp céng.

VÉn vÝ dô nµy, nÕu muèn céng 4 víi 5 sau ®ã míi nh©n víi 3 th× ph¶i lµm nh thÕ nµo? C
dïng dÊu ngoÆc ®Ó ®iÒu chØnh l¹i thø tù thùc hiÖn phÐp to¸n. Mét biÓu thøc con ®îc ®ãng
trong c¸c dÊu ngoÆc ®îc tÝnh tríc cho dï nã chøa phÐp to¸n nµo. V× vËy, ®Ó thùc hiÖn ý
®Þnh trªn, cã thÓ viÕt:

x = (4 + 5) * 3;

BiÓu thøc con 4 + 5 trong c¸c dÊu ngoÆc ®¬n ®îc tÝnh tríc vµ v× thÕ gi¸ trÞ ®îc g¸n cho x
lµ 27.

Cã thÓ dïng nhiÒu cÆp dÊu ngoÆc lång nhau trong mét biÓu thøc. Khi c¸c dÊu ngoÆc lång
nhau, viÖc tÝnh to¸n ®îc thùc hiÖn tõ biÓu thøc n»m trong cïng, sau ®ã tiÕn dÇn ra ngoµi.

H:y xÐt biÓu thøc:

x = 25 - (2 * (10 + (8 / 2))

BiÓu thøc nµy ®îc xö lý theo c¸c bíc sau:

BiÓu thøc trong nhÊt, 8 / 2, ®îc tÝnh tríc nhÊt vµ cho ra gi¸ trÞ 4.

25 - (2 * (10 + 4))

ChuyÓn ra ngoµi, biÓu thøc tiÕp theo, 10 + 4, ®îc tÝnh vµ cho ra gi¸ trÞ 14.

25 - (2 * 14)

BiÓu thøc ngoµi cïng, 2 * 14, ®îc tÝnh vµ cho gi¸ trÞ 28.

25 - 28

BiÓu thøc cuèi cïng, 25 - 28, ®îc tÝnh vµ g¸n gi¸ trÞ -3 cho biÕn x.

x = -3

Thø tù tÝnh to¸n c¸c biÓu thøc con

Nh ®: nãi ë trªn, nÕu mét biÓu thøc C chøa nhiÒu h¬n mét phÐp to¸n cã cïng h¹ng u tiªn
th× chóng ®îc thùc hiÖn theo thø tù tõ tr¸i qua ph¶i. VÝ dô, trong biÓu thøc
w * x / y * z

w ®îc nh©n víi x tríc, chia kÕt qña thu ®îc cho y, vµ cuèi cïng míi nh©n kÕt qña cña
phÐp chia nµy víi z.

Tuy nhiªn víi c¸c møc u tiªn kh¸c nhau th× kh«ng cã g× ®Ó ®¶m b¶o thø tù tõ_tr¸i_qua_
ph¶i. XÐt biÓu thøc sau:

w * x / y + z / y

Theo thø tù u tiªn, phÐp nh©n vµ chia ®îc thùc hiÖn tríc phÐp céng. Tuy nhiªn C kh«ng
x¸c ®Þnh biÓu thøc con w * x / y ®îc tÝnh tríc hay tÝnh sau biÓu thøc con z / y. H:y xem
mét vÝ dô kh¸c:

w * x / ++y + z / y

NÕu biÓu thøc con thø nhÊt ®îc tÝnh tríc, th× y ®îc t¨ng thªm 1 khi biÓu thøc con thø hai
®îc tÝnh. NÕu biÓu thøc con thø hai ®îc tÝnh tríc, th× y cha ®îc t¨ng vµ kÕt qña sÏ kh¸c
nhau. Do vËy, nªn tr¸nh viÕt c¸c biÓu thøc kiÓu nµy trong ch¬ng tr×nh.

C¸c phÐp quan hÖ


C¸c phÐp quan hÖ cña C ®îc sö dông ®Ó so s¸nh c¸c biÓu thøc, chóng ®Æt ra c¸c c©u hái,
vÝ nh, "x cã lín h¬n 100 kh«ng?", hoÆc "y cã b»ng 0 kh«ng ?". Mét biÓu thøc chøa mét
phÐp quan hÖ chØ cã mét trong hai gi¸ trÞ, ®óng - true (1) hoÆc sai - false (0). S¸u phÐp
quan hÖ cña C ®îc cho trong B¶ng 4.4.

B¶ng 4.4. C¸c phÐp quan hÖ cña C

PhÐp to¸n Ký hiÖu C©u hái ®îc ®Æt ra VÝ dô

B»ng == To¸n h¹ng 1 cã b»ng to¸n h¹ng 2 kh«ng? x == y

Lín h¬n > To¸n h¹ng 1 cã lín h¬n to¸n h¹ng 2 kh«ng? x > y

Nhá h¬n < To¸n h¹ng 1 cã nhá h¬n to¸n h¹ng 2 kh«ng? x < y

Lín h¬n >= To¸n h¹ng 1 cã lín h¬n hoÆc b»ng to¸n x>=y
hoÆc b»ng h¹ng 2 kh«ng?

Nhá h¬n <= To¸n h¹ng 1 cã nhá h¬n hoÆc b»ng to¸n h¹ng x<=y
hoÆc b»ng 2 kh«ng?

Kh«ng b»ng != To¸n h¹ng 1 kh«ng b»ng to¸n h¹ng 2 x != y


ph¶i kh«ng?
Lu ý: Khi lµm viÖc víi c¸c phÐp quan hÖ, ®óng (true) lµ 1 cßn sai (false) lµ 0. §õng nhÇm
lÉn phÐp quan hÖ == víi phÐp g¸n =. §©y lµ mét trong nh÷ng lçi mµ ngêi lËp tr×nh C hay
m¾c ph¶i.

C©u lÖnh if
C¸c phÐp quan hÖ ®îc sö dông chñ yÕu ®Ó x©y dùng c¸c biÓu thøc quan hÖ dïng trong c¸c
c©u lÖnh if vµ while. C¸c c©u lÖnh trong mét ch¬ng tr×nh C thêng ®îc thùc hiÖn tõ
trªn xuèng díi theo ®óng thø tù xuÊt hiÖn cña chóng trong ch¬ng tr×nh gèc. Mét c©u lÖnh
®iÒu khiÓn cã thÓ sÏ lµm thay ®æi thø tù thùc hiÖn nµy. C¸c c©u lÖnh ®iÒu khiÓn ch¬ng
tr×nh cã thÓ lµm cho c¸c c©u lÖnh kh¸c thùc hiÖn nhiÒu lÇn hoÆc kh«ng thùc hiÖn lÇn nµo
phô thuéc vµo tõng hoµn c¶nh cô thÓ. C©u lÖnh if lµ mét trong c¸c c©u lÖnh ®iÒu khiÓn
ch¬ng tr×nh cña C. Ngoµi ra cßn cã c¸c c©u lÖnh kh¸c, nh for, do vµ while.

ë d¹ng th«ng thêng, c©u lÖnh if íc lîng mét biÓu thøc vµ thay ®æi sù thùc hiÖn ch¬ng
tr×nh theo kÕt qña cña viÖc íc lîng nµy. D¹ng cña if nh sau:

if (biÓu thøc)
c©u_lÖnh;

NÕu biÓu thøc ®îc ®¸nh gi¸ lµ ®óng th× c©u_lÖnh ®îc thùc hiÖn. NÕu biÓu thøc nhËn gi¸
trÞ sai, th× c©u_lÖnh kh«ng ®îc thùc hiÖn vµ ®iÒu khiÓn chuyÓn ®Õn c©u lÖnh ®øng ngay
sau c©u lÖnh if.

Chó ý lµ c¶ hai dßng if (biÓu thøc) vµ c©u_lÖnh; míi hîp thµnh mét c©u
lÖnh if hoµn chØnh vµ chóng kh«ng ph¶i lµ hai c©u lÖnh t¸ch rêi. Do vËy, kh«ng ®îc
viÕt dÊu chÊm phÈy ë cuèi dßng if.

Mét c©u lÖnh if cã thÓ ®iÒu khiÓn viÖc thùc hiÖn cña nhiÒu c©u lÖnh kh¸c b»ng c¸ch
dïng mét khèi. V× vËy, cã thÓ viÕt mét c©u lÖnh if nh sau:

if (biÓu_thøc)

c©u_lÖnh1;

c©u_lÖnh2;

/* cã thÓ viÕt thªm nhiÒu c©u lÖnh n÷a t¹i ®©y */

c©u_lÖnhn;

}
Trong khi lËp tr×nh, c©u lÖnh if rÊt hay ®îc sö dông cïng víi c¸c biÓu thøc quan hÖ, hay
nãi mét c¸ch kh¸c, "h:y thùc hiÖn (c¸c) c©u lÖnh sau chØ khi ®iÒu kiÖn nh thÕ nµy lµ
®óng". VÝ dô,

if ( x > y )

y = x;

C©u lÖnh nµy g¸n gi¸ trÞ cña x cho y chØ khi x lín h¬n y. NÕu x kh«ng lín h¬n y, th×
kh«ng cã phÐp g¸n nµo xÈy ra c¶.

Mét c©u lÖnh if cã thÓ chøa mét mÖnh ®Ò else (ngîc l¹i). MÖnh ®Ò nµy ®îc ®a vµo if nh
sau:

if (biÓu_thøc)

c©u_lÖnh1;

else

c©u_lÖnh2;

NÕu biÓu_thøc lµ ®óng, c©u_lÖnh1 ®îc thùc hiÖn. NÕu biÓu_thøc lµ sai,
c©u_lÖnh2 ®îc thùc hiÖn. C¶ c©u_lÖnh1 vµ c©u_lÖnh2 ®Òu cã thÓ lµ mét khèi.

Có ph¸p cña c©u lÖnh if

D¹ng 1

if ( biÓu_thøc )

c©u _lÖnh1

c©u_lÖnh_tiÕp_theo

§©y lµ d¹ng ®¬n gi¶n nhÊt cña c©u lÖnh if. NÕu biÓu_thøc lµ ®óng, th× c©u_lÖnh1
®îc thùc hiÖn. NÕu biÓu_thøc lµ kh«ng ®óng, th× c©u_lÖnh1 bÞ bá qua.

D¹ng 2

if ( biÓu_thøc )

c©u _lÖnh1

else
c©u _lÖnh2

c©u_lÖnh_tiÕp_theo

§©y lµ d¹ng chung nhÊt cña c©u lÖnh if. NÕu biÓu_thøc mµ ®óng th× c©u_lÖnh1 ®-
îc thùc hiÖn, ngîc l¹i c©u_lÖnh2 ®îc thùc hiÖn.

D¹ng 3

if (biÓu_thøc1)

c©u _lÖnh1

else if(biÓu_thøc2)

c©u _lÖnh2

else

c©u_lÖnh3

c©u_lÖnh_tiÕp_theo

§©y lµ d¹ng if lång nhau. NÕu biÓu_thøc1 lµ ®óng, th× c©u_lÖnh1 ®îc thùc hiÖn,
ngîc l¹i, biÓu_thøc2 ®îc kiÓm tra. NÕu biÓu_thøc1 lµ kh«ng ®óng, vµ
biÓu_thøc2 lµ ®óng, th× c©u_lÖnh2 ®îc thùc hiÖn. NÕu c¶ hai cïng kh«ng ®óng,
c©u_lÖnh3 ®îc thùc hiÖn. ChØ cã mét trong ba c©u lÖnh nµy ®îc thùc hiÖn mµ th«i.

VÝ dô 1

if ( luong > 10,000,000 )

thue = .50;

else

thue = .25;

VÝ dô 2

if ( tuoi <15 )
printf( "ThiÕu niªn");

else if( tuoi < 65 )

printf("Ngêi lín");

else

printf("Ngêi giµ");

TÝnh gi¸ trÞ c¸c biÓu thøc quan hÖ


C¸c biÓu thøc quan hÖ cho ra mét gi¸ tri hoÆc sai (0) hoÆc ®óng (1). Dï r»ng c¸c biÓu thøc
quan hÖ ®îc dïng phæ biÕn nhÊt trong c¸c c©u lÖnh if vµ c¸c cÊu tróc ®iÒu kiÖn kh¸c,
chóng cßn ®îc sö dông nh c¸c gi¸ trÞ sè thuÇn tuý. Ch¬ng tr×nh 4.5 sau ®©y minh häa cho
c¸ch dïng nµy.

Ch¬ng tr×nh 4.5. Tr×nh diÔn c¸ch tÝnh c¸c biÓu thøc quan hÖ

/* Minh häa c¸ch tÝnh c¸c biÓu thøc quan hÖ */

#include <stdio.h>

int a;

main()

a = (5 == 5); /* cho ra gi¸ trÞ 1 */

printf("\na = (5 == 5)\na = %d", a);

a = (5 != 5); /* cho ra gi¸ trÞ 0 */

printf("\na = (5 != 5)\na = %d", a);

a = (12 == 12) + (5 != 1); /* cho ra 1 + 1 */

printf("\na = (12 == 12) + (5 != 1)\na = %d", a);

return 0;

KÕt qña cña ch¬ng tr×nh nµy lµ:


a = (5 == 5)

a = 1

a = (5 != 5)

a = 0

a = (12 == 12) + (5 != 1)

a = 2

Xem ra kÕt qña nµy míi ®Çu cã vÎ h¬i l¹. Khi dïng c¸c biÓu thøc quan hÖ, cã mét lçi mµ
ngêi ta hay m¾c ph¶i lµ chØ dïng mét dÊu = cho phÐp quan hÖ b»ng. BiÓu thøc

x = 5

cho gi¸ trÞ 5 ®ång thêi g¸n 5 cho x. ThÕ nhng, biÓu thøc

x == 5

th× l¹i cho ra 0 hoÆc 1 (phô thuéc vµo gi¸ trÞ cña x cã b»ng 5 hay kh«ng) vµ kh«ng lµm
thay ®æi gi¸ trÞ cña x. NÕu do s¬ xuÊt mµ viÕt lµ

if (x = 5)

printf("x b»ng 5");

th× th«ng b¸o nµy lu«n lu«n ®îc in ra v× biÓu thøc ®îc kiÓm tra ë c©u lÖnh if bao giê
còng nhËn gi¸ trÞ ®óng bÊt kÓ x cã b»ng 5 hay kh«ng.

Cuèi cïng, cÇn ph¶i nh¾c l¹i mét lÇn n÷a lµ, c¸c phÐp quan hÖ ®îc dïng ®Ó t¹o lËp c¸c
mèi quan hÖ gi÷a c¸c biÓu thøc. Mét biÓu thøc quan hÖ cho ra mét gi¸ trÞ sè, b»ng 0 (nÕu
biÓu thøc cã nghÜa lµ sai) hoÆc b»ng 1 (nÕu biÓu thøc cã nghÜa lµ ®óng).

Thø tù thùc hiÖn cña c¸c phÐp quan hÖ

Gièng nh c¸c phÐp to¸n häc ®: nãi trong bµi tríc, c¸c phÐp quan hÖ còng cã c¸c quyÒn u
tiªn riªng, quyÕt ®Þnh thø tù mµ chóng ®îc thùc hiÖn trong mét biÓu thøc cã nhiÒu phÐp
to¸n. Ngoµi ra, còng cã thÓ dïng c¸c dÊu ngoÆc ®Ó thay ®æi thø tù thùc hiÖn trong mét
biÓu thøc cã dïng c¸c phÐp quan hÖ.

Tríc hÕt, tÊt c¶ c¸c phÐp quan hÖ ®Òu cã quyÒn u tiªn thÊp h¬n c¸c phÐp to¸n häc. V× vËy,
nÕu viÕt

if ( x + 2 > y)
th× 2 ®îc céng víi x tríc, sau ®ã, kÕt qña nµy míi ®îc ®em so s¸nh víi y. MÖnh ®Ò trªn t-
¬ng ®¬ng víi

if ( (x + 2 ) > y)

trong ®ã, dÊu ngoÆc ®îc sö dông ®Ó lµm râ thªm thø tù thùc hiÖn cña c¸c phÐp trong biÓu
thøc.

Thø tù u tiªn cña c¸c phÐp quan hÖ:

PhÐp to¸n QuyÒn u tiªn t¬ng ®èi

< <= > >= 1

!= == 2

V× vËy,

x == y > z; lµ t¬ng ®¬ng víi x == ( y > z );

bëi v×, ®Çu tiªn C tÝnh biÓu thøc y > z ®Ó cho ra mét gi¸ trÞ hoÆc lµ 0 hoÆc lµ 1. TiÕp
theo, C x¸c ®Þnh xem x cã b»ng gi¸ trÞ thu ®îc tõ bíc mét hay kh«ng.

Kh«ng nªn dïng c©u lÖnh g¸n trong c¸c c©u lÖnh if. §iÒu ®ã cã thÓ lµm cho ngêi ®äc
ch¬ng tr×nh dÔ nhÇm lÉn. Hä cã thÓ hiÓu nhÇm lµ ch¬ng tr×nh viÕt kh«ng ®óng vµ söa l¹i
phÐp g¸n thµnh phÐp b»ng logic. §ång th¬× còng kh«ng nªn dïng phÐp "kh«ng b»ng" (!=)
trong mét c©u lÖnh if cã chøa mét mÖnh ®Ò else. Tèt h¬n c¶ lµ nªn dïng phÐp "b»ng"
(==) cïng víi else. VÝ dô, c©u lÖnh

if (x != y )

c©u_lÖnh1;

else

c©u_lÖnh2;

nªn thay b»ng c©u lÖnh sau th× dÔ hiÓu h¬n

if ( x = y )

c©u_lÖnh2;

else

c©u_lÖnh1;
C¸c phÐp logic
§«i khi, cÇn ph¶i ®Æt ra nhiÒu c©u hái vÒ c¸c mèi quan hÖ cña c¸c biÓu thøc nµo ®ã cïng
mét lóc. C¸c phÐp logic cña C ®¶m b¶o viÖc kÕt nèi hai hay nhiÒu biÓu thøc quan hÖ thµnh
mét biÓu thøc ®Ó tÝnh ra ®îc mét gi¸ trÞ hoÆc lµ ®óng hoÆc lµ sai. Ba phÐp logic cña C ®îc
cho trong B¶ng 4.7.

B¶ng 4.7. C¸c phÐp logic cña C

PhÐp to¸n Ký hiÖu VÝ dô

vµ && biÓu_thøc1 && biÓu_thøc2

hoÆc ¦ ¦ biÓu_thøc1 ¦ ¦ biÓu_thøc2

kh«ng ! ! biÓu_thøc1

Ph¬ng thøc lµm viÖc cña c¸c phÐp logic ®îc chØ ra trong B¶ng 4.8.

B¶ng 4.8. Ph¬ng thøc lµm viÖc cña c¸c phÐp logic

BiÓu thøc Cho ra gi¸ trÞ

(biÓu_thøc1 && biÓu_thøc2) True (1) chØ khi c¶ biÓu_thøc1 vµ biÓu_thøc2 ®Òu true; ngîc
l¹i false (0).

(biÓu_thøc1 ¦ ¦ biÓu_thøc2) True (1) nÕu biÓu_thøc1 hoÆc biÓu_thøc2 lµ true; false (0) chØ
khi c¶ hai ®Òu false.

(! biÓu_thøc1) False (0) nÕu biÓu_thøc1 lµ true;


true (1) nÕu biÓu_thøc1 lµ false.

Nãi thªm vÒ c¸c gi¸ trÞ True/False (§óng/Sai)

C¸c biÓu thøc quan hÖ cña C cho ra gi¸ trÞ 0 ®Ó biÓu hiÖn lµ sai vµ cho ra gi¸ trÞ 1 ®Ó biÓu
hiÖn lµ ®óng. Tuy nhiªn, bÊt kú mét gi¸ trÞ sè nµo còng cã thÓ ®îc biÓu hiÖn nh lµ ®óng
hoÆc nh lµ sai khi nã ®îc sö dông trong mét biÓu thøc hoÆc mét c©u lÖnh ®ang chê mét
gi¸ trÞ logic (tøc lµ, mét gi¸ trÞ ®óng hoÆc sai). C¸c qui t¾c ¸p dông cho c¸c trêng hîp nµy
lµ:

Mét gi¸ trÞ b»ng kh«ng ®îc coi lµ sai.

Mét gi¸ trÞ kh¸c kh«ng ®îc coi lµ ®óng.


C¸c vÝ dô sau ®©y minh häa cho c¸c qui t¾c nµy:

x = 125;

if (x)

printf ("%d", x);

Trong trêng hîp nµy, gi¸ trÞ cña x ®îc in ra, v× x cã gi¸ trÞ kh¸c kh«ng nªn biÓu thøc (x)
®îc c©u lÖnh if cho lµ ®óng. Bëi vËy, ®èi víi mäi biÓu thøc C th× c¸ch viÕt

(biÓu_thøc) lµ t¬ng ®¬ng víi c¸ch viÕt (biÓu_thøc != 0)

C¶ hai ®Òu cho gi¸ trÞ ®óng nÕu biÓu_thøc kh¸c kh«ng, vµ c¶ hai ®Òu cho gi¸ trÞ sai
nÕu biÓu_thøc b»ng kh«ng. B»ng phÐp to¸n kh«ng (!), ta còng cã thÓ viÕt

(! biÓu_thøc) hoÆc t¬ng ®¬ng lµ (biÓu_thøc == 0)

Thø tù thùc hiÖn c¸c phÐp logic

C¸c phÐp logic còng cã mét thø tù u tiªn ngay trong chóng vµ c¶ víi c¸c phÐp kh¸c. PhÐp
! (not) cã cïng ®é u tiªn víi c¸c phÐp to¸n häc mét ng«i (®¬n nguyªn) ++ vµ -- V× vËy,
phÐp ! cã thø tù u tiªn cao h¬n tÊt c¶ c¸c phÐp quan hÖ vµ tÊt c¶ c¸c phÐp to¸n häc hai
ng«i (nhÞ nguyªn).

Ngîc l¹i, c¸c phÐp && (and) vµ ¦ ¦ (or) cã thø tù u tiªn thÊp h¬n nhiÒu, thÊp h¬n tÊt c¶ c¸c
phÐp to¸n häc vµ c¸c phÐp quan hÖ. && cã thø tù u tiªn cao h¬n ¦ ¦ . Còng nh ®èi víi c¸c
phÐp kh¸c, dÊu ngoÆc cã thÓ ®îc sö dông ®Ó thay ®æi thø tù thùc hiªn khi dïng c¸c phÐp
logic.

C¸c phÐp g¸n phøc hîp


C¸c phÐp g¸n phøc hîp (compound assignment) cña C cung cÊp mét gi¶i ph¸p ng¾n gän
kÕt nèi mét phÐp to¸n häc nhÞ nguyªn víi mét phÐp g¸n. VÝ dô, gi¶ sö muèn t¨ng gi¸ trÞ
cña x lªn 5, hay nãi c¸ch kh¸c céng 5 víi x vµ l¹i g¸n kÕt qña cho x th× cã thÓ viÕt nh sau:

x = x + 5;

Dïng mét phÐp g¸n phøc hîp, gÇn nh mét c¸ch viÕt t¾t cña phÐp g¸n, cã thÓ viÕt ng¾n
gän:

x += 5;

Tæng qu¸t, phÐp g¸n phøc hîp cã d¹ng có ph¸p nh sau (trong ®ã op lµ mét phÐp nhÞ
nguyªn):
biÓu_thøc1 op= biÓu_thøc2

lÖnh nµy t¬ng ®¬ng víi

biÓu_thøc1 = biÓu_thøc1 op biÓu_thøc2;

PhÐp ®iÒu kiÖn


PhÐp ®iÒu kiÖn lµ phÐp tam nguyªn duy nhÊt cña C, tøc lµ nã cã ba to¸n h¹ng. Có ph¸p
cña nã lµ:

BiÓu_thøc1 ? biÓu_thøc2 : biÓu_thøc3

NÕu biÓu_thøc1 cho ra true (kh¸c 0), th× biÓu thøc tæng thÓ nµy cã gi¸ trÞ cña biÓu_thøc2.
NÕu biÓu_thøc1 cho ra false (b»ng 0), th× biÓu thøc tæng thÓ cã gi¸ trÞ cña biÓu_thøc3. VÝ
dô, c©u lÖnh

x = y ? 1 : 100;

g¸n 1 cho x, nÕu y lµ true, hoÆc g¸n 100 cho x, nÕu y lµ false. T¬ng tù nh vËy, ®Ó z lÊy gi¸
trÞ lín h¬n trong hai gi¸ trÞ x vµ y, cã thÓ viÕt

z = (x > y) ? x : y;

PhÐp ®iÒu kiÖn h¬i gièng víi c©u lÖnh if. C©u lÖnh trªn cã thÓ viÕt nh sau:

if ( x > y)

z = x;

else

z = y;

PhÐp dÊu phÈy


DÊu phÈy ®îc sö dông thêng xuyªn trong C ®Ó lµm dÊu ng¨n c¸ch, t¸ch biÖt c¸c khai b¸o
biÕn, c¸c ®èi sè cña hµm, v.v. Trong mét sè trêng hîp nhÊt ®Þnh, dÊu phÈy l¹i hµnh ®éng
nh mét phÐp to¸n chø kh«ng cßn lµ mét dÊu ph©n c¸ch n÷a. Cã thÓ t¹o ra mét biÓu thøc
b»ng c¸ch ghÐp hai biÓu thøc con b»ng dÊu phÈy. KÕt qña nh sau:

C¶ hai biÓu thøc ®îc tÝnh nhng biÓu thøc bªn tr¸i ®îc tÝnh tríc.

BiÓu thøc tæng thÓ nhËn gi¸ trÞ cña biÓu thøc bªn ph¶i.

VÝ dô, c©u lÖnh


x = (a++ , b ++ );

t¨ng a, råi t¨ng b, sau ®ã g¸n gi¸ trÞ cña b (cha t¨ng) cho x. V× phÐp ++ ë ®©y lµ kiÓu sau,
nªn gi¸ trÞ cña b - tríc khi ®îc t¨ng - ®îc g¸n cho x. Dïng c¸c dÊu ngoÆc lµ cÇn thiÕt bëi
v× phÐp dÊu phÈy cã thø tù u tiªn thÊp, thËm chÝ thÊp h¬n c¶ phÐp g¸n.

KÕt luËn
Trong bµi nµy, nhiÒu kh¸i niÖm quan träng cña C ®: ®îc tr×nh bµy: mét c©u lÖnh C lµ g×,
c¸c kho¶ng tr¾ng kh«ng cã ý nghÜa ®èi víi ch¬ng tr×nh dÞch cña C, vµ c¸c c©u lÖnh cña C
®Òu kÕt thóc b»ng mét dÊu chÊm ph¶y. Ngoµi ra, chóng ta còng ®: häc vÒ mét c©u lÖnh
phøc hîp hay cßn gäi lµ mét khèi. Mét khèi chøa tõ hai c©u lÖnh trë lªn vµ ®îc ®ãng
khung trong c¸c dÊu ngoÆc nhän, cã thÓ ®îc sö dông ë bÊt kú chç nµo mµ mét c©u lÖnh
®¬n cã thÓ ®îc sö dông.

NhiÒu c©u lÖnh ®îc t¹o thµnh tõ mét sè biÓu thøc vµ c¸c phÐp to¸n. Mét biÓu thøc lµ mét
mÖnh ®Ò nµo ®ã dïng ®Ó tÝnh ra ®îc mét gi¸ trÞ sè. C¸c biÓu thøc phøc hîp cã thÓ chøa
nhiÒu biÓu thøc ®¬n gi¶n h¬n (biÓu thøc con).

C¸c phÐp to¸n lµ c¸c ký hiÖu cña C, dïng ®Ó híng dÉn m¸y tÝnh thùc hiÖn mét thao t¸c
trªn mét hoÆc nhiÒu biÓu thøc. Mét sè phÐp to¸n lµ ®¬n nguyªn, cã nghÜa lµ chóng thao
t¸c trªn mét to¸n h¹ng ®¬n. Tuy nhiªn, hÇu hÕt c¸c phÐp cña C ®Òu lµ nhÞ nguyªn, thao t¸c
trªn hai to¸n h¹ng. Cã mét phÐp tam nguyªn, ®ã lµ phÐp ®iÒu kiÖn. C¸c phÐp to¸n cña C
cã mét quyÒn u tiªn ph©n cÊp quyÕt ®Þnh thø tù mµ theo ®ã c¸c phÐp to¸n sÏ ®îc thùc hiÖn
trong mét biÓu thøc cã chøa nhiÒu phÐp to¸n.

C¸c phÐp to¸n cña C trong bµi nµy ®îc chia lµm ba kiÓu:

C¸c phÐp to¸n häc thùc hiÖn c¸c phÐp sè häc trªn c¸c to¸n h¹ng cña chóng.

C¸c phÐp quan hÖ thùc hiÖn viÖc so s¸nh gi÷a c¸c to¸n h¹ng cña chóng.

C¸c phÐp logic thao t¸c trªn c¸c biÓu thøc true/false. 0 ®Ó biÓu diÔn cho false, 1 ®Ó biÓu
diÔn cho true.

C©u hái vµ tr¶ lêi


C¸c dÊu c¸ch vµ c¸c dßng tr¾ng cã lµm ¶nh hëng ®Õn sù thùc hiÖn cña mét ch¬ng tr×nh
kh«ng?

C¸c kho¶ng tr¾ng (dÊu c¸ch, dßng tr¾ng, tabs) thêng ®îc dïng ®Ó lµm ch¬ng tr×nh dÔ ®äc
h¬n. Khi ch¬ng tr×nh ®îc dÞch, c¸c kho¶ng tr¾ng bÞ bá qua, vµ v× thÕ chóng kh«ng cã hiÖu
lùc g× ®èi víi ch¬ng tr×nh ®: dÞch vµ kÕt nèi.

Sù kh¸c nhau gi÷a c¸c phÐp ®¬n nguyªn vµ nhÞ nguyªn lµ g×?
C¸c phÐp ®¬n nguyªn thao t¸c trªn mét biÕn cßn phÐp nhÞ nguyªn lµm viÖc víi hai biÕn.

PhÐp trõ (-) lµ ®¬n nguyªn hay nhÞ nguyªn?

Lµ c¶ hai. Ch¬ng tr×nh dÞch ®ñ th«ng minh ®Ó biÕt ph¶i lµm g× víi phÐp nµy. Nã biÕt ph¶i
dïng kiÓu nµo c¨n cø vµo sè biÕn trong biÓu thøc ®îc sö dông. Trong c©u lÖnh sau, nã lµ
®¬n nguyªn

x = -y;

ngîc l¹i, trong trêng hîp sau lµ nhÞ nguyªn

x = a - b;

Mét sè ©m ®îc coi lµ ®óng(true) hay sai (false)?

0 lµ false, vµ mäi gi¸ trÞ kh¸c lµ true. V× vËy sè ©m lµ true.

LuyÖn tËp
C©u hái

1. C©u lÖnh sau ®©y ®îc gäi lµ g×, vµ ý nghÜa cña nã ra sao?

x = 5 + 8;

2. Mét biÓu thøc lµ g×?

3. Trong mét biÓu thøc cã chøa nhiÒu phÐp to¸n, c¸i g× quyÕt ®Þnh thø tù thùc hiÖn cña
chóng?

4. NÕu mét biÕn x cã gi¸ trÞ lµ 10, gi¸ trÞ cña x vµ a lµ bao nhiªu sau mçi lÇn c¸c c©u lÖnh
sau ®©y ®îc thùc hiÖn t¸ch biÖt?

a = x++;

a = ++x;

5. BiÓu thøc 10 % 3 cho gi¸ trÞ bao nhiªu?

6. Cßn biÓu thøc 5 + 3 * 8 / 2 + 2 ?

7. H:y viÕt thªm c¸c dÊu ngoÆc vµo biÓu thøc trong c©u 6 ®Ó biÓu thøc míi cã gi¸ trÞ b»ng
16.

8. NÕu mét biÓu thøc ®îc ®¸nh gi¸ lµ false th× biÓu thøc nµy cã gi¸ trÞ lµ mÊy?
9. PhÐp to¸n nµo cã thø tù u tiªn cao h¬n?

a. == hay <

b. * hay +

c. != hay ==

d. >= hay >

10. PhÐp g¸n phøc hîp lµ g× vµ nã cã Ých lîi nh thÕ nµo?

Bµi tËp

1. Ch¬ng tr×nh sau viÕt kh«ng ®îc hay l¾m. H:y nhËp vµ dÞch xem nã cã ch¹y kh«ng.

#include<stdio.h>

int x, y; main() { printf(

"\nNhËp hai sè"); scanf(

"%d %d, &x,&y);printf(

"\n\n%d lín h¬n",(x>y)?x:y);return 0;}

2. H:y viÕt l¹i ch¬ng tr×nh trªn cho dÔ ®äc h¬n.

3. H:y viÕt l¹i ch¬ng tr×nh 4.1 ®Ó ®Õm theo chiÒu t¨ng dÇn thay cho gi¶m dÇn.

4. ViÕt mét c©u lÖnh if ®Ó g¸n gi¸ trÞ cña x cho biÕn y chØ khi x n»mg gi÷a 1 vµ 20. Gi÷
nguyªn y kh«ng ®æi nÕu x kh«ng n»m trong miÒn nµy.

5. Dïng phÐp ®iÒu kiÖn ®Ó thùc hiÖn nhiÖm vô cña c©u 4.

6. ViÕt l¹i c¸c c©u lÖnh if lång nhau sau ®©y b»ng mét c©u lÖnh if ®¬n vµ c¸c phÐp
phøc hîp.

if (x < 1)

if ( x >10)

c©u_lÖnh;

7. C¸c biÓu thøc sau cho ra gi¸ trÞ nµo ?


a. (1 + 2 * 3)

b. 10 % 3 * 3 - (1 + 2)

c. ((1 + 2) * 3)

d. (5 == 5)

e. (x = 5)

8. NÕu x = 4, y = 6, vµ z = 2, h:y xem c¸c mÖnh ®Ò sau ®©y lµ true hay false

a. if (x == 4)

b. if (x != y - z)

c. if (z = 1)

d. if (y)

9. ViÕt mét c©u lÖnh if ®Ó kh¼ng ®Þnh mét ngêi lµ ngêi lín (21 tuæi) nhng cha giµ (65
tuæi).

10. H:y söa cho ch¬ng tr×nh sau ®©y ch¹y ®óng.

/∗ µτ χη←νγ τρ⋅νη χ λι ... ∗/

#ινχλυδε <στδιο.η>

ιντ ξ = 1;

µαιν()

if (x == 1);

printf ( " x b»ng 1");

otherwise

printf (" x kh«ng b»ng 1");

return

You might also like