You are on page 1of 146

Gii thiu

1in hc l mt ngnh khoa hc mi nhn pht trin ht sc nhanh chng trong vi


chc nm li dy v ngy cng mo rng lnh vc nghin cu, ng dng trong mi mt cua di
sng x hi.
Agn ng lp trnh l mt loi cng c gip con ngui th hin cc vn d cua thc t
ln my tinh mt cch hu hiu. Ji s pht trin cua tin hc, cc ngn ng lp trnh cng
dn tin ho d dp ng cc thch thc mi cua thc t.
Khoang cui nhng nm 19 du 197 xut hin nhu cu cn c cc ngn ng bc
cao d h tr cho nhng nh tin hc trong vic xy dng cc phn mm h thng, h diu
hnh. Agn ng C ra di t d, n d duc pht trin ti phng thi nghim Bell. Dn nm
1978, gio trnh " Agn ng lp trnh C " do chinh cc tc gia cua ngn ng l Dennish
Ritchie v B.W. Kernighan vit, d duc xut ban v ph bin rng ri.
C l ngn ng lp trnh vn nng. Agoi vic C duc dng d vit h diu hnh UAIX,
ngui ta nhanh chng nhn ra sc mnh cua C trong vic xu l cho cc vn d hin di cua
tin hc. C khng gn vi bt ky mt h diu hnh hay my no, v mc du n d duc gi l
" ngn ng lp trnh h thng" v n duc dng cho vic vit h diu hnh, n cng tin li
cho ca vic vit cc chuong trnh xu l s, xu l vn ban v co so d liu.
J by gi chng ta di tm hiu th gii cua ngn ng C t nhng khi nim ban du
co ban nht.

H ni thng 11 nm 1997
Nguy?n H?u Tu?n


2
Chuong 1
cac khai nim co ban

1.1. Tp k t dng trong ngn ng C :
Moi ngn ngu lp trinh du duoc xy dung tu mt b ky tu nao do. Cac ky tu duoc nhom
lai theo nhiu cach khac nhau d tao nn cac tu. Cac tu lai duoc lin kt voi nhau theo mt qui tc
nao do d tao nn cac cu lnh. Mt chuong trinh bao gm nhiu cu lnh va th hin mt thut
toan d giai mt bai toan nao do. Ngn ngu C duoc xy dung trn b ky tu sau :
26 chu cai hoa : A B C .. Z
26 chu cai thuong : a b c .. z
10 chu s : 0 1 2 .. 9
Cac ky hiu toan hoc : - * / ( )
Ky tu gach ni :
Cac ky tu khac : . , : ; | | } ! \ & # $ ...
Du cach (space) dung d tach cac tu. Vi du chu VIET NAM co 8 ky tu, con VIETNAM
chi co 7 ky tu.

Ch :
Khi vit chuong trinh, ta khng duoc su dung bt ky ky tu nao khac ngoai cac ky tu trn.
Vi du nhu khi lp chuong trinh giai phuong trinh bc hai ax
2
bxc0 , ta cn tinh bit
thuc Delta b
2
- 4ac, trong ngn ngu C khng cho phep dung ky tu , vi vy ta phai dung ky
hiu khac d thay th.

1.2. T kho :
Tu khoa la nhung tu duoc su dung d khai bao cac kiu du liu, d vit cac toan tu va cac
cu lnh. Bang duoi dy lit k cac tu khoa cua TURBO C :
asm break case cdecl
char const continue deIault
do double else enum
extern Iar Iloat Ior
goto huge iI int
interrupt long near pascal


3
register return short signed
sizeoI static struct switch
tipedeI union unsigned void
volatile while
y nghia va cach su dung cua mi tu khoa s duoc d cp sau nay, o dy ta cn chu y :
- Khng duoc dung cac tu khoa d dt tn cho cac hng, bin, mang, ham ...
- Tu khoa phai duoc vit bng chu thuong, vi du : vit tu khoa khai bao kiu nguyn la
int chu khng phai la INT.

1.3. Tn :
Tn la mt khai nim rt quan trong, no dung d xac dinh cac dai luong khac nhau trong
mt chuong trinh. Chung ta co tn hng, tn bin, tn mang, tn ham, tn con tro, tn tp, tn cu
truc, tn nhn,...
Tn duoc dt theo qui tc sau :
Tn la mt dy cac ky tu bao gm chu cai, s va gach ni. Ky tu du tin cua tn phai la
chu hoc gach ni. Tn khng duoc trung voi khoa. D dai cuc dai cua tn theo mc dinh la 32
va co th duoc dt lai la mt trong cac gia tri tu 1 toi 32 nho chuc nng : Option-Compiler-
Source-IdentiIier length khi dung TURBO C.

V d :
Cac tn dung :
a1 delta x1 step AMA
Cac tn sai :
3MN Ky tu du tin la s
m#2 Su dung ky tu #
I(x) Su dung cac du ( )
do Trung voi tu khoa
te ta Su dung du trng
-3 Su dung du -

Ch :
Trong TURBO C, tn bng chu thuong va chu hoa la khac nhau vi du tn AB khac voi
ab. trong C, ta thuong dung chu hoa d dt tn cho cac hng va dung chu thuong d dt tn cho


4
hu ht cho cac dai luong khac nhu bin, bin mang, ham, cu truc. Tuy nhin dy khng phai la
diu bt buc.

1.4. Kiu d liu :
Trong C su dung cac cac kiu du liu sau :
1.4.1. Kiu k t (char) :
Mt gia tri kiu char chim 1 byte ( 8 bit ) va biu din duoc mt ky tu thng qua bang
m ASCII. Vi du :
Ky tu M ASCII
0 048
1 049
2 00
A 06
B 066
a 097
b 098

Co hai kiu du liu char : kiu signed char va unsigned char.
Kiu ham vi biu din S ky tu

Kich
thuoc

Char ( Signed char ) -128 dn 127 26 1 byte
Unsigned char 0 dn 2 26 1 byte

Vi du sau minh hoa su khac nhau giua hai kiu du liu trn : et doan chuong trinh sau :
char ch1;
unsigned char ch2;
......
ch1200; ch2200;
Khi do thuc cht :
ch1-6;
ch2200;
Nhung ca ch1 va ch2 du biu din cung mt ky tu co m 200.




Phn loi k t :
Co th chia 26 ky tu lam ba nhom :
Nhom 1: Nhom cac ky tu diu khin co m tu 0 dn 31. Chng han ky tu m 13 dung d
chuyn con tro v du dong, ky tu 10 chuyn con tro xung dong duoi ( trn cung mt ct ). Cac
ky tu nhom nay noi chung khng hin thi ra man hinh.
Nhom 2 : Nhom cac ky tu vn ban co m tu 32 dn 126. Cac ky tu nay co th duoc dua
ra man hinh hoc may in.
Nhom 3 : Nhom cac ky tu d hoa co m s tu 127 dn 2. Cac ky tu nay co th dua ra
man hinh nhung khng in ra duoc ( bng cac lnh DOS ).

1.4.2. Kiu nguyn :
Trong C cho phep su dung s nguyn kiu int, s nguyn dai kiu long va s nguyn
khng du kiu unsigned. Kich c va pham vi biu din cua chung duoc chi ra trong bang duoi
dy :
Kiu ham vi biu din Kich thuoc
int -32768 dn 32767 2 byte
unsigned int 0 dn 63 2 byte
long -2147483648 dn 2147483647 4 byte
unsigned long 0 dn 429496729 4 byte

Ch :
Kiu ky tu cng co th xem la mt dang cua kiu nguyn.

1.4.3. Kiu du phay dng :
Trong C cho phep su dung ba loai du liu du phay dng, do la Iloat, double va long
double. Kich c va pham vi biu din cua chung duoc chi ra trong bang duoi dy :
Kiu ham vi biu din S chu s
co nghia
Kich thuoc
loat 3.4E-38 dn 3.4E38 7 dn 8 4 byte
Double 1.7E-308 dn 1.7E308 1 dn 16 8 byte
long double 3.4E-4932 dn 1.1E4932 17 dn 18 10 byte

Giai thch :


6
May tinh co th luu tru duoc cac s kiu Iloat co gia tri tuyt di tu 3.4E-38 dn
3.4E38. Cac s co gia tri tuyt di nho hon3.4E-38 duoc xem bng 0. ham vi biu din cua s
double duoc hiu theo nghia tuong tu.

1.5. D|nh nghia kiu bng TYPEDEF :
1.5.1. Cng dng :
Tu khoa typedeI dung d dt tn cho mt kiu du liu. Tn kiu s duoc dung d khai
bao du liu sau nay. Nn chon tn kiu ngn va gon d d nho. Chi cn thm tu khoa typedeI vao
truoc mt khai bao ta s nhn duoc mt tn kiu du liu va co th dung tn nay d khai bao cac
bin, mang, cu truc, vv...

1.5.2. Cch vit :
Vit tu khoa typedeI, sau do kiu du liu ( mt trong cac kiu trn ), ri dn tn cua kiu.
Vi du cu lnh :
typedeI int nguyen;
s dt tn mt kiu int la nguyen. Sau nay ta co th dung kiu nguyen d khai bao cac bin, cac
mang int nhu vi du sau ;
nguyen x,y,a|10|,b|20||30|;
Tuong tu cho cac cu lnh :
typedeI Iloat mt0|0|;
Dt tn mt kiu mang thuc mt chiu co 0 phn tu tn la mt0.
typedeI int m2030|20||30|;
Dt tn mt kiu mang thuc hai chiu co 20x30 phn tu tn la m2030.
Sau nay ta s dung cac kiu trn khai bao :
mt0 a,b;
m2030 x,y;

1.6. Hng :
ng la cac dai luong ma gia tri cua no khng thay di trong qua trinh tinh toan.

1.6.1. Tn hng :
Nguyn tc dt tn hng ta d xem xet trong muc 1.3.
D dt tn mt hng, ta dung dong lnh sau :


7
#deIine tn hng gia tri

V d :
#deIine MA 1000
uc nay, tt ca cac tn MA trong chuong trinh xut hin sau nay du duoc thay bng
1000. Vi vy, ta thuong goi MA la tn hng, no biu din s 1000.
Mt vi du khac :
#deIine pi 3.14193
Dt tn cho mt hng Iloat la pi co gia tri la 3.14193.

1.6.2. Cc loi hng :
1.6.2.1. Hng int :
ng int la s nguyn co gia tri trong khoang tu -32768 dn 32767.

V d :

#deIine number1 -0 Dinh nghi hng int number1 co gia tri la -0
#deIine sodem 2732 Dinh nghi hng int sodem co gia tri la 2732

Ch :
Cn phn bit hai hng 06 va 06.0 : o dy 06 la s nguyn con 06.0 la hng
thuc.

1.6.2.2. Hng long :
ng long la s nguyn co gia tri trong khoang tu -2147483648 dn 2147483647.
ng long duoc vit theo cach :
1234 hoc 1234l
( thm hoc l vao dui )
Mt s nguyn vuot ra ngoai min xac dinh cua int cng duoc xem la long.

V d :
#deIine sl 88606 Dinh nghi hng long sl co gia tri la 88606


8
#deIine sl 88606 Dinh nghi hng long sl co gia tri la 88606

1.6.2.3. Hng int h 8 :
ng int h 8 duoc vit theo cach 0c1c2c3....o dy ci la mt s nguyn duong trong
khoang tu 1 dn 7. ng int h 8 lun lun nhn gia tri duong.

V d :
#deIine h8 034 Dinh nghi hng int h 8 co gia tri la
3*8*84*8229

1.6.2.4. Hng int h 16 :
Trong h nay ta su dung 16 ky tu : 0,1..,9,A,B,C,D,E,.

Cach vit ia tri
a hoc A 10
b hoc B 11
c hoc C 12
d hoc D 13
e hoc E 14
I hoc 1

ng s h 16 co dang 0xc1c2c3... hc 0c1c2c3... o dy ci la mt s trong h 16.

V d :
#deIine h16 0xa
#deIine h16 0xA
#deIine h16 0a
#deIine h16 0A
Cho ta cac hng s h16 trong h 16 co gia tri nhu nhau. ia tri cua chung trong h 10 la :
10*1616.

1.6.2.5. Hng k t :
ng ky tu la mt ky tu ring bit duoc vit trong hai du nhay don, vi du a.


9
ia tri cua a chinh la m ASCII cua chu a. Nhu vy gia tri cua a la 97. ng ky tu co th tham
gia vao cac phep toan nhu moi s nguyn khac. Vi du :
9-07-489
V d :
#deIine kt a Dinh nghi hng ky tu kt co gia tri la 97

ng ky tu con co th duoc vit theo cach sau :
\c1c2c3
trong do c1c2c3 la mt s h 8 ma gia tri cua no bng m ASCII cua ky tu cn biu din.
Vi du : chu a co m h 10 la 97, di ra h 8 la 0141. Vy hng ky tu a co th vit duoi dang
\141. Di voi mt vai hng ky tu dc bit ta cn su dung cach vit sau ( thm du \ ) :
Cach vit Ky tu
\
\
\\ \
\n \n (chuyn dong )
\0 \0 ( null )
\t Tab
\b Backspace
\r CR ( v du dong )
\I ( sang trang )

Ch :
Cn phn bit hng ky tu 0 va \0. ng 0 ung voi chu s 0 co m ASCII la 48,
con hng \0 ung voi kytu \0 ( thuong goi la ky tu null ) co m ASCII la 0.
ng ky tu thuc su la mt s nguyn, vi vy co th dung cac s nguyn h 10 d biu
din cac ky tu, vi du lnh printI(cc,6,66) s in ra AB.

1.6.2.5. Hng xu k t :
ng xu ky tu la mt dy ky tu bt ky dt trong hai du nhay kep.

V d :
#deIine xau1 a noi


10
#deIine xau2 My name is iang
u ky tu duoc luu tru trong may duoi dang mt bang co cac phn tu la cac ky tu ring
bit. Trinh bin dich tu dng thm ky tu null \0 vao cui mi xu ( ky tu \0 duoc xem la du hiu
kt thuc cua mt xu ky tu ).

Ch :
Cn phn bit hai hng a va a. a la hng ky tu duoc luu tru trong 1 byte, con a la
hng xu ky tu duoc luu tru trong 1 mang hai phn tu : phn tu thu nht chua chu a con phn tu
thu hai chua \0.

1.7. Bin :
Mi bin cn phai duoc khai bao truoc khi dua vao su dung. Vic khai bao bin duoc
thuc hin theo mu sau :
Kiu du liu cua bin tn bin ;

V d :
int a,b,c; Khai bao ba bin int la a,b,c
long dai,mn; Khai bao hai bin long la dai va mn
char kt1,kt2; Khai bao hai bin ky tu la kt1 va kt2
Iloat x,y Khai bao hai bin Iloat la x va y
double canh1, canh2; Khai bao hai bin double la canh1 va canh2

Bin kiu int chi nhn duoc cac gia tri kiu int. Cac bin khac cng co y nghia tuong tu.
Cac bin kiu char chi chua duoc mt ky tu. D luu tru duoc mt xu ky tu cn su dung mt
mang kiu char.

V| tr cua khai bo bin :
Cac khai bao cn phai duoc dt ngay sau du du tin cua thn ham va cn dung truoc
moi cu lnh khac. Sau dy la mt vi du v khai bao bin sai :
( Khai nim v ham va cu truc chuong trinh s nghin cuu sau nay)

main()



11
int a,b,c;
a2;
int d; /* Vi tri cua khai bao sai */
.....
}

Khoi du cho bin :
Nu trong khai bao ngay sau tn bin ta dt du va mt gia tri nao do thi dy chinh la
cach vua khai bao vua khoi du cho bin.

V d :
int a,b20,c,d40;
Iloat e-.2,x27.23,y,z,t18.98;
Vic khoi du va vic khai bao bin ri gan gia tri cho no sau nay la hoan toan tuong duong.

Ly d|a chi cua bin :
Mi bin duoc cp phat mt vung nho gm mt s byte lin tip. S hiu cua byte du
chinh la dia chi cua bin. Dia chi cua bin s duoc su dung trong mt s ham ta s nghin cuu sau
nay ( vi du nhu ham scanI ).
D ly dia chi cua mt bin ta su dung phep toan :
& tn bin

1.8 Mang :
Mi bin chi co th biu din mt gia tri. D biu din mt dy s hay mt bang s ta co
th dung nhiu bin nhung cach nay khng thun loi. Trong truong hop nay ta co khai nim v
mang. Khai nim v mang trong ngn ngu C cng ging nhu khai nim v ma trn trong dai s
tuyn tinh.
Mang co th duoc hiu la mt tp hop nhiu phn tu co cung mt kiu gia tri va chung
mt tn. Mi phn tu mang biu din duoc mt gia tri. Co bao nhiu kiu bin thi co by nhiu
kiu mang. Mang cn duoc khai bao d dinh r :
oai mang : int, Iloat, double...
Tn mang.
S chiu va kich thuoc mi chiu.


12
Khai nim v kiu mang va tn mang cng ging nhu khai nim v kiu bin va tn bin. Ta s
giai thich khai nim v s chiu va kich thuoc mi chiu thng qua cac vi du cu th duoi dy.
Cac khai bao :
int a|10|,b|4||2|;
Iloat x||,y|3||3|;
s xac dinh 4 mang va y nghia cua chung nhu sau :

Thu tu Tn mang Kiu mang S chiu Kich thuoc Cac phn tu
1 A Int 1 10 a|0|,a|1|,a|2|...a|9|
2 B Int 2 4x2 b|0||0|, b|0||1|
b|1||0|, b|1||1|
b|2||0|, b|2||1|
b|3||0|, b|3||1|

3 loat 1 x|0|,x|1|,x|2|...x|4|
4 loat 2 3x3 y|0||0|, y|0||1|, y|0||2|
y|1||0|, y|1||1|, y|1||2|
y|2||0|, y|2||1|, y|1||2|

Ch :
Cac phn tu cua mang duoc cp phat cac khoang nho lin tip nhau trong b nho. Noi
cach khac, cac phn tu cua mang co dia chi lin tip nhau.
Trong b nho, cac phn tu cua mang hai chiu duoc sp xp theo hang.

Chi s mang :
Mt phn tu cu th cua mang duoc xac dinh nho cac chi s cua no. Chi s cua mang phai
co gia tri int khng vuot qua kich thuoc tuong ung. S chi s phai bng s chiu cua mang.
ia su z,b,x,y d duoc khai bao nhu trn, va gia su i, la cac bin nguyn trong do i2,
1. Khi do :
a|i-1| la a|2|
b|i||2-i| la b|3||0|
y|i||| la y|2||1|


13

Ch :
Mang co bao nhiu chiu thi ta phai vit no co by nhiu chi s. Vi th nu ta vit nhu
sau s la sai : y|i| ( Vi y la mang 2 chiu ) vv..
Biu thuc dung lam chi s co th thuc. Khi do phn nguyn cua biu thuc thuc s la chi
s mang.

V d :
a|2.| la a|2|
b|1.9| la a|1|
* Khi chi s vuot ra ngoai kich thuoc mang, may s vn khng bao li, nhung no s truy
cp dn mt vung nho bn ngoai mang va co th lam ri loan chuong trinh.

Ly d|a chi mt phn tu cua mang :
Co mt vai han ch trn cac mang hai chiu. Chng han co th ly dia chi cua cac phn tu
cua mang mt chiu, nhung noi chung khng cho phep ly dia chi cua phn tu cua mang hai
chiu. Nhu vy may s chp nhn phep tinh : &a|i| nhung khng chp nhn phep tinh &y|i|||.

D|a chi du cua mt mang :
Tn mang biu thi dia chi du cua mang. Nhu vy ta co th dung a thay cho &a|0|.

Khoi du cho bin mang :
Cac bin mang khai bao bn trong thn cua mt ham ( k ca ham main() ) goi la bin
mang cuc b.
Mun khoi du cho mt mang cuc b ta su dung toan tu gan trong thn ham.
Cac bin mang khai bao bn ngoai thn cua mt ham goi la bin mang ngoai.

D khoi du cho bin mang ngoi ta p dng cc qui tc sau :
Cac bin mang ngoai co th khoi du ( mt ln ) vao luc dich chuong trinh bng cach su
dung cac biu thuc hng. Nu khng duoc khoi du may s gan cho chung gia tri 0.

V d :
....


14
Iloat y|6|3.2,0,.1,23,0,42};
int z|3||2|
2,31},
12,13},
4,1}

....
main()

....
}
Khi khoi du mang ngoai co th khng cn chi ra kich thuoc ( s phn tu ) cua no. Khi
do, may s danh cho mang mt khoang nho du d thu nhn danh sach gia tri khoi du.

V d :
....
Iloat a||0,.1,23,0,42};
int m|||3|
2,31,4},
12,13,89},
4,1,22}
};
Khi chi ra kich thuoc cua mang, thi kich thuoc nay cn khng nho hon kich thuoc cua b
khoi du.

V d :
....
Iloat m|6|0,.1,23,0};
int z|6||3|
2,31,3},
12,13,22},
4,1,11}
};


1
....
Di voi mang hai chiu, co th khoi du voi s gia tri khoi du cua mi hang co th khac
nhau :

V d :
....
Iloat z|||3|
31.},
12,13},
-4.76}
};
int z|13||2|
31.11},
12},
4.14,1.09}
};

Khoi du cua mt mang char co th la
Mt danh sach cac hng ky tu.
Mt hng xu ky tu.

V d :
char ten||h,a,g}
char ho||tran
char dem|10| van




16
Chuong 2
Cac lnh vao ra

Chuong nay gioi thiu thu vin vao/ra chun la mt tp cac ham duoc thit k d cung
cp h thng vao/ra chun cho cac chuong trinh C. Chung ta s khng m ta toan b thu vin vao
ra o dy ma chi quan tm nhiu hon dn vic nu ra nhung diu co ban nht d vit chuong trinh
C tuong tac voi mi truong va h diu hanh.

2.1. Thm nhp vo thu vin chun :
Mi tp gc co tham tro toi ham thu vin chun du phai chua dong :

#include conio.h cho cac ham getch(), putch(), clrscr(), gotoxy() ...
#include stdio.h cho cac ham khac nhu gets(), IIlus(), Iwrite(), scanI()...
o gn ch bt du chuong trinh. Tp stdio.h dinh nghia cac macro va bin cung cac ham dung
trong thu vin vao/ra. Dung du ngoc va thay cho cac du nhay thng thuong d chi thi cho
trinh bin dich tim kim tp trong danh muc chua thng tin tiu d chun.

2.2. Cc hm vo ra chun - getchar() v putchar() - getch() v putch() :
2.2.1. Hm getchar () :
Co ch vao don gian nht la doc tung ky tu tu thit bi vao chun, noi chung la ban phim
va man hinh cua nguoi su dung, bng ham getchar().

Cch dng :
Dung cu lnh sau :
bin getchar();

Cng dng :
Nhn mt ky tu vao tu ban phim va khng dua ra man hinh. am s tra v ky tu nhn
duoc va luu vao bin.

V d :
int c;
c getchar()


17

2.2.2. Hm putchar () :
D dua mt ky tu ra thit bi ra chun, noi chung la man hinh, ta su dung ham putchar()

Cch dng :
Dung cu lnh sau :
putchar(ch);

Cng dng :
Dua ky tu ch ln man hinh tai vi tri hin tai cua con tro. Ky tu s duoc hin thi voi mau
trng.

V d :
int c;
c getchar();
putchar(c);

2.2.3. Hm getch() :
am nhn mt ky tu tu b dm ban phim, khng cho hin ln man hinh.

Cch dng :
Dung cu lnh sau :
getch();

Cng dng :
Nu co sn ky tu trong b dm ban phim thi ham s nhn mt ky tu trong do.
Nu b dm rng, may s tam dung. Khi g mt ky tu thi ham nhn ngay ky tu do (
khng cn bm thm phim Enter nhu trong cac ham nhp khac ). Ky tu vua g khng hin ln
man hinh.

Nu dng :
bingetch();
Thi bin s chua ky tu doc vao.


18

V d :
c getch();

2..2.4. Hm putch() :
Cch dng :
Dung cu lnh sau :
putch(ch);

Cng dng :
Dua ky tu ch ln man hinh tai vi tri hin tai cua con tro. Ky tu s duoc hin thi theo mau
xac dinh trong ham textcolor.
am cng tra v ky tu duoc hin thi.

2.3. Dua kt qua ln mn hnh - hm printf :
Cch dng :
prinI(diu khin, di s 1, di s 2, ...);
am printI chuyn, tao khun dang va in cac di cua no ra thit bi ra chun duoi su diu
khin cua xu diu khin. u diu khin chua hai kiu di tuong : cac ky tu thng thuong,
chung s duoc dua ra truc tip thit bi ra, va cac dc ta chuyn dang, mi dc ta s tao ra vic di
dang va in di tip sau cua printI.

Chui diu khin c th c cc k t diu khin :
\n sang dong moi
\I sang trang moi
\b lui lai mt buoc
\t du tab

Dng tng qut cua d}c ta :
|-||Iw||.pp|ky tu chuyn dang
Mi dc ta chuyn dang du duoc dua vao bng ky tu va kt thuc boi mt ky tu
chuyn dang. iua va ky tu chuyn dang co th co :



19
Du tr :
Khi khng co du tru thi kt qua ra duoc dn v bn phai nu d dai thuc t cua
kt qua ra nho hon d rng ti thiu Iw danh cho no. Cac vi tri du thua s duoc lp dy
bng cac khoang trng. Ring di voi cac truong s, nu dy s Iw bt du bng s 0 thi cac vi tri
du thua bn trai s duoc lp dy bng cac s 0.
Khi co du tru thi kt qua duoc dn v bn trai va cac vi tri du thua v bn phai ( nu
co ) lun duoc lp dy bng cac khoang trng.
fw :
Khi Iw lon hon d dai thuc t cua kt qua ra thi cac vi tri du thua s duoc
lp dy boi cac khoang trng hoc s 0 va ni dung cua kt qua ra s duoc dy v
bn phai hoc bn trai.
Khi khng co Iw hoc Iw nho hon hay bng d dai thuc t cua kt qua ra thi d
rng trn thit bi ra danh cho kt qua s bng chinh d dai cua no.
Tai vi tri cua Iw ta co th dt du *, khi do Iw duoc xac dinh boi gia tri nguyn
cua di tuong ung.

V d :
Kt qua ra Iw Du - Kt qua dua ra
-203 8 co -203
-203 08 co -203
-203 8 khng -203
-203 08 khng 000-203
abcdeI 8 khng abcdeI
abcdeI 08 co abcdeI
abcdeI 08 khng abcdeI

pp :
Tham s pp chi duoc su dung khi di tuong ung la mt xu ky tu hoc mt
gia tri kiu Iloat hay double.
Trong truong hop di tuong ung co gia tri kiu Iloat hay double thi pp la d
chinh xac cua truong ra. Noi mt cach cu th hon gia tri in ra s co pp chu s sau s thp
phn.
Khi vng mt pp thi d chinh xac s duoc xem la 6.


20
Khi di la xu ky tu :
Nu pp nho hon d dai cua xu thi chi pp ky tu du tin cua xu duoc in ra. Nu
khng co pp hoc nu pp lon hon hay bng d dai cua xu thi ca xu ky tu s duoc in ra.

V d :
Kt qua ra Iw pp Du - Kt qua dua
ra
D dai
truong ra
-43.64 10 2 co -43.6 7
-43.64 10 0 co -436 4
-43.64 8 vng co -43.64000 11
alphabeta 8 3 vng alp 3
alphabeta vng vng vng alphabeta 9
alpha 8 6 co alpha

Cc k t chuyn dng v nghia cua n :
Ky tu chuyn dang la mt hoc mt dy ky hiu xac dinh quy tc chuyn dang va dang in
ra cua di tuong ung. Nhu vy s co tinh trang cung mt s s duoc in ra theo cac dang khac
nhau. Cn phai su dung cac ky tu chuyn dang theo dung qui tc dinh sn. Bang sau cho cac
thng tin v cac ky tu chuyn dang.
Ky tu chuyn dang y nghia
d Di duoc chuyn sang s nguyn h thp phn
o Di duoc chuyn sang h tam khng du ( khng co s 0 dung truoc )
x Di duoc chuyn sang h muoi sau khng du ( khng co 0x dung
truoc )
u Di duoc chuyn sang h thp phn khng du
c Di duoc coi la mt ky tu ring bit
s Di la xu ky tu, cac ky tu trong xu duoc in cho toi khi gp ky tu
khng hoc cho toi khi du s luong ky tu duoc xac dinh boi cac dc ta
v d chinh xac pp.
e Di duoc xem la Iloat hoc double va duoc chuyn sang dang thp
phn co dang |-|m.n..nE| hoc -| voi d dai cua xu chua n la pp.
I Di duoc xem la Iloat hoc double va duoc chuyn sang dang thp


21
phn co dang |-|m..m.n..n voi d dai cua xu chua n la pp. D chinh
xac mc dinh la 6. uu y rng d chinh xac khng xac dinh ra s cac
chu s co nghia phai in theo khun dang I.
g Dung e hoc I, tuy theo loai nao ngn hon, khng in cac s 0 v
nghia.

Ch :
Moi dy ky tu khng bt du bng hoc khng kt thuc bng ky tu chuyn dang du
duoc xem la ky tu hin thi.
D hin thi cac ky tu dc bit :
Cach vit in thi
\
\
\\ \
Cc v d :
1 printI(\ Nang suat tang : d \ \n\\d,30,-0); Nang suat tang ; 30
\d-0
2 n8
Iloat x2., y-47.33
printI(\nI\n*.2I,x,n,y);
nh nay tuong duong voi
printI(\nI\n8.2I,x,n,y);
Vi n8 tuong ung voi vi tri *
2.00000
-47.34

2.4. Vo s liu t bn phm - hm scanf :
am scanI la ham doc thng tin tu thit bi vao chun ( ban phim ), chuyn dich chung (
thanh s nguyn, s thuc, ky tu vv.. ) ri luu tru no vao b nho theo cac dia chi xac dinh.

Cch dng :
scanI(diu khin,di 1, di 2, ...);
u diu khin chua cac dc ta chuyn dang, mi dc ta s tao ra vic di dang bin tip
sau cua scanI.



22
D}c ta c th vit mt cch tng qut nhu sau :
|*||d...d|ky tu chuyn dang
Vic co mt cua du * noi ln rng truong vao vn duoc do doc binh thuong, nhung gia
tri cua no bi bo qua ( khng duoc luu vao b nho ). Nhu vy dc ta chua du * s khng co di
tuong ung.
d...d la mt dy s xac dinh chiu dai cuc dai cua truong vao, y nghia cua no duoc giai
thich nhu sau :
Nu tham s d...d vng mt hoc nu gia tri cua no lon hon hay bng d dai cua truong
vao tuong ung thi toan b truong vao s duoc doc, ni dung cua no duoc dich va duoc gan cho
dia chi tuong ung ( nu khng co du * ).
Nu gia tri cua d...d nho hon d dai cua truong vao thi chi phn du cua truong co kich
c bng d...d duoc doc va gan cho dia chi cua bin tuong ung. hn con lai cua truong s duoc
xem xet boi cac dc ta va di tuong ung tip theo.

V d :
int a;
Iloat x,y;
char ch|6|,ct|6|
scanI(II3d3ss,&x&y&a&ch&ct0;
Voi dong vao : 4.32e-1 2 1242348a
Kt qua la lnh scanI s gan
.432 cho x
2.0 cho y
124 cho a
xu 23 va du kt thuc \0 cho ch
xu 48a va du kt thuc \0 cho ct

K t chuyn dng :
Ky tu chuyn dang xac dinh cach thuc do doc cac ky tu trn dong vao cng nhu cach
chuyn dich thng tin doc duoc truoc khi gan no cho cac dia chi tuong ung.
Cach do doc thu nht la doc theo truong vao, khi do cac khoang trng bi bo qua. Cach
nay ap dung cho hu ht cac truong hop.


23
Cach do doc thu hai la doc theo ky tu, khi do cac khoang trng cng duoc xem xet binh
dng nhu cac ky tu khac. huong phap nay chi xay ra khi ta su dung mt trong ba ky tu chuyn
dang sau : C, | dy ky tu |, | dy ky tu |

Cc k t chuyn dng v nghia cua n :
c Vao mt ky tu, di tuong ung la con tro ky tu. Co xet ky tu khoang trng
d Vao mt gia tri kiu int, di tuong ung la con tro kiu int. Truong phai vao la s
nguyn
ld Vao mt gia tri kiu long, di tuong ung la con tro kiu long. Truong phai vao la s
nguyn
o Vao mt gia tri kiu int h 8, di tuong ung la con tro kiu int. Truong phai vao la s
nguyn h 8
lo Vao mt gia tri kiu long h 8, di tuong ung la con tro kiu long. Truong phai vao
la s nguyn h 8
x Vao mt gia tri kiu int h 16, di tuong ung la con tro kiu int. Truong phai vao la
s nguyn h 16
lx Vao mt gia tri kiu long h 16, di tuong ung la con tro kiu long. Truong phai vao
la s nguyn h 16
I hay e Vao mt gia tri kiu Iloat, di tuong ung la con tro Iloat, truong vao phai la s du
phay dng
lI hay le Vao mt gia tri kiu double, di tuong ung la con tro double, truong vao phai la s
du phay dng
s Vao mt gia tri kiu double, di tuong ung la con tro kiu char, truong vao phai la
dy ky tu bt ky khng chua cac du cach va cac du xung dong

| Dy ky tu |, | Dy ky tu | Cac ky tu trn dong vao s ln luot duoc doc cho dn khi nao gp
mt ky tu khng thuc tp cac ky tu dt trong||. Di tuong ung la con tro kiu char. Truong vao
la dy ky tu bt ky ( khoang trng duoc xem nhu mt ky tu ).

V d :
int a,b;
char ch|10|, ck|10|;
scanI(d|012346789||012346789|3d,&a,ch,ck,&b);


24
Voi dong vao :
3 1314 xyz 8423
S gan :
3 cho a
xu 1314 cho ch
xu xyz cho ck
84 cho b
Ch :
et doan chuong trinh dung d nhp ( tu ban phim ) ba gia tri nguyn ri gan cho ba bin
a,b,c nhu sau :
int a,b,c;
scanI(ddd,&a,&b,&c);
D vao s liu ta co th thao tac theo nhiu cach khac nhau:
Cach 1 :
Dua ba s vao cung mt dong, cac s phn cach nhau bng du cach hoc du tab.
Cach 2 :
Dua ba s vao ba dong khac nhau.
Cach 3 :
ai s du cung mt dong ( cach nahu boi du cach ho tab ), s thu ba trn dong tip
theo.
Cach 4 :
S thu nht trn mt dong, hai s sau cung mt dong tip theo ( cach nahu boi du cach
ho tab ), s thu ba trn dong tip theo.
Khi vao sai s bao li va nhay v chuong trinh chua loi goi no.

2.5. Dua kt qua ra my in :
D dua kt qua ra may in ta dung ham chun IprintI co dang sau :
IprintI(stdprn, diu khin, bin 1, bin 2,...);
Tham s stdprn xac dinh thit bi dua ra la may in.
Diu khin co dang dc ta nhu lnh printI.
Dung ging nhu lnh printI, chi khac la in ra may in.

V d :


2
Doan chuong trinh in ma trn A, c 8x6. Mi hang cua ma trn duoc in trn mt dong :
Iloat a|8||6|;
int i,;
IprintI(stdprn,\n20c MA TRAN A\n\n\n, );
Ior (i0;i8;i)
Ior (0;6;)
IprintI(stdprn,10.2I,a|i|||);
IprintI(stdprn,\n);
}



26
Chuong 3
Biu thuc

Toan hang co th xem la mt dai luong co mt gia tri nao do. Toan hang bao gm hng,
bin, phn tu mang va ham.
Biu thuc lp nn tu cac toan hang va cac phep tinh d tao nn nhung gia tri moi. Biu
thuc dung d din dat mt cng thuc, mt qui trinh tinh toan, vi vy no la mt thanh phn khng
th thiu trong chuong trinh.

3.1. Biu thc :
Biu thuc la mt su kt hop giua cac phep toan va cac toan hang d din dat mt cng
thuc toan hoc nao do. Mi biu thuc co s co mt gia tri. Nhu vy hng, bin, phn tu mang va
ham cng duoc xem la biu thuc.
Trong C, ta co hai khai nim v biu thuc :
Biu thuc gan.
Biu thuc diu kin .
Biu thuc duoc phn loai theo kiu gia tri : nguyn va thuc. Trong cac mnh d logic,
biu thuc duoc phn thanh dung ( gia tri khac 0 ) va sai ( gia tri bng 0 ).
Biu thuc thuong duoc dung trong :
V phai cua cu lnh gan.
am tham s thuc su cua ham.
am chi s.
Trong cac toan tu cua cac cu truc diu khin.
Toi dy, ta d co hai khai nim chinh tao nn biu thuc do la toan hang va phep toan.
Toan hang gm : hng, bin, phn tu mang va ham truoc dy ta d xet. Duoi dy ta s noi dn cac
phep toan. am s duoc d cp trong chuong 6.

3.2. Lnh gn v biu thc:
Biu thuc gan la biu thuc co dang :
ve
Trong do v la mt bin ( hay phn tu mang ), e la mt biu thuc. ia tri cua biu thuc gan
la gia tri cua e, kiu cua no la kiu cua v. Nu dt du ; vao sau biu thuc gan ta s thu duoc phep
toan gan co dang :


27
ve;
Biu thuc gan co th su dung trong cac phep toan va cac cu lnh nhu cac biu thuc khac.
Vi du nhu khi ta vit
ab;
thi diu do co nghia la gan gia tri cua biu thuc b cho bin a. Kt qua la b va a.
oan toan tuong tu nhu :
abcd6; gan 6 cho ca a, b, c va d

V d :
z(y2)*(x6); o dy * la phep toan nhn }
gan 2 cho y, 6 cho x va nhn hai biu thuc lai cho ta z12.

3.3. Cc php ton s hc :
Cac phep toan hai ngi s hoc la
hep toan y nghi Vi du
hep cng ab
- hep tru a-b
* hep nhn a*b
/ hep chia a/b
( Chia s nguyn s cht phn thp phn )
hep ly phn du ab
( Cho phn du cua phep chia a cho b )
Co phep toan mt ngi - vi du -(ab) s dao gia tri cua phep cng (ab).

V d :
11/33
1132
-(26)-8
Cac phep toan va - co cung thu tu uu tin, co thu tu uu tin nho hon cac phep * , / ,
va ca ba phep nay lai co thu tu uu tin nho hon phep tru mt ngi.
Cac phep toan s hoc duoc thuc hin tu trai sang phai. S uu tin va kha nng kt hop
cua phep toan duoc chi ra trong mt muc sau nay



28
3.4. Cc php ton quan h v logic :
hep toan quan h va logic cho ta gia tri dung ( 1 ) hoc gia tri sai ( 0 ). Noi cach khac,
khi cac diu kin nu ra la dung thi ta nhn duoc gia tri 1, trai lai ta nhn gia tri 0.

Cc php ton quan h l :
hep toan y nghi Vi du
So sanh lon hon ab
4 co gia tri 0
>= So snh ln hon hoac
bng
ab
62 co gia tri 1
< So snh nho hon a<b
6<=7 c gi tri 1
So sanh nho hon hoc bng ab
8 co gia tri 0
== So snh bng nhau
ab
66 co gia tri 1
!= So snh khc nhau a!=b
9!=9 c gi tri 0

Bn phep toan du co cung s uu tin, hai phep sau co cung s thu tu uu tin nhung thp
hon s thu tu cua bn phep du.
Cac phep toan quan h co s thu tu uu tin thp hon so voi cac phep toan s hoc, cho nn
biu thuc :
in-1
duoc hiu la i(n-1).

Cc php ton logic :
Trong C su dung ba phep toan logic :
hep phu dinh mt ngi !
a !a
khac 0 0
bng 0 1
hep va (AND) &&


29
hep hoc ( OR )
a b a&&b ab
khac 0 khac 0 1 1
khac 0 bng 0 0 1
bng 0 khac 0 0 1
bng 0 bng 0 0 0
Cac phep quan h co s uu tin nho hon so voi ! nhung lon hon so voi && va , vi vy
biu thuc nhu :
(ab)&&(cd)
co th vit lai thanh :
ab&&cd

Ch :
Ca a va b co th la nguyn hoc thuc.

3.5. Php ton tng giam :
C dua ra hai phep toan mt ngi d tng va giam cac bin ( nguyn va thuc ). Toan tu
tng la s cng 1 vao toan hang cua no, toan tu giam -- thi s tru toan hang di 1.

V d :
n
n Cho ta n6
--n Cho ta n4
Ta co th vit phep toan va -- truoc hoc sau toan hang nhu sau : n, n, --n, n--.
Su khac nhau cua n va n o ch : trong phep n thi tng sau khi gia tri cua no d duoc su
dung, con trong phep n thi n duoc tng truoc khi su dung. Su khac nhau giua n-- va --n cng
nhu vy.

V d :
n
xn Cho ta x6 va n6
xn Cho ta x va n6



30
3.6. Th t uu tin cc php ton :
Cac phep toan co d uu tin khac nhau, diu nay co y nghia trong cung mt biu thuc s
co mt s phep toan nay duoc thuc hin truoc mt s phep toan khac.
Thu tu uu tin cua cac phep toan duoc trinh bay trong bang sau :
TT hep toan Trinh tu kt hop
1 () || - Trai qua phai
2 ! & * - -- (type ) sizeoI hai qua trai
3 * ( phep nhn ) / Trai qua phai
4 - Trai qua phai
Trai qua phai
6 Trai qua phai
7 ! Trai qua phai
8 & Trai qua phai
9 Trai qua phai
10 Trai qua phai
11 && Trai qua phai
12 Trai qua phai
13 : hai qua trai
14 - * / & hai qua trai
1 , Trai qua phai

Ch thch :
Cac phep toan tn mt dong co cung thu tu uu tin, cac phep toan o hang trn co s uu
tin cao hon cac s o hang duoi.
Di voi cac phep toan cung muc uu tin thi trinh tu tinh toan co th tu trai qua phai hay
nguoc lai duoc chi ra trong ct trinh tu kt hop.

V d :
*--px*(--px) ( hai qua trai )
8/4*6(8/4)*6 ( Trai qua phai )
Nn dung cac du ngoc tron d vit biu thuc mt cach chinh xac.

Cc php ton l :


31
Dong 1
| | Dung d biu din phn tu mang, vi du : a|i|||
. Dung d biu din thanh phn cu truc, vi du : ht.ten
- Dung d biu din thanh phn cu truc thng qua con tro
Dong 2
* Dung d khai bao con tro, vi du : int *a
& hep toan ly dia chi, vi du : &x
( type) la phep chuyn di kiu, vi du : (Iloat)(xy)
Dong 1
Toan tu , thuong dung d vit mt dy biu thuc trong toan tu Ior.

3.7. Chuyn di kiu gi tr| :
Vic chuyn di kiu gia tri thuong din ra mt cach tu dng trong hai truong hop sau :
Khi gan biu thuc gm cac toan hang khac kiu.
Khi gan mt gia tri kiu nay cho mt bin ( hoc phn tu mang ) kiu khac. Diu nay xay
ra trong toan tu gan, trong vic truyn gia tri cac tham s thuc su cho cac di.
Ngoai ra, ta co th chuyn tu mt kiu gia tri sang mt kiu bt ky ma ta mun bng phep
chuyn sau :
( type ) biu thuc

V d :
(Iloat) (ab)

Chuyn di kiu trong biu thc :
Khi hai toan hang trong mt phep toan co kiu khac nhau thi kiu thp hon s duoc nng
thanh kiu cao hon truoc khi thuc hin phep toan. Kt qua thu duoc la mt gia tri kiu cao hon.
Chng han :
iua int va long thi int chuyn thanh long.
iua int va Iloat thi int chuyn thanh Iloat.
iua Iloat va double thi Iloat chuyn thanh double.

V d :
1.*(11/3)4.


32
1.*11/3.
(11/3)*1.4.

Chuyn di kiu thng qua php gn :
ia tri cua v phai duoc chuyn sang kiu v trai do la kiu cua kt qua. Kiu int co th
duoc duoc chuyn thanh Iloat. Kiu Iloat co th chuyn thanh int do cht di phn thp phn.
Kiu double chuyn thanh Iloat bng cach lam tron. Kiu long duoc chuyn thanh int bng cach
ct bo mt vai chu s.

V d :
int n;
n1.6 gia tri cua n la 1

Di kiu dng (type)biu thc :
Theo cach nay, kiu cua biu thuc duoc di thanh kiu type theo nguyn tc trn.
V d :
hep toan : (int)a
cho mt gia tri kiu int. Nu a la Iloat thi o dy co su chuyn di tu Iloat sang int. Chu y
rng ban thn kiu cua a vn khng bi thay di. Noi cach khac, a vn co kiu Iloat nhung (int)a co
kiu int.
Di voi ham toan hoc cua thu vin chun, thi gia tri cua di va gia tri cua ham du co
kiu double, vi vy d tinh cn bc hai cua mt bin nguyn n ta phai dung phep ep kiu d
chuyn kiu int sang double nhu sau :
sqrt((double)n)
hep ep kiu co cung s uu tin nhu cac toan tu mt ngi.

Ch :
Mun co gia tri chinh xac trong phep chia hai s nguyn cn dung phep ep kiu :
((Iloat)a)/b
D di gia tri thuc r sang nguyn, ta dung :
(int)(r0.)
Chu y thu tu uu tin :
(int)1.4*101*1010


33
(int)(1.4*10)(int)14.014




34
Chuong 4
Cu truc co ban cua chuong trinh

4.1. Li ch thch :
Cac loi binh lun, cac loi giai thich co th dua vao o bt ky ch nao cua chuong trinh d
cho chuong trinh d hiu, d doc hon ma khng lam anh huong dn cac phn khac. oi giai thich
duoc dt giua hai du /* va */.
Trong mt chuong trinh cn ( va lun lun cn ) vit thm nhung loi giai thich d chuong
trinh thm r rang, thm d hiu.

V d :
#include stdio.h
#include string.h
#include alloc.h
#include process.h
int main()

char *str;
/* Cp phat b nho cho xu ky tu */
iI ((str malloc(10)) NU)

printI(Not enough memory to allocate buIIer\n);
exit(1); /* Kt thuc chuong trinh nu thiu b nho */
}
/* copy ello vao xu */
strcpy(str, ello);
/* in thi xu */
printI(String is s\n, str);

/* iai phong b nho */
Iree(str);
return 0;
}


3

4.2. Lnh v khi lnh :
4.2.1. Lnh :
Mt biu thuc kiu nhu x0 hoc i hoc scanI(...) tro thanh cu lnh khi co di km
theo du ;

V d :
x0;
i;
scanI(...);
Trong chuong trinh C, du ; la du hiu kt thuc cu lnh.

4.2.2. Khi lnh :
Mt dy cac cu lnh duoc bao boi cac du } goi la mt khi lnh. Vi du :

a2;
b3;
printI(\n6d6d,a,b);
}
TURBO C xem khi lnh cng nhu mt cu lnh ring l. Noi cach khac, ch nao vit
duoc mt cu lnh thi o do cng co quyn dt mt khi lnh.

Khai bo o du khi lnh :
Cac khai bao bin va mang chng nhung co th dt o du cua mt ham ma con co th vit
o du khi lnh :

int a,b,c|0|;
Iloat x,y,z,t|20||30|;
ab3;
x.; ya*x;
zb*x;
printI(\n y 8.2I\n z8.2I,y,z);
}


36

S lng nhau cua cc khi lnh v phm vi hot dng cua cc bin v mang :
Bn trong mt khi lnh lai co th vit lng khi lnh khac. Su lng nhau theo cach nhu
vy la khng han ch.
Khi may bt du lam vic voi mt khi lnh thi cac bin va mang khai bao bn trong no
moi duoc hinh thanh va duoc hinh thanh va duoc cp phat b nho. Cac bin nay chi tn tai trong
thoi gian may lam vic bn trong khi lnh va chung lp tuc bin mt ngay sau khi may ra khoi
khi lnh. Vy :
ia tri cua mt bin hay mt mang khai bao bn trong mt khi lnh khng th dua ra su
dung o bt ky ch nao bn ngoai khi lnh do.
o bt ky ch nao bn ngoai mt khi lnh ta khng th can thip dn cac bin va cac
mang duoc khai bao bn trong khi lnh
Nu bn trong mt khi ta dung mt bin hay mt mang co tn la a thi diu nay khng
lam thay di gia tri cua mt bin khac cng co tn la a ( nu co ) duoc dung o du do bn ngoai
khi lnh nay.
Nu co mt bin d duoc khai bao o ngoai mt khi lnh va khng trung tn voi cac bin
khai bao bn trong khi lnh nay thi bin do cng co th su dung ca bn trong cng nhu bn
ngoai khi lnh.

V d :
et doan chuong trinh sau :

int a,b2;

int a4;
bab;
printI(\n a trong 3d b3d,a,b);
}
printI(\n a ngoai 3d b3d,a,b);
}
Khi do doan chuong trinh s in kt qua nhu sau :
a trong 4 b6
a ngoai b6


37
Do tinh cht bin a trong va ngoai khi lnh.

4.3. Cu trc co ban cua chuong trnh :
Cu truc chuong trinh va ham la mt trong cac vn d quan trong cua C. V ham ta s co
mt chuong noi ti m v no. o dy ta chi dua ra mt s qui tc chung :
am la mt don vi dc lp cua chuong trinh. Tinh dc lp cua ham th hin o hai dim :
Khng cho phep xy dung mt ham bn trong cac ham khac.
Mi ham co cac bin, mang .. ring cua no va chung chi duoc su dung ni b bn trong
ham. Noi cach khac ham la don vi co tinh cht khep kin.
Mt chuong trinh bao gm mt hoc nhiu ham. am main() la thanh phn bt buc cua
chuong trinh. Chuong trinh bt du thuc hin cac cu lnh du tin cua ham main() va kt thuc
khi gp du } cui cung cua ham nay. Khi chuong trinh lam vic, may co th chay tu ham nay
sang ham khac.
Cac chuong trinh C duoc t chuc theo mu :
.....
ham 1
.....
ham 2
.....

.....
ham n

Bn ngoai cac ham o cac vi tri (..... ) la ch dt : cac toan tu #include ... ( dung d khai
bao su dung cac ham chun ), toan tu #deIine ... ( dung d dinh nghia cac hng ), dinh nghia kiu
du liu bng typedeI, khai bao cac bin ngoai, mang ngoai....
Vic truyn du liu va kt qua tu ham nay sang ham khac duoc thuc hin theo mt trong
hai cach :
Su dung di cua ham.
Su dung bin ngoai, mang ngoai ...
Vy noi tom lai cu truc co ban cua chuong trinh nhu sau :
Cac #include
Cac #deIine


38
Khai bao cac di tuong du liu ngoai ( bin, mang, cu truc vv..).
Khai bao nguyn mu cac ham.
am main().
Dinh nghia cac ham ( ham main co th dt sau hoc xen vao giua cac ham khac ).

V d :
Chuong trinh tinh x ly thua y ri in ra may in kt qua :
#include stdio.h
#include math.h
main()

double x,y,z;
printI(\n Nhap x va y);
scanI(lIlI,&x,&y);
zpow(x,y); /* ham ly lu thua y lu thua x */
IprintI(stdprn,\n x 8.2lI \n y8.2lI \n z8.2lI,x,y,z);
}

4.4. Mt s qui tc cn nh khi vit chuong trnh :
Qui tc du tin cn nh l :
Moi cau lnh co th vit trn mot hav nhiu dong nhung phai kt thuc
bng dau ;

Qui tc th hai l :
Cac loi giai thich can duoc dt gia cac dau /* va */ va co th duoc vit
Trn mot dong
Trn nhiu dong
Trn phan con lai cua dong

Qui tc th ba l :


39
Trong chuong trinh, khi ta su dung cac ham chuan, vi du nhu printf(),
getch() ,... ma cac ham nav lai chua trong file stdio.h trong thu muc cua C,
vi vav o dau chuong trinh ta phai khai bao su dung ,
=include "stdio.h "

Qui tc th tu l :
Mot chuong trinh co th chi co mot ham chinh ( ham main() ) hoc co th
co thm vai ham khac.




40
Chuong 5
Cu truc diu khin

Mt chuong trinh bao gm nhiu cu lnh. Thng thuong cac cu lnh duoc thuc hin
mt cach ln luot theo thu tu ma chung duoc vit ra. Cac cu truc diu khin cho phep thay di
trt tu noi trn, do do may co th nhay thuc hin mt cu lnh khac o mt vi tri truoc hoc sau
cu lnh hin thoi.
et v mt cng dung, co th chia cac cu truc diu khin thanh cac nhom chinh :
Nhay khng co diu kin.
R nhanh.
T chuc chu trinh.
Ngoai ra con mt s toan tu khac co chuc nng b tro nhu break, continue.

5.1. Cu trc c diu kin :
5.1.1. Lnh if-else :
Toan tu iI cho phep lua chon chay theo mt trong hai nhanh tuy thuc vao su bng khng
va khac khng cua biu thuc. No co hai cach vit sau :
iI ( biu thuc )
khi lnh 1;
/* Dang mt */
iI ( biu thuc )
khi lnh 1;
else
khi lnh 2 ;
/* Dang hai */


Hot dng cua biu thc dng 1 :
May tinh gia tri cua biu thuc. Nu biu thuc dung ( biu thuc co gia tri khac 0 ) may s
thuc hin khi lnh 1 va sau do s thuc hin cac lnh tip sau lnh iI trong chuong trinh. Nu biu
thuc sai ( biu thuc co gia tri bng 0 ) thi may bo qua khi lnh 1 ma thuc hin ngay cac lnh tip
sau lnh iI trong chuong trinh.

Hot dng cua biu thc dng 2 :
May tinh gia tri cua biu thuc. Nu biu thuc dung ( biu thuc co gia tri khac 0 ) may s
thuc hin khi lnh 1 va sau do s thuc hin cac lnh tip sau khi lnh 2 trong chuong trinh. Nu


41
biu thuc sai ( biu thuc co gia tri bng 0 ) thi may bo qua khi lnh 1 ma thuc hin khi lnh 2
sau do thuc hin tip cac lnh tip sau khi lnh 2 trong chuong trinh.

V d :
Chuong trinh nhp vao hai s a va b, tim max cua hai s ri in kt qua ln man hinh.
Chuong trinh co th vit bng ca hai cach trn nhu sau :

#include stdio.h
main()

Iloat a,b,max;
printI(\n Cho a);
scanI(I,&a);
printI(\n Cho b);
scanI(I,&b);
maxa;
iI (bmax) maxb;
printI( \n Max cua hai so a8.2I va b8.2I la Max8.2I,a,b,max);
}
#include stdio.h
main()

Iloat a,b,max;
printI(\n Cho a);
scanI(I,&a);
printI(\n Cho b);
scanI(I,&b);
iI (ab) maxa;
else maxb;
printI( \n Max cua hai so a8.2I va b8.2I la Max8.2I,a,b,max);
}




42
S lng nhau cua cc ton tu if :
C cho phep su dung cac toan tu iI lng nhau co nghia la trong cac khi lnh ( 1 va 2 ) o
trn co th chua cac toan tu iI - else khac. Trong truong hop nay, nu khng su dung cac du
dong mo ngoc cho cac khi thi s co th nhm ln giua cac iI-else.
Chu y la may s gn toan tu else voi toan tu iI khng co else gn nht. Chng han nhu
doan chuong trinh vi du sau :
iI ( n0 ) /* iI thu nht*/
iI ( ab ) /* iI thu hai*/
za;
else
zb;
thi else o dy s di voi iI thu hai.
Doan chuong trinh trn tuong duong voi :

iI ( n0 ) /* iI thu nht*/

iI ( ab ) /* iI thu hai*/
za;
else
zb;
}
Truong hop ta mun else di voi iI thu nht ta vit nhu sau :
iI ( n0 ) /* iI thu nht*/

iI ( ab ) /* iI thu hai*/
za;
}
else
zb;


5.1.2. Lnh else-if :
Khi mun thuc hin mt trong n quyt dinh ta co th su dung cu truc sau :


43
iI ( biu thuc 1 )
khi lnh 1;
else iI ( biu thuc 2 )
khi lnh 2;
......
else iI ( biu thuc n-1 )
khi lnh n-1;
else
khi lnh n;
Trong cu truc nay, may s di kim tra tu biu thuc 1 tro di dn khi gp biu thuc nao co
gia tri khac 0.
Nu biu thuc thu i (1,2, ...n-1) co gia tri khac 0, may s thuc hin khi lnh i, ri sau do
di thuc hin lnh nm tip theo khi lnh n trong chuong trinh.
Nu trong ca n-1 biu thuc khng co biu thuc nao khac 0, thi may s thuc hin khi lnh
n ri sau do di thuc hin lnh nm tip theo khi lnh n trong chuong trinh.

V d :
Chuong trinh giai phuong trinh bc hai.
#include stdio.h
main()

Iloat a,b,c,d,x1,x2;
printI(\n Nhap a, b, c:);
scanI(III,&a&b&c);
db*b-4*a*c;
iI (d0.0)
printI(\n huong trinh vo nghiem );
else iI (d0.0)
printI(\n huong trinh co nghiem kep x1,28.2I,-b/(2*a));
else

printI(\n huong trinh co hai nghiem );
printI(\n x18.2I,(-bsqrt(d))/(2*a));


44
printI(\n x28.2I,(-b-sqrt(d))/(2*a));
}

5.2. Lnh nhay khng diu kin - ton tu goto :
Nhn co cung dang nhu tn bin va co du : dung o phia sau. Nhn co th duoc gan cho
bt ky cu lnh nao trong chuong trinh.

V d :
ts : ss;
thi o dy ts la nhn cua cu lnh gan ss.
Toan tu goto co dang :
goto nhn;
Khi gp toan tu nay may s nhay toi cu lnh co nhn vit sau tu khoa goto.

Khi dng ton tu goto cn ch :
Cu lnh goto va nhn cn nm trong mt ham, co nghia la toan tu goto chi cho phep
nhay tu vi tri nay dn vi tri khac trong thn mt ham va khng th dung d nhay tu mt ham nay
sang mt ham khac.
Khng cho phep dung toan tu goto d nhay tu ngoai vao trong mt khi lnh. Tuy nhin
vic nhay tu trong mt khi lnh ra ngoai la hoan toan hop l. Vi du nhu doan chuong trinh sau la
sai.
goto n1;

.......
.....
n1: printI(\n ia tri cua N la: );
.....
}

V d :
Tinh tng s123....10
#include stdio.h
main()


4

int s,i;
is0;
tong:
i;
ssi;
iI (i10) goto tong;
printI(\n tong sd,s);
}

5.3. Cu trc r nhnh - ton tu switch:
a cu truc tao nhiu nhanh dc bit. No cn cu vao gia tri mt biu thuc nguyn d d
chon mt trong nhiu cach nhay.
Cu truc tng quat cua no la :
switch ( biu thuc nguyn )

case n1
khi lnh 1
case n2
khi lnh 2
.......
case nk
khi lnh k
| deIault
khi lnh k1 |
}
Voi ni la cac s nguyn, hng ky tu hoc biu thuc hng. Cac ni cn co gia tri khac nhau.
Doan chuong trinh nm giua cac du } goi la thn cua toan tu switch.
deIault la mt thanh phn khng bt buc phai co trong thn cua switch.
Su hoat dng cua toan tu switch phu thuc vao gia tri cua biu thuc vit trong du ngoc
( ) nhu sau :
Khi gia tri cua biu thuc nay bng ni, may s nhay toi cac cu lnh co nhn la case ni.


46
Khi gia tri biu thuc khac tt ca cac ni thi cach lam vic cua may lai phu thuc vao su co
mt hay khng cua lnh deIault nhu sau :
Khi co deIault may s nhay toi cu lnh sau nhn deIault.
Khi khng co deIault may s nhay ra khoi cu truc switch.

Ch :
May s nhay ra khoi toan tu switch khi no gp cu lnh break hoc du ngoc nhon dong
cui cung cua thn switch. Ta cng co th dung cu lnh goto trong thn cua toan tu switch d
nhay toi mt cu lnh bt ky bn ngoai switch.
Khi toan tu switch nm trong thn mt ham nao do thi ta co th su dung cu lnh return
trong thn cua switch d ra khoi ham nay ( lnh return s d cp sau ).
Khi may nhay toi mt cu lnh nao do thi su hoat dng tip theo cua no s phu thuc vao
cac cu lnh dung sau cu lnh nay. Nhu vy nu may nhay toi cu lnh co nhn case ni thi no co
th thuc hin tt ca cac cu lnh sau do cho toi khi nao gp cu lnh break, goto hoc return. Noi
cach khac, may co th di tu nhom lnh thuc case ni sang nhom lnh thuc case thu ni1. Nu
mi nhom lnh duoc kt thuc bng break thi toan tu switch s thuc hin chi mt trong cac nhom
lnh nay.
V d :
p chuong trinh phn loai hoc sinh theo dim su dung cu truc switch :
#include stdio.h
main()

int diem;
tt: printI(\nVao du lieu :);
printI(\n Diem );
scanI(d,&diem);
switch (diem)

case 0:
case 1:
case 2:
case 3:printI(Kem\n);break;
case 4:printI(eu\n);break;


47
case :
case 6:printI(Trung binh\n);break;
case 7:
case 8:printI(Kha\n);break;
case 9:
case 10:printI(ioi\n);break;
deIault:printI(Vao sai\n);
}
printI(Tiep tuc 1, dung 0 :)
scanI(d,&diem);
iI (diem1) goto tt;
getch();
return;
}

5.4. Cu trc l}p :
5.4.1. Cu trc l}p vi ton tu while v for :
5.4.1.1. Cu trc l}p vi ton tu while :
Toan tu while dung d xy dung chu trinh lp dang :
while ( biu thuc )
nh hoc khi lnh;
Nhu vy toan tu while gm mt biu thuc va thn chu trinh. Thn chu trinh co th la mt
lnh hoc mt khi lnh.
oat dng cua chu trinh nhu sau :
May xac dinh gia tri cua biu thuc, tuy thuc gia tri cua no may s chon cach thuc hin
nhu sau :
Nu biu thuc co gia tri 0 ( biu thuc sai ), may s ra khoi chu trinh va chuyn toi thuc
hin cu lnh tip sau chu trinh trong chuong trinh.
Nu biu thuc co gia tri khac khng ( biu thuc dung ), may s thuc hin lnh hoc khi
lnh trong thn cua while. Khi may thuc hin xong khi lnh nay no lai thuc hin xac dinh lai gia
tri biu thuc ri lam tip cac buoc nhu trn.

Ch :


48
Trong cac du ngoc ( ) sau while chng nhung co th dt mt biu thuc ma con co th
dt mt dy biu thuc phn cach nhau boi du phay. Tinh dung sai cua dy biu thuc duoc hiu la
tinh dung sai cua biu thuc cui cung trong dy.
Bn trong thn cua mt toan tu while lai co th su dung cac toan tu while khac. bng
cach do ta di xy dung duoc cac chu trinh lng nhau.
Khi gp cu lnh break trong thn while, may s ra khoi toan tu while su nht chua cu
lnh nay.
Trong thn while co th su dung toan tu goto d nhay ra khoi chu trinh dn mt vi tri
mong mun bt ky. Ta cng co th su dung toan tu return trong thn while d ra khoi mt ham
nao do.

V d :
Chuong trinh tinh tich v huong cua hai vec to x va y :

Cch 1 :
#include stdio.h
Iloat x||2,3.4,4.6,21}, y||24,12.3,6.8,32.9};
main()

Iloat s0;
int i-1;
while (i4)
sx|i|*y|i|;
printI(\n Tich vo huong hai vec to x va y la :8.2I,s);
}

Cch 2 :
#include stdio.h
Iloat x||2,3.4,4.6,21}, y||24,12.3,6.8,32.9};
main()

Iloat s0;
int i0;


49
while (1)

sx|i|*y|i|;
iI (i4) goto kt;
}
kt:printI(\n Tich vo huong hai vec to x va y la :8.2I,s);
}

Cch 3 :
#include stdio.h
Iloat x||2,3.4,4.6,21}, y||24,12.3,6.8,32.9};
main()

Iloat s0;
int i0;
while ( sx|i|*y|i|, i3 );
printI(\n Tich vo huong hai vec to x va y la :8.2I,s);
}

5.4.1.2. Cu trc l}p vi ton tu for :
Toan tu Ior dung d xy dung cu truc lp co dang sau :
Ior ( biu thuc 1; biu thuc 2; biu thuc 3)
nh hoc khi lnh ;
Toan tu Ior gm ba biu thuc va thn Ior. Thn Ior la mt cu lnh hoc mt khi lnh
vit sau tu khoa Ior. Bt ky biu thuc nao trong ba biu thuc trn co th vng mt nhung phai giu
du ; .
Thng thuong biu thuc 1 la toan tu gan d tao gia tri ban du cho bin diu khin, biu
thuc 2 la mt quan h logic biu thi diu kin d tip tuc chu trinh, biu thuc ba la mt toan tu
gan dung d thay di gia tri bin diu khin.

Hot dng cua ton tu for :
Toan tu Ior hoat dng theo cac buoc sau :
ac dinh biu thuc 1


0
ac dinh biu thuc 2
Tuy thuc vao tinh dung sai cua biu thuc 2 d may lua chon mt trong
hai nhanh :
Nu biu thuc hai co gia tri 0 ( sai ), may s ra khoi Ior va chuyn toi cu
lnh sau thn Ior.
Nu biu thuc hai co gia tri khac 0 ( dung ), may s thuc hin cac cu lnh
trong thn Ior.
Tinh biu thuc 3, sau do quay lai buoc 2 d bt du mt vong moi cua chu trinh.

Ch :
Nu biu thuc 2 vng mt thi no lun duoc xem la dung. Trong truong hop nay vic ra
khoi chu trinh Ior cn phai duoc thuc hin nho cac lnh break, goto hoc return vit trong thn
chu trinh.
Trong du ngoc tron sau tu khoa Ior gm ba biu thuc phn cach nhau boi du ;. Trong
mi biu thuc khng nhung co th vit mt biu thuc ma co quyn vit mt dy biu thuc phn
cach nhau boi du phay. Khi do cac biu thuc trong mi phn duoc xac dinh tu trai sang phai.
Tinh dung sai cua dy biu thuc duoc tinh la tinh dung sai cua biu thuc cui cung trong dy nay.
Trong thn cua Ior ta co th dung thm cac toan tu Ior khac, vi th ta co th xy dung cac
toan tu Ior lng nhau.
Khi gp cu lnh break trong thn Ior, may ra s ra khoi toan tu Ior su nht chua cu
lnh nay. Trong thn Ior cng co th su dung toan tu goto d nhay dn mt vi tri mong mun bt
ky.

V d 1:
Nhp mt dy s ri dao nguoc thu tu cua no.

Cch 1:
#include stdio.h
Iloat x||1.3,2.,7.98,6.9,7.23};
int nsizeoI(x)/sizeoI(Iloat);
main()

int i,;


1
Iloat c;
Ior (i0,n-1;i;i,--)

cx|i|;x|i|x||;x||c;
}
IprintI(stdprn,\n Day so dao la \n\n);
Ior (i0;in;i)
IprintI(stdprn,8.2I,x|i|);
}

Cch 2 :
#include stdio.h
Iloat x||1.3,2.,7.98,6.9,7.23};
int nsizeoI(x)/sizeoI(Iloat);
main()

int i,;
Iloat c;
Ior (i0,n-1;i;cx|i|,x|i|x||,x||c,i,--)
IprintI(stdprn,\n Day so dao la \n\n);
Ior (i0;in;)
IprintI(stdprn,8.2I,x|i|);
}

Cch 3 :
#include stdio.h
Iloat x||1.3,2.,7.98,6.9,7.23};
int nsizeoI(x)/sizeoI(Iloat);
main()

int i0,n-1;
Iloat c;
Ior ( ; ; )


2

cx|i|;x|i|x||;x||c;
iI (i--) break;
}
IprintI(stdprn,\n Day so dao la \n\n);
Ior (i-1;in-1; IprintI(stdprn,8.2I,x|i|));
}

V d 2:
Tinh tich hai ma trn mxn va nxp.
#include stdio.h
Iloat x|3||2|,y|2||4|,z|3||4|,c;
main()

int i,;
printI(\n nhap gia tri cho ma tran );
Ior (i0;i2;i)
Ior (0;1;)

printI(\n x|d||d|,i,);
scanI(I,&c);
x|i|||c;
}
printI(\n nhap gia tri cho ma tran );
Ior (i0;i1;i)
Ior (0;3;)

printI(\n y|d||d|,i,);
scanI(I,&c);
y|i|||c;
}
Ior (i0;i3;i)
Ior (0;4;)


3
z|i|||
}
5.4.2. Chu trnh do-while
Khac voi cac toan tu while va Ior, vic kim tra diu kin kt thuc dt o du chu trinh,
trong chu trinh do while vic kim tra diu kin kt thuc dt cui chu trinh. Nhu vy thn cua chu
trinh bao gio cng duoc thuc hin it nht mt ln.
Chu trinh do while co dang sau :
do
nh hoc khi lnh;
while ( biu thuc );
nh hoc khi lnh la thn cua chu trinh co th la mt lnh ring l hoc la mt khi
lnh.

Hot dng cua chu trnh nhu sau :
May thuc hin cac lnh trong thn chu trinh.
Khi thuc hin xong tt ca cac lnh trong thn cua chu trinh, may s xac dinh gia tri cua
biu thuc sau tu khoa while ri quyt dinh thuc hin nhu sau :
Nu biu thuc dung ( khac 0 ) may s thuc hin lp lai khi lnh cua chu trinh ln thu hai
ri thuc hin kim tra lai biu thuc nhu trn.
Nu biu thuc sai ( bng 0 ) may s kt thuc chu trinh va chuyn toi thuc hin lnh dung
sau toan tu while.

Ch :
Nhung diu luu y voi toan tu while o trn hoan toan dung voi do while.

V d :
Doan chuong trinh xac dinh phn tu m du tin trong cac phn tu cua mang x.
#include stdio.h
Iloat x||,c;
main()

int i0;
printI(\n nhap gia tri cho ma tran x );


4
Ior (i0;i4;i)

printI(\n x|d|,i);
scanI(I,&c);
y|i|c;
}
do
i;
while (x|i|0 && i4);
iI (i4)
printI(\n han tu am dau tien x|d|8.2I,i,x|i|);
else
printI(\n Mang khong co phan tu am );
}

5.5. Cu lnh break :
Cu lnh break cho phep ra khoi cac chu trinh voi cac toan tu Ior, while va switch. Khi co
nhiu chu trinh lng nhau, cu lnh break s dua may ra khoi chu trinh bn trong nht chua no
khng cn diu kin gi. Moi cu lnh break co th thay bng cu lnh goto voi nhn thich hop.

V d :
Bit s nguyn duong n s la s nguyn t nu no khng chia ht cho cac s nguyn
trong khoang tu 2 dn cn bc hai cua n. Vit doan chuong trinh doc vao s nguyn duong n,
xem n co la s nguyn t.
# include stdio.h
# include math.h
unsigned int n;
main()

int i,nt1;
printI(\n cho n);
scanI(d,&n);
Ior (i2;isqrt(n);i)



iI ((n i)0)

nt0;
break;
}
iI (nt)
printI(\n d la so nguyen to,n);
else
printI(\n d khong la so nguyen to,n);
}

5.6. Cu lnh continue :
Trai voi cu lnh break, lnh continue dung d bt du mt vong moi cua chu trinh chua
no. Trong while va do while, lnh continue chuyn diu khin v thuc hin ngay phn kim tra,
con trong Ior diu khin duoc chuyn v buoc khoi du lai ( tuc la buoc : tinh biu thuc 3, sau do
quay lai buoc 2 d bt du mt vong moi cua chu trinh).

Ch :
nh continue chi ap dung cho chu trinh chu khng ap dung cho switch.

V d :
Vit chuong trinh d tu mt nhp mt ma trn a sau do :
Tinh tng cac phn tu duong cua a.
ac dinh s phn tu duong cua a.
Tim cuc dai trong cac phn tu duong cua a.
#include stdio.h
Iloat a|3|4|;
main()

int i,,soptd0;
Iloat tongduong0,cucdai0,phu;
Ior (i0;i3;i)
Ior (0;i4;)


6

printI(\n a|d||d|,i, );
scanI(I,&phu);
a|i|||phu;
iI (a|i|||0) continue;
tongduonga|i|||;
iI (cucdaia|i|||) cucdaia|i|||;
soptd;
}
printI(\n So phan tu duong la : d,soptd);
printI(\n Tong cac phan tu duong la : 8.2I,tongduong);
printI(\n Cuc dai phan tu duong la : 8.2I,cucdai);
}





7
Chuong 6
am

Mt chuong trinh vit trong ngn ngu C la mt dy cac ham, trong do co mt ham chinh
( ham main() ). am chia cac bai toan lon thanh cac cng vic nho hon, giup thuc hin nhung
cng vic lp lai nao do mt cach nhanh chong ma khng phai vit lai doan chuong trinh. Thu tu
cac ham trong chuong trinh la bt ky, song chuong trinh bao gio cng di thuc hin tu ham main().

6.1. Co so :
am co th xem la mt don vi dc lp cua chuong trinh. Cac ham co vai tro ngang nhau,
vi vy khng co phep xy dung mt ham bn trong cac ham khac.
y dung mt ham bao gm: khai bao kiu ham, dt tn ham, khai bao cac di va dua ra
cu lnh cn thit d thuc hin yu cu d ra cho ham. Mt ham duoc vit theo mu sau :
type tn ham ( khai bao cac di )

Khai bao cac bin cuc b
Cac cu lnh
|return|biu thuc|;|
}

Dng tiu d :
Trong dong du tin cua ham chua cac thng tin v : kiu ham, tn ham, kiu va tn mi
di.

V d :
Iloat max3s(Iloat a, Iloat b, Iloat c)
khai bao cac di co dang :
Kiu di 1 tn di 1, kiu di 2 tn di 2,..., kiu di n tn di n

Thn hm :
Sau dong tiu d la thn ham. Thn ham la ni dung chinh cua ham bt du va kt thuc
bng cac du }.


8
Trong thn ham chua cac cu lnh cn thit d thuc hin mt yu cu nao do d d ra cho
ham.
Thn ham co th su dung mt cu lnh return, co th dung nhiu cu lnh return o cac
ch khac nhau, va cng co th khng su dung cu lnh nay.
Dang tng quat cua no la :
return |biu thuc|;
ia tri cua biu thuc trong cu lnh return s duoc gan cho ham.

V d :
et bai toan : Tim gia tri lon nht cua ba s ma gia tri ma gia tri cua chung duoc dua vao
ban phim.
y dung chuong trinh va t chuc thanh hai ham : am main() va ham max3s. Nhim vu
cua ham max3s la tinh gia tri lon nht cua ba s doc vao, gia su la a,b,c. Nhim vu cua ham
main() la doc ba gia tri vao tu ban phim, ri dung ham max3s d tinh nhu trn, ri dua kt qua ra
man hinh.

Chuong trinh duoc vit nhu sau :
#include stdio.h
Iloat max3s(Iloat a,Iloat b,Iloat c ); /* Nguyn mu ham*/
main()

Iloat x,y,z;
printI(\n Vao ba so x,y,z:);
scanI(III,&x&y&z);
printI(\n Max cua ba so x8.2I y8.2I z8.2I la : 8.2I,
x,y,z,max3s(x,y,z));
} /* Kt thuc ham main*/

Iloat max3s(Iloat a,Iloat b,Iloat c)

Iloat max;
maxa;
iI (maxb) maxb;


9
iI (maxc) maxc;
return(max);
} /* Kt thuc ham max3s*/

Quy tc hot dng cua hm :
Mt cach tng quat loi goi ham co dang sau :
tn ham (|Danh sach cac tham s thuc|)
S cac tham s thuc t thay vao trong danh sach cac di phai bng s tham s hinh thuc
va ln luot chung co kiu tuong ung voi nhau.
Khi gp mt loi goi ham thi no s bt du duoc thuc hin. Noi cach khac, khi may gp loi
goi ham o mt vi tri nao do trong chuong trinh, may s tam doi ch do va chuyn dn ham tuong
ung. ua trinh do din ra theo trinh tu sau :
Cp phat b nho cho cac bin cuc b.
an gia tri cua cac tham s thuc cho cac di tuong ung.
Thuc hin cac cu lnh trong thn ham.
Khi gp cu lnh return hoc du } cui cung cua thn ham thi may s xoa cac di, bin
cuc b va ra khoi ham.
Nu tro v tu mt cu lnh return co chua biu thuc thi gia tri cua biu thuc duoc gan cho
ham. ia tri cua ham s duoc su dung trong cac biu thuc chua no.

Cc tham s thc, cc di v bin cc b :
Do di va bin cuc b du co pham vi hoat dng trong cung mt ham nn di va bin cuc
b cn co tn khac nhau.
Di va bin cuc b du la cac bin tu dng. Chung duoc cp phat b nho khi ham duoc
xet dn va bi xoa khi ra khoi ham nn ta khng th mang gia tri cua di ra khoi ham.
Di va bin cuc b co th trung tn voi cac dai luong ngoai ham ma khng gy ra nhm
ln nao.
Khi mt ham duoc goi toi, vic du tin la gia tri cua cac tham s thuc duoc gan cho cac
di ( trong vi du trn ham max3s, cac tham s thuc la x,y,z, cac di tuong ung la a,b,c ). Nhu vy
cac di chinh la cac ban sao cua cac tham s thuc. am chi lam vic trn cac di.
Cac di co th bi bin di trong thn ham, con cac tham s thuc thi khng bi thay di.

Ch :


60
Khi ham khai bao khng co kiu o truoc no thi no duoc mc dinh la kiu int.
Khng nht thit phai khai bao nguyn mu ham. Nhung noi chung nn co vi no cho
phep chuong trinh bin dich phat hin li khi goi ham hay tu dng vic chuyn dang.
Nguyn mu cua ham thuc cht la dong du tin cua ham thm vao du ;. Tuy nhin
trong nguyn mu co th bo tn cac di.
am thuong co mt vai di. Vi du nhu ham max3s co ba di la a,b,c. ca ba di nay du
co gia tri Iloat. Tuy nhin, cng co ham khng di nhu ham main.
am thuong cho ta mt gia tri nao do. di nhin gia tri cua ham phu thuc vao gia tri
cac di.

6.2. Hm khng cho cc gi tr| :
Cc ham khng cho gia tri ging nhu thu tuc ( procedure ) trong ngn ngu lp trinh
ASCA. Trong truong hop nay, kiu cua no la void.
Vi du ham tim gia tri max trong ba s la max3s o trn co th duoc vit thanh thu tuc hin
thi s cuc dai trong ba s nhu sau :
void htmax3s(Iloat a, Iloat b, Iloat c)

Iloat max;
maxa;
iI (maxb) maxb;
iI (maxc) maxc;
}
uc nay, trong ham main ta goi ham htmax3s bng cu lnh :
htmax3s(x,y,z);

6.3. Hm d qui :
6.3.3. Mo du :
C khng nhung cho phep tu ham nay goi toi ham khac, ma no con cho phep tu mt dim
trong thn cua mt ham goi toi chinh ham do. am nhu vy goi la ham d qui.
Khi ham goi d qui dn chinh no, thi mi ln goi may s tao ra mt tp cac bin cuc b
moi hoan toan dc lp voi tp cac bin cuc b d duoc tao ra trong cac ln goi truoc.
D minh hoa chi tit nhung diu trn, ta xet mt vi du v tinh giai thua cua s nguyn
duong n. Khi khng dung phuong phap d qui ham co th duoc vit nhu sau :


61
long int gt(int n) /* Tinh n! voi n0*/

long int gtphu1;
int i;
Ior (i1;in;i)
gtphu*i;
return s;
}
Ta nhn thy rng n! co th tinh theo cng thuc truy hi sau :

n!1 nu n0
n!n*(n-1)! nu n0
am tinh n! theo phuong phap d qui co th duoc vit nhu sau :
long int gtdq(int n)

iI (n0 n1)
return 1;
else
return(n*gtdq(n-1));
}
Ta di giai thich hoat dng cua ham d qui khi su dung trong ham main duoi dy :
#include stdio.h
main()

printI(\n 3!d,gtdq(3));
}
n goi du tin toi ham gtdq duoc thuc hin tu ham main(). May s tao ra mt tp cac
bin tu dng cua ham gtdq. Tp nay chi gm cac di n. Ta goi di n duoc tao ra ln thu nht la n
thu nht. ia tri cua tham s thuc ( s 3 ) duoc gan cho n thu nht. uc nay bin n trong thn ham
duoc xem la n thu nht. Do n thu nht co gia tri bng 3 nn diu kin trong toan tu iI la sai va do
do may s lua chon cu lnh else. Theo cu lnh nay, may s tinh gia tri biu thuc :
n*gtdq(n-1) (*)


62
D tinh biu thuc trn, may cn goi chinh ham gtdq vi th ln goi thu hai s thuc hin.
May s tao ra di n moi, ta goi do la n thu hai. ia tri cua n-1 o dy lai la di cua ham , duoc
truyn cho ham va hiu la n thu hai, do vy n thu hai co gia tri la 2. By gio, do n thu hai vn
chua thoa mn diu kin iI nn may lai tip tuc tinh biu thuc :
n*gtdq(n-1) (**)
Biu thuc trn lai goi ham gtdq ln thu ba. May lai tao ra di n ln thu ba va o dy n thu
ba co gia tri bng 1. Di n1 thu ba lai duoc truyn cho ham, luc nay diu kin trong lnh iI duoc
thoa mn, may di thuc hin cu lnh :
return 1gtdq(1) (***)
Bt du tu dy, may s thuc hin ba ln ra khoi ham gtdq. n ra khoi ham thu nht ung
voi ln vao thu ba. Kt qua la di n thu ba duoc giai phong, ham gtdq(1) cho gia tri la 1 va may
tro v xet gia tri biu thuc
n*gtdq(1) dy la kt qua cua (**)

o dy, n la n thu hai va co gia tri bng 2. Theo cu lnh return, may s thuc hin ln ra khoi ham
ln thu hai, di n thu hai s duoc giai phong, kt qua la biu thuc trong (**) co gia tri la 2.1. Sau
do may tro v biu thuc (*) luc nay la :
n*gtdq(2)n*2*1
n lai hiu la thu nht, no co gia tri bng 3, do vy gia tri cua biu thuc trong (*) la 3.2.16. Chinh
gia tri nay duoc su dung trong cu lnh printI cua ham main() nn kt qua in ra trn man hinh la :
3!6
Ch :
am d qui so voi ham co th dung vong lp thi don gian hon, tuy nhin voi may tinh khi
dung ham d qui s dung nhiu b nho trn ngn xp va co th dn dn tran ngn xp. Vi vy khi
gp mt bai toan ma co th co cach giai lp ( khng dung d qui ) thi ta nn dung cach lp nay.
Song vn tn tai nhung bai toan chi co th giai bng d qui.

6.3.2. Cc bi ton c th dng d qui :
huong phap d qui thuong ap dung cho cac bai toan phu thuc tham s co hai dc dim
sau :
Bai toan d dang giai quyt trong mt s truong hop ring ung voi cac gia tri dc bit cua
tham s. Nguoi ta thuong goi la truong hop suy bin.


63
Trong truong hop tng quat, bai toan co th qui v mt bai toan cung dang nhung gia tri
tham s thi bi thay di. Sau mt s huu han buoc bin di d qui no s dn toi truong hop suy
bin.
Bai toan tinh n giai thua nu trn th hin r net dc diu nay.

6.3.3. Cch xy dng hm d qui :
am d qui thuong duoc xy dung theo thut toan sau :
iI ( truong hop suy bin)

Trinh bay cach giai bai toan khi suy bin
}
else /* Truong hop tng quat */

oi d qui toi ham ( dang vit ) voi cac gia
tri khac cua tham s
}

6.3.4. Cc v d v dng hm d qui :
V d 1 :
Bai toan dung d qui tim USCN cua hai s nguyn duong a va b.
Trong truong hop suy bin, khi ab thi USCN cua a va b chinh la gia tri cua chung.
Trong truong hop chung :
uscln(a,b)uscln(a-b,b) nu ab
uscln(a,b)uscln(a,b-a) nu ab

Ta co th vit chuong trinh nhu sau :
#include stdio.h
int uscln(int a,int b ); /* Nguyn mu ham*/
main()
int m,n;
printI(\n Nhap cac gia tri cua a va b :);
scanI(dd,&m,&n);
printI(\n USCN cua ad va bd la :d,m,m,uscln(m,n))


64
}
int uscln(int a,int b)

iI (ab)
return a;
else
iI (ab)
return uscln(a-b,b);

else
return uscln(a,b-a);
}

V d 2 :
Chuong trinh doc vao mt s ri in no ra duoi dang cac ky tu lin tip.
# include stdio.h
# include conio.h
void prind(int n);
main()

int a;
clrscr();
printI(n);
scanI(d,&a);
prind(a);
getch();
}
void prind(int n)

int i;
iI (n0)
putchar(-);
n-n;


6
}
iI ((in/10)!0)
prind(i);
putchar(n100);
}

6.4. B tin su l C :
C dua ra mt s cach mo rng ngn ngu bng cac b tin su ly macro don gian. Co hai
cach mo rng chinh la #deIine ma ta d hoc va kha nng bao ham ni dung cua cac Iile khac vao
Iile dang duoc dich.

Bao hm file :
D d dang xu ly mt tp cac #deIine va khai bao ( trong cac di tuong khac ), C dua ra
cach bao ham cac Iile khac vao Iile dang dich co dang :
#include tn Iile
Dong khai bao trn s duoc thay th boi ni dung cua Iile co tn la tn Iile. Thng thuong co vai
dong nhu vy xut hin tai du mi Iile gc d goi vao cac cu lnh #deIine chung va cac khai
bao cho cac bin ngoai. Cac #include duoc phep lng nhau. Thuong thi cac #include duoc dung
nhiu trong cac chuong trinh lon, no dam bao rng moi Iile gc du duoc cung cp cung cac dinh
nghia va khai bao bin, do vy tranh duoc cac li kho chiu do vic thiu cac khai bao dinh nghia.
Tt nhin khi thay di Iile duoc bao ham vao thi moi Iile phu thuc vao no du phai dich lai.

Php th MACRO :
Dinh nghia co dang :
#deIine biu thuc 1 | biu thuc 2 |
s goi toi mt macro d thay th biu thuc 2 (nu co) cho biu thuc 1.

V d :
#deIine ES 1
Macro thay bin ES boi gia tri 1 co nghia la h co ch nao trong chuong trinh co xut
hin bin ES thi no s duoc thay boi gia tri 1.
ham vi cho tn duoc dinh nghia boi #deIine la tu dim dinh nghia dn cui Iile gc. Co
th dinh nghia lai tn va mt dinh nghia co th su dung cac dinh nghia khac truoc do. hep th


66
khng thuc hin cho cac xu du nhay, vi du nhu ES la tn duoc dinh nghia thi khng co vic
thay th nao duoc thuc hin trong doan lnh co ES.
Vi vic thit lp #deIine la mt buoc chun bi chu khng phai la mt phn cua chuong
trinh bin dich nn co rt it han ch v vn pham v vic phai dinh nghia cai gi. Chng han nhu
nhung nguoi lp trinh ua thich ASCA co th dinh nghia :
#deIine then
#deIine begin
#deIine end; }
sau do vit doan chuong trinh :
iI (i0) then
begin
ai;
......
end;
Ta cng co th dinh nghia cac macro co di, do vy vn ban thay th s phu thuc vao cach goi
toi macro.

V d :
Dinh nghia macro goi max nhu sau :
#deIine max(a,b) ((a)(b) (a):(b))
Vic su dung :
xmax(pq,rs);

tuong duong voi :
x((pq)(rs) (pq):(rs));
Nhu vy ta co th co ham tinh cuc dai vit trn mt dong. Chung nao cac di con giu
duoc tinh nht quan thi macro nay vn co gia tri voi moi kiu du liu, khng cn phai co cac loai
ham max khac cho cac kiu du liu khac nhung vn phai co di cho cac ham.
Tt nhin nu ta kim tra lai vic mo rng cua ham max trn, ta s thy rng no co th gy ra s
by. Biu thuc d duoc tinh lai hai ln va diu nay la khng tt nu no gy ra hiu qua phu kiu
nhu cac loi goi ham va toan tu tng. Cn phai thn trong dung thm du ngoc d dam bao trt tu
tinh toan. Tuy vy, macro vn rt co gia tri.



67
Ch :
Khng duoc vit du cach giua tn macro voi du mo ngoc bao quanh danh sach di.

V d :
et chuong trinh sau :
main()

int x,y,z;
x;
y10*;
zxy;
zxy6;
z*xy;
z*(xy);
z*((x)(y));
printI(Zd,z);
getch();
return;
}
Chuong trinh su dung MACRO s nhu sau :
#deIine BEIN
#deIine END }
#deIine INTEER int
#deIine NB 10
#deIine IMIT NB*
#deIine SUM xy
#deIine SUM1 (xy)
#deIine SUM2 ((x)(y))
main()
BEIN
INTEER x,y,z;
x;
yIMIT;


68
zSUM;
z*SUM;
z*SUM1;
z*SUM2;
printI(\n Zd,z);
getch();
return;
END



69
Chuong 7
Con tro

Con tro la bin chua dia chi cua mt bin khac. Con tro duoc su dung rt nhiu trong C,
mt phn la do chung di khi la cach duy nht d biu din tinh toan, va phn nua do chung
thuong lam cho chuong trinh ngn gon va co hiu qua hon cac cach khac .
Con tro d tung bi coi nhu co hai chng kem gi lnh goto do cach su dung chung d tao
ra cac chuong trinh kho hiu. Diu nay chc chn la dung khi nguoi ta su dung chung mt cach
ln xn va do do tao ra cac con tro tro dn du do khng bit truoc duoc.

7.1. Con tro v d|a chi :
Vi con tro chua dia chi cua di tuong nn no co th xm nhp vao di tuong gian tip qua
con tro. ia su x la mt bin kiu int, va gia su px la con tro duoc tao ra theo mt cach nao do.
hep toan mt ngi & s cho dia chi cua di tuong, nn cu lnh :
px&x;
s gan dia chi cua bin x cho tro px, va px by gio duoc goi la tro toi bin x . hep toan & chi
ap dung duoc cho cac bin va phn tu bang, kt cu kiu &(x1) va &3 la khng hop l. y dai
chi cua bin register cng la sai.
hep toan mt ngi * coi la toan hang cua no la dai chi cn xet va thm nhp toi dia chi
do d ly ra ni dung. Nu bin y co kiu int thi thi lnh :
y*px;
s gan gia tri cua bin ma tro px tro toi. Vy dy lnh :
px&x;
y*px;
s gan gia tri cua x cho y nhu trong lnh :
yx;
Cac khai bao cho cac bin con tro co dang :
tn kiu *tn con tro

V d :
Nhu trong vi du trn, ta khai bao con tro px kiu int :
int *px;



70
Trong khai bao trn ta d ngu y noi rng do la mt cach tuong trung, rng t hop *px co kiu int,
tuc la nu px xut hin trong ngu canh *px thi no cng tuong duong voi bin co kiu int.
Con tro co th xut hin trong cac biu thuc. Chng han, nu px tro toi s nguyn x thi
*px co th xut hin trong bt ky ngu canh nao ma x co th xut hin.

V d :
nh y*px1;
s dt y lon hon x mt don vi.
nh printI(d,*px);
s in ra gia tri hin tai cua x

nh :
dsqrt((double) *px);
s gan cho bin d cn bc hai cua x, gia tri nay bi buc phai chuyn sang double truoc khi duoc
chuyn cho sqrt ( cach dung ham sqrt ).
Trong cac biu thuc kiu nhu :
y*px1;
phep toan mt ngi * va & co muc uu tin cao hon cac phep toan s hoc, cho nn biu thuc nay
ly bt ky gia tri nao ma px tro toi, cng voi 1 ri gan cho y.
Con tro cng co th xut hin bn v trai cua phep gan. Nu px tro toi x thi sau lnh :
*px0;
x s co gia tri bng 0. Cng tuong tu cac lnh:
*px1;
(*px);
s tng gia tri cua x ln 1 don vi.
Cac du ngoc don o cu lnh cui la cn thit , nu khng thi biu thuc s tng px thay
cho tng o bin ma no tro toi vi phep toan mt ngi nhu * va duoc tinh tu phai sang trai.
Cui cung, vi con tro la bin nn ta co thao tac chung nhu di voi cac bin khac. Nu py
cng la con tro int thi lnh :
pypx;
s sao ni dung cua px vao py, nghia la lam cho py tro toi noi ma px tro.

7.2. Con tro v mang mt chiu :


71
Trong C co mi quan h cht ch giua con tro va mang : cac phn tu cua mang co th
duoc xac dinh nho chi s hoc thng qua con tro.

7.2.1.Php ton ly d|a chi :
hep toan nay chi ap dung cho cac phn tu cua mang mt chiu. ia su ta co khai bao :
double b|20|;
Khi do phep toan :
&b|9|
s cho dia chi cua phn tu b|9|.

7.2.2. Tn mang l mt hng d|a chi :
Khi khai bao :
Iloat a|10|;
may s b tri b tri cho mang a muoi khoang nho lin tip, mi khoang nho la 4 byte. Nhu vy,
nu bit dia chi cua mt phn tu nao do cua mang a, thi ta co th d dang suy ra dia chi cua cac
phn tu khac cua mang.
Voi C ta co :
a tuong duong voi &a|0|
ai tuong duong voi &a|i|
*(ai) tuong duong voi a|i|

7.2.3. Con tro tro ti cc phn tu cua mang mt chiu :
Khi con tro pa tro toi phn tu a|k| thi :
pai tro toi phn tu thu i sau a|k|, co nghia la no tro toi a|ki|.
pa-i tro toi phn tu thu i truoc a|k|, co nghia la no tro toi a|k-i|.
*(pai) tuong duong voi pa|i|.
Nhu vy, sau hai cu lnh :
Iloat a|20|,*p;
pa;
thi bn cach vit sau co tac dung nhu nhau :
a|i| *(ai) p|i| *(pi)

V d :


72
Vao s liu cua cac phn tu cua mt mang va tinh tng cua chung :

Cch 1:
#include stdio.h
main()

Iloat a|4|,tong;
int i;
Ior (i0;i4;i)

printI(\n a|d|,i);
scanI(I,ai);
}
tong0;
Ior (i0;i4;i)
tonga|i|;
printI(\n Tong cac phan tu mang la :8.2I ,tong);
}

Cch 2 :
#include stdio.h
main()

Iloat a|4|,tong, *troa;
int i;
troaa;
Ior (i0;i4;i)

printI(\n a|d|,i);
scanI(I,&troa|i|);
}
tong0;
Ior (i0;i4;i)


73
tongtroa|i|;
printI(\n Tong cac phan tu mang la :8.2I ,tong);
}

Cch 3 :
#include stdio.h
main()

Iloat a|4|,tong,*troa;
int i;
troaa;
Ior (i0;i4;i)

printI(\n a|d|,i);
scanI(I,troai);
}
tong0;
Ior (i0;i4;i)
tong*(troai);
printI(\n Tong cac phan tu mang la :8.2I ,tong);
}

Ch :
Mang mt chiu va con tro tuong ung phai cung kiu.

7.2.4. Mang, con tro v xu k t :
Nhu ta d bit truoc dy, xu ky tu la mt dy ky tu dt trong hai du nhay kep, vi du
nhu :
Viet nam
Khi gp mt xu ky tu, may s cp phat mt khoang nho cho mt mang kiu char du lon
d chua cac ky tu cua xu va chua thm ky tu \0 la ky tu dung lam ky tu kt thuc cua mt xu ky
tu. Mi ky tu cua xu duoc chua trong mt phn tu cua mang.


74
Cng ging nhu tn mang, xu ky tu la mt hang dia chi biu thi dia chi du cua mang
chua no. Vi vy nu ta khai bao bin xau nhu mt con tro kiu char :
char *xau;
thi phep gan :
xaua noi
la hoan toan co nghia. Sau khi thuc hin cu lnh nay trong con tro xau s co dia chi du cua
mang (kiu char) dang chua xu ky tu bn phai. Khi do cac cu lnh :
puts(a noi);
puts(xau);
s co cung mt tac dung la cho hin ln man hinh dong chu Ha noi.
Mang kiu char thuong dung d chua mt dy ky tu doc vao b nho. Vi du, d nap tu ban
phim tn cua mt nguoi ta dung mt mang kiu char voi d dai 2, ta su dung cac cu lnh sau :
char ten|2|;
printI(\n o ten :);
gets(ten);
By gio ta xem giua mang kiu char va con tro kiu char co nhung gi ging va khac
nhau. D thy duoc su khac nhau cua chung, ta dua ra su so sanh sau :
char *xau, ten|1|;
tena noi
gets(xau);
Cac cu lnh trn la khng hop l. Cu lnh thu hai sai o ch : ten la mt hng dia chi va ta khng
th gan mt hng dia chi nay cho mt hng dia chi khac. Cu lnh thu ba khng thuc hin duoc,
muc dich cua cu lnh la doc tu ban phim mt dy ky tu va luu vao mt vung nho ma con tro xau
tro toi. Song ni dung cua con tro xau con chua xac dinh. Nu tro xau d tro toi mt vung nho
nao do thi cu lnh nay hoan toan co y nghia. Chng han nhu sau khi thuc hin cu lnh :
xauten;
thi cach vit :
gets(ten) ; va gets(xau);
du co tac dung nhu nhau.

7.3. Con tro v mang nhiu chiu :
Vic su ly mang nhiu chiu phuc tap hon so voi mang mt chiu. Khng phai moi qui
tc dung voi mang mt chiu du co th ap dung cho mang nhiu chiu.


7

7.3.1.Php ly d|a chi :
hep ly dia chi di voi cac phn tu mang hai chiu chi co th ap dung khi cac phn tu
mang hai chiu co kiu nguyn, con lai thi phep ly dia chi cho cac phn tu mang nhiu chiu la
khng thuc hin duoc .Vi du nhu ta co th ly dia chi &a|1||2| khi a la mang nguyn.

Thu thut dc t bn phm phn tu mang hai chiu dng lnh scanf :
Chuong trinh doc vao s liu cho mt ma trn hai chiu s duoc thuc hin thng qua vic
doc vao mt bin trung gian, doc mt gia tri va chua tam vao mt bin trung gian sau do ta gan
bin cho phn tu mang:

#include stdio.h
main()

Iloat a|2||3|, tg;
int i,;
Ior (i0;i2;i)
Ior (0;2;)

printI(\n a|d||d|,i,);
scanI(8.2I,&tg);
a|i|||tg;
}
}

7.3.2. Php cng d|a chi trong mang hai chiu:
ia su ta co mang hai chiu a|2||3| co 6 phn tu ung voi sau dia chi lin tip trong b
nho duoc xp theo thu tu sau :
hn tu a|0||0| a|0||1| a|0||2| a|1||0| a|1||1| a|1||2|
Dia chi 1 2 3 4 6
Tn mang a biu thi dia chi du tin cua mang. hep cng dia chi o dy duoc thuc hin nhu sau :
C coi mang hai chiu la mang ( mt chiu ) cua mang, nhu vy khai bao
Iloat a|2||3|;


76
thi a la mang ma mi phn tu cua no la mt dy 3 s thuc ( mt hang cua mang ).
Vi vy :
a tro phn tu thu nht cua mang : phn tu a|0||0|
a1 tro phn tu du hang thu hai cua mang : phn tu a|1||0|
........

7.3.3. Con tro v mang hai chiu :
D ln luot duyt trn cac phn tu cua mang hai chiu ta co th dung con tro nhu minh
hoa o vi du sau :
Iloat *pa,a|2||3|;
pa(Iloat*)a;
luc do :
pa tro toi a|0||0|
pa1 tro toi a|0||1|
pa2 tro toi a|0||2|
pa3 tro toi a|1||0|
pa4 tro toi a|1||1|
pa tro toi a|1||2|

V d :
Dung con tro d vao s liu cho mang hai chiu.

Cch 1 :
#include stdio.h
main()

Iloat a|2||3|,*pa;
int i;
pa(Iloat*)a;
Ior (i0;i6;i)
scanI(I,pai);
}



77
Cch 2 :
#include stdio.h
main()

Iloat a|2||3|,*pa;
int i;
Ior (i0;i6;i)
scanI(I,(Iloat*)ai);
}


7.4. Kiu con tro, kiu d|a chi, cc php ton trn con tro :
7.4.1. Kiu con tro v kiu d|a chi :
Con tro dung d luu dia chi. Mi kiu dia chi cn co kiu con tro tuong ung. hep gan
dia chi cho con tro chi co th thuc hin duoc khi kiu dia chi phu hop voi kiu con tro.
Vi du theo khai bao :
Iloat a|20||30|,*pa,(*pm)|30|;
thi :
pa la con tro Iloat
pm la con tro kiu Iloat |30|
a la dia chi kiu Iloat |30|
Vi th phep gan :
paa;
la khng hop l. Nhung phep gan :
pma;

7.4.2. Cc php ton trn con tro:
Co 4 phep toan lin quan dn con tro va dai chi la :
hep gan.
hep tng giam dia chi.
hep truy cp b nho.
hep so sanh.



78
Php gn :
hep gan chi thuc hin voi cac con tro cung kiu. Mun gan cac con tro khac kiu phai
dung phep ep kiu nhu vi du sau :
int x;
char *pc;
pc(char*)(&x);

Php tng giam d|a chi :
D minh hoa chi tit cho phep toan nay, ta xet vi du sau :
Cac cu lnh :
Iloat x|30|,*px;
px&x|10|;
cho con tro px la con tro Iloat tro toi phn tu x|10|. Kiu dia chi Iloat la kiu dia chi 4 byte, nn
cac phep tng giam dia chi duoc thuc hin trn 4 byte. Vi th :
pxi tro toi phn tu x|10i|
px-i tro toi phn tu x|10-i|
et vi du khac :
ia su ta khai bao :
Iloat b|40||0|;
Khai bao trn cho ta mt mang b gm cac dong 0 phn tu thuc. Kiu dia chi cua b la 0*4200
byte.
Do vy :
b tro toi du dong thu nht ( phn tu b|0||0|).
b1 tro toi du dong thu hai ( phn tu b|1||0|).
..........
bi tro toi du dong thu i ( phn tu b|i||0|).

Php truy cp b nh :
Con tro Iloat truy nhp toi 4 byte, con tro int truy nhp 2 byte, con tro char truy nhp 1
byte. ia su ta co ca khai bao :

Iloat *pI;
int *pi;


79
char *pc;

Khi do :
Nu tro pi tro dn byte thu 100 thi *pI biu thi vung nho 4 byte lin tip tu byte 100 dn
103.
Nu tro pi tro dn byte thu 100 thi *pi biu thi vung nho 2 byte lin tip tu byte 100 dn
101.
Nu tro pc tro dn byte thu 100 thi *pc biu thi vung nho 1 byte chinh la byte 100.

Php so snh :
Cho phep so sanh cac con tro cung kiu, vi du nu p1 va p2 la cac con tro cung kiu thi
nu :
p1p2 nu dia chi p1 tro toi thp hon dia chi p2 tro toi.
p1p2 nu dia chi p1 tro toi cng la dia chi p2 tro toi.
p1p2 nu dia chi p1 tro toi cao hon dia chi p2 tro toi.

V d :
V d 1 :
Doan chuong trinh tinh tng cac s thuc dung phep so sanh con tro :

Iloat a|100|,*p,*pcuoi,tong0.0;
int n;
pcuoian-1; /* Dia chi cui dy*/
Ior (pa;ppcuoi;p)
s*p;

V d 2 :
Dung con tro char d tach cac byte cua mt bin nguyn, ta lam nhu sau :
ia su ta co lnh :
unsigned int n0xABCD; /* S nguyn h 16*/
char *pc;
pc(char*)(&n);



80
Khi do :
*pc0xAB (byte thu nht cua n)
*pc10xCD (byte thu hai cua n)

7.4.3. Con tro kiu void :
Con tro kiu void duoc khai bao nhu sau :
void *tncontro;
Dy la con tro dc bit, con tro khng kiu, no co th nhn bt ky kiu nao. Chng han
cu lnh sau la hop l :
void *pa;
Iloat a|20||30|;
paa;

Con tro void thuong dung lam di d nhn bt ky dia chi kiu nao tu tham s thuc. Trong
thn ham phai dung phep chuyn di kiu d chuyn sang dang dia chi cn su ly.

Ch :
Cac phep toan tng giam dia chi, so sanh va truy cp b nho khng dung duoc trn con
tro void.

V d :
Vit ham thuc hin cng ma trn :

void congmt(void *a,void *b,void *c,int N,int N, int m);

Iloat *pa,*pb,*pc;
int i,;
pa(Iloat*)a;
pb(Iloat*)b;
pc(Iloat*)c;
Ior (i1;im;i)
Ior (1;m;)
*(pci*N)*(pai*N)*(pbi*N);


81
}
Vi di la con tro void nn no co th nhn duoc dia chi cua cac ma trn trong loi goi ham.
Tuy nhin ta khng th su dung truc tip cac di con tro void trong thn ham ma phai chuyn
kiu cua chung sang thanh Iloat.

7.5. Mang con tro :
Mang con tro la su mo rng khai nim con tro. Mang con tro la mt mang ma mi phn
tu cua no chua duoc mt dia chi nao do. Cng ging nhu con tro, mang con tro co nhiu kiu :
Mi phn tu cua mang con tro kiu int s chua duoc cac dia chi kiu int. Tuong tu cho cac mang
con tro cua cac kiu khac.
Mang con tro duoc khai bao theo mu :
Kiu *Tnmangcontro|N|;
Trong do Kiu co th la int, Iloat, double, char ... con Tn_mang_con_tro la tn cua
mang, N la mt hng s nguyn xac dinh d lon cua mang.
Khi gp khai bao trn, may s cp phat N khoang nho lin tip cho N phn tu cua mang
Tn_mang_con_tro.

V d :
nh :
double *pa|100|;
Khai bao mt mang con tro kiu double gm 100 phn tu. Mi phn tu pa|i| co th dung d luu
tru mt dia chi kiu double.

Ch :
Ban thn cac mang con tro khng dung d luu tru s liu. Tuy nhin mang con tro cho
phep su dung cac mang khac d luu tru s liu mt cach co hiu qua hon theo cach : chia mang
thanh cac phn va ghi nho dia chi du cua mi phn vao mt phn tu cua mang con tro.
Truoc khi su dung mt mang con tro ta cn gan cho mi phn tu cua no mt gia tri. ia
tri nay phai la gia tri cua mt bin hoc mt phn tu mang. Cac phn tu cua mang con tro kiu
char co th duoc khoi du bng cac xu ky tu.

V d :


82
et mt t lao dng co 10 nguoi, m cua mi nguoi chinh la s thu tu. Ta lp mt ham
d khi bit m s cua nhn vin thi xac dinh duoc ho tn cua nhn vin do.
#include stdio.h
#include ctype.h
void tim(int code);
main()

int i;
tt:printI(\n Tim nguoi co so TT la :);
scanI(d,&i);
tim(i);
printI(Co tiep tuc nua khong C/K : );
iI (tupper(getch())C)
goto tt;
}
void tim(int code);

static char *list||
Khong co so thu tu nay
Nguyen Van Toan
uynh Tuan Nghia
e ong Son
Tran uang Tung
Chu Thanh Tu
Mac Thi Nga
oang ung
ham Trong a
Vu Trung Duc
Mai Trong uat
};
printI(\n\n Ma so : d,code);
printI(: s,());
}


83

7.6. Con tro ti hm :
7.6.1. Cch khai bo con tro hm v mang con tro hm :
Ta s trinh bay quy tc khai bao thng qua cac vi du :

V d 1:
Cu lnh :
Iloat (*I)(Iloat),(*mI|0|)(int);
D khai bao :

I la con tro ham kiu Iloat co di la Iloat
mI la mang con tro ham kiu Iloat co di kiu int ( co 0 phn tu )

V d 2:
Cu lnh :
double (*g)(int, double),(*mg|30|)(double, Iloat);
D khai bao :

g la con tro ham kiu double co cac di kiu int va double
mg la mang con tro ham kiu double co cac di kiu double va Iloat ( co 30 phn tu )

7.6.2. Tc dng cua con tro hm :
Con tro ham dung d chua dia chi cua ham. Mun vy ta thuc hin phep gan tn ham cho
con tro ham. D phep gan co y nghia thi kiu ham va kiu con tro phai tuong thich. Sau phep gan,
ta co th dung tn con tro ham thay cho tn ham.

V d 1:
#include stdio.h
double Imax(double x, double y ) /* Tinh max x,y */

return(xy x:y);
}


84
double (*pI)(double,double)Imax; /*Khai bao va gan tn ham cho con tro ham */
main() /* Su dung con tro ham*/

printI(\n maxI,pI(.0,9.6));
}

V d 2:
#include stdio.h
double Imax(double x, double y ) /* Tinh max x,y */

return(xy x:y);
}
double (*pI)(double,double); /* Khai bao con tro ham*/

main() /* Su dung con tro ham*/

pIImax;
printI(\n maxI,pI(.0,9.6));

}

7.6.3. Di cua con tro hm :
C cho phep thit k cac ham ma tham s thuc trong loi goi toi no lai la tn cua mt ham
khac. Khi do tham s hinh thuc tuong ung phai la mt con tro ham.

Cch dng con tro hm trong thn hm :
Nu di duoc khai bao :

double (*I)(double, int);

thi trong thn ham ta co th dung cac cach vit sau d xac dinh gia tri cua ham ( do con tro I tro
toi ) :
I(x,m) hoc (I)(x,m) hoc (*I)(x,m)


8
o dy x la bin kiu double con m la bin kiu int.

V d :
Dung mang con tro d lp bang gia tri cho cac ham : x*x, sin(x), cos(x), exp(x) va
sqrt(x). Bin x chay tu 1.0 dn 10.0 theo buoc 0.
#include stdio.h
#include math.h
double bp(double x) /* am tinh x*x */

return x*x;
}

main()

int i,;
double x1.0;
typedeI double (*ham)(double);
ham I|6|; /* Khai bao mang con tro ham*/
/* Co th khai bao nhu sau double (*I|6|(double)*/
I|1|bp; I|2|sin; I|3|cos; I|4|exp; I||sqrt;
/* an tn ham cho cac phn tu mng con tro ham */
while (x10.0) /* p bang gia tri */

printI(\n);
Ior (1;;)
printI(10.2I ,I||(x));
x0.;
}
}



86
Chuong 8
Cu trc

Cu truc la tp hop cua mt hoc nhiu bin, chung co th khac kiu nhau, duoc nhom lai
duoi mt cai tn duy nht d tin su ly. Cu truc con goi la ban ghi trong mt s ngn ngu khac,
chng han nhu ASCA.
Cu truc giup cho vic t chuc cac du liu phuc tap, dc bit trong nhung chuong trinh
lon vi trong nhiu tinh hung chung cho phep nhom cac bin co lin quan lai d xu ly nhu mt
don vi thay vi cac thuc th tach bit.
Mt vi du duoc d cp nhiu dn la cu truc phiu ghi luong, trong do mi nhn vin
duoc m ta boi mt tp cac thuc tinh chng han nhu : tn, dia chi, luong, phu cp vv.. mt s
trong cac thuc tinh nay lai co th la cu truc boi trong no co th chua nhiu thanh phn : Tn (
o, dm, tn ), Dia chi ( h, s nha ) vv.
Trong chuong nay chung ta s minh hoa cach su dung cua cac cu truc trong chuong
trinh.

8.1. Kiu cu trc :
Khi xy dung cu truc, ta cn m ta kiu cua no. Diu nay cng tuong tu nhu vic phai
thit k ra mt kiu nha truoc khi ta di xy dung nhung cn nha thuc su o cac dia dim khac
nhau. Cng vic dinh nghia mt kiu cu truc bao gm vic nu ra tn cua kiu cu truc va cac
thanh phn cua no theo mu sau :
struct tnkiu cutruc

Khai bao cac thanh phn cua cu truc (1)
};
Trong do :
struct la tu khoa
tnkiu cutruc la mt tn bt ky do nguoi lp trinh tu dt theo qui tc dt tn nu
ra trong chuong 1.

Thanh phn cua cu truc co th la : bin, mang, cu truc khac d duoc dinh nghia truoc do vv..

V d :


87
V d 1:
Doan chuong trinh :
struct ngay
int ngaythu;
char thang|12|;
int nam;
};

m ta mt kiu cu truc co tn la ngay gm co ba thanh phn : Bin nguyn ngaythu, mang
thang, va bin nguyn nam.

V d 2:
Doan chuong trinh :
struct nhancong


char ten|1|;
char diachi|20|
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
};

tao ra kiu cu truc co tn la nhancong gm co nm thanh phn. Ba thanh phn du khng co gi
cn noi thm. Chi co hai thanh phn con lai la cac cu truc ngaysinh va ngaybatdaucongtac
duoc xy dung theo cu truc ngay duoc dinh nghia trong vi du 1.
D|nh nghia cu trc bng typedef :
Co th dung toan tu typedeI d dinh nghia cac kiu cu truc ngay va nhancong o trn
nhu sau :
typedeI struct

int ngaythu;
char thang|12|;


88
int nam;

} ngay;
typedeI struct


char ten|1|;
char diachi|20|
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
} nhancong;

8.2. Khai bo theomt kiu cu trc d d|nh nghia :
y dung nhung cu truc thuc su theo cac kiu d khai bao truoc do. Vn d nay hoan
toan ging nhu vic khai bao cac bin va cac mang. ia su ta d co cac kiu cu truc ngay va
nhancong nhu trong muc trn. Khi do ta khai bao :

V d 1 :
struct ngay ngaydi, ngayden;

s cho ta hai cu truc voi tn la ngaydi va ngayden. Ca hai cu truc du duoc xy dung theo cu
truc kiu ngay.

V d 2 :
struct nhancong nhom1,nhom2;
s cho ta hai cu truc voi tn la nhom1 va nhom2. Ca hai cu truc du duoc xy dung theo cu
truc kiu nhancong.
Nhu vy, mt cach tng quat, vic khai bao cu truc duoc thuc hin theo mu sau :

Cch 1 :
struct tnkiucutrucdkhaibao danhsachtncaccutruc; (2)


89

Ch :
Cac bin cu truc duoc khai bao theo mu trn s duoc cp phat b nho mt cach dy du
cho tt ca cac thanh phn cua no.
Vic khai bao co th thuc hin dng thoi voi vic dinh nghia kiu cu truc. Mun vy,
chi cn dt danh sach tn bin cu truc cn khai bao sau du } cua (* ) nhu trn .
Noi cach khac, d vua khai bao kiu vua khai bao bin ta dung cach sau :

Cch 2 :
struct tnkiucutruc

Cac thanh phn cua cu truc (3)
} danhsachtncaccutruc;

V d :
V d 1 :
struct ngay

int ngaythu;
char thang|12|;
int nam;
} ngaydi,ngayden;

V d 2 :
struct nhancong


char ten|1|;
char diachi|20|;
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;



90
} nhom1,nhom2;

Khi vua dinh nghia kiu cu truc vua khai bao cu truc nhu trong vi du trn, ta khng th
khng cn dn tn kiu cu truc. Noi cach khac cu truc co th duoc khai bao theo cach sau :
struct

Cac thanh phn cua cu truc (4)
} danhsachtncaccutruc;

V d :
struct

int ngaythu;
char thang|12|;
int nam;
} ngaydi,ngayden;

Su khac nhau cua cac cach khai bao cu truc trong (3) va (4) la o ch : Voi (3) ta vua
khai bao duoc mt kiu cu truc vua khai bao duoc cac cu truc, va co th dung kiu cu truc nay
d khai bao cho cac cu truc khac nhu trong (2), con (4) chi khai bao duoc cac cu truc.

Ch :
Nu dung tu khoa typedeI d dinh nghia kiu cu truc nhu trong muc 8.1 thi khi khai bao
cac cu truc moi ta khng cn dung tu khoa struct, chi cn dung tn kiu.

Vi du nhu kiu cu truc ngay duoc khai bao bng typedeI trong 8.1 thi khi khai bao cac cu truc
moi la ngaydi va ngayden co cung kiu ngay ta dung dong lnh sau :

ngay ngaydi,ngayden;

8.3. Truy nhp dn cc thnh phn cu trc :


91
Ta d kha quen voi vic su dung cac bin, cac phn tu cua mang va tn mang trong cac
cu lnh. Trn dy ta cng d d cp dn cac thanh phn cua cu truc la bin va mang. Vic xu ly
mt cu truc bao gio cng phai duoc thuc hin thng qua cac thanh phn cua no.
D truy cp dn mt thanh phn co ban ( la bin hoc mang ) cua mt cu truc ta su dung
mt trong cac cach vit sau :
tncutruc.tnthanhphn
tncutruc.tncutruc.tnthanhphn
tncutruc. tncutruc.tncutruc.tnthanhphn
.....
Cach vit thu nht nhu trn duoc su dung khi bin hoc mang la thanh phn truc tip cua
mt cu truc. Vi du nhu bin ngaythu, bin nam va mang thang la cac thanh phn truc tip cua
cac cu truc ngaydi, ngayden. Cac bin bacluong, cac mang ten, diachi la cac thanh phn truc
tip cua cac cu truc nhancong.

Cac cach vit con lai nhu trn duoc su dung khi bin hoc mang la thanh phn truc tip
cua mt cu truc ma ban thn cu truc nay lai la thanh phn cua cac cu truc lon hon.

V d :
Ta xet phep toan trn cac thanh phn cua cu truc nhom1, nhom2 :
Cu lnh :
printI(s,nhom1.ten);
s dua ln man hinh tn cua nhom1.
Cu lnh :
tongluongnhom1.bacluongnhom2.bacluong;
s gan tng luong cua nhom1 va nhom2 ri gan cho bin tongluong.
Cu lnh :
printI(d,nhom1.ngaysinh.ten);
s dua ln man hinh ngay sinh cua nhom1.
Cu lnh :
printI(d,nhom1. ngaybatdaucongtac.nam);
s dua ln man hinh ngay bt du cng tac cua nhom1.

Ch :


92
Co th su dung phep toan ly dia chi di voi cac thanh phn cu truc d nhp s liu
truc tip vao cac thanh phn cu truc. Vi du nhu ta vit :
scanI(d,&nhom1. ngaybatdaucongtac.nam);
Nhung di voi cac thanh phn khng nguyn, vic lam trn co th dn dn treo may. Vi th nn
nhp s liu vao mt bin trung gian sau do moi gan cho thanh phn cua cu truc.

Cach lam nhu sau :
int year;
scanI(d,&year);
nhom1. ngaybatdaucongtac.namyear;

D tranh dai dong khi lam vic voi cac thanh phn cu truc ta co th dung lnh
#deIine. Vi du trong cu lnh scanI o vi du trn, ta co th vit nhu sau :
#deIine p nhom1. ngaybatdaucongtac
.....
scanI(d,&p.nam);

V d :
ia su ta lp trinh quan ly thng tin can b. ia su mi du liu cua mt can b gm :
Ngay thang nm sinh.
Ngay thang nm vao co quan.
Bc luong.
u cu vit mt chuong trinh d :
y dung cu truc co so du liu cho can b.
Vao s lu cua mt can b.
Dua s liu do ra may in.
Chuong trinh duoc vit nhu sau :
#include stdio.h
typedeI struct

int ngay;
char thang|10|;


93
int nam;
} date;
typedeI struct

date ngaysinh;
date ngayvaocq;
Iloat luong;
} canbo;
main()

canbo p;
printI(\n Sinh ngay : );
scanI(d,&p.ngaysinh.ngay);
printI(\n Thang : );
scanI(d,&p.ngaysinh.thang);
printI(\n Nam : );
scanI(d,&p.ngaysinh.nam);
printI(\n Vao co quan ngay : );
scanI(d,&p.ngayvaocq.ngay);
printI(\n Thang : );
scanI(d,&p.ngayvaocq.thang);
printI(\n Nam : );
scanI(d,&p.ngayvaocq.nam);
printI(\n uong : );
scanI(d,&p.luong);
IprintI(stdprn,\n Ngay sinh:dsd,p.ngaysinh.ngay,p.ngaysinh.thang,
p.ngaysinh.nam);
IprintI(stdprn,\n Ngay vao co quan:dsd,p.ngayvaocq.ngay,
p.ngayvaocq.thang,p.ngayvaocq.nam);
IprintI(stdprn,\n uong : 8.2I,p.luong);
}

8.4. Mang cu trc :


94
Nhu d d cp o cac chuong truoc, khi su dung mt kiu gia tri ( vi du nhu kiu int ) ta
co th khai bao cac bin va cac mang kiu do. Vi du nhu khai bao :
int a,b,c|10|;
cho ta hai bin nguyn la a,b va mt mang nguyn c co 10 phn tu.
oan toan tuong tu nhu vy : ta co th su dung mt kiu cu truc d m ta d khai bao
cac cu truc va mang cu truc.
Cach khai bao mang cu truc :
struct tnkiucutrucddinhnghia tnmangcutruc|s phn tu cua mang|;

V d :
V d 1 :
ia su kiu cu truc canbo d duoc dinh nghia nhu muc trn. Khi do dong khai bao :
struct canbo cb1,cb2,nhom1|10|,nhom2|7|;

s cho :
ai bin cu truc cb1 va cb2.
ai mang cu truc nhom1 co 10 phn tu va nhom2 co 7 phn tu va mi phn tu cua hai
nhom nay co kiu canbo.

V d 2 :
Doan chuong trinh sau s tinh tng luong cho cac phn tu nhom 1:
double tongluong0;
Ior (i0;i10;i)
tongluongnhom1|i|.luong;

Ch :
Khng cho phep su dung phep toan ly dia chi di voi cac thanh phn cua mang cu truc
khac kiu nguyn. Chng han khng cho phep su dung cu lnh sau :
scanI(I,&nhom1||.luong);
Trong truong hop nay ta dung bin trung gian.

8.5. Khoi du mt cu trc :


9
Co th khoi du cho mt cu truc ngoai, cu truc tinh, mang cu truc ngoai va mang cu
truc tinh

8.6. Php gn cu trc :
Co th thuc hin phep gan trn cac bin va phn tu mang cu truc cung kiu nhu sau :
an hai bin cu truc cho nhau
an bin cu truc cho phn tu mang cu truc
an phn tu mang cu truc cho bin cu truc
an hai phn tu mang cu truc cho nhau
Mi mt phep gan trn tuong duong voi mt dy phep gan cac thanh phn tuong ung.

V d :
Doan chuong trinh sau minh hoa cach dung phep gan cu truc d d sp xp n thi sinh
theo thu tu giam cua tng dim :
struct thisinh

char ht|2|;
Iloat td;
} tg,ts|100|;
Ior (i1;in-1;i)
Ior (1;n;)
iI (ts|i|.tdts||.td)

tgts|i|;
ts|i|ts||;
ts||tg;
}

8.7. Con tro cu trc v d|a chi cu trc :
8.7.1. Con tro v d|a chi :
Ta xet vi du sau :
struct ngay


96

int ngaythu;
char thang|10|;
int nam;
};
struct nhancong

char ten|20|;
char diachi|2|;
double bacluong;
struct ngay ngaysinh;
};
Nu khai bao :
struct nhancong *p,*p1,*p2,nc1,nc2,ds|100|;
ta co :
p, p1, p2 la con tro cu truc
nc1, nc2 la cac bin cu truc
ds la mang cu truc
Con tro cu truc dung d luu tru dia chi cua bin cu truc va mang cu truc.
V d :
p1&nc1; /* ui dia chi nc1 vao p1 */
p2&ds|4|; /* ui dia chi ds|4| vao p2 */
pds; /* ui dia chi ds|0| vao p */

8.7.2. Truy nhp qua con tro:
Co th truy nhp dn cac thanh phn thng qua con tro theo mt trong hai cach sau :

Cch mt :
Tncontro-Tnthanhphn

Cch hai :
(*Tncontro).Tnthanhphn



97
V d :
nc1.ngaysinh.nam
p1- ngaysinh.nam
ds|4|.ngaysinh.thang
(*p2). ngaysinh.thang

8.7.3. Php gn qua con tro:
ia su ta gan :
p1&nc1;
p2&ds|4|;
Khi do co th dung :
*p1 thay cho nc1
*p2 thay cho ds|4|
Tuc la vit:
ds||nc1;
ds|4|nc2;
Tuong duong voi :
ds||*p1;
*p2nc2;

8.7.4. Php cng d|a chi :
Sau cac phep gan :
pds;
p2&ds|4|;
thi p tro thoi ds||0|| va p2 tro toi ds|4|. Ta co th dung cac phep cng, tru dia chi d lam cho p va
p2 tro toi cac thanh phn bt ky nao khac.

V d :
Sau cac lnh :
pp10;
p2p2-4;
thi p tro toi ds|10| con p2 tro toi ds|0|



98
8.7.5. Con tro v mang :
ia su con tro p tro toi du mang ds, khi do :

Ta co th truy nhp toi cac thanh phn cu truc bng cac cach sau :
ds|i|.thanhphn ds|i|.ngaysinh.nam
p|i|.thanhphn p|i|.ngaysinh.nam
(pi)-thanhphn (pi)-ngaysinh.nam

Khi ta su dung ca cu truc thi cac cach vit sau la tuong duong :
ds|i| p|i| *(pi)

8.8. Cu trc t tro v danh sch lin kt :
Khi ta lp mt chuong trinh quan ly ma ban thn s bin (cu truc) chua duoc bit truoc,
nu ta su dung mang ( cp phat b nho tinh ) thi ta phai su dung s cac phn tu la ti da. Nhu vy
s co rt nhiu vung nho duoc cp phat ma khng bao gio dung dn. uc do ta co cach d cp
phat b nho dng. S vung nho cp ra du s bin cn dung.
Cu truc co it nht mt thanh phn la con tro kiu cu truc dang dinh nghia goi la cu truc
tu tro.

V d :
Cac cach d dinh nghia cu truc tu tro person:

Cch 1 :
typedeI struct pp

char ht|20|;
char qq|2|;
int tuoi;
struct pp *tiep;
} person;

Cch 2 :
typedeI struct pp person


99
struct pp

char ht|20|;
char qq|2|;
int tuoi;
person *tiep;
};

Cch 3 :
struct pp

char ht|20|;
char qq|2|;
int tuoi;
struct pp *tiep;
};
typedeI pp person;
Cu truc tu tro duoc dung d xy dung danh sach lin kt ( moc ni ), do la mt nhom
cac cu truc co tinh cht sau : ( Moc ni theo chiu thun ).
Bit dia chi cu truc du dang duoc luu tru trong mt con tro nao do.
Trong mi cu truc ( tru cu truc cui ) chua dia chi cua cu truc tip sau cua danh
sach.
Cu truc cui chua hng NU.
V d :




Voi danh sach nay, ta co th ln luot tu cu truc du dn cu truc cui theo chiu tu trn xung
duoi.
Nhom cu truc moc ni theo chiu nguoc co tinh cht sau :
Bit dia chi cu truc cui.
Trong mi cu truc ( tru cu truc du ) du chu dia chi cua cu truc truoc.

.........
NU
dau


100
Cu truc du chua hng NU.
Voi danh sach nay, ta co th ln luot tu cu truc cui ln cu truc du theo chiu tu duoi ln trn.
Ngoai ra, ta co th xy dung cac danh sach ma mi phn tu chua hai dia chi cua cu truc truoc va
cu truc sau. Voi loai danh sach nay, ta co th truy nhp theo ca hai chiu trn.
Khi lam vic voi danh sach moc ni, ta thuong phai tin hanh cac cng vic sau sau :
( ia su ta co con tro p, tro pdau chi cu truc du cua danh sach, con tro tiep la thanh phn con
tro cua cu truc )

To danh sch mi :
Cp phat b nho cho mt cu truc
Nhp mt bin cu truc vao vung nho vua cp
an dia chi cua cu truc sau cho thanh phn con tro cua cu truc truoc

Duyt qua tt ca cc phn tu cua danh sch :
Dua tro p v tro cung cu truc voi pdau bng lnh :
ppdau
D chuyn tip dn nguoi tip theo ta dung lnh :
pp-tiep
Du hiu d bit dang xet cu truc cui cung cua danh sach la :
p-tiepNU
Loi mt cu trc ra khoi danh sch :
uu tru dia chi cua cu truc cn loai vao mt con tro (D giai phong b nho cua cu
truc nay)
Sua d cu truc truoc do co dia chi cua cu truc cn loai
iai phong b nho cu truc cn loai

B xung ho}c chn mt cu trc vo danh sch:
Cp phat b nho va nhp b xung
Sua thanh phn con tro trong cac cu truc co lin quan d dam bao mi cu truc chua
dia chi cua cu truc tip theo

Hm cp pht b nh :


101
void *malloc(kichthuoct kichthuoc);
am ly trong thu vin alloc.h hoc stdlib.h.
kichthuoc tinh bng s by te. am s dua con tro v vi tri nho vua duoc cp hoc v NU
nu khng du b nho cn thit. Nu kichthuoc 0 thi no tra v NU.

V d :
#include stdio.h
#include string.h
#include alloc.h
#include process.h
int main()

char *str;
/* Cp phat b nho cho xu ky tu */
iI ((str malloc(10)) NU)

printI(Not enough memory to allocate buIIer\n);
exit(1); /* Kt thuc chuong trinh nu thiu b nho */
}
/* copy ello vao xu */
strcpy(str, ello);
/* in thi xu */
printI(String is s\n, str);
/* iai phong b nho */
Iree(str);
return 0;
}

V d :
Tao mt danh sach lin kt. Cac bin cu truc gm cac truong : o tn, u quan, tui,
va mt truong con tro la Tip.
Moc ni theo chiu thun (Vao truoc ra truoc IO Iirst in Iirst out ):
#include stdio.h


102
#include alloc.h
#include conio.h
#include string.h
typedeI struct pp

char ht|2|;
char qq|20|;
int tuoi;
struct pp *tiep;
} nhansu;
main()

char tt;
nhansu *pdau,*pcuoi,*p;
char tam|10|;
clrscr();
pdauNU;
do

p(nhansu*)malloc(sizeoI(nhansu));
printI(\n o ten : );
gets(p-ht);
printI( ue quan : );
gets(p-qq);
printI( Tuoi: );
gets(tam);
p-tuoiatoi(tam);
iI (pdauNU)

pdaup;
pcuoip;
p-tiepNU;
}


103
else

pcuoi-tiepp;
pcuoip;
p-tiepNU;
}
printI(\nBam phim bat ky de tiep tuc, ESC de dung);
ttgetch();
} while(tt!27) ;
/* Dua danh sach lin kt ra man hinh, tro pdau tro */
printI(\n Danh sach nhu sau :\n);
ppdau;
while (p!NU)

printI(\n o ten: 2s ue : 20s Tuoi :
d,(*p).ht,(*p).qq,(*p).tuoi);
pp-tiep;
}
getch();
}
Moc ni theo chiu nguoc (Vao sau ra truoc IO last in Iirst out ):
#include stdio.h
#include alloc.h
#include conio.h
#include string.h
typedeI struct pp

char ht|2|;
char qq|20|;
int tuoi;
struct pp *tiep;
} nhansu;
main()


104

char tt;
nhansu *pdau,*pcuoi,*p;
char tam|10|;
clrscr();
pdauNU;
do

p(nhansu*)malloc(sizeoI(nhansu));
printI(\n o ten : );
gets(p-ht);
printI( ue quan : );
gets(p-qq);
printI( Tuoi: );
gets(tam);
p-tuoiatoi(tam);
iI (pdauNU)

pdaup;
pcuoip;
p-tiepNU;
}
else

p-tieppcuoi;
pcuoip;
}
printI(\nBam phim bat ky de tiep tuc, ESC de dung);
ttgetch();
} while(tt!27) ;
/* Dua danh sach lin kt ra man hinh, tro pdau tro */
printI(\n Danh sach nhu sau :\n);
ppcuoi;


10
while (p!NU)

printI(\n o ten: 2s ue : 20s Tuoi :
d,(*p).ht,(*p).qq,(*p).tuoi);
pp-tiep;
}
getch();
}



106
Chuong 9
tp tin - Iile

9.1. Khi nim v tp tin :
Tp tin hay tp du liu la mt tp hop cac du liu co lin quan voi nhau va co cung mt
kiu duoc nhom lai voi nhau thanh mt dy. Chung thuong duoc chua trong mt thit bi nho
ngoai cua my tinh (dia mm, dia cung...) duoi mt cai tn nao do.
Tn ting Anh cua tp la file, no duoc dung d chi ra mt hp dung cac phiu hay th ghi
cua thu vin. Mt hinh anh r net giup ta hinh dung ra tp la tu phiu cua thu vin. Mt hp co
nhiu phiu ging nhau v hinh thuc va t chuc, song lai khac nhau v ni dung. o dy, tu phiu
la tp, cac la phiu la cac thanh phn cua tp. Trong may tinh, mt dia cung hoc mt dia mm
dong vai tro chic tu (d chua nhiu tp).
Tp duoc chua trong b nho ngoai, diu do co nghia la tp duoc luu tru d dung nhiu
ln va tn tai ngay ca khi chuong trinh kt thuc hoc mt din. Chinh vi ly do trn, chi nhung du
liu nao cn luu tru ( nhu h so chng han) thi ta nn dung dn tp.
Tp la mt kiu du liu co cu truc. Dinh nghia tp co phn nao ging mang o ch chung
du la tp hop cua cac phn tu du liu cung kiu, song mang thuong co s phn tu c dinh, s
phn tu cua tp khng duoc xac dinh trong dinh nghia.
Trong C, cac thao tac tp duoc thuc hin nho cac ham thu vin. Cac ham nay duoc chia
lam hai nhom : nhom 1 va nhom 2. Cac ham cp 1 la cac ham nhp / xut h thng, chung thuc
hin vic doc ghi nhu DOS. Cac ham cp 2 lam vic voi tp thng qua mt bin con tro tp.
Do cac ham cp 2 co nhiu kiu truy xut va d dung hon so voi cac ham cp 1 nn trong
cac chuong trinh vit trong C, cac ham cp 2 hay duoc su dung hon.
Mt tp tin du duoc xy dung bng cach nao di nua cng chi don gian la mt dy cac
byte ghi trn dia (co gia tri tu 0 dn 2). S byte cua dy chinh la d dai cua tp.
Co hai kiu nhp xut du liu ln tp : Nhp xut nhi phn va nhp xut vn ban.

Nhp xut nh| phn :
Du liu ghi ln tp theo cac byte nhi phn nhu b nho, trong qua trinh nhp xut, du
liu khng bi bin di.
Khi doc tp, nu gp cui tp thi ta nhn duoc m kt thuc tp EO ( duoc dinh
nghia trong stdio.h bng -1) va ham IeoI cho gia tri khac 0.



107
Nhp xut vn ban:
Kiu nhp xut vn ban chi khac kiu nhi phn khi xu ly ky tu chuyn dong ( m 10)
va ky tu m 26. Di voi cac ky tu khac, hai kiu du doc ghi nhu nhau.
M chuyn dong :
Khi ghi, mt ky tu (m 10) duoc chuyn thanh 2 ky tu CR (m 13) va

Khi doc, 2 ky tu lin tip CR va trn tp chi cho ta mt ky tu

M kt thc tp :
Trong khi doc, nu gp ky tu co m 26 hoc cui tp thi ta nhn duoc m kt thuc tp
EO ( bng -1) va ham IeoI(Ip) cho gia tri khac 0 ( bng 1).

9.2. Khai bo su dng tp - mt s hm thung dng khi thao tc trn tp :
9.2.1. Khai bo su dng tp :
D khai bao su dung tp, ta dung lnh sau :
IE bincontrotp;

Trong do bincontrotp co th la bin don hay mt danh sach cac bin phn cach nhau boi
du phay ( du , ).

V d :
IE *vb, *np; /* Khai bao hai bin con tro tp */

9.2.2. Mo tp - hm fopen :
Cu trc ng php cua hm :
IE *Iopen(const char *tntp, const char *kiu);

Nguyn hm trong : stdio.h .
Trong do :
Di thu nht la tn tp, di thu hai la kiu truy nhp.

Cng dng :


108
am dung d mo tp. Nu thanh cng ham cho con tro kiu IE ung voi tp vua mo.
Cac ham cp hai s lam vic voi tp thng qua con tro nay. Nu co li ham s tra v gia tri
NU.
Bang sau chi ra cac gia tri cua kiu :
Tn kiu y nghia
r rt Mo mt tp d doc theo kiu vn ban. Tp cn
doc phai d tn tai, nu khng s co li

w wt Mo mt tp d ghi theo kiu vn ban. Nu tp
d tn tai thi no s bi xoa.

a at Mo mt tp d ghi b xung theo kiu vn ban.
Nu tp chua tn tai thi tao tp moi.

rb Mo mt tp d doc theo kiu nhi phn. Tp cn
doc phai d tn tai, nu khng s co li.

wb Mo mt tp moi d ghi theo kiu nhi phn.
Nu tp d tn tai thi no s bi xoa.

ab Mo mt tp d ghi b xung theo kiu nhi phn.
Nu tp chua tn tai thi tao tp moi.

r rt Mo mt tp d doc/ghi theo kiu vn ban. Tp
cn doc phai d tn tai, nu khng s co li

w wt Mo mt tp d doc/ghi theo kiu vn ban. Nu
tp d tn tai thi no s bi xoa.

a at Mo mt tp d doc/ghi b xung theo kiu vn
ban. Nu tp chua tn tai thi tao tp moi.

rb Mo mt tp d doc/ghi theo kiu nhi phn. Tp
cn doc phai d tn tai, nu khng s co li.

wb Mo mt tp moi d doc/ghi theo kiu nhi phn.
Nu tp d tn tai thi no s bi xoa.

ab Mo mt tp d doc/ghi b xung theo kiu nhi
phn. Nu tp chua tn tai thi tao tp moi.


Ch :
Trong cac kiu doc ghi, ta nn lm sach vung dm truoc khi chuyn tu doc sang ghi hoc
nguoc lai. Ta s d cp dn cac ham voi tinh nng xoa sau nay.


109

V d :
IIopen(TEN,wb);
9.2.3. Dng tp - hm fclose :
Cu trc ng php cua hm :
int Iclose(IE *Ip);

Nguyn hm trong : stdio.h .
Trong do :
Ip la con tro ung voi tp cn dong.

Cng dng :
am dung d dong tp khi kt thuc cac thao tac trn no. Khi dong tp, may thuc hin cac
cng vic sau :
Khi dang ghi du liu thi may s dy du liu con trong vung dm ln dia
Khi dang doc du liu thi may s xoa vung dm
iai phong bin tro tp.
Nu lnh thanh cng, ham s cho gia tri 0, trai lai no cho ham EO.

V d :
Iclose(I);

9.2.4. Dng tt ca cc tp dang mo- hm fcloseall :
Cu trc ng php cua hm :
int Icloseall(void);

Nguyn hm trong : stdio.h .
Cng dng :
am dung d dong tt ca cac tp dang mo . Nu lnh thanh cng, ham s cho gia tri bng
s la s tp duoc dong, trai lai no cho ham EO.

V d :


110
Icloseall();

9.2.5. Lm sch vng dm - hm fflush :
Cu trc ng php cua hm :
int IIlush(IE *Ip);

Nguyn hm trong : stdio.h .
Cng dng :
Dung lam sach vung dm cua tp Ip. Nu lnh thanh cng, ham s cho gia tri 0, trai lai no
cho ham EO.

V d :
IIlush(I);

9.2.6. Lm sch vng dm cua cc tp dang mo - hm fflushall :
Cu trc ng php cua hm :
int IIlushall(void);

Nguyn hm trong : stdio.h .
Cng dng :
Dung lam sach vung dm cua tt ca cac tp dang mo. Nu lnh thanh cng, ham s cho
gia tri bng s cac tp dang mo, trai lai no cho ham EO.

V d :
IIlushall();
9.2.7. Kim tra li file - hm ferror :
Cu trc ng php cua hm :
int Ierror(IE *Ip);

Nguyn hm trong : stdio.h .
Trong do Ip la con tro tp.



111
Cng dng :
am dung d kim tra li khi thao tac trn tp Ip. am cho gia tri 0 nu khng co li, trai
lai ham cho gia tri khac 0.

9.2.8. Kimtra cui tp - hm feof :
Cu trc ng php cua hm :
int IeoI(IE *Ip);

Nguyn hm trong : stdio.h .
Trong do Ip la con tro tp.

Cng dng :
am dung d kim tra cui tp. am cho gia tri khac 0 nu gp cui tp khi doc, trai lai
ham cho gia tri 0.
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tro chi v| :
9.2.7.1. Chuyn con tro chi v| v du tp - Hm rewind :
Cu trc ng php :
void rewind(IE *Ip);

Nguyn hm trong : stdio.h .
Trong do Ip la con tro tp.

Cng dng :
Chuyn con tro chi vi cua tp Ip v du tp. Khi do vic nhp xut trn tp Ip duoc thuc
hin tu du.

V d :
rewind(I);

9.2.9.2. Chuyn con tro chi v| tr cn thit - Hm fseek :
Cu trc ng php :
int Iseek(IE *Ip, long sb, int xp);


112

Nguyn hm trong : stdio.h .
Trong do
Ip la con tro tp.
sb la s byte cn di chuyn.
xp cho bit vi tri xut phat ma vic dich chuyn duoc bt du tu do.
xp co th nhn cac gia tri sau :
xpSEEKSET hay 0 : ut phat tu du tp.
xpSEEKCUR hay 1: ut phat tu vi tri hin tai cua con tro chi vi.
xpSEEKEND hay 2 : ut phat tu cui tp.

Cng dng :
Chuyn con tro chi vi cua tp Ip v vi tri xac dinh boi xp qua mt s byte xac dinh bng
gia tri tuyt di cua sb. Chiu di chuyn la v cui tp nu sb duong, trai lai no s di chuyn v
du tp. Khi thanh cng, ham tra v gia tri 0. Khi co li ham tra v gia tri khac khng.

Ch :
Khng nn dung Iseek trn tp tin vn ban, do su chuyn di ky tu s lam cho vic dinh
vi thiu chinh xac.

V d :
Iseek(stream, SEEKSET, 0);

9.2.9.3. V| tr hin ti cua con tro chi v| - Hm ftell :
Cu trc ng php :
int Itell(IE *Ip);

Nguyn hm trong : stdio.h .
Trong do
Ip la con tro tp.

Cng dng :


113
am cho bit vi tri hin tai cua con tro chi vi (byte thu my trn tp fp) khi thanh cng.
S thu tu tinh tu 0. Trai lai ham cho gia tri -1.
V d :
Sau lnh Iseek(Ip,0,SEEKEND);
Itell(Ip) cho gia tri 3.
Sau lnh Iseek(Ip,-1,SEEKEND);
Itell(Ip) cho gia tri 2.

9.2.10. Ghi cc mu tin ln tp - hm fwrite :
Cu trc ng php cua hm :
int Iwrite(void *ptr, int size, int n, IE *Ip);

Nguyn hm trong : stdio.h .
Trong do :
ptr la con tro tro toi vung nho chua du liu cn ghi.
size la kich thuoc cua mu tin theo byte
n la s mu tin cn ghi
fp la con tro tp

Cng dng :
am ghi n mu tin kich thuoc size byte tu vung nho ptr ln tp fp.
am s tra v mt gia tri bng s mu tin thuc su ghi duoc.

V d :
#include stdio.h
struct mystruct

int i;
char ch;
};
main()

IE *stream;


114
struct mystruct s;
stream Iopen(TEST.TT, wb) /* Mo tp TEST.TT */
s.i 0;
s.ch A;
Iwrite(&s, sizeoI(s), 1, stream); /* Vit cu truc vao tp */
Iclose(stream); /* Dong tp */
return 0;
}

9.2.11. Dc cc mu tin t tp - hm fread :
Cu trc ng php cua hm :
int Iread(void *ptr, int size, int n, IE *Ip);

Nguyn hm trong : stdio.h .
Trong do :
ptr la con tro tro toi vung nho chua du liu cn ghi.
size la kich thuoc cua mu tin theo byte
n la s mu tin cn ghi
fp la con tro tp

Cng dng :
am doc n mu tin kich thuoc size byte tu tp fp ln ln vung nho ptr.
am s tra v mt gia tri bng s mu tin thuc su doc duoc.

V d :
#include string.h
#include stdio.h
main()

IE *stream;
char msg|| Kim tra;
char buI|20|;
stream Iopen(DUMM.I, w);


11
/* Vit vai du liu ln tp */
Iwrite(msg, strlen(msg)1, 1, stream);
/* Tim dim du cua Iile */
Iseek(stream, SEEKSET, 0);
/* Doc s liu va hin thi */
Iread(buI, strlen(msg)1, 1, stream);
printI(s\n, buI);
Iclose(stream);
return 0;
}

9.2.10. Nhp xut k t :
9.2.10.1. Cc hm putc v fputc :
Cu trc ng php :
int putc(int ch, IE *Ip);
int Iputc(int ch, IE *Ip);

Nguyn hm trong : stdio.h .
Trong do :
ch la mt gia tri nguyn
Ip la mt con tro tp.

Cng dng :
am ghi ln tp Ip mt ky tu co m bng
mch 26.
ch duoc xem la mt gia tri nguyn khng du. Nu thanh cng ham cho m ky tu
duoc ghi, trai lai cho EO

V d :
#include stdio.h
main()

char msg|| ello world\n;


116
int i 0;
while (msg|i|)
putc(msg|i|, stdout); /* stdout thit bi ra chun - Man hinh*/
return 0;
}

9.2.12.2. Cc hm getc v fgettc :
Cu trc ng php :
int gretc(IE *Ip);
int Iputc(IE *Ip);

Nguyn hm trong : stdio.h .
Trong do :
Ip la mt con tro tp.

Cng dng :
am doc mt ky tu tu tp Ip. Nu thanh cng ham s cho m doc duoc ( co gia tri tu 0
dn 2). Nu gp cui tp hay co li ham s tra v EO.
Trong kiu vn ban, ham doc mt luot ca hai m 13, 10 va tra v gia tri 10. Khi gp m
26 ham s tra v EO.

V d :
#include string.h
#include stdio.h
#include conio.h
main()

IE *stream;
char string|| Kiem tra;
char ch;
/* Mo tp d cp nht*/
stream Iopen(DUMM.I, w);
/*Vit mt xu ky tu vao tp */


117
Iwrite(string, strlen(string), 1, stream);
/* Tim vi tri du cua tp */
Iseek(stream, 0, SEEKSET);
do

/* Doc mt ky tu tu tp */
ch Igetc(stream);
/* in thi ky tu */
putch(ch);
} while (ch ! EO);
Iclose(stream);
return 0;
}

9.2.13. Xo tp - hm unlink:
Cu trc ng php :
int unlink(const char *tntp)
Nguyn hm trong : dos.h, io.h, stdio.h .
Trong do
tn_tp la tn cua tp cn xoa.
Cng dng :
Dung d xoa mt tp trn dia. Nu thanh cng, ham cho gia tri 0, trai lai ham cho gia tri
EO.

V d :
#include stdio.h
#include io.h
int main(void)

IE *Ip Iopen(unk.nk,w);
int status;
IprintI(Ip,unk);
status access(unk.nk,0);


118
iI (status 0)
printI(Tp tn tai\n);
else
printI(Tp khng tn tai\n);
Iclose(Ip);
unlink(unk.nk);
status access(unk.nk,0);
iI (status 0)
printI(Tp tn tai\n);
else
printI(Tp khng tn tai\n);
return 0;
}













119
Chuong 10
D hoa

Chuong nay s gioi thiu cac ham va thu tuc d khoi dng h d hoa, v cac duong va
hinh co ban nhu hinh tron, cung elip, hinh quat, duong gy khuc, da giac, duong thng, hinh chu
nht, hinh hp chu nht....
Cac ham va thu tuc d hoa duoc khai bao trong Iile graphics.h.

10.1. Khoi dng d ho :
Muc dich cua vic khoi dng h thng d hoa la xac dinh thit bi d hoa (man hinh) va
mode d hoa s su dung trong chuong trinh. D lam cng vic nay, ta co ham sau :
void initgraph(int *graphdriver,int graphmode,char *driverpath);
Trong do :
driverpath la xu ky tu chi duong dn dn thu muc chua cac tp tin diu khin d
hoa.
graphdriver cho bit man hinh d hoa su dung trong chuong trinh.
graphmode cho bit mode d hoa su dung trong chuong trinh.
Bang duoi dy cho cac gia tri kha di cua graphdriver va graphmode :
graphdriver
DETECT (0)
graphmode D phn giai
CA (1) CAC0 (0)
CAC1 (1)
CAC2 (2)
CAC3 (3)
CAi (4)
320x200
320x200
320x200
320x200
640x200
MCA (2) MCA0 (0)
MCA1 (1)
MCA2 (2)
MCA3 (3)
MCAMed (4)
MCAi ()
320x200
320x200
320x200
320x200
640x200
640x480
EA (3) EA0 (0) 640x200


120
EAi (1) 640x30
EA64 (4) EA64O (0)
EA64i (1)
640x200
640x30
EAMONO () EAMONOi (0) 640x30
VA (9) VAO (0)
VAMED (1)
VAI (2)
640x200
640x30
640x480
ERCMONO (7) ERCMONOI 720x348
ATT400 (8) ATT400C0 (0)
ATT400C1 (1)
ATT400C2 (2)
ATT400C3 (3)
ATT400MED (4)
ATT400I ()
320x200
320x200
320x200
320x200
640x400
640x400
C3270 (10) C3270I (0) 720x30
IBM814 (6) C3270O (0)
C3270I (1)
640x480 26 mu
1024x768 26 mu

Ch :
Bang trn cho ta cac hng va gia tri cua chung ma cac bin graphdtriver va
graphmode co th nhn. Chng han hng DETECT co gia tri 0, hng VA co gia tri
9, hng VAO co gia tri 0 vv...
Khi lp trinh ta co th thay th vao vi tri tuong ung cua chung trong ham tn
hng hoc gia tri cua hng do.

V d :
ia su may tinh co man hinh VA, cac tp tin d hoa chua trong thu muc C:\TC \BI,
khi do ta khoi dng h thng d hoa nhu sau :
#include graphics.h
main()

int mhVA,modeVAI; /*oc mh9,mode2*/
initgraph(&mh,&mode,C:\\TC\\BI);


121
/* Vi ki tu \ trong C la ki tu dc bit nn ta phai gp di no */
}
Bang trn con cho thy d phn giai con phu thuc ca vao man hinh va mode. Vi du
nhu trong man hinh EA nu dung EAo thi d phn giai la 640x200 ( am
getmaxx() cho gia tri cuc dai cua s dim theo chiu ngang cua man hinh. Voi man
hinh EA trn : 639, am getmaxy() cho gia tri cuc dai cua s dim theo chiu doc
cua man hinh. Voi man hinh EA trn : 199 ).
Nu khng bit chinh xac kiu man hinh dang su dung thi ta gan cho bin
graphdriver bng DETECT hay gia tri 0. Khi do, kt qua cua initgraph s la :
Kiu man hinh dang su dung duoc phat hin, gia tri cua no duoc gan cho bin
graphdriver.
Mode d hoa o d phn giai cao nht ung voi man hanh dang su dung cng duoc
phat hin va tri s cua no duoc gan cho bin graphmode.
Nhu vy dung hng s DETECT chng nhung co th khoi dng duoc h thng
d hoa voi man hinh hin co theo mode co d phn giai cao nht ma con giup ta
xac dinh kiu man hinh dang su dung.

V d :
Chuong trinh duoi dy xac dinh kiu man hinh dang su dung :
#include graphics.h
#include stdio.h
main()

int mh0, mode;
initgraph(&mh,&mode,C:\\TC\\BI);
printI(\n ia tri so cua man hinh la : d,mh);
printI(\n ia tri so mode do hoa la : d,mode);
closegraph();
}
Nu chui dung d xac dinh driverpath la chui rng thi chuong trinh dich s tim
kim cac Iile diu khin d hoa trn thu muc chu ( Thu muc hin thoi ).

10.2. Cc hm d ho :


122
10.2.1. Mu v mu :
D}t mu nn :
D dt mau cho nn ta dung thu tuc sau :
void setbkcolor(int mau);
D}t mu dung v :
D dt mau v duong ta dung thu tuc sau :
void setcolor(int mau);
D}t mu (kiu) t v mu t :
D dt mu (kiu) t va mau t ta dung thu tuc sau :
void setIillstyle(int mu, int mau);
Trong ca ba truong hop mu xac dinh m cua mau.
Cac gia tri kha di cua mu cho boi bang duoi dy :
Bang cc gi tr| kha di cua mu
Tn hng ia tri s Mau hin thi
BACK 0 Den
BUE 1 anh da troi
REEN 2 anh la cy
CAN 3 anh lo
RED 4 Do
MAENTA Tim
BROWN 6 Nu
ITRA 7 am nhat
DARKRA 8 am dm
ITBUE 9 anh xa troi nhat
ITREEN 10 anh la cy nhat
ITCAN 11 anh lo nhat
ITRED 12 Do nhat
ITMAENTA 13 Tim nhat
EOW 14 Vang
WITE 16 Trng

Cac gia tri kha di cua mu cho boi bang duoi dy :
Bang cc gi tr| kha di cua mu


123
Tn hng ia tri s Kiu mu t
EMTI 0 T bng mu nn
SOIDI 1 T bng duong lin net
INEI 2 T bng duong --------
TSASI 3 T bng ///
SASI 4 T bng /// in dm
BKSASI T bng \\\ in dm
TBKSASI 6 T bng \\\
ATCI 7 T bng duong gach bong nhat
ATCI 8 T bng duong gach bong chu thp
INTEREAVEI 9 T bng duong dut qung
WIDEDOTI 10 T bng du chm thua
COSEDOTI 11 T bng du chm mau


Chn giai mu :
D thay di giai mau d duoc dinh nghia trong bang trn, ta su dung ham :
void setpalete(int sthutumau, int mau );
V d :
Cu lnh :
setpalete(0,lightcyan);
bin mau du tin trong bang mau thanh mau xanh lo nhat. Cac mau khac khng bi anh huong.
Ly giai mu hin thi :
am getcolor tra v mu d xac dinh bng thu tuc setcolor ngay truoc
no.
am getbkcolor tra v mu d xac dinh bng ham setbkcolor ngay truoc
no.

10.2.2. V v t mu :
Co th chia cac duong va hinh thanh bn nhom chinh :
Cung tron va hinh tron.
Duong gp khuc va da giac.
Duong thng.


124
inh chu nht.

10.2.2.1. Cung trn v dung trn :
Nhom nay bao gm : Cung tron, duong tron, cung elip va hinh quat.

Cung trn :
D v mt cung tron ta dung ham :
void arc(int x, int y, int gd, int gc, int r);
Trong do :
(x,y) la toa d tm cung tron.
gd la goc du cung tron(0 dn 360 d).
gc la goc cui cung tron (gd dn 360 d).
r la ban kinh cung tron .

V d :
V mt cung tron co tm tai (100,0), goc du la 0, goc cui la 180, ban kinh 30.
arc(100,0,0,180,30);
Dung trn :
D v duong tron ta dung ham :
void circle(int x, int y, int r);
Trong do :
(x,y) la toa d tm cung tron.
r la ban kinh duong tron.

V d :
V mt duong tron co tm tai (100,0) va ban kinh 30.
circle(100,0,30);

Cung elip
D v mt cung elip ta dung ham :
void ellipse(int x, int y, int gd, int gc, int xr, int yr);
Trong do :


12
(x,y) la toa d tm cung elip.
gd la goc du cung tron(0 dn 360 d).
gc la goc cui cung tron (gd dn 360 d).
xr la ban truc nm ngang.
yr la ban truc thng dung.

V d :
V mt cung elip co tm tai (100,0), goc du la 0, goc cui la 180, ban truc ngang 30,
ban truc dung la 20.
ellipse(100,0,0,180,30,20);

Hnh qut :
D v va t mau mt hinh quat ta dung ham :
void pieslice(int x, int y, int gd, int gc, int r);
Trong do :
(x,y) la toa d tm hinh quat.
gd la goc du hinh quat (0 dn 360 d).
gc la goc cui hinh quat (gd dn 360 d).
r la ban kinh hinh quat .

V d :
Chuong trinh duoi dy s v mt cung tron o goc phn tu thu nht, mt cung elip o goc
phn tu thu ba, mt duong tron va mt hinh quat quet tu 90 dn 360 d.
# include graphics.h
#include stdio.h
#include conio.h
main()

int md0,mode;
initgraph(&md,&mode,C:\\TC\\BI);
setbkcolor(BUE);
setcolor(EOW);
setIillstyle(SOIDI,RED);;


126
arc(160,0,0,90,4);
circle(160,10,4);
pieslice(480,10,90,360,4);
getch();
closegraph();
}

10.2.3. V dung gp khc v da gic :
V dung gp khc :
Mun v duong gp khuc di qua n dim : (x1,y1), (x2,y2), ...., (xn,yn) thi truoc ht ta
phai gan cac toa d (xi,yi) cho mt mang a kiu int nao do theo nguyn tc sau :
Toa d x1 gan cho a|0|
Toa d y1 gan cho a|1|
Toa d x2 gan cho a|2|
Toa d y2 gan cho a|3|
....
Toa d xn gan cho a|2n-2|
Toa d yn gan cho a|2n-1|
Sau do goi ham :
drawpoly(n,a);
Nu dim cui cung (xn,yn) trung voi dim du (x1,y1) thi ta nhn duoc mt duong gp
khuc khep kin.

T mu da gic :
ia su ta co a la mang d d cp dn trong muc trn, khi do ta goi ham :
Iillpoly(n,a);
s v va t mau mt da giac co dinh la cac dim (x1,y1), (x2,y2), ...., (xn,yn)

V d :
V mt duong gp khuc va hai duong tam giac.
#include graphics.h
#include stdio.h
#include conio.h


127
int poly1||,200,190,,100,300};
int poly2||20,200,390,,300,300};
int poly3||40,200,90,,00,300,40,200};
main()

int md0,mode;
initgraph(&md,&mode,C:\\TC\\BI);
setbkcolor(CAN);
setcolor(EOW);
setIillstyle(SOIDI,MAENTA);
drawpoly(3,poly1);
Iillpoly(3,poly2);
Iillpoly(4,poly3);
getch();
closegraph();
}

V dung thng :
D v duong thng ni hai dim bt ky co toa d (x1,y1) va (x2,y2) ta su dung ham sau :
void line(int x1, int y1, int x2, int y2);
Con chay d hoa giu nguyn vi tri.
D v duong thng ni tu dim con chay d hoa dn mt dim bt co toa d (x,y) ta su
dung ham sau :
void lineto(int x, int y);
Con chay s chuyn dn vi tri (x,y).
D v mt duong thng tu vi tri con chay hin tai ( gia su la dim x,y ) dn dim co toa
d (xdx,ydy) ta su dung ham sau :
void linerel(int dx, int dy);
Con chay s chuyn dn vi tri (xdx,ydy).

Di chuyn con chy d ho :
D di chuyn con chay dn vi tri (x,y), ta su dung ham sau :
void moveto(int x, int y);


128

Chn kiu dung :
am void setlinestyle(int kiuduong, int mu, int dday);
tac dng dn net v cua cac thu tuc v duong line, lineto,linerel , circle, rectangle (ham v hinh
chu nht, ta s hoc trong phn v min o duoi).
am nay s cho phep ta xac dinh ba yu t khi v duong thng, do la : Kiu duong, b
day va mu tu tao.
Dang duong do tham s kiu_dung xac dinh. Bang duoi dy cho cac gia tri kha di
cua kiu_dung :

Tn hng ia tri s Kiu duong
SOIDINE 0 Net lin
DOTTEDINE 1 Net chm
CENTERINE 2 Net chm gach
DASEDINE 3 Net gach
USERBITINE 4 Mu tu tao

B day cua duong v do tham s d_dy xac dinh,. bang duoi dy cho cac gia tri kha di
cua d_dy :
Tn hng ia tri s B day
NORMWIDT 1 B day binh thuong
TICKWIDT 3 B day gp ba
Mu tu tao : Nu tham s thu nht la USERBITINE thi ta co th tao ra mu duong
thng bng tham s mu. Vi du ta xet doan chuong trinh :
int pattern 0x1010;
setlinestile(USERBITINE,pattern,NORMWIDT);
line(0,0,100,200);
ia tri cua pattern trong h 16 la 1010, trong h 2 la :
0001 0000 0001 0000
Bit 1 s cho dim sang, bit 0 s lam tt dim anh.

V d :


129
Chuong trinh v mt duong gp khuc bng cac doan thng. Duong gp khuc di qua cac
dinh sau :
(20,20),(620,20),(620,180),(20,180) va (320,100)
#include graphics.h
#include stdio.h
#include conio.h
main()

int mh0, mode;
initgraph(&mh,&mode,C:\\TC\\BI);
setbkcolor(BUE);
setcolor(EOW);
setlinestyle(SOID-INE,0,TICKWIDT);
moveto(320,100); /* con chay o vi tri ( 320,100 ) */
line(20,20,620,20); /* con chay vn o vi tri ( 320,100 ) */
linerel(-300,80);
lineto(620,180);
lineto(620,20);
getch();
closegraph();
}

10.2.4. V dim, min :
V dim :
am :
void putpixel(int x, int y, int color);
s t dim (x,y) theo mu xac dinh boi color.

Hm :
unsigned getpixel(int x, int y);
s tra v s hiu mu cua dim anh o vi tri (x,y).

Ch :


130
Nu dim nay chua duoc t mau boi cac ham v hoc ham putpixel (ma chi moi duoc tao
mau nn boi setbkcolor) thi ham cho gia tri 0.

T min :
D t mau cho mt min nao do trn man hinh, ta dung ham sau :
void IloodIill(int x, int y, int border);
o dy :
(x,y) la toa d cua mt dim nao do goi la dim gieo.
Tham s border chua m cua mau.
Su hoat dng cua ham IloodIill phu thuc vao gia tri cua x,y,border va trang thai man hinh.
Khi trn man hinh co mt duong cong khep kin hoc duong gp khuc khep kin ma m mau cua
no bng gia tri cua border thi :
- Nu dim gieo (x,y) nm trong min nay thi min gioi han phia trong duong s duoc t
mau.
- Nu dim gieo (x,y) nm ngoai min nay thi min phia ngoai duong s duoc t mau.
Trong truong hop khi trn man hinh khng co duong cong nao nhu trn thi ca man hinh s
duoc t mau.

V d :
V mt duong tron mau do trn man hinh mau xanh. Toa d (x,y) cua dim gieo duoc
nap tu ban phim. Tuy thuc gia tri cu th cua x,y chuong trinh s t mau vang cho hinh tron hoc
phn man hinh bn ngoai hinh tron.
#include graphics.h
#include stdio.h
main()

int mhmode0, x, y;
printI(\nVao toa do x,y:);
scanI(dd,&x,&y);
initgraph(&mh,&mode,);
iI (graphresult ! grOk) exit(1);
setbkcolor(BUE);
setcolor(RED);


131
setIillstyle(11,EOW);
circle(320,100,0);
moveto(1,10);
IloodIill(x,y,RED);
closegraph();
}

10.2.5. Hnh ch nht :
am :
void rectangle(int x1, int y1, int x2, int y2);
s v mt hinh chu nht co cac canh song song voi cac canh cua man hinh. Toa d dinh trai trn
cua hinh chu nht la (x1,y1) va toa d dinh phai duoi cua hanh chu nht la (x2,y2).

am :
void bar(int x1, int y1, int x2, int y2);
s v va t mau mt hinh chu nht. Toa d dinh trai trn cua hinh chu nht la (x1,y1) va toa d
dinh phai duoi cua hanh chu nht la (x2,y2).

am :
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);
s v mt khi hp chu nht, mt ngoai cua no la hinh chu nht xac dinh boi cac toa d (x1,y1),
(x2,y2). inh chu nht nay duoc t mau thng qua ham setIillstyle . Tham s depth xac dinh s
dim anh trn b su cua khi 3 chiu. Tham s top co th nhn cac gia tri 1 hay 0 va khi 3
chiu tuong ung s co np hoc khng.







V d :
top1 top0


132
Chuong trinh duoi dy tao nn mt hinh chu nht, mt khi hinh chu nht va mt hinh
hp co np :
#include graphics.h
main()

int mhmode0;
initgraph(&mh,&mode,);
iI (graphresult ! grOk) exit(1);
setbkcolor(REEN);
setcolor(RED);
setIillstyle(COSEDOTI,EOW);
rectangle(,,300,160);
bar(3,17,300,340);
bar3d(320,100,00,340,100,1);
closegraph();
}

10.2.6. Cua s (Viewport) :
Thit lp viewport :
Viewport la mt vung chu nht trn man hinh d hoa. D thit lp viewport ta dung ham :
void setviewport(int x1, int y1, int x2, int y2, int clip);
trong do (x1,y1) la toa d goc trn bn trai, (x2,y2) la toa d goc duoi bn phai. Bn gia tri nay vi
th phai thoa mn :
0 x1 x2
0 y1 y2
Tham s clip co th nhn mt trong hai gia tri :
clip1 khng cho phep v ra ngoai viewport.
clip0 cho phep v ra ngoai viewport.

V d :
setviewport(100,0,200,10,1);
p nn mt vung viewport hinh chu nht co toa d goc trai cao la (100,0) va toa d goc phai
thp la (200,10) (la toa d truoc khi dt viewport).


133

Ch :
Sau khi lp viewport, ta co h toa d moi ma goc trn bn trai s co toa d (0,0).

Nhn din viewport hin hnh :
D nhn viewport hin thoi ta dung ham :
void getviewsetting(struct viewporttype *vp);
o dy kiu viewporttype d duoc dinh nghia nhu sau :
struct viewporttype

int leIt,top,right,bottom;
int clip;
};

Xa viewport :
Su dung ham :
void clearviewport(void);

Xo mn hnh, dua con chy v to d (0,0) cua mn hnh :
Su dung ham :
void cleardevice(void);

To d m duong :
Nho su dung viewport co th vit cac chuong trinh d hoa theo toa d m duong. Mun
vy ta thit lp viewport va cho clip bng 0 d co th v ra ngoai gioi han cua viewport.
Sau dy la doan chuong trinh thuc hin cng vic trn :
int xc,yc;
xcgetmaxx()/2;
ycgetmaxy()/2;
setviewport(xc,yc,getmaxx(),getmaxy(),0);
Nhu th, man hinh s duoc chia lam bn phn voi toa d m duong nhu sau :
hn tu trai trn : x m, y m.


134
x : tu -getmaxx()/2 dn 0.
y : tu -getmaxy()/2 dn 0.
hn tu trai duoi : x m, y duong.
x : tu -getmaxx()/2 dn 0.
y : tu 0 dn getmaxy()/2.
hn tu phai trn : x duong, y m.
x : tu 0 dn getmaxx()/2.
y : tu -getmaxy()/2 dn 0.
hn tu phai duoi : x duong, y duong.
x : tu 0 dn getmaxx()/2.
y : tu 0 dn getmaxy()/2.

V d :
Chuong trinh v d thi ham sin x trong h truc toa d m duong. oanh d x ly cac gia
tri tu -4 dn 4. Trong chuong trinh co su dung hai ham moi la settextustiIy va outtextxy ta s
d cp ngay trong phn sau.
#include graphics.h
#include conio.h
#include math.h
#deIine TE 20
#deIine TE 60
main()

int mhmodeDETECT;
int x,y,i;
initgraph(mh,mode,);
iI (graphresult!grOK ) exit(1);
setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);
setbkcolor(BUE);
setcolor(EOW);
line(-getmaxx()/2,0,getmaxx()/2,0);
line(0,-getmaxy()/2,0,getmaxy()/2,0);
settextustiIy(1,1);


13
setcolor(WITE);
outtextxy(0,0,(0,0));
Ior (i-400;i400;i)

xIloor(2*MI*i*TE/200);
yIloor(sin(2*MI*i/200)*TE);
putpixel(x,y,WITE);
}
getch();
closegraph();
}

10.3. Xu l vn ban trn mn hnh d ho :
Hin th| vn ban trn mn hnh d ho :
am :
void outtext(char *s);

cho hin chui ky tu ( do con tro s tro toi ) tai vi tri con tro d hoa hin thoi.
am :
void outtextxy(int x, int y,char *s);

cho hin chui ky tu ( do con tro s tro toi ) tai vi tri (x,y).

V d :
ai cach vit duoi dy :
outtextxy(0,0, Say EO);
va
moveto(0,0);
outtext( Say EO);

cho cung kt qua.

Su dng cc Fonts ch :


136
Cac onts chu nm trong cac tp tin *.CR trn dia. Cac onts nay cho cac kich thuoc va
kiu chu khac nhau, chung s duoc hin thi ln man hinh bng cac ham outtext va outtextxy. D
chon va nap onts ta dung ham :
void settextstyle(int Iont, int direction, int charsize);
Tham s Iont d chon kiu chu va nhn mt trong cac hng sau :
DEAUTONT0
TRIEONT1
SMAONT2
SANSSERIONT3
OTICONT4
Tham s derection d chon huong chu va nhn mt trong cac hng sau :
ORIZDIR0 vn ban hin thi theo huong nm ngang tu trai qua phai.
VERTDIR1 vn ban hin thi theo huong thng dung tu duoi ln trn.

Tham s charsize la h s phong to cua ky tu va co gia tri trong khoang tu 1 dn 10.
Khi charsize1, Iont hin thi trong hinh chu nht 8*8 pixel.
Khi charsize2 Iont hin thi trong hinh chu nht 16*16 pixel.
............
Khi charsize10, Iont hin thi trong hinh chu nht 80*80 pixel.
Cac gia tri do settextstyle lp ra s giu nguyn toi khi goi mt settextstyle moi.

V d :
Cc dong lnh :
settextstyle(3,VERTDIR,2);
outtextxy(30,30,ODS TRUST OU);
s hin thi tai vi tri (30,30) dong chu ODS TRUST OU theo chiu tu duoi ln trn, Iont chu
chon la SANSSERIONT va c chu la 2.

Dt v| tr hin th| cua cc xu k t cho boi outtext v outtextxy :
am settextustiIy cho phep chi dinh ra noi hin thi vn ban cua outtext theo quan h voi
vi tri hin tai cua con chay va cua outtextxy theo quan h voi toa d (x,y);
am nay co dang sau :
void settextustiIy(int horiz, int vert);


137
Tham s horiz co th la mt trong cac hng s sau :
ETTET0 ( Vn ban xut hin bn phai con chay).
CENTERTET ( Chinh tm vn ban theo vi tri con chay).
RITTET (Vn ban xut hin bn trai con chay).
Tham s vert co th la mt trong cac hng s sau :
BOTTOMTET0 ( Vn ban xut hin phia trn con chay).
CENTERTET1 ( Chinh tm vn ban theo vi tri con chay).
TOTET2 ( Vn ban xut hin phia duoi con chay).

V d :
settextustiIy(1,1);
outtextxy(100,100,ABC);
s cho dong chu ABC trong do dim (100,100) s nm duoi chu B.

B rng v chiu cao vn ban :
Chiu cao :
am :
textheight(char *s);
cho chiu cao ( tinh bng pixel ) cua chui do con tro s tro toi.

V d 1 :
Voi Iont bit map va h s phong dai la 1 thi textheight(A) ch gia tri la 8.

V d 2 :
#include stdio.h
#include graphics.h
main()

int mhmodeDETECT, y,size;
initgraph(mh,mode,C:\\TC\\BI);
y10;
settextustiIy(0,0);
Ior (size1;size;size)


138

settextstyle(0,0,size);
outtextxy(0,y,SACRIICE);
ytextheight(SACRIICE)10;
}
getch();
closegraph();
}

B rng :
am :
textwidth(char *s);
cho b rng chui ( tinh theo pixel ) ma con tro s tro toi dua trn chiu dai chui, kich thuoc Iont
chu, h s phong dai.


139
Mc lc
Gii thiu
Chuong 1
Cc khi nim co ban
1.1. Tp ky tu dung trong ngn ngu C
1.2. Tu khoa
1.3. Tn
1.4. Kiu du liu
1.4.1. Kiu ky tu (char)
1.4.2. Kiu nguyn
1.4.3. Kiu du phay dng
1.. Dinh nghia kiu bng TEDE
1..1. Cng dung
1..2. Cach vit
1.6. ng
1.6.1. Tn hng
1.6.2. Cac loai hng
1.6.2.1. ng int
1.6.2.2. ng long
1.6.2.3. ng int h 8
1.6.2.4. ng int h 16
1.6.2.. ng ky tu
1.6.2.. ng xu ky tu
1.7. Bin
1.8. Mang

Chuong 2
Cac lnh vao ra
2.1. Thm nhp vao thu vin chun
2.2. Cac ham vao ra chun - getchar() va putchar()
2.2.1. am getchar()
2.2.2. am putchar()
2.2.3. am getch()


140
2.2.4. am putch()
2.3. Dua kt qua ln man hinh - ham printI
2.4. Vao s liu tu ban phim - ham scanI
2.. Dua kt qua ra may in

Chuong 3
Biu thuc
3.1. Biu thuc
3.2. nh gan va biu thuc
3.3. Cac phep toan s hoc
3.4. Cac phep toan quan h va logic
3.. hep toan tng giam
3.6. Thu tu uu tin cac phep toan
3.7. Chuyn di kiu gia tri

Chuong 4
Cu truc co ban cua chuong trinh
4.1. oi chu thich
4.2. nh va khi lnh
4.2.1. nh
4.2.2. Khi lnh
4.3. Cu truc co ban cua chuong trinh
4.4. Mt s qui tc cn nho khi vit chuong trinh

Chuong 5
Cu truc diu khin
.1. Cu truc co diu kin
.1.1. nh iI-else
.1.2. nh else-iI
.2. nh nhay khng diu kin - toan tu goto
.3. Cu truc r nhanh - toan tu switch
.4. Cu truc lp
.4.1. Cu truc lp voi toan tu while va Ior


141
.4.1.1. Cu truc lp voi toan tu while
.4.1.2. Cu truc lp voi toan tu Ior :
.4.2. Chu trinh do-while
.. Cu lnh break
.6. Cu lnh continue

Chuong 6
am
6.1. Co so
6.2. am khng cho cac gia tri
6.3. am d qui
6.3.3. Mo du
6.3.2. Cac bai toan co th dung d qui
6.3.3. Cach xy dung ham d qui
6.3.4. Cac vi du v dung ham d qui
6.4. B tin su ly C

Chuong 7
Con tro
7.1. Con tro va dia chi
7.2. Con tro va mang mt chiu
7.2.1.hep toan ly dia chi
7.2.2. Tn mang la mt hng dia chi
7.2.3. Con tro tro toi cac phn tu cua mang mt chiu
7.2.4. Mang, con tro va xu ky tu
7.3. Con tro va mang nhiu chiu
7.3.1.hep ly dia chi
7.3.2. hep cng dia chi trong mang hai chiu
7.3.3. Con tro va mang hai chiu
7.4. Kiu con tro kiu dia chi, cac phep toan trn con tro
7.4.1. Kiu con tro va kiu dia chi
7.4.2. Cac phep toan trn con tro
7.4.3. Con tro kiu void


142
7.. Mang con tro
7.6. Con tro toi ham
7.6.1. Cach khai bao con tro ham va mang con tro ham
7.6.2. Tac dung cua con tro ham
7.6.3. Di cua con tro ham

Chuong 8
Cu truc
8.1. Kiu cu truc
8.2. Khai bao theo mt kiu cu truc d dinh nghia
8.3. Truy nhp dn cac thanh phn cu truc
8.4. Mang cu truc
8.. Khoi du mt cu truc
8.6. hep gan cu truc
8.7. Con tro cu truc va dia chi cu truc
8.7.1. Con tro va dia chi
8.7.2. Truy nhp qua con tro
8.7.3. hep gan qua con tro
8.7.4. hep cng dia chi
8.7.. Con tro va mang
8.8. Cu truc tu tro va danh sach lin kt

Chuong 9
Tp tin - Iile
9.1. Khai nim v tp tin
9.2. Khai bao su dung tp - mt s ham thuong dung khi thao tac trn tp
9.2.1. Khai bao su dung tp
9.2.2. Mo tp - ham Iopen
9.2.3. Dong tp - ham Iclose
9.2.4. Dong tt ca cac tp dang mo- ham Icloseall
9.2.. am sach vung dm - ham IIlush
9.2.6. am sach vung dm cua cac tp dang mo - ham IIlushall
9.2.7. Kim tra li Iile - ham Ierror


143
9.2.8. Kimtra cui tp - ham IeoI
9.2.9. Truy nhp ngu nhin - cac ham di chuyn con tro chi vi
9.2.9.1. Chuyn con tro chi vi v du tp - am rewind
9.2.9.2. Chuyn con tro chi vi tri cn thit - am Iseek
9.2.9.3. Vi tri hin tai cu con tro chi vi - am Itell
9.2.10. hi cac mu tin ln tp - ham Iwrite
9.2.11. Doc cac mu tin tu tp - ham Iread
9.2.12. Nhp xut ky tu
9.2.12.1. Cac ham putc va Iputc
9.2.12.2. Cac ham getc va Igettc
9.2.13. oa tp - ham unlink

Chuong 10
D hoa
10.1. Khoi dng d hoa
10.2. Cac ham d hoa
10.2.1. Mu va mau
10.2.2. V va t mau
10.2.3. V duong gp khuc va da giac
10.2.4. V dim, min
10.2.. inh chu nht
10.2.6. Cua s (Viewport)
10.3. Su ly vn ban trn man hinh d hoa


Bi tp.

hn thu nht : Nhom cac bai tap v tinh toan,ham va chu trinh .
Bi tp 1 :
Vit chuong trinh hin thi thap ascal :



144
ti liu tham khao
1. Cc ti liu ting Vit :
1.1. Ng Trung Vit - Ngn ngu lp trinh C va C - Bai giang- Bai tp - oi giai mu
NB giao thng vn tai 199
1.2. Vin tin hoc - Ngn ngu lp trinh C
a ni 1990
1.3. Vn Doanh - 101 thut toan va chuong trinh bng ngn ngu C

2. Cc ti liu ting Anh :
2.1. B. Kernighan and D. Ritchie - The C programming language
rentice all 1989
2.2. rogrammers guide Borland C Version 4.0
Borland International, Inc 1993
2.3. Bile - Nabaiyoti - TURBO C
The Waite roups UNI 1991





BI tp
Ngn ng lp trnh C

hn 1 : Nhom cac baI tp v tinh toan, ham va chu trinh .

BaI tp 1 :
Vit chuong trinh hin thi thap ASCA :
1
121
12321
1234321
12344321
123464321
12346764321
1234678764321
123467898764321
Vit chuong trinh hin thi thap dao nguoc.

BaI tp 2 :


14
Vit chuong trinh nhp ba s thuc. Kim tra xem ba s do co th la chiu dai cua ba canh
cua mt tam giac duoc khng Nu duoc thi tinh chu vi va din tich tam giac do.
BaI tp 3 :
Vit chuong trinh tinh ham s :

I(x) K
0

x
K
1
-----------------------------------------
x
K
2
------------------------
x
K
3
----------------------
x
K
4
---------------------

........
x
Kn
-1
-------------
Kn




Bai tp 4 :
Vit chuong trinh tinh tich hai ma trn C
mxn
A
mxn
* B
nxk
.

Bai tp :
Vit chuong trinh nhp vao mt dy s sau do tach dy nay thanh hai dy chi chua cac
s duong va chi chua cac s m. Tinh tng s phn tu cua mi dy sau do sp xp d
hai dy co gia tri giam dn.

Bai tp 6 :
Vit chuong trinh nhp vao mt ma trn A nxm. Tim gia tri cuc dai va cuc tiu cua cac
phn tu cua mang .

Bai tp 7 :
Trm tru,trm co
Tru dung n nm
Tru nm n ba
u khu tru gia
Ba con mt bo.

Tinh s tru mi loai .

Bai tp 8 :
Vua ga vua cho


146
Bo lai cho tron
Dung ba sau con
Mt trm chn chn .
Tinh s ga, s cho .

Bai tp 9 :

You might also like