You are on page 1of 201

HC VIN K THUT QUN S

KHOA CNG NGH THNG TIN


Bi ging
LP TRNH C BN
Bin son
Ha i Dng
Nguyn Mu Uyn
H Ni - 11/2010
2
MC LC
Bi 1 - TNG !"AN###################################################################################################################################################$
I. Gioi thiu................................................................................................................................................................7
1. Mc ch, Yu cu.............................................................................................................................................7
2. Ni dung mn hc.............................................................................................................................................8
3. Ti liu hc !" # h$m %h&'.........................................................................................................................1(
). *+nh h,c -nh gi- %. /u& mn hc..............................................................................................................1(
II. Bai toan va vic giai bai toan trn may tinh........................................................................................................10
1. 0h12ng "h-" 3ng /u- 4 gi&i m 5i '-n 6n m-7 nh...........................................................................1(
2. 8-c 9nh 5i '-n............................................................................................................................................11
3. :;u 6<c d= liu # >i&i hu!........................................................................................................................12
). :h12ng 6+nh...................................................................................................................................................17
III. Cng cu lp trinh................................................................................................................................................18
1. Ngn ng= l!" 6+nh..........................................................................................................................................18
2. :ng c l!" 6+nh............................................................................................................................................1?
3. :ng c l!" 6+nh @A#B:CC............................................................................................................................2(
IV. Tom tt ni dung bai hoc...................................................................................................................................21
V. Bai tp..................................................................................................................................................................22
Bi 2 - NGN NG% L&' T()NH C/C**#################################################################################################################2+
I. Gioi thiu..............................................................................................................................................................23
II. Mt s khai nim c ban.....................................................................................................................................24
1. D %E F...........................................................................................................................................................2)
2. TG %hH$............................................................................................................................................................2)
3. Ii4u d= liu.....................................................................................................................................................2J
). Tn, Di.n, hKng...............................................................................................................................................2L
J. Di4u h,c ........................................................................................................................................................3(
III. Cu truc mt chng trinh dn gian..................................................................................................................34
1. :;u 6<c chung................................................................................................................................................3)
2. Ih$i 5-' MN dng h1 #in..............................................................................................................................3J
3. Ih$i 5-' hKng, 5i.n, %i4u...............................................................................................................................3L
). M MO lnh 2n...............................................................................................................................................3L
J. :h< hch.........................................................................................................................................................3L
L. :h12ng 6+nh chnh.........................................................................................................................................3L
IV. Nhp/Xut du liu..............................................................................................................................................37
1. Nh!" d= liu G 5n "hm P *m Mc$nQRS........................................................................................................37
2. 8u; d= liu 6$ mn h+nh B *m "6inQRS.........................................................................................................3?
3. T d................................................................................................................................................................)1
V. Tom tt ni dung bai hoc.....................................................................................................................................42
VI. Bai tp................................................................................................................................................................42
Bi + - Bi ,-./ -n-0 MI T(12NG L&' T()NH 34 C5C LNH 34O/(A################################################6+
I. Lam quen mi trong Dev-C...........................................................................................................................43
1. IhUi ng @A#B:CC.......................................................................................................................................)3
2. >i$' din chnh...............................................................................................................................................)3
II. Thuc hin cac vi du sau.......................................................................................................................................43
1. Tnh din ch m $m gi-c.............................................................................................................................)3
2. Tnh 3ng, hiu, ch, h12ng cV$ 2 MO.............................................................................................................)J
III. Bai tp tu lam.....................................................................................................................................................46
Bi 6 - 7I8" KHI9N CH:N 34 L;'#####################################################################################################################6<
I. iu khin chon....................................................................................................................................................49
1. IhOi lnh.........................................................................................................................................................)?
2. :;u 6<c WX......................................................................................................................................................J1
3. :;u 6<c YZWT:*...........................................................................................................................................J)
II. iu khin lp......................................................................................................................................................58
1. :;u 6<c X[\..................................................................................................................................................J8
2. :;u 6<c Z*W]^.............................................................................................................................................L(
3. :;u 6<c @[ .. Z*W]^....................................................................................................................................L2
3
). ]nh 56A$% # c'ninuA...................................................................................................................................LJ
III. Tom tt ni dung bai hoc....................................................................................................................................65
IV. Bai tp................................................................................................................................................................65
Bi = - Bi ,-./ -n-0 7I8" KHI9N CH:N 34 L;'###########################################################################################>>
I. Thuc hin cac vi du sau.........................................................................................................................................66
1. >i&i "h12ng 6+nh 5!c 2..................................................................................................................................LL
2. T+m _Y:N]N cV$ h$i MO.................................................................................................................................L7
II. Bai tp tu lam.......................................................................................................................................................69
Bi > - M?NG@ CON T(A 34 BC" KD TE###########################################################################################################$2
I. Mang.....................................................................................................................................................................72
1. M&ng 6'ng :..................................................................................................................................................72
2. M&ng m chi`u...............................................................................................................................................72
3. M&ng nhi`u chi`u............................................................................................................................................77
II. Con tro.................................................................................................................................................................80
1. Ih$i 5-' # MN dng 5i.n c'n 6a ..................................................................................................................8(
2. :'n 6a # m&ng .............................................................................................................................................8J
3. :'n 6a # h$m MO h+nh h,c cV$ hm ..........................................................................................................8?
III. Xu ky tu............................................................................................................................................................90
1. Ih$i 5-'..........................................................................................................................................................?(
2. :-c h$' -c 6n chubi %E F .........................................................................................................................?1
IV. Tom tt ni dung bai hoc...................................................................................................................................96
V. Bai tp..................................................................................................................................................................96
Bi $ - Bi ,-./ -n-0 M?NG@ CON T(A 34 BC" KD TE ################################################################################<$
I. Thuc hin cac vi du sau.........................................................................................................................................97
1. T+m "hn N lcn nh; cV$ m&ng......................................................................................................................?7
2. ];7 Tn G h n ng1di Ti...........................................................................................................................?8
II. Bai tp tu lam.....................................................................................................................................................100
1. M&ng.............................................................................................................................................................1((
2. :'n 6a..........................................................................................................................................................1(1
3. 8eu %E F.......................................................................................................................................................1(1
Bi F - H4M 34 CG" T(HC CH1ING T()NH#################################################################################################10+
I. T chuc chng trinh..........................................................................................................................................103
1. T d..............................................................................................................................................................1(3
2. :;u 6<c ch12ng 6+nh...................................................................................................................................1()
3. *m fe7 dFng Mgn.........................................................................................................................................1(7
II. Ham do ngoi dung dinh nghia.........................................................................................................................107
1. Ih$i 5-' # 9nh nghh$ *m........................................................................................................................1(8
2. ]di gi *m..................................................................................................................................................11(
3. *m #ci Oi mic 9nh...................................................................................................................................111
). Ih$i 5-' hm 6jng n.................................................................................................................................112
J. T6u7`n h$m MO..............................................................................................................................................113
L. *m # m&ng................................................................................................................................................11?
III. Con tro ham......................................................................................................................................................125
1. Ih$i 5-'........................................................................................................................................................12L
2. YN dng c'n 6a hm.....................................................................................................................................12L
3. M&ng c'n 6a hm.........................................................................................................................................127
IV. qui...............................................................................................................................................................128
1. Ih-i nim......................................................................................................................................................128
2. ]c" c-c 5i '-n gi&i 1kc 5Kng /ui.......................................................................................................13(
3. :-c # d.......................................................................................................................................................13(
V. Tom tt ni dung bai hoc...................................................................................................................................132
VI. Bai tp..............................................................................................................................................................133
Bi < - Bi ,-./ -n-0 H4M 34 CG" T(HC CH1ING T()NH######################################################################1+6
I. Thuc hin cac vi du sau.......................................................................................................................................134
1. 8-c 9nh #9 6 12ng Oi cV$ 1 i4m #ci $m gi-c lD:...............................................................................13)
2. Ti. hm .m MO G cV$ m feu %E F..........................................................................................................13J
II. Bai tp tu lam.....................................................................................................................................................136
4
Bi 10 - CG" T(HC J% LI" JO NG12I JKNG TE 7LNH NGHMA############################################################1+F
I. Cu truc du liu do ngoi dung tu dinh nghia....................................................................................................138
1 Ih-i nim ......................................................................................................................................................138
2. Ih$i 5-' 5i.n c;u 6<c .................................................................................................................................1)1
3. :-c h$' -c 6n 5i.n %i4u c;u 6<c ............................................................................................................1)1
). :'n 6a c;u 6<c ...........................................................................................................................................1)3
J. :;u 6<c #ci hnh "hn %i4u 5i ..................................................................................................................1)7
L. :eu lnh 7"AdAQ ...........................................................................................................................................1)8
7. *m MimA'QRS .................................................................................................................................................1)8
II. Ngn xp............................................................................................................................................................148
1. Ih-i nim......................................................................................................................................................1)?
2. :i i ngnn f." MN dng m&ng....................................................................................................................1)?
3. :i i ngnn f." MN dng c'n 6a lin %.....................................................................................................1J1
). M MO ,ng dng cV$ ngnn f.".....................................................................................................................1J2
III. Hang doi...........................................................................................................................................................154
1. Ih-i nim......................................................................................................................................................1J)
2. :i i hng ki MN dng m&ng....................................................................................................................1JJ
3. :i hng ki MN dng c'n 6a........................................................................................................................1JL
). M MO ,ng dng cV$ hng ki......................................................................................................................1J7
IV. Kiu hop...........................................................................................................................................................158
1. Ih$i 5-' .......................................................................................................................................................1J8
2. T6u7 c!" ......................................................................................................................................................1J8
V. Kiu lit k........................................................................................................................................................159
VI. Tom tt ni dung bai hoc.................................................................................................................................159
VII. Bai tp.............................................................................................................................................................160
Bi 11 - Bi ,-./ -n-0 CG" T(HC J% LI" JO NG12I JKNG TE 7LNH NGHMA##################################1>1
I. Thuc hin cac vi du sau.......................................................................................................................................161
1. Di4u dion # hFc hin c-c "hp" '-n "hen MO..............................................................................................1L1
2. :hu74n 5i4u h,c 6ung O #` dqng h!u O....................................................................................................1L3
II. Bai tp tu lam.....................................................................................................................................................166
Bi 12 - L4M 3IC 3NI OILP###############################################################################################################################1>F
I. Mt s khai nim................................................................................................................................................168
II. Cac thao tac trn tp tin ....................................................................................................................................169
1. Ih$i 5-' 5i.n !" in ....................................................................................................................................1L?
2. MU !" in .....................................................................................................................................................1L?
3. rHng !" in ..................................................................................................................................................17(
). Ii4m 6$ .n cuOi !" in h$7 ch1$s ............................................................................................................17(
J. @i chu74n c'n 6a !" in #` u !" in B *m 6AtindRS .............................................................................17(
III. Truy cp tp tin vn ban ..................................................................................................................................171
1. >hi d= liu ln !" in #nn 5&n .....................................................................................................................171
2. rc d= liu G !" in #nn 5&n .....................................................................................................................172
3. T d..............................................................................................................................................................173
IV. Truy cp tp tin nhi phn ................................................................................................................................174
1. >hi d= liu ln !" in nh9 "hen ...................................................................................................................17)
2. rc d= liu G !" in nh9 "hen ....................................................................................................................17J
3. T d .............................................................................................................................................................17J
V. Tom tt ni dung bai hoc...................................................................................................................................178
VI. Bai tp..............................................................................................................................................................178
Bi 1+ - 7Q H:A######################################################################################################################################################1$<
I. Khoi dng d ho................................................................................................................................................179
II. Cac ham d ho.................................................................................................................................................182
1. Muu # mu...................................................................................................................................................182
2. Tv # mu 1dng 6wn...............................................................................................................................18)
3. Tv 1dng g;" %h<c # $ gi-c......................................................................................................................18J
). Tv i4m, mi`n................................................................................................................................................188
J. *+nh ch= nh!................................................................................................................................................18?
L. :N$ M3 RTiAt"'6S.........................................................................................................................................1?(
III. Xu ly vn ban trn man hinh d ho................................................................................................................191
1. *i4n h9 #nn 5&n 6n mn h+nh x h'q.........................................................................................................1?1
5
2. YN dng c-c X'nM ch=..................................................................................................................................1?2
3. D` 6ng # chi`u c$' cV$ % F......................................................................................................................1?3
IV. Hiu ung hot hinh d hoa...............................................................................................................................194
V. Tom tt ni dung bai hoc...................................................................................................................................195
VI. Bai tp..............................................................................................................................................................196
Bi 16 - Bi ,-./ -n-0 L4M 3IC 3NI OILP 34 7Q H:A#############################################################################1<$
I. Thuc hin cac vi du sau.......................................................................................................................................197
1. T d 1 ..........................................................................................................................................................1?7
2. T d 2 ..........................................................................................................................................................1?8
II. Bai tp tu lam.....................................................................................................................................................198
Bi 1= - N T&'########################################################################################################################################################200
Bai 1 - Tng quan...................................................................................................................................................200
Bai 2. Ngn ngu lp trinh C/C ..........................................................................................................................200
Bai 3 - Bai thuc hanh: Mi trong lp trinh va cac lnh vao/ra ............................................................................200
Bai 4 - iu khin Chon va Lp.............................................................................................................................200
Bai 5 - Bai thuc hanh: Cac cu truc diu khin......................................................................................................200
Bai 6 - Mang, Con tro va xu ky tu .......................................................................................................................200
Bai 7 - Bai thuc hanh: Mang, Con tro va Xu ky tu .............................................................................................200
Bai 8 - Cu truc du liu do ngoi dung tu dinh nghia ...........................................................................................200
Bai 9 - Bai thuc hanh: Cu truc du liu do ngoi dung tu dinh nghia ..................................................................200
Bai 10 - Ham .........................................................................................................................................................200
Bai 11 - Bai thuc hanh: Ham .................................................................................................................................201
Bai 12 - Lam vic voi File......................................................................................................................................201
Bai 13 - Hoa.....................................................................................................................................................201
Bai 14 - Bai thuc hanh: Lam vic voi File va Thut toan nng cao.......................................................................201
6
Bi 1 - TNG QUAN
Ni RSng Ti -U/
W. >ici hiu
1. Mc ch, Yu cu
2. Ni dung mn hc
3. Ti liu hc !" # h$m %h&'
). *+nh h,c -nh gi- %. /u& mn hc
WW. Di '-n # #ic gi&i 5i '-n 6n m-7 nh
1. 8-c 9nh 5i '-n
2. :;u 6<c d= liu # >i&i hu!
3. :h12ng 6+nh
WWW. :ng c l!" 6+nh
1. Ngn ng= l!" 6+nh
2. :ng c l!" 6+nh
3. :ng c l!" 6+nh @A#B:CC
WT. Di !"
I. Gii thiu
1. Mc ch, Yu cu
Mc ch cua mn hoc la cung cp cho sinh vin nhung kin thuc c ban v k thut lp
trinh noi chung va k nng su dung cng cu lp trinh C/C trong vic giai quyt bai
toan bng chng trinh phn mm trn may tinh.
Kt thuc mn hoc sinh vin doc trang bi nhung kin thuc v:
- Cach thuc giai quyt mt bai toan trn may tinh;
- Cng cu, kim thuc v vic thut toan hoa bai toan;
- Ngn ngu lp trinh C/C;
- Mt s cu truc du liu va giai thut din hinh.
Yu cu di voi sinh vin
- Co hiu bit c ban v cu truc may tinh;
- Co hiu bit c ban v h diu hanh;
- Bit su dung cac phn mm h thng trong vic quan ly tai nguyn, sao
chep/copy du liu;
- Bit su dung cac phn mn ung dung nh cng cu son thao vn ban, truy cp
internet, web.
- Nghe giang va lam bai tp.
7
2. Ni dung mn hc
Cu truc chng trinh: 32 tit ly thuyt, 24 tit thuc hanh, 4 tit n tp, tng 60 tit. Chi
tit ni dung chng trinh doc cho nh bang sau:
STT Bi/Ni dung S tit
1
TVng WSXn
I. Gioi thiu
II. Bai toan va vic giai bai toan trn may tinh
III. Cng cu lp trinh
IV. Tom tt ni dung bai hoc
V. Bai tp
4
2
NgYn ngZ [\] ,^_n- C/C**
I. Gioi thiu
II. Mt s khai nim c ban
III. Cu truc chng trinh dn gian trong C
IV. Nhp/Xut du liu
V. Tom tt ni dung bai hoc
VI. Bai tp
4
3
Bi ,-./ -n-0 MYi ,^`ang [\] ,^_n- b /c/ [dn- bo/^X
I. Lam quen voi mi trong lp trinh Dev-C
II. Thuc hin cac vi du
III. Bai tp tu lam
4
4
7ieS f-ign C-Un b Lh]
I. iu khin chon
II. iu khin lp
III. Tom tt ni dung bai hoc
IV. Bai tp
4
5
Bi ,-./ -n-0 Cc/ /iS ,^j/ kieS f-ign
I. Thuc hin cac vi du
II. Bai tp tu lam
4
6
Mng@ Con ,^l b BmS fn ,.
I. Mang
II. Con tro
III. Xu ky tu
IV. Tom tt ni dung bai hoc
V. Bai tp
4
8
7
Bi ,-./ -n-0 Mng@ Con ,^l b BmS fn ,.
I. Thuc hin cac vi du
II. Bai tp tu lam
4
8
CiS ,^j/ RZ [idS Ro ng`ai Rong ,. kpn- ng-qX
I. Cu truc du liu do ngoi dung tu dinh nghia
II. Kiu ngn xp
III. Kiu hang doi
IV. Tom tt ni dung bai hoc
V. Bai tp
4
9
Bi ,-./ -n-0 CiS ,^j/ RZ [idS Ro ng`ai Rong ,. kpn- ng-qX
I. Thuc hin cac vi du
II. Bai tp tu lam
4
10
Hr
I. Khai nim
II. Ham tu to
III. Truyn tham s cho ham
IV. K thut d qui
V. Tom tt ni dung bai hoc
VI. Bai tp
4
11
Bi ,-./ -n-0 Hr
I. Thuc hin cac vi du
II. Bai tp tu lam
4
12
Lr bid/ bsi Oi[t
I. Mt s khai nim
II. Cac thao tac trn tp tin
III. Truy cp tp tin vn ban
IV. Truy cp tp tin nhi phn
V. Tom tt ni dung bai hoc
VI. Bai tp
4
13
7u -UX
I. Khoi dng ch d d hoa
II. Cac ham d hoa
III. Xu ly vn ban
IV. Tom tt ni dung bai hoc
V. Bai tp
4
14
Bi ,-./ -n-0 Lr bid/ bsi Oi[t b 7u -UX
I. Thuc hin cac vi du
II. Bai tp tu lam
4
15
n ,\]
4
9
3. Ti Iiu hc tp v tham kho
1. Ha i Dng, Nguyn Mu Uyn, Tp Bai giang Lp trinh co ban, HVKTQS
2010;
2. Trn uc Huyn, Phng phap giai cac bai toan trong tin hoc, Nha xut ban giao
duc 1997;
3. ao Thanh Tinh, Ha i Dng, Tin hoc di cng, Hoc vin KTQS, 2003;
4. Xun Li, Cu truc du liu va giai thut, NXB Giao duc, 1997;
5. Robert Sedgewick, Algorithns in C, Addison-Wesley 1992;
6. Niklaus Wirth Ban dich cua Nguyn Quc Cong, :;u 6<c d= liu C >i&i hu!
y :h12ng 6+nh, , NXB KHKT, 2001;
7. Giao trinh Tin Hoc i Cng A, Nguyn Vn Linh, Khoa Cng Ngh Thng
Tin, i hoc Cn Th, 1991.
8. Giao trinh ly thuyt va bai tp ngn ngu C; Nguyn inh T, Hoang uc Hai, Nha
xut ban Giao duc, 1999.
9. C - Tham khao toan din, Nguyn Cn, Nha xut ban ng Nai, 1996.
10. Giup tu hoc Lp Trinh voi ngn ngu C, V Vn Vin, Nha xut ban ng Nai,
2002.
11. The C Programming Language, Brain W. Kernighan & Dennis Ritchie, Prentice
Hall Publisher, 1988.
4. Hnh thc nh gi kt qu mn hc
Thang dim 10, cac thanh phn dim doc xac dinh trn cac ni dung sau:
STT Ni dung %
1 Chuyn cn 10
2 Thong xuyn: Kim tra truc tip trong gio thuc hanh di voi tt
ca cac sinh vin
20
3 Thi kt thuc mn: Thi vn dap 70
Tng cng 100
II. Bi ton v vic gii bi ton trn my tnh
1. Phuong php tng qut gii mt bi ton trn my tnh
giai mt bai toan trn may tinh cn thuc hin cac boc sau:
1. Xac dinh bai toan;
2. Xac dinh cu truc du liu d m ta bai toan;
10
3. Xy dung thut toan;
4. Son thao vn ban chng trinh, kim tra va hoan thin chng trinh.
2. Xc [nh bi ton
Khi qut v bi ton
Trong qua trinh tn ti va phat trin, moi ca nhn lun phai giai quyt nhiu bai toan dt
ra trong cuc sng. Co th noi cuc sng la mt chui cac bai toan ma ta phai di du d
giai quyt.
Theo nhiu nha nghin cuu thi moi bai toan du co th din dt theo mt s d chung nh
sau:
A vw B (*)
trong do:
- A la gia thit, diu kin ban du, thng tin d cho, d bit;
- B la kt lun, la muc tiu cn dt hoc cai phai tim, phai lam ra khi kt thuc bai
toan;
- la suy lun, giai phap cn xac dinh hoc chui cac thao tac cn thuc hin d co
doc kt qua B t cai d co A.
Xc nh bi ton
Theo s d trn thi vic xac dinh bai toan co nghia la xac dinh A, B va nu co th thi xac
dinh lun ca cac boc thuc hin d di doc t A dn B.
Bi ton trn my tnh
Tng tu nh (*), va
- A goi la du vao (INPUT);
- B goi la du ra (UTPUT);
- la CHNG TRNH M TNH cho kt qua B voi du vao A.
Kh khn
Vic xac dinh mt bai toan trn may tinh thong gp kho khn sau:
- Thng tin v A, B thong khng r rang va khng dy du;
- Thng bao v diu kin dt ra cho cach giai () thong khng doc nu ra mt
cach minh bch;
! ": Hy vit chng trinh cho phep giai phng trinh bc 2.
A , B
! #: Gia su ngoi A co mt s tin X dem gui tit kin, li xut thang la L hoi rng
sau T thang thi A co bao nhiu tin bit rng cu 3 thang thi tin li doc cng vao gc.
! $: Bai toan 8 hu - Hy tim cach dt 8 con hu trn mt ban co vua sao cho khng
co qun hu nao co th n qun hu khac.
! %: Cho dy s a1, a2, ..., an hy sp xp dy trn theo thu tu giam dn.
! &: Hy xy dung h thng quan ly h s va kt qua hoc tp cua sinh vin.
11
...
A , B
'h(n )*t qu+n tr,n-
- Vic xac dinh bai toan la rt rt quan trong, no anh hong toi cach thuc va cht
long cua vic giai quyt bai toan;
- Mt bai toan cho du doc din dt chi i., 6z 6ng vn nn gia dinh la phn lon
thng tin v A, B la tim n trong du ngoi giai. Thng tin v A hoc B thong
ch la biu tong goi nho dn cac thng tin tim n.
- Boc du tin d xac dinh mt bai toan la phai phat biu li bai toan mt cach
chinh xac theo ngn ngu cua ring minh vi do chinh la cach tip cn bai toan, hiu
bai toan.
- Boc tip la tim hiu thng tin Input A, utput B va cac mi lin h giua chung;
- Nn xet mt vai trong hop cu th d thng qua do hiu doc ca bai toan , thy r
doc cac thao tac phai lam. Thuc t cho thy co nhung bai toan trong tin hoc ch
co th m ta doc thng qua cac vi du (nh: ).
3. Cu trc d Iiu v Gii thut
./u tr0c !1 2i3u
- Trong khoa hoc may tinh, /iS ,^j/ RZ [idS la mt cach t chuc lu tru va truy cp
du liu trong may tinh sao cho no co th doc su dung mt cach hiu qua (va phu
thuc ca vao cng cu lp trinh).
- Vi du (trong C): Mang (Array), Con tro (Pointer), Xu ky tu (String), File, Stack,
Queue
- Thng thong, mt cu truc du liu doc chon cn thn s cho phep thuc hin
thut toan hiu qua hn.
- Vic chon cu truc du liu thong bt du t chon mt cu truc du liu tru tong.
Mt cu truc du liu doc thit k tt cho phep thuc hin nhiu phep toan, su dung
cang it tai nguyn, thoi gian xu ly va khng gian b nho cang tt.
- Cac cu truc du liu doc trin khai bng cach su dung cac kiu du liu, cac tham
chiu va cac phep toan trn do doc cung cp boi mt ngn ngu lp trinh.
4hu(t ton
- T-S\, ,ocn , cn goi la gii ,-S\,, la mt tp hop huu hn cua cac ch thi hay
phng cach doc dinh nghia r rang cho vic hoan tt mt s su vic t mt
trng thai ban du cho troc; khi cac ch thi nay doc ap dung trit d thi s dn
dn kt qua sau cung nh d du doan.
- Thut toan la mt b cac qui tc hay qui trinh cu th nhm giai quyt mt vn d
trong mt s boc huu hn, hoc nhm cung cp mt kt qua t mt tp hop cua
cac du kin da vao.
12
! ": Gia su co hai binh A va B dung hai loi cht long khac nhau, A chua dung dich
Da, B chua dung dich Db. Giai thut d di dung dich Da vao binh B va Db vao A la:
Yu cu "h&i cH hm m 5+nh h, 5$ gi l 5+nh :.
Boc 1: dung dich Db vao binh C;
Boc 2: dung dich Da vao binh B;
Boc 3: dung dich Db vao binh A
! #: Mt trong nhung giai thut tim oc chung lon nht cua hai s a va b la:
Boc 1: Nhp vao hai s a va b.
Boc 2: So sanh 2 s a,b chon s nho nht gan cho UCLN.
Boc 3: Nu hai s a va b chia ht cho UCLN thi
1 Thuc hin boc 5.
Boc 4: Giam UCLN mt dn vi va quay li boc 3
Boc 5: In UCLN - Kt thuc.
M5t thu(t ton c cc tnh ch/t 6+u7
- Tnh chnh f-c: d dam bao kt qua tinh toan hay cac thao tac ma may tinh thuc
hin doc la chinh xac.
- Tnh 6z 6ng: Thut toan phai doc th hin bng cac cu lnh minh bch; cac cu
lnh doc sp xp theo thu tu nht dinh.
- Tnh %h-ch /u$n: Mt thut toan du doc vit boi nhiu ngoi trn nhiu may tinh
vn phai cho kt qua nh nhau.
- Tnh "h3 dng: Thut toan khng ch ap dung cho mt bai toan nht dinh ma co
th ap dung cho mt lop cac bai toan co du vao tng tu nhau.
- Tnh %. h<c: Thut toan phai gm mt s huu hn cac boc tinh toan.
4r8nh t9 th9c hi3n cc b:;c c<+ thu(t ton
Giai thut doc thit k theo ba cu truc suy lun c ban sau dy:
1# TSxn ,. yztWStn,iX[{0 Cac cng vic doc thuc hin mt cach tun tu, cng
vic nay ni tip cng vic kia.
2# CiS ,^j/ [.X /-Un yzt[t/,ion{ 0 Lua chon mt cng vic d thuc hin cn cu
vao mt diu kin nao do. Co mt s dng nh sau:
Cu truc 1: Nu diu kin (dung) thi thuc hin cng vic
Cu truc 2: Nu diu kin (dung) thi thuc hin cng vic 1, ngoc
li (diu kin sai) thi thuc hin cng vic 2
Cu truc 3: Trong hop i thuc hin cng vic i
+# CiS ,^j/ [h] y(t]tX,ing{0 Thuc hin lp li mt cng vic khng hoc nhiu
ln cn cu vao mt diu kin nao do. Co hai dng nh sau:
Lp xac dinh: la loi lp ma khi vit chng trinh, ngoi lp trinh d
13
xac dinh doc cng vic s lp bao nhiu ln.
Lp khng xac dinh: la loi lp ma khi vit chng trinh ngoi lp trinh
cha xac dinh doc cng vic s lp bao nhiu ln. S ln lp s doc
xac dinh khi chng trinh thuc thi.
Bi=u !i>n thu(t -i?i
NgYn ngZ ,. n-in0 Ngn ngu tu nhin la ngn ngu cua chung ta dang su dung, chung
ta co th su dung ngn ngu tu nhin d m ta giai thut ging nh cac vi du o trn.
!: Ta co giai thut giai phng trinh bc nht dng 0 = + 5 $f nh sau:
Boc 1: Nhn gia tri cua cac tham s a, b
Boc 2: Xet gia tri cua a xem co bng 0 hay khng
Nu a0 thi lam boc 3, nu a khac khng thi lam boc 4.
Boc 3: (a bng 0) Nu b bng 0 thi ta kt lun phng trinh v s nghim,
nu b khac 0 thi ta kt lun phng trinh v nghim.
Boc 4: ( a khac 0) Ta kt lun phng trinh co nghim x-b/a
L`S ku ,-S\, ,ocn0 Ngn ngu s d (lu d) la mt ngn ngu dc bit dung d m ta
giai thut bng cac s d hinh khi. Mi khi qui dinh mt hanh dng nh m ta o hinh
trn. Vi du: So sanh 2 s.
14
Gi r|0 (ting Anh: 0MAud'c'dA, xut phat t chu pseudo va code) la mt ban m ta giai
thut ngn gon va khng chinh thuc, trong do su dung nhung quy oc co cu truc cua
mt s ngn ngu lp trinh (thong la Pascal) nhng thong bo di nhung chi tit khng
cn thit d giup hiu r giai thut hn.
!0 Thut giai phng trinh bc 2
Vo: a,b,c
Ra: Kt lun v nghim
BEGIN
Delta: = b*b - 4*a*c;
If Delta=0 Then
Phuong trnh c nghim kp x=-b/(2*a);
else
begin
if Delta<0 then
Phuong trnh V nghim
Else
Begin
Phuong trnh c 2 nghim
x1=(-b+sqrt(Delte))/(2*a)
x2=(-b+sqrt(Delte))/(2*a)
end
end
END.
M5t 6@ v ! khc v thu(t ton v bi=u !i>n thu(t ton
T d 1{ :n #i. ch12ng 6+nh ch' m-7 nh M$' ch' %hi hFc hin ch12ng 6+nh H, m-7
nh 7u cu ng1di MN dng ch12ng 6+nh nh!" #' c-c MO hqng cV$ 3ng RnS| nh!" #'
d}7 c-c MO hqng $
i
cV$ 3ng. Y$u H, m-7 nh Mv hFc hin #ic nh 3ng c-c MO $
i
n7 #
in %. /u& cV$ 3ng nh 1kc.
15
Yu cu{ Tnh 3ng n MO Yy$
1
C $
2
C$
3
C......C$
n
.
:hi i. gi&i hu! 1kc m & 5Kng ngn ng= F nhin nh1 M$u{
B D1cc 1{ Nh!" MO c-c MO hqng n.
B D1cc 2{ :h' Yy( Rl1u 6= MO ( 6'ng YS
B D1cc 3{ :h' iy1 Rl1u 6= MO 1 6'ng iS
B D1cc ){ Ii4m 6$ n.u i~yn h+ hFc hin 51cc J, ng1kc lqi hFc hin 51cc 8.
B D1cc J{ Nh!" $
i
B D1cc L{ :h' YyYC$
i
Rl1u 6= gi- 69 Y C $
i
6'ng YS
B D1cc 7{ Tnng i ln 1 2n #9 # /u$7 lqi 51cc ).
B D1cc 8{ Wn Y # %. h<c ch12ng 6+nh.
T d 2{ Ti. ch12ng 6+nh ch' "hp" nh!" #' 2 gi- 69 $, 5 m$ng E nghh$ l c-c h MO $,
5 cV$ "h12ng 6+nh 5!c nh;. @F$ #' c-c gi- 69 $, 5 H ch' 5i. nghim cV$ "h12ng
6+nh 5!c nh; $f C 5 y (.
M & gi&i hu! 5Kng ngn ng= F nhin{
B D1cc 1{ Nh!" 2 MO $ # 5
B D1cc 2{ N.u $ y ( h+ hFc hin 51cc 3, ng1kc lqi hFc hin 51cc )
B D1cc 3{ N.u 5y( h+ hng 5-' "h12ng 6+nh # MO nghim # %. h<c ch12ng
6+nh, ng1kc lqi hng 5-' "h12ng 6+nh # nghim # %. h<c ch12ng 6+nh.
B D1cc ){ Thng 5-' nghim cV$ "h12ng 6+nh l P5$ # %. h<c.
T d 3{ Ti. ch12ng 6+nh ch' "hp" nh!" #' 1 MO n, M$u H ln l1k nh!" #' n gi- 69
$
1
, $
2
,,$
n
. *}7 +m # in 6$ gi- 69 lcn nh; 6'ng n MO $
1
, $
2
, , $
n
.
M & gi&i hu! 5Kng ngn ng= F nhin{
B D1cc 1{ Nh!" MO n
B D1cc 2{ Nh!" MO h, nh; $
1
B D1cc 3{ >-n m$fy$
1
B D1cc ){ >-n iy2
B D1cc J{ N.u i~yn h+ hFc hin 51cc L, ng1kc lqi hFc hin 51cc ?
B D1cc L{ Nh!" $
i
B D1cc 7{ N.u m$f ~ $
i
h+ g-n m$fy$
i
.
B D1cc 8{ Tnng i ln m 2n #9 # /u$7 lqi 51cc J
B D1cc ?{ Wn m$f B %. h<c
T d ){ Ti. ch12ng 6+nh ch' "hp" nh!" #' 1 MO n, M$u H ln l1k nh!" #' n gi- 69
$
1
, $
2
,,$
n
. Y" hA' h, F nng dn m d}7 n MO $
1
, $
2
,...$
n
nHi 6n. :H 6; nhi`u gi&i
hu! 4 gi&i /u7. 5i '-n n7. 0hn 6+nh 57 d1ci e7 l m "h12ng "h-".
>i& MN $ } nh!" #' m-7 d}7 n MO $
1
, $
2
,..., $
n
. Tic M" f." d}7 MO n7 6&i /u$ RnB
1S ln{
- ]n 1{ Y' M-nh "hn N u in #ci ; c& c-c "hn N ,ng M$u "hn N u in.
N.u cH "hn N n' nha h2n "hn N u in h+ 3i chb "hn N u in #ci
"hn N nha h2n H. Y$u ln 1, $ 1kc "hn N u in l "hn N nha nh;.
- ]n 2{ Y' M-nh "hn N h, 2 #ci ; c& c-c "hn N ,ng M$u "hn N h, 2. N.u
cH "hn N n' nha h2n "hn N h, 2 h+ 3i chb "hn N h, 2 #ci "hn N nha
h2n H. Y$u ln 2, $ 1kc "hn N u in # "hn N h, 2 l <ng #9 6 cV$ nH
%hi M" f.".
-
- ]n RnB1S{ Y' M-nh "hn N h, RnB1S #ci "hn N ,ng M$u "hn N RnB1S l "hn
16
N h, n. N.u "hn N h, n nha h2n "hn N h, RnB1S h+ 3i chb 2 "hn N n7.
Y$u ln h, RnB1S, $ 1kc d$nh M-ch gxm n "hn N 1kc M" h, F.
M & gi&i hu! 5Kng ngn ng= F nhin{
B D1cc 1{ >-n iy1
B D1cc 2{ >-n yiC1
B D1cc 3{ N.u i ~ynB1 h+ hFc hin 51cc ), ng1kc lqi hFc hin 51cc 8
B D1cc ){ N.u ~yn h+ hFc hin 51cc J, ng1kc lqi h+ hFc hin 51cc 7.
B D1cc J{ N.u $
i
$

h+ h'-n 3i $
i
# $

ch' nh$u Rn.u %hng h+ hiS.
B D1cc L{ Tnng ln m 2n #9 # /u$7 lqi 51cc )
B D1cc 7{ Tnng i ln m 2n #9 # /u$7 lqi 51cc 3
B D1cc 8{ Wn d}7 MO $
1
, $
2
,..., $
n
B I. h<c.
Giai thut Cu truc du liu Chng trinh
Algorithms Data Structures Programs
Nif[XSs Pri[ }i^,-
In 1975 he wrote the book Algorithms Data Structures
Programs, which gained wide recognition and is still useul
today.
Bio-r+Ahy
Wirth was born in Winterthur, Switerland, in 1934. In 1959 he
earned a degree in lectronics ngineering rom the Swiss Federal Institute o
Technology rich (TH rich). In 1960 he earned an M.Sc. rom Universite Laval,
Canada. Then in 1963 he was awarded a Ph.D.in CS rom the University o Caliornia,
Berkeley, supervised by the computer designer pioneer Harry Huskey.
From 1963 to 1967 he served as assistant proessor o Computer Science at Stanord
University and again at the University o urich. Then in 1968 he became Proessor o
Inormatics at TH rich, taking two one-year sabbaticals at Xerox PARC in Caliornia
(19761977 and 19841985). Wirth retired in 1999.
Bro-r+mmin- 2+n-u+-C6
Wirth was the chie designer o the programming languages uler, Algol W, Pascal,
Modula, Modula-2, beron, beron-2, and beron-07 . He was also a maor part o the
design and implementation team or the Lilith and beron operating systems, and or the
Lola digital hardware design and simulation system. He received the l:M Tu6ing lt$6d
or the development o these languages and in 1994 he was inducted as a Fellow o the
ACM. He designed the simple programming language PL/0 to illustrate compiler design.
It has ormed the basis or many university compiler design classes.
4. Chuong trnh
Dnh n-hE+
- Chng trinh may tinh: la mt tp hop nhung cu lnh doc vit bng mt ngn
ngu lp trinh theo mt trt tu xac dinh nhm tu dng thuc hin mt s nhim vu
hoc chuc nng hoc giai quyt mt bai toan nao do.
17
- La mt biu hin cu th cua mt giai thut trn mt ngn ngu lp trinh nao do
cung voi nhung m ta v cu truc du liu m ta du vao, du ra cua bai toan cn
giai quyt.
! "7 Chng trinh giai phng trinh bc 2 bng Pascal
! #7 Chng trinh giai phng trinh bc 2 bng C
To ^X /-`~ng ,^_n- rc ,n- Tng /c/- no
III. Cng c lp trnh
1. Ngn ng Ip trnh
Khi ni3m
- Ngn ngu lp trinh la mt ngn ngu dung d vit chng trinh cho may tinh. Ta
co th chia ngn ngu lp trinh thanh cac loi sau: ngn ngu may, hop ngu va ngn
ngu cp cao.
- Ngn ngu may (machine language): La cac ch thi doi dng nhi phn, can thip
truc tip vao trong cac mch din tu. Chng trinh doc vit bng ngn ngu may
thi co th doc thuc hin ngay khng cn qua boc trung gian nao. Tuy nhin
chng trinh vit bng ngn ngu may d sai sot, cng knh va kho doc, kho hiu
vi toan nhung con s 0 va 1.
- Hop ngu (assembly language): Bao gm tn cac cu lnh va quy tc vit cac cu
lnh do. Tn cac cu lnh bao gm hai phn: phn m lnh (vit tua ting Anh) ch
phep toan cn thuc hin va dia ch chua toan hng cua phep toan do. Vi du:
INPUT a ; Nhp gia tri cho a t ban phim
LAD a ; oc gia tri a vao thanh ghi tng A
PRINT a; Hin thi gia tri cua a ra man hinh.
INPUT b
ADD b; Cng gia tri cua thanh ghi tng A voi gia tri b
Trong cac lnh trn thi INPUT, LAD, PRINT, ADD la cac m lnh cn a, b la
dia ch. may thuc hin doc mt chng trinh vit bng hop ngu thi chng
trinh do phai doc dich sang ngn ngu may. Cng cu thuc hin vic dich do
doc goi la Assembler.
- Ngn ngu cp cao (High level language): Ra doi va phat trin nhm phan anh cach
thuc ngoi lp trinh nghi va lam. Rt gn voi ngn ngu con ngoi (Anh ngu)
nhng chinh xac nh ngn ngu toan hoc. Cung voi su phat trin cua cac th h
may tinh, ngn ngu lp trinh cp cao cng doc phat trin rt da dng va phong
phu, vic lp trinh cho may tinh vi th ma cng co nhiu khuynh hong khac
nhau: lp trinh cu truc, lp trinh hong di tong, lp trinh logic, lp trinh ham...
Mt chng trinh vit bng ngn ngu cp cao doc goi la chng trinh ngun
(source programs). may tinh hiu va thuc hin doc cac lnh trong chng
trinh ngun thi phai co mt chng trinh dich d dich chung trinh ngun (vit
bng ngn ngu cp cao) thanh dng chng trinh co kha nng thuc thi.
.h:Fn- tr8nh !ch
- Nh trn d trinh bay, mun chuyn t chng trinh ngun sang chng trinh dich
phai co chng trinh dich. Thng thong mi mt ngn ngu cp cao du co mt
18
chng trinh dich ring nhng chung quy li thi co hai cach dich: thng dich va
bin dich.
- Thng dich (interpreter): La cach dich tng lnh mt, dich toi du thuc hin toi do.
Chng hn ngn ngu LISP su dung trinh thng dich.
- Bin dich (compiler): Dich toan b chng trinh ngun thanh chng trinh dich
ri sau do moi thuc hin. Cac ngn ngu su dung trinh bin dich nh Pascal, C...
- Giua thng dich va bin dich co khac nhau o ch: Do thng dich la va dich va
thuc thi chng trinh cn bin dich la dich xong toan b chng trinh ri moi thuc
thi nn chng trinh vit bng ngn ngu bin dich thuc hin nhanh hn chng
trinh vit bng ngn ngu thng dich.
- Mt s ngn ngu su dung kt hop giua thng dich va bin dich chng hn nh
ava. Chng trinh ngun cua ava doc bin dich to thanh mt chng trinh di
tong (mt dng m trung gian) va khi thuc hin thi tng lnh trong chng trinh
di tong doc thng dich thanh m may.
2. Cng c Ip trnh
- Troc nhung nm 1990 ngoi ta cho rng ngn ngu lp trinh quyt dinh kt qua
lp trinh. Chng hn, trong mt tinh hung cu th nao do, chng trinh vit bng
C thi tt hn Pascal, vit bng Pascal thi tt hn Fortran Khi cac cng cu lp
trinh cn th s va cac yu cu phn mm cha cao thi nhn dinh nay la kha chinh
xac.
- Sau do ngoi ta cho rng cng ngh lp trinh moi anh hong lon nht dn san
phm cui cung, su thng tri trong thp k 90 cua lp trinh hong di tong va
RAD (vit tt cua Rapid Application Development nghia la Cng cu phat trin ung
dung nhanh, thong goi la lp trinh truc quan hay Visual Programming) d cho
thy t duy cua ngoi lp trinh bi anh hong boi nn tang phat trin phn mm.
- Khng ai ph phan Delphi - phin ban phat trin t ngn ngu Pascal la kem hn
ava hay Visual C. Tuy moi co 1/20 thoi gian cua th k 21 tri qua nhng t
du th k dn nay Cng ngh thng tin d co nhung boc phat trin mnh m
trong do co Cng ngh phn mm. Nhu cu su dung phn mm va yu cu di voi
phn mm dt nhin tng vot khin nhiu nha phat trin phn mm phai xem li
cach lam vic cua minh. o chinh la c so cho su phat trin rng ri trn toan th
gioi cua nganh Cng nghip phn mm hin nay.
- Ngoi ta khng ch quan tm dn cng ngh lp trinh ma cn quan tm dn quy
trinh phat trin phn mm.
- Cac cng ty bt du chun hoa va da ra quy trinh cng ngh phn mm cua minh
- o do vic lua chon b cng cu lp trinh co vai tr rt quan trong. Cac b cng cu
lp trinh hin nay co xu hong thng nht va tng tac voi nhau cht ch. tong
nay d tng xut hin trong thp k troc, tiu biu nh CRBA cua Sun hay
Delphi - C Builder Proect Union cua Borland, tuy nhin khi do chung cha
doc a chung.
- Khi Visual Studio.NT cua Microsot ra doi nm 2002, ngoi ta nhn thy rng
cac cng cu lp trinh nn di voi nhau thanh b. n thoi dim hin nay giai
19
phap v cng cu lp trinh cua cac nha phat trin lun doc nhc dn nh b cng
cu. Mt vi du v y nghi cua 2 lp trinh vin qua 3 giai don nay nh sau:
- Hin nay co rt nhiu ngn ngu lp trinh (NNLT) va rt nhiu cng cu lp trinh
(CCLT). Mt CCLT co th gn lin voi mt NNLT hoc khng - dy la diu ma
mt s it ngoi khng co kinh nghim khng h bit. Ta co th phn loi:
Theo NNLT: Dng C co Visual C, C Builder Dng Pascal co
Borland Pascal, Delphi
Theo phm vi su dung: Dng lp trinh h thng co Microsot Assembly,
Borland C Dng lp trinh truc quan co Visual Basic, builder Dng
lp trinh mng co ava, ASP, PHP
Theo phong cach lp trinh: Dng c din co Pascal, Fortran Dng
hong di tong co C, SmallTalk, ava
- Cng cu thong dung:
Microsot Visual Studio 2005, Microsot Visual Studio 2008: C, C,
VisualBasic, ASPX...
ava;
PHP;
Pascal, Turbo C, Dev - C
- Chuc nng cua cng cu lp trinh:
1. Biu din chng trinh bng mt ngn ngu lp trinh nao do
2. Giao din tich hop (ID - Itergrated Developments nvironment) cho phep
son thao vn ban chng trinh, kim li, thu nghim;
3. Bin dich thanh chng trinh dc lp trn may tinh.
3. Cng c Ip trnh Dev-C++
- Jtb-C** la mt cng cu lp trinh voi giao din tich hop cho phep lam vic trn
Windows, cho phep lp trinh bng C/C;
- Du an phat trin Dev-C doc lu tru trn SourceForge. Dev-C nguyn doc
phat trin boi mt lp trinh vin co tn la Colin Laplace va ch chy trn h diu
hanh Microsot Windows.
- Bloodshed Dev-C la mt Mi trong Phat trin Tich hop (ID) co h tro dy
du tinh nng cho ngn ngu lp trinh C/C. No su dung trinh MinGW cua GCC
(B trinh dich GNU) lam trinh bin dich. Dev-C cng co th doc dung kt hop
voi Cygwin hay bt ky trinh dich nn tang GCC nao khac.
- Chng trinh cho ngoi dung co cam nhn hi ging voi hinh thuc cua chng
trinh Microsot Visual Studio vn doc su dung rng ri hn. Dev-C co mt
dc dim phu do la no su dung DevPaks, la mt phn gm cac goi mo rng so voi
mi trong tiu chun, bao gm cac th vin, mu, va cac tin ich doc da thm
vao. DevPaks thong co, nhng khng nht dinh, tin ich GUI (giao din ngoi
dung d hoa), bao gm cac cng cu ph bin nh GTK, wxWidgets, va FLTK.
20
Co nhung DevPaks co chua cac th vin voi thm chi nhiu ham chuc nng cao
hn.
- Dev-C noi chung la mt chng trinh ch chy trn Windows. Tuy nhin cng
co mt phin ban cho Linux, nhng vn trong giai don alpha va cha doc cp
nht trong vng hn 6 nm qua.
M5t 6@ -i+o !i3n
Giao din chinh
I!. "#m t$t n%i &ung bi h'c
I. Gioi thiu
1. Muc dich, u cu
2. Ni dung mn hoc
3. Tai liu hoc tp va tham khao
4. Hinh thuc danh gia kt qua mn hoc
5. Tng quan v may tinh
II. Bai toan va vic giai bai toan trn may tinh
1. Xac dinh bai toan
2. Cu truc du liu va Giai thut
3. Chng trinh
III. Cng cu lp trinh
1. Ngn ngu lp trinh
2. Cng cu lp trinh
3. Cng cu lp trinh Dev-C
21
!. Bi tp
1. Biu din thut toan giai cac bai toan sau bng s d khi va gia m:
a. Giai phng trinh bc 2;
b. Giai h phng trinh bc nht;
c. Tinh s ngay cua mt thang mt nm nao do;
d. Thut toan tim oc s chung lon nht;
2. Cai dt, lam quen voi giao din Dev-C
3. Tim hiu nhung bai toan thuc t, m ta thut toan d giai quyt vn d do.
22
Bi 2 - NGN NG LP TRNH C/C++
Ni RSng Ti -U/
W. >ici hiu
WW. M MO %h-i nim c2 5&n
1. D %E F
2. TG %hH$
3. Ii4u d= liu
). Tn, Di.n, hKng
J. Di4u h,c
WWW. :;u 6<c ch12ng 6+nh 2n gi&n 6'ng :
1. :;u 6<c chung
2. Ih$i 5-' MN dng h1 #in
3. Ih$i 5-' hKng, 5i.n, %i4u
). M MO lnh 2n
J. :h< hch
L. :h12ng 6+nh chnh
WT. Nh!"8u; d= liu
1. Nh!" d= liu G 5n "hm P *m Mc$nQRS
2. 8u; d= liu 6$ mn h+nh P *m "6inQRS
3. # d
T. Di !"
I. Gii thiu
- C la ngn ngu lp trinh cp cao, doc su dung rt ph bin d lp trinh h thng
cung voi Assembler va phat trin cac ung dung.
- Vao nhung nm cui thp k 60 du thp k 70 cua th k XX, Dennish Ritchie
(lam vic ti phng thi nghim Bell) d phat trin ngn ngu lp trinh C dua trn
ngn ngu BCPL (do Martin Richards da ra vao nm 1967) va ngn ngu B (do
Ken Thompson phat trin t ngn ngu BCPL vao nm 1970 khi vit h diu hanh
UNIX du tin trn may PDP-7) va doc cai dt ln du tin trn h diu hanh
UNIX cua may DC PDP-11.
- Nm 1978, Dennish Ritchie va B.W Kernighan d cho xut ban quyn Ngn ngu
lp trinh C va doc ph bin rng ri dn nay.
- Luc ban du, C doc thit k nhm lp trinh trong mi trong cua h diu hanh
Unix nhm muc dich h tro cho cac cng vic lp trinh phuc tp. Nhng v sau,
voi nhung nhu cu phat trin ngay mt tng cua cng vic lp trinh, C d vot qua
khun kh cua phng thi nghim Bell va nhanh chong hi nhp vao th gioi lp
trinh d ri cac cng ty lp trinh su dung mt cach rng ri. Sau do, cac cng ty
san xut phn mm ln lot da ra cac phin ban h tro cho vic lp trinh bng
ngn ngu C va chun ANSI C cng doc khai sinh t do.
23
- Ngn ngu lp trinh C la mt ngn ngu lp trinh h thng rt mnh va rt mm
deo, co mt th vin gm rt nhiu cac ham (unction) d doc to sn. Ngoi
lp trinh co th tn dung cac ham nay d giai quyt cac bai toan ma khng cn
phai to moi. Hn th nua, ngn ngu C h tro rt nhiu phep toan nn phu hop cho
vic giai quyt cac bai toan k thut co nhiu cng thuc phuc tp. Ngoai ra, C
cng cho phep ngoi lp trinh tu dinh nghia thm cac kiu du liu tru tong
khac. Tuy nhin, diu ma ngoi moi va hoc lp trinh C thong gp rc ri la
hi kho hiu do su mm deo cua C. Du vy, C doc ph bin kha rng ri va
d tro thanh mt cng cu lp trinh kha mnh, doc su dung nh la mt ngn ngu
lp trinh chu yu trong vic xy dung nhung phn mm hin nay
- Ngn ngu C co nhung dc dim c ban sau:
Tinh c dong (compact): C ch co 32 t khoa chun va 40 toan tu chun,
nhng hu ht du doc biu din bng nhung chui ky tu ngn gon.
Tinh cu truc (structured): C co mt tp hop nhung ch thi cua lp trinh
nh cu truc lua chon, lp T do cac chng trinh vit bng C doc
t chuc r rang, d hiu.
Tinh tng thich (compatible): C co b tin xu ly va mt th vin chun
v cung phong phu nn khi chuyn t may tinh nay sang may tinh khac
cac chng trinh vit bng C vn hoan toan tng thich.
Tinh linh dng (lexible): C la mt ngn ngu rt uyn chuyn va cu
phap, chp nhn nhiu cach th hin, co th thu gon kich thoc cua cac
m lnh lam chng trinh chy nhanh hn.
Bin dich (compile): C cho phep bin dich nhiu tp tin chng trinh
ring r thanh cac tp tin di tong (obect) va lin kt (link) cac di
tong do li voi nhau thanh mt chng trinh co th thuc thi doc
(executable) thng nht.
II. (%t )* +hi nim c, bn
1. B k t
B chu vit trong ngn ngu C bao gm nhung ky tu, ky hiu sau: (phn bit chu in hoa
va in thong):
- 26 chu cai latinh lon A,B,C... ;
- 26 chu cai latinh nho a,b,c .... ;
- 10 chu s thp phn 0,1,2...9. ;
- Cac ky hiu toan hoc: , -, *, /, , , , (, )
- Cac ky hiu dc bit: :. , ; ' $ ! ` | | } ... ;
- Du cach hay khoang trng.
2. T kha
T khoa la cac t danh ring (reserved words) cua C voi muc dich d doc xac dinh
troc. Vi du:
- T khoa in, dung d khai bao bin hoc ham voi kiu du liu s nguyn;
24
- T khoa i dung d xy dung cu lnh cu truc chon;
- T khoa o^ dung d xy dung cu lnh cu truc lp.
Danh sach cac t khoa:
Lu y: khng doc dung t khoa vao muc dich khac, hoc dt tn mt di tong nao do
(bin, hng, tn ham ...) trung voi t khoa. Cac t khoa cua Turbo C 3.0 bao gm:
3. Kiu d Iiu
Cac kiu du liu s cp chun trong C co th doc chia lam 2 dng : kiu s nguyn, kiu
s thuc.
Ki=u 6@ n-uyn
Kiu s nguyn la kiu du liu dung d lu cac gia tri nguyn hay cn goi la kiu dm
doc. Kiu s nguyn trong C doc chia thanh cac kiu du liu con, mi kiu co mt
min gia tri khac nhau.
KigS s ngSn 1 T,t yF Ti,s{
Kiu s nguyn mt byte gm co 2 kiu sau:
zTT KigS RZ [idS Mien gic ,^p yJorXin{
1 unsigned char
T 0 dn 2== (tng dng 256 ky tu trong bang m
ASCII)
2 char T -12F dn 12$
KigS SnsigntR /-X^0 lu cac s nguyn dng t 0 dn 255.
khai bao mt bin la kiu ky tu thi ta khai bao bin kiu unsigned char. Mi s
trong min gia tri cua kiu unsigned char tng ung voi mt ky tu trong bang m ASCII .
KigS /-X^0 lu cac s nguyn t -128 dn 127. Kiu char su dung bit trai nht d lam
bit du.
Nu gan gia tri 127 cho bin kiu char thi gia tri cua bin nay co th la s m ().
KigS s ngSn 2 T,ts y1> Ti,s{
Kiu s nguyn 2 bytes gm co 4 kiu sau:
zTT KigS RZ [idS Mien gic ,^p yJorXin{
1 enum T -32,768 dn 32,767
2 unsigned int T 0 dn >=@=+=
3 Short int T -32,768 dn 32,767
4 int T -32,768 dn 32,767
25
KigS tnSr@ s-o^, in,@ in, 0 Lu cac s nguyn t -32768 dn 32767. Su dung bit bn
trai nht d lam bit du.
Nu gan gia tri 32767 cho bin co 1 trong 3 kiu trn thi gia tri cua bin nay co
th la s m.
KigS SnsigntR in,: Kiu unsigned int lu cac s nguyn dng t 0 dn 65535.
Kiu s nguyn 4 byte (32 bits)
Kiu s nguyn 4 bytes hay cn goi la s nguyn dai (long) gm co 2 kiu sau:
zTT KigS RZ [idS Mien gic ,^p yJorXin{
1 unsigned long T 0 dn 6@2<6@<>$@2<=
2 long T -2@16$@6F+@>6F dn 2@16$@6F+@>6$
KigS [ong 0 Lu cac s nguyn t -2147483658 dn 2147483647. Su dung bit bn trai
nht d lam bit du.
Nu gan gia tri 2147483647 cho bin co kiu long thi gia tri cua bin nay co th
la s m.
KigS SnsigntR [ong: Kiu unsigned long lu cac s nguyn dng t 0 dn
4294967295
Ki=u 6@ th9c
Kiu s thuc dung d lu cac s thuc hay cac s co du chm thp phn gm co 3 kiu
sau:
zTT KigS RZ [idS K/- ,-`s/ yzit{ Mien gic ,^p yJorXin{
1 loat 4 bytes T +#6 10
-+F
dn +#6 10
+F
2 double 8 bytes T 1#$ 10
-+0F
dn 1#$ 10
+0F
3 long double 10 bytes T +#6 10
-6<+2
dn 1#1 10
6<+2
Mi kiu s thuc o trn du co min gia tri va d chinh xac (s s le) khac nhau. Tuy
vao nhu cu su dung ma ta co th khai bao bin thuc 1 trong 3 kiu trn.
Ngoai ra ta cn co kiu du liu boiR, kiu nay mang y nghia la kiu rng khng chua
gia tri gi ca.
4. Tn, Bin, hng
4n
Tn hay cn goi la danh biu (identiier) doc dung d dt cho chng trinh, hng, kiu,
bin, chng trinh con... Tn co hai loi la tn chun va tn do ngoi lp trinh dt.
- Tn chun la tn do C dt sn nh tn kiu: int, char, loat,; tn ham: sin, cos...
- Tn do ngoi lp trinh tu dt d dung trong chng trinh cua minh.
Su dung b chu cai, chu s va du gch doi () d dt tn, nhng phai tun thu quy tc:
- Bt du bng mt chu cai hoc du gch doi;
- Khng co khoang trng o giua tn;
26
- Khng doc trung voi t khoa;
- dai ti da cua tn la khng gioi hn, tuy nhin ch co 31 ky tu du tin la co y
nghia;
- Khng cm vic dt tn trung voi tn chun nhng khi do y nghia cua tn chun
khng cn gia tri nua.
Vi du: tn do ngoi lp trinh dt:
Chieudai, ChieuRong, ChuVi, DienTich
Tn khng hop l: Do Dai, 12A2,
BiGn
Bin la mt di long doc ngoi lp trinh dinh nghia va doc dt tn thng qua vic
khai bao bin. Bin dung d chua du liu trong qua trinh thuc hin chng trinh va gia tri
cua bin co th bi thay di trong qua trinh nay. Mi bin phai thuc v mt kiu du liu
xac dinh va co min gia tri thuc kiu do.
Cu phap khai bao bin:
Kiu du liu Danh sach cac tn bin cach nhau boi du phy;
Vi du:
int a, b, c; /*Ba bin a, b,c c kiu int*/
long int chu_vi; /*Bin chu_vi c kiu long*/
float nua_chu_vi; /*Bin nua_chu_vi c kiu float*/
double dien_tich; /*Bin dien_tich c kiu double*/
Lu y: kt thuc 1 lnh phai co du chm phy (;) o cui lnh.
3p ,^ f-Xi Tco Tin ,^ong C
Trong ngn ngu lp trinh C, ta phai khai bao bin dung vi tri. Nu khai bao (dt cac bin)
khng dung vi tri s dn dn nhung sai sot ngoai y mun ma ngoi lp trinh khng long
troc (hiu ung l). Chung ta co 2 cach dt vi tri cua bin nh sau:
- Khai bao bin ngoai: Cac bin nay doc dt bn ngoai tt ca cac ham va no co tac
dung hay anh hong dn toan b chng trinh (cn goi la bin toan cuc), vi du :
int i; /*Bien ben ngoai */
float pi; /*Bien ben ngoai*/
int main()
{ . }
- Khai bao bin trong: Cac bin doc dt o bn trong ham, chng trinh chinh hay
mt khi lnh. Cac bin nay ch co tac dung hay anh hong dn ham, chng trinh
hay khi lnh chua no. Khi khai bao bin, phai dt cac Tin n kxS /X f-i
[dn-, troc cac lnh gan,
! ":
#include <stdio.h>
#include <conio.h>
int bienngoai; /*khai bao bien ngoai*/
int main ()
{
int j,i; /*khai bao bien ben trong chuong trinh chinh*/
i=1; j=2;
bienngoai=3;
27
printf("\n Gia tri cua i la %d",i);
/*%d l s nguyn, s bit sau */
printf("\n Gia tri cua j la %d",j);
printf("\n Gia tri cua bienngoai la %d",bienngoai);
getch();
return 0;
}
! #:
#include <stdio.h>
#include<conio.h>
int main ()
{
int i, j; /*Bien ben trong*/
i=4; j=5;
printf("\n Gia tri cua i la %d",i);
printf("\n Gia tri cua j la %d",j);
if(j>i)
{
int hieu=j-i; /*Bien ben trong */
printf("\n Hieu so cua j tru i la %d",hieu);
}
else
{
int hieu=i-j ; /*Bien ben trong*/
printf("\n Gia tri cua i tru j la %d",hieu);
}
getch();
return 0;
}
HIn-
La di long khng di trong sut qua trinh thuc thi cua chng trinh.
Cu phap:
const Kiu du liu Tnhng Giatri;
Vi du:
const int heso10;
Hng s ,-./
S thuc bao gm cac gia tri kiu loat, double, long double doc th hin theo 2 cach sau:
- Cach 1: Su dung cach vit thng thong ma chung ta d su dung trong cac mn
Toan, Ly, iu cn lu y la su dung du thp phn la du chm (.);
Vi du: 123.34 -223.333 3.00 -56.0
28
- Cach 2: Su dung cach vit theo s m hay s khoa hoc. Mt s thuc doc tach lam
2 phn, cach nhau bng ky tu e hay
'-xn gic ,^p: la mt s nguyn hay s thuc doc vit theo cach 1.
'-xn r: la mt s nguyn
Gia tri cua s thuc la: Phn gia tri nhn voi 10 m phn m.
Vi du: 1234.56e-3 1.23456 (la s 1234.56 * 10
-3
)
-123.454 -1234500 ( la -123.45 *10
4
)
Hng s ngSn
S nguyn gm cac kiu int (2 bytes) , long (4 bytes) doc th hin theo nhung cach sau :
- Hng s nguyn 2 bytes (int) h thp phn: La kiu s ma chung ta su dung thng
thong, h thp phn su dung cac ky s t 0 dn 9 d biu din mt gia tri nguyn.
Vi du: 123, -242
- Hng s nguyn 2 byte (int) h bat phn: La kiu s nguyn su dung 8 ky s t 0
dn 7 d biu din mt s nguyn.
Cach biu din: 0cac ky s t 0 dn 7
Vi du : 0345, -020 (s 345, -20 trong h bat phn)
- Hng s nguyn 2 byte (int) h thp luc phn: La kiu s nguyn su dung 10 ky s
t 0 dn 9 va 6 ky tu A, B, C, D, ,F d biu din mt s nguyn.
Cach biu din: 0xcac ky s t 0 dn 9 va 6 ky tu t A dn F
- Hng s nguyn 4 byte (long): S long (s nguyn dai) doc biu din nh s int
trong h thp phn va kem theo ky tu l hoc L. Mt s nguyn nm ngoai min gia
tri cua s int ( 2 bytes) la s long ( 4 bytes).
Vi du: 45345L hay 45345l hay 45345
- Cac hng s cn li: Vit nh cach vit thng thong (khng co du phn cach
giua 3 s)
Hng fn ,.
Hng ky tu la mt ky tu ring bit doc vit trong cp du nhay dn (). Mi mt ky tu
tng ung voi mt gia tri trong bang m ASCII. Hng ky tu cng doc xem nh tri s
nguyn.
Vi du: a`, A`, 0`, 9`
Chung ta co th thuc hin cac phep toan s hoc trn 2 ky tu (thuc cht la thuc hin phep
toan trn gia tri ASCII cua chung)
Hng /-Si fn ,.
Hng chui ky tu la mt chui hay mt xu ky tu doc dt trong cp du nhay kep (). Vi
du: Ngon ngu lap trinh C, Khoa CNTT-HVKTQS.
Lu y:
- Mt chui khng co ni dung doc goi la chui rng;
- Khi lu tru trong b nho, mt chui doc kt thuc bng ky tu NULL (\0`: m
Ascii la 0);
29
- biu din ky tu dc bit bn trong chui ta phai thm du \ phia troc. Vi du:
I`m a student phai vit I\`m a student; Day la ky tu dac biet phai vit
Day la ky tu \dac biet\.
5. Biu thc
Biu thuc la mt su kt hop giua cac toan tu (operator) va cac toan hng (operand) theo
dung mt trt tu nht dinh. Mi toan hng co th la mt hng, mt bin hoc mt biu
thuc khac.
Trong trong hop, biu thuc co nhiu toan tu, ta dung cp du ngoc dn () d ch dinh
toan tu nao doc thuc hin troc.
Vi du: Biu thuc nghim cua phng trinh bc hai:
(-b sqrt(Delta))/(2*a)
Trong do 2 la hng; a, b, Delta la bin.
.c ton tJ 6@ h,c
Trong ngn ngu C, cac toan tu , -, *, / lam vic tng tu nh khi chung lam vic trong
cac ngn ngu khac. Ta co th ap dung chung cho da s kiu du liu co sn doc cho phep
boi C. Khi ta ap dung phep / cho mt s nguyn hay mt ky tu, bt ky phn d nao cng
bi ct bo. Chng hn, 5/2 bng 2 trong phep chia nguyn.
Tocn , D ng-qX
Cng
- Tr
* Nhn
/ Chia
Chia ly phn d
-- Giam 1 dn vi
Tng 1 dn vi
Tng va giam ( & --)
Toan tu thm 1 vao toan hng cua no va - tr bot 1. Noi cach khac:
x x 1 ging nh x
x x 1 ging nh x
Ca 2 toan tu tng va giam du co th tin t (dt troc) hay hu t (dt sau) toan hng. Vi
du: x x 1 co th vit x (hay x)
Tuy nhin giua tin t va hu t co su khac bit khi su dung trong 1 biu thuc. Khi 1 toan
tu tng hay giam dung troc toan hng cua no, C thuc hin vic tng hay giam troc khi
ly gia tri dung trong biu thuc. Nu toan tu di sau toan hng, C ly gia tri toan hng
troc khi tng hay giam no.
Tom li:
x 10
y x //y 11
Tuy nhin:
30
x 10
y x //y 10
Thu tu u tin cua cac toan tu s hoc: -- sau do la * / ri moi dn -
.c ton tJ qu+n h3 v cc ton tJ Ko-ic
tong chinh cua toan tu quan h va toan tu Logic la dung hoc sai. Trong C moi gia tri
khac 0 doc goi la dung, cn sai la 0. Cac biu thuc su dung cac toan tu quan h va Logic
tra v 0 nu sai va tra v 1 nu dung.
Tocn , D ng-qX
Cc/ ,ocn , WSXn -d
Lon hn
Lon hn hoc bng
Nho hn
Nho hn hoc bng
Bng
! Khac
Cc/ ,ocn , Logi/
&& AND
,, R
! NT
Bang chn tri cho cac toan tu Logic:
P q

p&&q p,,q !p
0 0

0 0 1
0 1

0 1 1
1 0

0 1 0
1 1

1 1 0
Cac toan tu quan h va Logic du co d u tin thp hn cac toan tu s hoc. Do do mt
biu thuc nh: 10 1 12 s doc xem la 10 (1 12) va kt qua la sai (0).
Ta co th kt hop vai toan tu li voi nhau thanh biu thuc nh sau:
31
105&&!(109),,34 Kt qua la dung
Thu tu u tin cua cac toan tu quan h la Logic
Cao nht: !

!
&&
Thp nht: ,,
.c ton tJ BitLi6C
Cac toan tu Bitwise y noi dn kim tra, gan hay su thay di cac Bit tht su trong 1 Byte
cua Word, ma trong C chun la cac kiu du liu va bin char, int. Ta khng th su dung
cac toan tu Bitwise voi du liu thuc cac kiu loat, double, long double, void hay cac
kiu phuc tp khac.
Tocn , D ng-qX
& AND
, R
` XR
~ NT
Dich phai
Dich trai
Bang chn tri cua toan tu ` (XR)
p

q

p`q
0

0

0
0

1

1
1

0

1
1

1

0
4on tJ M cNn- v;i 7
C co mt toan tu rt mnh va thich hop d thay th cho cac cu lnh cua I-Then-lse. Cu
phap cua vic su dung toan tu la:
1 2 : 3
Trong do 1, 2, 3 la cac biu thuc.
32
nghia : Troc tin 1 doc oc long, nu dung 2 doc oc long va no tro thanh gia
tri cua biu thuc; nu 1 sai, 3 doc oc long va tro thanh gia tri cua biu thuc.
Vi du:
X = 10
Y = X > 9 ? 100 : 200
Thi doc gan gia tri 100, nu X nho hn 9 thi s nhn gia tri la 200. on m
nay tng dng cu truc i nh sau:
X = 10
if (X < 9) Y = 100
else Y = 200
4on tJ con trO P v Q
Mt con tro la dia ch trong b nho cua mt bin. Mt bin con tro la mt bin doc khai
bao ring d chua mt con tro dn mt di tong cua kiu d ch ra no. Ta s tim hiu k
hn v con tro trong chng v con tro. O dy, chung ta s d cp ngn gon dn hai toan
tu doc su dung d thao tac voi cac con tro.
Toan tu thu nht la &, la mt toan tu quy oc tra v dia ch b nho cua h s cua no.
Vi du: m &count
t vao bin m dia ch b nho cua bin count.
Chng hn, bin count o vi tri b nho 2000, gia su count co gia tri la 100. Sau cu lnh
trn m s nhn gia tri 2000.
Toan tu thu hai la *, la mt b sung cho &; dy la mt toan tu quy oc tra v gia tri cua
bin doc cp phat ti dia ch theo sau do.
Vi du: q *m
S dt gia tri cua count vao q. By gio q s co gia tri la 100 vi 100 doc lu tru ti dia ch
2000.
4on tJ !/u AhRy S
Toan tu du , doc su dung d kt hop cac biu thuc li voi nhau. Bn trai cua toan tu
du , lun doc xem la kiu void. iu do co nghia la biu thuc bn phai tro thanh gia tri
cua tng cac biu thuc doc phn cach boi du phy.
Vi du: x (y3,y1);
Troc ht gan 3 cho y ri gan 4 cho x. Cp du ngoc dn la cn thit vi toan tu du , co
d u tin thp hn toan tu gan.
T/u n-oUc Fn v !/u n-oUc vuVn-
Trong C, cp du ngoc dn la toan tu d tng d u tin cua cac biu thuc bn trong no.
Cac cp du ngoc vung thuc hin thao tac truy xut phn tu trong mang.
.ch viGt tWt tron- .
Co nhiu phep gan khac nhau, di khi ta co th su dung vit tt trong C nua. Chng hn:
x x 10 doc vit thanh x 10
33
Toan tu bao cho chng trinh dich bit d tng gia tri cua x ln 10. Cach vit nay lam
vic trn tt ca cac toan tu nhi phn (phep toan hai ngi) cua C. Tng quat:
yBin{ v yBin{ yTocn ,{ yBigS ,-/{
co th doc vit:
yBin{ yTocn ,{v yBigS ,-/{
4Xn- kGt v 5 :u tin
CXo n-i, () ||
! ~ -- (Kiu) * &
* /
-


&
`
,
&&
,,
:
- * /
T-i] n-i, ,
III. C-u tr.c m%t ch/,ng trnh 0,n gin
1. Cu trc chung
Chng trinh sau doc vit bng C, cho phep ngoi su dung nhp vao 2 s ri in ra kt
qua la tng 2 s do.
Xet chng trinh sau:
/* 1. Khai bao su dung thu vien*/
include stdio.h
include conio.h
include stdlib.h
/* 2. Khai bao Kieu du lieu*/
// se de cap o bai sau
/* 3. Khai bao hang */
deine heso 10
/* 4. Khai bao bien */
int a, b;
/* 5. Chuong trinh chinh */
34
int main()
/* Chuong trinh cho phep nhap vao hai so a va b,
Tinh va in ra tong hai so do */
loat ketqua; // Khai bao bien a va b
system(cls); // Xoa man hinh
print(Nhap vao A va B:); // Hien thi thong bao huong dan nhap lieu
scan(d d,&a,&b); // Nhap cac gia tri cho a va b tu ban phim
ketqua loat((ab))/heso;
print(d/d 0.1\n,ab,heso,ketqua);// In ket qua
print(Nhan phim bat ky de ket thuc!);
getch(); // Doi nhan phim bat ky de tiep tuc
return 0;
}
Kt qua thuc hin chng trinh doc nh hinh sau:
.
V c ban C khng qui dinh 1 cach cht ch cu truc cua mt chng trinh; C ch qui
dinh mt chng trinh phai co ham rXin, va dng thoi do la chng trinh chinh cua
chng trinh. Thng thong mt chng trinh C gm cac phn:
- Khai bao th vin;
- Khai bao bin; hng;
- Chng trinh chinh;
2. Khai bo s dng thu vin
Phn khai bao su dung th vin:
.0 AhA:
include tn th vin -
Hoc
include tn th vin -
!:
include stdio.h
include conio.h
include stdlib.h
Xem Help d bit danh sach cac include ile
35
3. Khai bo hng, bin, kiu
Kh+i bo Ynh n-hE+Z HIn-
Cu phu:
deine TnHng Giatri
Vi du:
deine heso 10
Kh+i bo Ynh n-hE+Z BiGn
Cu phu:
KiuDuliu DanhsachTnBin;
Vi du:
int a, b;
4. Mt s Inh on
- Lnh gan
- Lnh xoa man hinh
- Lnh dng chng trinh
5. Ch thch
Tt ca cac dng bt du bng hai du s (//) doc coi la chut thich ma chung khng co bt
ki mt anh hong nao dn hot dng cua chng trinh. Chung co th doc cac lp trinh
vin dung d giai thich hay binh phm bn trong m ngun cua chng trinh. Trong
trong hop nay, dng chu thich la mt giai thich ngn gon nhung gi ma chng trinh
chung ta lam.
Trong ngn ngu lp trinh C, ni dung chu thich phai doc vit trong cp du /* va */.
6. Chuong trnh chnh
int main ()
Dng nay tng ung voi phn bt du khai bao ham rXin# Ham rXin la dim ma tt ca
cac chng trinh C bt du thuc hin. No khng phu thuc vao vi tri cua ham nay (o
du, cui hay o giua cua m ngun) ma ni dung cua no lun doc thuc hin du tin khi
chng trinh bt du. Thm vao do, do nguyn nhn noi trn, moi chng trinh C du
phai tn ti mt ham rXin#
int main()

.
return 0.
}
Theo sau rXin la mt cp ngoc dn boi vi no la mt ham. Trong C, tt ca cac ham
ma sau do la mt cp ngoc dn () thi co nghia la no co th co hoc khng co tham s
(khng bt buc). Ni dung cua ham main tip ngay sau phn khai bao chinh thuc doc
bao trong cac ngoc nhon ( ) nh trong vi du.
36
return 0;
Lnh ^t,S^n kt thuc ham main va tra v m di sau no, trong trong hop nay la 0. y la
mt kt thuc binh thong cua mt chng trinh khng co mt li nao trong qua trinh thuc
hin. Nh bn s thy trong cac vi du tip theo, dy la mt cach ph bin nht d kt thuc
mt chng trinh C.
I!. 1hp23u-t &4 liu
1. Nhp d Iiu t bn phm - Hm scanf()
La ham cho phep doc du liu t ban phim va gan cho cac bin trong chng trinh khi
chng trinh thuc thi. Trong ngn ngu C, do la ham scan nm trong th vin stdio.h.
.0 AhA{
scan(Chui dinh dng, dia ch cua cac bin);
Giai thich:
- Chui dinh dng: dung d qui dinh kiu du liu, cach biu din, d rng, s chu s
thp phn... Mt s dinh dng khi nhp kiu s nguyn, s thuc, ky tu.
7pn- Rng D ng-qX
|s chu s|d Nhp s nguyn co ti da s ky s
|s chu s| Nhp s thuc co ti da s ky s tinh ca du chm
c Nhp mt ky tu
Vi du:
d Nhp s nguyn
4d Nhp s nguyn ti da 4 ky s, nu nhp nhiu hn 4 ky s thi ch
nhn doc 4 ky s du tin
Nhp s thuc
6 Nhp s thuc ti da 6 ky s (tinh lun du chm), nu nhp nhiu hn
6 ky s thi ch nhn doc 6 ky s du tin (hoc 5 ky s voi du
chm)
- ia ch cua cac bin: la dia ch (&) cua cac bin ma chung ta cn nhp gia tri cho
no. oc vit nh sau: ,n Tinw.
!7
scanf(%d,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/
scanf(%f,&bien2); /*Doc gia tri cho bien2 co kieu thuc*/
scanf(%d%f,&bien1,&bien2);
/*Doc gia tri cho bien1 co kieu nguyen, bien2 co kieu
thuc*/
scanf(%d%f%c,&bien1,&bien2,&bien3);
/*bien3 co kieu char*/
K:u [7
- Chui dinh dng phai dt trong cp du nhay kep ().
37
- Cac bin (dia ch bin) phai cach nhau boi du phy (,).
- Co bao nhiu bin thi phai co by nhiu dinh dng ;
- Thu tu cua cac dinh dng phai phu hop voi thu tu cua cac bin ;
- nhp gia tri kiu char doc chinh xac, nn dung ham \\2u6hY6t!inZ d loi bo
cac ky tu cn nm trong vung dm ban phim troc ham scan() ;
- nhp vao mt chui ky tu (khng chua khoang trng hay kt thuc bng khoang
trng), chung ta phai khai bao kiu mang ky tu hay con tro ky tu, su dung dinh
dng s va tn bin thay cho dia ch bin. ;
- doc vao mt chui ky tu co chua khoang trng (kt thuc bng phim nter) thi
phai dung ham gets().
M5t 6@ v ! khc:
int biennguyen;
float bienthuc;
char bienchar;
char chuoi1[20], *chuoi2;
1. Lnh: scanf(%3d,&biennguyen); Nu ta nhp 1234455 thi gia tri cua
biennguyen la 3 ky s du tin (123). Cac ky s cn li s cn nm li trong vung
dm.
2. Lnh: scanf(%5f,&bienthuc); Nu ta nhp 123.446 thi gia tri cua
bienthuc la 123.4, cac ky s cn li s cn nm trong vung dm.
3. Lnh: scanf(%2d%5f,&biennguyen, &bienthuc); Nu ta nhp
lin tip 2 s cach nhau boi khoang trng: 1223 3.142325 thi :
a. 2 ky s du tin (12) s doc doc vao cho biennguyen ;
b. 2 ky s tip theo troc khoang trng (23) s doc doc vao cho bienthuc.
4. Lnh:scanf(%2d%5f%c,&biennguyen,&bienthuc,&bienchar);
Nu ta nhp lin tip 2 s cach nhau boi khoang trng: 12345 3.142325 thi :
a. 2 ky s du tin (12) s doc doc vao cho biennguyen ;
b. 3 ky s tip theo troc khoang trng (345) s doc doc vao cho bienthuc ;
c. Khoang trng s doc doc cho bienchar.
Nu ta ch nhp 1 s gm nhiu ky s nh sau: 123456789:
d. 2 ky s du tin (12) s doc doc vao cho biennguyen ;
e. 5 ky s tip theo (34567) s doc doc vao cho bienthuc ;
. bienchar s co gia tri la ky s tip theo 8`.
5. Lnh: scanf(%s,chuoi1); hoac scanf(%s,chuoi2); Nu ta
nhp chui nh sau: Nguyen Van Huynh thi gia tri cua bin chuoi1 hay chuoi2
ch la Nguyen .
6. Lnh: scanf(%s%s,chuoi1, chuoi2); Nu ta nhp chui nh sau:
Duong Van Hieu thi gia tri cua bin chuoi1 la Duong va gia tri cua bin chuoi2
la Van.
Vi sao nh vy C s doc t du dn khi gp khoang trng va gan gia tri cho bin du
tin, phn cn li sau khoang trng la gia tri cua cac bin tip theo.
gets(chuoi1);
Nu nhp chui : Nguyen Van Lai thi gia tri cua bin chuoi1 la Nguyen Van Lai
38
2. Xut d Iiu ra mn hnh - Hm printf()
Ham print (nm trong th vin s,Rio#-) dung d xut gia tri cua cac biu thuc ln man
hinh.
.0 AhA{
print(Chui dinh dng , Cac biu thuc);
Giai thich:
- Chui dinh dng: dung d qui dinh kiu du liu, cach biu din, d rng, s chu s
thp phn... Mt s dinh dng khi di voi s nguyn, s thuc, ky tu.
7pn- Rng D ng-qX
d Xut s nguyn
|.s chu s thp phn| Xut s thuc co s chu s thp phn theo quy tc lam
trn s.
o Xut s nguyn h bat phn
x Xut s nguyn h thp luc phn
c Xut mt ky tu
s Xut chui ky tu
e hoc hoc g hoc
G
Xut s nguyn dng khoa hoc (nhn 10 m x)
Vi du
d In ra s nguyn
4d In s nguyn ti da 4 ky s, nu s cn in nhiu hn 4
ky s thi in ht
In s thuc
6 In s thuc ti da 6 ky s (tinh lun du chm), nu s
cn in nhiu hn 6 ky s thi in ht
.3 In s thuc co 3 s le, nu s cn in co nhiu hn 3 s le
thi lam trn.
- Cac biu thuc: la cac biu thuc ma chung ta cn xut gia tri cua no ln man hinh, mi
biu thuc phn cach nhau boi du phy (@).
! "7
#include<stdio.h>
#include<conio.h>
int main()
{
int bien_nguyen=1234, i=65;
float bien_thuc=123.456703;
printf("Gia tri nguyen cua bien nguyen =
%d\n",bien_nguyen);
printf("Gia tri thuc cua bien thuc =%f\n",bien_thuc);
39
printf("Truoc khi lam tron=%f \n Sau khi lam tron=
%.2f",bien_thuc, bien_thuc);
getch();
return 0;
}
Kt qua in ra man hinh nh sau:
Lu y: i voi cac ky tu diu khin, ta khng th su dung cach vit thng thong d hin
thi chung. Ky tu diu khin la cac ky tu dung d diu khin cac thao tac xut, nhp du
liu; mt s ky tu diu khin doc m ta trong bang sau:
Kn ,. kieS
f-ign
Gic ,^p ,-\]
[/ ]-mn
Kn ,. k`/
-ign ,-p
D ng-qX
\a 0x07 BL Phat ra ting chung
\b 0x08 BS Di chuyn con tro sang trai 1 ky tu va
xoa ky tu bn trai (backspace)
\ 0x0C FF Sang trang
\n 0x0A LF Xung dng
\r 0x0D CR Tro v du dng
\t 0x09 HT Tab theo ct (ging g phim Tab)
\\ 0x5C \ Du \
\` 0x2C Du nhay dn ()
\ 0x22 Du nhay kep ()
\ 0x3F u chm hoi ()
\ddd ddd Ky tu co m ACSII trong h bat phn la s ddd
\xHHH oxHHH Ky tu co m ACSII trong h thp luc phn la HHH
! #:
include stdio.h
include conio.h
40
int main ()

print(\n Tieng Beep \a);
print(\n Doi con tro sang trai 1 ky tu\b);
print(\n Dau Tab \tva dau backslash \\);
print(\n Dau nhay don \' va dau nhay kep \);
print(\n Dau cham hoi \);
print(\n Ky tu co ma bat phan 101 la \101);
print(\n Ky tu co ma thap luc phan 41 la \x041);
print(\n Dong hien tai, xin go enter);
getch();
print(\rVe dau dong);
getch();
return 0;
}
3. V d
! ": Vit chng trinh cho phep nhp vao 2 s a va b, trinh kt qua va phng phap
cng 2 s do theo hinh thuc sau (voi a876 va b7655):
876

7655
-----------------------------
8531
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
// Chuong trinh chinh
int main()
{
int a,b,tong;
system("cls");
printf("Nhap vao a va b:");
scanf("%d %d",&a,&b);
printf("Ket qua theo phuong phap cong\n\n");
tong=a+b;
printf("%20d\n",a);
printf("%10s\n","+");
printf("%20d\n",b);
printf("%20s\n","--------------------");
printf("%20d\n\n",tong);
printf("Nhan phim bat ky de ket thuc!");
getch();
41
return 0;
}
Kt qua thuc hin
!. "#m t$t n%i &ung bi h'c
I. Gioi thiu
II. Mt s khai nim c ban
1. B ky tu
2. T khoa
3. Kiu du liu
4. Tn, Bin, hng
5. Biu thuc
III. Cu truc chng trinh dn gian trong C
1. Cu truc chung
2. Khai bao su dung th vin
3. Khai bao hng, bin, kiu
4. Mt s lnh dn
5. Chu thich
6. Chng trinh chinh
IV. Nhp/Xut du liu
1. Nhp du liu t ban phim Ham scan()
2. Xut du liu ra man hinh Ham print()
3. vi du
!I. Bi tp
Xem Bi + - Bi ,\] ,-./ -n- MYi ,^`ang [\] ,^_n- Jtb-C** b /c/ [dn- bo/^X /~
Tn#
42
Bi 3 - Bi thc hnh: MI TRUNG LP TRNH V CC
LENH VO/RA
I. 5m 6u7n mi tr/8ng 97v:C;;
1. Khi ng Dev-C++
Kich dup vao biu tong trn man hinh.
2. Giao din chnh
II. "h<c hin cc v & )=u
1. Tnh din tch mt tam gic
Yu cu7 Cho cnh day a mt hinh tam giac va dong cao tng ung la h, hy tinh din
tich hinh tam giac do.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u:
/* Vi du 1 - Tinh dien tich tam giac khi biet chieu cao va canh day */
include stdio.h
include conio.h
include stdlib.h
43
// Chuong trinh chinh
int main()
int a,h; // a - chieu dai day, h - chieu cao
loat s; // Dien tich tam gia
system(cls); // Xoa man hinh
print(Nhap vao a va h:);
scan(d d,&a,&h);
sa*h;
print(Dien tich bang , s);
print(Nhan phim bat ky de ket thuc!);
getch(); // Dung doi nhan phim bat ky
return 0;
}
4hJ n-hi3m ":
1. Nhn O<, giao din xut hin nh sau:
2. Nhp vao cac gia tri: 4 5 nter, khi do kt qua nhn doc nh sau:
3. Nhn xet v kt qua nhn doc
4hJ n-hi3m #7
1. Thay dng print(Dien tich bang , s);
Bng dng print(Dien tich bang , s);
44
2. Nhn xet v kt qua nhn doc so voi thu nghim 1.
4hJ n-hi3m $7
1. Thay dng print(Dien tich bang , s);
Bng dng print(Dien tich bang 10.2, s);
2. Nhn xet v kt qua nhn doc so voi thu nghim 2.
2. Tnh tng, hiu, tch, thuong ca 2 s
Yu cu7 Vit chng trinh cho phep nhp vao 2 s, tinh va in ra man hinh tng, hiu,
tich va thng cua 2 s do.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
/* Chuong trinh tinh TNG, HIU, TICH, THUNG 2 so*/
include stdio.h
include conio.h
include stdlib.h
/* Chuong trinh chinh */
int main()
/* 1. Khai bao bien va chuan bi*/
int a,b;
loat tong, hieu,tich, thuong;
system(cls);
/* 2. Huong dan nhap va Nhap du lieu vao*/
print(Nhap vao A va B:);
scan(d d,&a,&b);
/* 3. Tinh toan TNG, HIU, TICH, THUNG*/
tongab;
hieua-b;
ticha*b;
thuonga/b;
/* 4. Trinh bay ket qua r*/
print(Tong d d 10.2\n, a,b,tong);
print(Hieu d - d 10.2\n, a,b,hieu);
print(Tich d * d 10.2\n, a,b,tich);
print(Thuong d / d 10.2\n, a,b,thuong);
print(Nhan phim bat ky de ket thuc!);
/* 5. Doi nhan phim bat ky de ket thuc*/
getch();
return 0;
}
4hJ n-hi3m "7
1. Nhn F9, giao din xut hin nh hinh sau:
45
2. Nhp vao cac gia tri: 4 5 nter, khi do kt qua nhn doc nh hinh sau.
3. Nhn xet v kt qua nhn doc.
4hJ n-hi3m #7 Cho A6, B4 nhn xet v kt qua nhn doc;
4hJ n-hi3m $7 Cho A6, B0 nhn xet v kt qua nhn doc;
III. Bi tp t< lm
Tu thuc hin cac bai tp sau
2. Vit chng trinh in ln man hinh mt thip moi du sinh nht co dng:
*******************************************
THIP MI
Than moi ban : Nguyen Van Manh
Toi du le sinh nhat cua minh
Vao luc 19h ngay 12/10/2008
Tai 100 Hoang Quoc Viet Ha noi
Rat mong duoc don tiep !
Ho Thu Huong
46
*******************************************
3. Vit chng trinh nhp vao ban kinh r cua mt hinh trn. Tinh chu vi va din tich cua
hinh trn theo cng thuc :
Chu vi CV 2*Pi*r
Din tich S Pi*r*r
In cac kt qua ln man hinh
4. Vit chng trinh nhp vao d dai 3 cnh a, b, c cua mt tam giac. Tinh chu vi va
din tich cua tam giac theo cng thuc:
Chu vi CV abc
Din tich S sqrt(p*(p-a)*(p-b)*(p-c))
Trong do: pCV/2
In cac kt qua ln man hinh
5. Vit chng trinh tinh log
a
x voi a, x la cac s thuc nhp vao t ban phim, va x0,
a0, a 1.( dung log
a
xlnx/lna) .
6. Vit chng trinh nhp vao toa d cua hai dim (x1, y1) va (x2, y2)
a) Tinh h s goc cua dong thng di qua hai dim do theo cng thuc:
H s goc (y2 - y1) /(x2 - x1)
b) Tinh khoang cach giua hai dim theo cng thuc:
Khoang cach
2
1 2
2
1 2
) ( ) ( f f 7 7 +
7. Vit chng trinh nhp vao mt ky tu:
a) In ra m Ascii cua ky tu do.
b) In ra ky tu k tip cua no.
8. Vit chng trinh nhp vao cac gia tri din tro R1, R2, R3 cua mt mch din :
Tinh tng tro theo cng thuc:
3 2 1
1 1 1 1
\ \ \ \
+ + =

9. Vit chng trinh nhp vao dim ba mn Toan, Ly, Hoa cua mt hoc sinh. In ra dim
trung binh cua hoc sinh do voi hai s le thp phn.
10. Vit chng trinh nhp vao ngay, thang, nm. In ra ngay thang nm theo dng
dd/mm/yy. (dd: ngay, mm: thang, yy: nm. Vi du: 20/11/99).
11. Vit chng trinh dao ngoc mt s nguyn dng co dung 3 chu s.
47
12. Cho hai s x 100; y 200; Hy in ra man hinh cac kt qua cua cac biu thuc:
x&y; x&x; !x&y; x`y`y;
13. Biu din cac hng s nguyn 2 byte sau dy doi dng s nhi phn, bat phn, thp
luc phn :
a)12 b) 255 c) 31000 d) 32767 e) -32768
14. Biu din cac hng ky tu sau dy doi dng s nhi phn, bat phn.
a) A` b) `a` c) ` d) ``
15. Cho h s k va s x (doc biu din o h c s k), s k1 doc nhp vao t ban phim.
Hy di s x t h c s k sang h c s k1, bit k, k1 co th nhn cac s: 2, 8, 10, 16.
48
Bi 4 - IU KHIEN CHQN V LAP
Ni RSng Ti -U/
W. ri`u %hi4n chn
1. IhOi lnh
2. :;u 6<c WX
3. :;u 6<c YZWT:*
). T d
WW. ri`u %hi4n li"
1. :;u 6<c X[\
2. :;u 6<c Z*W]^
3. :;u 6<c @[ .. Z*W]^
). ]nh 56A$% # c'ninuA
WWW. Di !"
I. >i?u +hi@n ch'n
1. Khi Inh
Mt dy cac khai bao cung voi cac cu lnh nm trong cp du ngoc moc va } doc
goi la mt khi lnh.
! ":
{
char ten[30];
printf(\n Nhap vao ten cua ban:);
scanf(%s, ten);
printf(\n Chao Ban %s,ten);
}
! #:
#include <stdio.h>
#include<conio.h>
int main ()
{
char ten[50];
printf("Xin cho biet ten cua ban !");
scanf("%s",ten);
getch();
return 0;
}
Mt khi lnh co th chua bn trong no nhiu khi lnh khac goi la khi lnh lng nhau.
Su lng nhau cua cac khi lnh la khng hn ch.
Minh hoa:

lnh;

lnh;
49

lnh;
}
lnh;
}
lnh;
}
K:u [ v Ah^m vi tc 5n- c<+ biGn tron- kh@i 23nh 2_n- nh+u7 Trong cac khi lnh
khac nhau hay cac khi lnh lng nhau co th khai bao cac bin cung tn.
! $0

lnh;

int a,b; /*bin a, b trong khi lnh thu nht*/
lnh;
}
lnh;

int a,b; /*bin a,b trong khi lnh thu hai*/
lnh;
}
}
! %0

int a, b; /*bin a,b trong khi lnh bn ngoai*/
lnh;

int a,b; /*bin a,b bn trong khi lnh con*/
}
}
- Nu mt bin doc khai bao bn ngoai khi lnh va khng trung tn voi bin bn
trong khi lnh thi no cng doc su dung bn trong khi lnh.
- Mt khi lnh con co th su dung cac bin bn ngoai, cac lnh bn ngoai khng
th su dung cac bin bn trong khi lnh con.
50
2. Cu trc IF
.0 AhA
i (Biu thuc diu kin)

Cng vic 1
}
|else

Cng vic 2
}
|
Lu d cu phap:
`i?i thch7
- Cng vic 1, cng vic 2 doc th hin la 1 cu lnh hay 1 khi lnh.
- u tin Biu thuc diu kin doc kim tra troc.
- Nu diu kin dung thi thuc hin cng vic 1.
- Nu diu kin sai thi thuc hin cng vic 2.
- Vic co thuc hin cng vic 2 hay khng la mt lua chon, co th co hoc khng.
! "7 u cu ngoi thuc hin chng trinh nhp vao mt s thuc a. In ra man hinh
kt qua nghich dao cua a khi a =0, khi a 0 in ra thng bao Khong the tim duoc nghich
dao cua a
#include <stdio.h>
#include <conio.h>
int main ()
{
float a;
printf("Nhap a = "); scanf("%f",&a);
if (a !=0 )
printf("Nghich dao cua %f la %f",a,1/a);
else
printf(Khong the tim duoc nghich dao cua a);
getch();
return 0;
}
Giai thich:
- Nu chung ta nhp vao a =0 thi cu lnh printf("Nghich dao cua %f la
%f",a,1/a)doc thuc hin, ngoc li cu lnh printf(Khong the tim
duoc nghich dao cua a) doc thuc hin.
- Lnh getch() lun lun doc thuc hin.
51
BT diu kin
Cng vic 1
Sai
dung
Cng vic 2
- Chy tng boc dng Debug, view cac bin a, b va biu thuc ab
! #: u cu ngoi chy chng trinh nhp vao gia tri cua 2 s a va b, nu a lon hn
b thi in ra thng bao Gia tri cua a lon hn gia tri cua b, gia tri cua 2 s, ngoc li thi in
ra man hinh cu thng bao Gia tri cua a nho hn hoc bng gia tri cua b, gia tri cua 2
s.
#include <stdio.h>
#include<conio.h>
int main ()
{
int a, b;
printf("Nhap vao gia tri cua 2 so a va b !");
scanf("%d%d",&a,&b);
if (a>b)
{
printf("\n a lon hon b);
printf("\n a=%d b=%d ",a,b);
}
else
{
printf("\n a nho hon hoac bang b");
printf("\n a=%d b=%d",a,b);
}
printf("\n Thuc hien xong lenh if");
getch();
return 0;
}
! $: u cu ngoi thuc hin chng trinh nhp vao mt s nguyn dng la thang
trong nm va in ra s ngay cua thang do.
- Thang co 31 ngay: 1, 3, 5, 7, 8, 10, 12;
- Thang co 30 ngay: 4, 6, 9, 10 ;
- Thang co 28 hoc 29 ngay : 2
#include <stdio.h>
#include<conio.h>
int main ()
{
int thg;
printf("Nhap vao thang trong nam !");
scanf("%d",&thg);
if(thg==1||thg==3||thg==5||thg==7||thg==8||thg==10||thg==12)
{
printf("\n Thang %d co 31 ngay ",thg);
}
else
{
if (thg==4||thg==6||thg==9||thg==11)
printf("\n Thang %d co 30 ngay",thg);
else if (thg==2)
52
printf("\n Thang %d co 28 hoac 29 ngay",thg);
else printf("Khong co thang %d",thg);
printf("\n Thuc hien xong lenh if");
}
getch();
return 0;
}
K:u [:
- Ta co th su dung cac cu lnh ielse lng nhau. Trong trong hop ielse lng
nhau thi else s kt hop voi i gn nht cha co else;
- Trong trong hop cu lnh i bn trong khng co else thi phai vit no trong cp
du } (coi nh la khi lnh) d tranh su kt hop else i sai; Vi du:
if ( so1>0)
if (so2 > so3)
a=so2;
else /*else cua if (so2>so3) */
a=so3;
Hoc:
if (so1>0)
{
if (so2>so3) /*lnh if ny khng c else*/
a=so2;
}
else /*else cua if (so1>0)*/
a=so3;
- Nu sau biu thuc logic cua i ta co du chn phay, vi du:
if (a==0);
{
printf("Nghich dao cua %f la %f",a,1/a);
}
Thi v cu phap trinh bin dich s khng bao sai, nhng xet v y nghia la sai.
53
3. Cu trc SWITCH
Cu truc lua chon cho phep lua chon mt trong nhiu trong hop. Trong C, do la cu
lnh switch.
.0 AhA7
switch (Biu thuc)

case giatri1:

Cng vic 1;
break;
}

case giatrin:

Cng vic N;
break;
}
|deault :

Cng vic N1;


break;
} |
}
Lu d:
54
ung
Sai
Tinh gia tri Biu thuc
Gia tri 1
Gia tri 2
Gia tri
N
Cng vic 1 Cng vic 2 Cng vic n Cng vic n1

Sai
ung
Sai
ung
Giai thich:
- Tinh gia tri cua BigS ,-/;
- Nu gia tri cua biu thuc bng Gic ,^p 1 thi thuc hin CYng bid/ 1 ri thoat;
- Nu gia tri cua biu thuc khac Gic ,^p 1 thi so sanh voi Gic ,^p 2, nu bng thi
thuc hin CYng bid/ 2 ri thoat;
- Tip tuc so sanh voi Gic ,^p N nu n-1 gia tri troc do khng bng gia tri cua BigS
,-/.
- Nu tt ca cac phep so sanh trn du sai thi co th chon thuc hin (hay khng)
CYng bid/ N*1 (Cng vic mc dinh).
K:u [:
- Biu thuc trong switch() phai co kt qua la gia tri kiu s nguyn (int, char, long,
);
- Cac gia tri sau case cng phai la kiu s nguyn;
- Khng bt buc phai co deault;
! ": Nhp vao mt s nguyn, chia s nguyn nay cho 2 ly phn d. Kim tra nu
phn d bng 0 thi in ra thng bao s chn, nu s d bng 1 thi in thng bao s le.
#include <stdio.h>
#include<conio.h>
int main ()
{
int songuyen, phandu;
printf("\n Nhap vao so nguyen ");
scanf("%d",&songuyen);
phandu=(songuyen % 2);
switch(phandu)
{
case 0: printf("%d la so chan ",songuyen);
break;
case 1: printf("%d la so le ",songuyen);
break;
}
getch();
return 0;
}
! #: Nhp vao 2 s nguyn va 1 phep toan. Nu phep toan la `, -, *` thi in ra kt
qua la tng, hiu, tich cua 2 s; Nu phep toan la /` thi kim tra xem s thu 2 co khac
khng hay khng Nu khac khng thi in ra thng cua chung, ngoc li thi in ra thng
bao khong chia cho 0.
include stdio.h
includeconio.h
int main ()

int so1, so2;
55
loat thuong;
char pheptoan;
print(\n Nhap vao 2 so nguyen );
scan(dd,&so1,&so2);
lush(stdin); //Xoa ky tu enter trong vung dem truoc khi nhap phep toan
print(\n Nhap vao phep toan );
scan(c,&pheptoan);
switch(pheptoan)

case '':
print(\n d d d,so1, so2, so1so2);
break;
case '-':
print(\n d - d d,so1, so2, so1-so2);
break;
case '*':
print(\n d * d d,so1, so2, so1*so2);
break;
case '/':
i (so2!0)
thuongloat(so1)/loat(so2);
print(\n d / d , so1, so2, thuong);
}
else print(Khong chia duoc cho 0);
break;
deault :
print(\n Chua ho tro phep toan c, pheptoan);
break;
}
getch();
return 0;
}
Trong vi du trn, ti sao phai xoa ky tu trong vung dm troc khi nhp phep toan
! $: u cu ngoi thuc hin chng trinh nhp vao mt s nguyn dng la thang
trong nm va in ra s ngay cua thang do.
- Thang co 31 ngay: 1, 3, 5, 7, 8, 10, 12 ;
- Thang co 30 ngay: 4, 6, 9, 10;
- Thang co 28 hoc 29 ngay : 2
- Nu nhp vao s 1 hoc 12 thi in ra cu thng bao khng co thang nay .
include stdio.h
56
includeconio.h
int main ()

int thang;
print(\n Nhap vao thangs trong nam );
scan(d,&thang);
switch(thang)

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
print(\n Thang d co 31 ngay ,thang);
break;
case 4:
case 6:
case 9:
case 11:
print(\n Thang d co 30 ngay ,thang);
break;
case 2:
print (\ Thang 2 co 28 hoac 29 ngay);
break;
deault :
print(\n Khong co thang d, thang);
break;
}
getch();
return 0;
}
57
II. >i?u +hi@n lAp
1. Cu trc FOR
Lnh or cho phep lp li cng vic cho dn khi diu kin sai.
.0 AhA{
or (Biu thuc 1; biu thuc 2; biu thuc 3)

Cng vic
}
Lu d:
Giai thich: Cng vic: doc th hin la 1 cu lnh hay 1 khi lnh. Thu tu thuc hin
cua cu lnh or nh sau:
B1: Tinh gia tri cua biu thuc 1.
B2: Tinh gia tri cua biu thuc 2.
- Nu gia tri cua biu thuc 2 la sai (0): thoat khoi cu lnh or.
- Nu gia tri cua biu thuc 2 la dung (!0): Cng vic doc thuc hin.
B+: Tinh gia tri cua biu thuc 3 va quay li B2.
K:u [:
- Khi biu thuc 2 vng mt thi no doc coi la lun lun dung;
- Biu thuc 1: thng thong la mt phep gan d khoi to gia tri ban du cho bin
diu kin;
- Biu thuc 2: la mt biu thuc kim tra diu kin dung sai d dng vng lp;
- Biu thuc 3: thng thong la mt phep gan d thay di gia tri cua bin diu kin,
bin diu kin nay thong (phai co) trong Biu thuc 2;
58
Tinh gia tri BT 1
Biu thuc 2
Tinh gia tri BT 3
Thuc hin CV
T
F
- Trong mi biu thuc co th co nhiu biu thuc con. Cac biu thuc con doc phn
bit boi du phy.
! ": Vit don chng trinh in dy s nguyn t 1 dn 10.
#include <stdio.h>
#include<conio.h>
int main ()
{
int i;
printf("\n Day so tu 1 den 10 :");
for (i=1; i<=10; i++)
{
printf("%d ",i);
}
getch();
return 0;
}
! #: Vit chng trinh nhp vao mt s nguyn n. Tinh tng cua cac s nguyn t 1
dn n.
#include <stdio.h>
#include<conio.h>
int main ()
{
unsigned int n,i,tong;
printf("\n Nhap vao so nguyen duong n:");
scanf("%d",&n);
tong=0;
for (i=1; i<=n; i++)
tong+=i;
printf("\n Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
! $: Vit chng trinh in ra trn man hinh mt ma trn co n dng m ct nh sau:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9

#include <stdio.h>
#include <conio.h>
int main ()
{
59
unsigned int dong, cot, n, m;
printf("\n Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
for (dong=0;dong<n;dong++)
{
printf("\n");
for (cot=1;cot<=m;cot++)
printf("%d\t",dong+cot);
}
getch();
return 0;
}
2. Cu trc WHILE
Vng lp while ging nh vng lp or, dung d lp li mt cng vic nao do cho dn khi
diu kin sai.
.0 AhA{
while (Biu thuc diu kin)

Cng vic
}
Lu d:
Giai thich:
- Cng vic: doc th hin bng 1 cu lnh hay 1 khi lnh;
- Kim tra Biu thuc diu kin;
- Nu diu kin sai (0) thi thoat khoi lnh while;
- Nu diu kin dung (!0) thi thuc hin cng vic ri quay li kim tra diu kin
tip.
K:u [:
- Lnh while gm co biu thuc diu kin va thn vng lp (khi lnh thuc hin cng
vic) ;
60
iu kin
Thuc hin CV
T
F
- Vng lp dng li khi nao diu kin sai;
- Khi lnh thuc hin cng vic co th rng, co th lam thay di diu kin.
! ": Vit don chng trinh in dy s nguyn t 1 dn 10.
#include <stdio.h>
#include<conio.h>
int main ()
{
int i;
printf("\n Day so tu 1 den 10 :");
i=1;
while (i<=10)
{
printf("%d ",i);
i=i+1;
}
getch();
return 0;
}
! #: Vit chng trinh nhp vao mt s nguyn n. Tinh tng cua cac s nguyn t 1
dn n.
include stdio.h
includeconio.h
int main ()

unsigned int n,i,tong;
print(\n Nhap vao so nguyen duong n:);
scan(d,&n);
tong0;
i1;
while (in)

tongi;
i;
}
print(\n Tong tu 1 den d d ,n,tong);
getch();
return 0;
}
! $: Vit chng trinh in ra trn man hinh mt ma trn co n dng m ct nh sau:
61
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9

include stdio.h
includeconio.h
int main ()

unsigned int dong, cot, n, m;
print(\n Nhap vao so dong va so cot :);
scan(dd,&n,&m);
dong0;
while (dongn)

print(\n);
cot1;
while (cotm)

print(d\t,dongcot);
cot;
}
dong;
}
getch();
return 0;
}
3. Cu trc DO .. WHILE
Vng lp do while ging nh vng lp or, while, dung d lp li mt cng vic nao
do khi diu kin cn dung.
.0 AhA{
do

Cng vic
}
while (Biu thuc diu kin)
Lu d:
62
Giai thich:
- Cng vic: doc th hin bng 1 cu lnh hay 1 khi lnh;
- Troc tin cng vic doc thuc hin troc, sau do moi kim tra Biu thuc diu
kin;
- Nu diu kin sai thi thoat khoi lnh do while;
- Nu diu kin cn dung thi thuc hin cng vic ri quay li kim tra diu kin
tip;
K:u [7
- Lnh dowhile thuc hin cng vic it nht 1 ln;
- Vng lp dng li khi diu kin sai;
- Khi lnh thuc hin cng vic co th rng, co th lam thay di diu kin.
! ": Vit don chng trinh in dy s nguyn t 1 dn 10.
include stdio.h
includeconio.h
int main ()

int i;
print(\n Day so tu 1 den 10 :);
i1;
do
print(d ,i);
while (i10);
getch();
return 0;
}
! #: Vit chng trinh nhp vao mt s nguyn n. Tinh tng cua cac s nguyn t 1
dn n.
include stdio.h
includeconio.h
63
iu kin
Thuc hin CV
T
F
int main ()

unsigned int n,i,tong;
print(\n Nhap vao so nguyen duong n:);
scan(d,&n);
tong0;
i1;
do

tongi;
i;
} while (in);
print(\n Tong tu 1 den d d ,n,tong);
getch();
return 0;
}
! $7 Vit chng trinh in ra trn man hinh mt ma trn co n dng m ct nh sau (n,
m1):
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9

include stdio.h
includeconio.h
int main ()

unsigned int dong, cot, n, m;
print(\n Nhap vao so dong va so cot :);
scan(dd,&n,&m);
dong0;
do

print(\n);
cot1;
do

print(d\t,dongcot);
cot;
} while (cotm);
dong;
} while (dongn);
getch();
return 0;
}
64
]o 6nh cc van- 2UA
3ng [h] o^@ -i[t0
- Kim tra diu kin troc thuc hin cng vic sau nn don lnh thuc hin cng
vic co th khng doc thuc hin;
- Vng lp kt thuc khi nao diu kin sai.
3ng [h] Ro-i[t0
- Thuc hin cng vic troc kim tra diu kin sau nn don lnh thuc hin cng
vic doc thuc hin it nht 1 ln.;
- Vng lp kt thuc khi nao diu kin sai.
4. Lnh break v continue
K3nh brC+k
Cu phap:
break;
nghia: Dung d thoat khoi vng lp. Khi gp cu lnh nay trong vng lp, chng trinh
s thoat ra khoi vng lp va ch dn cu lnh lin sau no. Nu nhiu vng lp -- break s
thoat ra khoi vng lp gn nht. Ngoai ra, break cn doc dung trong cu truc lua chon
switch.
K3nh continuC
Cu phap:
continue;
nghia : Khi gp lnh nay trong cac vng lp, chng trinh s bo qua phn cn li trong
vng lp va tip tuc thuc hin ln lp tip theo. Di voi lnh or, biu thuc 3 s doc tinh
tri va quay li boc 2. Di voi lnh while, do while; biu thuc diu kin s doc tinh va
xet xem co th tip tuc thuc hin Cng vic nua hay khng (dua vao kt qua cua biu
thuc diu kin).
III. "#m t$t n%i &ung bi h'c
I. iu khin chon
1. Khi lnh
2. Cu truc IF
3. Cu truc SWITCH
4. Vi du
II. iu khin lp
1. Cu truc FR
2. Cu truc WHIL
3. Cu truc D .. WHIL
4. Lnh break va continue
III. Bai tp
I!. Bi tp
Xem Bi = - Bi ,\] ,-./ -n- Cc/ /iS ,^j/ kieS f-ign
65
Bi 5 - Bi thc hnh: IU KHIEN CHQN V LAP
I. "h<c hin cc v & )=u
1. Gii phuong trnh bc 2
Yu cu7 Vit chng trinh cho phep bin lun v nghim cua phng trinh bc 2
a*x
2
b*xc 0.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u7
include stdio.h
include conio.h
include stdlib.h
include math.h
int main()
int a,b,c;
loat d;
loat x1,x2;
system(cls);
print(Nhap vao cac he so a,b va c:);
scan(d d d,&a,&b,&c);
db*b-4*a*c;
i (d0)

print(Phuong trinh vo nghiem\n);
}
else

i (d0)

x1(-b)/(2*a);
print(Phuong trinh co nghiem kep x1x210.2\n,x1);
}
else

x1(-bsqrt(d))/(2*a);
x2(-b-sqrt(d))/(2*a);
print(Phuong trinh co 2 nghiem phan biet x110.2 , x210.2 \n,x1,x2);
}
}
print(Nhan phim bat ky de ket thuc!);
66
getch();
return 0;
}
4hJ n-hi3m "7
1. Nhn F9, khi do giao din nhp liu xut hin nh hinh sau:
2. Nhp cac gia tri cho a,b, c tng ung la 2 4 2 nter , khi do kt qua nhn
doc nh hinh sau:
3. Nhn xet v kt qua dt doc.
4hJ n-hi3m #7 Nhp cac gia tri cho a,b, c tng ung la -3 1 2 nhn xet v kt qua nhn
doc.
4hJ n-hi3m $7 Nhp cac gia tri cho a,b, c bt ky, nhn xet v kt qua nhn doc.
2. Tm USCNLN ca hai s
Yu cu7 Vit chng trinh cho phep nhp vao 2 s nguyn va in ra oc s chung lon
nht cua 2 s do.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u7
include stdio.h
67
include conio.h
include stdlib.h
include math.h
int main()
int a,b,t,u,v;
system(cls);
print(Nhap vao cac he so a va b:);
scan(d d,&a,&b);
ua;
vb;
while (a0)

i (ab)

ta; ab; bt;
}
aa-b;
}
print(USCLN cua d va d d\n, u, v, b);
print(Nhan phim bat ky de ket thuc!);
getch();
return 0;
}
4hJ n-hi3m "7 T
1. Nhn F9 d chy chng trinh, khi do giao din chng trinh xut hin nh
sau:
2. Nhp cac gia tri cho a va b tng ung la 12 18 nter, khi do kt qua nhn doc
nh sau:
68
3. Nhn xet v kt qua dt doc
4hJ n-hi3m #7 Thay di thut toan.
II. Bi tp t< lm
1. Vit chng trinh nhp 3 s t ban phim, tim s lon nht trong 3 s do, in kt qua ln
man hinh.
2. Vit chng trinh tinh chu vi, din tich cua tam giac voi yu cu sau khi nhp 3 s a,
b, c phai kim tra li xem a, b, c co to thanh mt tam giac khng Nu co thi tinh chu
vi va din tich. Nu khng thi in ra cu Khng to thanh tam giac.
3. Vit chng trinh giai phng trinh bc nht axb0 voi a, b nhp t ban phim.
4. Vit chng trinh giai phng trinh bc hai ax2bx c 0 voi a, b, c nhp t ban
phim.
5. Vit chng trinh nhp t ban phim 2 s a, b va mt ky tu ch. Nu: ch la thi thuc
hin phep tinh a b va in kt qua ln man hinh. ch la thi thuc hin phep tinh a - b
va in kt qua ln man hinh. ch la * thi thuc hin phep tinh a * b va in kt qua ln
man hinh. ch la / thi thuc hin phep tinh a / b va in kt qua ln man hinh.
6. Vit chng trinh nhp vao 2 s la thang va nm cua mt nm. Xet xem thang do co
bao nhiu ngay Bit rng: Nu thang la 4, 6, 9, 11 thi s ngay la 30. Nu thang la 1,
3, 5, 7, 8, 10, 12 thi s ngay la 31. Nu thang la 2 va nm nhun thi s ngay 29, ngoc
li thi s ngay la 28.
7. Co hai phng thuc gui tin tit kim: gui khng ky hn li sut 2.4/thang, mi
thang tinh li mt ln, gui co ky hn 3 thang li sut 4/thang, 3 thang tinh li mt
ln.Vit chng trinh tinh tng cng s tin ca vn ln loi sau mt thoi gian gui nhp
t ban phim.
8. Mt s nguyn dng chia ht cho 3 nu tng cac chu s cua no chia ht cho 3. Vit
chng trinh nhp vao mt s co 3 chu s, kim tra s do co chia ht cho 3 dung tinh
cht trn.( i )
9. Tr chi n tu ti: tr chi co 2 ngoi chi mi ngoi s dung tay d biu thi mt
trong 3 cng cu sau: Keo, Bao va Bua. Nguyn tc: Keo thng bao. Bao thng bua.
Bua thng keo. Vit chng trinh m phong tr chi nay cho hai ngoi chi va ngoi
chi voi may. (switch)
69
10. Vit chng trinh tinh tin din gm cac khoan sau: Tin thu bao din k : 1000
dng / thang. inh muc su dung din cho mi h la 50 Kw Phn dinh muc tinh gia
450 dng /Kwh Nu phn vot dinh muc 50 Kw tinh gia pht cho phn nay la 700
dng/Kwh . Nu phn vot dinh muc lon 50 Kw va nho hn 100Kw tinh gia pht cho
phn nay la 910 dng/Kwh Nu phn vot dinh muc lon hn hay bng 100 Kw tinh
gia pht cho phn nay la 1200 dng/Kwh . Voi : ch s din k c va ch s din k
moi nhp vao t ban phim. In ra man hinh s tin tra trong dinh muc, vot dinh muc
va tng cua chung. (i)
11. Vit chng trinh nhn vao gio, phut, giy dng (hh:mm:ss ), t ban phim. Cng thm
mt s giy vao va in ra kt qua doi dng ( hh:mm:ss ).
12. Vit chng trinh nhp vao ngay thang nm cua mt ngay, kim tra no co hop l
khng.
13. Kim tra mt ky tu nhp vao thuc tp hop nao trong cac tp ky tu sau: Cac ky tu chu
hoa: 'A' ...'' Cac ky tu chu thong: 'a' ... '' Cac ky tu chu s : '0' ... '9' Cac ky tu
khac. 14. H thp luc phn dung 16 ky s bao gm cac ky tu 0 .. 9 va A, B, C, D, ,F.
Cac ky s A, B, C, D, , F co gia tri tng ung trong h thp phn nh sau: A 10 B 11
C 12 D 13 14 F 15. Hy vit chng trinh cho nhp vao ky tu biu din mt ky s
cua h thp luc phn va cho bit gia tri thp phn tng ung. Trong hop ky tu nhp
vao khng thuc cac ky s trn, da ra thng bao li : H thp luc phn khng dung
ky s nay
14. Vit chng trinh nhp vao ngay thang nm cua ngay hm nay, in ra ngay thang nm
cua ngay mai.
15. Vit chng trinh tinh cac tng sau: a) S1 2 ... n b) S1/2 2/3 ... n/(n1)
c) S - 1 2 - 3 4 - ... (-1)nn
16. Vit chng trinh nhp vao mt dy n s, tim s lon nht cua dy va xac dinh vi tri
cua s lon nht trong dy.
17. Vit chng trinh dm s chu s cua mt s nguyn n.
18. Tim s nguyn dng k nho nht sao cho 2k n voi n la mt s nguyn dng nhp
t ban phim.
19. Vit chng trinh in ra s dao ngoc cua mt s nguyn n, voi n nhp t ban phim.
20. Tinh gia tri trung binh cua mt dy s thuc, kt thuc dy voi -1.
21. Vit chng trinh m phong phep chia nguyn DIV 2 s nguyn a va b nh sau: d
chia nguyn a va b ta tinh tri a-b, sau do ly hiu tim doc li tr cho b... tip tuc cho
dn khi hiu cua no nho hn b. S ln thuc hin doc cac phep tr o trn s bng tri
cua phep chia nguyn.
22. Tim s nguyn dng N nho nht sao cho 11/2 ...1/N S, voi S nhp t ban
phim.
23. Vit chng trinh tinh P2*4*6*...*(2n), n nhp t ban phim.
24. Vit chng trinh tim UCLN va BCNN cua hai s a va b theo thut toan sau (Ky hiu
UCLN cua a, b la (a,b) cn BCNN la |a,b|) - Nu a chia ht cho b thi (a,b) b - Nu a
b*q r thi (a,b) (b,r) - |a,b| a*b/(b,r) .
70
25. Vit chng trinh nhp vao mt s nguyn dng n, in ra man hinh cac s nguyn t
p n. S nguyn p goi la s nguyn t nu p ch chia ht cho mt va chia ht cho
ban thn no.
26. Vit chng trinh tinh gn dung cn bc hai cua mt s dng a theo phng phap
Newton : Troc ht cho x0(1 a)/2 sau do la cng thuc truy hi: xn1( xn
a/xn)/2 xn1 - xn xn e thi cn bc hai cua a bng xn1Nu: Trong do e la mt hng
s cho troc lam d chinh xac.
27. Vit chng trinh tinh gn dung cn bc n cua mt s dng a theo phng phap
Newton : Troc ht cho x0 a/n sau do la cng thuc truy hi: (n-1) xkn a nxkn-
1xk1 Nu ,a - xnn, e thi xn la cn bc n cua a. Trong do e la mt hng s cho
troc lam d chinh xac. Nu a 0 va n chn thi khng tn ti cn.
71
Bi 6 - MNG, CON TR V XU K TU
Ni RSng Ti -U/
W. M&ng
1. M&ng 6'ng :
2. M&ng m chi`u
3. M&ng nhi`u chi`u
WW. :'n 6a
1. Ih$i 5-' # MN dng 5i.n c'n 6a
2. :'n 6a # m&ng
3. :'n 6a # h$m MO h+nh h,c cV$ hm
WWW. 8eu %E F
1. Ih$i 5-'
2. :-c h$' -c 6n chubi %E F
WT. THm ni dung 5i hc
I. (ng
1. Mng trong C
Mang la mt tp hop cac phn tu c dinh co cung mt kiu, goi la kiu phn tu. Kiu
phn tu co th la: ky tu, s, chui ky tu;
Ta co th chia mang lam 2 loi: mang 1 chiu va mang nhiu chiu.
2. Mng mt chiu
Mang 1 chiu la mt dy cac phn tu co cung tn goi, co 1 ch s d ch thu tu cua phn
tu do trong dy. Mang mt chiu cn co th hiu nh mt Vector.
Kh+i bo m?n- v;i 6@ Ahn tJ )c nh Ykh+i bo t:bn- minhZ
Cu phap:
Kiu Tn mang |n|
Trong do:
- Tn mang: dy la mt cai tn dt dung theo quy tc dt tn cua danh biu;
- n: la mt hng s nguyn, cho bit s long phn tu ti da trong mang la bao
nhiu (hay noi khac di kich thoc cua mang la gi);
- Kiu: mi phn tu cua mang co du liu thuc kiu gi;
- O dy, ta khai bao mt bin mang gm co n phn tu, phn tu thu nht la ,n rng
|0|, phn tu cui cung la ,n rng|n -1|;
!:
72
int a|10|;
/* Khai bao bin mang tn a, phn tu thu nht la a|0|, phn tu cui cung la a|9|.*/
Ta co th coi mang a la mt dy lin tip cac phn tu trong b nho nh sau:
Vi tri 0 1 2 3 4 5 6 7 8 9
Tn phn tu a|0| a|1| a|2| a|3| a|4| a|5| a|6| a|7| a|8| a|9|
Hinh 1: Hinh anh mang a trong b nho
Kh+i bo m?n- v;i 6@ Ahn tJ khVn- )c nh Ykh+i bo khVn- t:bn- minhZ
Cu phap:
Kiu Tn mang ||
Khi khai bao, khng cho bit r s phn tu cua mang, kiu khai bao nay thong doc ap
dung trong cac trong hop: va khai bao va gan gia tri, khai bao mang la tham s hinh
thuc cua ham.
c+ kh+i bo vc+ -n -i tr
Cu phap:
Kiu Tn mang || Cac gia tri cach nhau boi du phy}
Nu va khai bao va gan gia tri thi mc nhin C s hiu s phn tu cua mang la s gia tri
ma chung ta gan cho mang trong cp du }. Chung ta co th su dung ham sitoy{ d ly
s phn tu cua mang nh sau:
S phn tusitoy,n rng{/ sitoyfigS{
4ruy )u/t tcn- Ahn tJ c<+ m?n-
Mi phn tu cua mang doc truy xut thng qua Tn Tin rng theo sau la /- s nm
trong cp RiS ngoh/ bSYng # Chng hn a|0| la phn tu du tin cua mang a doc khai
bao o trn. Ch s cua phn tu mang la mt biu thuc ma gia tri la kiu s nguyn.
! ":
int a|10|;
Trong khai bao nay, vic truy xut cac phn tu doc ch ra trong hinh 1. Chng hn phn
tu thu 2 (co vi tri 1) la a|1|
! #: Va khai bao va gan tri cho 1 mang 1 chiu cac s nguyn. In mang s nguyn
nay ln man hinh.
include stdio.h
include conio.h
int main()

73
int n,i,,tam;
int dayso||66,65,69,68,67,70};
nsieo(dayso)/sieo(int); /*Lay so phan tu*/
print(\n Noi dung cua mang );
or (i0;in;i)
print(d ,dayso|i|);
getch();
return 0;
}
! $: i mt s nguyn dng thp phn thanh s nhi phn. Vic chuyn di nay
doc thuc hin bng cach ly s do chia lin tip cho 2 cho toi khi bng 0 va ly cac s
d theo chiu ngoc li d to thanh s nhi phn. Ta s dung mang mt chiu d lu li
cac s d do.
#include<conio.h>
#include<stdio.h>
int main()
{
unsigned int N;
unsigned int Du;
unsigned int NhiPhan[20],K=0;
int i;
printf("Nhap vao so nguyen N= ");scanf("%d",&N);
do
{
Du=N % 2;
NhiPhan[K]=Du;
K++;
N = N/2;
} while(N>0);
printf("Dang nhi phan la: ");
for(i=K-1;i>=0;i--)
printf("%d",NhiPhan[i]);
getch();
return 0;
}
! %: Nhp vao mt dy n s va sp xp cac s theo thu tu tng. Co rt nhiu giai thut
sp xp. Mt trong s do doc m ta nh sau: u tin da phn tu thu nht so sanh voi
cac phn tu cn li, nu no lon hn mt phn tu dang so sanh thi di ch hai phn tu cho
nhau ri tip tuc so sanh. Sau do tip tuc so sanh phn tu thu hai voi cac phn tu t thu ba
tro di ... cu tip tuc nh vy cho dn phn tu thu n-1.
74
#include<conio.h>
#include<stdio.h>
int main()
{
int b[20], N, i,j,t;
! ". Nha# so #han tu cua man$!
#rint%(&'o #han tu thuc te cua man$ N( &);
scan%(&)d&,*N);

! 2. Nha# $ia tri cac #ha tu cua man$!
%or(i(0; i< N; i++)
{
#rint%(&,han tu thu )d- &,i);scan%(&)d&,*b[i]);
.
! /. 'a# 0e# $iam dan!
%or(i(0;i<N1";i++)
{
%or(int j(i+";j<N;j++)
{
i% (b[i]>b[j])
{
t(b[i];
b[i](b[j];
b[j](t;
.
.
.

! 2. 3n 4et 5ua sau 4hi sa# 0e#!
#rint%(&6an$ '78 4hi sa# 0e#- &);
%or (i(0; i<N;i++)
#rint%(&)d &,b[i]);
$etch();
return 0;
.
Phin ban khac cua chng trinh su dung ham (s hoc o bai sau) : vit cac ham Nhap
(Nhp cac s), SapXep (Sp xp) va InMang (In cac s); cac tham s hinh thuc cua cac
ham nay la 1 mang khng ch dinh r s phn tu ti da, nhng ta cn co thm s phn tu
thuc t doc su dung cua mang la bao nhiu, dy la mt gia tri nguyn.
includeconio.h
includestdio.h
75
void Nhap(int a||,int N)

int i;
or(i0; i N; i)

print(Phan tu thu d: ,i);scan(d,&a|i|);
}
}
void InMang(int a||, int N)

int i;
or (i0; iN;i)
print(d ,a|i|);
print(\n);
}
void SapXep(int a||, int N)

int t,i;
or(i0;iN-1;i)
or(int i1;N;)
i (a|i|a||)

ta|i|;
a|i|a||;
a||t;
}
}
int main()

int b|20|, N;
print(So phan tu thuc te cua mang N );
scan(d,&N);
Nhap(b,N);
print(Mang vua nhap: );
InMang(b,N);
SapXep(b,N); /* Gi ham sp xp*/
print(Mang sau khi sap xep: );
InMang(b,N);
getch();
return 0;
76
}
3. Mng nhiu chiu
Mang nhiu chiu la mang co t 2 chiu tro ln. Ngoi ta thong su dung mang nhiu
chiu d lu cac ma trn, cac toa d 2 chiu, 3 chiu
Kh+i bo m?n- # chiu t:bn- minh
Cu phap:
Kiu Tn mang|S phn tu chiu 1||S phn tu chiu 2|
!: Ngoi ta cn lu tru thng tin cua mt ma trn gm cac s thuc. Luc nay ta co th
khai bao mt mang 2 chiu nh sau:
float m[8][9]; /* Khai bao mang 2 chiu co 8*9 phn tu la s thuc*/
Trong trong hop nay, ta d khai bao cho mt ma trn co ti da la 8 dng, mi dng co
ti da la 9 ct. Hinh anh cua ma trn nay doc cho trong hinh 2:
JngC, 0 1 2 + 6 = > $ F
0 m|0||0| m|0||1| m|0||2| m|0||3| m|0||4| M|0|
|5|
m|0||6| m|0||7| m|0||8|
1 m|1||0| m|1||1| m|1||2| m|1||3| m|1||4| M|1|
|5|
m|1||6| m|1||7| m|1||8|
2 m|2||0| m|2||1| m|2||2| m|2||3| m|2||4| M|2|
|5|
m|2||6| m|2||7| m|2||8|
+ m|3||0| m|3||1| m|3||2| m|3||3| m|3||4| m|3||5| m|3||6| m|3||7| m|3||8|
6 m|4||0| m|4||1| m|4||2| m|4||3| m|4||4| m|4||5| m|4||6| m|4||7| m|4||8|
= m|5||0| m|5||1| m|5||2| m|5||3| m|5||4| m|5||5| m|5||6| m|5||7| m|5||8|
> m|6||0| m|6||1| m|6||2| m|6||3| m|6||4| m|6||5| m|6||6| m|6||7| m|6||8|
$ m|7||0| m|7||1| m|7||2| m|7||3| m|7||4| m|7||5| m|7||6| m|7||7| m|7||8|
Hinh 2: Ma trn doc m ta la 1 mang 2 chiu
Kh+i bo m?n- # chiu khVn- t:bn- minh
khai bao mang 2 chiu khng tong minh, ta vn phai ch ra s phn tu cua chiu thu
hai (chiu cui cung).
Cu phap:
Kiu Tn mang |||S phn tu chiu 2|
Cach khai bao nay cng doc ap dung trong trong hop va khai bao, va gan tri hay dt
mang 2 chiu la tham s hinh thuc cua ham.
4ruy )u/t tcn- Ahn tJ c<+ m?n- # chiu
Ta co th truy xut mt phn tu cua mang hai chiu bng cach vit ra ,n rng theo sau
la hai ch s dt trong hai cp du ngoc vung. Chng hn ta vit m|2||3|.
77
Voi cach truy xut theo cach nay, Tn rngC- s 1C- s 2 co th coi la 1 bin co
kiu doc ch ra trong khai bao bin mang.
! ": Vit chng trinh cho phep nhp 2 ma trn a, b co m dng n ct, thuc hin phep
toan cng hai ma trn a,b va in ma trn kt qua ln man hinh. Trong vi du nay, ta s su
dung ham d lam ngn gon hn chng trinh cua ta. Ta s vit cac ham: nhp 1 ma trn
t ban phim, hin thi ma trn ln man hinh, cng 2 ma trn.
includeconio.h
includestdio.h
void Nhap(int a|||10|,int M,int N)

int i,;
or(i0;iM;i)
or(0; N; )

print(Phan tu o dong d cot d: ,i,);
scan(d,&a|i|||);
}
}
void InMaTran(int a|||10|, int M, int N)

int i,;
or(i0;iM;i)

or(0; N; )
print(d ,a|i|||);
print(\n);
}
}
/* Cong 2 ma tran A & B ket qua la ma tran C*/
void CongMaTran(int a|||10|,int b|||10|,int M,int N,int c|||10|)

int i,;
or(i0;iM;i)
or(0; N; )
c|i|||a|i|||b|i|||;
}
int main()

78
int a|10||10|, b|10||10|, M, N;
int c|10||10|;/* Ma tran tong*/
print(So dong M ); scan(d,&M);
print(So cot M ); scan(d,&N);
print(Nhap ma tran A\n);
Nhap(a,M,N);
print(Nhap ma tran B\n);
Nhap(b,M,N);
print(Ma tran A: \n);
InMaTran(a,M,N);
print(Ma tran B: \n);
InMaTran(b,M,N);
CongMaTran(a,b,M,N,c);
print(Ma tran tong C:\n);
InMaTran(c,M,N);
getch();
return 0;
}
! #: Nhp vao mt ma trn 2 chiu gm cac s thuc, in ra tng cua cac phn tu trn
dong cheo chinh cua ma trn nay. Ta nhn thy rng gia su ma trn a co M dng, N ct
thi cac phn tu cua dong cheo chinh la cac phn tu co dng: a|i||i| voi i |0
min(M,N)-1|.
includeconio.h
includestdio.h
int main()

loat a|10||10|, T0;
int M, N, i,, Min;
print(Ma tran co bao nhieu dong );scan(d,&M);
print(Ma tran co bao nhieu cot );scan(d,&N);
or(i0;iM;i)
or(0; N; )

print(Phan tu o dong d cot d: ,i,);
scan(,&a|i|||);
}
print(Ma tran vua nhap: \n);
or(i0;iM;i)
79

or(0; N; )
print(.2 ,a|i|||);
print(\n);
}
Min (MN) N: M; /* Tim gia tr nh nht ca M & N*/
or(i0;iMin;i)
TTa|i||i|;
print(Tong cac phan tu o duong cheo chinh la: ,T);
getch();
return 0;
}
II. Con trB
Cac bin chung ta d bit va su dung troc dy du la bin co kich thoc va kiu du liu
xac dinh. Ngoi ta goi cac bin kiu nay la bin tinh. Khi khai bao bin tinh, mt long
nho cho cac bin nay s doc cp phat ma khng cn bit trong qua trinh thuc thi chng
trinh co su dung ht long nho nay hay khng. Mt khac, cac bin tinh dng nay s tn
ti trong sut thoi gian thuc thi chng trinh du co nhung bin ma chng trinh ch su
dung 1 ln ri bo.
Mt s hn ch co th gp phai khi su dung cac bin tinh:
- Cp phat nho d, gy ra lng phi nho;
- Cp phat nho thiu, chng trinh thuc thi bi li.
tranh nhung hn ch trn, ngn ngu C cung cp cho ta mt loi bin dc bit goi la
bin dng voi cac dc dim sau:
- Ch phat sinh trong qua trinh thuc hin chng trinh chu khng phat sinh luc bt
du chng trinh;
- Khi chy chng trinh, kich thoc cua bin, vung nho va dia ch vung nho doc
cp phat cho bin co th thay di;
- Sau khi su dung xong co th giai phong d tit kim ch trong b nho.
Tuy nhin cac bin dng khng co dia ch nht dinh nn ta khng th truy cp dn chung
doc. Vi th, ngn ngu C li cung cp cho ta mt loi bin dc bit nua d khc phuc tinh
trng nay, do la bin con tro (pointer) voi cac dc dim:
- Bin con tro khng chua du liu ma ch chua dia ch cua du liu hay chua dia ch
cua nho chua du liu;
- Kich thoc cua bin con tro khng phu thuc vao kiu du liu, lun co kich thoc
c dinh la 2 byte.
1. Khai bo v s dng bin con tr
Kh+i bo biGn con trO
Cu phap:
Kiu * Tn con tro ;
80
nghia: Khai bao mt bin co tn la Tn /on ,^l dung d chua dia ch cua cac bin co
kiu KigS#
! ": Khai bao 2 bin a,b co kiu int va 2 bin pa, pb la 2 bin con tro kiu int.
int a, b, *pa, *pb;
! #: Khai bao bin kiu loat va bin p la con tro loat
loat , *p;
Lu y: Nu cha mun khai bao kiu du liu ma con tro ptr dang ch dn, ta su dung:
void *ptr;
sau do, nu ta mun con tro ptr ch dn kiu du liu gi cng doc. Tac dung cua khai bao
nay la ch danh ra 2 bytes trong b nho d cp phat cho bin con tro ptr.
.c th+o tc trn con trO
Gcn kpX /- /X Tin /-o Tin /on ,^l
Toan tu & dung d dinh vi con tro dn dia ch cua mt bin dang lam vic.
Cu phap:
Tn bin con tro&Tn bin;
Giai thich: Ta gan dia ch cua bin Tn Tin cho con tro Tn Tin /on ,^l.
Vi du: Gan dia ch cua bin a cho con tro pa, gan dia ch cua bin b cho con tro pb.
pa&a; pb&b;
Lu y: Khi gan dia ch cua bin tinh cho con tro cn phai lu y kiu du liu cua chung. Vi
du sau dy khng dung do khng tng thich kiu:
int Bien_Nguyen;
float *Con_Tro_Thuc;
...
Con_Tro_Thuc=&Bien_Nguyen;
Phep gan o dy la sai vi ConTroThuc la mt con tro kiu loat (no ch co th chua doc
dia ch cua bin kiu loat); trong khi do, BienNguyen co kiu int.
Ni RSng /X Y n-s /on ,^l /- ,si
truy cp dn ni dung cua nho ma con tro ch toi, ta su dung cu phap:
Tn Tin /on ,^lw
! $: Vi du sau dy cho phep khai bao, gan dia ch cng nh ly ni dung vung nho
cua bin con tro:
int x100;
81
int *ptr;
ptr&x;
int y *ptr;
Lu y: Khi gan dia ch cua mt bin cho mt bin con tro, moi su thay di trn ni dung
nho con tro ch toi s lam gia tri cua bin thay di theo (thuc cht ni dung nho va
bin ch la mt).
! %: on chng trinh sau thy r su thay di nay :
include stdio.h
include conio.h
int main()

int a,b,*pa,*pb;
a2;
b3;
print(\nGia tri cua bien ad \nGia tri cua bien bd ,a,b);
pa&a;
pb&b;
print(\nNoi dung cua o nho con tro pa tro toid,*pa);
print(\nNoi dung cua o nho con tro pb tro toid ,*pb);
*pa20; /* Thay doi gia tri cua *pa*/
*pb20; /* Thay doi gia tri cua *pb*/
print(\nGia tri moi cua bien ad \n Gia tri moi cua bien bd ,a,b);
getch();
return 0;
}
./A Aht vNn- nh; cho biGn con trO
Troc khi su dung bin con tro, ta nn cp phat vung nho cho bin con tro nay quan ly
dia ch. Vic cp phat doc thuc hin nho cac ham malloc(), calloc() trong th vin
alloc.h.
Cu phap:
boiR rX[[o/ysit, sit{:
Cp phat vung nho co kich thoc la sie.
boiR /X[[o/ysit, ni,trs@ sit, sit{:
Cp phat vung nho co kich thoc la nitems*sie.
Vi du: Gia su ta co khai bao:
82
int a, *pa, *pb;
pa (int*)malloc(sieo(int));
/* Cp phat vung nho co kich thoc bng voi kich thoc cua mt s nguyn */
pb (int*)calloc(10, sieo(int));
/* Cp phat vung nho co th chua doc 10 s nguyn*/
Luc nay hinh anh trong b nho nh sau:
0 0 1 2 3 4 5 6 7 8 9
pa (2 byte) pb (2 byte)
L`S n: Khi su dung ham malloc() hay calloc(), ta phai ep kiu vi nguyn mu cac ham
nay tra v con tro kiu void.
./A Aht 2^i vNn- nh; cho biGn con trO
Trong qua trinh thao tac trn bin con tro, nu ta cn cp phat thm vung nho co kich
thoc lon hn vung nho d cp phat, ta su dung ham realloc().
.0 AhA:
void *realloc(void *block, siet sie)
nghia:
- Cp phat li 1 vung nho cho con tro block quan ly, vung nho nay co kich thoc
moi la sie; khi cp phat li thi ni dung vung nho troc do vn tn ti;
- Kt qua tra v cua ham la dia ch du tin cua vung nho moi. ia ch nay co th
khac voi dia ch doc ch ra khi cp phat ban du.
!: Trong vi du trn ta co th cp phat li vung nho do con tro pa quan ly nh sau:
int a, *pa;
pa (int*)malloc(sieo(int)); /*Cp phat vung nho co kich thoc 2 byte*/
pa realloc(pa, 6); /* Cp phat li vung nho co kich thoc 6 byte*/
`i?i Ahn- vNn- nh; cho biGn con trO : Mt vung nho d cp phat cho bin con tro, khi
khng cn su dung nua, ta s thu hi li vung nho nay nho ham ree().
Cu phap:
void ree(void *block)
nghia: Giai phong vung nho doc quan ly boi con tro block.
!: O vi du trn, sau khi thuc hin xong, ta giai phong vung nho cho 2 bin con tro pa
& pb:
83
ree(pa);
ree(pb);
M5t 6@ Ah*A ton trn con trO
a. Phep gan con tro: Hai con tro cung kiu co th gan cho nhau.
Vi du
int a, *p, *q ; loat *;
a 5 ; p &a ; q p ; /* dung */
p ; /* sai do khac kiu */
Ta cng co th ep kiu con tro theo cu phap:
(Kiu kt qua*)Tn con tro
Chng hn, vi du trn doc vit li:
int a, *p, *q ; loat *;
a 5 ; p &a ; q p ; /* dung */
(loat*)p; /* ung nho ep kiu*/
b. Cng, tr con tro voi mt s nguyn
Ta co th cng (), tr (-) 1 con tro voi 1 s nguyn N nao do; kt qua tra v la 1 con tro.
Con tro nay ch dn vung nho cach vung nho cua con tro hin ti N phn tu.
Vi du: Cho don chng trinh sau:
int *pa;
pa (int*) malloc(20); /* Cp phat vung nho 20 byte10 s nguyn*/
int *pb, *pc;
pb pa 7;
pc pb - 3;
Luc nay hinh anh cua pa, pb, pc nh sau:
0

1

2

3 4 5 6 7

8

9

pa pc pb
c. Con tro NULL: la con tro khng chua dia ch nao ca. Ta co th gan gia tri NULL cho 1
con tro co kiu bt ky.
d. Lu y:
- Ta khng th cng 2 con tro voi nhau;
84
- Phep tr 2 con tro cung kiu s tra v 1 gia tri nguyn (int). y chinh la khoang
cach (s phn tu) giua 2 con tro do. Chng hn, trong vi du trn pc-pa4.
2. Con tr v mng
.on trO v m?n- " chiu
Giua mang va con tro co mt su lin h rt cht ch. Nhung phn tu cua mang co th
doc xac dinh bng ch s trong mang, bn cnh do chung cng co th doc xac lp qua
bin con tro.
T^S /\] /c/ ]-xn , rng ,-to Rng /on ,^l
Ta co cac quy tc sau:
- &Tn mang|0| tng dng voi Tn mang
- &Tn mang |Vi tri| tng dng voi Tn mang Vi tri
- Tn mang|Vi tri| tng dng voi *(Tn mang Vi tri)
! ": Cho 1 mang 1 chiu cac s nguyn a co 5 phn tu, truy cp cac phn tu theo kiu
mang va theo kiu con tro.
include stdio.h
include conio.h
/* Nhap mang binh thuong */
void NhapMang(int a||, int N)

int i;
or(i0;iN;i)

print(Phan tu thu d: ,i);scan(d,&a|i|);
}
}
/* Nhap mang theo dang con tro */
void NhapContro(int a||, int N)

int i;
or(i0;iN;i)

print(Phan tu thu d: ,i);scan(d,ai);
}
}
int main()
85

int a|20|,N,i;
print(So phan tu N );scan(d,&N);
NhapMang(a,N);
// NhapContro(a,N);
print(Truy cap theo kieu mang: );
or(i0;iN;i)
print(d ,a|i|);
print(\nTruy cap theo kieu con tro: );
or(i0;iN;i)
print(d ,*(ai));
getch();
return 0;
}
T^S Si, ,ng ]-xn , kXng k`/ WSn [n Ti /on ,^l ,-to Rng rng
- Tn bin|Vi tri| tng dng voi *(Tn bin Vi tri)
- &Tn bin|Vi tri| tng dng voi (Tn bin Vi tri)
Trong do Tn bin la bin con tro, Vi tri la 1 biu thuc s nguyn.
! #: Gia su co khai bao:
include stdio.h
include alloc.h
include conio.h
include stdlib.h /* Them vao so voi phien ban tren DS*/
int main()

int *a;
int i;
a(int*)malloc(sieo(int)*10);
or(i0;i10;i)
a|i| 2*i;
print(Truy cap theo kieu mang: );
or(i0;i10;i)
print(d ,a|i|);
print(\nTruy cap theo kieu con tro: );
or(i0;i10;i)
print(d ,*(ai));
getch();
return 0;
86
}
Con ,^l /- kn ]-xn , rng
Gia su con tro ptr ch dn phn tu a|i| nao do cua mang a thi:
ptr ch dn phn tu thu sau a|i|, tuc a|i|
ptr - ch dn phn tu dung troc a|i|, tuc a|i-|
! $: Gia su co 1 mang mangint, cho con tro controint ch dn phn tu thu 5 trong
mang. In ra cac phn tu cua controint & mangint.
include stdio.h
include conio.h
include alloc.h
include stdlib.h /* Them vao so voi phien ban tren DS*/
int main()

int i,mangint|10|;
int *controint;
or(i0;i9;i)
mangint|i|i*2;
controint&mangint|5|;
print(\nNoi dung cua mangint ban dau);
or (i0;i9;i)
print(d ,mangint|i|);
print(\nNoi dung cua controint ban dau );
or (i0;i5;i)
print(d ,controint|i|);
or(i0;i5;i)
controint|i|;
print(\n--------------------);
print(\nNoi dung cua mangint sau khi tang 1);
or (i0;i9;i)
print(d ,mangint|i|);
print(\nNoi dung cua controint sau khi tang 1);
or (i0;i5;i)
print(d ,controint|i|);
i (controint!NULL)
ree(controint);
getch();
return 0;
}
87
.on trO v m?n- nhiu chiu
Ta co th su dung con tro thay cho mang nhiu chiu nh sau: Gia su ta co mang 2 chiu
va bin con tro nh sau:
int a|n||m|;
int *controint;
Thuc hin phep gan
controinta;
khi do phn tu a|0||0| doc quan ly boi controint;
a|0||1| doc quan ly boi controint1;
a|0||2| doc quan ly boi controint2;
...
a|1||0| doc quan ly boi controintm;
a|1||1| doc quan ly boi controintm1;
...
a|n-1||m-1| doc quan ly boi controint(n-1)*m (m-1);
Tng tu nh th di voi mang nhiu hn 2 chiu.
! %: Su tng dng giua mang 2 chiu va con tro.
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <stdlib.h>
int main()
{
int i,j;
int mang_int[4][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,
15,16,17,18,19,20};
int *contro_int;
contro_int=(int*)mang_int;
printf("\nNoi dung cua mang_int ban dau=");
for (i=0;i<4;i++)
{
printf("\n");
for (j=0;j<5;j++)
printf("%d\t",mang_int[i][j]);
}
printf("\n-----------------------------");
88
printf("\nNoi dung cua contro_int ban dau \n");
for (i=0;i<20;i++)
printf("%d ",contro_int[i]);
for(i=0;i<20;i++)
contro_int[i]++ ;
printf("\n-----------------------------");
printf("\nNoi dung cua mang_int sau khi tang 1=");
for (i=0;i<4;i++)
{
printf("\n");
for (j=0;j<5;j++)
printf("%d\t",mang_int[i][j]);
}
printf("\nNoi dung cua contro_int sau khi tang 1=\n");
for (i=0;i<20;i++)
printf("%d ",contro_int[i]);
if (contro_int!=NULL)
free(contro_int);
getch();
return 0;
}
3. Con tr v tham s hnh thc ca hm
Khi tham s hinh thuc cua ham la mt con tro thi theo nguyn tc goi ham ta dung tham
s thuc t la 1 con tro co kiu ging voi kiu cua tham s hinh thuc. Nu luc thuc thi ham
ta co su thay di trn ni dung vung nho doc ch boi con tro tham s hinh thuc thi luc
do ni dung vung nho doc ch boi tham s thuc t cng s bi thay di theo.
Vi du : Xet ham hoan vi doc vit nh sau :
includestdio.h
includeconio.h
void HoanVi(int *a, int *b)

int c*a;
*a*b;
*bc;
}
int main()

int m20,n30;
print(Truoc khi goi ham m d, n d\n,m,n);
HoanVi(&m,&n);
89
print(Sau khi goi ham m d, n d,m,n);
getch();
return 0;
}
III. 3Cu +D t<
- Chui ky tu la mt dy gm cac ky tu hoc mt mang cac ky tu doc kt thuc bng
ky tu \0` (cn doc goi la ky tu NULL trong bang m ASCII).
- Cac hng chui ky tu doc dt trong cp du nhay kep .
1. Khai bo
Kh+i bo thCo m?n-
Cu phap:
char Bin |Chiu dai ti da|;
Vi du: Trong chng trinh, ta co khai bao:
char Ten|12|;
Trong khai bao nay, b nho s cung cp 121 bytes d lu tru ni dung cua chui ky
tu Ten; byte cui cung lu tru ky tu \0` d chm dut chui.
Lu y:
- Chiu dai ti da cua bin chui la mt hng nguyn nm trong khoang t 1 dn 255
bytes.
- Chiu dai ti da khng nn khai bao tha d tranh lng phi b nho, nhng cng khng
nn khai bao thiu.
Kh+i bo thCo con trO
Cu phap:
char *Bin;
Vi du: Trong chng trinh, ta co khai bao:
char *Ten;
Trong khai bao nay, b nho s danh 2 byte d lu tru dia ch cua bin con tro Ten dang
ch dn, cha cung cp ni d lu tru du liu. Mun co ch d lu tru du liu, ta phai goi
dn ham malloc() hoc calloc() co trong alloc.h, sau do moi gan du liu cho bin.
c+ kh+i bo vc+ -n -i tr
Cu phap:
char Bin||Hng chui
Vi du:
90
includestdio.h
includeconio.h
int main()

char Chuoi||Mau nang hay la mau mat em ;
print(Vua khai bao vua gan tri : s,Chuoi) ;
getch();
return 0;
}
Lu y: Chui doc khai bao la mt mang cac ky tu nn cac thao tac trn mang co th ap
dung di voi chui ky tu.
2. Cc thao tc trn chui k t
'h(A )u/t chudi
N-\] /-Si , Tn ]-r
nhp mt chui ky tu t ban phim, ta su dung ham gets()
Cu phap:
gets(Bin chui);
Vi du: char Ten|20|;
gets(Ten);
Ta cng co th su dung ham scan() d nhp du liu cho bin chui, tuy nhin luc nay ta
ch co th nhp doc mt chui khng co du khoang trng.
Ngoai ra, ham cgets() (trong conio.h) cng doc su dung d nhp chui.
BSi, /-Si [n rn -_n-
xut mt chui (biu thuc chui) ln man hinh, ta su dung ham puts().
Cu phap:
puts(Biu thuc chui);
!: Nhp vao mt chui va hin thi trn man hinh chui va nhp.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Ten[12];
printf("Nhap chuoi: ");gets(Ten);
printf("Chuoi vua nhap: ");puts(Ten);
getch();
91
return 0;
}
Ngoai ra, ta co th su dung ham print(), cputs() (trong conio.h) d hin thi chui ln man
hinh.
M5t 6@ hm )J 2[ chudi Ytron- 6trin-ehZ
Cng /-Si - Hr s,^/X,y{
Cu phap:
char *strcat(char *des, const char *source)
Ham nay co tac dung ghep chui ngun vao chui dich.
Vi du: Nhp vao ho lot va tn cua mt ngoi, sau do in ca ho va tn cua ho ln man hinh.
includeconio.h
includestdio.h
includestring.h
int main()

char HoLot|30|, Ten|12|;
print(Nhap Ho Lot: );gets(HoLot);
print(Nhap Ten: );gets(Ten);
strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
print(Ho ten la: );puts(HoLot);
getch();
return 0;
}
Bc/ kpn- k Ri /-Si - Hr s,^[tny{
Cu phap:
int strlen(const char* s)
Vi du: Su dung ham strlen xac dinh d dai mt chui nhp t ban phim.
includeconio.h
includestdio.h
includestring.h
int main()

char Chuoi|255|;
int Dodai;
print(Nhap chuoi: );gets(Chuoi);
Dodai strlen(Chuoi);
print(Chuoi vua nhap: );puts(Chuoi);
92
print(Co do dai d,Dodai);
getch();
return 0;
}
7Vi r, fn ,. ,-`ang ,-n- fn ,. -oX - Hr ,oS]]t^y{0 Ham toupper() (trong
ctype.h) doc dung d chuyn di mt ky tu thong thanh ky tu hoa.
Cu phap:
char toupper(char c)
7Vi /-Si /-Z ,-`ang ,-n- /-Si /-Z -oX@ -r s,^S]^y{0 Ham struppr() doc dung
d chuyn di chui chu thong thanh chui chu hoa, kt qua tra v cua ham la mt con
tro ch dn dia ch chui doc chuyn di.
Cu phap:
char *strupr(char *s)
!: Vit chng trinh nhp vao mt chui ky tu t ban phim. Sau do su dung ham
strupr() d chuyn di chung thanh chui chu hoa.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],*s;
printf("Nhap chuoi: ");
gets(Chuoi);
s=strupr(Chuoi) ;
printf("Chuoi chu hoa: ");
puts(s);
getch();
return 0;
}
7Vi /-Si /-Z -oX ,-n- /-Si /-Z ,-`ang@ -r s,^[^y{0 Mun chuyn di chui
chu hoa thanh chui toan chu thong, ta su dung ham strlwr(), cac tham s cua ham
tng tu nh ham strupr().
Cu phap:
char *strlwr(char *s)
zXo /-] /-Si@ -r s,^/]y{: Ham nay doc dung d sao chep toan b ni dung cua
chui ngun vao chui dich.
93
Cu phap:
char *strcpy(char *Des, const char *Source)
!: Vit chng trinh cho phep chep toan b chui ngun vao chui dich.
includeconio.h
includestdio.h
includestring.h
int main()

char Chuoi|255|,s|255|;
print(Nhap chuoi: );
gets(Chuoi);
strcpy(s,Chuoi);
print(Chuoi dich: );
puts(s);
getch();
return 0;
}
zXo /-] r, ]-xn /-Si@ -r s,^n/]y{: Ham nay cho phep chep n ky tu du tin cua
chui ngun sang chui dich.
Cu phap:
char *strncpy(char *Des, const char *Source, siet n)
T^/- r, ]-xn /-Si@ -r s,^/-^y{: trich mt chui con cua mt chui ky tu bt
du t mt ky tu doc ch dinh trong chui cho dn ht chui, ta su dung ham strchr().
Cu phap :
char *strchr(const char *str, int c)
Lu y :
- Nu ky tu d ch dinh khng co trong chui, kt qua tra v la NULL ;
- Kt qua tra v cua ham la mt con tro, con tro nay ch dn ky tu c doc tim thy du
tin trong chui str.
T_r fir ni RSng /-Si@ -r s,^s,^y{: Ham strstr() doc su dung d tim kim su xut
hin du tin cua chui s2 trong chui s1.
Cu phap:
char *strstr(const char *s1, const char *s2)
Kt qua tra v cua ham la mt con tro ch dn phn tu du tin cua chui s1 co chua
chui s2 hoc gia tri NULL nu chui s2 khng co trong chui s1.
94
!: Vit chng trinh su dung ham strstr() d ly ra mt phn cua chui gc bt du t
chui hoc.
includeconio.h
includestdio.h
includestring.h
int main()

char Chuoi|255|,*s;
print(Nhap chuoi: );
gets(Chuoi);
sstrstr(Chuoi,hoc);
print(Chuoi trich ra: );
puts(s);
getch();
return 0;
}
zo scn- /-Si@ -r s,^/r]y{: so sanh hai chui theo tng ky tu trong bang m
Ascii, ta co th su dung ham strcmp().
Cu phap:
int strcmp(const char *s1, const char *s2)
Hai chui s1 va s2 doc so sanh voi nhau, kt qua tra v la mt s nguyn (s nay co
doc bng cach ly ky tu cua s1 tr ky tu cua s2 ti vi tri du tin xay ra su khac nhau).
- Nu kt qua la s m, chui s1 nho hn chui s2;
- Nu kt qua la 0, hai chui bng nhau;
- Nu kt qua la s dng, chui s1 lon hn chui s2.
zo scn- /-Si@ -r s,^i/r]y{: Ham nay thuc hin vic so sanh trong n ky tu du tin
cua 2 chui s1 va s2, giua chu thong va chu hoa khng phn bit.
Cu phap:
int stricmp(const char *s1, const char *s2)
Kt qua tra v tng tu nh kt qua tra v cua ham strcmp()
K-i ,o /-Si@ -r rtrst,y{: Ham nay doc su dung d dt n ky tu du tin cua
chui la ky tu c.
Cu phap:
memset(char *Des, int c, siet n)
95
7Vi , /-Si ^X s@ -r X,oiy{@ X,oy{@ X,o[y{ y,^ong s,R[iT#-{: chuyn di chui ra
s, ta su dung cac ham trn.
Cu phap :
int atoi(const char *s) : chuyn chui thanh s nguyn
long atol(const char *s) : chuyn chui thanh s nguyn dai
loat ato(const char *s) : chuyn chui thanh s thuc
Nu chuyn di khng thanh cng, kt qua tra v cua cac ham la 0. Ngoai ra, th vin
string.h cn h tro cac ham xu ly chui khac, ta co th doc thm trong phn tro giup.
I!. "#m t$t n%i &ung bi h'c
I. Mang
1. Mang trong C
2. Mang mt chiu
3. Mang nhiu chiu
II. Con tro
1. Khai bao va su dung bin con tro
2. Con tro va mang
3. Con tro va tham s hinh thuc cua ham
III. Xu ky tu
1. Khai bao
2. Cac thao tac trn chui ky tu
!. Bi tp
Xem Bi $ - Bi ,\] ,-./ -n- Mng@ Con ,^l b BmS fn ,.
96
Bi 7 - Bi thc hnh: MNG, CON TR V XU K TU
I. "h<c hin cc v & )=u
1. Tm phn t In nht ca mng
Yu cu7 Vit chng trinh cho phep nhp vao mt mang, tim phn tu lon nht va in ra
man hinh
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u7
includeconio.h
includestdio.h
int main()

int b|20|, N;
int i, ln;
print(So phan tu thuc te cua mang N );
scan(d,&N);
or(i0; i N; i)

print(Phan tu thu d: ,i);scan(d,&b|i|);
}
ln b|0|;
or(i1; i N; i)

i (b|i|ln)

lnb|i|;
}
}
print(Gia tri lon nhat la: d, ln);
getch();
return 0;
}
4hJ n-hi3m "7
1. Nhn F9 d chy chng trinh, khi do giao din xut hin nh sau:
97
2. Nhp cac gia tri cho N (s phn tu cua mang) va cac gia tri tng ung cho mi
phn tu cua mang nh sau: 4 8 5 9 1 , khi do kt qua nhn doc
nh sau:
3. Nhn xet v kt qua dt doc.
4hJ n-hi3m #7 i vic tim phn tu lon nht thanh phn tu nho nht.
4hJ n-hi3m $7 Thm vao yu cu la tim phn tu lon nht va vi tri cua phn tu do trong
mang.
2. Ly Tn t h tn ngui Vit
Yu cu7 Gia su Ho tn ngoi Vit lun co dng Ho m Tn, trong do cac phn Ho,
m, Tn lun cach nhau 1 du cach; phn m co th co hoc khng hoc co nhiu hn
1 t. Hy vit chng trinh cho phep nhp vao hotCn, ri in ra phn 4n.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
includeconio.h
includestdio.h
includestring.h
int main()

char Chuoi|255|,s|255|;
98
int n,i,k;
print(Nhap chuoi: );
gets(Chuoi);
nstrlen(Chuoi);
or (in-1;i-1;i--)

i (Chuoi|i|32)

ki;
break;
}
}
print(ket qua\n);
strncpy(s,Chuoik1,n-k-1);
puts(s);
getch();
return 0;
}
4hJ n-hi3m "7
1. Nhn F9 chy thu chng trinh, khi do giao din xut hin nh hinh sau:
2. Nhp gia tri cho chui la Hoang Duc Van , khi do kt qua nhn doc nh
sau:
99
3. Nhn xet v kt qua dt doc.
4hJ n-hi3m #7 Chy va nhp chui vao la Hoang Duc Van (co chua 2 du cach o
cui), nhn xet v kt qua dt doc.
4hJ n-hi3m $7 Chy va nhp chui vao la HoangDucVan (khng co du cach), nhn
xet v kt qua dt doc.
II. Bi tp t< lm
1. Mng
1. Vit chng trinh nhp vao mt dy n s thuc a|0|, a|1|,..., a|n-1|, sp xp dy s
theo thu tu giam dn. In dy s sau khi sp xp.
2. Vit chng trinh sp xp mt mang theo thu tu tng dn sau khi d loi bo cac phn
tu trung nhau.
3. Vit chng trinh nhp vao mt mang, hy xut ra man hinh:
- Phn tu lon nht cua mang.
- Phn tu nho nht cua mang.
- Tinh tng cua cac phn tu trong mang .
4. Vit chng trinh nhp vao mt dy cac s theo thu tu tng, nu nhp sai quy cach thi
yu cu nhp li. In dy s sau khi d nhp xong. Nhp thm mt s moi va chen s
do vao dy d co sao cho dy vn dam bao thu tu tng. In li dy s d kim tra.
5. Vit chng trinh nhp vao mt ma trn (mang hai chiu) cac s nguyn, gm m
hang, n ct. In ma trn do ln man hinh. Nhp mt s nguyn khac vao va xet xem co
phn tu nao cua ma trn trung voi s nay khng O vi tri nao Co bao nhiu phn
tu
6. Vit chng trinh d chuyn di vi tri t dng thanh ct cua mt ma trn (ma trn
chuyn vi) vung 4 hang 4 ct. Sau do vit cho ma trn tng quat cp m*n.
7. Vit chng trinh nhp vao mt mang s tu nhin. Hy xut ra man hinh:
- Dng 1 : gm cac s le, tng cng co bao nhiu s le.
- Dng 2 : gm cac s chn, tng cng co bao nhiu s chn.
- Dng 3 : gm cac s nguyn t.
100
- Dng 4 : gm cac s khng phai la s nguyn t.
8. Vit chng trinh tinh tng binh phng cua cac s m trong mt mang cac s
nguyn.
9. Vit chng trinh thuc hin vic dao mt mang mt chiu.
Vi du : 1 2 3 4 5 7 9 10 dao thanh 10 9 7 5 4 3 2 1 .
(Khng dung mang phu)
10. Vit chng trinh nhp vao hai ma trn A va B co cp m, n. In hai ma trn ln man
hinh. Tng hai ma trn A va B la ma trn C doc tinh boi cng thuc:
c
i
a
i
b
i
( i0,1,2,...m-1; 0,1,2...n-1)
Tinh ma trn tng C va in kt qua ln man hinh.
11. Vit chng trinh nhp vao hai ma trn A co cp m, k va B co cp k, n. In hai ma trn
ln man hinh. Tich hai ma trn A va B la ma trn C doc tinh boi cng thuc:
c
i
a
i1
*b
1
a
i2
*b
2
a
i3
*b
3
... a
ik
*b
k
(i0,1,2,...m-1;0,1,2...n-1)
Tinh ma trn tich C va in kt qua ln man hinh.
12. Xet ma trn A vung cp n, cac phn tu a|i, i| ( i 1 ... n ) doc goi la dong cheo
chinh cua ma trn vung A. Ma trn vung A doc goi la ma trn tam giac nu tt ca
cac phn tu doi dong cheo chinh du bng 0. inh thuc cua ma trn tam giac bng
tich cac phn tu trn dong cheo chinh. Hy bin di ma trn A v ma trn tam giac.
In kt qua tng boc ln man hinh.
13. Vit chng trinh thuc hin vic trn hai dy co thu tu thanh mt dy co thu tu. u
cu khng doc trn chung ri moi sp thu tu. Khi trn phai tn dung doc tinh cht
d sp cua hai dy con.
2. Con tr
14. Thuc hin cac bai tp o phn M?n- , bng cach su dung con tro.
3. Xu k t
15. Vit chng trinh nhp mt chui ky tu t ban phim, xut ra man hinh m Ascii cua
tng ky tu co trong chui.
16. Vit chng trinh nhp mt chui ky tu t ban phim, xut ra man hinh chui dao
ngoc cua chui do. Vi du dao cua abcdxegh la hgexdcba.
17. Vit chng trinh nhp mt chui ky tu va kim tra xem chui do co di xung khng.
Vi du : Chui ABCDDCBA la chui di xung.
18. Nhp vao mt chui bt ky, hy dm s ln xut hin cua mi loi ky tu.
Vi du:
Chuoi1|| abcdeaabbdca
Chuoi2||a b c d e
SLXH|| 4,3,2,2,1
19. Vit chng trinh nhp vao mt chui.
- In ra man hinh t bn trai nht va phn cn li cua chui.
101
Vi du: Nguyn Vn Minh in ra thanh:
Nguyn
Vn Minh
- In ra man hinh t bn phai nht va phn cn li cua chui.
Vi du: Nguyn Vn Minh in ra thanh:
Minh
Nguyn Vn
20. Vit chng trinh nhp vao mt chui ri xut chui do ra man hinh doi dng mi t
mt dng.
Vi du: Nguyn Vn Minh
In ra :
Nguyn
Vn
Minh
21. Vit chng trinh nhp vao mt chui, in ra chui dao ngoc cua no theo tng t.
Vi du : chui Nguyn Vn Minh dao thanh Minh Vn Nguyn
22. Vit chng trinh di s tin t s thanh chu.
Vi du: 123 thanh chu la mot tram hai muoi ba
23. Vit chng trinh nhp vao ho va tn cua mt ngoi, ct bo cac khoang trng khng
cn thit (nu co), tach tn ra khoi ho va tn, in tn ln man hinh. Chu y dn trong
hop ca ho va tn ch co mt t.
24. Vit chng trinh nhp vao ho va tn cua mt ngoi, ct bo cac khoang trng bn
phai, trai va cac khoang trng khng co nghia trong chui. In ra man hinh toan b ho
tn ngoi do doi dng chu hoa, chu thong.
25. Vit chng trinh nhp vao mt danh sach ho va tn cua n ngoi theo kiu chu
thong, di cac chu cai du cua ho, tn va chu lot cua mi ngoi thanh chu hoa. In
kt qua ln man hinh.
26. Vit chng trinh nhp vao mt danh sach ho va tn cua n ngoi, tach tn tng ngoi
ra khoi ho va tn ri sp xp danh sach tn theo thu tu t din. In danh sach ho va tn
sau khi d sp xp.
102
Bi 8 - HM V CU TRC CHUNG TRNH
Ni RSng Ti -U/
W. T3 ch,c ch12ng 6+nh
1. T d
2. :;u 6<c ch12ng 6+nh
3. *m fe7 dFng Mgn
WW. *m d' ng1di djng 9nh nghh$
1. Ih$i 5-' # 9nh nghh$ *m
2. ]di gi *m
3. *m #ci Oi mic 9nh
). Ih$i 5-' hm 6jng n
J. T6u7`n h$m MO
L. *m # m&ng
WWW. :'n 6a hm
1. Ih$i 5-'
2. YN dng c'n 6a hm
3. M&ng c'n 6a hm
WT. r /ui
1. Ih-i nim
2. ]c" c-c 5i '-n gi&i 1kc 5Kng /ui
3. :-c # d
T. THm ni dung 5i hc
TW. Di !"
I. "E chFc ch/,ng trnh
Mi chng trinh nh d nu ra o cac vi du trong cac chng troc dy thong kha ngn; do do:
Tong khng kho d hiu;
D nho toan b ni dung chng trinh cng nh
Hiu trinh tu logic cac boc cua cng vic.
Tuy nhin khi giai quyt cac bai toan thuc t thi vn ban chng trinh thong dai hn rt nhiu,
khi do:
Vic quan ly trinh tu logic cac cng vic la tng di kho khn.
Thm nua, khi vit chng trinh chung ta thong gp nhung don chng trinh lp di
lp li nhiu ln o nhung ch khac nhau voi su khac bit rt nho hoc thm chi ging
nhau hoan toan.
giai quyt vn d nay, tt ca cac ngn ngu lp trinh du cho phep ngoi su dung t chuc
chng trinh thanh chng trinh chinh va cac chng trinh con dng thu tuc va ham.
1. V d
Vi du, xet bai toan kim tra vi tri tng di cua dim M trn mt phng so voi tam giac ABC la
o trong, nm trn cnh hay ngoai tam giac.
103
Bai toan nay co th giai bng cach:
Nu din tich tam giac ABC bng tng din tich cac tam giac MAB, MBC va MAC thi
kt lun la M nm trong tam giac ABC.
Ngoc li, khi din tich tam giac ABC nho hn tng din tich cac tam giac MAB, MBC
va MAC thi kt lun la M nm ngoai tam giac ABC.
Nu theo bin phap nay thi r rang la trong chng trinh phai cn it nht la bn ln tinh
din tich tam giac. Nu ta vit mt chng trinh con tinh din tich tam giac khi bit ba
dnh U, V, nh DT (U,V,) chng hn, thi chng trinh cua chung ta dong nh ch
cn la mt dng lnh dn gian:
If (DT (A,B,C) < DT (M,B,C)+DT(M,C,A)+DT(M,A,B))
printf(M na n!"ai ABC#)$
%&'%
printf(M na tr"n! ABC#)$
Voi vi du va ri chung ta thy rt r mt loi ich cua vic su dung chng trinh con la:
Lam gon nhe chng trinh, thay vi phai vit bn ln cung mt don chng trinh rt
ging nhau mt cach nham chan thi gio dy ta ch cn vit co mt ln.
Ngoai ra no cho phep ngoi lp trinh co th kim soat chng trinh cua minh mt cach
d dang va thun tin hn.
Hin nhin la vic phai kim tra, tim li lgic trong mt chng trinh co bn don tinh
din tich tam giac so voi vic kim tra k mt don chng trinh tinh din tich tam giac
cung voi mt dng lnh r rang va d hiu nh trn la rt khac nhau v su phuc tp.
2. Cu trc chuong trnh
Mt chng trinh hoan chnh trong C/C co 6 phn chinh (nhng khng bt buc) theo thu tu
nh sau:
1. Ch thi tin xu ky;
2. inh nghia kiu du liu;
3. Khai bao prototype;
4. Khai bao bin ngoai;
5. Chng trinh chinh va
6. Cai dt ham.
Ni dung c ban cac phn nay doc m ta chi trong cac phn sau dy.
104
"e .c chf th tin )J 2[
Nh d bit troc khi chy chng trinh (bt du t vn ban chng trinh tuc chng trinh
ngun) C/C s dich chng trinh ra tp m may cn goi la chng trinh dich. Thao tac dich
chng trinh noi chung gm co 2 phn:
Xu ly s b chng trinh, hay cn goi la tin )J 2[ va
Dich.
Phn xu ly s b doc goi la tin xu ly, trong do co cac cng vic lin quan dn cac ch thi doc
dt o du tp chng trinh ngun nh include, deine
C- ,-p TXo -r ,d] in/[SRt
Cho phep ghep ni dung cac tp d co khac vao chng trinh troc khi dich. Cac tp cn
ghep thm vao chng trinh thong la cac tp chua khai bao nguyn mu cua cac hng,
bin, ham co sn trong C hoc cac ham do lp trinh vin tu vit. Co hai dng vit ch
thi nay:
1( )in*&+,% <t-p.
2( )in*&+,% /01n! ,2n3t-p#
Dng khai bao 1 cho phep trinh bin dich tim tp cn ghep ti th muc dinh sn cua cng
cu lp trinh. Thong thi moi cng cu lp trinh dng C du xy dung sn cac ham trong
cac tp nguyn mu, cac tp nay doc lu trong th muc INCLUDS, va thit lp th
muc mc dinh dn th muc INCLUDS nay.
Dng khai bao 2 cho phep tim tp theo dong dn, nu khng co dong dn s tim trong
th muc hin ti. Tp thong la cac tp (th vin) doc to boi lp trinh vin va doc dt
trong cung th muc chua chng trinh. Cu phap nay cho phep lp trinh vin chia mt
chng trinh thanh nhiu mdun dt trn mt s tp khac nhau d d quan ly.
C- ,-p rX/^o Rtint
),%fin% t4n5a*r" 6a+7it+
Troc khi dich b tin xu ly s tim trong chng trinh va thay th bt ky vi tri xut hin
nao cua tnmacro boi xu ki tu. Ta thong su dung macro d dinh nghia cac hng hoc
thay cum t nay bng cum t khac d nho hn.
Vi du:
),%fin% t8%n 99 t8a: t8%n ;<n! ,=+ *>*8
),%fin% ;%!in ? 99 t8a: ;%!in ;<n! ,=+ ?
),%fin% %n, @ 99 t8a: %n, ;<n! ,=+ @
),%fin% MAA 100 99 t8a: MAA ;<n! 100
),%fin% TBCD 1 99 t8a: TBCD ;<n! 1
T do trong chng trinh ta co th vit nhung don lnh nh:
if (i < MAA) t8%n
;%!in
"7 E TBCD$
printf(F,#,i) $
%n,
Va troc khi dich b tin xu ly s chuyn don chng trinh trn thanh:
if (i < 100)
?
105
"7 E 1$
printf(F,#,i)$
@
theo dung cu phap cua C/C va ri moi tin hanh dich.
Ngoai vic ch thi ),%fin% cho phep thay tnmacro boi mt xu ki tu bt ky, no cn cng
doc phep vit doi dng co di.
Vi du, d tim s lon nht cua 2 s, thay vi ta phai vit nhiu ham max (mi ham ung voi
mt kiu s khac nhau), by gio ta ch cn thay chung boi mt macro co di dn gian nh
sau:
),%fin% a6(A,B) ((A) . (B) G (A)H (B))
Khi do trong chng trinh nu co dng 6 E a6(a, ;) thi no s doc thay boi: 6 E ((a) .
(;) G (a)H (;))
Chu y :
o Tn macro phai doc vit lin voi du ngoc cua danh sach di. Vi du khng vit
a6 (A,B)(
o ),%fin% ;p(6) (6I6) vit sai vi ;p(5) dung nhng ;p(a+;) s thanh (a+;Ia+;) (tJ*
a+;+a;).
o Tng tu nh trn, vit ),%fin% a6(A,B) (A . B G AH B) la sai () vi vy lun lun
bao cac di boi du ngoc dn ().
o ),%fin% ;p(6) ((6)I(6)) vit dung nhng nu gia su lp trinh vin mun tinh binh
phng cua 2 bng don lnh sau:
int i E 1$
printf(K%t L+aH F,#,;p(++i))$
thi kt qua in ra s la 6 (trn Dev-C kt qua nay la 9 ) thay vi kt qua mong
mun la 4. Li do la o dy la chng trinh dich s thay ;p(++i) boi ((++i)I(++i)), va
voi i E 1 chng trinh s thuc hin nh 2*3 6. Do vy cn cn thn khi su dung
cac phep toan tu tng giam trong cac macro co di. Noi chung, nn hn ch vic
su dung cac macro phuc tp, vi no co th gy nn nhung hiu ung phu kho kim
soat.
Cc/ /- ,-p Tin Rp/- / kieS fidn i@ iRt@ inRt
1( )if ,M: &-n8 N )%n,if
2( )if ,M: &-n8 N )%&'% ,M: &-n8 N )%n,if,
3( )if,%f OP )ifn,%f
#e Dnh n-hE+ ki=u !1 2i3u
Dung d dt tn li cho mt kiu du liu nao do d goi nho hay dt 1 kiu du liu cho ring minh
dua trn cac kiu du liu d co; phn nay khng bt buc phai co. Trong C/C cho phep dinh
nghia kiu du liu voi t khoa struc va typede; ni dung chi tit v vn d nay doc trinh bay
trong phn chng 6.
$e Kh+i bo cc ArototyAC
Khai bao m ta cac ham s dung trong chng trinh chinh bao gm tn ham, cac tham s hinh
thuc, kiu du liu tra v cua ham. Phn nay la khng bt buc, tuy nhin nhung ham doc dung
106
trong chng trinh chinh hoc chng trinh con khac bt buc phai doc khai bao prototype
troc khi su dung. Ti vi tri nay co th khai bao dy du mt ham bao gm ca phn m ta va thn
ham, tuy nhin cach vit do lam cho chng trinh chinh bi dy su xung cui chng trinh lam
cho chng trinh kho theo di. Vi vy vic vit cac ham, chng trinh con thong doc t chuc
thanh 2 phn la phn khai bao prototype troc ham main va phn cai dt ni dung ham sau ham
main. Ni dung chi tit v cng vic nay s doc d cp cu th trong phn sau cua chng nay.
%e Kh+i bo cc biGn n-oi Ycc biGn ton ccZ
Cho phep khai bao cac bin, hng co phm vi tac dng trong toan b chng trinh. Phn nay la
tuy vao nhu cu xu dung trong mi chng trinh ma co th co hoc khng.
&e .h:Fn- tr8nh chnh
Phn nay bt buc phai co. Trong C/C chng trinh chinh doc qui dinh co tn la main. Phn
nay d doc m ta trong cac phn sau.
ge .i Ut cc hm
y la phn m ngun dy du cua cac ham. Ni dung nay s doc nghin cuu trong cac phn
tip theo cua chng nay.
3. Hm y dng sn
7. s,Rio#-: Th vin chua cac ham vao/ ra chun (standard input/output). Gm cac ham
print(), scan(), getc(), putc(), gets(), puts(), lush(), open(), close(), read(), write(),
getchar(), putchar(), getw(), putw()
8. /onio#-: Th vin chua cac ham vao ra trong ch d DS (DS console). Gm cac ham
clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),
9. rX,-#-: Th vin chua cac ham tinh toan gm cac ham abs(), sqrt(), log(). log10(), sin(),
cos(), tan(), acos(), asin(), atan(), pow(), exp(),
10. X[[o/#-: Th vin chua cac ham lin quan dn vic quan ly b nh. Gm cac ham
calloc(), realloc(), malloc(), ree(), armalloc(), arcalloc(), arree(),
11. io#-: Th vin chua cac ham vao ra cp thp. Gm cac ham open(), open(), read(),
read(), close(), close(), creat(), creat(), creatnew(), eo(), ilelength(), lock(),
12. g^X]-i/s#-: Th vin chua cac ham lin quan dn d hoa. Gm initgraph(), line(),
circle(), putpixel(), getpixel(), setcolor(),
II. Gm &o ng/8i &Hng 0Inh nghJ=
Ham nhn (hoc khng) cac di s va tra li (hoc khng) mt gia tri cho chng trinh goi no.
Trong trong hop khng tra li gia tri, ham hot dng nh mt thu tuc trong cac ngn ngu lp
trinh khac. Mt chng trinh la tp cac ham, trong do co mt ham chinh voi tn goi ain(), khi
chy chng trinh, ham ain() s doc chy du tin va goi dn ham khac. Kt thuc ham ain()
cng la kt thuc chng trinh.
Ham giup cho vic phn don chng trinh thanh nhung mdun ring r, hot dng dc lp voi
ngu nghia cua chng trinh lon, co nghia mt ham co th doc su dung trong chng trinh nay
ma cng co th doc su dung trong chng trinh khac, d cho vic kim tra va bao tri chng
trinh. Ham co mt s dc trng:
Nm trong hoc ngoai vn ban co chng trinh goi dn ham. Trong mt vn ban co th
107
chua nhiu ham;
oc goi t chng trinh chinh (main), t ham khac hoc t chinh no (d quy);
Khng lng nhau;
Co 3 cach truyn gia tri: Truyn theo tham tri, tham bin va tham tro.
1. Khai bo v [nh ngha Hm
"e Kh+i bo
Mt ham thong lam chuc nng:
Tinh toan trn cac tham di va cho li gia tri kt qua, hoc;
Ch dn thun thuc hin mt chuc nng nao do, khng tra li kt qua tinh toan.
Thng thong kiu cua gia tri tra li doc goi la kiu cua ham. Cac ham thong doc khai bao o
du chng trinh. Cac ham vit sn doc khai bao trong cac ile nguyn mu *.h. Do do, d su
dung doc cac ham nay, cn co ch thi include *.h o ngay du chng trinh, trong do *.h la
tn ile cu th co chua khai bao cua cac ham doc su dung (vi du d su dung cac ham toan
hoc ta cn khai bao ile nguyn mu math.h).
K-Xi Tco r, -r n-` sXS0
<7iQ+ !i> trR trS &Ti. <t4n 8P.(,9' 7iQ+ /Ui) $
Trong do, kiu gia tri tra li cn goi la kiu ham va co th nhn kiu bt ky chun cua C
va ca kiu cua NSD tu to. c bit nu ham khng tra li gia tri thi kiu cua gia tri tra
li doc khai bao la void. Nu kiu gia tri tra li doc bo qua thi chng trinh ngm dinh
ham co kiu la int (phn bit voi void !).
Vi du :
int ;p(int)$ 99 K8ai ;>" 8P ;p, *V /Ui 7iQ+ int OP 7iQ+ 8P &P int
int ran,100()$ 99 K8Wn! /Ui, 7iQ+ 8P (!i> trR trS &Ti) &P int
O"i, a&&tri(*8arX Y) $ 99 /Ui &P 6Z+ 7[ t\, 8P 78Wn! trS &Ti !i> trR (78Wn! 7iQ+)(
*"n!(int, int)$ 99 ]ai /Ui 7iQ+ int, 7iQ+ 8P &P int (n!^ /Rn8)(
Thng thong d chng trinh doc r rang chung ta nn tranh lm dung cac ngm dinh. Vi du
trong khai bao *"n!(int, int)$ nn khai bao r ca kiu ham (trong trong hop nay kiu ham ngm
dinh la int) nh sau : int *"n!(int, int)$(
#e Dnh n-hE+ hm
Cu truc mt ham bt ky doc b tri cng ging nh ham main() trong cac phn troc.
Hr / ,^ be gic ,^p
<7iQ+ 8P. <t4n 8P.(,an8 '>*8 t8a /Ui 8_n8 t8J*)
?
78ai ;>" *`* ;a *ba 8P $ 99 *8c ,dn! ri4n! *8" 8P nP:
,M: &-n8 *ba 8P $
r%t+rn (;iQ+ t8J* trS Oe)$ 99 *V t8Q n< /Z+ /V tr"n! ,M: &-n8(
@
Trong do:
108
o Danh sach tham di hinh thuc cn doc goi ngn gon la danh sach di gm dy
cac di cach nhau boi du phy, di co th la mt bin thong, bin tham chiu
hoc bin con tro, hai loi bin sau ta s trinh bay trong cac phn toi. Mi di
doc khai bao ging nh khai bao bin, tuc la cp gm <7iQ+ /Ui. <t4n /Ui..
o Voi ham co tra li gia tri cn co cu lnh r%t+rn kem theo sau la mt biu thuc.
Kiu cua gia tri biu thuc nay chinh la kiu cua ham d doc khai bao o phn tn
ham. Cu lnh return co th nm o vi tri bt ky trong phn cu lnh, tuy thuc
muc dich cua ham. Khi gp cu lnh return chng trinh tuc khc thoat khoi ham
va tra li gia tri cua biu thuc sau return nh gia tri cua ham.
V d : Vi du sau dinh nghia ham tinh lu tha n (voi n nguyn) cua mt s thuc bt ky.
Ham nay co hai du vao (di thuc x va s m nguyn n) va du ra (gia tri tra li) kiu
thuc voi d chinh xac gp di la x
n
.
,"+;&% &+:t8+a(f&"at 6, int n)
?
int i $ 99 ;ifn *8c 'U
,"+;&% 7L E 1 $ 99 /Q &0+ 7ft L+S
f"r (iE1$ i<En$ i++) 7L IE 6 $
r%t+rn 7L$
@
Hr f-Yng ,^ be gic ,^p
O"i, <t4n 8P.(,an8 '>*8 t8a /Ui 8_n8 t8J*)
?
78ai ;>" *`* ;a *ba 8P $ 99 *8c ,dn! ri4n! *8" 8P nP:
,M: &-n8 *ba 8P $
r%t+rn$ 99 *V t8Q n< /Z+ /V tr"n! ,M: &-n8(
@
Nu ham khng tra li gia tri (tuc kiu ham la void), khi do co th co hoc khng co cu
lnh return, nu co thi dng sau return s khng co biu thuc gia tri tra li.
V d : Ham xoa man hinh 100 ln, ham ch lam cng vic cn thn xoa man hinh nhiu
ln d man hinh tht sch, nn khng co gia tri gi d tra li.
O"i, 68()
?
int i$
f"r (iE1$ i<E100$ i++)
*&r'*r()$
r%t+rn $
@
Ham ain() thng thong co hoc khng co gia tri tra v cho h diu hanh khi chng
trinh chy xong, vi vy ta thong khai bao kiu ham la int ain() hoc O"i, ain() va cu
lnh cui cung trong ham thong la r%t+rn 1 hoc r%t+rn. Trong hop bo qua t khoa void
nhng trong thn ham khng co cu lnh return (ging phn lon vi du trong giao trinh
nay) chng trinh s ngm hiu ham main() tra li mt gia tri nguyn nhng vi khng co
nn khi dich chng trinh ta s gp loi canh bao Cn co gia tri tra li cho ham (mt loi
canh bao khng phai la li, chng trinh vn chy binh thong). tranh bi quy ry v
nhung loi canh bao khng moi nay chung ta co th dt thm cu lnh return 0; (nu
khng khai bao void main()) hoc khai bao kiu ham la void main() va dt cu lnh
109
return vao cui ham.
C-j n0
Danh sach di trong khai bao ham co th chua hoc khng chua tn di, thng thong ta
ch khai bao kiu di chu khng cn khai bao tn di, trong khi o dng du tin cua dinh
nghia ham phai co tn di dy du;
Cui khai bao ham phai co du chm phy (;), trong khi cui dng du tin cua dinh
nghia ham khng co du chm phy;
Ham co th khng co di (danh sach di rng), tuy nhin cp du ngoc sau tn ham vn
phai doc vit. Vi du *&r'*r(), &at8"(), Oi%t!ia"trin8(), N $
Mt ham co th khng cn phai khai bao nu no doc dinh nghia troc khi co ham nao
do goi dn no. Vi du co th vit ham main() troc (trong vn ban chng trinh), ri sau
do moi vit dn cac ham con. Do trong ham main() chc chn s goi dn ham con nay
nn danh sach cua chung phai doc khai bao troc ham main(). Trong hop ngoc li
nu cac ham con doc vit (dinh nghia) troc thi khng cn phai khai bao chung nua (vi
trong dinh nghia d ham y khai bao). Nguyn tc nay ap dung cho hai ham A, B bt ky
chu khng ring cho ham main(), nghia la nu B goi dn A thi troc do A phai doc dinh
nghia hoc it nht cng co dng khai bao v A.
2. Li gi Hm
Loi goi ham doc phep xut hin trong bt ky biu thuc, cu lnh cua ham khac Nu loi goi
ham li nm trong chinh ban thn ham do thi ta goi la d quy. goi ham ta ch cn vit tn ham
va danh sach cac gia tri cu th truyn cho cac di dt trong cp du ngoc trn ().
Cj ]-c]
T4n58P(,an8 '>*8 t8a /Ui t8\* '\) $
Trong do:
o Danh sach tham di thuc su cn goi la danh sach gia tri gm cac gia tri cu th d
gan ln lot cho cac di hinh thuc cua ham. Khi ham doc goi thuc hin thi tt ca
nhung vi tri xut hin cua di hinh thuc s doc gan cho gia tri cu th cua di
thuc su tng ung trong danh sach, sau do ham tin hanh thuc hin cac cu lnh
cua ham (d tinh kt qua);
o Danh sach tham di thuc su truyn cho tham di hinh thuc co s long bng voi
s long di trong ham va doc truyn cho di theo thu tu tng ung. Cac tham
di thuc su co th la cac hng, cac bin hoc biu thuc. Bin trong gia tri co th
trung voi tn di. Vi du ta co ham in n ln ki tu c voi tn ham inkitu(int n, char c);
va loi goi ham inkitu(12, 'A'); thi n va c la cac di hinh thuc, 12 va 'A' la cac di
thuc su hoc gia tri. Cac di hinh thuc n va c s ln lot doc gan bng cac gia tri
tng ung la 12 va 'A' troc khi tin hanh cac cu lnh trong phn thn ham. Gia
su ham in ki tu doc khai bao li thanh inkitu(char c, int n); thi loi goi ham cng
phai doc thay li thanh inkitu('A', 12);
o Cac gia tri tng ung doc truyn cho di phai co kiu cung voi kiu di (hoc
C co th tu dng chuyn kiu doc v kiu cua di);
o Khi mt ham doc goi, ni goi tm thoi chuyn diu khin dn thuc hin dng
lnh du tin trong ham doc goi. Sau khi kt thuc thuc hin ham, diu khin li
110
doc tra v thuc hin tip cu lnh sau lnh goi ham cua ni goi.
Vi du : Gia su ta cn tinh gia tri cua biu thuc 2x
3
- 5x
2
- 4x 1, thay cho vic tinh truc
tip x
3
va x
2
, ta co th goi ham luythua() trong vi du trn d tinh cac gia tri nay bng cach
goi no trong ham main() nh sau:
)in*&+,% <i"'tr%a(8.
)in*&+,% <i"anip(8.
,"+;&% &+:t8+a(f&"at 6, int n) 99 trS &Ti !i> trR 6
n
?
int i $ 99 ;ifn *8c 'U
,"+;&% 7L E 1 $ 99 /Q &0+ 7ft L+S
f"r (iE1$ i<En$ i++) 7L IE 6 $
r%t+rn 7L$
@
O"i, 68(int n) 99 6"> Pn 8_n8 n &^n
?
int i$
f"r (iE1$ i<En$ i++) *&r'*r()$
r%t+rn $
@
ain() 99 t[n8 !i> trR 26
3
g 56
2
g 46 + 1
?
f&"at 6 $ 99 t4n ;ifn *V t8Q trdn! Ohi /Ui *ba 8P
,"+;&% f $ 99 /Q &0+ 7ft L+S
printf(i6 E i)$
'*anf(iF,i ,j6 ) $
f E 2I&+:t8+a(6,3) g 5I&+:t8+a(6,2) g 4I6 + 1$
68(100)$ 99 6"> t8kt 'T*8 Pn 8_n8 100 &^n
printf(F,#,f) $
!%t*8()$
r%t+rn 0$
@
Qua vi du nay ta thy loi ich cua lp trinh cu truc, chng trinh tro nn gon hn, chng
hn ham &+:t8+a() ch doc vit mt ln nhng co th su dung no nhiu ln (2 ln trong vi
du nay) ch bng mt cu lnh goi dn gian cho mi ln su dung thay vi phai vit li
nhiu ln don lnh tinh lu tha.
3. Hm vi i mc [nh
Muc nay va muc sau chung ta ban dn mt vai mo rng thit thuc cua C/C di voi C
co lin quan dn ham, do la ham voi di mc dinh va cach to, su dung cac ham co
chung tn goi. Mt mo rng quan trong khac la cach truyn di theo tham chiu s doc
ban chung trong muc truyn tham di thuc su cho ham.
Trong phn troc chung ta d khng dinh s long tham di thuc su phai bng s long
tham di hinh thuc khi goi ham. Tuy nhin, trong thuc t rt nhiu ln ham doc goi voi
cac gia tri cua mt s tham di hinh thuc doc lp di lp li. Trong trong hop nh vy
luc nao cng phai vit mt danh sach dai cac tham di thuc su ging nhau cho mi ln
goi la mt cng vic khng my thu vi. T thuc t do C da ra mt cu phap moi v
ham sao cho mt danh sach tham di thuc su trong loi goi khng nht thit phai vit dy
du nu mt s trong chung d co sn nhung gia tri dinh troc.
111
Cj ]-c]
<7iQ+ 8P. <t4n 8P.(/1, N, /n, //1 E !t1, N, // E !t
Trong do:
Cac di d1, , dn va di mc dinh dmd1, , dmdm du doc khai bao nh c nghia la
gm co kiu di va tn di;
Ring cac di mc dinh dmd1, , dmdm co gan thm cac gia tri mc dinh gt1, , gtm.
Mt loi goi bt ky khi goi dn ham nay du phai co dy du cac tham di thuc su ung voi
cac d1, , dm nhng co th co hoc khng cac tham di thuc su ung voi cac di mc
dinh dmd1, , dmdm. Nu tham di nao khng co tham di thuc su thi no s doc tu
dng gan gia tri mc dinh d khai bao.
Vi du 4.5 : Xet ham xmh(int n 100), trong do n mc dinh la 100, nghia la nu goi
xmh(99) thi man hinh doc xoa 99 ln, cn nu goi xmh(100) hoc gon hn xmh() thi
chng trinh s xoa man hinh 100 ln. Tng tu, xet ham int luythua(loat x, int n 2);
Ham nay co mt tham di mc dinh la s m n, nu loi goi ham bo qua s m nay thi
chng trinh hiu la tinh binh phng cua x (n 2). Vi du loi goi luythua(4, 3) doc
hiu la 4
3
, cn luythua(2) doc hiu la 2
2
.
Ham tinh tng 4 s nguyn: int tong(int m, int n, int i 0; int 0); khi do co th tinh
tng cua 5, 2, 3, 7 bng loi goi ham tong(5,2,3,7) hoc co th ch tinh tng 3 s 4, 2, 1
bng loi goi tong(4,2,1) hoc cng co th goi tong(6,4) ch d tinh tng cua 2 s 6 va 4.
Chu y : Cac di ngm dinh phai doc khai bao lin tuc va xut hin cui cung trong danh
sach di. Vi du:
int t"n!(int 6, int :E2, int l, int tE1)$ 99 'ai O_ *>* /Ui m* /Rn8 78Wn! &i4n t`*
O"i, 6"a(int 6E0, int :) 99 'ai O_ /Ui m* /Rn8 78Wn! n *+Ui
4. Khai bo hm trng tn
Ham trung tn hay cn goi la ham chng (de). y la mt k thut cho phep su dung
cung mt tn goi cho cac ham ging nhau (cung muc dich) nhng xu ly trn cac kiu
du liu khac nhau hoc trn s long du liu khac nhau. Vi du ham sau tim s lon nht
trong 2 s nguyn:
int a6(int a, int ;) ? r%t+rn (a . ;) G aH ; $ @
o Nu dt c max(3, 5) ta s co c 5.
o Tuy nhin cng tng tu nh vy nu dt c max(3.0, 5.0) chng trinh s bi li
vi cac gia tri (loat) khng phu hop v kiu (int) cua di trong ham max.
Trong trong hop nh vy chung ta phai vit ham moi d tinh max cua 2 s thuc. Muc
dich, cach lam vic cua ham nay hoan toan ging ham troc, tuy nhin trong C va cac
ngn ngu lp trinh khac chung ta buc phai su dung mt tn moi cho ham moi nay. Vi
du:
f&"at fa6(f&"at a, f&"at ;) ? r%t+rn (a . ;) G aH ; $ @
Tng tu d tun tin ta s vit thm cac ham:
*8ar *a6(*8ar a, *8ar ;) ? r%t+rn (a . ;) G aH ; $ @
112
&"n! &a6(&"n! a, &"n! ;) ? r%t+rn (a . ;) G aH ; $ @
,"+;&% ,a6(,"+;&% a, ,"+;&% ;) ? r%t+rn (a . ;) G aH ; $ @
Tom li ta s co 5 ham: max, cmax, max, lmax, dmax, vic su dung tn nh vy s gy
bt loi khi cn goi ham.
C cho phep ta co th khai bao va dinh nghia ca 5 ham trn voi cung 1 tn goi vi du la
max chng hn. Khi do ta co 5 ham:
int a6(int a, int ;) ? r%t+rn (a . ;) G aH ; $ @
f&"at a6(f&"at a, f&"at ;) ? r%t+rn (a . ;) G aH ; $ @
*8ar a6(*8ar a, *8ar ;) ? r%t+rn (a . ;) G aH ; $ @
&"n! a6(&"n! a, &"n! ;) ? r%t+rn (a . ;) G aH ; $ @
,"+;&% a6(,"+;&% a, ,"+;&% ;) ? r%t+rn (a . ;) G aH ; $ @
Va loi goi ham bt ky dng nao nh max(3,5), max(3.0,5), max('', 'K') du doc dap
ung. Chung ta co th dt ra vn d: voi ca 5 ham cung tn nh vy, chng trinh goi dn
ham nao. Vn d doc giai quyt d dang vi chng trinh s dua vao kiu cua cac di khi
goi d quyt dinh chy ham nao. Vi du loi goi max(3,5) co 2 di du la kiu nguyn nn
chng trinh s goi ham 1, loi goi max(3.0,5) hong dn ham s 2 va tng tu chng
trinh s chy ham s 3 khi gp loi goi max('','K').
Mt dc dim cua cac ham trung tn do la trong danh sach di cua chung phai co it nht
mt cp di nao do khac kiu nhau. Mt dc trng khac d phn bit thng qua cac di
do la s long di trong cac ham phai khac nhau (nu kiu cua chung la ging nhau). Vi
du vic v cac hinh: thng, tam giac, vung, chu nht trn man hinh la ging nhau, chung
ch phu thuc vao s long cac dim ni va to d cua chung. Do vy ta co th khai bao
va dinh nghia 4 ham v noi trn voi cung chung tn goi. Chng hn:
O"i, O%(Di% A, Di% B) $ 99 Oo /01n! t8pn! AB
O"i, O%(Di% A, Di% B, Di% C) $ 99 Oo ta !i>* ABC
O"i, O%(Di% A, Di% B, Di% C, Di% D) $ 99 Oo tJ !i>* ABCD
Trong vi du trn ta gia thit Diem la mt kiu du liu lu to d cua cac dim trn man
hinh. Ham ve(Diem A, Diem B, Diem C, Diem D) s v hinh vung, chu nht, thoi, binh
hanh hay hinh thang phu thuc vao to d cua 4 dim ABCD, noi chung no doc su dung
d v mt tu giac bt ky.
Tom li nhiu ham co th doc dinh nghia chng (voi cung tn goi ging nhau) nu
chung thoa cac diu kin sau:
o S long cac tham di trong ham la khac nhau, hoc
o Kiu cua tham di trong ham la khac nhau.
5. Truyn tham s
Co 3 cach truyn tham di thuc su cho cac tham di hinh thuc trong loi goi ham. Trong do cach
ta d dung cho dn thoi dim hin nay doc goi la truyn theo tham tri, tuc cac di hinh thuc s
nhn cac gia tri cu th t loi goi ham va tin hanh tinh toan ri tra li gia tri. d hiu cac cach
truyn di chung ta s xem qua cach thuc chng trinh thuc hin voi cac di khi thuc hin ham.
113
"e 4ruyn thCo th+m tr
Ta xet li vi du ham &+:t8+a(f&"at 6, int n) tinh x
n
. Gia su trong chng trinh chinh ta co cac
bin a, b, dang chua cac gia tri a 2, b 3, va cha co gia tri. tinh a
b
va gan gia tri
tinh doc cho , ta co th goi f E &+:t8+a(a,;). Khi gp loi goi nay, chng trinh s t chuc
nh sau:
o To 2 bin moi (tuc 2 nho trong b nho) co tn x va n. Gan ni dung cac nho
nay bng cac gia tri trong loi goi, tuc gan 2 (a) cho x va 3 (b) cho n;
o Toi phn khai bao (cua ham), chng trinh to thm cac nho mang tn kq va i;
o Tin hanh tinh toan (gan li kt qua cho kq);
o Cui cung ly kt qua trong kq gan cho nho (la nho co sn d doc khai bao
troc, nm bn ngoai ham);
o Kt thuc ham quay v chng trinh goi. Do ham &+:t8+a d hoan thanh xong vic
tinh toan nn cac nho doc to ra trong khi thuc hin ham (x, n, kq, i) s doc
xoa khoi b nho. Kt qua tinh toan doc lu giu trong nho (khng bi xoa vi
khng lin quan gi dn ham)
Trn dy la truyn di theo cach thng thong. Vn d dt ra la gia su ngoai vic tinh , ta
cn mun thay di cac gia tri cua cac nho a, b (khi truyn no cho ham) thi co th thuc
hin doc khng giai quyt bai toan nay ta cn theo mt k thut khac, nho vao vai
tr cua bin con tro va tham chiu.
#e 4ruyn thCo !hn trO
Xet vi du trao di gia tri cua 2 bin. y la mt yu cu nho nhng doc gp nhiu ln
trong chng trinh, vi du d sp xp mt danh sach. Do vy cn vit mt ham d thuc
hin yu cu trn. Ham khng tra kt qua. Do cac bin cn trao di la cha doc bit
troc ti thoi dim vit ham, nn ta phai da chung vao ham nh cac tham di, tuc ham
co hai tham di x, y di din cho cac bin s thay di gia tri sau nay.
T mt vai nhn xet trn, theo thng thong ham trao di s doc vit nh sau:
O"i, ,"i5*8"(int 6, int :)
?
int t $
t E 6 $
6 E : $
: E t $
@
Gia su trong chng trinh chinh ta co 2 bin x, y chua cac gia tri ln lot la 2, 5. Ta cn
di ni dung 2 bin nay sao cho x 5 cn y 2 bng cach goi dn ham ,"i5*8"(6, :).
int ain()
?
int 6 E 2$
int : E 5$
,"i5*8"(6, :) $
printf(iF,, F,i,6, :)$ 99 2, 5 (6, : O2n 78Wn! /qi)
!%t*8()$
r%t+rn 0$
@
114
Thuc su sau khi chy xong chng trinh ta thy gia tri cua x va y vn khng thay di !.
Nh d giai thich trong muc trn (goi ham &+:t8+a), vic du tin khi chng trinh thuc
hin mt ham la to ra cac bin moi (cac nho moi, dc lp voi cac nho x, y d co sn)
tng ung voi cac tham di, trong trong hop nay cng co tn la x, y va gan ni dung
cua x, y (ngoai ham) cho x, y (moi). Va vic cui cung cua chng trinh sau khi thuc
hin xong ham la xoa cac bin moi nay. Do vy ni dung cua cac bin moi thuc su la co
thay di, nhng khng anh hong gi dn cac bin x, y c. Hinh v doi dy minh ho
cach lam vic cua ham swap, troc, trong va sau khi goi ham.
*+nh ).1 - Su thay di gia tri cua tham s thuc
Nh vy ham ,"i5*8" cn doc vit li sao cho vic thay di gia tri khng thuc hin trn
cac bin tm ma phai thuc su thuc hin trn cac bin ngoai. Mun vy thay vi truyn gia
tri cua cac bin ngoai cho di, by gio ta s truyn dia ch cua no cho di, va cac thay di
s phai thuc hin trn ni dung cua cac dia ch nay. o chinh la ly do ta phai su dung con
tro d lam tham di thay cho bin thong. Cu th ham swap doc vit li nh sau:
O"i, ,"i5*8"(int Ip, int IL)
?
int t$ 99 78ai ;>" ;ifn tT t
t E Ip $ 99 /mt !i> trR *ba t ;<n! nai ,+n! nri p trs thi
Ip E IL $ 99 t8a: nai ,+n! nri p trs ;<n! nai ,+n! nri L trs
IL E t $ 99 t8a: nai ,+n! nri L trs thi ;<n! nai ,+n! *ba t
@
Voi cach t chuc ham nh vy r rang nu ta cho p tro toi bin x va q tro toi bin y thi
ham ,"i5*8" s thuc su lam thay di ni dung cua x, y chu khng phai cua p, q. T do loi
goi ham s la ,"i5*8"(j6, j:) (tuc truyn dia ch cua x cho p, p tro toi x va tng tu q tro
toi y).
Nh vy co th tom tt 3 dc trng d vit mt ham lam thay di gia tri bin ngoai nh
sau:
o i cua ham phai la con tro (vi du int *p);
o Cac thao tac lin quan dn di nay (trong thn ham) phai thuc hin ti ni no tro
dn (vi du *p );
o Loi goi ham phai chuyn dia ch cho p (vi du &x).
Ngoai ham ,"i5*8" d trinh bay, o dy ta da thm vi du d thy su cn thit phai co ham
115
cho phep thay di bin ngoai. Vi du ham giai phng trinh bc 2 voi yu cu:
o Cho troc 3 s a, b, c nh 3 h s cua phng trinh, cn tim 2 nghim x1, x2 cua
no.
o Khng th ly gia tri tra li cua ham d lam nghim vi gia tri tra li ch co 1 trong
khi ta cn dn 2 nghim.
o Do vy ta cn khai bao 2 bin ngoai trong chng trinh d chua cac nghim, va
ham phai lam thay di 2 bin nay (tuc chua gia tri nghim giai doc).
o Nh vy ham doc vit cn phai co 5 di, trong do 3 di a, b, c di din cho cac
h s, khng thay di va 2 bin x1, x2 di din cho nghim, 2 di nay phai doc
khai bao dng con tro.
o Ngoai ra, phng trinh co th v nghim, 1 nghim hoc 2 nghim do vy ham s
tra li gia tri la s nghim cua phng trinh, trong trong hop 1 nghim (nghim
kep), gia tri nghim s doc cho vao x1.
int !pt;2(f&"at a, f&"at ;, f&"at *, f&"at Ip, f&"at IL)
?
f&"at , $ 99 /Q *8Ja t
, E (;I;) g 4IaI* $
if (, < 0) r%t+rn 0 $
%&'%
if (, EE 0)
? Ip E g;9(2Ia) $ r%t+rn 1 $ @
%&'%
?
Ip E (g; + 'Lrt(,))9(2Ia) $
IL E (g; g 'Lrt(,))9(2Ia) $
r%t+rn 2 $
@
@
o Mt vi du cua loi goi ham trong chng trinh chinh nh sau:
ain()
?
f&"at a, ;, * $ 99 *>* 8- 'U
f&"at 61, 62 $ 99 *>* n!8i-
printf(iu8kp 8- 'UH i)$
'*anf(Ff Ff Ff#,ja, j;, j*)$
'vit*8 (!pt;2(a, ;, *, j61, j62))
?
*a'% 0H
printf(iw80rn! tr_n8 OW n!8i-i)$
;r%a7$
*a'% 1H
printf(iw80rn! tr_n8 *V n!8i- 7xp 6 E Ffi, 61)$
;r%a7$
*a'% 2H
printf(iw80rn! tr_n8 *V 2 n!8i- p8Zn ;i-tH3ni)$
printf(i61 E Ff , OP 62 E Ffi, 61, 62)$
;r%a7$
@
116
@
Trn dy chung ta d trinh bay cach xy dung cac ham cho phep thay di gia tri cua bin
ngoai. Mt dc trng d nhn thy la cach vit ham tng di phuc tp. Do vy C d
phat trin mt cach vit khac dua trn di tham chiu va vic truyn di cho ham doc
goi la truyn theo tham chiu.
$e 4ruyn thCo th+m chiGu
Mt bin co th doc gan cho mt bi danh moi, va khi do ch nao xut hin bin thi cng
tng dng nh dung bi danh va ngoc li. Mt bi danh nh vy doc goi la mt bin
tham chiu, y nghia thuc t cua no la cho phep tham chiu toi mt bin khac cung kiu
cua no, tuc su dung bin khac nhng bng tn cua bin tham chiu.
Ging khai bao bin binh thong, tuy nhin troc tn bin ta thm du va (&). Co th
tm phn bin thanh 3 loi: bin thong voi tn thong, bin con tro voi du * troc tn
va bin tham chiu voi du &.
<7iQ+ ;ifn. j<t4n ;ifn t8a *8if+. E <t4n ;ifn /0y* t8a *8if+.$
Cu phap khai bao nay cho phep ta to ra mt bin tham chiu moi va cho no tham chiu
dn bin doc tham chiu (cung kiu va phai doc khai bao t troc). Khi do bin tham
chiu cn doc goi la bi danh cua bin doc tham chiu. Chu y khng co cu phap khai
bao ch tn bin tham chiu ma khng kem theo khoi to. Vi du:
int 8+n!, ,+n! $ 99 78ai ;>" *>* ;ifn n!+:4n 8+n!, ,+n!
int jti E 8+n!$ 99 78ai ;>" ;ifn t8a *8if+ ti, t%" t8a *8i%+ /fn
int jt%" E ,+n!$ 99 8+n! ,+n!( ti, t%" &P ;[ ,an8 *ba 8+n!, ,+n!
T vi tri nay tro di vic su dung cac tn hung, ti hoc dung, teo la nh nhau. Vi du:
8+n! E 2 $
ti ++$ 99 t0rn! /0rn! 8+n! ++$
printf(F,, F,,8+n!, ti)$ 99 3 3
t%" E ti + 8+n! $ 99 t0rn! /0rn! ,+n! E 8+n! + 8+n!
,+n! ++ $ 99 t0rn! /0rn! t%" ++
printf(F,, F,,,+n!,t%")$ 99 7 7
Vy su dung thm bin tham chiu d lam gi
o Cach t chuc bn trong cua mt bin tham chiu khac voi bin thong o ch ni
dung cua no la dia ch cua bin ma no di din (ging bin con tro), vi du cu
lnh
printf(F,, t%") $ 99 7
in ra gia tri 7 nhng thuc cht dy khng phai la ni dung cua bin teo, ni dung
cua teo la dia ch cua dung, khi cn in teo, chng trinh s tham chiu dn dung
va in ra ni dung cua dung (7). Cac hot dng khac trn teo cng vy (vi du teo
), thuc cht la tng mt dn vi ni dung cua dung (chu khng phai cua teo). T
cach t chuc cua bin tham chiu ta thy chung ging con tro nhng thun loi hn
o ch khi truy cp dn gia tri cua bin doc tham chiu (dung) ta ch cn ghi tn
bin tham chiu (teo) chu khng cn thm toan tu (*) o troc nh trong hop
dung con tro. im khac bit nay co ich khi doc su dung d truyn di cho cac
117
ham voi muc dich lam thay di ni dung cua bin ngoai.
Chu y:
o Bin tham chiu phai doc khoi to khi khai bao;
o Tuy ging con tro nhng khng dung doc cac phep toan con tro cho bin tham
chiu. Noi chung ch nn dung trong truyn di cho ham.
Mt ham vit doi dng di tham chiu s dn gian hn rt nhiu so voi di con tro va
ging voi cach vit binh thong (truyn theo tham tri), trong do ch co mt khac bit do
la cac di khai bao doi dng tham chiu.
so sanh 2 cach su dung ta nhc li cac dim khi vit ham theo con tro phai chu y dn,
do la:
o i cua ham phai la con tro (vi du int *p);
o Cac thao tac lin quan dn di nay trong thn ham phai thuc hin ti ni no tro
dn (vi du *p );
o Loi goi ham phai chuyn dia ch cho p (vi du &x).
Hy so sanh voi di tham chiu, cu th:
o i cua ham phai la tham chiu (vi du int &p);
o Cac thao tac lin quan dn di nay phai thuc hin ti ni no tro dn, tuc dia ch
cn thao tac. Vi mt thao tac trn bin tham chiu thuc cht la thao tac trn bin
doc no tham chiu nn trong ham ch cn vit p trong moi thao tac (thay vi *p
nh trong con tro);
o Loi goi ham phai chuyn dia ch cho p. Vi ban thn p khi tham chiu dn bin
nao thi s chua dia ch cua bin do, do do loi goi ham ch cn ghi tn bin, vi du x
(thay vi &x nh di voi dn tro).
Tom li, di voi ham vit theo tham chiu ch thay di o di (la cac tham chiu) cn li
moi ni khac du vit dn gian nh cach vit truyn theo tham tri.
Vi du : i gia tri 2 bin
O"i, ,"i5*8"(int j6, int j:)
?
int t $
t E 6$
6 E :$
: E t$
@
va loi goi ham cng dn gian nh trong truyn di theo tham tri. Vi du:
int a E 5, ; E 3$
,"i5*8"(a, ;)$
printf(F,, F,#,a,;)$
118
Bng R`si km rin- -o ,r ,, + /c/- bi, -r ,-Yng WSX b R kVi Tin ,^n
T-Xr ,^p T-Xr /-iS Jn ,^l
Khai bao
di
void doi_cho(int
x, int y)
void doi_cho(int
&x,int &y)
void doi_cho(int
*x, int *y)
Cu lnh t=x; x=y; y=t t=x; x=y; y=t t=*x; *x=*y; *y=t
Loi goi doi_cho(a,b) doi_cho(a,b) doi_cho(&a,&b)
Tac dung a,b khng thay di a,b c thay di a,b c thay di
D&ng ).1 - So sanh cac cach truyn tham s
6. Hm v mng
"e 4ruyn m?n- " chiu cho hm
Thng thong chung ta hay xy dung cac ham lam vic trn mang nh vect hay ma trn
cac phn tu. Khi do tham di thuc su cua ham s la cac mang du liu nay. Trong trong
hop nay ta co 2 cach khai bao di.
o Cach thu nht di doc khai bao binh thong nh khai bao bin mang nhng
khng cn co s phn tu kem theo, vi du:
int 6X Y$
f&"at 6X Y$
o Cach thu hai khai bao di nh mt con tro kiu phn tu mang, vi du:
int Ip$
f&"at Ip
Trong loi goi ham tn mang a (tham s thuc) s doc vit vao danh sach tham di thuc
su, vi a la dia ch cua phn tu du tin cua mang a, nn khi ham doc goi dia ch nay s
gan cho con tro p. Vi vy gia tri cua phn tu thu i cua a co th doc truy cp boi x|i|
(theo khai bao 1) hoc *(pi) (theo khai bao 2) va no cng co th doc thay di thuc su
(do dy cng la cach truyn theo dn tro). Sau dy la vi du dn gian, nhp va in vect,
minh ho cho ca 2 kiu khai bao di.
Vi du : Ham nhp va in gia tri 1 vect
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
O"i, n8ap(int 6X Y, int n) 99 nH 'U p8^n tz
?
int i$
f"r (iE0$ i<n$ i++)
'*anf(F,#,j6XiY)$
@
O"i, in(int Ip, int n)
?
int i$
119
f"r (iE0$ i<n$ i++)
printf(F,#, I(p+i))$
@
int ain()
?
int aX10Y $ 99 Sn! a *8Ja tUi /a 10 p8^n tz
n8ap(a,7)$ 99 OP" 7 p8^n tz /^+ ti4n *8" a
in(a,7)$ 99 ra 3 p8^n tz /^+ ti4n *ba a
!%t*8()$
r%t+rn 0$
@
#e 4ruyn m?n- # chiu cho hm
i voi mang 2 chiu khai bao di cng nh loi goi la phuc tp hn nhiu so voi mang 1
chiu. Ta co hai cach khai bao di nh sau:
X# K-Xi Tco ,-to kjng Tn /-i, /X rng 2 /-ieS [oX, rn
Voi khai bao x|m||n| co th hiu x la mang 1 chiu m phn tu, mi phn tu cua no co
kiu loat|n|. T do, di doc khai bao nh mt mang hinh thuc 1 chiu (khng cn s
phn tu - o dy la s dng) cua kiu loat|n|. Tuc co th khai bao nh sau:
f&"at 6X YXnY $ 99 Sn! Ohi 'U p8^n tz 78Wn! /Rn8 tr0h*, {i p8^n tz &P n 'U
f&"at (I6)XnY $ 99 at *"n trs, *V 7iQ+ &P Sn! n 'U (f&"atXnY)
truy nhp dn dn phn tu thu i, ta vn su dung cu phap x|i|||. Tn cua mang a
(tham s thuc) doc vit binh thong trong loi goi ham. Noi chung theo cach khai bao
nay vic truy nhp la dn gian nhng phng phap cng co hn ch do la s ct cua
mang truyn cho ham phai c dinh bng n.
Vi du : Tinh tng cac s hng trong ma trn
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
f&"at t"n!(f&"at 6XYX10Y, int , int n)
?
f&"at t E 0$
int i, | $
f"r (iE0$ i<$ i++)
f"r (|E0$ |<n$ |++) t +E 6XiYX|Y $
r%t+rn t$
@
int ain()
?
f&"at aX8YX10Y, ;X8YX10Y $
int i, |, a, na, ;, n;$
printf(in8ap '" ,"n!, '" *"t a tran aH i)$
'*anf(iF,F,i,ja,jna)$
f"r (iE0$ i<a$ i++)
f"r (|E0$ |<na$ |++)
?
printf(iaXF,,F,YE i,i,|)$
'*anf(iFfi,jaXiYX|Y)$
@
printf(in8ap '" ,"n!, '" *"t a tran ;H i)$
120
'*anf(iF,F,i,j;,jn;)$
f"r (iE0$ i<;$ i++)
f"r (|E0$ |<n;$ |++)
?
printf(iaXF,,F,YE i,i,|)$
'*anf(iFfi,j;XiYX|Y)$
@
printf(iFf3ni,t"n!(a, a, na))$
printf(iFf3ni,t"n!(;, ;, n;))$
!%t*8()$
r%t+rn 0$
@
T# Btr rng [oX, rn ,-./ s. [ rng r, /-ieS [oX, rn
Khi do su dung cach khai bao nh trong mang mt chiu, do la su dung con tro loat *p
d truy cp doc dn tng phn tu cua mang. Cach nay co hn ch trong loi goi: dia ch
truyn cho ham khng phai la mang a ma cn phai ep kiu v (loat*) (d phu hop voi p).
Voi cach nay goi k la thu tu cua phn tu a|i||| trong mang mt chiu (m*n), ta co quan
h giua k, i, nh sau: k *(p i*n ) , i k/n va kn trong do n la s ct cua
mang truyn cho ham. iu nay co nghia d truy cp dn a|i||| ta co th vit *(pi*n),
ngoc li bit ch s k co th tinh doc dng i, ct cua phn tu nay. u dim cua cach
khai bao nay la ta co th truyn mang voi kich thoc bt ky (s ct khng cn dinh troc)
cho ham.
Vi du : Tim phn tu be nht cua ma trn
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
O"i, int(f&"at I6, int , int n)
?
f&"at in E I6$
int 7, 7in$
f"r (7E1$ 7<In$ 7++)
if (in . 6X7Y)
?
in E 6X7Y$
7in E 7$
@
printf(i}ia tri in &aH Ff , tai ,"n! F,, *"t F,3ni,in,7in9n,7inFn)$
@
int ain()
?
f&"at aX3YX3Y$
int i, | $
f"r (iE0$ i<3$ i++)
f"r (|E0$ |<3$ |++)
?
printf(iaXF,,F,Yi,i,|)$
'*anf(iFfi,jaXiYX|Y)$
@
int((f&"atI)(a), 3, 3) $
!%t*8()$
r%t+rn 0$
121
@
$e `i tr tr? 2^i c<+ hm 2 m?n-
Khng co cach nao d gia tri tra li cua mt ham la mang. Tuy nhin thuc su mi mang
cng chinh la mt con tro, vi vy vic ham tra li mt con tro tro dn dy du liu kt qua
la tng dng voi vic tra li mang. Ngoai ra cn mt cach d dung hn di voi mang 2
chiu la mang kt qua doc tra li vao trong tham di cua ham (ging nh nghim cua
phng trinh bc 2 doc tra li vao trong cac tham di). O dy chung ta s ln lot xet 2
cach lam vic nay.
Gic ,^p ,^ [i [ /on ,^l ,^l kn rng f, WS
Troc ht chung ta xet vi du sau dy:
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <'t,&i;(8.
intI ,a:1()
?
int 7LX3Y E ? 7, 5, 3 @$
r%t+rn 7L$
@
intI ,a:2()
?
int I7L$
7LE(intI)a&&"*(3I'il%"f(int))$
I7L E I(7L+1) E I(7L+2) E 0 $
r%t+rn 7L $
@
int ain()
?
int Ia, i$
a E ,a:1()$
f"r (iE0$ i<3$ i++)
printf(iF,3ni,I(a+i))$
a E ,a:2()$
f"r (iE0$ i<3$ i++)
printf(iF,3ni,I(a+i))$
!%t*8()$
r%t+rn 0$
@
T vi du trn ta thy hai ham tra gia tri du to bn trong no mt mang 3 s nguyn va tra
li dia ch mang nay cho con tro kt qua ham. Tuy nhin, ch co day2() la cho li kt qua
dung. Ti sao
o Xet mang kq doc khai bao va khoi to trong day1(), dy la mt mang cuc b
(doc to bn trong ham) nh sau nay chung ta s thy, cac loi bin tm thoi
nay (va ca cac tham di) ch tn ti trong qua trinh ham hot dng. Khi ham kt
thuc cac bin nay s mt di. Do vy tuy ham d tra li dia ch cua kq troc khi no
kt thuc, th nhng sau khi ham thuc hin xong, toan b kq s doc xoa khoi b
nho va vi vy con tro kt qua ham d tro dn vung nho khng cn cac gia tri nh
kq d co. T diu nay vic su dung ham tra li con tro la phai ht suc cn thn.
Mun tra li con tro cho ham thi con tro nay phai tro dn dy du liu nao sao cho
122
no khng mt di sau khi ham kt thuc, hay noi khac hn do phai la nhung dy du
liu doc khoi to bn ngoai ham hoc co th su dung theo phng phap trong
ham dayi2().
o Trong day2() mt mang kt qua 3 s cng doc to ra nhng bng cach xin cp
phat vung nho. Vung nho doc cp phat nay s vn cn tn ti sau khi ham kt
thuc (no ch bi xoa di khi su dung toan tu delete). Do vy hot dng cua day2() la
chinh xac.
Mng /xn ,^ [i k`/ f-Xi Tco n-` r, ,-Xr ki ,^ong RXn- sc/- ki /X -r
Tham di nay la mt con tro nn hin nhin khi truyn mang d khai bao sn (d chua kt
qua) t ngoai vao cho ham thi mang s thuc su nhn doc ni dung kt qua (tuc co thay
di troc va sau khi goi ham xem muc truyn tham di thuc su theo dn tro). nm
doc vn d nay chung ta xet vi du sau.
Vi du : Cng 2 vect, vect kt qua tra li trong tham di cua ham. So voi vi du troc gia
tri tra li la void (khng tra li gia tri) cn danh sach di co thm con tro d chua kt
qua.
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <'t,&i;(8.
O"i, *"n!Ot(int I6, int I:, int Il, int n)
?
f"r (int iE0$ i<n$ i++) lXiY E 6XiY + :XiY$
@
ain()
?
int i, n, aX10Y, ;X10Y, *X10Y $
printf(iu8ap Oa" '" p8an t+H i)$
'*anf(iF,i,jn)$
f"r (iE0$ i<n$ i++)
?
printf(iaXF,YEi,i)$
'*anf(iF,i,jaXiY)$
@
f"r (iE0$ i<n$ i++)
?
printf(i;XF,YEi,i)$
'*anf(iF,i,j;XiY)$
@
*"n!Ot(a, ;, *, n)$
f"r (iE0$ i<n$ i++)
?
printf(i*XF,YEF,3ni,i,*XiY)$
@
!%t*8()$
r%t+rn 0$
@
%e D@i v -i tr tr? 2^i c<+ hm 2 )iu k[ t9
Ging cac trong hop d xet voi mang 1 chiu, di cua cac ham xu ki tu co th khai bao
doi 2 dng: mang ki tu hoc con tro ki tu. Gia tri tra li lun lun la con tro ki tu. Ngoai
123
ra ham cng co th tra li gia tri vao trong cac di con tro trong danh sach di.
Vi du sau dy dung d tach ho, tn cua mt xu ho va tn. Vi du gm 3 ham. Ham ho tra
li xu ho (con tro ki tu) voi di la xu ho va tn doc khai bao dng mang. Ham tn tra
li xu tn (con tro ki tu) voi di la xu ho va tn doc khai bao dng con tro ki tu. Thuc
cht di ho va tn trong hai ham ho, tn co th doc khai bao theo cung cach thuc, o dy
chng trinh mun minh ho cac cach khai bao di khac nhau (d d cp dn trong phn
di mang 1 chiu). Ham thu ba cng tra li ho, tn nhng cho vao trong danh sach tham
di, do vy ham khng tra li gia tri (void). dn gian ta qui oc xu ho va tn khng
chua cac du cach du va cui xu, trong do ho la dy ki tu t du cho dn khi gp du
cach du tin va tn la dy ki tu t sau du cach cui cung dn ki tu cui xu.
Vi du :
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <'t,&i;(8.
)in*&+,% <'trin!(8.
*8arI 8"(*8ar 8"t%nXY)
?
*8arI 7L$
int iE0$
v8i&% (8"t%nXiY ~E 32) i++$
7LE(*8arI)a&&"*(iI'il%"f(*8ar))$
'trn*p:(7L, 8"t%n, i) $
r%t+rn 7L$
@
*8arI t%n(*8arI 8"t%n)
?
*8arI 7L E n%v *8arX10Y$
int iE'tr&%n(8"t%n)$
v8i&% (8"t%nXiY ~E 32) igg$
7LE8"t%n+i+1$
r%t+rn 7L$
@
O"i, ta*88t(*8arI 8"t%n, *8arI 8", *8arI t%n)
?
int iE0$
v8i&% (8"t%nXiY ~E 340) i++$
'trn*p:(8", 8"t%n, i) $
iE'tr&%n(8"t%n)$
v8i&% (8"t%nXiY ~E 340) igg$
'trn*p:(t%n, 8"t%n+i+1, 'tr&%n(8"t%n)gig1) $
@
int ain()
?
*8ar 8tX30Y, I8, It $
printf(i]" Oa tan E i)$
!%t'(8t)$
8 E 8"(8t)$ t E t%n(8t)$
printf(i]"HF', T%nHF'(3ni,8,t)$
ta*88t(8t, 8, t)$
printf(i]"HF', T%nHF'(3ni,8,t)$
124
!%t*8()$
r%t+rn 0$
@
&e D@i 2 hIn- con trO
Theo phn truyn di cho ham ta d bit d thay di bin ngoai di tng ung phai doc
khai bao doi dng con tro. Tuy nhin, trong nhiu trong hop cac bin ngoai khng co
nhu cu thay di nhng di tng ung voi no vn phai khai bao doi dng con tro (vi du
di la mang hoc xu ki tu). iu nay co kha nng do nhm ln, cac bin ngoai nay s bi
thay di ngoai y mun. Trong trong hop nh vy d cn thn, cac di con tro nu khng
mun thay di (ch ly gia tri) cn doc khai bao nh la mt hng con tro bng cach thm
troc khai bao kiu cua chung t khoa const. T khoa nay khng dinh bin tuy la con tro
nhng no la mt hng khng thay di doc gia tri. Nu trong thn ham ta c tinh thay di
chung thi chng trinh s bao li. Vi du di hoten trong ca 3 ham o trn co th doc khai
bao dng const char* hoten.
Vi du : i la hng con tro. In hoa mt xu ki tu
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <'t,&i;(8.
)in*&+,% <'trin!(8.
O"i, in8"a(*"n't *8arI ')
?
*8ar ItE n%v *8arX5Y$
'tr*p:(t, ')$
printf(iF',F'i,','tr+pr(t))$
@
int ain()
?
*8ar I' E ia;*,%i $
in8"a(')$
!%t*8()$
r%t+rn 0$
@
Trong vi du trn, nu 'tr+pr(t) bng 'tr+pr(') thi chng trinh s thng bao li vi s doc
dinh nghia la hng con tro trong khi ham 'tr+pr() li lam thay di gia tri cua no, va diu
nay la khng th.
III. Con trB hm
- Mc du mt ham khng phai la mt bin nhng no vn chim vi tri trong b nho va ta co
th gan vao vi tri cua no cho mt loi bin con tro. Con tro nay tro dn dim xm nhp
vao ham. Ta goi dy la con tro ham. Con tro ham co th su dung thay cho tn ham va vic
su dung con tro cho phep cac ham cng doc truyn nh la tham s cho cac ham khac.
hiu doc cac con tro ham lam vic nh th nao, ta cn hiu mt chut v cach bin
dich va goi mt ham. Khi bin dich ham, trinh bin dich chuyn chng trinh ngun sang
dng m may va thit lp mt dim xm nhp vao ham (chinh la vi tri ch thi m may du
tin cua ham). Khi co loi goi thuc hin ham, may tinh s thuc hin mt ch thi call chuyn
diu khin dn dim xm nhp nay. Trong trong hop goi ham bng tn ham thi dim
xm nhp nay la tri tuc thoi (gn nh la mt hng va khng chua bin nao ca), cach goi
125
ham nay goi la cach goi ham truc tip. Trai li, khi goi ham gian tip thng qua mt bin
tro thi bin tro do phai tro toi ch thi m may du tin cua ham do. Cach goi ham thng
qua bin tro ham goi la cach goi ham gian tip.
- Mt ham cng ging nh du liu: co tn goi , co dia ch lu trong b nho va co th truy
nhp dn ham thng qua tn goi hoc dia ch cua no. Con tro ham la mt con tro ch dn
dia ch cua mt ham. truy nhp (goi) ham thng qua dia ch chung ta phai khai bao
mt con tro chua dia ch nay va sau do goi ham bng cach goi tn con tro.
1. Khai bo
.0 AhA
<7iQ+ !i> trR. (It4n ;ifn 8P)(,9' t8a /Ui)$
<7iQ+ !i> trR. (It4n ;ifn 8P)(,9' t8a /Ui) E <t4n 8P.$
- Ta thy cach khai bao con tro ham cng tng tu khai bao con tro bin (ch cn dt du *
troc tn), ngoai ra cn phai bao *tn ham giua cp du ngoc (). Vi du:
f&"at (If)(int)$ 99 78ai ;>" *"n trs 8P *V t4n &P f trs /fn 8P
99 *V at t8a /Ui 7iQ+ int OP *8" !i> trR 7iQ+ f&"at(
O"i, (If)(f&"at, int)$ 99 *"n trs trs /fn 8P Ohi *mp /Ui (f&"at, int)(
- hoc phuc tp hn:
*8arI (IX10Y)(int, *8ar) 99 78ai ;>" at Sn! 10 *"n trs 8P trs /fn
99 *>* 8P *V *mp t8a /Ui (int, *8ar), !i> trR trS
99 &Ti *ba *>* 8P nP: &P 6Z+ 7[ t\(
- Chu y : phn bit giua 2 khai bao: loat (*)(int) va loat *(int). Cach khai bao troc la
khai bao con tro ham co tn la . Cach khai bao sau co th vit li thanh loat* (int) la
khai bao ham voi gia tri tra li la mt con tro loat.
2. S dng con tr hm
- :'n 6a hm h$7 n hm
- su dung con tro ham ta phai gan no voi tn ham cu th va sau do bt ky ni nao doc
phep xut hin tn ham thi ta du co th thay no bng tn con tro. Vi du nh cac thao tac
goi ham, da ham vao lam tham di hinh thuc cho mt ham khac Sau dy la cac vi du
minh ho.
- Vi du 4.16 : Dung tn con tro d goi ham
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
f&"at ;p8+"n!(f&"at 6)
?
r%t+rn 6I6$
@
int ain()
?
f&"at (If)(f&"at)$
f E ;p8+"n!$
printf(iBin8 p8+"n! *+a 3(5 E HFfi,f(3(5))$
!%t*8()$
r%t+rn 0$
126
@
- :'n 6a hm lm h$m Oi
- Vi du 4. 1 7 : Tham di cua ham ngoai cac kiu du liu d bit cn co th la mt ham. iu
nay co tac dung rt lon trong cac bai toan tinh toan trn nhung di tong la ham toan hoc
nh tim nghim, tinh tich phn cua ham trn mt don ... Ham dong vai tr tham di s
doc khai bao doi dng con tro ham. Vi du sau dy trinh bay ham tim nghim xp x
cua mt ham lin tuc va di du trn don |a, b|. ham tim nghim nay su dung doc
trn nhiu ham toan hoc khac nhau, trong ham s chua mt bin con tro ham va hai cn a,
b, cu th bng khai bao loat timnghiem(loat (*)(loat), loat a, loat b). Trong loi goi
ham s doc thay th bng tn ham cu th cn tim nghim.
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <at8(8.
),%fin% Dw 1(0%g6
f&"at tin!8i%(f&"at (If)(f&"at), f&"at a, f&"at ;)$
f&"at %+6(f&"at)$
f&"at &"!6(f&"at)$
int ain()
?
printf(iu!8i% *+a % + 6 g 2 tr4n ,"an X0,1Y E i)$
printf(iFf3ni,tin!8i%(%+6,0,1))$
printf(iu!8i% *+a &"!a(6) g 1 tr4n ,"an X2,3Y E i)$
printf(iFf3ni,tin!8i%(&"!6,0,1))$
!%t*8()$
r%t+rn 0$
@
f&"at tin!8i%(f&"at (If)(f&"at), f&"at a, f&"at ;)
?
f&"at * E (a+;)92$
v8i&% (fa;'(ag;).Dw jj f(*)~E0)
?
if (f(a)If(*).0) a E * $ %&'% ; E *$
* E (a+;)92$
@
r%t+rn *$
@
f&"at %+6(f&"at 6) ? r%t+rn (%6p(6)g2)$ @
f&"at &"!6(f&"at 6) ? r%t+rn (&"!(6)g1)$ @
3. Mng con tr hm
- Tng tu nh bin binh thong cac con tro ham ging nhau co th doc gp li vao trong
mt mang, trong khai bao ta ch cn thm |n| vao sau tn mang voi n la s long ti da
cac con tro; vi du sau minh ho cach su dung nay. 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 t 1.0 dn 10.0 theo
boc 0.5
- Vi du 4.1 8 :
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
127
)in*&+,% <at8(8.
,"+;&% ;p(,"+;&% 6)
?
r%t+rn 6I6$
@
int ain()
?
int i,|$
,"+;&% 6E1(0$
,"+;&% (IfX6Y)(,"+;&%)$
fX1YE;p$ 99 8P ;_n8 p80rn! 6Z: ,\n! n tr4n
fX2YE'in$ 99 8P 'in tr"n! at8(8
fX3YE*"'$ 99 8P *"' tr"n! at8(8
fX4YE%6p$ 99 8P %6p (% ) tr"n! at8(8
fX5YE'Lrt$ 99 8P 'Lrt (*n ;k* 2( tr"n! at8(8
v8i&% (6<E10(0) 99 kp ;Sn!
?
printf(i3ni)$
f"r (|E1$|<E5$++|)
printf(iF10(2f i,fX|Y(6))$
6+E0(5$
@
!%t*8()$
r%t+rn 0$
@
I!. > 6ui
1. Khi nim
- Mt ham doc goi la d quy nu bn trong thn ham co lnh goi dn chinh no. Khi ham
goi d qui dn chinh no, thi mi ln goi may s to ra mt tp cac bin cuc b moi hoan
toan dc lp voi tp cac bin cuc b d doc to ra trong cac ln goi troc.
minh ho chi tit nhung diu trn, ta xet mt vi du v tinh giai tha cua s nguyn
dng n. Theo dinh nghia giai tha cua mt s nguyn n doc ky hiu la n! va doc tinh
nh sau:
- n!1* 2 * 3 ** (n-1) *n (n-1)! *n (voi 0!1)
- Nh vy, d tinh n! ta thy nu n0 thi n!1 ngoc li thi n!n * (n-1)!
- Vi du 4.19 : minh ho chi tit nhung diu trn, ta xet mt vi du v tinh giai tha cua s
nguyn dng n. Khi khng dung phng phap d qui ham co th doc vit nh sau :
&"n! int !t1(int n) 9I T[n8 n~ OGi n.E0I9
?
&"n! int !tp8+E1$
int i$
f"r (iE1$i<En$++i)
!tp8+IEi$
r%t+rn !tp8+$
@
- Ham tinh n! theo phng phap d qui co th doc vit nh sau :
128
&"n! int !t2(int n)
?
if (nEE0 nEE1)
r%t+rn 1$
%&'%
r%t+rn(nI!t2(ng1))$
@
- Va loi goi ham gt t chng trinh chinh doc thuc hin nh sau:
int ain()
?
99printf(i3n 3~EF,i,!t1(3))$
printf(i3n 3~EF,i,!t2(3))$
!%t*8()$
r%t+rn 0$
@
- Ln goi du tin toi ham gt2 doc thuc hin t ham main(). May s to ra mt tp cac
bin tu dng cua ham gt2. Tp nay ch gm cac di n. Ta goi di n doc to ra ln thu
nht la n thu nht. Gia tri cua tham s thuc ( s 3 ) doc gan cho n thu nht. Luc nay bin
n trong thn ham doc xem la n thu nht. Do n thu nht co gia tri bng 3 nn diu kin
trong toan tu i la sai va do do may s lua chon cu lnh else. Theo cu lnh nay, may s
tinh gia tri biu thuc: n*gt2(n-1) (*). tinh biu thuc trn, may cn goi chinh ham gt2
vi th ln goi thu hai s thuc hin. May s to ra di n moi, ta goi do la n thu hai. Gia tri
cua n-1 o dy li la di cua ham , doc 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 cha thoa mn diu kin i nn may li tip
tuc tinh biu thuc : n*gt2(n-1) (**). Biu thuc trn li goi ham gt2 ln thu ba. May li to
ra di n ln thu ba va o dy n thu ba co gia tri bng 1. i n1 thu ba li doc truyn cho
ham, luc nay diu kin trong lnh i doc thoa mn, may di thuc hin cu lnh: return
1gt2(1) (***). Bt du t dy, may s thuc hin ba ln ra khoi ham gt2. Ln ra khoi ham
thu nht ung voi ln vao thu ba. Kt qua la di n thu ba doc giai phong, ham gt2(1) cho
gia tri la 1 va may tro v xet gia tri biu thuc
n*gt2(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 doc 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*gt2(2)n*2*1 n li 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 doc su dung trong cu lnh print cua ham main()
nn kt qua in ra trn man hinh la: 3!6.
- T vi du trn ta thy ham d qui co dc dim:
- Chng trinh vit rt gon,
- Vic thuc hin goi di goi li ham rt nhiu ln phu thuc vao d lon cua du vao. Chng
hn trong vi du trn ham doc goi n ln, mi ln nh vy chng trinh s mt thoi gian
d lu giu cac thng tin cua ham goi troc khi chuyn diu khin dn thuc hin ham
doc goi. Mt khac cac thng tin nay doc lu tru nhiu ln trong ngn xp s dn dn
tran ngn xp nu n lon.
- Ham d qui so voi ham co th dung vng lp thi dn gian hn, 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
129
cach lp nay. Song vn tn ti nhung bai toan ch co th giai bng d qui.
2. Lp cc bi ton gii uc bng qui
- Phng phap d qui thong doc dung d giai cac bai toan co dc dim:
- Giai quyt doc d dang trong cac trong hop ring goi la trong hop suy bin hay c
s, trong trong hop nay ham doc tinh binh thong ma khng cn goi li chinh no;
- i voi trong hop tng qut, bai toan co th giai doc bng bai toan cung dng nhng
voi tham di khac co kich thoc nho hn tham di ban du. Va sau mt s boc huu hn
bin di cung dng, bai toan da doc v trong hop suy bin.
- Nh vy trong trong hop tinh n! nu n 0 ham cho ngay gia tri 1 ma khng cn phai
goi li chinh no, dy chinh la trong hop suy bin. Trong hop n 0 ham s goi li chinh
no nhng voi n giam 1 dn vi. Vic goi nay doc lp li cho dn khi n 0.
- Mt lop rt rng cua bai toan dng nay la cac bai toan co th dinh nghia doc doi dng
d qui nh cac bai toan lp voi s boc huu hn bit troc, cac bai toan UCLN, thap Ha
Ni, ...
- :;u 6<c chung cV$ hm /ui
- Dng thuc chung cua mt chng trinh d qui thong nh sau:
if (tr01n! 8yp '+: ;ifn)
?
tr_n8 ;P: *>*8 !iSi 99 !iS /Rn8 /M *V *>*8 !iSi
@
%&'% 99 tr01n! 8yp tqn! L+>t
?
!i &Ti 8P Ohi t8a /Ui i;xi 8rn
@
3. Cc v d
- Bai toan tim oc s chung lon nht (UCLN): Cho hai s nguyna va b, tim USCLN cua
hai s theo giai thut d qui. Bai toan co th doc dinh nghia doi dng d qui nh sau:
- Nu b 0 thi UCLN a;
- Nu b0 thi UCLN(a, b) UCLN(b, a mod b).
- T do ta co ham d qui d tinh UCLN cua a va b nh sau.
- V d 4. 20 :
int CCu(int a, int ;)
?
if (;EE0)
r%t+rn a$
%&'%
r%t+rn CCu(;,aF;)$
@
- S Fibinaci: Tinh s hng thu n cua dy Fibonaci voi giai thut d qui. Dy Fibonaci
doc dinh nghia nh sau:
- (0) (1) 1;
130
- (n) (n-1) (n-2) voi n 2.
V d 4. 21 :
&"n! i;(int n)
?
&"n! 7L$
if (nEE0 nEE1) 7L E 1$
%&'% 7L E i;(ng1) + i;(ng2)$
r%t+rn 7L$
@
- Bai toan thap Ha ni: Co n dia voi kich thoc to, nho khac nhau. Ban du sp xp cac dia
theo trt tu kich thoc vao mt coc sao cho dia nho nht nm trn cung, tuc la to ra mt
dng hinh non. Ngoi chi phai di chuyn toan b s dia sang mt coc khac, tun theo
cac quy tc sau:
- Mt ln ch doc di chuyn mt dia;
- Mt dia ch co th doc dt ln mt dia lon hn (khng nht thit hai dia nay phai co
kich thoc lin k, tuc la dia nho nht co th nm trn dia lon nht).
- Hinh anh m ta bai toan doc cho nh hinh 4.2.
*+nh ).2 - Bai toan thap Hanoi
- M ta bai toan:
- t tn cac coc la A, B, C va qui oc A la Coc Ngun, B la Coc ich va C la Coc Trung
Gian;
- Goi n la tng s dia;
- anh s dia t 1 (nho nht, trn cung) dn n (lon nht, doi cung).
- Thut giai d qui: chuyn n dia t coc A sang coc B voi C la coc trung gian:
1. Chuyn n-1 dia t A sang C. Ch cn li dia n trn coc A;
2. Chuyn dia n t A sang B;
3. Chuyn n-1 dia t C sang B cho chung nm trn dia n
- V d 4.22 :
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
O"i, *8+:%n(int '",ia, *8ar C"tu!+"n, *8ar C"tDi*8, *8ar C"tT})
?
if ('",ia.0)
?
*8+:%n('",iag1, C"tu!+"n, C"tT}, C"tDi*8)$
131
printf(i C8+:%n ,ia F, T+ F* g. F*3ni,'",ia,C"tu!+"n,C"tDi*8)$
*8+:%n('",iag1, C"tT}, C"tDi*8, C"tu!+"n)$
@
@
int ain()
?
*8ar C"tu!+"n,C"tDi*8,C"tT}$
int n$
printf(i3n ]a: n8ap '" ,iaH i)$
'*anf(iF,i,jn)$
*8+:%n(n,A,B,C)$
!%t*8()$
@
- Kt qua thuc hin vi du 4.22 doc cho nh hinh 4.3.
-
*+nh ).3 - Kt qua thuc hin bai toan thap Ha ni voi n4
!. "#m t$t n%i &ung bi h'c
I. T chuc chng trinh
1. Vi du
2. Cu truc chng trinh
3. Ham xy dung sn
II. Ham do ngoi dung dinh nghia
1. Khai bao va dinh nghia Ham
2. Loi goi Ham
3. Ham voi di mc dinh
4. Khai bao ham trung tn
5. Truyn tham s
6. Ham va mang
III. Con tro ham
1. Khai bao
2. Su dung con tro ham
3. Mang con tro ham
IV. qui
1. Khai nim
132
2. Lop cac bai toan giai doc bng d qui
3. Cac vi du
V. Tom tt ni dung bai hoc
VI. Bai tp
!I. Bi tp
Xem Bi 11 - Bi ,\] ,-./ -n- H4M
133
Bi - Bi thc hnh: HM V CU TRC CHUNG TRNH
I. "h<c hin cc v & )=u
1. Xc [nh v[ tr tuong i ca 1 im vi tam gic ABC
Yu cu7 Vit chng trinh cho phep nhp vao toa d trn mt phng X ba dnh cua
tam giac ABC, va toa d cua dim M; da ra kt lun v vi tri tng di cua M so voi
ABC : M nm trong, trn cnh hay nm ngoai ABC.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
include stdio.h
include conio.h
include math.h
double KC(int x1, int y1, int x2, int y2);
double DT(double a, double b, double c);
int main()

int xa,ya, xb,yb, xc,yc, xm,ym;
double ab, bc, ac, am, bm, cm;
double abc, amb, bmc, amc;
print(Nhap toa do diem A(x,y):);
scan(dd, &xa, &ya);
print(Nhap toa do diem B(x,y):);
scan(dd, &xb, &yb);
print(Nhap toa do diem C(x,y):);
scan(dd, &xc, &yc);
print(Nhap toa do diem M(x,y):);
scan(dd, &xm, &ym);
abKC(xa,ya,xb,yb);
bcKC(xb,yb,xc,yc);
acKC(xa,ya,xc,yc);
amKC(xa,ya,xm,ym);
bmKC(xb,yb,xm,ym);
cmKC(xc,yc,xm,ym);
abcDT(ab, bc, ac);
ambDT(am, bm, ab);
bmcDT(bm, cm, bc);
amcDT(am, cm, ac);
i ((amb0),,(bmc0),,(amc0))

print(M nam tren canh cua ABC);


}
else

i ((ambbmcamc)abc)

134
print(M nam trong tam giac ABC);
}
else

print(M nam ngoai tam giac ABC);


}
}
getch();
return 0;
}
double KC(int x1, int y1, int x2, int y2)

double kq;
kqsqrt((x1-x2)*(x1-x2)(y1-y2)*(y1-y2));
return kq;
}
double DT(double a, double b, double c)

double kq, p;
p(double)(abc)/2;
kqsqrt(p*(p-a)*(p-b)*(p-c));
return kq;
}
4hJ n-hi3m "7 Nhn F9 d chy chng trinh, sau do nhp vao toa d cho cac dnh cua
tam giac ABC ln lot la A(x,y): 0,0 ; B(x,y): 10,0; C(x,y): 0, 10; va toa d cua dim M
la M(x,y): 1,1. Nhn xet v kt qua dt doc.
4hJ n-hi3m #7 Voi du liu vao A(x,y): 0,0 ; B(x,y): 10,0; C(x,y): 0, 10; M(x,y): 1,1 su
dung chuc nng debug cua cng cu lp trinh (Dev-C) va ghi li gia tri cua cac bin
abc, amb, bmc va amc. Xem li kt lun cua chng trinh va da ra giai phap d khc
phuc.
4hJ n-hi3m $7 Xy dung ham tinh binh phng cua 1 s va su dung vao chng trinh
thay cho ham sqrt() sn co.
2. Vit hm m s t ca mt u k t
Yu cu7 Vit chng trinh cho phep nhp vao mt xu ky tu, dm s t co trong xu. T
doc hiu la mt don ky tu nm giua hai du trng va khac trng.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
include stdio.h
include conio.h
include math.h
include string.h
int wordCount(char *s);
int main()
135

char s|100|;
print(Nhap vao mot xau:);
gets(s);
print(So tu: d, wordCount(s));
getch();
return 0;
}
int wordCount(char *s)

int kq,i;
kq0;
i0;
while (s|i|!'\0')

i (s|i|32)

kqkq1;
}
i;
}
kq;
return kq;
}
4hJ n-hi3m "7 Nhn F9 d chy chng trinh, nhp vao xu ky tu ky thuat lap trinh
nhn xet v kt qua dt doc.
4hJ n-hi3m #7 Nhp vao xu ky tu ky thuat lap trinh (co mt ky tu trng o cui) nhn
xet v kt qua dt doc.
4hJ n-hi3m $7 Nhp vao xu ky tu ky thuat lap trinh (co 1 ky tu trng o du, 3 ky
tu trng giua ky va thuat, 1 ky tu trng o cui) nhn xet v kt qua dt doc.
II. Bi tp t< lm
1. Vit chng trinh cho phep nhp vao toa d trn mt phng X ba dnh cua tam giac
ABC, va toa d cua dim M; da ra kt lun v vi tri tng di cua M so voi ABC : M
nm trong, trn cnh hay nm ngoai ABC.
2. Cho tam giac ABC va mt dim M khng nm trn cnh cua tam giac. Hy vit chng
trinh tinh s lon nht R sao cho vng trn tm M, ban kinh R, khng ct bt cu cnh nao
va khng chua tam giac.
3. Vit ham chun hoa chui ho tn ngoi Vit theo yu cu sau: Khng co ky tu trng phia
du va cui, giua 2 t co mt ky tu trng, ky tu du tin cua mi t doc vit HA va ky
tu khac doc vit thong.
4. Gia su hovaten la xu ho tn ngoi vit, vit cac ham TN cho phep ly ra phn tn, ham
HDM cho phep ly ra phn ho va dm cua hovaten.
5. Vit ham dm s t cua mt xu ky tu. Mi t doc hiu la don ky tu giua hai du trng
136
va khng phai la khoang trng.
6. Vit ham chuyn s nguyn thanh xu ky tu biu din cach doc s do. Vi du nhp vao s:
235 - in ra Hai tram ba muoi lam, 807 - in ra Tam tram linh bay, 55 - in ra Nam
muoi lam.
7. Xu ky tu biu din ngay thang la xu dng DD/MM/, trong do DD la hai chu s
biu din ngay, MM la hai chu s biu din thang va la bn chu s biu din
nm. Vit ham kim tra mt xu ky tu nhp vao co phai la xu biu din ngay thang hay
khng Nu la xu biu din ngay thang thi ngay thang do co hop l hay khng. Vi du
xu 30/02/2010` la xu biu din ngay thang nhng ngay thang do la khng hop l (vi
khng co ngay 30 thang 2).
8. Cho hai xu biu din ngay thang sd1 va sd2, vit ham tinh s ngay tinh t sd1 dn sd2
nu sd1 va sd2 la hai xu biu din ngay thang hop l (tham khao bai 6).
9. Cho sd1 la xu biu din ngay thang, n la mt s nguyn. Vit ham NgaySauN(sd1,n)
cho phep tra v xu ky tu dng ngay thang la ngay thu n sau ngay sd1, vi du sd1
27/01/2010 va n 15 thi ham tra v 11/02/2010. Vit ham NgayTruocN(sd1,n) cho
phep tra v xu ky tu dng ngay thang la ngay thu n troc ngay sd1, vi du sd1
27/01/2010 va n 46 thi ham tra v 12/12/2009.
10. Vit ham cho phep di nm dng lich thanh nm m lich. Vi du nu nm dng lich la
2010 thi nm m lich la Canh Dn.
11. Ta goi tng trit d cac chu s cua s tu nhin n la tng cac chu s cua n nu tng nay
ch co mt chu s; trong trong hop ngoc li tng trit d la kt qua cua vic cng dn
lin tip cho dn khi ch cn mt chu s. Vi du s n1186 co tng cac chu s la 16, s
nay co hai chu s va tng cac chu s cua no la 7. Vy tng trit d cua ny1186 la 7.
Nhp t ban phim mt s %, 1 % 9, vit ra man hinh tt ca cac s co 4 chu s ma
tng trit d cua no bng % (khng k cac hoan vi).
12. Mt sn hinh chu nht doc chia thanh mn vung co kich thoc bng nhau, voi m va
n 50. Mi co th doc chn mt qua min. Nu n mt qua min o (i,), tuc la o hang
i va ct , thi no s gy n cho cac xung quanh (i1,), (i-1,), (i,1), (i,-1) nu cac
nay co min. Hy nhp vao vi tri cac co min va vi tri du tin bi n va in ra ti da cac
bi n trn sn chu nht.
13. Cho mt dy co n1 doc danh s t 0 dn n. Mt qun co dung o s 0. Mi mt
noc di qun co doc di ln phia troc khng qua k . Mt cach di cua qun co la xut
phat t s 0 qun co phai di dn thu n. Voi hai s nguyn dng n va k, hy tinh s
cach di cua qun co. Vi du, voi n3 va k2 s co 3 cach di qun co voi cac noc 111,
12 va 21. (Bai 1, thi lympic Tin hoc Sinh vin i hoc Tng hop Ha ni mo
rng, Khi khng chuyn, Ha ni 4-1996).
14. Vit ra tt ca cac hoan vi cua dy X
n
1,2,...,n} co n phn tu la cac s 1,2 ,..., n.
15. T hop chp k t n, ki hiu la C
n
k
. Vit chng trinh tinh C
n
k
bit rng:
C
n
k
C
n-1
k-1
C
n-1
k
va
C
n
0
C
n
n
C
k
k
1.
137
Bi 1 - CU TRC D LIEU DO NGUI DNG TU NH
NGHA
Ni RSng Ti -U/
W. :;u 6<c d= liu d' ng1di djng F 9nh nghh$
1 Ih-i nim
2. Ih$i 5-' 5i.n c;u 6<c
3. :-c h$' -c 6n 5i.n %i4u c;u 6<c
). :'n 6a c;u 6<c
WW. Ii4u ngnn f."
1. Ih-i nim
2. :-c h$' -c c2 5&n
3. :i i
). ng dng
WWW. Ii4u hng ki
1. Ih-i nim
2. :-c h$' -c c2 5&n
3. :i i
). ng dng
WT. Ii4u hk"
T. Ii4u li %
TW. THm ni dung 5i hc
TWW. Di !"
I. C-u tr.c &4 liu &o ng/8i &Hng t< 0Inh nghJ=
1 Khi nim
Vn d: Lam th nao d m ta mt SINH VIN voi cac thng tin:
- M s sinh vin;
- Ho tn;
- Ngay thang nm sinh;
- Gioi tinh;
- ia ch thong tru
Hoc lam th nao d m ta NGA THNG bao gm cac thng tin:
- Ngay;
- Thang;
- Nm
138
Hu ht cac ngn ngu lp trinh trong do co C/C cho phep ngoi lp trinh tu dinh
nghia ra cu truc moi theo nhu cu su dung t nhung kiu du liu d co hoc d dinh
nghia troc do.
Kiu cu truc (Structure) la kiu du liu bao gm nhiu thanh phn co kiu khac nhau,
mi thanh phn doc goi la mt trong (ield).
Su khac bit giua kiu cu truc va kiu mang la: cac phn tu cua mang la cung kiu cn
cac phn tu cua kiu cu truc co th co kiu khac nhau. Hinh anh sau la cua kiu cu truc
voi 7 trong
1

2 3

4 5 6

7
cn kiu mang co dng:
0

1

2

3

4

5

6

7

8

9

1
0
1
1
1
2
1
3
14
.0 AhA ":
struct Tn cu truc

Kiu Tn trong 1 ;
Kiu Tn trong 2 ;
..
Kiu Tn trong n ;
};
.0 AhA #:
typede struct

Kiu Tn trong 1 ;
Kiu Tn trong 2 ;
..
Kiu Tn trong n ;
} Tn cu truc;
Trong do:
- Tn cu truc: la mt tn doc dt theo quy tc dt tn cua danh biu; tn nay
mang y nghia s la tn kiu cu truc;
139
- Kiu Trong i (i1..n): mi trong trong cu truc co du liu thuc kiu gi
(tn cua trong phai la mt tn doc dt theo quy tc dt tn cua danh biu).
! ": quan ly ngay, thang, nm cua mt ngay trong nm ta co th khai bao kiu cu
truc gm 3 thng tin: ngay, thang, nm.
'tr+*t Ki%+u!a:T8an!
?
+n'i!n%, *8ar u!a:$
+n'i!n%, *8ar T8an!$
+n'i!n%, int ua$
@$
t:p%,%f 'tr+*t
?
+n'i!n%, *8ar u!a:$
+n'i!n%, *8ar T8an!$
+n'i!n%, int ua$
@ Ki%+u!a:T8an!$
! #: Mi sinh vin cn doc quan ly boi cac thng tin: M s sinh vin, ho tn, ngay
thang nm sinh, gioi tinh, dia ch thong tru. Luc nay ta co th khai bao mt struct gm
cac thng tin trn.
'tr+*t Ki%+in8i%n
?
*8ar MX10Y$
*8ar ]"T%nX40Y$
'tr+*t Ki%+u!a:T8an! u!a:in8$
int w8ai$
*8ar DiaC8iX40Y$
@$
t:p%,%f 'tr+*t
?
*8ar MX10Y$
*8ar ]"T%nX40Y$
Ki%+u!a:T8an! u!a:in8$
int w8ai$
*8ar DiaC8iX40Y$
@ Ki%+in8i%n$
o Mi thanh phn ging la mt bin ring thuc cu truc, no gm kiu va tn
thanh phn. Mt thanh phn cng cn doc goi la trong.
o Phn tn cua kiu cu truc va phn danh sach bin co th co hoc khng.
Tuy nhin trong khai bao ki tu kt thuc cui cung phai la du chm phy (;).
o Cac kiu cu truc doc phep khai bao lng nhau, nghia la mt thanh phn
cua kiu cu truc co th li la mt trong co kiu cu truc.
o Mt bin co kiu cu truc s doc cp phat b nho sao cho cac thuc hin
cua no doc sp lin tuc theo thu tu xut hin trong khai bao.
140
2. Khai bo bin cu trc
Vic khai bao bin cu truc cng tng tu nh khai bao bin thuc kiu du liu chun.
.0 AhA:
- i voi cu truc doc dinh nghia theo cach 1:
struct Tn cu truc Bin 1 |, Bin 2|;
- i voi cac cu truc doc dinh nghia theo cach 2:
Tn cu truc Bin 1 |, Bin 2|;
!: Khai bao bin NgaySinh co kiu cu truc KieuNgayThang; bin SV co kiu cu
truc KieuSinhVien.
'tr+*t Ki%+u!a:T8an! u!a:in8$
'tr+*t Ki%+in8i%n $
Ki%+u!a:T8an! u!a:in8$
Ki%+in8i%n $
3. Cc thao tc trn bin kiu cu trc
4ruy )u/t Gn tcn- tr:bn- c<+ biGn c/u tr0c
Cu phap:
Bin cu truc.Tn trong;
Khi su dung cach truy xut theo kiu nay, cac thao tac trn Bin cu truc.Tn
trong ging nh cac thao tac trn cac bin cua kiu du liu cua Tn trong.
!": Vit chng trinh cho phep doc du liu t ban phim cho bin mu tin SinhVien
va in bin mu tin do ln man hinh:
)in*&+,%<*"ni"(8.
)in*&+,%<'t,i"(8.
)in*&+,%<'trin!(8.
t:p%,%f 'tr+*t
?
+n'i!n%, *8ar u!a:$
+n'i!n%, *8ar T8an!$
+n'i!n%, int ua$
@ Ki%+u!a:T8an!$
t:p%,%f 'tr+*t
?
*8ar MX10Y$
*8ar ]"T%nX40Y$
Ki%+u!a:T8an! u!a:in8$
int w8ai$
*8ar DiaC8iX40Y$
@ Ki%+in8i%n$
9I ]P in &4n Pn 8_n8 1 G+ tin in8i%nI9
O"i, In(Ki%+in8i%n ')
?
printf(MH ]" Oa t%n u!a: in8 Dia *8i3n#)$
141
printf(F' F' F,gF,gF, F'3n#,'(M,'(]"T%n,
'(u!a:in8(u!a:,'(u!a:in8(T8an!,'(u!a:in8(ua,'(DiaC8i)$
@
int ain()
?
Ki%+in8i%n , '$
printf(u8ap MH )$!%t'((M)$
printf(u8ap ]" Oa t%nH )$!%t'((]"T%n)$
printf(in8 n!a:H )$'*anf(F,#,j(u!a:in8(u!a:)$
printf(T8an!H )$'*anf(F,#,j(u!a:in8(T8an!)$
printf(uaH )$'*anf(F,#,j(u!a:in8(ua)$
printf(}i"i tin8 (0H u+), (1H ua)H )$'*anf(F,#,j(w8ai)$
ff&+'8('t,in)$
printf(Dia *8iH )$!%t'((DiaC8i)$
In()$
'E$
In(')$
!%t*8()$
r%t+rn 0$
@
K:u [:
- Cac bin cu truc co th gan cho nhau. Thuc cht dy la thao tac trn toan b
cu truc khng phai trn mt trong ring r nao. Chng trinh trn dng
sSV la mt vi du;
- Voi cac bin kiu cu truc ta khng th thuc hin doc cac thao tac sau dy:
Su dung cac ham xut nhp trn bin cu truc;
Cac phep toan quan h, cac phep toan s hoc va logic.
! #: Nhp vao hai s phuc va tinh tng cua chung. Ta bit rng s phuc la mt cp
(a,b) trong do a, b la cac s thuc, a goi la phn thuc, b la phn ao. (i khi ngoi ta cng
vit s phuc doi dng a ib trong do i la mt dn vi ao co tinh cht i
2
-1). Goi s phuc
c1(a1, b1) va c2(a2,b2) khi do tng cua hai s phuc c1 va c2 la mt s phuc c3 ma
c3(a1a2, b1b2). Voi hiu bit nh vy ta co th xem mi s phuc la mt cu truc co
hai trong, mt trong biu din cho phn thuc, mt trong biu din cho phn ao. Vic
tinh tng cua hai s phuc doc tinh bng cach ly phn thuc cng voi phn thuc va phn
ao cng voi phn ao.
)in*&+,%<*"ni"(8.
)in*&+,%<'t,i"(8.
)in*&+,%<'trin!(8.
t:p%,%f 'tr+*t
?
f&"at T8+*$
f&"at A"$
@ "w8+*$
142
9I ]a in '" p8+* &%n an 8in8I9
O"i, In"w8+*("w8+* p)
?
printf(F(2f + iF(2f3n#,p(T8+*,p(A")$
@
int ain()
?
"w8+* p1,p2,p$
printf(u8ap '" p8+* t8+ n8atH3n#)$
printf(w8an t8+*H )$'*anf(Ff#,jp1(T8+*)$
printf(w8an a"H )$'*anf(Ff#,jp1(A")$
printf(u8ap '" p8+* t8+ 8aiH3n#)$
printf(w8an t8+*H )$'*anf(Ff#,jp2(T8+*)$
printf(w8an a"H )$'*anf(Ff#,jp2(A")$
printf(" p8+* t8+ n8atH )$
In"w8+*(p1)$
printf(" p8+* t8+ 8aiH )$
In"w8+*(p2)$
p(T8+* E p1(T8+*+p2(T8+*$
p(A" E p1(A" + p2(A"$
printf(T"n! 2 '" p8+*H )$
In"w8+*(p)$
!%t*8()$
r%t+rn 0$
@
Khji t^o c/u tr0c
Vic khoi to cu truc co th doc thuc hin trong luc khai bao bin cu truc. Cac trong
cua cu truc doc khoi to doc dt giua 2 du va }, chung doc phn cach nhau boi
du phy (,).
Vi du: Khoi to bin cu truc NgaySinh:
struct KieuNgayThang NgaySinh ={29, 8, 1986};
4. Con tr cu trc
Kh+i bo
Vic khai bao mt bin con tro kiu cu truc cng tng tu nh khi khai bao mt bin
con tro khac, nghia la dt thm du * vao phia troc tn bin.
Cu phap:
struct Tn cu truc * Tn bin con tro;
!: Ta co th khai bao mt con tro cu truc kiu NgayThang nh sau:
struct NgayThang *p;
/* NgayThang *p; // Nu c dinh ngha kiu */
]J !n- cc con trO ki=u c/u tr0c
Khi khai bao bin con tro cu truc, bin con tro cha co dia ch cu th. Luc nay no ch
moi doc cp phat 2 byte d lu giu dia ch va doc ghi nhn la con tro ch dn 1 cu
143
truc, nhng cha ch dn 1 di tong cu th. Mun thao tac trn con tro cu truc hop l,
cng tng tu nh cac con tro khac, ta phai:
- Cp phat mt vung nho cho no (su dung ham malloc() hay calloc);
- Hoc, cho no quan ly dia ch cua mt bin cu truc nao do.
!: Sau khi khoi to gia tri cua cu truc:
struct NgayThang Ngay = {29,8,1986};
p = &Ngay;
luc nay bin con tro p d chua dia ch cua Ngay.
4ruy c(A cc thnh Ahn c<+ c/u tr0c +n- :kc qu?n 2[ bji con trO
truy cp dn tng trong cua 1 cu truc thng qua con tro cua no, ta su dung toan tu
du mi tn (-: du - va du ). Ngoai ra, ta vn co th su dung dn phep toan * d truy
cp vung du liu dang doc quan ly boi con tro cu truc d ly thng tin cn thit.
!: Su dung con tro cu truc.
)in*&+,%<*"ni"(8.
)in*&+,%<'t,i"(8.
t:p%,%f 'tr+*t
?
+n'i!n%, *8ar u!a:$
+n'i!n%, *8ar T8an!$
+n'i!n%, int ua$
@ u!a:T8an!$
int ain()
?
u!a:T8an! u!E?29,8,1986@$
u!a:T8an! Ip$
pEju!$
printf(Tr+: *ap ;in8 t8+"n! F,gF,gF,3n#,
u!(u!a:,u!(T8an!,u!(ua)$
printf(Tr+: *ap L+a *"n tr" F,gF,gF,3n#,
pg.u!a:,pg.T8an!,pg.ua)$
printf(Tr+: *ap L+a O+n! n8" *"n tr" F,gF,gF,3n#,
(Ip)(u!a:,(Ip)(T8an!,(Ip)(ua)$
!%t*8()$
r%t+rn 0$
@
- Cho phep su dung cu truc, con tro cu truc la di s cua ham nh cac loi bin khac
- Cho phep ham xy dung tra v la kiu cu truc
Vi du : Xu ly danh sach sinh vin, su dung ham voi di s la cu truc
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
99u!a: t8an!
'tr+*t u!a:t8an! ?
int n! $
int t8 $
int na $
144
@$
99in8 Oi%n
'tr+*t in8Oi%n ?
*8ar 8"t%nX25Y $
u!a:t8an! n'$
int !t$
f&"at ,i% $
@ $
99*a* 8a 6+ &:
int '+a(in8Oi%n jr) $
int in(in8Oi%n 6) $
int n8ap(in8Oi%n Ip) $
int n8ap,'(in8Oi%n Ia, int n) $
int '+a,'(in8Oi%n Ia, int n) $
int in,'(*"n't in8Oi%n Ia, int n) $
99
'tr+*t in8Oi%n aX10Y$
int ain()
?
n8ap(a)$
99 in(aX1Y)$
99 '+a(aX1Y)$
n8ap,'(a,9)$
'+a,'(a,9)$
in,'(a,9)$
!%t*8()$
r%t+rn 0$
@
999tri%n 78ai *a* 8a
int '+a(in8Oi%n jr)
?
int *8"n$
," ?
printf(i1H +a 8" t%n3n2H +a n!a: 'in83n3H+a !i"i tin83n4H+a ,i%3n5HIn3n0H K%t t8+*3ni)$
'*anf(iF,i,j*8"n)$
'vit*8 (*8"n)
?
*a'% 1H
printf(iu8ap 8" t%nHi)$
'*anf(iF'i,r(8"t%n)$
;r%a7$
*a'% 2H
printf(iu8ap n!a: t8an! na 'in8Hi)$
'*anf(iF,F,F,i,jr(n'(n!,jr(n'(t8,jr(n'(na)$
;r%a7$
*a'% 3H
printf(iu8ap !i"i tin8 0Hu+ 1HuaHi)$
'*anf(iF,i,jr(!t) $
;r%a7$
*a'% 4H
printf(iu8ap ,i%Hi)$
145
'*anf(iFfi,jr(,i%)$
;r%a7$
*a'% 5H
printf(iin8 Oi%nHi)$
in(r)$
;r%a7$
*a'% 0H
;r%a7$
,%fa+&tH
printf(iu8ap !ia tri 78"n! ,+n!3ni)$
;r%a7$
@
@ v8i&% (*8"n) $
r%t+rn 0$
@
99999999
int in(in8Oi%n 6)
?
printf(i]" t%n HF'3nu!a: 'in8 F,9F,9F,3ni,6(8"t%n,6(n'(n!, 6(n'(t8, 6(n'(na) $
printf(i}i"i tin8 HF'3nDi% HFf3ni,(6(!tEE1) Giuai Hiu+i,6(,i%) $
r%t+rn 0$
@
9999999
int n8ap(in8Oi%n Ip)
?
printf(iu8ap 8" Oa t%nH i)$
'*anf(iF'i,pg.8"t%n)$
printf(iu8ap n!a: 'in8 (n!a: t8an! na)H i)$
'*anf(iF,F,F,i, jpg.n'(n! ,jpg.n'(t8,jpg.n'(na)$
printf(i}i"i tin8 0H n+, 1H naH i)$
'*anf(iF,i,j pg.!t)$
printf(iDi%H i)$
'*anf(iFfi,j pg.,i%)$
r%t+rn 0$
@
999999
int n8ap,'(in8Oi%n Ia, int n)
?

f"r (int iE1$ i<En$ i++) n8ap(jaXiY) $
r%t+rn 0$
@
99999
int '+a,'(in8Oi%n Ia, int n)
?
int *8"n$
,"
?
printf(i3nu8ap p8an t+ ,+"* '+ t+ 1 ,%n F,, !ia tri 78a* t8"atHi,n)$
'*anf(iF,i,j*8"n)$
if(*8"n.0 jj*8"n<En)
146
?
'+a(aX*8"nY) $
@
@v8i&%(*8"n.0 jj *8"n<En)$
r%t+rn 0$
@
9999999999
int in,'(*"n't in8Oi%n Ia, int n)
?
f"r (int iE1$ i<En$ i++)
in(aXiY) $
r%t+rn 0$
@
5. Cu trc vi thnh phn kiu bit
+e 4r:bn- bit
tit kim trong lu tru, trong ngn ngu lp trinh C cho phep khai bao cac trong
cua cu truc voi s long bit xac dinh khng phu thuc vao s long bit cac kiu du liu
chun.
Mt trong bit la mt khai bao trong int va thm du: cung s bit n theo sau, trong
do 0 _ n 15. Vi du do d lon cua ngay khng vot qua 31, thang khng vuot qua 12 nn
2 trong nay trong cu truc ngay thang co th khai bao tit kim hn bng 5 va 4 bit nh
sau:

'tr+*t Dat% ?
int n!H 5$
int t8H 4$
int naH14$
@ $
be DUc i=m
Cn chu y cac dc dim sau cua mt cu truc co chua trong bit:
Cac bit doc b tri lin tuc trn dy cac byte.
Kiu trong bit phai la int (signed hoc unsigned).
dai mi trong bit khng qua 16 bit.
Co th bo qua mt s bit nu bo trng tn trong, vi du:
struct tu
int: 8;
int x:8;
}
mi mt bin cu truc theo khai bao trn gm 2 byte, bo qua khng su dung byte thp
va trong x chim byte (8 bit) cao.
Khng cho phep ly dia ch cua thanh phn kiu bit.
Khng th xy dung doc mang kiu bit.
Khng doc tra v t ham mt thanh phn kiu bit. Vi du nu b la mt thanh phn
147
cua bin cu truc x co kiu bit thi cu lnh sau la sai:
return x.b ; // sai
tuy nhin co th thng qua bin phu nh sau:
int tam x.b ; return tam ;
Tit kim b nho
Dung trong kiu union d ly cac bit cua mt t (xem vi du trong phn kiu hop).
6. Cu Inh typedef
thun tin trong su dung, thng thong cac kiu doc NSD to moi s doc gan
cho mt tn kiu bng cu lnh typede nh sau:
,]tRt figSw ,nfigSw
Vi du: to kiu moi co tn Bool va ch chua gia tri nguyn (thuc cht ch cn 2
gia tri 0, 1), ta co th khai bao:
typede int Bool;
khai bao nay cho phep xem Bool nh kiu s nguyn.
hoc co th dt tn cho kiu ngay thang la Date voi khai bao sau:
t:p%,%f 'tr+*t Dat% ?
int n!$
int t8$
int na$
@$
khi do ta co th su dung cac tn kiu nay trong cac khai bao (vi du tn kiu cua di,
cua gia tri ham tra li ).
7. Hm sieof()
Ham tra li kich thoc cua mt bin hoc kiu. Vi du:
B""& a, ;$
Dat% 6, :, lX50Y$
printf(iF,,F,,F,i,'il%"f(a),'il%"f(;),'il%"f(B""&)) $ 99 in 2,2,2
printf(iU p8^n tz *ba l EF, i,'il%"f(l) 9 'il%"f(Dat%))$ 99 in 50
II. 1gKn LMp
- Khai bao bin c dinh lam lng phi b nho do khai bao s long phn tu lon nht
d lu tru du liu
- Khi thay di v s long phn tu cn phai lu tru thi mang cp phat dng khng
th giai quyt doc tit kim b nho va hn ch cac thao tac chuyn b nho.
- Giai quyt vn d cp phat b nho cua khi du liu lin tuc s vot qua gioi hn
quan ly b nho cua mt s h diu hanh, kho trong tim doc vung nho lon phu hop d
cp phat.
- Giai phap da ra kiu cu truc, ban thn cac di tong tro (lin kt) dn di tong
tip theo trong danh sach.
148
- Cac vung nho cp phat khng lin tuc nn cac lnh lam vic voi nhom cac di
tong s khng thuc hin doc.
Kiu cu truc lin kt doc su dung xy dung nhiu dng cu truc khac nhau, nhng dc
trng la cu truc ngn xp va hang doi.
1. Khi nim
Ngn xp la kiu dc bit cua danh sach vic loi bo va b sung du doc thuc hin trn mt du
cua danh sach. Vi th cac phn tu khi b sung vao ngn xp sau s doc ly ra troc nn goi la
LIF (Last In First ut). Thao tac c ban cua ngn xp la b sung (push), loi bo (pop), ngoai ra
co thao tac khoi to, kim tra trng thai.
Vi du truc quan cua ngn xp la chng bat, bat moi vao lun doc dt ln trn, thu tu ly
bat t trn xung doi.
- Cac thao tac c ban voi ngn xp
Khoi to
Kim tra ngn xp rng
B sung mt phn tu vao ngn xp
Ly mt phn tu khoi ngn xp
2. Ci t ngn p s dng mng
Su dung mang mt chiu d th hin ngn xp, dung mt bin ch s m ta phn tu o dnh cua
ngn xp. Bin ch s s ch ra vi tri tip theo doc thm vao, va vi tri tr di 1 la vi tri phn tu
dang co o ngn xp.
Kh+i bo
t:p%,%f 'tr+*t 'ta*7
?
int t"p$
int 't"ra!%XMAAY$
@$
Khji t^o n-n )GA
O"i, init('ta*7 I')
?
'g.t"pE0$
A CB
A
BA A
Push(s,A) Push(s,B)
Push(s,C)
Pop(s)
Push(s,D)
Push(s,)
D
BA
Pop(s)
Pop(s)
Pop(s)
nkD
1B0A
Ch s
Phn tu trn cung
Phn tu du tin
149
@
Ki=m tr+ n-n )GA rdn-
9990H %pt:
int %pt:('ta*7 I')
?
r%t+rn 'g.t"p$
@
Ki=m tr+ n-n )GA y
9990Hf+&&
int f+&&('ta*7 I')
?
if('g.t"p.EMAA)
?
r%t+rn 0$
@
%&'%
?
r%t+rn 'g.t"p+1$
@
}
BX 6un- m5t Ahn tJ vo n-n )GA
99g1 f+&& "f 'ta*7
int p+'8('ta*7 I', int Oa&+%)
?
if('g.t"pEEMAA)
?
r%t+rn g1$
@
%&'%
?
'g.'t"ra!%X'g.t"pYEOa&+%$
'g.t"p++$
@
r%t+rn 'g.t"p$
@
K/y m5t Ahn tJ khOi n-n )GA
99g1H tr: t" p"p t8% %pt: 'ta*7
int p"p('ta*7 I', int I"+t)
?
if('g.t"p<E0)
?
"+tE0$
r%t+rn g1$
@
%&'%
?
'g.t"pgg$
I"+tE'g.'t"ra!%X'g.t"pY$
r%t+rn 'g.t"p$
@
@
150
Do ngn xp doc trin khai dng mang nn gp phai vn d phai khai bao khi du liu
ti da d su dung, trong trong hop phat trin nu s long vot qua s long MAX (vn
trong gioi hn cho phep cua b nho) thi chng trinh s khng thuc hin doc.
3. Ci t ngn p s dng con tr Iin kt
Cp phat dung s long phn tu ma ngn xp dang cn. Thao tac phuc tp.
Kh+i bo
t:p%,%f 'tr+*t 'ta*7u",%
?
int it%$
'ta*7u",% In%6t$
@$
t:p%,%f 'tr+*t 'ta*7?
'ta*7u",%I t"p$
@$
Khji t^o n-n )GA
O"i, init('ta*7 I')
?
'g.t"pEuC$
@
Ki=m tr+ n-n )GA rdn-
9990H %pt:
int %pt:('ta*7 I')
?
if('g.t"pEEuC)
?
r%t+rn 0$
@
%&'%
?
r%t+rn 1$
@
@
BX 6un- Ahn tJ vo n-n )GA
999g1H *ant p+'8 t" 'ta*7
int p+'8('ta*7 I',int Oa&+%)
?
'ta*7u",% Ia$
aE('ta*7u",%I)a&&"*('il%"f('ta*7u",%))$
3 2 1
NULL top
4
151
if(aEEuC)
?
r%t+rn g1$
@
ag.it%EOa&+%$
ag.n%6tE'g.t"p$
'g.t"pEa$
r%t+rn 0$
@

K/y m5t Ahn tJ r+ khOi n-n )GA
int p"p('ta*7 I',int I"+t)
?
'ta*7u",% I*+r$
if('g.t"pEEuC)
?
r%t+rn g1$
@
I"+tE'g.t"pg.it%$
*+rE'g.t"p$
'g.t"pE'g.t"pg.n%6t$
fr%%(*+r)$
@
4. Mt s ng dng ca ngn p
Ngn xp doc su dung trong nhiu ung dung khac nhau
- ao ngoc xy ky tu
- Tinh gia tri biu thuc dng hu t
- Chuyn biu thuc dng trung t sang hu t
- Su dung d khu d qui, chuyn bai toan d qui (su dung ngn xp cua h thng) sang su dung
ngn xp ngoai.
D?o n-:kc )iu k[ t9
Vi du v dao ngoc xu su dung ngn xp. Do ngn xp co qui lut vao troc ra sau nn
ln lot da cac ky tu vao ngn xp, sau do tin hanh ly ra cac ky tu s doc dao ngoc
thu tu.
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <'t,&i;(8.
)in*&+,% <'trin!(8.
t:p%,%f 'tr+*t 'ta*7u",%
?
*8ar it%$
'ta*7u",% In%6t$
@$
t:p%,%f 'tr+*t 'ta*7?
2 1
NULL top
152
'ta*7u",%I t"p$
@$
999
O"i, init('ta*7 I')$
9990H %pt:
int %pt:('ta*7 I')$$
999g1H *ant p+'8 t" 'ta*7
int p+'8('ta*7 I',*8ar Oa&+%)$
999g1H p"p %pt: 'ta*7
int p"p('ta*7 I',*8ar I"+t)$
'ta*7 '$
int ain()
?
int i$
*8ar O$
*8ar I*Ei6a+ ,a" n!+"*i$
init(j')$
f"r(iE0$i<'tr&%n(*)$i++)
?
p+'8(j',*XiY)$
@
v8i&%(%pt:(j')~E0)
?
p"p(j',jO)$
printf(i3nF*i,O)$
@
!%t*8()$
r%t+rn 0$
@
999ip&%%nti"n
O"i, init('ta*7 I')
?
'g.t"pEuC$
@
999ggggggggg
9990H %pt:
int %pt:('ta*7 I')
?
if('g.t"pEEuC)
?
r%t+rn 0$
@
%&'%
?
r%t+rn 1$
@
@
999ggggggggggg
999g1H *ant p+'8 t" 'ta*7
int p+'8('ta*7 I',*8ar Oa&+%)
153
?
'ta*7u",% Ia$
aE('ta*7u",%I)a&&"*('il%"f('ta*7u",%))$
if(aEEuC)
?
r%t+rn g1$
@
ag.it%EOa&+%$
ag.n%6tE'g.t"p$
'g.t"pEa$
r%t+rn 0$
@
999ggggggggggggg
999g1H p"p %pt: 'ta*7
int p"p('ta*7 I',*8ar I"+t)
?
'ta*7u",% I*+r$
if('g.t"pEEuC)
?
r%t+rn g1$
@
I"+tE'g.t"pg.it%$
*+rE'g.t"p$
'g.t"pE'g.t"pg.n%6t$
fr%%(*+r)$
@
III. Gng 0Ni
1. Khi nim
Hang doi la cu truc du liu tng tu ngn xp nhng nguyn tc da vao va ly ra cac phn tu
theo thu tu phn tu da vao troc s ly ra troc FIF (First In First ut). Qui lut nay th hin
cac m hinh trong thuc t nh hang doi mua ve, hang hoa trong kho,
Do cac phn tu vao troc doc ly ra troc nn cn phai xy dung danh sach co hai du, du vao
va du ra.
- Cac thao tac c ban voi hang doi
Khoi to hang doi
Kim tra hang doi rng
B sung mt phn tu vao hang doi
nkD
1B0A
u vao
Phn tu trn cung
Phn tu ly ra
nk1FkD
1B0
154
Put(s,`F`)
Get(s)
Ly mt phn tu khoi hang doi
2. Ci t hng i s dng mng
Co th su dung mang d lu tru du liu, vi th co th su dung d m ta hang doi. Do hang doi co
hai du nn cn phai co hai ch s d danh du. Do vic ly du liu va da du liu vao trong danh
sach du tng ch s nn cn phai kim tra trong trong hop ch s vot qua gioi hn cua mang
cn phai chuyn ch s v 0.
Kh+i bo
t:p%,%f 'tr+*t L+%+%
?
int 8%a,, tai&$
int 't"ra!%XMAAY$
@$
Khji t^o hn- ki
O"i, init(L+%+% I')
?
'g.tai&E0$
'g.8%a,E0$
@
Ki=m tr+ hn- ki rdn-
9990H %pt:
int %pt:(L+%+% I')
?
int ,E'g.8%a,g'g.tai&$
if(,<0)
,+EMAA$
r%t+rn ,$
@
Ki=m tr+ hn- ki y
9990Hf+&&
int f+&&(L+%+% I')
?
int n8E'g.8%a,+1$
if(n8EE'g.tai& (n8 + MAA)FMAAEE'g.tai&)
?
r%t+rn 0$
@
r%t+rn 1$
@
4hm m5t Ahn tJ vo hn- ki
99g1 f+&& "f L+%+%
int p+t(L+%+% I', int Oa&+%)
?
if(f+&&(')EE0)
155
r%t+rn g1$
'g.'t"ra!%X'g.8%a,YEOa&+%$
'g.8%a,++$
'g.8%a,E'g.8%a,FMAA$
r%t+rn 'g.8%a,$
@
K/y m5t Ahn tJ khOi hn- ki
99g1H tr: t" p"p t8% %pt: L+%+%
int !%t(L+%+% I', int I"+t)
?
if(%pt:(')EE0)
r%t+rn g1$
I"+tE'g.'t"ra!%X'g.tai&Y$
'g.tai&++$
'g.tai&E'g.tai&FMAA$
r%t+rn 'g.tai&$
@
3. Ci hng i s dng con tr
Su dung hai con tro la du va dui. Khi thm ni vao sau con tro dui, va khi ly ra s t
con tro du.
Kh+i bo
t:p%,%f 'tr+*t L+%+%u",%
?
int it%$
L+%+%u",% In%6t$
@$
t:p%,%f 'tr+*t L+%+%?
L+%+%u",%I 8%a,, Itai&$
@$
Khji t^o hn- ki
O"i, init(L+%+% I')
?
'g.8%a,EuC$
'g.tai&EuC$
@
Ki=m tr+ hn- ki rdn-
9990H %pt:
int %pt:(L+%+% I')
?
if('g.8%a,EEuC)
?
r%t+rn 0$
156
@
%&'%
?
r%t+rn 1$
@
@
4hm m5t Ahn tJ vo hn- ki
999g1H *ant p+'8 t" L+%+%
int p+t(L+%+% I',int Oa&+%)
?
L+%+%u",% Ia$
aE(L+%+%u",%I)a&&"*('il%"f(L+%+%u",%))$
if(aEEuC)
?
r%t+rn g1$
@
ag.it%EOa&+%$
ag.n%6tEuC$
if('g.tai&EEuC)
?
'g.tai&Ea$
'g.8%a,Ea$
@
'g.tai&g.n%6tEa$
'g.tai&Ea$
r%t+rn 0$
@
K/y m5t Ahn tJ khOi hn- ki
999g1H p"p %pt: L+%+%
int !%t(L+%+% I',int I"+t)
?
L+%+%u",% Ia$
if('g.8%a,EEuC)
?
r%t+rn g1$
@
I"+tE'g.8%a,g.it%$
aE'g.8%a,$
'g.8%a,E'g.8%a,g.n%6t$
if('g.8%a,EEuC)
?
'g.tai&EuC$
@
fr%%(a)$
@
4. Mt s ng dng ca hng i
- Hang doi doc su dung trong m phong cac m hinh hang doi thuc t trong cac bai toan
- Su dung trong bai toan duyt theo chiu rng
157
I!. Oi@u hNp
1. Khai bo
Kiu hop cng co nhiu thanh phn nhng cac thanh phn su dung chung nhau mt
vung nho. Do vy kich thoc cua mt kiu hop la d dai cua trong lon nht va vic thay
di mt thanh phn s anh hong dn tt ca cac thanh phn cn li.
Snion ,n figSw
T+nh 6ch cc thnh Ahnl

2. Truy cp
Cu phap truy cp dn cac thanh phn cua hop cng tng tu nh kiu cu truc, tuc
cng su dung toan tu ly thanh phn (du chm . hoc cho bin con tro kiu hop).
Doi dy la mt vi du minh ho vic su dung khai bao kiu hop d tach byte thp,
byte cao cua mt s nguyn.

T d 1 :
O"i, ain()
?
+ni"n '"n!+:%n ?
int n$
+n'i!n%, *8ar *X2Y$
@ 6$
printf(iu8ap '" n!+:%nHi)$
'*anf(F,#,j6(n)$
printf(iB:t% t8apHF,, ;:t% *a"HF,i,6(*X0Y,6(*XaY)$
@

T d 2 : Kt hop cung kiu nhom bit trong cu truc, chung ta co th tim doc cac bit cua
mt s nh chng trinh sau. Trong chng trinh ta su dung mt bin u co kiu hop.
Trong kiu hop nay co 2 thanh phn la 2 cu truc ln lot co tn s va .

union
struct unsigned a, b ; } s;
struct
unsigned n1: 1;
unsigned: 15;
unsigned n2: 1;
unsigned: 7;
unsigned n3: 8;
} t ;
} u;

voi khai bao trn dy khi nhp u.s thi no cng anh hong dn u.t, cu th
158
u.t.n1 la bit du tin (0) cua thanh phn u.s.a
u.t.n2 la bit 0 cua thanh phn u.s.b
u.t.n3 la byte cao cua u.s.b
!. Oi@u lit +
Co th gan cac gia tri nguyn lin tip (tinh t 0) cho cac tn goi cu th bng kiu
lit k theo khai bao sau dy:
tnSr ,nfigS R/s ,n /c/ gic ,^p
Vi du:
enum Bool alse, true};
khai bao kiu moi dt tn Bool ch nhn 1 trong 2 gia tri dt tn alse va true, trong
do alse ung voi gia tri 0 va true ung voi gia tri 1. Cach khai bao kiu enum trn cng
tng dng voi dy cac macro sau:
deine alse 0
deine true 1
Voi kiu Bool ta co th khai bao mt s bin nh sau:
Bool k, ound;
hai bin k va ound s ch nhn 1 trong 2 gia tri alse (thay cho 0) hoc true (thay
cho 1). Co nghia co th gan:
k true;
hoc: ound alse;
Tuy nhin khng th gan cac gia tri nguyn truc tip cho cac bin enum ma phai
thng qua ep kiu. Vi du:
k 0; // sai
k Bool(0) ; // dung
hoc k alse ; // dung
!I. "#m t$t n%i &ung bi h'c
I. Cu truc tu dinh nghia
1 Khai nim
2. Khai bao bin cu truc
3. Cac thao tac trn bin kiu cu truc
4. Con tro cu truc
II. Kiu ngn xp
1. Khai nim
2. Cac thao tac c ban
3. Cai dt
4. Ung dung
III. Kiu hang doi
1. Khai nim
2. Cac thao tac c ban
3. Cai dt
159
4. Ung dung
!II. Bi tp
Xem Bai 11 - Bai tp thuc hanh Cu truc du liu tu dinh nghia.
160
Bi 11 - Bi thc hnh: CU TRC D LIEU DO NGUI
DNG TU NH NGHA
I. "h<c hin cc v & )=u
1. Biu din v thc hin cc php ton phn s
Yu cu7 Xy dung cu truc biu din phn s; cho phep nhp vao 2 phn s, thuc hin
cac phep cng, tr, nhn, chia 2 phn s do.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
t:p%,%f 'tr+*t fra*ti"n
?
int n+%rat"r$
int ,%n"inat"r$
@$
999gg 78ai ;a" *a* 8a
fra*ti"n a,,(fra*ti"n 6, fra*ti"n :) $
fra*ti"n '+;(fra*ti"n 6, fra*ti"n :) $
fra*ti"n +&tip&:(fra*ti"n 6, fra*ti"n :) $
fra*ti"n ,iOi,%(fra*ti"n 6, fra*ti"n :) $
O"i, printra*ti"n(fra*ti"n 6)$
int ain()
?
fra*ti"n a,;$

printf(iu8ap p8an '", t+ '" tr+"*, a+ '" 'a+Hi)$
'*anf(iF,F,i,ja(n+%rat"r, ja(,%n"inat"r)$
printf(iu8ap p8an '", t+ '" tr+"*, a+ '" 'a+Hi)$
'*anf(iF,F,i,j;(n+%rat"r, j;(,%n"inat"r)$
printf(i]i%+H3ni)$
printra*ti"n('+;(a,;))$
printf(i3nT"n!H3ni)$
printra*ti"n(a,,(a,;))$
printf(i3nTi*8H3ni)$
printra*ti"n(+&tip&:(a,;))$
printf(i3nT8+"n!H3ni)$
printra*ti"n(,iOi,%(a,;))$
!%t*8()$
r%t+rn 0$
@
999ggggggggggggggg tri%n 78ai *a* 8a
fra*ti"n a,,(fra*ti"n 6, fra*ti"n :)
?
fra*ti"n t$
t(n+%rat"rE6(n+%rat"r I :(,%n"inat"r + 6(,%n"inat"r I :(n+%rat"r$
161
t(,%n"inat"r E 6(,%n"inat"r I :(,%n"inat"r$
r%t+rn t$
@
999gggggggggggggggggg
fra*ti"n '+;(fra*ti"n 6, fra*ti"n :)
?
fra*ti"n t$
t(n+%rat"rE6(n+%rat"r I :(,%n"inat"r g :(n+%rat"r I 6(,%n"inat"r$
t(,%n"inat"r E 6(,%n"inat"r I :(,%n"inat"r$
r%t+rn t$
@
fra*ti"n +&tip&:(fra*ti"n 6, fra*ti"n :)
?
fra*ti"n t$
t(n+%rat"rE6(n+%rat"r I :(n+%rat"r$
t(,%n"inat"r E 6(,%n"inat"r I :(,%n"inat"r$
r%t+rn t$
@
fra*ti"n ,iOi,%(fra*ti"n 6, fra*ti"n :)
?
fra*ti"n t$
t(n+%rat"rE6(n+%rat"r I :(,%n"inat"r$
t(,%n"inat"r E 6(,%n"inat"r I :(n+%rat"r$
r%t+rn t$
@
O"i, printra*ti"n(fra*ti"n 6)
?
printf(iF,9F,i,6(n+%rat"r,6(,%n"inat"r)$
@
4hJ n-hi3m "7
4hJ n-hi3m #7
Thu nghim voi hai gia tri la 3/4, va 1/2 da ra nhn xet, cn cai tin nh th nao
4hJ n-hi3m $7
Thu nghim voi hai gia tri la 3/4, va 0/2 da ra nhn xet, cn cai tin nh th nao
162
2. Chuyn biu thc trung t v dng hu t
Yu cu7 Vit chng trinh cho phep chuyn mt chui biu din biu thuc dng trung t
thanh chui biu din biu thuc dng hu t.
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
)in*&+,% <'t,i"(8.
)in*&+,% <*"ni"(8.
)in*&+,% <'t,&i;(8.
)in*&+,% <'trin!(8.
t:p%,%f 'tr+*t 'ta*7u",%
?
*8ar it%$
'ta*7u",% In%6t$
@$
t:p%,%f 'tr+*t 'ta*7?
'ta*7u",%I t"p$
@$
999
O"i, init('ta*7 I')$
9990H %pt:
int %pt:('ta*7 I')$$
999g1H *ant p+'8 t" 'ta*7
int p+'8('ta*7 I',*8ar Oa&+%)$
999g1H p"p %pt: 'ta*7
int p"p('ta*7 I',*8ar I"+t)$
*8ar !%tT"p('ta*7 I')$
int i'n+;%r(*8ar *8)$
int i'"p%rat"r(*8ar *8)$
int pri"rit:(*8ar *8)$
int *"nO%rt(*8ar '"+r*%XY, *8ar *8+"i8a+t"XY)$
'ta*7 '$
int ain()
?
int i$
*8ar O$
*8ar *X100Y$
*8ar "X100Y$
!%t'(*)$
*"nO%rt(*,")$
p+t'(")$
!%t*8()$
r%t+rn 0$
@
999ip&%%nti"n
O"i, init('ta*7 I')
?
'g.t"pEuC$
@
163
999ggggggggg
9990H %pt:
int %pt:('ta*7 I')
?
if('g.t"pEEuC)
?
r%t+rn 0$
@
%&'%
?
r%t+rn 1$
@
@
999ggggggggggg
999g1H *ant p+'8 t" 'ta*7
int p+'8('ta*7 I',*8ar Oa&+%)
?
'ta*7u",% Ia$
aE('ta*7u",%I)a&&"*('il%"f('ta*7u",%))$
if(aEEuC)
?
r%t+rn g1$
@
ag.it%EOa&+%$
ag.n%6tE'g.t"p$
'g.t"pEa$
r%t+rn 0$
@
999ggggggggggggg
999g1H p"p %pt: 'ta*7
int p"p('ta*7 I',*8ar I"+t)
?
'ta*7u",% I*+r$
if('g.t"pEEuC)
?
r%t+rn g1$
@
*+rE'g.t"p$
I"+tE'g.t"pg.it%$
'g.t"pE*+rg.n%6t$
fr%%(*+r)$
@
999ggggggggggggggg
*8ar !%tT"p('ta*7 I')
?
r%t+rn 'g.t"pg.it%$
@
999gggggggggggggggg
int i'n+;%r(*8ar *8)
?
r%t+rn ((int(*8).E48jjint(*8)<E57))$
@
164
999ggggggggg
int i'"p%rat"r(*8ar *8)
?
r%t+rn (*8EE+*8EEg*8EEI*8EE9)$
@
999ggggggggg
int pri"rit:(*8ar *8)
?
if(*8EE+*8EEg)
r%t+rn 0$
if(*8EEI*8EE9)
r%t+rn 1$
@
999gggggggggggggggggg
int *"nO%rt(*8ar '"+r*%XY, *8ar '+ffi6D6pXY)
?
'ta*7 $
init(j)$
int *"+ntE0$
*8ar t%p$
f"r(int iE0$i<'tr&%n('"+r*%)$i++)
?
if(i'"p%rat"r('"+r*%XiY)jji'"p%rat"r('"+r*%Xi+1Y))
r%t+rn i$
if(('"+r*%XiY.E65jj'"+r*%XiY<E90)('"+r*%XiY.E97jj'"+r*%XiY<E121))
r%t+rn i$
@
f"r(int iE0$i<'tr&%n('"+r*%)$i++)
?
*8ar *8E'"+r*%XiY$
if(i'n+;%r(*8))
?
'+ffi6D6pX*"+ntYE*8$
*"+nt++$
@
%&'%99"p%rat"r
?
if(%pt:(j)~E0)99n"t %pt:
?
if(i'"p%rat"r(!%tT"p(j))jj(pri"rit:(!%tT"p(j)).Epri"rit:(*8)))
?
p"p(j,jt%p)$
'+ffi6D6pX*"+nt++YEt%p$
p+'8(j,*8)$
@
%&'%
p+'8(j,*8)$
@
%&'%
p+'8(j,*8)$
@
165
@99DuD B
v8i&%(%pt:(j)~E0)99a: 8%t n8+n! !i *"n &ai tr"n! 'ta*7
?
p"p(j,jt%p)$
'+ffi6D6pX*"+nt++YEt%p$
@
'+ffi6D6pX*"+nt++YE30$99C]Du KI TC uC A CCI AAC$
@
4hJ n-hi3m "7
Nhp chui la: 1-3*4/567-8
4hJ n-hi3m #7
Nhp chui la: 13-2*3
Nhn xet va phat trin cho trong hop co du ngoc (, ), phep toan `
II. Bi tp t< lm
1. Hy dinh nghia kiu:
'tr+*t ]"'"?
*8ar ]"T%nX40Y$
f&"at Di%$
*8ar "aiX10Y$
@$
Vit chng trinh nhp vao ho tn, dim cua n hoc sinh. Xp loi vn hoa theo cach sau:
im Xp loi
9, 10 Gioi
7, 8 Kha
5, 6 Trung binh
doi 5 Khng dt
In danh sach ln man hinh theo dng sau:
XP LAI VAN HA
H VA TN DIM XPLAI
Nguyen Van A 7 Kha
Ho Thi B 5 Trung binh
Dang Kim C 4 Khong dat
.........................................................................................................................
166
2. Xem mt phn s la mt cu truc co hai trong la tu s va mu s. Hy vit chng
trinh thuc hin cac phep toan cng, tr, nhn, chia hai phn s. (Cac kt qua phai ti
gian).
3. To mt danh sach can b cng nhn vin, mi ngoi ngoi xem nh mt cu truc
bao gm cac trong Ho, Ten, Luong, Tuoi, Dchi. Nhp mt s ngoi vao danh sach,
sp xp tn theo thu tu t din, in danh sach d sp xp theo mu sau:
DANH SACH CAN B CNG NHAN VIN
STT HO VA TEN LUONG TUOI DIACHI
1 Nguyen Van 333.00 26 Can Tho
2 Dang Kim B 290.00 23 Vinh Long
4. Hoan thin m ngun cua chng trinh tinh biu thuc dng hu t.
5. Hoan thin m ngun chng trinh chuyn di biu thuc dng trung t sang hu t
6. Vit chng trinh doi s nguyn dng thp phn sang dng nhi phn su dung ngn
xp
7. Cho mt ma trn min MxN, cac dim nhn gia tri 0 va 1, 1 la co min. Nu n o
(i,) s kich n bn xung quanh nu do co min. Cho n o (i,) hy ch ra cac bi
kich n khac. Su dung ngn xp d xet cac bi kich n tip theo, in ra thu tu cac .
Su dung hang doi d xet cac bi kich n tip theo, in ra thu tu cac .
167
Bi 12 - LM VIEC VI FILE
Ni RSng Ti -U/
W. M MO %h-i nim
WW. :-c h$' -c 6n !" in
1. Ih$i 5-' 5i.n !" in
2. MU !" in
3. rHng !" in
). Ii4m 6$ .n cuOi !" in h$7 ch1$s
J @i chu74n c'n 6a !" in #` u !" in B *m 6AtindRS
WWW. T6u7 c!" !" in #nn 5&n
1. >hi d= liu ln !" in #nn 5&n
2. rc d= liu G !" in #nn 5&n
WT. T6u7 c!" !" in nh9 "hen
1. >hi d= liu ln !" in nh9 "hen B *m Qt6iARS
2 rc d= liu G !" in nh9 "hen B *m Q6A$dRS
3. @i chu74n c'n 6a !" in B *m QMAA%RS
). T d
T. THm ni dung 5i hc
I. (%t )* +hi nim
Du liu trong chng trinh doc lu tru o RAM may tinh, vi th khi kt thuc chng
trinh, tt may du liu s bi giai phong. xu ly du liu cn phai lu tru trn b nho ngoai (dia
cung, USB, ) doi dng ile. File la tp hop cac byte lin tuc doc lu tru va doc gan tn goi.
Khi xu ly ile chng trinh co th xem xet chui byte voi cach nhin khac nhau, co nhung ung xu
khac nhau voi du liu. Trong C h tro vic thao tac voi ile voi quan dim: ile vn ban, ile nhi
phn.
o File vn ban (Text File): la loi tp tin dung d ghi cac ky tu ln dia. im dc bit la
du liu cua tp tin doc lu tru thanh cac dng, mi dng doc kt thuc bng ky tu xung dng
(new line), ky hiu \n`; ky tu nay la su kt hop cua 2 ky tu CR (Carriage Return - V du dng,
m Ascii la 13) va LF (Line Feed - Xung dng, m Ascii la 10). Mi tp tin doc kt thuc boi
ky tu F (nd File) co m Ascii la 26 (xac dinh boi t hop phim Ctrl ).
Truy xut tp tin theo kiu vn ban ch co th truy xut theo kiu tun tu.
o Tp tin nhi phn: Quan dim tp tin la dy byte lin tuc, vic xu ly voi tp tin dua trn
vic doc ghi dy byte.
Bin ,\] ,in0 la mt bin thuc kiu du liu tp tin dung d di din cho mt tp tin. Du
liu chua trong mt tp tin doc truy xut qua cac thao tac voi thng s la bin tp tin di din
cho tp tin do.
168
Con ,^l ,\] ,in0 Khi mt tp tin doc mo ra d lam vic, ti mi thoi dim, s co mt vi
tri cua tp tin ma ti do vic doc/ghi thng tin s xay ra. Ngoi ta hinh dung co mt con tro dang
ch dn vi tri do va dt tn no la con tro tp tin.
Sau khi doc/ghi xong du liu, con tro s chuyn dich thm mt phn tu v phia cui tp
tin. Sau phn tu du liu cui cung cua tp tin la du kt thuc tp tin F (nd File).
II. Cc th=o tc trn tp tin
Cac thao tac voi tp tin:
1 o Khai bao bin tp tin.
2 o Mo tp tin bng ham open().
3 o Thuc hin cac thao tac xu ly du liu cua tp tin bng cac ham doc/ghi du liu.
4 o ong tp tin bng ham close().
O dy, ta thao tac voi tp tin nho cac ham doc dinh nghia trong th vin stdio.h.
1. Khai bo bin tp tin
Cj ]-c]
FIL Danh sach cac bin con tro, di din cho tp tin
Cac bin trong danh sach phai la cac con tro va doc phn cach boi du phy(,).
Vi du: FIL *1@2;
2. M tp tin
Cj ]-c]
mnKo Q\oACnYch+r QB+thS con6t ch+r QMo!CZ
Trong do:
- Path: chui ch dong dn dn tp tin trn dia.
- Mode: chui xac dinh cach thuc ma tp tin s mo. Cac gia tri co th cua Mode:
C- k D ng-qX
r Mo tp tin vn ban d doc
w To ra tp tin vn ban moi d ghi
a Ni vao tp tin vn ban
rb Mo tp tin nhi phn d doc
wb To ra tp tin nhi phn d ghi
ab Ni vao tp tin nhi phn
r Mo mt tp tin vn ban d doc/ghi
w To ra tp tin vn ban d doc ghi
a Ni vao hay to moi tp tin vn ban d doc/ghi
rb Mo ra tp tin nhi phn d doc/ghi
wb To ra tp tin nhi phn d doc/ghi
169
ab Ni vao hay to moi tp tin nhi phn
Mc dinh la mo dng text nu khng co xac dinh la b, nu r rang hn thi thm ch dinh t d xac
dinh la kiu text.
- Ham open tra v mt con tro tp tin. Chng trinh cua ta khng th thay di gia tri cua con
tro nay. Nu co mt li xut hin trong khi mo tp tin thi ham nay tra v con tro NULL.
Vi du: Mo mt tp tin tn TST.txt d ghi.
ID If$
f E f"p%n(iTDT(t6ti, ivi)$
if (f~EuC)
?
9I C>* *Z+ &-n8 /Q t8a" t>* Ohi tkp tinI9
9I Vn! tkp tinI9
@
Kim tra con tro voi gia tri NULL cho phep xac dinh doc lnh thuc hin thanh cng hay
khng
Nu mo tp tin d ghi, trong hop tp tin d tn ti ri thi tp tin s bi xoa va mt tp tin moi
doc to ra. Nu ta mun ghi ni du liu, ta phai su dung ch d a. Khi mo voi ch d doc, tp
tin phai tn ti ri, nu khng mt li s xut hin.
3. ng tp tin
Ham close() doc dung d dong tp tin doc mo boi ham open(). Ham nay s ghi du liu
cn li trong vung dm vao tp tin va dong li tp tin.
Cj ]-c]: int \c2o6CYmnKo Q\Z
Trong do la con tro tp tin doc mo boi ham open(). Gia tri tra v cua ham la 0 bao rng
vic dong tp tin thanh cng. Ham tra v F nu co xut hin li.
Ngoai ra, ta cn co th su dung ham closeall() d dong tt ca cac tp tin li.
Cj ]-c]: int \c2o6C+22YZ
Kt qua tra v cua ham la tng s cac tp tin doc dong li. Nu khng thanh cng, kt qua
tra v la F.
4. Kim tra n cui tp tin hay chua
Cj ]-c]: int \Co\YmnKo Q\Z
nghia: Kim tra xem d chm toi cui tp tin hay cha va tra v F nu cui tp tin doc
chm toi, ngoc li tra v 0.
5. Di chuyn con tr tp tin v u tp tin - Hm reind()
- Chuyn v du tp tin, su dung ham rewind().
Cj ]-c]0 voi! rCLin!YmnKo Q\Zl
: con tro tp tin dang thao tac.
170
- Chuyn dn vi tri bt ky su dung ham seek().
Cj ]-c]0 int \6CCkYmnKo Q6trC+mS 2on- o\\6CtS int LhCncCZl
stream: con tro tp tin dang thao tac.
oset: s byte cn dich chuyn con tro tp tin.
whence: vi tri bt du d tinh khoang cach dich chuyn cho oset:
0

zPPKzPT Vi tri du tp tin
1

zPPKC"( Vi tri hin ti cua con tro tp tin
2

zPPKPNJ Vi tri cui tp tin
Kt qua tra v cua ham la 0 nu vic di chuyn thanh cng. Nu khng thanh cng, 1 gia tri
khac 0 (do la 1 m li) doc tra v.
- Ly vi tri cua con tro ile ham tell();
Cj ]-c]0 2on- \tC22YmnKo Q6trC+mZl
stream: bin di din cho ile
tra v vi tri cua con tro ile so voi du ile
III. "ruy cp tp tin vKn bn
1. Ghi d Iiu In tp tin vn bn
1#1 Hr ]S,/y{
Ham nay doc dung d ghi mt ky tu ln mt tp tin vn ban dang doc mo d lam vic.
Cj ]-c]0 int \AutcYint cS mnKo Q\Z
Trong do, tham s c chua m Ascii cua mt ky tu nao do. M nay doc ghi ln tp tin
lin kt voi con tro . Ham nay tra v F nu gp li.
1#2 Hr ]S,sy{
Ham nay dung d ghi mt chui ky tu chua trong vung dm ln tp tin vn ban.
Cj ]-c]0 int \Aut6Ycon6t ch+r Qbu\\CrS mnKo Q\Z
Trong do, buer la con tro co kiu char ch dn vi tri du tin cua chui ky tu doc ghi
vao. Ham nay tra v gia tri 0 nu buer chua chui rng va tra v F nu gp li.
1#+ Hr ]^in,y{
Ham nay dung d ghi du liu co dinh dng ln tp tin vn ban.
Cj ]-c]: \Arint\YmnKo Q\S con6t ch+r Q\orm+tS v+rC)ArZ
Trong do: ormat: chui dinh dng (ging voi cac dinh dng cua ham print()), varexpr:
danh sach cac biu thuc, mi biu thuc cach nhau du phy (,).
7pn- Rng D ng-qX
171
d Ghi s nguyn
|.s chu s thp phn| Ghi s thuc co s chu s thp phn theo quy tc lam trn
s.
o Ghi s nguyn h bat phn
x Ghi s nguyn h thp luc phn
c Ghi mt ky tu
s Ghi chui ky tu
e hoc hoc g hoc
G
Ghi s thuc dng khoa hoc (nhn 10 m x)
Vi du: Vit chng trinh ghi chui ky tu ln tp tin vn ban D:\\Baihat.txt
)in*&+,%<'t,i"(8.
)in*&+,%<*"ni"(8.
int ain()?
ID If$
*&r'*r()$
fEf"p%n(iDH33Bai8at(t6ti,ir+i)$
if (f~EuC)?
fp+t'(iD "i ]a u"i p8"(3ni,f)$
fp+t'(iTa *"n %, +i 8"an! &an$ ta *"n %, +i 8"a '+a(i,f)$
f*&"'%(f)$
@
!%t*8()$
r%t+rn 0$
@
2. c d Iiu t tp tin vn bn
2#1 Hr gt,/y{
Ham nay dung d doc du liu t tp tin vn ban dang doc mo d lam vic.
Cj ]-c]: int \-CtcYmnKo Q\Z
Ham nay tra v m Ascii cua mt ky tu nao do (k ca F) trong tp tin lin kt voi con
tro .
2#2 Hr gt,sy{
Cj ]-c]: ch+r Q\-Ct6Ych+r Qbu\\CrS int nS mnKo Q\Z
Ham nay doc dung d doc mt chui ky tu t tp tin vn ban dang doc mo ra va lin
kt voi con tro cho dn khi doc du n ky tu hoc gp ky tu xung dng \n` (ky tu nay cng doc
da vao chui kt qua) hay gp ky tu kt thuc F (ky tu nay khng doc da vao chui kt
qua).
Trong do:
- buer (vung dm): con tro co kiu char ch dn cung nho du lon chua cac ky tu nhn
doc.
- n: gia tri nguyn ch d dai lon nht cua chui ky tu nhn doc.
172
- : con tro lin kt voi mt tp tin nao do.
- Ky tu NULL (\0`) tu dng doc thm vao cui chui kt qua lu trong vung dm.
- Ham tra v dia ch du tin cua vung dm khi khng gp li va cha gp ky tu kt thuc
F. Ngoc li, ham tra v gia tri NULL.
2#+ Hr s/Xny{
Ham nay dung d doc du liu t tp tin vn ban vao danh sach cac bin theo dinh dng.
Cj ]-c]0 \6c+n\YmnKo Q\S con6t ch+r Q\orm+tS v+r2i6tZ
Trong do: ormat: chui dinh dng (ging ham scan()); varlist: danh sach cac bin mi
bin cach nhau du phy (,).
Vi du: Vit chng trinh chep tp tin D:\Baihat.txt o trn sang tp tin D:\Baica.txt.
)in*&+,%<'t,i"(8.
)in*&+,%<*"ni"(8.
int ain()
?
ID If1,If2$
*&r'*r()$
f1Ef"p%n(iDH33Bai8at(t6ti,irti)$
f2Ef"p%n(iDH33Bai*a(t6ti,ivti)$
if (f1~EuC jj f2~EuC)
?
int *8Ef!%t*(f1)$
v8i&% (~ f%"f(f1))
?
fp+t*(*8,f2)$
*8Ef!%t*(f1)$
@
f*&"'%a&&()$
@
!%t*8()$
r%t+rn 0$
@
3. V d
oc ma trn tinh ma trn, ghi ma trn chuyn vi vao ile moi. Xem xet ile vn ban nh du vao,
du ra cua chng trinh, thay vi nhn t ban phim va xut ra man hinh.
)in*&+,%<'t,i"(8.
)in*&+,%<*"ni"(8.
int aX100YX100Y$
int n,$
int ain()
?
*8ar Iinfi&%EiOa"(t6ti, I"+tfi&%Eira(t6ti$
int i, |$
ID If1,If2$
f1Ef"p%n(infi&%,irti)$
if(f1EEuC)
173
?
printf(i"i " fi&% F'i,infi&%)$
!%t*8()$
r%t+rn g1$
@
f2Ef"p%n("+tfi&%,ivti)$
if(f2EEuC)
?
printf(i"i " fi&% F'i,"+tfi&%)$
!%t*8()$
f*&"'%(f1)$
r%t+rn g2$
@
f'*anf(f1,iF,F,i,j,jn)$
f"r(iE0$i<$i++)
?
f"r(|E0$|<n$|++)
?
f'*anf(f1,iF,i,jaXiYX|Y)$
@
@
fprintf(f2,iF, F,3ni,n,)$
f"r(iE0$i<n$i++)
?
f"r(|E0$|<$|++)
?
fprintf(f2,iF4,i,aX|YXiY)$
@
fprintf(f2,i3ni)$
@
f*&"'%(f1)$
f*&"'%(f2)$
printf(iK%t t8+* tin8 *8+:%n Oii)$
!%t*8()$
r%t+rn 0$
@
I!. "ruy cp tp tin nhI phCn
1. Ghi d Iiu In tp tin nh[ phn
Cj ]-c]0 6ipCqt \LritCYcon6t voi! QAtrS 6ipCqt 6ipCS 6ipCqt nS mnKo Q\Z
Trong do:
- ptr: con tro ch dn vung nho chua thng tin cn ghi ln tp tin.
- n: s phn tu s ghi ln tp tin.
- sie: kich thoc cua mi phn tu.
- : con tro tp tin d doc mo.
- Gia tri tra v cua ham nay la s phn tu doc ghi ln tp tin. Gia tri nay bng n tr khi xut hin
li.
174
2. c d Iiu t tp tin nh[ phn
Cj ]-c]0 6ipCqt \rC+!Ycon6t voi! QAtrS 6ipCqt 6ipCS 6ipCqt nS mnKo Q\Z
Trong do:
- ptr: con tro ch dn vung nho s nhn du liu t tp tin.
- n: s phn tu doc doc t tp tin.
- sie: kich thoc cua mi phn tu.
- : con tro tp tin d doc mo.
- Gia tri tra v cua ham nay la s phn tu d doc doc t tp tin. Gia tri nay bng n hay nho hn
n nu d chm dn cui tp tin hoc co li xut hin..
3. V d
Vi du 1: Vit chng trinh ghi ln tp tin CacSo.Dat 3 gia tri s (thuc, nguyn, nguyn
dai). Sau do doc cac s t tp tin va ghi va hin thi ln man hinh.
)in*&+,%<'t,i"(8.
)in*&+,%<*"ni"(8.
int ain()
?
ID If$
fEf"p%n(in+;%r(t6ti,iv;i)$
if (f~EuC)
?
,"+;&% ,E3(14$
int iE101$
&"n! &E54321$
fvrit%(j,,'il%"f(,"+;&%),1,f)$
fvrit%(ji,'il%"f(int),1,f)$
fvrit%(j&,'il%"f(&"n!),1,f)$
9I D"* t+ tap tinI9
r%vin,(f)$
fr%a,(j,,'il%"f(,"+;&%),1,f)$
fr%a,(ji,'il%"f(int),1,f)$
fr%a,(j&,'il%"f(&"n!),1,f)$
printf(iCa* 7%t L+a &aH Ff F, F&,i,,,i,&)$
f*&"'%(f)$
@
%&'%
?
printf(iK8"n! " ,+"* fi&%i)$
@
!%t*8()$
r%t+rn 0$
@
Vi du 2: Mi sinh vin cn quan ly it nht 2 thng tin: m sinh vin va ho tn. Vit chng
trinh cho phep lua chon cac chuc nng: nhp danh sach sinh vin t ban phim ri ghi ln tp tin
175
SinhVien.dat, doc du liu t tp tin SinhVien.dat ri hin thi danh sach ln man hinh, tim kim
ho tn cua mt sinh vin nao do dua vao m sinh vin nhp t ban phim.
Ta nhn thy rng mi phn tu cua tp tin SinhVien.Dat la mt cu truc co 2 trong: m va
ho tn. Do do, ta cn khai bao cu truc nay va su dung cac ham doc/ghi tp tin nhi phn voi kich
thoc mi phn tu cua tp tin la chinh kich thoc cu truc do.
Trong trong hop nay co th coi ile nhi phn nh la ni lu tru du liu lu dai, cng co th
coi nh la ni lu tru xu ly du liu thay vi dung b nho.
)in*&+,%<'t,i"(8.
)in*&+,%<*"ni"(8.
)in*&+,%<'trin!(8.
t:p%,%f 'tr+*t
?
*8ar MaX10Y$
*8ar ]"T%nX40Y$
@ in8i%n$
999ggggggggggg
O"i, rit%i&%(*8ar Ii&%ua%)
?
ID If$
int n,i$
in8i%n 'O$
fEf"p%n(i&%ua%,ia;i)$
printf(iu8ap ;a" n8i%+ 'in8 Oi%nG i)$
'*anf(iF,i,jn)$
f"r(iE1$i<En$i++)
?
printf(iin8 Oi%n t8+ Fi3ni,i)$
ff&+'8('t,in)$
printf(i g MH i)$!%t'('O(Ma)$
printf(i g ]" t%nH i)$!%t'('O(]"T%n)$
fvrit%(j'O,'il%"f('O),1,f)$
@
f*&"'%(f)$
printf(iBa p8i ;at 7: ,% ti%p t+*i)$
!%t*8()$
@
O"i, B%a,i&%(*8ar Ii&%ua%)
?
ID If$
in8i%n 'O$
fEf"p%n(i&%ua%,ir;i)$
printf(i M ]" Oa t%n3ni)$
fr%a,(j'O,'il%"f('O),1,f)$
v8i&% (~f%"f(f))
?
printf(i F' F'3ni,'O(Ma,'O(]"T%n)$
fr%a,(j'O,'il%"f('O),1,f)$
@
f*&"'%(f)$
176
printf(iBa p8i ;at 7: ,% ti%p t+*~~~i)$
!%t*8()$
@
O"i, %ar*8(*8ar Ii&%ua%)
?
*8ar MX10Y$
ID If$
int "+n,E0$
in8i%n 'O$
ff&+'8('t,in)$
printf(iMa '" 'in8 Oi%n *an tiH i)$!%t'(M)$
fEf"p%n(i&%ua%,ir;i)$
v8i&% (~f%"f(f) jj "+n,EE0)
?
fr%a,(j'O,'il%"f('O),1,f)$
if ('tr*p('O(Ma,M)EE0) "+n,E1$
@
f*&"'%(f)$
if ("+n, EE 1)
?
printf(iTi t8a: *" a F'( ]" t%n &aH F'i,'O(Ma,'O(]"T%n)$
@
%&'%
?
printf(iTi 78"n! t8a: 'in8 Oi%n *" a F'i,M)$
@
printf(i3nBa p8i ;at 7: ,% ti%p t+*~~~i)$
!%t*8()$
@
int ain()
?
int *$
f"r ($$)
?
printf(i1( u8ap D3ni)$
printf(i2( In D3ni)$
printf(i3( Ti 7i%3ni)$
printf(i4( T8"at3ni)$
printf(iBan *8"n 1, 2, 3, 4H i)$
'*anf(iF,i,j*)$
ff&+'8('t,in)$
if(*EE1)
?
rit%i&%(iin8i%n(Dati)$
@
%&'% if (*EE2)
?
B%a,i&%(iin8i%n(Dati)$
@
%&'% if (*EE3)
?
177
%ar*8(iin8i%n(Dati)$
@
%&'% ;r%a7$
@
r%t+rn 0$
@
Ngoai ra th vin stdio.h cn dinh nghia mt s ham khac cho phep thao tac voi tp tin, sinh
vin co th tham khao trong phn tro giup.
!. "#m t$t n%i &ung bi h'c
I. Mt s khai nim
II. Cac thao tac trn tp tin
1. Khai bao bin tp tin
2. Mo tp tin
3. ong tp tin
4. Kim tra dn cui tp tin hay cha
5 Di chuyn con tro tp tin v du tp tin - Ham rewind()
III. Truy cp tp tin vn ban
1. Ghi du liu ln tp tin vn ban
2. oc du liu t tp tin vn ban
IV. Truy cp tp tin nhi phn
1. Ghi du liu ln tp tin nhi phn - Ham write()
2 oc du liu t tp tin nhi phn - Ham read()
3. Di chuyn con tro tp tin - Ham seek()
4. Vi du
V. Tom tt ni dung bai hoc
!I. Bi tp
Xem Bi 16 - Bi ,\] ,-./ -n- Lam vic voi File va Thut toan nng cao
178
Bi 13 - HQA
uai ,+n! ;Pi 8*
W. IhUi ng x h'q
WW. :-c hm x h'q
1. Muu # mu
2. Tv # mu
3. Tv 1dng g;" %h<c # $ gi-c
). Tv i4m, mi`n
J. *+nh ch= nh!
L. :N$ M3 RTiAt"'6S
WWW. 8N lE #nn 5&n 6n mn h+nh x h'q
1. *i4n h9 #nn 5&n 6n mn h+nh x h'q
2. YN dng c-c X'nM ch=
3. D` 6ng # chi`u c$' cV$ % F
WT. THm ni dung 5i hc
Vic hin thi thng tin trn man hinh may tinh doc thuc hin thng qua mt v mch diu khin
man hinh. Khi man hinh o ch d vn ban (text mode) chung ta co th hin thi thng tin ln man
hinh bng cac lnh: print(), putch(), putchar(), Thng tin ma chung ta cn da ra man hinh
doc chuyn toi v mch diu khin man hinh doi dng m ki tu ASCII. V mch noi trn co
nhim vu da ki tu do theo mu dinh sn ra man hinh o vi tri doc xac dinh boi chng trinh cua
chung ta.
Ngoai ch d vn ban, man hinh cn co th lam vic trong ch d d ho. Khi man hinh o
ch d d hoa chung ta co th v d thi, vit chu to hoc th hin cac hinh anh khac - nhung vic
ma chung ta khng th thuc hin doc trong ch d vn ban.
Cac ham va thu tuc d ho doc khai bao trong ile graphics.h.
I. OhPi 0%ng 0Q hoR
Chuyn ch d man hinh v ch d d hoa cho phep thuc hin cac lnh ve di tong d hoa.
Cj ]-c]: voi! init-r+AhYint Q-r+Ah!rivCrSint -r+Ahmo!CSch+r Q!rivCrA+thZl
Trong do:
driverpath: la xu ky tu ch dong dn dn th muc chua cac tp tin diu khin d ho.
graphdriver: cho bit man hinh d ho su dung trong chng trinh.
graphmode: cho bit mode d ho su dung trong chng trinh.
Bang 13-1
Cc/ gic ,^p / ,-g /X g^X]-R^ibt^ b g^X]-roRt
G^X]-R^ibt^ g^X]-roRt 7 ]-mn gii
CGA (1) CGAC0 (0) 320x200
179
CGAC1 (1)
CGAC2 (2)
CGAC3 (3)
CGAHI (4)
320x200
320x200
320x200
640x200
MCGA (2) MCGA0 (0)
MCGA1 (1)
MCGA2 (2)
MCGA3 (3)
MCGAMed (4)
MCGAHI (5)
320x200
320x200
320x200
320x200
640x200
640x480
GA (3) GAL0 (0)
GAHI (1)
640x200
640x350
GA64 (4) GA64L (0)
GA64HI (1)
640x200
640x350
GAMN (5) GAMNHi (0) 640x350
VGA (9) VGAL (0)
VGAMD (1)
VGAHI (2)
640x200
640x350
640x480
HRCMN (7) HRCMNHI 720x348
ATT400 (8) ATT400C0 (0)
ATT400C1 (1)
ATT400C2 (2)
ATT400C3 (3)
ATT400MD (4)
ATT400HI (5)
320x200
320x200
320x200
320x200
640x400
640x400
PC3270 (10) PC3270HI (0) 720x350
IBM8514 (6) PC3270L (0)
PC3270HI (1)
640x480 256 mu
1024x768 256 mu
Bang trn cho thy d phn giai cua man hinh phu thuc ca vao kiu man hinh va mode.
Vi du nh trong man hinh GA nu dung GAL thi d phn giai la 640x200 (Ham getmaxx()
cho gia tri cuc di cua s dim theo chiu ngang cua man hinh. Ham getmaxy() cho gia tri cuc
di cua s dim theo chiu doc cua man hinh.).
Vi du: Khoi to d hoa trong mi trong lp trinh Turbo C. Gia su may tinh co man hinh
VGA, cac tp tin d ho chua trong th muc C:\TC \BGI, khi do ta khoi dng ch d d ho cho
man hinh nh sau:
)in*&+,% <!rap8i*'(8.
180
ain()
?
int 8E}A,",%E}A]I$ 9I]"m* 8E9,",%E2I9
init!rap8(j8,j",%,iCH33TC33B}Ii)$
@
Nu khng bit chinh xac kiu man hinh dang su dung thi ta gan cho bin graphdriver
bng DTCT hay gia tri 0. Khi do, kt qua cua initgraph s la:
Kiu man hinh dang su dung doc phat hin, gia tri cua no doc gan cho bin
graphdriver.
Mode d ho o d phn giai cao nht ung voi man hanh dang su dung cng doc phat
hin va gia tri cua no doc gan cho bin graphmode.
Nh vy dung hng s DTCT chng nhung co th khoi to doc ch d d ho cho
man hinh hin co theo mode co d phn giai cao nht ma cn giup ta xac dinh kiu man hinh
dang su dung.
Vi du khoi to d hoa trong mi trong DevC.
Kim tra tinh tn ti cua ile tiu d th vin graphics.h trong th muc include, va th
vin libbgi.a lib.
To mt proect trong cua s option cua proect chon tab Parameters chon cac ile th
vin:
-lbgi
-lgdi32
-lcomdlg32
-luuid
-loleaut32
-lole32
Khoi to ging nh trong Turbo C, voi tham s cui cung la chui trng.
)in*&+,% <!rap8i*'(8.
ain()
?
int 8E}A,",%E}A]I$ 9I]"m* 8E9,",%E2I9
init!rap8(j8,j",%,i i)$
@
Vi du: Chng trinh doi dy xac dinh kiu man hinh dang su dung:
)in*&+,% <!rap8i*'(8.
)in*&+,% <'t,i"(8.
ain()
?
int 8E0, ",%$
init!rap8(j8,j",%,iCH33TC33B}Ii)$
*&"'%!rap8()$
printf(i3n }ia tri '" *+a an 8in8 &aH F,i,8)$
printf(i3n }ia tri '" ",% ," 8"a &aH F,i,",%)$
!%t*8()$
181
@
Nu chui dung d xac dinh driverpath la chui rng thi chng trinh dich s tim kim
cac ile diu khin d ho trn th muc hin thoi va th cua cua trinh bin dich.
C-j n: Man hinh d hoa may tinh doc xac dinh toa d theo chiu t trai sang phai va t
trn xung doi khac voi toa d khng gian decac.
Vi th khi v hinh trn man hinh cn chuyn truc toa d v vi tri phu hop, va dao truc toa
d theo toa d thuc.
II. Cc hm 0Q hoR
1. Mu v mu
7h, rS nen0 dt mau cho toan b nn trong Turbo C, trong DevC dt mau nn
cho cac lnh co v nn o sau.
Cj ]-c]: voi! 6Ctbkco2orYint c2Zl
cl: la mau cn dt, xem bang mau o doi
trong DevC co th su dung thm lnh bar d din toan b man hinh voi mau nn.
7h, rS k`ang b0 dt mau v dong trong cac lnh v sau do.
Cj ]-c]: voi! 6Ctco2orYint c2Zl
cl: mau cn dt, xem bang mau o doi
7h, rS yfigS{ ,Y b rS ,Y0 dt mu (kiu) t va mau t ta dung thu tuc co din
nn.
Cj ]-c]: voi! 6Ct\i226ty2CYint A+rS int c2Zl
pr: kiu din, theo bang o doi
cl: kiu mau, theo bang o doi.
Bang 13-2
Cc/ gic ,^p rS
Tn -ng Gic ,^p s MS -ign ,-p
BLACK 0 en
BLU 1 Xanh da troi
(0,0)
y
x
182
GRN 2 Xanh la cy
CAN 3 Xanh l
RD 4 o
MAGNTA 5 Tim
BRWN 6 Nu
LIGHTGRA 7 Xam nht
DARKGRA 8 Xam dm
LIGHTBLU 9 Xanh xa troi nht
LIGHTGRN 10 Xanh la cy nht
LIGHTCAN 11 Xanh l nht
LIGHTRD 12 o nht
LIGHTMAGN
TA
13 Tim nht
LLW 14 Vang
WHIT 15 Trng
Bang 13-3
Cc/ figS rS ,Y
Tn -ng Gic ,^p s KigS rS ,Y
MPTFILL 0 T bng mu nn
SLIDFILL 1 T bng dong lin net
LINFILL 2 T bng dong --------
LTSLASHFILL 3 T bng ///
SLASHFILL 4 T bng /// in dm
BKSLASHFILL 5 T bng \\\ in dm
LTBKSLASHFILL 6 T bng \\\
HATCHFILL 7 T bng dong gch bong
nht
XHATCHFILL 8 T bng dong gch bong
chu thp
INTRLAVFIL
L
9 T bng dong dut qung
WIDDTFILL 10 T bng du chm tha
CLSDTFILL 11 T bng du chm mau
C-Un [i gic ,^p rS /-o rS /~ Tn0 16 mau c ban doc chon t danh sach 256
mau. H thng cho ngoi dung tu chon li mau c ban t 256 mau.
183
Cj ]-c]: void setpalette(int clr, int cl );
clr: vi tri cua mau trong bang mau c ban
cl: Mau doc da vao theo danh sach 256;
Vi du: Cu lnh: setpalette(0,lightcyan); di mau du tin trong bang mau thanh mau
xanh l nht. Cac mau khac khng bi anh hong. Lnh nay khng thuc su co hiu qua trong
DevC;
Li Tng rS -idn ,-ai0
- Ly mau v hin thoi, tra v mu d xac dinh bng thu tuc setcolor ngay troc no.
Cj ]-c]: int -Ctco2orYZ
- Ly mau nn hin thoi, tra v mau nn d dt boi ham setbkcolor troc do.
Cj phap: int -Ctbkco2orYZ
2. V v t mu ung trn
Co th chia cac dong va hinh thanh bn nhom chinh:
Cung trn va hinh trn.
ong gp khuc va da giac.
ong thng.
Hinh chu nht.
.un- tran v :bn- tran
Nhom nay bao gm: Cung trn, dong trn, cung elip va hinh qut.
CSng ,^n0 v mt cung trn
Cj ]-c]: voi! +rcYint )S int yS int -!S int -cS int rZl
(x,y): la to d tm cung trn.
gd: la goc du cung trn(0 dn 360 d).
gc: la goc cui cung trn (gd dn 360 d).
r: la ban kinh cung trn .
Vi du:
V mt cung trn co tm ti (100,50), goc du la 0, goc cui la 180, ban kinh 30.
ar*(100,50,0,180,30)$
7`ang ,^n0 v dong trn
Cj ]-c]: voi! circ2CYint )S int yS int rZl
(x,y) : la to d tm cung trn.
r : la ban kinh dong trn.
Vi du:
V mt dong trn co tm ti (100,50) va ban kinh 30.
*ir*&%(100,50,30)$
CSng t[i]0 v mt cung elip
184
Cj ]-c]: voi! C22iA6CYint )S int yS int -!S int -cS int )rS int yrZl
(x,y) : la to d tm cung elip.
gd : la goc du cung trn(0 dn 360 d).
gc : la goc cui cung trn (gd dn 360 d).
xr : la ban truc nm ngang.
yr : la ban truc thng dung.
Vi du:
V mt cung elip co tm ti (100,50), goc du la 0, goc cui la 180, ban truc ngang 30,
ban truc dung la 20.
%&&ip'%(100,50,0,180,30,20)$
H_n- WS,0 v va t mau mt hinh qut
Cj ]-c]: voi! AiC62icCYint )S int yS int -!S int -cS int rZl
(x,y) : la to d tm hinh qut.
gd : la goc du hinh qut (0 dn 360 d).
gc : la goc cui hinh qut (gd dn 360 d).
r: la ban kinh hinh qut .
Vi du: Chng trinh doi dy s v mt cung trn o goc phn t thu nht, mt cung elip o goc
phn t thu ba, mt dong trn va mt hinh qut quet t 90 dn 360 d.
) in*&+,% i!rap8i*'(8i
)in*&+,% i't,i"(8i
)in*&+,% i*"ni"(8i
ain()
?
int ,E0,",%$
init!rap8(j,,j",%,iCH33TC33B}Ii)$
'%t;7*"&"r(BCD)$
'%t*"&"r(D)$
'%tfi&&'t:&%(ID5I,BDD)$$
ar*(160,50,0,90,45)$
*ir*&%(160,150,45)$
pi%'&i*%(480,150,90,360,45)$
!%t*8()$
*&"'%!rap8()$
@
3. V ung gp khc v a gic
3 k`ang gi] f-j/0 Mun v dong gp khuc di qua n dim: (x1,y1), (x2,y2), ...., (xn,yn)
cac to d (xi,yi) doc gan cho mt mang a kiu int theo nguyn tc sau:
To d x1 gan cho a|0|
To d y1 gan cho a|1|
To d x2 gan cho a|2|
To d y2 gan cho a|3|
185
....
To d xn gan cho a|2n-2|
To d yn gan cho a|2n-1|
Sau do goi ham:
Cj ]-c]: voi! !r+LAo2yYnS+Zl
n: s dim cn v tng ung s long dim doc lu tru trong a
a: Cac dim trn dong gp khuc doc lu tru theo m hinh trn
Nu dim cui cung (xn,yn) trung voi dim du (x1,y1) thi dong gp khuc khuc khep
kin.
Vi du v tam giac
int aX8YE?10,10,100,100,10,100,10,10@$
,ravp"&:(4,a)$
TY rS kX gic/0 V da giac va t mau cho phn da giac d v
Cj ]-c]: voi! \i22Ao2yYnS+Zl
n: s dim cn v
a: danh sach cac dim cn v
s v va t mau mt da giac co dnh la cac dim (x1,y1), (x2,y2), ...., (xn,yn)
Vi du: V mt dong gp khuc va hai dong tam giac.
)in*&+,% i!rap8i*'(8i
)in*&+,% i't,i"(8i
)in*&+,% i*"ni"(8i
int p"&:1XYE?5,200,190,5,100,300@$
int p"&:2XYE?205,200,390,5,300,300@$
int p"&:3XYE?405,200,590,5,500,300,405,200@$
ain()
?
int ,E0,",%$
init!rap8(j,,j",%,iCH33TC33B}Ii)$
'%t;7*"&"r(CAu)$
'%t*"&"r(D)$
'%tfi&&'t:&%(ID5I,MA}DuTA)$
,ravp"&:(3,p"&:1)$
fi&&p"&:(3,p"&:2)$
fi&&p"&:(4,p"&:3)$
!%t*8()$
*&"'%!rap8()$
@
3 k`ang ,-ng0 dong thng ni hai dim
Cj ]-c]0 voi! 2inCYint )"S int y"S int )#S int y#Zl
(x1,y1): toa d dim 1
(x2,y2): toa d dim 2
3 k`ang ,-ng0 dong thng t dim con tro d hoa hin ti dn dim moi
186
Cj ]-c]: voi! 2inCtoYint )S int yZl
(x,y): dim s v dn t con tro d hoa hin ti
3 k`ang ,-ng0 dong thng t dim con tro d hoa hin ti dn dim cach dim hin ti
mt khoang
Cj ]-c]: voi! 2inCrC2Yint !)S int !yZl
(dx,dy): khoang cach voi con tro d hoa hin ti, nu dim hin ti la (x,y) thi dim moi cn v
la (xdx, ydy)
Ji /-Sgn /on /- ku -o0 di chuyn con chy dn vi tri moi
Cj ]-c]: voi! movCtoYint )S int yZl
(x,y): dim con tro d hoa moi
Vi du:
"O%t"(200,100)$
&in%(100,100,1,1)$
&in%t"(100,200)$
&in%r%&(100,100)$
C-Un figS k`ang0 kiu dong d v cac dong thng, da giac ,
Cu phap : void setlinestyle(int linestyle, int par, int thin);
* linestyle : kiu dong, doc miu ta o doi
par : nu tham s thu nht la USRBITLIN thi tun thu theo bit cua tham s nay d to ra
dim v.
thin : d day cua dong doc miu ta o doi
Bang 13-4
MY , figS k`ang
Tn -ng Gic ,^p s KigS k`ang
SLIDLIN 0 Net lin
DTTDLIN 1 Net chm
CNTRLIN 2 Net chm gch
DASHDLIN 3 Net gch
USRBITLIN 4 Mu tu to
Bang 13-5
MY , k R /X k`ang
Tn -ng Gic ,^p s Be R
NRMWIDTH 1 B day binh thong
THICKWIDTH 3 B day gp ba
Vi du: Chng trinh v mt dong gp khuc bng cac don thng. ong gp khuc di qua cac
dnh sau:
187
(20,20),(620,20),(620,180),(20,180) va (320,100)
)in*&+,% i!rap8i*'(8i
)in*&+,% i't,i"(8i
)in*&+,% i*"ni"(8i
ain()
?
int 8E0, ",%$
init!rap8(j8,j",%,iCH33TC33B}Ii)$
'%t;7*"&"r(BCD)$
'%t*"&"r(D)$
'%t&in%'t:&%(IDgIuD,0,T]ICK5IDT])$
"O%t"(320,100)$ 9I *"n *8G: G OG tr[ ( 320,100 ) I9
&in%(20,20,620,20)$ 9I *"n *8G: OGn G OG tr[ ( 320,100 ) I9
&in%r%&(g300,80)$
&in%t"(620,180)$
&in%t"(620,20)$
!%t*8()$
*&"'%!rap8()$
@
4. V im, min
3 kigr0 v dim anh trn man hinh voi mau xac dinh
Cj ]-c]: voi! AutAi)C2Yint )S int yS int co2orZl
(x,y): toa d dim cn v
color: mau v
Li rS kigr b0 xac dinh mau cua mt dim trn man hinh
Cj ]-c]: un6i-nC! -CtAi)C2Yint )S int yZl
(x,y): Toa d cua dim cn ly mau
gia tri tra ve la mau cua dim trn man hinh
TY rien0 T mau cho mt min kin doc xac dinh boi mau bin, nu vung khng kin s t
mau ht vung lam vic.
Cj ]-c]: voi! \2oo!\i22Yint )S int yS int bor!CrZl
(x,y): toa d xac dinh dim t mau du tin
border: mau cua vung bin
Vi du: V mt dong trn mau do trn man hinh mau xanh. To d (x,y) cua dim gieo doc
np t ban phim. Tuy thuc gia tri cu th cua x,y chng trinh s t mau vang cho hinh trn hoc
phn man hinh bn ngoai hinh trn.
)in*&+,% i!rap8i*'(8i
)in*&+,% i't,i"(8i
)in*&+,% <*"ni"(8.
ain()
?
int 8E0,",%E0, 6, :$
printf(i3na" t"a ," 6,:Hi)$
188
'*anf(iF,F,i,j6,j:)$
init!rap8(j8,j",%,ii)$
'%t;7*"&"r(BCD)$
'%t*"&"r(BDD)$
'%tfi&&'t:&%(11,D)$
*ir*&%(320,100,50)$
"O%t"(1,150)$
f&"",fi&&(6,:,BDD)$
!%t*8()$
*&"'%!rap8()$
@
5. Hnh ch nht
3 -_n- /-Z n-\,: xac dinh hai dnh la goc trai trn cung, va goc phai doi cung cua hinh
chu nht
Cj ]-c]: voi! rCct+n-2CYint )"S int y"S int )#S int y#Zl
(x1,y1) : toa d goc trai, phia trn hinh chu nht
(x2,y2) : toa d goc phai phia doi hinh chu nht
3 -_n- /-Z n-\, k`/ ,o fn: v hinh chu nht voi min trong doc t mau
Cj ]-c] : voi! b+rYint )"S int y"S int )#S int y#Zl
(x1,y1) : toa d goc trai, phia trn hinh chu nht
(x2,y2) : toa d goc phai phia doi hinh chu nht
V hinh chu nht co t bong: v hinh chu nht co t bong 3D.
Cj ]-c]: voi! b+r$!Yint )"S int y"S int )#S int y#S int !CAthS int toAZl
(x1,y1) : toa d goc trai, phia trn hinh chu nht
(x2,y2) : toa d goc phai phia doi hinh chu nht
depth: d su cua t bong
top: v dnh (0: khng v, 1: v)
Vi du: Chng trinh doi dy to nn mt hinh chu nht, mt khi hinh chu nht va mt hinh
hp co np:
)in*&+,% i!rap8i*'(8i
ain()
?
int 8E0,",%E0$
init!rap8(j8,j",%,ii)$
'%t;7*"&"r(}BDDu)$
'%t*"&"r(BDD)$
'%tfi&&'t:&%(CD5DT5I,D)$
r%*tan!&%(5,5,300,160)$
;ar(3,175,300,340)$
;ar3,(320,100,500,340,100,1)$
!%t*8()$
*&"'%!rap8()$
@
189
6. Ca s (Vieport)
T-i, [\] bit]o^,0 to cua s lam vic ao trn man hinh.
Cj ]-c]: voi! 6CtviCLAortYint )"S int y"S int )#S int y#S int c2iAZl
(x1,y1) : toa d goc trn bn trai
(x2,y2) : toa d goc doi bn phai
clip : 0 : cho phep v ra ngoai viewport, 1 : khng cho phep v ra ngoai viewport
Vi du:
'%tOi%vp"rt(100,50,200,150,0)$
&in%(g20,g20,50,50)$
Lp nn mt vung viewport hinh chu nht co to d goc trai cao la (100,50) va to d goc phai
thp la (200,150) (la to d troc khi dt viewport).
C-j n0 Sau khi lp viewport, ta co h to d moi ma goc trn bn trai s co to d (0,0).
N-\n Ridn bit]o^, -idn -n-0 thng tin v viewport hin hanh.
Cj ]-c] 0 voi! -CtviCL6Cttin-Y6truct viCLAorttyAC QvAZl
vp: thng tin v viewport hin thoi,
cu truc cua viewport
struct viewporttype

int let,top,right,bottom;
int clip;
};
BX bit]o^,0 xoa cac di tong v trong viewport
Cj ]-c]: voi! c2C+rviCLAortYvoi!Zl
Boc rn -_n-@ k`X /on /- be ,o k y0@0{ /X rn -_n-0
Cj ]-c]: voi! c2C+r!CvicCYvoi!Zl
To k mr R`~ng0
Voi ch d cho phep v ra ngoai viewport, cac ham d hoa co th v ra ngoai viewport voi toa
d m.
int xc,yc;
xcgetmaxx()/2;
ycgetmaxy()/2;
setviewport(xc,yc,getmaxx(),getmaxy(),0);
Nh th, man hinh s doc chia lam bn phn voi to d m dng nh sau:
Phn t trai trn: x m, y m.
x: t -getmaxx()/2 dn 0.
y: t -getmaxy()/2 dn 0.
190
Phn t trai doi: x m, y dng.
x: t -getmaxx()/2 dn 0.
y: t 0 dn getmaxy()/2.
Phn t phai trn: x dng, y m.
x: t 0 dn getmaxx()/2.
y: t -getmaxy()/2 dn 0.
Phn t phai doi: x dng, y dng.
x: t 0 dn getmaxx()/2.
y: t 0 dn getmaxy()/2.
Vi du: Chng trinh v d thi ham sin x trong h truc to d m dng. Hoanh d x ly cac gia
tri t -4 dn 4. Trong chng trinh co su dung hai ham moi la settextustiy va outtextxy ta s
d cp ngay trong phn sau.
)in*&+,% i!rap8i*'(8i
)in*&+,% i*"ni"(8i
)in*&+,% iat8(8i
),%fin% TDA 20
),%fin% TD 60
ain()
?
int 8E0,",%EDDTDCT$
int 6,:,i$
init!rap8(j8,j",%,ii)$
'%tOi%vp"rt(!%ta66()92,!%ta6:()92,!%ta66(),!%ta6:(),0)$
'%t;7*"&"r(BCD)$
'%t*"&"r(D)$
&in%(g!%ta66()92,0,!%ta66()92,0)$
&in%(0,g!%ta6:()92,0,!%ta6:()92)$
'%tt%6t|+'tif:(1,1)$
'%t*"&"r(]ITD)$
"+tt%6t6:(0,0,i(0,0)i)$
f"r (iEg400$i<E400$++i)
?
6Ef&""r(2IM5wIIiITDA9200)$
:Ef&""r('in(2IM5wIIi9200)ITD)$
p+tpi6%&(6,:,]ITD)$
@
!%t*8()$
*&"'%!rap8()$
@
III. 3S lD vKn bn trn mn hnh 0Q hoR
1. Hin th[ vn bn trn mn hnh ho
Cj ]-c]0 voi! outtC)tYch+r Q6Zl
s: chui vn ban doc hin thi ti vi tri con tro d hoa hin ti
191
Cj ]-c]0 voi! outtC)t)yYint )S int ySch+r Q6Zl
(x,y): toa d s hin thi chui
s: chui vn ban s doc hin thi
Vi du:
Hai cach vit doi dy:
"+tt%6t6:(50,50,# a: ]D#)$
va
"O%t"(50,50)$
"+tt%6t( a: ]D#)$
cho cung kt qua.
2. S dng cc Fonts ch
Cac Fonts chu nm trong cac tp tin *.CHR trn dia. Cac Fonts nay cho cac kich thoc
va kiu chu khac nhau, chung s doc hin thi ln man hinh bng cac ham outtext va outtextxy.
chon va np Fonts ta dung ham:
Cj ]-c] : voi! 6CttC)t6ty2CYint \ontS int !irCctionS int ch+r6ipCZl
ont : lua chon kiu chu va nhn mt trong cac hng sau:
DFAULTFNT0
TRIPLXFNT1
SMALLFNT2
SANSSRIFFNT3
GTHICFNT4
derection: d chon hong chu va nhn mt trong cac hng sau:
HRIDIR0 vn ban hin thi theo hong nm ngang t trai qua phai.
VRTDIR1 vn ban hin thi theo hong thng dung t doi ln trn.
Charsie: la h s phong to cua ky tu va co gia tri trong khoang t 1 dn 10.
Khi charsie1, ont hin thi trong hinh chu nht 8*8 pixel.
Khi charsie2 ont hin thi trong hinh chu nht 16*16 pixel.
............
Khi charsie10, ont 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.
Vi du:
Cac dng lnh:
'%tt%6t't:&%(3,1,3)$99D%OC++ 78Wn! *8+:Qn t8pn! /Jn!
"+tt%6t6:(30,30,i}D TBCT Ci)$
s hin thi ti vi tri (30,30) dng chu GDS TRUST U theo chiu t doi ln trn, ont chu
chon la SANSSRIFFNT va c chu la 2.
7h, bp ,^ -ign ,-p /X /c/ mS fn ,. /-o Ti oS,,t, b oS,,t,0
192
Cj ]-c]0 voi! 6CttC)tru6ti\yYint horipS int vCrtZl
hori: co th la mt trong cac hng s sau:
LFTTXT0 ( Vn ban xut hin bn phai con chy).
CNTRTXT ( Chnh tm vn ban theo vi tri con chy).
RIGHTTXT (Vn ban xut hin bn trai con chy).
vert: co th la mt trong cac hng s sau:
BTTMTXT0 ( Vn ban xut hin phia trn con chy).
CNTRTXT1 ( Chnh tm vn ban theo vi tri con chy).
TPTXT2 ( Vn ban xut hin phia doi con chy).
Vi du:
'%tt%6t|+'tif:(1,1)$
"+tt%6t6:(100,100,iABCi)$
3. B rng v chiu cao ca k t
- Chiu cao cua chui ky tu
Cj ]-c]: int tC)thCi-htYch+r Q6Zl
s: chui ky tu cn kim tra
tra v d cao cua chui ky tu khi in ra man hinh tinh bng pixel.
Vi du 1:
Voi ont bit map va h s phong di la 1 thi textheight(A) ch gia tri la 8.
Vi du 2:
)in*&+,% i't,i"(8i
)in*&+,% i!rap8i*'(8i
ain()
? int 8E0,",%EDDTDCT, :,'il%$
init!rap8(j8,j",%,iCH33TC33B}Ii)$
:E10$
'%tt%6t|+'tif:(0,0)$
f"r ('il%E1$'il%<5$++'il%)
? '%tt%6t't:&%(0,0,'il%)$
"+tt%6t6:(0,:,iACBIICDi)$
:+Et%6t8%i!8t(iACBIICDi)+10$
@
!%t*8()$
*&"'%!rap8()$
@
- B rng cua ki tu:
Cu phap: int textwidth(char *s);
s: chui ky tu cn kim tra
tra v d rng cua chui ky tu khi in ln man hinh
193
I!. Giu Fng hoRt hnh 0Q h'=
Hiu ung hot hinh la hiu ung cac di tong di chuyn trn man hinh. Ban cht cua vic dich
chuyn trn man hinh la xoa vi tri c va v di tong sang vi tri moi.
- Xoa vi tri c bng cach v di tong voi mau cua mau nn
Vi du v qua bong di chuyn t goc trn trai xung goc phai doi
)in*&+,% i!rap8i*'(8i
)in*&+,% i't,i"(8i
)in*&+,% i*"ni"(8i
)in*&+,% <,"'(8.
int ,rav(int 6, int :, int *"&"r)
?
'%t*"&"r(*"&"r)$
'%t;7*"&"r(*"&"r)$
'%tfi&&'t:&%(0,*"&"r)$
pi%'&i*%(6,:,0,360,10)$
r%t+rn 0$
@
ain()
?
int i,6,:$
int ,6E5$
int ,:E5$
int ,E0,",%$
init!rap8(j,,j",%,iCH33TC33B}Ii)$
6E10$
:E10$
v8i&%(~7;8it())
?
,rav(6,:,15)$
,%&a:(10)$
,rav(6,:,0)$
6+E,6$
:+E,:$
if(:<10 :.300)
,:Eg,:$
if(6<10 6.400)
,6Eg,6$
@
!%t*8()$
*&"'%!rap8()$
@
- Trong tinh hung nn co hinh anh khac vic v li mau nn s xoa cac di tong trn nn.
giai quyt vn d nay cn phai lu tru li tinh trng man hinh troc khi v, sau do hi phuc li
man hinh d tip tuc v sang vi tri moi.
)in*&+,% i!rap8i*'(8i
)in*&+,% i't,i"(8i
)in*&+,% i*"ni"(8i
)in*&+,% <,"'(8.
),%fin% r 5
*8ar I;$
int ,rav(int 6, int :, int *"&"r)
?
194
'%t*"&"r(*"&"r)$
'%t;7*"&"r(*"&"r)$
'%tfi&&'t:&%(0,*"&"r)$
pi%'&i*%(6,:,0,360,r)$
r%t+rn 0$
@
int ain()
?
int i,6,:$
int ,6E5$
int ,:E5$
,%&a:(10)$
int ,E0,",%E0$
init!rap8(j,,j",%,iCH33TC33B}Ii)$
;E(*8arI)a&&"*(ia!%'il%(1,1,2Ir+1,2Ir+1))$
if(;EEuC)
?
*&"'%!rap8()$
r%t+rn g1$
@
&in%(0,0,!%ta66(),!%ta6:())$
&in%(0,!%ta6:(),!%ta66(),0)$
6E10$
:E10$
v8i&%(~7;8it())
?
!%tia!%(6gr,:gr,6+r,:+r,;)$
,rav(6,:,15)$
,%&a:(10)$
p+tia!%(6gr,:gr,;,Cw5wCT)$
6+E,6$
:+E,:$
if(:<10 :.310)
,:Eg,:$
if(6<10 6.420)
,6Eg,6$
@
!%t*8()$
fr%%(;)$
*&"'%!rap8()$
r%t+rn 0$
@
!. "#m t$t n%i &ung bi h'c
I. Khoi dng d ho
II. Cac ham d ho
1. Mu va mau
2. V va t mau
3. V dong gp khuc va da giac
4. V dim, min
5. Hinh chu nht
195
6. Cua s (Viewport)
III. Xu ly vn ban trn man hinh d ho
1. Hin thi vn ban trn man hinh d ho
2. Su dung cac Fonts chu
3. B rng va chiu cao cua ki tu
IV. Tom tt ni dung bai hoc
V. Bai tp
!I. Bi tp
Xem Bi 16 - Bi ,\] ,-./ -n- Lam vic voi File va Thut toan nng cao
196
Bi 14 - Bi thc hnh: LM VIEC VI FILE V HQA
I. "h<c hin cc v & )=u
1. V d 1
Yu cu7
Vit chng trinh cho phep nhp vao mt mang, tim phn tu lon nht
]o^n th?o vn b?n ch:Fn- tr8nh nh: 6+u
)in*&+,%<'t,i"(8.
)in*&+,%<*"ni"(8.
int aX100YX100Y$
int n,$
int ain()
?
int a$
*8ar Iinfi&%EiOa"(t6ti, I"+tfi&%Eira(t6ti$
int i, |$
ID If1$
f1Ef"p%n(infi&%,irti)$
if(f1EEuC)
?
printf(i"i " fi&% F'i,infi&%)$
r%t+rn g1$
@
f'*anf(f1,iF,F,i,j,jn)$
f"r(iE0$i<$i++)
?
f"r(|E0$|<n$|++)
?
f'*anf(f1,iF,i,jaXiYX|Y)$
@
@
99fin, a6
aEaX0YX0Y$
f"r(iE0$i<$i++)
?
f"r(|E0$|<n$|++)
?
if(aXiYX|Y.a)
aEaXiYX|Y$
@
@
f*&"'%(f1)$
printf(i}ia tri a6HF,i,a)$
!%t*8()$
197
r%t+rn 0$
@
4hJ n-hi3m "7
Nhp thu ile vao.txt co ni dung
4 5
1 2 3 4 5
5 6 7 8 9
1 3 5 7 9
2 4 6 8 0
4hJ n-hi3m #7
Nhp thu ile vao.txt co ni dung
4 5
1 2 3 4 5
5 6 7 8 9
1 3 5 7 9
a ra nhn xet, thay di dam bao h thng chy tt.
2. V d 2
Nhp li vi du 2 trong hiu ung hot hinh, thay di mau vin bong, to thm dong khung.
II. Bi tp t< lm
1. Vit chng trinh quan ly mt tp tin vn ban theo cac yu cu:
a- Nhp t ban phim ni dung mt vn ban sau do ghi vao dia.
b- oc t dia ni dung vn ban va nhp va in ln man hinh.
c- oc t dia ni dung vn ban va nhp, in ni dung do ln man hinh va cho phep
ni thm thng tin vao cui tp tin do.
2. Vit chng trinh cho phep thng k s ln xut hin cua cac ky tu la chu
(A`..``,`a`..``) trong mt tp tin vn ban.
3. Vit chng trinh dm s t va s dng trong mt tp tin vn ban.
4. Vit chng trinh nhp t ban phim va ghi vao 1 tp tin tn la DMHH.DAT voi mi
phn tu cua tp tin la 1 cu truc bao gm cac trong: Ma (m hang: char|5|), Ten (Tn
hang: char|20|).Kt thuc vic nhp bng cach g NTR vao Ma. Ta s dung tp tin nay
d giai m hang hoa cho tp tin DSHH.DAT s d cp trong bai 5.
5. Vit chng trinh cho phep nhp t ban phim va ghi vao 1 tp tin tn DSHH.Dat voi
mi phn tu cua tp tin la mt cu truc bao gm cac trong : mh (m hang: char|5|), sl
(s long : int), dg ( dn gia: loat), st (S tin: loat) theo yu cu:
- Mi ln nhp mt cu truc
198
- Troc tin nhp m hang (mh), da mh so sanh voi Ma trong tp tin DMHH.DAT d
doc to ra boi bai tp 1, nu mhma thi in tn hang ngay bn cnh m hang.
- Nhp s long (sl).
- Nhp dn gia (dg).
- Tinh s tin s long * dn gia.
Kt thuc vic nhp bng cach danh NTR vao m hang. Sau khi nhp xong yu cu in
toan b danh sach hang hoa co su giai m v tn hang theo mu sau:
STT MA
HANG
TN HANG S LG DN GIA S TIN
1 a0101 Duong cat trang 25 10000.00 250000.00
2 b0101 Sua co gai Ha Lan 10 40000.00 400000.00
6. Vit chng trinh cho phep hin thi dng h voi tng tu (dng h kim) co hai kim
gio va phut. Su dung ham gettime d ly du liu. Theo thoi gian cac kim chy hin thi
dung hin trng cua dng h may tinh.
7. Vit chng trinh m ta dao dng cua con lc dn.
8. V d thi ham s (x)3x
3
4x
2
-x-1, trong khoang |-4,4| .
199
Bi 15 - N TP
Bi T : "Eng 6u=n
I. Gioi thiu
II. Bai toan va vic giai bai toan trn may tinh
III. Cng cu lp trinh
IV. Tom tt ni dung bai hoc
Bi U. 1gn ng4 lp trnh C2C;;
I. Gioi thiu
II. Mt s khai nim c ban
III. Cu truc chng trinh dn gian trong C
IV. Nhp/Xut du liu
V. Tom tt ni dung bai hoc
VI. Bai tp
Bi V : Bi th<c hnhW (i tr/8ng lp trnh v cc lnh vo2r=
Bi X : >i?u +hi@n Ch'n v 5Ap
I. iu khin chon
II. iu khin lp
III. Tom tt ni dung bai hoc
IV. Bai tp
Bi Y : Bi th<c hnhW Cc c-u tr.c 0i?u +hi@n
Bi Z : (ng[ Con trB v LCu +D t<
I. Mang
II. Con tro
III. Xu ky tu
IV. Tom tt ni dung bai hoc
V. Bai tp
Bi \ : Bi th<c hnhW (ng[ Con trB v 3Cu +D t<
Bi ] : C-u tr.c &4 liu &o ng/8i &Hng t< 0Inh nghJ=
I. Cu truc du liu do ngoi dung tu dinh nghia
II. Kiu ngn xp
III. Kiu hang doi
IV. Tom tt ni dung bai hoc
V. Bai tp
Bi ^ : Bi th<c hnhW C-u tr.c &4 liu &o ng/8i &Hng t< 0Inh nghJ=
Bi T_ : Gm
I. Khai nim
II. Xy dung mt ham
III. Truyn tham s cho ham
IV. K thut d qui
200
V. Tom tt ni dung bai hoc
VI. Bai tp
Bi TT : Bi th<c hnhW Gm
Bi TU : 5m vic vi `il7
I. Mt s khai nim
II. Cac thao tac trn tp tin
III. Truy cp tp tin vn ban
IV. Truy cp tp tin nhi phn
V. Tom tt ni dung bai hoc
VI. Bai tp
Bi TV : >Q G'=
I. Khoi dng d ho
II. Cac ham d ho
III. Xu ly vn ban trn man hinh d ho
IV. Tom tt ni dung bai hoc
V. Bai tp
Bi TX : Bi th<c hnhW 5m vic vi `il7 v "hut ton nCng c=o
201

You might also like