Download as pdf or txt
Download as pdf or txt
You are on page 1of 201

Gio Trnh Lp Trnh Cn Bn

Bin tp bi:
duongvanhieu
Gio Trnh Lp Trnh Cn Bn

Bin tp bi:
duongvanhieu

Cc tc gi:
unknown

Phin bn trc tuyn:


http://voer.edu.vn/c/ab1e3116
MC LC

1. Phn I.Tng quan v mn hc


1.1. Tng quan
1.2. Gii thiu v Cu Trc D Liu V Gii Thut
1.2.1. Mc tiu ca bi hc
1.2.2. Cu trc d liu v gii thut
1.2.3. Bi tp
2. Phn II.Ngn ng Lp trnh C
2.1. Chng I. Gii thiu v ngn ng C & Mi trng TurBo C 3.0
2.1.1. Mc tiu ca bi hc
2.1.2. Tng quan v ngn ng lp trnh C
2.1.3. Mi trng lp trnh Turbo C
2.2. Chng II. Cc thnh phn c bn trong C
2.2.1. Mc tiu bi hc
2.2.2. Kiu d liu s cp chun trong C
2.2.3. Tn v hng trong C
2.2.4. Bin v Biu thc Trong C
2.2.5. Bi tp
2.3. Chng III. Cc cu lnh n trong C
2.3.1. Mc tiu ca bi hc
2.3.2. Cu lnh v cc lnh n trong C
2.3.3. Bi tp v cc cu lnh n trong C
2.4. Chng IV. Cc lnh c cu trc
2.4.1. Mc tiu ca bi hc
2.4.2. Khi lnh trong lp trnh C
2.4.3. Cu trc r nhnh trong lp trnh C
2.4.4. Cu trc la chn
2.4.5. Cu trc vng lp v cc cu lnh c bit
2.4.6. Bi tp
2.5. Chng V. Chng trnh con
2.5.1. Mc tiu bi hc chng trnh con trong lp trnh C
2.5.2. Hm v cch xy dng mt hm
2.5.3. Bi tp
2.6. Chng VI. Kiu mng

1/199
2.6.1. Mc tiu bi hc
2.6.2. Mng 1 chiu v Mng nhiu chiu
2.6.3. Bi tp
2.7. Chng VII. Kiu con tr
2.7.1. Mc tiu bi hc
2.7.2. Kiu d liu con tr
2.7.3. Bi tp
2.8. Chng VIII. Chui k t
2.8.1. Mc tiu ca bi hc
2.8.2. Chui k t v cc thao tc trn chui k t
2.8.3. Bi tp
2.9. Chng IX. Kiu cu trc
2.9.1. Mc tiu ca bi hc
2.9.2. Kiu cu trc v cc thao tc trn kiu cu trc
2.9.3. Bi tp v kiu cu trc
2.10. Chng X. Kiu tp tin
2.10.1. Mc tiu bi hc
2.10.2. Kiu tp tin v cc thao tc trn kiu tp tin
2.10.3. Bi tp
Tham gia ng gp

2/199
Phn I.Tng quan v mn hc
Tng quan
MC CH YU CU

Mn Lp Trnh Cn Bn A cung cp cho sinh vin nhng kin thc c bn v lp trnh


thng qua ngn ng lp trnh C. Mn hc ny l nn tng tip thu hu ht cc mn
hc khc trong chng trnh o to. Mt khc, nm vng ngn ng C l c s pht
trin cc ng dng.

Hc xong mn ny, sinh vin phi nm c cc vn sau:

- Khi nim v ngn ng lp trnh.

- Khi nim v kiu d liu

- Kiu d liu c cu trc (cu trc d liu).

- Khi nim v gii thut

- Ngn ng biu din gii thut.

- Ngn ng s (lu ), s dng lu biu din cc gii thut.

- Tng quan v Ngn ng lp trnh C.

- Cc kiu d liu trong C.

- Cc lnh c cu trc.

- Cch thit k v s dng cc hm trong C.

- Mt s cu trc d liu trong C.

I TNG MN HC

Mn hc lp trnh cn bn c dng ging dy cho cc sinh vin sau:

- Sinh vin nm th 2 chuyn ngnh Tin hc, Ton Tin, L Tin.

3/199
- Sinh vin nm th 2 chuyn ngnh in t (Vin thng, T ng ha)

NI DUNG CT LI

Trong khun kh 45 tit, gio trnh c cu trc thnh 2 phn: Phn 1 gii thiu v lp
trnh cu trc, cc khi nim v lp trnh, gii thut Phn 2 trnh by c h thng v
ngn ng lp trnh C, cc cu lnh, cc kiu d liu

PHN 1: Gii thiu cu trc d liu v gii thut

PHN 2: Gii thiu v mt ngn ng lp trnh - Ngn ng lp trnh C

Chng 1: Gii thiu v ngn ng C & mi trng lp trnh Turbo C

Chng 2: Cc thnh phn ca ngn ng C

Chng 3: Cc kiu d liu s cp chun v cc lnh n

Chng 4: Cc lnh c cu trc

Chng 5: Chng trnh con

Chng 6: Kiu mng

Chng 7: Kiu con tr

Chng 8: Kiu chui k t

Chng 9: Kiu cu trc

Chng 10: Kiu tp tin

KIN THC LIN QUAN

hc tt mn Lp Trnh Cn Bn A, sinh vin cn phi c cc kin thc nn tng sau:

- Kin thc ton hc.

- Kin thc v k nng thao tc trn my tnh.

DANH MC TI LIU THAM KHO

[1] Nguyn Vn Linh, Gio trnh Tin Hc i Cng A, Khoa Cng Ngh Thng Tin,
i hc Cn Th, 1991.

4/199
[2] Nguyn nh T, Hong c Hi , Gio trnh l thuyt v bi tp ngn ng C; Nh
xut bn Gio dc, 1999.

[3] Nguyn Cn, C Tham kho ton din, Nh xut bn ng Nai, 1996.

[4] V Vn Vin, Gip t hc Lp Trnh vi ngn ng C, Nh xut bn ng Nai, 2002.

[5] Brain W. Kernighan & Dennis Ritchie, The C Programming Language, Prentice Hall
Publisher, 1988.

T KHA

Bi ton, chng trnh, gii thut, ngn ng gi, lu , biu thc, gn, r nhnh, lp,
hm, mng, con tr, cu trc, tp tin.

5/199
Gii thiu v Cu Trc D Liu V Gii Thut
Mc tiu ca bi hc

Hc xong chng ny, sinh vin s nm bt c cc vn sau:

- Khi nim v ngn ng lp trnh.

- Khi nim v kiu d liu

- Kiu d liu c cu trc (cu trc d liu).

- Khi nim v gii thut

- Ngn ng biu din gii thut.

- Ngn ng s (lu ), s dng lu biu din cc gii thut.

Trng tm ca phn ny l gii thut & cch biu din gii thut. Chnh nh iu ny ta
mi c th gii quyt cc yu cu bng chng trnh my tnh.

6/199
Cu trc d liu v gii thut

T BI TON N CHNG TRNH

Gi s chng ta cn vit mt chng trnh gii phng trnh bc 2 c dng


ax2 + bx + c = 0 hay vit chng trnh ly cn bc n ca mt s thc m ( nm). Cng
vic u tin l chng ta phi hiu v bit cch gii bi ton bng li gii thng thng
ca ngi lm ton. gii c bi ton trn bng my tnh (lp trnh cho my tnh
gii) th chng ta cn phi thc hin qua cc bc nh:

M t cc bc gii bi ton.
V s x l da trn cc bc.
Da trn s x l vit chng trnh x l bng ngn ng gi (ngn ng
bnh thng ca chng ta).
Chn ngn ng lp trnh v chuyn chng trnh t ngn ng gi sang ngn
ng lp trnh to thnh mt chng trnh hon chnh.
Thc hin chng trnh: nhp vo cc tham s, nhn kt qu.

Trong nhiu trng hp, t bi ton thc t chng ta phi xy dng m hnh ton ri
mi xc nh c cc bc gii. Vn ny s c trnh by chi tit trong mn
Cu Trc D Liu.

GII THUT

Khi nim gii thut

Gii thut l mt h thng cht ch v r rng cc quy tc nhm xc nh mt dy cc


thao tc trn nhng d liu vo sao cho sau mt s hu hn bc thc hin cc thao tc
ta thu c kt qu ca bi ton.

V d 1: Gi s c hai bnh A v B ng hai loi cht lng khc nhau, chng hn bnh A
ng ru, bnh B ng nc mm. Gii thut hon i (swap) cht lng ng trong
hai bnh l:

Yu cu phi c thm mt bnh th ba gi l bnh C.


Bc 1: ru t bnh A sang bnh C.
Bc 2: nc mm t bnh B sang bnh A.
Bc 3: ru t bnh C sang bnh B.

V d 2: Mt trong nhng gii thut tm c chung ln nht ca hai s a v b l:

Bc 1: Nhp vo hai s a v b.

7/199
Bc 2: So snh 2 s a,b chn s nh nht gn cho UCLN.
Bc 3: Nu mt trong hai s a hoc b khng chia ht cho UCLN th thc hin
bc 4, ngc li (c a v b u chia ht cho UCLN) th thc hin bc 5.
Bc 4: Gim UCLN mt n v v quay li bc 3
Bc 5: In UCLN - Kt thc.

Cc c trng ca gii thut

Tnh kt thc: Gii thut phi dng sau mt s hu hn bc.


Tnh xc nh: Cc thao tc my tnh phi thc hin c v cc my tnh khc
nhau thc hin cng mt bc ca cng mt gii thut phi cho cng mt kt
qu.
Tnh ph dng: Gii thut phi "vt' ht cc trng hp v p dng cho mt
lot bi ton cng loi.
Tnh hiu qu: Mt gii thut c nh gi l tt nu n t hai tiu chun
sau:

- Thc hin nhanh, tn t thi gian.

- Tiu ph t ti nguyn ca my, chng hn tn t b nh.

Gii thut tm UCLN nu trn t tnh kt thc bi v qua mi ln thc hin bc 4 th


UCLN s gim i mt n v cho nn trong trng hp xu nht th UCLN=1, gii thut
phi dng. Cc thao tc trnh by trong cc bc, my tnh u c th thc hin c
nn n c tnh xc nh. Gii thut ny cng t tnh ph dng v n c dng tm
UCLN cho hai s nguyen dng a v b bt k. Tuy nhin tnh hiu qu ca gii thut
c th cha cao; c th l thi gian chy my c th cn tn nhiu hn mt s gii thut
khc m chng ta s c dp tr li trong phn lp trnh C.

Ngn ng biu din gii thut

biu din gii thut, cn phi c mt tp hp cc k hiu dng biu din, mi k


hiu biu din cho mt hnh ng no . Tp hp cc k hiu li to thnh ngn
ng biu din gii thut.

Ngn ng t nhin

Ngn ng t nhin l ngn ng ca chng ta ang s dng, chng ta c th s dng


ngn ng t nhin m t gii thut ging nh cc v d trn.

V d: Ta c gii thut gii phng trnh bc nht dng ax+b = 0 nh sau:

Bc 1: Nhn gi tr ca cc tham s a, b

8/199
Bc 2: Xt gi tr ca a xem c bng 0 hay khng? Nu a=0 th lm bc 3,
nu a khc khng th lm bc 4.
Bc 3: (a bng 0) Nu b bng 0 th ta kt lun phng trnh v s nghim, nu
b khc 0 th ta kt lun phng trnh v nghim.
Bc 4: ( a khc 0) Ta kt lun phng trnh c nghim x=-b/a

Ngn ng s (Lu )

Ngn ng s (lu ) l mt ngn ng c bit dng m t gii thut bng cc s


hnh khi. Mi khi qui nh mt hnh ng.

Chng hn ta dng lu biu din gii thut tm UCLN nu trn nh sau:

9/199
Mt s gii thut c bn

V d 1: Cn vit chng trnh cho my tnh sao cho khi thc hin chng trnh , my
tnh yu cu ngi s dng chng trnh nhp vo cc s hng ca tng (n); nhp vo
dy cc s hng ai ca tng. Sau , my tnh s thc hin vic tnh tng cc s ai ny
v in kt qu ca tng tnh c.

Yu cu: Tnh tng n s S=a1+ a2+a3+......+an .

tnh tng trn, chng ta s dng phng php cng tch ly ngha l khi u cho
S=0. Sau mi ln nhn c mt s hng ai t bn phm, ta cng tch ly ai vo S (ly
gi tr c lu tr trong S, cng thm ai v lu tr li vo S). Tip tc qu trnh ny
n khi ta tch ly c an vo S th ta c S l tng cc ai. Chi tit gii thut c m t
bng ngn ng t nhin nh sau:

- Bc 1: Nhp s cc s hng n.

- Bc 2: Cho S=0 (lu tr s 0 trong S)

- Bc 3: Cho i=1 (lu tr s 1 trong i)

- Bc 4: Kim tra nu i<=n th thc hin bc 5, ngc li thc hin bc 8.

- Bc 5: Nhp ai

10/199
- Bc 6: Cho S=S+ai (lu tr gi tr S + ai trong S)

- Bc 7: Tng i ln 1 n v v quay li bc 4.

- Bc 8: In S v kt thc chng trnh.

Ch tit gii thut bng lu :

V d 2: Vit chng trnh cho php nhp vo 2 gi tr a, b mang ngha l cc h s


a, b ca phng trnh bc nht. Da vo cc gi tr a, b cho bit nghim ca phng
trnh bc nht ax + b = 0.

M t gii thut bng ngn ng t nhin:

- Bc 1: Nhp 2 s a v b

- Bc 2: Nu a = 0 th thc hin bc 3, ngc li thc hin bc 4

- Bc 3: Nu b=0 th thng bo phng trnh v s nghim v kt thc chng trnh,


ngc li thng bo phng trnh v nghim v kt thc chng trnh.

- Bc 4: Thng bo nghim ca phng trnh l b/a v kt thc.

11/199
V d 3: Vit chng trnh cho php nhp vo 1 s n, sau ln lt nhp vo n gi tr
a1, a2,,an. Hy tm v in ra gi tr ln nht trong n s a1, a2, , an.

gii quyt bi ton trn, chng ta p dng phng php th v sa. Ban u gi s
a1 l s ln nht (c lu trong gi tr max); sau ln lt xt cc ai cn li, nu ai
no ln hn gi tr max thi lc max s nhn gi tr l ai. Sau khi xt ht cc ai th
max chnh l gi tr ln nht cn tm.

M t gii thut bng ngn ng t nhin:

- Bc 1: Nhp s n

- Bc 2: Nhp s th nht a1

- Bc 3: Gn max=a1

- Bc 4: Gn i=2

- Bc 5: Nu i<=n th thc hin bc 6, ngc li thc hin bc 9

- Bc 6: Nhp ai

- Bc 7: Nu max < ai th gn max=ai.

12/199
- Bc 8: Tng i ln mt n v v quay li bc 5

- Bc 9: In max - kt thc

Phn m t gii thut bng lu , sinh vin t lm xem nh bi tp.

V d 4: Vit chng trnh cho php nhp vo 1 s n, sau ln lt nhp vo n gi tr


a1, a2,,an. Sp theo th t tng dn mt dy n s a1, a2,...an ni trn. C rt nhiu gii
thut gii quyt bi ton ny. Phn trnh by di y l mt phng php.

Gi s ta nhp vo my dy n s a1, a2,..., an. Vic sp xp dy s ny tri qua (n-1)


ln:

- Ln 1: So snh phn t u tin vi tt c cc phn t ng sau phn t u tin. Nu


c phn t no nh hn phn t u tin th i ch phn t u tin vi phn t nh
hn . Sau ln 1, ta c phn t u tin l phn t nh nht.

- Ln 2: So snh phn t th 2 vi tt c cc phn t ng sau phn t th 2. Nu c


phn t no nh hn phn t th 2 th i ch phn t th 2 vi phn t nh hn . Sau
ln 2, ta c phn t u tin v phn t th 2 l ng v tr ca n khi sp xp.

- Ln (n-1): So snh phn t th (n-1) vi phn t ng sau phn t (n-1) l phn t th


n. Nu phn t th n nh hn phn t th (n-1) th i ch 2 phn t ny. Sau ln th
(n-1), ta c danh sch gm n phn t c sp th t.

M t gii thut bng ngn ng t nhin:

- Bc 1: Gn i=1

- Bc 2: Gn j=i+1

- Bc 3: Nu i <=n-1 th thc hin bc 4, ngc li thc hin bc 8

- Bc 4: Nu j <=n th thc hin bc 5, ngc li th thc hin bc 7.

- Bc 5: Nu ai > aj th hon i ai v aj cho nhau (nu khng th thi).

- Bc 6: Tng j ln mt n v v quay li bc 4

- Bc 7: Tng i ln mt n v v quay li bc 3

- Bc 6: In dy s a1, a2,..., an - Kt thc.

13/199
M t gii thut sp xp bng lu

Cc cu trc suy lun c bn ca gii thut

Gii thut c thit k theo ba cu trc suy lun c bn sau y:

Tun t (Sequential):

Cc cng vic c thc hin mt cch tun t, cng vic ny ni tip cng vic kia.

Cu trc la chn (Selection)

La chn mt cng vic thc hin cn c vo mt iu kin no . C mt s dng


nh sau:

- Cu trc 1: Nu < iu kin> (ng) th thc hin <cng vic>

- Cu trc 2: Nu < iu kin> (ng) th thc hin <cng vic 1>, ngc li (iu kin
sai) th thc hin <cng vic 2>

14/199
- Cu trc 3: Trng hp < i> thc hin <cng vic i>

Cu trc lp (Repeating)

Thc hin lp li mt cng vic khng hoc nhiu ln cn c vo mt iu kin no .


C hai dng nh sau:

- Lp xc nh: l loi lp m khi vit chng trnh, ngi lp trnh xc nh c


cng vic s lp bao nhiu ln.

- Lp khng xc nh: l loi lp m khi vit chng trnh ngi lp trnh cha xc nh
c cng vic s lp bao nhiu ln. S ln lp s c xc nh khi chng trnh thc
thi.

Trong mt s trng hp ngi ta cng c th dng cc cu trc ny din t mt gii


thut.

KIU D LIU

Cc s liu lu tr trong my tnh gi l d liu (data). Mi n v d liu thuc mt


kiu d liu no .

Kiu d liu l mt tp hp cc gi tr c cng mt tnh cht v tp hp cc php ton


thao tc trn cc gi tr . Ngi ta chia kiu d liu ra lm 2 loi: kiu d liu s cp
v kiu d liu c cu trc.

Kiu d liu s cp

Kiu d liu s cp l kiu d liu m gi tr ca n l n nht.

V d: Trong ngn ng lp trnh C, kiu int gi l kiu s cp v kiu ny bao gm cc


s nguyn t -32768 n 32767 v cc php ton +, -, *, /, %

Kiu d liu c cu trc

Kiu d liu c cu trc l kiu d liu m cc gi tr ca n l s kt hp ca cc gi


tr khc.

V d : Kiu chui k t trong ngn ng lp trnh C l mt kiu d liu c cu trc.

Cc ngn ng lp trnh u c nhng kiu d liu do ngn ng xy dng sn, m ta


gi l cc kiu chun. Chng hn nh kiu int, char trong C; integer, array trong
Pascal. Ngoi ra, hu ht cc ngn ng u cung cp c ch cho php ngi lp trnh
nh ngha kiu ca ring mnh phc v cho vic vit chng trnh.

15/199
NGN NG LP TRNH

Khi nim ngn ng lp trnh

Ngn ng lp trnh l mt ngn ng dng vit chng trnh cho my tnh. Ta c th


chia ngn ng lp trnh thnh cc loi sau: ngn ng my, hp ng v ngn ng cp cao.

Ngn ng my (machine language): L cc ch th di dng nh phn, can thip trc


tip vo trong cc mch in t. Chng trnh c vit bng ngn ng my th c th
c thc hin ngay khng cn qua bc trung gian no. Tuy nhin chng trnh vit
bng ngn ng my d sai st, cng knh v kh c, kh hiu v ton nhng con s 0
v 1.

Hp ng (assembly language): Bao gm tn cc cu lnh v quy tc vit cc cu lnh


. Tn cc cu lnh bao gm hai phn: phn m lnh (vit ta ting Anh) ch php ton
cn thc hin v a ch cha ton hng ca php ton . V d:

INPUT a ; Nhp gi tr cho a t bn phm

LOAD a ; c gi tr a vo thanh ghi tng A

PRINT a; Hin th gi tr ca a ra mn hnh.

INPUT b

ADD b; Cng gi tr ca thanh ghi tng A vi gi tr b

Trong cc lnh trn th INPUT, LOAD, PRINT, ADD l cc m lnh cn a, b l a ch.


my thc hin c mt chng trnh vit bng hp ng th chng trnh phi
c dch sang ngn ng my. Cng c thc hin vic dch c gi l Assembler.

Ngn ng cp cao (High level language): Ra i v pht trin nhm phn nh cch thc
ngi lp trnh ngh v lm. Rt gn vi ngn ng con ngi (Anh ng) nhng chnh
xc nh ngn ng ton hc. Cng vi s pht trin ca cc th h my tnh, ngn ng
lp trnh cp cao cng c pht trin rt a dng v phong ph, vic lp trnh cho
my tnh v th m cng c nhiu khuynh hng khc nhau: lp trnh cu trc, lp trnh
hng i tng, lp trnh logic, lp trnh hm... Mt chng trnh vit bng ngn ng
cp cao c gi l chng trnh ngun (source programs). my tnh "hiu" v thc
hin c cc lnh trong chng trnh ngun th phi c mt chng trnh dch dch
chung trnh ngun (vit bng ngn ng cp cao) thnh dng chng trnh c kh nng
thc thi.

16/199
Chng trnh dch

Nh trn trnh by, mun chuyn t chng trnh ngun sang chng trnh ch phi
c chng trnh dch. Thng thng mi mt ngn ng cp cao u c mt chng trnh
dch ring nhng chung quy li th c hai cch dch: thng dch v bin dch.

Thng dch (interpreter): L cch dch tng lnh mt, dch ti u thc hin ti .
Chng hn ngn ng LISP s dng trnh thng dch.

Bin dch (compiler): Dch ton b chng trnh ngun thnh chng trnh ch ri sau
mi thc hin. Cc ngn ng s dng trnh bin dch nh Pascal, C...

Gia thng dch v bin dch c khc nhau ch: Do thng dch l va dch va thc
thi chng trnh cn bin dch l dch xong ton b chng trnh ri mi thc thi nn
chng trnh vit bng ngn ng bin dch thc hin nhanh hn chng trnh vit bng
ngn ng thng dch.

Mt s ngn ng s dng kt hp gia thng dch v bin dch chng hn nh Java.


Chng trnh ngun ca Java c bin dch to thnh mt chng trnh i tng (mt
dng m trung gian) v khi thc hin th tng lnh trong chng trnh i tng c
thng dch thnh m my.

17/199
Bi tp

Mc ch yu cu

Lm quen v nm vng cc cch m t gii thut; t ng trc mt bi ton c th,


sinh vin c th m t tht chi tit cc bc gii quyt vn .

Ni dung

Bng ngn ng t nhin v lu , anh (ch) hy m t gii thut cho cc bi ton sau:

1. Gii phng trnh bc 2 dng ax2 + bx + c = 0 vi a, b, c l cc s s nhp t bn phm.

2.Tnh tng bnh phng ca n s nguyn c dng sau: S= a21 + a22 + + a2n, vi n v ai
(i=1..n) l cc s s nhp t bn phm.

3. Tnh tng c dng sau: S= 1 a21 + a22 a23 + + ( 1)na2n, vi n v ai (i=1..n) l cc


s s nhp t bn phm.

4. Trnh by kt qu qua cc bc lp (c m t trn) sp xp dy s sau theo


th t tng dn.

a) 12 13 11 10 10 9 8 7 6 5

b) 11 12 13 14 3 4 5 6 7 11 8

18/199
Phn II.Ngn ng Lp trnh C
Chng I. Gii thiu v ngn ng C & Mi trng TurBo
C 3.0
Mc tiu ca bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

- Tng quan v ngn ng lp trnh C.

- Mi trng lm vic v cch s dng Turbo C 3.0.

19/199
Tng quan v ngn ng lp trnh C

TNG QUAN V NGN NG LP TRNH C

C l ngn ng lp trnh cp cao, c s dng rt ph bin lp trnh h thng cng


vi Assembler v pht trin cc ng dng.

Vo nhng nm cui thp k 60 u thp k 70 ca th k XX, Dennish Ritchie (lm


vic ti phng th nghim Bell) pht trin ngn ng lp trnh C da trn ngn ng
BCPL (do Martin Richards a ra vo nm 1967) v ngn ng B (do Ken Thompson
pht trin t ngn ng BCPL vo nm 1970 khi vit h iu hnh UNIX u tin trn
my PDP-7) v c ci t ln u tin trn h iu hnh UNIX ca my DEC PDP-11.

Nm 1978, Dennish Ritchie v B.W Kernighan cho xut bn quyn Ngn ng lp


trnh C v c ph bin rng ri n nay.

Lc ban u, C c thit k nhm lp trnh trong mi trng ca h iu hnh Unix


nhm mc ch h tr cho cc cng vic lp trnh phc tp. Nhng v sau, vi nhng
nhu cu pht trin ngy mt tng ca cng vic lp trnh, C vt qua khun kh ca
phng th nghim Bell v nhanh chng hi nhp vo th gii lp trnh ri cc cng
ty lp trnh s dng mt cch rng ri. Sau , cc cng ty sn xut phn mm ln lt
a ra cc phin bn h tr cho vic lp trnh bng ngn ng C v chun ANSI C cng
c khai sinh t .

Ngn ng lp trnh C l mt ngn ng lp trnh h thng rt mnh v rt mm do,


c mt th vin gm rt nhiu cc hm (function) c to sn. Ngi lp trnh c
th tn dng cc hm ny gii quyt cc bi ton m khng cn phi to mi. Hn
th na, ngn ng C h tr rt nhiu php ton nn ph hp cho vic gii quyt cc bi
ton k thut c nhiu cng thc phc tp. Ngoi ra, C cng cho php ngi lp trnh
t nh ngha thm cc kiu d liu tru tng khc. Tuy nhin, iu m ngi mi va
hc lp trnh C thng gp rc ri l hi kh hiu do s mm do ca C. D vy,
C c ph bin kh rng ri v tr thnh mt cng c lp trnh kh mnh, c s
dng nh l mt ngn ng lp trnh ch yu trong vic xy dng nhng phn mm hin
nay.

Ngn ng C c nhng c im c bn sau:

Tnh c ng (compact): C ch c 32 t kha chun v 40 ton t chun, nhng


hu ht u c biu din bng nhng chui k t ngn gn.
Tnh cu trc (structured): C c mt tp hp nhng ch th ca lp trnh nh
cu trc la chn, lp T cc chng trnh vit bng C c t chc r
rng, d hiu.

20/199
Tnh tng thch (compatible): C c b tin x l v mt th vin chun v
cng phong ph nn khi chuyn t my tnh ny sang my tnh khc cc
chng trnh vit bng C vn hon ton tng thch.
Tnh linh ng (flexible): C l mt ngn ng rt uyn chuyn v c php, chp
nhn nhiu cch th hin, c th thu gn kch thc ca cc m lnh lm
chng trnh chy nhanh hn.
Bin dch (compile): C cho php bin dch nhiu tp tin chng trnh ring r
thnh cc tp tin i tng (object) v lin kt (link) cc i tng li vi
nhau thnh mt chng trnh c th thc thi c (executable) thng nht.

21/199
Mi trng lp trnh Turbo C

MI TRNG LP TRNH TURBO C

Turbo C l mi trng h tr lp trnh C do hng Borland cung cp. Mi trng ny


cung cp cc chc nng nh: son tho chng trnh, dch, thc thi chng trnh
Phin bn c s dng y l Turbo C 3.0.

Gi Turbo C

Chy Turbo C cng ging nh chy cc chng trnh khc trong mi trng DOS hay
Windows, mn hnh s xut hin menu ca Turbo C c dng nh sau:

Dng trn cng gi l thanh menu (menu bar). Mi mc trn thanh menu li c th c
nhiu mc con nm trong mt menu ko xung.

Dng di cng ghi chc nng ca mt s phm c bit. Chng hn khi g phm F1 th
ta c c mt h thng tr gip m ta c th tham kho nhiu thng tin b ch.

Mun vo thanh menu ngang ta g phm F10. Sau dng cc phm mi tn qua tri
hoc phi di chuyn vng sng ti mc cn chn ri g phm Enter. Trong menu ko
xung ta li dng cc phm mi tn ln xung di chuyn vng sng ti mc cn chn
ri g Enter.

Ta cng c th chn mt mc trn thanh menu bng cch gi phm Alt v g vo mt k


t i din ca mc (k t c mu sc khc vi cc k t khc). Chng hn chn
mc File ta g Alt-F (F l k t i din ca File)

22/199
Son tho chng trnh mi

Mun son tho mt chng trnh mi ta chn mc New trong menu File (File ->New)

Trn mn hnh s xut hin mt vng trng cho ta son tho ni dung ca chng
trnh. Trong qu trnh son tho chng trnh ta c th s dng cc phm sau:

Cc phm xem thng tin tr gip:

- F1: Xem ton b thng tin trong phn tr gip.

- Ctrl-F1: Tr gip theo ng cnh (tc l khi con tr ang trong mt t no o, chng
hn int m bn g phm Ctrl-F1 th bn s c c cc thng tin v kiu d liu int)

Cc phm di chuyn con tr trong vng son tho chng trnh:

Phm ngha Phm tt ( t hp phm)


Enter a con tr xung dng
Mi tn i ln a con tr ln hng trc Ctrl-E
Mi tn i xung a con tr xung hng sau Ctrl-X
Mi tn sang tri a con tr sang tri mt k t Ctrl-S
Mi tn sang phi a con tr sang phi mt k t Ctrl-D
End a con tr n cui dng
Home a con tr n u dng
PgUp a con tr ln trang trc Ctrl-R
PgDn a con tr xung trang sau Ctrl-C
a con tr sang t bn tri Ctrl-A
a con tr sang t bn phi Ctrl-F

Cc phm xo k t/ dng:

Phm ngha Phm tt


Delete Xo k t ti v tr con tr Ctrl-G
BackSpace Di chuyn sang tri ng thi xo k t ng trc con tr Ctrl-H
Xo mt dng cha con tr Ctrl-Y

23/199
Xa t v tr con tr n cui dng Ctrl-Q-Y
Xa k t bn phi con tr Ctrl-T

Cc phm chn k t/ dng:

Insert Thay i vit xen hay vit chng


Ctrl-N Xen mt dng trng vo trc v tr con tr

S dng khi :

Khi l mt on vn bn chng trnh hnh ch nht c xc nh bi u khi l gc


trn bn tri v cui khi l gc di bn phi ca hnh ch nht. Khi mt khi c
xc nh (trn mn hnh khi c mu sc khc ch bnh thng) th ta c th chp khi,
di chuyn khi, xo khi... S dng khi cho php chng ta son tho chng trnh mt
cch nhanh chng. sau y l cc thao tc trn khi:

Phm tt ngha
Ctrl-K-B nh du u khi
Ctrl-K-K nh du cui khi
Ctrl-K-C Chp khi vo sau v tr con tr
Ctrl-K-V Chuyn khi ti sau v tr con tr
Ctrl-K-Y Xo khi
Ctrl-K-W Ghi khi vo a nh mt tp tin
Ctrl-K-R c khi (tp tin) t a vo sau v tr con tr
Ctrl-K-H Tt/m khi
Ctrl-K-T nh du t cha chon tr
Ctrl-K-P In mt khi

Cc phm, phm tt thc hin cc thao tc khc:

Phm ngha Phm tt


Ctrl-K-D, Ctrl-K-
F10 Kch hot menu chnh
Q

24/199
F2 Lu chng trnh ang son vo a Ctrl-K-S
F3 To tp tin mi
Di chuyn con tr mt khong ng thi y dng vn
Tab Ctrl-I
bn
ESC Hy b thao tc lnh Ctrl-U
ng tp tin hin ti Alt-F3
Hin hp thoi tm kim Ctrl-Q-F
Hin hp thoi tm kim v thay th Ctrl-Q-A
Tm kim tip tc Ctrl-L

V d: Bn hy g on chng trnh sau:

#include <stdio.h>

#include<conio.h>

int main ()

char ten[50];

printf(Xin cho biet ten cua ban !);

scanf(%s,ten);

printf(Xin chao ban %s,ten);

getch();

return 0;

Ghi chng trnh ang son tho vo a

S dng File/Save hoc g phm F2. C hai trng hp xy ra:

- Nu chng trnh cha c ghi ln no th mt hi thoi s xut hin cho php bn


xc nh tn tp tin (FileName). Tn tp tin phi tun th quy cch t tn ca DOS v

25/199
khng cn c phn m rng (s t ng c phn m rng l .C hoc .CPP s ni thm
trong phn Option). Sau g phm Enter.

- Nu chng trnh c ghi mt ln ri th n s ghi nhng thay i b sung ln tp


tin chng trnh c.

Ch : phng mt in trong khi son tho chng trinh thnh thong bn nn g


phm F2.

Quy tc t tn tp tin ca DOS: Tn ca tp tin gm 2 phn: Phn tn v phn m


rng.

Phn tn ca tp tin phi bt u l 1 k t t a..z (khng phn bit hoa


thng), theo sau c th l cc k t t a..z, cc k s t 0..9 hay du gch di
(_), phn ny di ti a l 8 k t.
Phn m rng: phn ny di ti a 3 k t.

V d: Ghi chng trnh va son tho trn ln a vi tn l CHAO.C

Thc hin chng trnh

thc hin chng trnh hy dng Ctrl-F9 (gi phm Ctrl v g phm F9).

V d: Thc hin chng trnh va son tho xong v quan st trn mn hnh thy kt
qu ca vic thc thi chng trnh sau g phm bt k tr li vi Turbo.

M mt chng trnh c trn a

Vi mt chng trnh c trn a, ta c th m n ra thc hin hoc sa cha b


sung. m mt chng trnh ta dng File/Open hoc g phm F3. Sau g tn tp
tin vo hp File Name hoc la chn tp tin trong danh sch cc tp tin ri g Enter.

V d: M tp tin CHAO.C sau b sung c chng trnh mi nh sau:

#include <stdio.h>

#include<conio.h>

int main ()

char ten[50];

26/199
printf(Xin cho biet ten cua ban !);

scanf(%s,ten);

printf(Xin chao ban %s\n ,ten);

printf(Chao mung ban den voi Ngon ngu lap trinh C);

getch();

return 0;

Ghi li chng trnh ny (F2) v cho thc hin (Ctrl-F9). Hy so snh xem c g khc
trc?

27/199
Chng II. Cc thnh phn c bn trong C
Mc tiu bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

B ch vit trong C.
Cc t kha.
Danh biu.
Cc kiu d liu
Bin v cc biu thc trong C.
Cu trc ca mt chng trnh vit bng ngn ng lp trnh C

28/199
Kiu d liu s cp chun trong C

CC KIU D LIU S CP CHUN TRONG C

Cc kiu d liu s cp chun trong C c th c chia lm 2 dng : kiu s nguyn,


kiu s thc.

Kiu s nguyn

Kiu s nguyn l kiu d liu dng lu cc gi tr nguyn hay cn gi l kiu m


c. Kiu s nguyn trong C c chia thnh cc kiu d liu con, mi kiu c mt
min gi tr khc nhau

Kiu s nguyn 1 byte (8 bits)

Kiu s nguyn mt byte gm c 2 kiu sau:

STT Kiu d liu Min gi tr (Domain)


1 unsigned char T 0 n 255 (tng ng 256 k t trong bng m ASCII)
2 char T -128 n 127

Kiu unsigned char: lu cc s nguyn dng t 0 n 255.

=> khai bo mt bin l kiu k t th ta khai bo bin kiu unsigned char. Mi s


trong min gi tr ca kiu unsigned char tng ng vi mt k t trong bng m ASCII
.

Kiu char: lu cc s nguyn t -128 n 127. Kiu char s dng bit tri nht lm
bit du.

=> Nu gn gi tr > 127 cho bin kiu char th gi tr ca bin ny c th l s m (?).

Kiu s nguyn 2 bytes (16 bits)

Kiu s nguyn 2 bytes gm c 4 kiu sau:

STT Kiu d liu Min gi tr (Domain)


1 enum T -32,768 n 32,767
2 unsigned int T 0 n 65,535

29/199
3 short int T -32,768 n 32,767
4 int T -32,768 n 32,767

Kiu enum, short int, int : Lu cc s nguyn t -32768 n 32767. S dng bit bn tri
nht lm bit du.

=> Nu gn gi tr >32767 cho bin c 1 trong 3 kiu trn th gi tr ca bin ny c th


l s m.

Kiu unsigned int: Kiu unsigned int lu cc s nguyn dng t 0 n 65535.

Kiu s nguyn 4 byte (32 bits)

Kiu s nguyn 4 bytes hay cn gi l s nguyn di (long) gm c 2 kiu sau:

STT Kiu d liu Min gi tr (Domain)


1 unsigned long T 0 n 4,294,967,295
2 long T -2,147,483,648 n 2,147,483,647

Kiu long : Lu cc s nguyn t -2147483658 n 2147483647. S dng bit bn tri


nht lm bit du.

=> Nu gn gi tr >2147483647 cho bin c kiu long th gi tr ca bin ny c th l


s m.

Kiu unsigned long: Kiu unsigned long lu cc s nguyn dng t 0 n 4294967295

Kiu s thc

Kiu s thc dng lu cc s thc hay cc s c du chm thp phn gm c 3 kiu


sau:

STT Kiu d liu Kch thc (Size) Min gi tr (Domain)


1 float 4 bytes T 3.4 * 10-38 n 3.4 * 1038
2 double 8 bytes T 1.7 * 10-308 n 1.7 * 10308
3 long double 10 bytes T 3.4 *10-4932 n 1.1 *104932

Mi kiu s thc trn u c min gi tr v chnh xc (s s l) khc nhau. Ty


vo nhu cu s dng m ta c th khai bo bin thuc 1 trong 3 kiu trn.

30/199
Ngoi ra ta cn c kiu d liu void, kiu ny mang ngha l kiu rng khng cha gi
tr g c.

31/199
Tn v hng trong C

Tn (danh biu)

Tn hay cn gi l danh biu (identifier) c dng t cho chng trnh, hng, kiu,
bin, chng trnh con... Tn c hai loi l tn chun v tn do ngi lp trnh t.

Tn chun l tn do C t sn nh tn kiu: int, char, float,; tn hm: sin, cos...

Tn do ngi lp trnh t t dng trong chng trnh ca mnh. S dng b ch ci,


ch s v du gch di (_) t tn, nhng phi tun th quy tc:

Bt u bng mt ch ci hoc du gch di.


Khng c khong trng gia tn.
Khng c trng vi t kha.
di ti a ca tn l khng gii hn, tuy nhin ch c 31 k t u tin l c
ngha.
Khng cm vic t tn trng vi tn chun nhng khi ngha ca tn
chun khng cn gi tr na.

V d: tn do ngi lp trnh t: Chieu_dai, Chieu_Rong, Chu_Vi, Dien_Tich

Tn khng hp l: Do Dai, 12A2,

Hng (Constant)

L i lng khng i trong sut qu trnh thc thi ca chng trnh.

Hng c th l mt chui k t, mt k t, mt con s xc nh. Chng c th c biu


din hay nh dng (Format) vi nhiu dng thc khc nhau.

Hng s thc

S thc bao gm cc gi tr kiu float, double, long double c th hin theo 2 cch
sau:

- Cch 1: S dng cch vit thng thng m chng ta s dng trong cc mn Ton,
L, iu cn lu l s dng du thp phn l du chm (.);

V d: 123.34 -223.333 3.00 -56.0

32/199
- Cch 2: S dng cch vit theo s m hay s khoa hc. Mt s thc c tch lm 2
phn, cch nhau bng k t e hay E

Phn gi tr: l mt s nguyn hay s thc c vit theo cch 1.

Phn m: l mt s nguyn

Gi tr ca s thc l: Phn gi tr nhn vi 10 m phn m.

V d: 1234.56e-3 = 1.23456 (l s 1234.56 * 10-3)

-123.45E4 = -1234500 ( l -123.45 *104)

Hng s nguyn

S nguyn gm cc kiu int (2 bytes) , long (4 bytes) c th hin theo nhng cch
sau.

- Hng s nguyn 2 bytes (int) h thp phn: L kiu s m chng ta s dng thng
thng, h thp phn s dng cc k s t 0 n 9 biu din mt gi tr nguyn.

V d: 123 ( mt trm hai mi ba), -242 ( tr hai trm bn mi hai).

- Hng s nguyn 2 byte (int) h bt phn: L kiu s nguyn s dng 8 k s t 0 n


7 biu din mt s nguyn.

Cch biu din: 0<cc k s t 0 n 7>

V d : 0345 (s 345 trong h bt phn)

-020 (s -20 trong h bt phn)

Cch tnh gi tr thp phn ca s bt phn nh sau:

S bt phn : 0dndn-1dn-2d1d0 ( di c gi tr t 0 n 7)

=> Gi tr thp phn= ni = 0 di 8i

0345=229 , 020=16

- Hng s nguyn 2 byte (int) h thp lc phn: L kiu s nguyn s dng 10 k s t


0 n 9 v 6 k t A, B, C, D, E ,F biu din mt s nguyn.

K t gi tr

33/199
A 10

B 11

C 12

D 13

E 14

F 15

Cch biu din: 0x<cc k s t 0 n 9 v 6 k t t A n F>

V d:

0x345 (s 345 trong h 16)

0x20 (s 20 trong h 16)

0x2A9 (s 2A9 trong h 16)

Cch tnh gi tr thp phn ca s thp lc phn nh sau:

S thp lc phn : 0xdndn-1dn-2d1d0 ( di t 0 n 9 hoc A n F)

=> Gi tr thp phn= ni = 0 di 16i

0x345=827 , 0x20=32 , 0x2A9= 681

- Hng s nguyn 4 byte (long): S long (s nguyn di) c biu din nh s int trong
h thp phn v km theo k t l hoc L. Mt s nguyn nm ngoi min gi tr ca s
int ( 2 bytes) l s long ( 4 bytes).

V d: 45345L hay 45345l hay 45345

- Cc hng s cn li: Vit nh cch vit thng thng (khng c du phn cch gia 3
s)

V d:

12 (mi hai)

12.45 (mi hai chm 45)

34/199
1345.67 (mt ba trm bn mi lm chm su mi by)

Hng k t

Hng k t l mt k t ring bit c vit trong cp du nhy n (). Mi mt k t


tng ng vi mt gi tr trong bng m ASCII. Hng k t cng c xem nh tr s
nguyn.

V d: a, A, 0, 9

Chng ta c th thc hin cc php ton s hc trn 2 k t (thc cht l thc hin php
ton trn gi tr ASCII ca chng)

Hng chui k t

Hng chui k t l mt chui hay mt xu k t c t trong cp du nhy kp ().

V d: Ngon ngu lap trinh C, Khoa CNTT-DHCT, NVLinh-DVHieu

Ch :

1. Mt chui khng c ni dung c gi l chui rng.

2. Khi lu tr trong b nh, mt chui c kt thc bng k t NULL (\0: m Ascii


l 0).

3. biu din k t c bit bn trong chui ta phi thm du \ pha trc.

V d: Im a student phi vit I\m a student

Day la ky tu dac biet phi vit Day la ky tu \dac biet\

35/199
Bin v Biu thc Trong C

BIN V BIU THC

Bin

Bin l mt i lng c ngi lp trnh nh ngha v c t tn thng qua vic


khai bo bin. Bin dng cha d liu trong qu trnh thc hin chng trnh v gi
tr ca bin c th b thay i trong qu trnh ny. Cch t tn bin ging nh cch t
tn ni trong phn trn.

Mi bin thuc v mt kiu d liu xc nh v c gi tr thuc kiu .

C php khai bo bin:

<Kiu d liu> Danh sch cc tn bin cch nhau bi du phy;

V d:

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 : kt thc 1 lnh phi c du chm phy (;) cui lnh.

V tr khai bo bin trong C

Trong ngn ng lp trnh C, ta phi khai bo bin ng v tr. Nu khai bo (t cc


bin) khng ng v tr s dn n nhng sai st ngoi mun m ngi lp trnh khng
lng trc (hiu ng l). Chng ta c 2 cch t v tr ca bin nh sau:

a)Khai bo bin ngoi: Cc bin ny c t bn ngoi tt c cc hm v n c tc


dng hay nh hng n ton b chng trnh (cn gi l bin ton cc).

V d:

int i; /*Bien ben ngoai */

float pi; /*Bien ben ngoai*/

36/199
int main()

{}

b)Khai bo bin trong: Cc bin c t bn trong hm, chng trnh chnh hay mt
khi lnh. Cc bin ny ch c tc dng hay nh hng n hm, chng trnh hay khi
lnh cha n. Khi khai bo bin, phi t cc bin ny u ca khi lnh, trc cc
lnh gn,

V d 1:

#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*/

clrscr();

i=1; j=2;

bienngoai=3;

printf("\n Gia7 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;

V d 2:

#include <stdio.h>

37/199
#include<conio.h>

int main ()

{ int i, j; /*Bien ben trong*/

clrscr();

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;

Biu thc

Biu thc l mt s kt hp gia cc ton t (operator) v cc ton hng (operand) theo


ng mt trt t nht nh.

38/199
Mi ton hng c th l mt hng, mt bin hoc mt biu thc khc.

Trong trng hp, biu thc c nhiu ton t, ta dng cp du ngoc n () ch nh


ton t no c thc hin trc.

V d: Biu thc nghim ca phng trnh bc hai:

(-b + sqrt(Delta))/(2*a)

Trong 2 l hng; a, b, Delta l bin.

Cc ton t s hc

Trong ngn ng C, cc ton t +, -, *, / lm vic tng t nh khi chng lm vic trong


cc ngn ng khc. Ta c th p dng chng cho a s kiu d liu c sn c cho
php bi C. Khi ta p dng php / cho mt s nguyn hay mt k t, bt k phn d no
cng b ct b. Chng hn, 5/2 bng 2 trong php chia nguyn.

Ton t ngha
+ Cng
- Tr
* Nhn
/ Chia
% Chia ly phn d
-- Gim 1 n v
++ Tng 1 n v

Tng v gim (++ & --)

Ton t ++ thm 1 vo ton hng ca n v tr bt 1. Ni cch khc:

x = x + 1 ging nh ++x

x = x 1 ging nh x

C 2 ton t tng v gim u c th tin t (t trc) hay hu t (t sau) ton hng.


V d: x = x + 1 c th vit x++ (hay ++x)

39/199
Tuy nhin gia tin t v hu t c s khc bit khi s dng trong 1 biu thc. Khi 1
ton t tng hay gim ng trc ton hng ca n, C thc hin vic tng hay gim
trc khi ly gi tr dng trong biu thc. Nu ton t i sau ton hng, C ly gi tr ton
hng trc khi tng hay gim n. Tm li:

x = 10

y = ++x //y = 11

Tuy nhin:

x = 10

x = x++ //y = 10

Th t u tin ca cc ton t s hc:

++ -- sau l * / % ri mi n + -

Cc ton t quan h v cc ton t Logic

tng chnh ca ton t quan h v ton t Logic l ng hoc sai. Trong C mi gi


tr khc 0 c gi l ng, cn sai l 0. Cc biu thc s dng cc ton t quan h v
Logic tr v 0 nu sai v tr v 1 nu ng.

Ton t ngha
Cc ton t quan h
> Ln hn
>= Ln hn hoc bng
< Nh hn
<= Nh hn hoc bng
== Bng
!= Khc
Cc ton t Logic
&& AND
|| OR
! NOT

40/199
Bng chn tr cho cc ton t 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

Cc ton t quan h v Logic u c u tin thp hn cc ton t s hc. Do mt


biu thc nh: 10 > 1+ 12 s c xem l 10 > (1 + 12) v kt qu l sai (0).

Ta c th kt hp vi ton t li vi nhau thnh biu thc nh sau:

10>5&&!(10<9)||3<=4 Kt qu l ng

Th t u tin ca cc ton t quan h l Logic

Cao nht: !

> >= < <=

== !=

&&

Thp nht: ||

Cc ton t Bitwise:

Cc ton t Bitwise ni n kim tra, gn hay s thay i cc Bit tht s trong 1 Byte
ca Word, m trong C chun l cc kiu d liu v bin char, int. Ta khng th s dng
cc ton t Bitwise vi d liu thuc cc kiu float, double, long double, void hay cc
kiu phc tp khc.

Ton t ngha
& AND
| OR
^ XOR

41/199
~ NOT
>> Dch phi
<< Dch tri

Bng chn tr ca ton t ^ (XOR)

p q p^q
0 0 0
0 1 1
1 0 1
1 1 0

Ton t ? cng vi :

C c mt ton t rt mnh v thch hp thay th cho cc cu lnh ca If-Then-Else.


C php ca vic s dng ton t ? l:

E1 ? E2 : E3

Trong E1, E2, E3 l cc biu thc.

ngha: Trc tin E1 c c lng, nu ng E2 c c lng v n tr thnh


gi tr ca biu thc; nu E1 sai, E2 c c lng v tr thnh gi tr ca biu thc.

V d:

X = 10

Y = X > 9 ? 100 : 200

Th Y c gn gi tr 100, nu X nh hn 9 th Y s nhn gi tr l 200. on m ny


tng ng cu trc if nh sau:

X = 10

if (X < 9) Y = 100

else Y = 200

42/199
Ton t con tr & v *

Mt con tr l a ch trong b nh ca mt bin. Mt bin con tr l mt bin c


khai bo ring cha mt con tr n mt i tng ca kiu ch ra n. Ta s tm
hiu k hn v con tr trong chng v con tr. y, chng ta s cp ngn gn n
hai ton t c s dng thao tc vi cc con tr.

Ton t th nht l &, l mt ton t quy c tr v a ch b nh ca h s ca n.

V d: m = &count

t vo bin m a ch b nh ca bin count.

Chng hn, bin count v tr b nh 2000, gi s count c gi tr l 100. Sau cu lnh


trn m s nhn gi tr 2000.

Ton t th hai l *, l mt b sung cho &; y l mt ton t quy c tr v gi tr ca


bin c cp pht ti a ch theo sau .

V d: q = *m

S t gi tr ca count vo q. By gi q s c gi tr l 100 v 100 c lu tr ti a


ch 2000.

Ton t du phy ,

Ton t du , c s dng kt hp cc biu thc li vi nhau. Bn tri ca ton t


du , lun c xem l kiu void. iu c ngha l biu thc bn phi tr thnh gi
tr ca tng cc biu thc c phn cch bi du phy.

V d: x = (y=3,y+1);

Trc ht gn 3 cho y ri gn 4 cho x. Cp du ngoc n l cn thit v ton t du , c


u tin thp hn ton t gn.

Xem cc du ngoc n v cp du ngoc vung l ton t

Trong C, cp du ngoc n l ton t tng u tin ca cc biu thc bn trong


n.

Cc cp du ngoc vung thc hin thao tc truy xut phn t trong mng.

Tng kt v u tin

43/199
Cao nht () []
! ~ ++ -- (Kiu) * &
*/%
+-
<< >>
< <= > >=
&
^
|
&&
||
?:
= += -= *= /=
Thp nht ,

VI.2.9 Cch vit tt trong C

C nhiu php gn khc nhau, i khi ta c th s dng vit tt trong C na. Chng hn:

x = x + 10 c vit thnh x +=10

Ton t += bo cho chng trnh dch bit tng gi tr ca x ln 10.

Cch vit ny lm vic trn tt c cc ton t nh phn (php ton hai ngi) ca C. Tng
qut:

(Bin) = (Bin) (Ton t) (Biu thc)

c th c vit:

(Bin) (Ton t)= (Biu thc)

44/199
Bi tp

BI TP

Bi 1: Biu din cc hng s nguyn 2 byte sau y di dng s nh phn, bt phn,


thp lc phn

a)12 b) 255 c) 31000 d) 32767 e) -32768

Bi 2: Biu din cc hng k t sau y di dng s nh phn, bt phn.

a) A b) a c) Z d) z

45/199
Chng III. Cc cu lnh n trong C
Mc tiu ca bi hc

Hc xong chng ny, sinh vin s nm r cc vn sau:

Cu lnh l g?
Cch s dng cu lnh gn gi tr ca mt biu thc cho mt bin.
Cch s dng lnh scanf nhp gi tr cho bin.
Cch s dng lnh printf xut gi tr ca biu thc ln mn hnh v cch
nh dng d liu.

46/199
Cu lnh v cc lnh n trong C

CU LNH

Khi nim cu lnh

Mt cu lnh (statement) xc nh mt cng vic m chng trnh phi thc hin x


l d liu c m t v khai bo. Cc cu lnh c ngn cch vi nhau bi du
chm phy (;).

Phn loi

C hai loi lnh: lnh n v lnh c cu trc.

Lnh n l mt lnh khng cha cc lnh khc. Cc lnh n gm: lnh gn, cc cu
lnh nhp xut d liu

Lnh c cu trc l lnh trong cha cc lnh khc. Lnh c cu trc bao gm: cu
trc iu kin r nhnh, cu trc iu kin la chn, cu trc lp v cu trc lnh hp
thnh. Lnh hp thnh (khi lnh) l mt nhm bao gm nhiu khai bo bin v cc lnh
c gom vo trong cp du {}.

CC LNH N

Lnh gn

Lnh gn (assignment statement) dng gn gi tr ca mt biu thc cho mt bin.

C php: <Tn bin> = <biu thc>

V d:

int main() {

int x,y;

x =10; /*Gn hng s 10 cho bin x*/

y = 2*x; /*Gn gi tr 2*x=2*10=20 cho x*/

return 0;

47/199
Nguyn tc khi dng lnh gn l kiu ca bin v kiu ca biu thc phi ging nhau,
gi l c s tng thch gia cc kiu d liu. Chng hn v d sau cho thy mt s
khng tng thch v kiu:

int main() {

int x,y;

x = 10; /*Gn hng s 10 cho bin x*/

y = Xin chao;

/*y c kiu int, cn Xin chao c kiu char* */

return 0;

Khi bin dch chng trnh ny, C s bo li "Cannot convert char * to int" tc
l C khng th t ng chuyn i kiu t char * (chui k t) sang int.

Tuy nhin trong a s trng hp s t ng bin i kiu s tng thch v kiu


s c thc hin. V d:

int main() {

int x,y;

float r;

char ch;

r = 9000;

x = 10; /* Gn hng s 10 cho bin x */

y = 'd'; /* y c kiu int, cn d c kiu char*/

r = 'e'; /* r c kiu float, e c kiu char*/

ch = 65.7; /* ch c kiu char, cn 65.7 c kiu float*/

return 0;

48/199
}

Trong nhiu trng hp to ra s tng thch v kiu, ta phi s dng n cch


thc chuyn i kiu mt cch tng minh. C php ca php ton ny nh sau:

(Tn kiu) <Biu thc>

Chuyn i kiu ca <Biu thc> thnh kiu mi <Tn kiu>. Chng hn nh:

float f;

f = (float) 10 / 4; /* f lc ny l 2.5*/

Ch :

- Khi mt biu thc c gn cho mt bin th gi tr ca n s thay th gi tr c m


bin lu gi trc .

- Trong cu lnh gn, du = l mt ton t; do n c th c s dng l mt thnh


phn ca biu thc. Trong trng hp ny gi tr ca biu thc gn chnh l gi tr ca
bin.

V d:

int x, y;

y = x = 3; /* y lc ny cng bng 3*/

- Ta c th gn tr cho bin lc bin c khai bo theo cch thc sau:

<Tn kiu> <Tn bin> = <Biu thc>;

V d: int x = 10, y=x;

Lnh nhp gi tr t bn phm cho bin (hm scanf)

L hm cho php c d liu t bn phm v gn cho cc bin trong chng trnh khi
chng trnh thc thi. Trong ngn ng C, l hm scanf nm trong th vin stdio.h.

C php:

scanf(Chui nh dng, a ch ca cc bin);

Gii thch:

49/199
- Chui nh dng: dng qui nh kiu d liu, cch biu din, rng, s ch s
thp phn... Mt s nh dng khi nhp kiu s nguyn, s thc, k t.

nh
ngha
dng
%[s
k Nhp s nguyn c ti a <s k s>
s]d
%[s
k s] Nhp s thc c ti a <s k s> tnh c du chm
f
%c Nhp mt k t
V d:
%d Nhp s nguyn
Nhp s nguyn ti a 4 k s, nu nhp nhiu hn 4 k s th ch nhn c
%4d
4 k s u tin
%f Nhp s thc
Nhp s thc ti a 6 k s (tnh lun du chm), nu nhp nhiu hn 6 k
%6f
s th ch nhn c 6 k s u tin (hoc 5 k s vi du chm)

- a ch ca cc bin: l a ch (&) ca cc bin m chng ta cn nhp gi tr cho n.


c vit nh sau: &<tn bin>.

V d:

scanf(%d,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/

scanf(%f,&bien2); /*Doc gia tri cho bien2 co kieu thc*/

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*/

Lu :

50/199
Chui nh dng phi t trong cp du nhy kp ().
Cc bin (a ch bin) phi cch nhau bi du phy (,).
C bao nhiu bin th phi c by nhiu nh dng.
Th t ca cc nh dng phi ph hp vi th t ca cc bin.
nhp gi tr kiu char c chnh xc, nn dng hm fflush(stdin) loi b
cc k t cn nm trong vng m bn phm trc hm scanf().
nhp vo mt chui k t (khng cha khong trng hay kt thc bng
khong trng), chng ta phi khai bo kiu mng k t hay con tr k t, s
dng nh dng %s v tn bin thay cho a ch bin.
c vo mt chui k t c cha khong trng (kt thc bng phm Enter)
th phi dng hm gets().

V d:

int biennguyen;

float bienthuc;

char bienchar;

char chuoi1[20], *chuoi2;

Nhp gi tr cho cc bin:

scanf(%3d,&biennguyen);

Nu ta nhp 1234455 th gi tr ca biennguyen l 3 k s u tin (123). Cc k s cn


li s cn nm li trong vng m.

scanf(%5f,&bienthuc);

Nu ta nhp 123.446 th gi tr ca bienthuc l 123.4, cc k s cn li s cn nm trong


vng m.

scanf(%2d%5f,&biennguyen, &bienthuc);

Nu ta nhp lin tip 2 s cch nhau bi khong trng nh sau: 1223 3.142325

- 2 k s u tin (12) s c c vo cho biennguyen.

- 2 k s tip theo trc khong trng (23) s c c vo cho bienthuc.

scanf(%2d%5f%c,&biennguyen, &bienthuc,&bienchar)

51/199
Nu ta nhp lin tip 2 s cch nhau bi khong trng nh sau: 12345 3.142325:

- 2 k s u tin (12) s c c vo cho biennguyen.

- 3 k s tip theo trc khong trng (345) s c c vo cho bienthuc.

- Khong trng s c c cho bienchar.

Nu ta ch nhp 1 s gm nhiu k s nh sau: 123456789:

- 2 k s u tin (12) s c c vo cho biennguyen.

- 5 k s tip theo (34567) s c c vo cho bienthuc.

- bienchar s c gi tr l k s tip theo 8.

scanf(%s,chuoi1); hoc scanf(%s,chuoi2)

Nu ta nhp chui nh sau: Nguyen Van Linh ? th gi tr ca bin chuoi1 hay chuoi2
ch l Nguyen .

scanf(%s%s,chuoi1, chuoi2);

Nu ta nhp chui nh sau: Duong Van Hieu ? th gi tr ca bin chuoi1 l Duong v


gi tr ca bin chuoi2 l Van.

V sao nh vy? C s c t u n khi gp khong trng v gn gi tr cho bin


u tin, phn cn li sau khong trng l gi tr ca cc bin tip theo.

gets(chuoi1);

Nu nhp chui : Nguyen Van Linh ? th gi tr ca bin chuoi1 l Nguyen Van Linh

Lnh xut gi tr ca biu thc ln mn hnh (hm printf)

Hm printf (nm trong th vin stdio.h) dng xut gi tr ca cc biu thc ln mn


hnh.

C php:

printf(Chui nh dng , Cc biu thc);

Gii thch:

52/199
- Chui nh dng: dng qui nh kiu d liu, cch biu din, rng, s ch s
thp phn... Mt s nh dng khi i vi s nguyn, s thc, k t.

nh dng ngha
%d Xut s nguyn
%[.s ch s thp Xut s thc c <s ch s thp phn> theo quy tc lm trn
phn] f s.
%o Xut s nguyn h bt phn
%x Xut s nguyn h thp lc phn
%c Xut mt k t
%s Xut chui k t
%e hoc %E hoc %g
Xut s nguyn dng khoa hc (nhn 10 m x)
hoc %G
V d
%d In ra s nguyn
In s nguyn ti a 4 k s, nu s cn in nhiu hn 4 k s
%4d
th in ht
%f In s thc
In s thc ti a 6 k s (tnh lun du chm), nu s cn in
%6f
nhiu hn 6 k s th in ht
In s thc c 3 s l, nu s cn in c nhiu hn 3 s l th
%.3f
lm trn.

- Cc biu thc: l cc biu thc m chng ta cn xut gi tr ca n ln mn hnh, mi


biu thc phn cch nhau bi du phy (,).

V d:

include<stdio.h>

int main(){

int bien_nguyen=1234, i=65;

float bien_thuc=123.456703;

53/199
printf(Gia tri nguyen cua bien nguyen =%d\n,bien_nguyen);

printf(Gia tri thuc cua bien thuc =%f\n,bien_thuc);

printf(Truoc khi lam tron=%f \n

Sau khi lam tron=%.2f,bien_thuc, bien_thuc);

return 0;

Kt qu in ra mn hnh nh sau:

Nu ta thm vo dng sau trong chng trnh:

printf(\n Ky tu co ma ASCII %d la %c,i,i);

Kt qu ta nhn c thm:

printf( So nguyen la %d \n So thuc la %f,i, (float)i );

printf(\n So thuc la %f \n So nguyen la %d,bien_thuc,

(int)bien_thuc);

printf(\n Viet binh thuong =%f \n Viet kieu khoa

hoc=%e,bien_thuc, bien_thuc);

Kt qu in ra mn hnh:

54/199
Lu : i vi cc k t iu khin, ta khng th s dng cch vit thng thng
hin th chng.

K t iu khin l cc k t dng iu khin cc thao tc xut, nhp d liu.

Mt s k t iu khin c m t trong bng:

K t Gi tr
iu thp lc K t c hin th ngha
khin phn
\a 0x07 BEL Pht ra ting chung
Di chuyn con tr sang tri 1 k t
\b 0x08 BS
v xa k t bn tri (backspace)
\f 0x0C FF Sang trang
\n 0x0A LF Xung dng
\r 0x0D CR Tr v u dng
\t 0x09 HT Tab theo ct (ging g phm Tab)
\\ 0x5C \ Du \
\ 0x2C Du nhy n ()
\ 0x22 Du nhy kp ()
\? 0x3F ? u chm hi (?)
K t c m ACSII trong
\ddd ddd
h bt phn l s ddd
K t c m ACSII trong
\xHHH oxHHH
h thp lc phn l HHH

V d:

#include <stdio.h>

#include<conio.h>

int main ()

55/199
{ clrscr();

printf("\n Tieng Beep \a");

printf("\n Doi con tro sang trai 1 ky tu\b");

printf("\n Dau Tab \tva dau backslash \\");

printf("\n Dau nhay don \' va dau nhay kep \"");

printf("\n Dau cham hoi \?");

printf("\n Ky tu co ma bat phan 101 la \101");

printf("\n Ky tu co ma thap luc phan 41 la \x041");

printf("\n Dong hien tai, xin go enter");

getch();

printf("\rVe dau dong");

getch();

return 0;

Kt qu trc khi g phm Enter:

Kt qu sau khi g phm Enter:

56/199
57/199
Bi tp v cc cu lnh n trong C

Mc ch yu cu

Lm quen v nm vng cc lnh n gin (printf, scanf), cc kiu d liu chun (int,
long, char, float...), cc php ton v cc hm chun ca ngn ng lp trnh C. Thc hin
vit cc chng trnh hon chnh s dng cc lnh n gin v cc kiu d liu chun
.

Ni dung

1. Vit chng trnh in ln mn hnh mt thip mi d sinh nht c dng:

*******************************************

THIEP MOI

Thn mi bn : Nguyn Mnh Hng

Ti d l sinh nht ca mnh

Vo lc 19h ngy 12/10/2005

Ti 05/42 Trn Ph - Cn Th

Rt mong c n tip !

H Thu Hng

*******************************************

2. Vit chng trnh nhp vo bn knh r ca mt hnh trn. Tnh chu vi v din tch ca
hnh trn theo cng thc :

Chu vi CV = 2*Pi*r

Din tch S = Pi*r*r

In cc kt qu ln mn hnh

3. Vit chng trnh nhp vo di 3 cnh a, b, c ca mt tam gic. Tnh chu vi v


din tch ca tam gic theo cng thc:

58/199
Chu vi CV = a+b+c

Din tch S = sqrt(p*(p-a)*(p-b)*(p-c))

Trong : p=CV/2

In cc kt qu ln mn hnh

4. Vit chng trnh tnh logax vi a, x l cc s thc nhp vo t bn phm, v x>0,


a>0, a != 1.( dng logax=lnx/lna)

5. Vit chng trnh nhp vo ta ca hai im (x1, y1) v (x2, y2)

a) Tnh h s gc ca ng thng i qua hai im theo cng thc:

H s gc = (y2 - y1) /(x2 - x1)

b) Tnh khong cch gia hai im theo cng thc:

Khong cch = (y2 y1) + (x2 x1)


2 2

6. Vit chng trnh nhp vo mt k t:

a) In ra m Ascii ca k t .

b) In ra k t k tip ca n.

7. Vit chng trnh nhp vo cc gi tr in tr R1, R2, R3 ca mt mch in :


1 1 1 1
Tnh tng tr theo cng thc: R = R1 + R2 + R3

8. Vit chng trnh nhp vo im ba mn Ton, L, Ha ca mt hc sinh. In ra im


trung bnh ca hc sinh vi hai s l thp phn.

9. Vit chng trnh nhp vo ngy, thng, nm. In ra ngy thng nm theo dng dd/
mm/yy. (dd: ngy, mm: thng, yy : nm. V d: 20/11/99 )

10. Vit chng trnh o ngc mt s nguyn dng c ng 3 ch s.

59/199
Chng IV. Cc lnh c cu trc
Mc tiu ca bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

Khi lnh trong C.


Cu trc r nhnh.
Cu trc la chn.
Cu trc vng lp.
Cc cu lnh c bit.

60/199
Khi lnh trong lp trnh C

KHI LNH

Mt dy cc khai bo cng vi cc cu lnh nm trong cp du ngoc mc { v } c


gi l mt khi lnh.

V d 1:

char ten[30];

printf(\n Nhap vao ten cua ban:);

scanf(%s, ten);

printf(\n Chao Ban %s,ten);

V d 2:

#include <stdio.h>

#include<conio.h>

int main ()

{ /*y l u khi*/

char ten[50];

printf("Xin cho biet ten cua ban !");

scanf("%s",ten);

getch();

return 0;

} /*y l cui khi*/

61/199
Mt khi lnh c th cha bn trong n nhiu khi lnh khc gi l khi lnh lng nhau.
S lng nhau ca cc khi lnh l khng hn ch.

Minh ha:

lnh;

lnh;

lnh;

lnh;

lnh;

Lu v phm vi tc ng ca bin trong khi lnh lng nhau:

- Trong cc khi lnh khc nhau hay cc khi lnh lng nhau c th khai bo cc bin
cng tn.

V d 1:

lnh;

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

lnh;

62/199
}

lnh;

int a,b; /*bin a,b trong khi lnh th hai*/

lnh;

V d 2:

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

lnh;

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

- Nu mt bin c khai bo bn ngoi khi lnh v khng trng tn vi bin bn trong


khi lnh th n cng c s dng bn trong khi lnh.

- Mt khi lnh con c th s dng cc bin bn ngoi, cc lnh bn ngoi khng th s


dng cc bin bn trong khi lnh con.

V d:

int a, b, c;

lnh;

63/199
{

int c, d;

lnh;

64/199
Cu trc r nhnh trong lp trnh C

Cu trc r nhnh l mt cu trc c dng rt ph bin trong cc ngn ng lp trnh


ni chung. Trong C, c hai dng: dng khng y v dng y .

Dng khng y

C php:

if (< Biu thc iu kin >)

<Cng vic>

Lu c php:

Gii thch:

<Cng vic> c th hin bng 1 cu lnh hay 1 khi lnh.

Kim tra Biu thc iu kin trc.

Nu iu kin ng (!= 0) th thc hin cu lnh hoc khi lnh lin sau iu kin.

Nu iu kin sai th b qua lnh hoc khi lnh lin sau iu kin (nhng lnh v khi
lnh sau vn c thc hin bnh thng v n khng ph thuc vo iu kin sau
if).

65/199
V d 1:

Yu cu ngi thc hin chng trnh nhp vo mt s thc a. In ra mn hnh kt qu


nghch o ca a khi a 0.

#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);

getch();

return 0;

Gii thch:

- Nu chng ta nhp vo a 0 th cu lnh printf("Nghich dao cua %f la %f",a,1/a)c


thc hin, ngc li cu lnh ny khng c thc hin.

- Lnh getch() lun lun c thc hin v n khng phi l lnh lin sau iu kin if.

V d 2: Yu cu ngi chy chng trnh nhp vo gi tr ca 2 s a v b, nu a ln hn


b th in ra thng bo Gia tr ca a ln hn gi tr ca b, sau hin th gi tr c th
ca 2 s ln mn hnh.

#include <stdio.h>

#include<conio.h>

int main ()

66/199
{

int a,b;

printf("Nhap vao gia tri cua 2 so a, b!");

scanf("%d%d",&a,&b);

if (a>b)

printf("\n Gia tri cua a lon hon gia tri cua b");

printf("\n a=%d, b=%d",a,b);

getch();

return 0;

Gii thch:

Nu chng ta nhp vo gi tr ca a ln hn gi tr ca b th khi lnh:

printf("\n Gia tri cua a lon hon gia tri cua b");

printf("\n a=%d, b=%d",a,b);

s c thc hin, ngc li khi lnh ny khng c thc hin.

Dng y

C php:

if (< Biu thc iu kin >)

67/199
<Cng vic 1>

else

<Cng vic 2>

Lu c php:

Gii thch:

Cng vic 1, cng vic 2 c th hin l 1 cu lnh hay 1 khi lnh.

u tin Biu thc iu kin c kim tra trc.

Nu iu kin ng th thc hin cng vic 1.

Nu iu kin sai th thc hin cng vic 2.

Cc lnh pha sau cng vic 2 khng ph thuc vo iu kin.

V d 1: Yu cu ngi thc hin chng trnh nhp vo mt s thc a. In ra mn hnh


kt qu nghch o ca a khi a 0, khi a =0 in ra thng bo Khong the tim duoc nghich
dao cua a

#include <stdio.h>

#include <conio.h>

int main ()

68/199
{

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;

Gii thch:

- Nu chng ta nhp vo a 0 th cu lnh printf("Nghich dao cua %f la %f",a,1/a)c


thc hin, ngc li cu lnh printf(Khong the tim duoc nghich dao cua a) c thc
hin.

- Lnh getch() lun lun c thc hin.

V d 2: Yu cu ngi chy chng trnh nhp vo gi tr ca 2 s a v b, nu a ln hn


b th in ra thng bo Gia tr ca a ln hn gi tr ca b, gi tr ca 2 s, ngc li th
in ra mn hnh cu thng bo Gi tr ca a nh hn hoc bng gi tr ca b, gi tr ca
2 s.

#include <stdio.h>

#include<conio.h>

int main ()

int a, b;

printf("Nhap vao gia tri cua 2 so a va b !");

69/199
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;

Gii thch:

- Nu chng ta nhp vo 40 30 ? th kt qu hin ra trn mn hnh l

a lon hon b

a=40 b=30

Thuc hien xong lenh if

- Cn nu chng ta nhp 40 50 ? th kt qu hin ra trn mn hnh l

a nho hon hoac bang b

70/199
a=40 b=50

Thuc hien xong lenh if

V d 3: Yu cu ngi thc hin chng trnh nhp vo mt s nguyn dng l thng


trong nm v in ra s ngy ca thng .

- Thng c 31 ngy: 1, 3, 5, 7, 8, 10, 12

- Thng c 30 ngy: 4, 6, 9, 10

- Thng c 28 hoc 29 ngy : 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)

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();

71/199
return 0;

Gii thch:

- Nu chng ta nhp vo mt trong cc s 1, 3, 5, 7, 8, 10, 12 th kt qu xut hin trn


mn hnh s l

Thang <s> co 31 ngay

Thuc hien xong lenh if

- Nu chng ta nhp vo mt trong cc s 4, 6, 9, 11 th kt qu xut hin trn mn hnh


s l

Thang <s> co 30 ngay

Thuc hien xong lenh if

- Nu chng ta nhp vo s 2 th kt qu xut hin trn mn hnh s l

Thang 2 co 28 hoac 29 ngay

Thuc hien xong lenh if

- Nu chng ta nhp vo s nh hn 0 hoc ln hn 12 th kt qu xut hin trn mn


hnh s l

Khong co thang <s>

Thuc hien xong lenh if

Trong <s> l con s m chng ta nhp vo.

Lu :

- Ta c th s dng cc cu lnh ifelse lng nhau. Trong trng hp ifelse lng


nhau th else s kt hp vi if gn nht cha c else.

- Trong trng hp cu lnh if bn trong khng c else th phi vit n trong cp du


{} (coi nh l khi lnh) trnh s kt hp else if sai.

V d 1:

72/199
if ( so1>0)

if (so2 > so3)

a=so2;

else /*else ca if (so2>so3) */

a=so3;

V d 2:

if (so1>0)

if (so2>so3) /*lnh if ny khng c else*/

a=so2;

else /*else ca if (so1>0)*/

a=so3;

73/199
Cu trc la chn

CU TRC LA CHN

Cu trc la chn cho php la chn mt trong nhiu trng hp. Trong C, l cu
lnh switch.

C php:

switch (< Biu thc > )

case gi tr 1 :

Khi lnh thc hin cng vic 1;

break;

case gi tr n:

Khi lnh thc hin cng vic n;

break;

[ default :

Khi lnh thc hin cng vic mc nh;

break; ]

Lu :

74/199
Gii thch:

- Tnh gi tr ca biu thc trc.

- Nu gi tr ca biu thc bng gi tr 1 th thc hin cng vic 1 ri thot.

- Nu gi tr ca biu thc khc gi tr 1 th so snh vi gi tr 2, nu bng gi tr 2 th


thc hin cng vic 2 ri thot.

- C nh th, so snh ti gi tr n.

- Nu tt c cc php so snh trn u sai th thc hin cng vic mc nh ca trng


hp default.

Lu :

- Biu thc trong switch() phi c kt qu l gi tr kiu s nguyn (int, char, long, ).

- Cc gi tr sau case cng phi l kiu s nguyn.

- Khng bt buc phi c default.

V d 1: Nhp vo mt s nguyn, chia s nguyn ny cho 2 ly phn d. Kim tra nu


phn d bng 0 th in ra thng bo s chn, nu s d bng 1 th in thng bo s l.

#include <stdio.h>

75/199
#include<conio.h>

int main ()

{ int songuyen, phandu;

clrscr();

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;

V d 2: Nhp vo 2 s nguyn v 1 php ton.

- Nu php ton l +, -, * th in ra kt qua l tng, hiu, tch ca 2 s.

- Nu php ton l / th kim tra xem s th 2 c khc khng hay khng? Nu khc
khng th in ra thng ca chng, ngc li th in ra thng bo khong chia cho 0.

#include <stdio.h>

#include<conio.h>

76/199
int main ()

{ int so1, so2;

float thuong;

char pheptoan;

clrscr();

printf("\n Nhap vao 2 so nguyen ");

scanf("%d%d",&so1,&so2);

fflush(stdin);

/*Xa k t enter trong vng m trc khi nhp php ton */

printf("\n Nhap vao phep toan ");

scanf("%c",&pheptoan);

switch(pheptoan)

case '+':

printf("\n %d + %d =%d",so1, so2, so1+so2);

break;

case '-':

printf("\n %d - %d =%d",so1, so2, so1-so2);

break;

case '*':

printf("\n %d * %d =%d",so1, so2, so1*so2);

break;

77/199
case '/':

if (so2!=0)

{ thuong=float(so1)/float(so2);

printf("\n %d / %d =%f", so1, so2, thuong);

else printf("Khong chia duoc cho 0");

break;

default :

printf("\n Chua ho tro phep toan %c", pheptoan); break;

getch();

return 0;

Trong v d trn, ti sao phi xa k t trong vng m trc khi nhp php ton?

V d 3: Yu cu ngi thc hin chng trnh nhp vo mt s nguyn dng l thng


trong nm v in ra s ngy ca thng .

- Thng c 31 ngy: 1, 3, 5, 7, 8, 10, 12

- Thng c 30 ngy: 4, 6, 9, 10

- Thng c 28 hoc 29 ngy : 2

- Nu nhp vo s <1 hoc >12 th in ra cu thng bo khng c thng ny .

#include <stdio.h>

#include<conio.h>

int main ()

78/199
{ int thang;

clrscr();

printf("\n Nhap vao thangs trong nam ");

scanf("%d",&thang);

switch(thang)

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

printf("\n Thang %d co 31 ngay ",thang);

break;

case 4:

case 6:

case 9:

case 11:

printf("\n Thang %d co 30 ngay ",thang);

break;

case 2:

79/199
printf ("\ Thang 2 co 28 hoac 29 ngay");

break;

default :

printf("\n Khong co thang %d", thang);

break;

getch();

return 0;

Trong v d trn, ti sao phi s dng case 1:, case 3:, case 12: ?

80/199
Cu trc vng lp v cc cu lnh c bit

CU TRC VNG LP

Cu trc vng lp cho php lp li nhiu ln 1 cng vic (c th hin bng 1 cu lnh
hay 1 khi lnh) no cho n khi tha mn 1 iu kin c th.

Vng lp for

Lnh for cho php lp li cng vic cho n khi iu kin sai.

C php:

for (Biu thc 1; biu thc 2; biu thc 3)

<Cng vic>

Lu :

Gii thch:

81/199
<Cng vic>: c th hin l 1 cu lnh hay 1 khi lnh. Th t thc hin ca cu lnh
for nh sau:

B1: Tnh gi tr ca biu thc 1.

B2: Tnh gi tr ca biu thc 2.

- Nu gi tr ca biu thc 2 l sai (=0): thot khi cu lnh for.

- Nu gi tr ca biu thc 2 l ng (!=0): <Cng vic> c thc hin.

B3: Tnh gi tr ca biu thc 3 v quay li B2.

Mt s lu khi s dng cu lnh for:

- Khi biu thc 2 vng mt th n c coi l lun lun ng

- Biu thc 1: thng thng l mt php gn khi to gi tr ban u cho bin iu


kin.

- Biu thc 2: l mt biu thc kim tra iu kin ng sai dng vng lp.

- Biu thc 3: thng thng l mt php gn thay i gi tr ca bin iu kin.

- Trong mi biu thc c th c nhiu biu thc con. Cc biu thc con c phn bit
bi du phy.

V d 1: Vit on chng trnh in dy s nguyn t 1 n 10.

#include <stdio.h>

#include<conio.h>

int main ()

{ int i;

clrscr();

printf("\n Day so tu 1 den 10 :");

for (i=1; i<=10; i++)

printf("%d ",i);

82/199
getch();

return 0;

Kt qu chng trnh nh sau:

V d 2: Vit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc s nguyn t 1


n n.

#include <stdio.h>

#include<conio.h>

int main ()

{ unsigned int n,i,tong;

clrscr();

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;

Nu chng ta nhp vo s 9 th kt qu nh sau:

83/199
V d 3: Vit chng trnh in ra trn mn hnh mt ma trn c n dng m ct nh sau:

1234567

2345678

3456789

#include <stdio.h>

#include<conio.h>

int main ()

{ unsigned int dong, cot, n, m;

clrscr();

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;

Kt qu khi nhp 3 dng 6 ct nh sau

84/199
Vng lp while

Vng lp while ging nh vng lp for, dng lp li mt cng vic no cho n


khi iu kin sai.

C php:

while ( Biu thc iu kin )

<Cng vic>

Lu :

Gii thch:

- <Cng vic>: c th hin bng 1 cu lnh hay 1 khi lnh.

- Kim tra Biu thc iu kin trc.

- Nu iu kin sai (=0) th thot khi lnh while.

- Nu iu kin ng (!=0) th thc hin cng vic ri quay li kim tra iu kin tip.

Lu :

85/199
- Lnh while gm c biu thc iu kin v thn vng lp (khi lnh thc hin cng
vic)

- Vng lp dng li khi no iu kin sai.

- Khi lnh thc hin cng vic c th rng, c th lm thay i iu kin.

V d 1: Vit on chng trnh in dy s nguyn t 1 n 10.

#include <stdio.h>

#include<conio.h>

int main ()

{ int i;

clrscr();

printf("\n Day so tu 1 den 10 :");

i=1;

while (i<=10)

printf("%d ",i++);

getch();

return 0;

Kt qu chng trnh nh sau:

V d 2: Vit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc s nguyn t 1


n n.

#include <stdio.h>

#include<conio.h>

86/199
int main ()

{ unsigned int n,i,tong;

clrscr();

printf("\n Nhap vao so nguyen duong n:");

scanf("%d",&n);

tong=0;

i=1;

while (i<=n)

tong+=i;

i++;

printf("\n Tong tu 1 den %d =%d ",n,tong);

getch();

return 0;

Nu chng ta nhp vo s 9 th kt qu nh sau:

V d 3: Vit chng trnh in ra trn mn hnh mt ma trn c n dng m ct nh sau:

1234567

2345678

3456789

87/199

#include <stdio.h>

#include<conio.h>

int main ()

{ unsigned int dong, cot, n, m;

clrscr();

printf("\n Nhap vao so dong va so cot :");

scanf("%d%d",&n,&m);

dong=0;

while (dong<n)

printf("\n");

cot=1;

while (cot<=m)

printf("%d\t",dong+cot);

cot++;

dong++;

getch();

return 0;

88/199
}

Kt qu khi nhp 3 dng 6 ct nh sau

Vng lp do while

Vng lp do while ging nh vng lp for, while, dng lp li mt cng vic no


khi iu kin cn ng.

C php:

do

<Cng vic>

while (< Biu thc iu kin >)

Lu :

Gii thch:

- <Cng vic>: c th hin bng 1 cu lnh hay 1 khi lnh.

- Trc tin cng vic c thc hin trc, sau mi kim tra Biu thc iu kin.

- Nu iu kin sai th thot khi lnh do while.

89/199
- Nu iu kin cn ng th thc hin cng vic ri quay li kim tra iu kin tip.

Lu :

- Lnh dowhile thc hin cng vic t nht 1 ln.

- Vng lp dng li khi iu kin sai.

- Khi lnh thc hin cng vic c th rng, c th lm thay i iu kin.

V d 1: Vit on chng trnh in dy s nguyn t 1 n 10.

#include <stdio.h>

#include<conio.h>

int main ()

{ int i;

clrscr();

printf("\n Day so tu 1 den 10 :");

i=1;

do

printf("%d ",i++);

while (i<=10);

getch();

return 0;

Kt qu chng trnh nh sau:

V d 2: Vit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc s nguyn t 1


n n.

90/199
#include <stdio.h>

#include<conio.h>

int main ()

{ unsigned int n,i,tong;

clrscr();

printf("\n Nhap vao so nguyen duong n:");

scanf("%d",&n);

tong=0;

i=1;

do

tong+=i;

i++;

} while (i<=n);

printf("\n Tong tu 1 den %d =%d ",n,tong);

getch();

return 0;

Nu chng ta nhp vo s 9 th kt qu nh sau:

V d 3: Vit chng trnh in ra trn mn hnh mt ma trn c n dng m ct nh sau (n,


m>=1):

91/199
1234567

2345678

3456789

#include <stdio.h>

#include<conio.h>

int main ()

{ unsigned int dong, cot, n, m;

clrscr();

printf("\n Nhap vao so dong va so cot :");

scanf("%d%d",&n,&m);

dong=0;

do

printf("\n");

cot=1;

do

printf("%d\t",dong+cot);

cot++;

} while (cot<=m);

dong++;

92/199
} while (dong<n);

getch();

return 0;

Kt qu khi nhp 3 dng 6 ct nh sau

So snh cc vng lp

Vng lp for, while:

- Kim tra iu kin trc thc hin cng vic sau nn on lnh thc hin cng vic c
th khng c thc hin .

- Vng lp kt thc khi no iu kin sai.

Vng lp dowhile:

- Thc hin cng vic trc kim tra iu kin sau nn on lnh thc hin cng vic
c thc hin t nht 1 ln.

- Vng lp kt thc khi no iu kin sai.

CC CU LNH C BIT

Lnh break

C php: break

Dng thot khi vng lp. Khi gp cu lnh ny trong vng lp, chng trnh s thot
ra khi vng lp v ch n cu lnh lin sau n. Nu nhiu vng lp --> break s thot ra
khi vng lp gn nht. Ngoi ra, break cn c dng trong cu trc la chn switch.

Lnh continue

C php: continue

93/199
- Khi gp lnh ny trong cc vng lp, chng trnh s b qua phn cn li trong vng
lp v tip tc thc hin ln lp tip theo.

- i vi lnh for, biu thc 3 s c tnh tr v quay li bc 2.

- i vi lnh while, do while; biu thc iu kin s c tnh v xt xem c th tip


tc thc hin <Cng vic> na hay khng? (da vo kt qu ca biu thc iu kin).

94/199
Bi tp

Mc ch yu cu

Lm quen v bit cch s dng kiu d liu cu trc kt hp vi cc kiu d liu hc.
Phn bit kiu d liu mng v kiu cu trc. Thc hin cc bi tp trong phn ni dung.

Ni dung

1. Hy nh ngha kiu:

struct Hoso{

char HoTen[40];

float Diem;

char Loai[10];

};

Vit chng trnh nhp vo h tn, im ca n hc sinh. Xp loi vn ha theo cch sau:

im Xp loi

9, 10 Gii

7, 8 Kh

5, 6 Trung bnh

di 5 Khng t

In danh sch ln mn hnh theo dng sau:

XEP LOAI VAN HOA

HO VA TEN DIEM XEPLOAI

Nguyen Van A 7 Kha

Ho Thi B 5 Trung binh

95/199
Dang Kim C 4 Khong dat

........................................................................................................

2. Xem mt phn s l mt cu trc c hai trng l t s v mu s. Hy vit chng


trnh thc hin cc php ton cng, tr, nhn, chia hai phn s. (Cc kt qu phi ti
gin ).

3. To mt danh sch cn b cng nhn vin, mi ngi ngi xem nh mt cu trc


bao gm cc trng Ho, Ten, Luong, Tuoi, Dchi. Nhp mt s ngi vo danh sch, sp
xp tn theo th t t in, in danh sch sp xp theo mu sau:

DANH SACH CAN BO CONG NHAN VIEN

96/199
Chng V. Chng trnh con
Mc tiu bi hc chng trnh con trong lp trnh C

Hc xong chng ny, sinh vin s nm c cc vn sau:

Khi nim v hm (function) trong C.


Cch xy dng v cch s dng hm trong C.

97/199
Hm v cch xy dng mt hm

KHI NIM V HM TRONG C

Trong nhng chng trnh ln, c th c nhng on chng trnh vit lp i lp li


nhiu ln, trnh rm r v mt thi gian khi vit chng trnh; ngi ta thng phn
chia chng trnh thnh nhiu module, mi module gii quyt mt cng vic no .
Cc module nh vy gi l cc chng trnh con.

Mt tin li khc ca vic s dng chng trnh con l ta c th d dng kim tra xc
nh tnh ng n ca n trc khi rp ni vo chng trnh chnh v do vic xc
nh sai st tin hnh hiu nh trong chng trnh chnh s thun li hn. Trong C,
chng trnh con c gi l hm. Hm trong C c th tr v kt qu thng qua tn hm
hay c th khng tr v kt qu.

Hm c hai loi: hm chun v hm t nh ngha. Trong chng ny, ta ch trng n


cch nh ngha hm v cch s dng cc hm .

Mt hm khi c nh ngha th c th s dng bt c u trong chng trnh. Trong


C, mt chng trnh bt u thc thi bng hm main.

V d 1: Ta c hm max tm s ln gia 2 s nguyn a, b nh sau:

int max(int a, int b)

return (a>b) ? a:b;

V d 2: Ta c chng trnh chnh (hm main) dng nhp vo 2 s nguyn a,b v in


ra mn hnh s ln trong 2 s

#include <stdio.h>

#include <conio.h>

int max(int a, int b)

return (a>b) ? a:b;

98/199
}

int main()

int a, b, c;

printf("\n Nhap vao 3 so a, b,c ");

scanf("%d%d%d",&a,&b,&c);

printf("\n So lon la %d",max(a, max(b,c)));

getch();

return 0;

Hm th vin

Hm th vin l nhng hm c nh ngha sn trong mt th vin no , mun s


dng cc hm th vin th phi khai bo th vin trc khi s dng bng lnh #include
<tn th vin.h>

Mt s th vin:

alloc.h assert.h bcd.h bios.h complex.h

conio.h ctype.h dir.h dirent.h dos.h

errno.h fcntl.h float.h fstream.h grneric.h

graphics.h io.h iomanip.h iostream.h limits.h

locale.h malloc.h math.h mem.h process.h

setjmp.h share.h signal.h stdarg.h stddef.h

stdio.h stdiostr.h stdlib.h stream.h string.h

strstrea.h sys\stat.h sys\timeb.h sys\types.h time.h

99/199
values.h

ngha ca mt s th vin thng dng:

1. stdio.h : Th vin cha cc hm vo/ ra chun (standard input/output). Gm cc


hm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(),
fwrite(), getchar(), putchar(), getw(), putw()

2. conio.h : Th vin cha cc hm vo ra trong ch DOS (DOS console). Gm cc


hm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),

3. math.h: Th vin cha cc hm tnh ton gm cc hm abs(), sqrt(), log(). log10(),


sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),

4. alloc.h: Th vin cha cc hm lin quan n vic qun l b nh. Gm cc hm


calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(),

5. io.h: Th vin cha cc hm vo ra cp thp. Gm cc hm open(), _open(), read(),


_read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),

6. graphics.h: Th vin cha cc hm lin quan n ha. Gm initgraph(), line(),


circle(), putpixel(), getpixel(), setcolor(),

...

Mun s dng cc hm th vin th ta phi xem c php ca cc hm v s dng theo


ng c php (xem trong phn tr gip ca Turbo C).

Hm ngi dng

Hm ngi dng l nhng hm do ngi lp trnh t to ra nhm p ng nhu cu x l


ca mnh.

XY DNG MT HM

nh ngha hm

Cu trc ca mt hm t thit k:

<kiu kt qu> Tn hm ([< kiu t s> < tham s >][,< kiu t s >< tham s >][])

[Khai bo bin cc b v cc cu lnh thc hin hm]

100/199
[return [<Biu thc>];]

Gii thch:

- Kiu kt qu: l kiu d liu ca kt qu tr v, c th l : int, byte, char, float, void


Mt hm c th c hoc khng c kt qu tr v. Trong trng hp hm khng c kt
qu tr v ta nn s dng kiu kt qu l void.

- Kiu t s: l kiu d liu ca tham s.

- Tham s: l tham s truyn d liu vo cho hm, mt hm c th c hoc khng c


tham s. Tham s ny gi l tham s hnh thc, khi gi hm chng ta phi truyn cho n
cc tham s thc t. Nu c nhiu tham s, mi tham s phn cch nhau du phy (,).

- Bn trong thn hm (phn gii hn bi cp du {}) l cc khai bo cng cc cu lnh


x l. Cc khai bo bn trong hm c gi l cc khai bo cc b trong hm v cc
khai bo ny ch tn ti bn trong hm m thi.

- Khi nh ngha hm, ta thng s dng cu lnh return tr v kt qu thng qua tn


hm.

Lnh return dng thot khi mt hm v c th tr v mt gi tr no .

C php:

return ; /*khng tr v gi tr*/

return <biu thc>; /*Tr v gi tr ca biu thc*/

return (<biu thc>); /*Tr v gi tr ca biu thc*/

Nu hm c kt qu tr v, ta bt buc phi s dng cu lnh return tr v kt qu


cho hm.

V d 1: Vit hm tm s ln gia 2 s nguyn a v b

int max(int a, int b)

return (a>b) ? a:b;

101/199
}

V d 2: Vit hm tm c chung ln nht gia 2 s nguyn a, b. Cch tm: u tin ta


gi s UCLN ca hai s l s nh nht trong hai s . Nu iu khng ng th ta
gim i mt n v v c gim nh vy cho ti khi no tm thy UCLN

int ucln(int a, int b)

int u;

if (a<b)

u=a;

else

u=b;

while ((a%u !=0) || (b%u!=0))

u--;

return u;

S dng hm

Mt hm khi nh ngha th chng vn cha c thc thi tr khi ta c mt li gi n


hm .

C php gi hm: <Tn hm>([Danh sch cc tham s])

V d: Vit chng trnh cho php tm c s chung ln nht ca hai s t nhin.

#include<stdio.h>

unsigned int ucln(unsigned int a, unsigned int b)

unsigned int u;

102/199
if (a<b)

u=a;

else

u=b;

while ((a%u !=0) || (b%u!=0))

u--;

return u;

int main()

unsigned int a, b, UC;

printf(Nhap a,b: );scanf(%d%d,&a,&b);

UC = ucln(a,b);

printf(Uoc chung lon nhat la: , UC);

return 0;

Lu : Vic gi hm l mt php ton, khng phi l mt pht biu.

Nguyn tc hot ng ca hm

Trong chng trnh, khi gp mt li gi hm th hm bt u thc hin bng cch


chuyn cc lnh thi hnh n hm c gi. Qu trnh din ra nh sau:

- Nu hm c tham s, trc tin cc tham s s c gn gi tr thc tng ng.

- Chng trnh s thc hin tip cc cu lnh trong thn hm bt u t lnh u tin
n cu lnh cui cng.

103/199
- Khi gp lnh return hoc du } cui cng trong thn hm, chng trnh s thot khi
hm tr v chng trnh gi n v thc hin tip tc nhng cu lnh ca chng trnh
ny.

TRUYN THAM S CHO HM

Mc nhin, vic truyn tham s cho hm trong C l truyn theo gi tr; ngha l cc gi
tr thc (tham s thc) khng b thay i gi tr khi truyn cho cc tham s hnh thc

V d 1: Gi s ta mun in ra nhiu dng, mi dng 50 k t no . n gin ta vit


mt hm, nhim v ca hm ny l in ra trn mt dng 50 k t no . Hm ny c tn
l InKT.

#include <stdio.h>

#include <conio.h>

void InKT(char ch)

int i;

for(i=1;i<=50;i++) printf(%c,ch);

printf(\n);

int main()

char c = A;

InKT(*); /* In ra 50 dau * */

InKT(+);

InKT(c);

return 0;

104/199
Lu :

- Trong hm InKT trn, bin ch gi l tham s hnh thc c truyn bng gi tr (gi
l tham tr ca hm). Cc tham tr ca hm coi nh l mt bin cc b trong hm v
chng c s dng nh l d liu u vo ca hm.

- Khi chng trnh con c gi thi hnh, tham tr c cp nh v nhn gi tr l


bn sao gi tr ca tham s thc. Do , mc d tham tr cng l bin, nhng vic thay
i gi tr ca chng khng c ngha g i vi bn ngoi hm, khng nh hng n
chng trnh chnh, ngha l khng lm nh hng n tham s thc tng ng.

V d 2: Ta xt chng trnh sau y:

#include <stdio.h>

#include <conio.h>

int hoanvi(int a, int b)

int t;

t=a; /*on ny hon v gi tr ca 2 bin a, b*/

a=b;

b=t;

printf("\Ben trong ham a=%d , b=%d",a,b);

return 0;

int main()

int a, b;

clrscr();

printf("\n Nhap vao 2 so nguyen a, b:");

105/199
scanf("%d%d",&a,&b);

printf("\n Truoc khi goi ham hoan vi a=%d ,b=%d",a,b);

hoanvi(a,b);

printf("\n Sau khi goi ham hoan vi a=%d ,b=%d",a,b);

getch();

return 0;

Kt qu thc hin chng trnh:

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***

Gii thch:

- Nhp vo 2 s 6 v 5 (a=6, b=5)

- Trc khi gi hm hon v th a=6, b=5

- Bn trong hm hon v a=5, b=6

- Khi ra khi hm hon v th a=6, b=5

* Lu

Trong on chng trnh trn, nu ta mun sau khi kt thc chng trnh con gi tr ca
a, b thay i th ta phi t tham s hnh thc l cc con tr, cn tham s thc t l a
ch ca cc bin.

Lc ny mi s thay i trn vng nh c qun l bi con tr l cc tham s hnh thc


ca hm th s nh hng n vng nh ang c qun l bi tham s thc t tng
ng (cn rng vng nh ny chnh l cc bin ta cn thay i gi tr).

Ngi ta thng p dng cch ny i vi cc d liu u ra ca hm.

V d: Xt chng trnh sau y:

#include <stdio.h>

106/199
#include <conio.h>

long hoanvi(long *a, long *b)

/* Khai bo tham s hnh thc *a, *b l cc con tr kiu long */

long t;

t=*a; /*gn ni dung ca x cho t*/

*a=*b; /*Gn ni dung ca b cho a*/

*b=t; /*Gn ni dung ca t cho b*/

printf("\n Ben trong ham a=%ld , b=%ld",*a,*b);

/*In ra ni dung ca a, b*/

return 0;

int main()

long a, b;

clrscr();

printf("\n Nhap vao 2 so nguyen a, b:");

scanf("%ld%ld",&a,&b);

printf("\n Truoc khi goi ham hoan vi a=%ld ,b=%ld",a,b);

hoanvi(&a,&b); /* Phi l a ch ca a v b */

printf("\n Sau khi goi ham hoan vi a=%ld ,b=%ld",a,b);

getch();

107/199
return 0;

Kt qu thc hin chng trnh:

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***

Gii thch:

- Nhp vo 2 s 5, 6 (a=5, b=6)

- Trc khi gi hm hoanvi th a=5, b=6

- Trong hm hoanvi (khi hon v) th a=6, b=5

- Khi ra khi hm hon v th a=6, b=6

Lu : Kiu con tr v cc php ton trn bin kiu con tr s ni trong phn sau.

HM QUY

nh ngha

Mt hm c gi l quy nu bn trong thn hm c lnh gi n chnh n.

V d: Ngi ta nh ngha giai tha ca mt s nguyn dng n nh sau:

n!=1* 2 * 3 ** (n-1) *n = (n-1)! *n (vi 0!=1)

Nh vy, tnh n! ta thy nu n=0 th n!=1 ngc li th n!=n * (n-1)!

Vi nh ngha trn th hm quy tnh n! c vit:

#include <stdio.h>

#include <conio.h>

/*Hm tnh n! bng quy*/

unsigned int giaithua_dequy(int n)

108/199
if (n==0)

return 1;

else

return n*giaithua_dequy(n-1);

/*Hm tnh n! khng quy*/

unsigned int giaithua_khongdequy(int n)

unsigned int kq,i;

kq=1;

for (i=2;i<=n;i++)

kq=kq*i;

return kq;

int main()

int n;

clrscr();

printf("\n Nhap so n can tinh giai thua ");

scanf("%d",&n);

printf("\nGoi ham de quy: %d != %u",n,giaithua_dequy(n));

printf("\nGoi ham khong de quy: %d != %u",

109/199
n,giaithua_khongdequy(n));

getch();

return 0;

c im cn lu khi vit hm quy

- Hm quy phi c 2 phn:

Phn dng hay phi c trng hp nguyn t. Trong v d trn th trng hp


n=0 l trng hp nguyn t.
Phn quy: l phn c gi li hm ang c nh ngha. Trong v d trn th
phn quy l n>0 th n! = n * (n-1)!

- S dng hm quy trong chng trnh s lm chng trnh d c, d hiu v vn


c nu bt r rng hn. Tuy nhin trong a s trng hp th hm quy tn b nh
nhiu hn v tc thc hin chng trnh chm hn khng quy.

- Ty tng bi c c th m ngi lp trnh quyt nh c nn dng quy hay khng


(c nhng trng hp khng dng quy th khng gii quyt c bi ton).

110/199
Bi tp

Mc ch yu cu

Mc ch ca vic s dng hm l lm cho chng trnh vit ra c sng sa, ngn


gn. V th sinh vin phi nm vng cch nh ngha cc hm v cch dng chng. Kt
hp cc phn hc trong cc chng trc vit cc chng trnh con.

Ni dung

1. Vit hm tm s ln nht trong hai s. p dng tm s ln nht trong ba s a, b, c vi


a, b, c nhp t bn phm.

2. Vit hm tm UCLN ca hai s a v b. p dng: nhp vo t v mu s ca mt phn


s, kim tra xem phn s ti gin hay cha.

3. Vit hm in n k t c trn mt dng. Vit chng trnh cho nhp 5 s nguyn cho
bit s lng hng bn c ca mt hng A 5 ca hng khc nhau. Dng hm trn v
biu so snh 5 gi tr , mi tr dng mt k t ring.

4. Vit mt hm tnh tng cc ch s ca mt s nguyn. Vit chng trnh nhp vo


mt s nguyn, dng hm trn kim tra xem s c chia ht cho 3 khng. Mt s chia
ht cho 3 khi tng cc ch s ca n chia ht cho 3.

5. Tam gic Pascal l mt bng s, trong hng th 0 bng 1, mi mt s hng ca


hng th n+1 l mt t hp chp k ca n ( Ckn = (n k!k)! )

Tam gic Pascal c dng sau:

1 ( hng 0 )

1 1 ( hng 1 )

1 2 1 ( hng 2 )

1331

14641

1 5 10 10 5 1

1 6 15 20 15 6 1 (hng 6)

111/199
......................................................

Vit chng trnh in ln mn hnh tan gic Pascal c n hng (n nhp vo khi chy
chng trnh) bng cch to hai hm tnh giai tha v tnh t hp.

6. Yu cu nh cu 5 nhng da vo tnh cht sau ca t hp: C k =C k 1 +C k hnh


n n1 n1
thnh thut ton l: to mt hm t hp c hai bin n, k mang tnh quy nh sau:

7. Vit chng trnh tnh cc tng sau:

Trong n l mt s nguyn dng v x l mt s bt k c nhp t bn phm khi


chy chng trnh.

8. Vit chng trnh in dy Fibonacci nu trong bng phng php dng mt hm


Fibonacci F c tnh quy.

9. Bi ton thp H Ni: C mt ci thp gm n tng, tng trn nh hn tng di (hnh


v). Hy tm cch chuyn ci thp ny t v tr th nht sang v tr th hai thng qua v
tr trung gian th ba. Bit rng ch c chuyn mi ln mt tng v khng c tng
ln trn tng nh.

112/199
10. Vit chng trnh phn tch mt s nguyn dng ra tha s nguyn t.

113/199
Chng VI. Kiu mng
Mc tiu bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

Khi nim v kiu d liu mng cng nh ng dng ca n.


Cch khai bo bin kiu mng v cc php ton trn cc phn t ca mng.

114/199
Mng 1 chiu v Mng nhiu chiu

GII THIU KIU D LIU KIU MNG TRONG C

Mng l mt tp hp cc phn t c nh c cng mt kiu, gi l kiu phn t. Kiu


phn t c th l c cc kiu bt k: k t, s, chui k t; cng c khi ta s dng
kiu mng lm kiu phn t cho mt mng (trong trng hp ny ta gi l mng ca
mng hay mng nhiu chiu).

Ta c th chia mng lm 2 loi: mng 1 chiu v mng nhiu chiu.

Mng l kiu d liu c s dng rt thng xuyn. Chng hn ngi ta cn qun l


mt danh sch h v tn ca khong 100 sinh vin trong mt lp. Nhn thy rng mi
h v tn lu tr ta cn 1 bin kiu chui, nh vy 100 h v tn th cn khai bo 100
bin kiu chui. Nu khai bo nh th ny th on khai bo cng nh cc thao tc trn
cc h tn s rt di dng v rc ri. V th, kiu d liu mng gip ch ta trong trng
hp ny; ch cn khai bo 1 bin, bin ny c th coi nh l tng ng vi 100 bin
chui k t; l 1 mng m cc phn t ca n l chui k t. Hay nh lu tr cc
t kha ca ngn ng lp trnh C, ta cng dng n mt mng lu tr chng.

MNG 1 CHIU

Nu xt di gc ton hc, mng 1 chiu ging nh mt vector. Mi phn t


ca mng mt chiu c gi tr khng phi l mt mng khc.

Khai bo

Khai bo mng vi s phn t xc nh (khai bo tng minh)

C php: < Kiu> <Tn mng ><[s phn t]>

ngha:

- Tn mng: y l mt ci tn t ng theo quy tc t tn ca danh biu. Tn ny


cng mang ngha l tn bin mng.

- S phn t: l mt hng s nguyn, cho bit s lng phn t ti a trong mng l bao
nhiu (hay ni khc i kch thc ca mng l g).

- Kiu: mi phn t ca mng c d liu thuc kiu g.

115/199
- y, ta khai bo mt bin mng gm c s phn t phn t, phn t th nht l tn
mng [0], phn t cui cng l tn mng[s phn t -1]

V d:

int a[10]; /* Khai bo bin mng tn a, phn t th nht l a[0], phn t cui cng l
a[9].*/

Ta c th coi mng a l mt dy lin tip cc phn t trong b nh nh sau:

V tr 0 1 2 3 4 5 6 7 8 9

Tn phn t a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Hnh nh mng a trong b nh

Khai bo mng vi s phn t khng xc nh (khai bo khng tng minh)

C php: <Kiu> <Tn mng> <[]>

Khi khai bo, khng cho bit r s phn t ca mng, kiu khai bo ny thng c p
dng trong cc trng hp: va khai bo va gn gi tr, khai bo mng l tham s hnh
thc ca hm.

a. Va khai bo va gn gi tr

C php:

<Kiu> <Tn mng> []= {Cc gi tr cch nhau bi du phy}

Nu va khai bo va gn gi tr th mc nhin C s hiu s phn t ca mng l s gi


tr m chng ta gn cho mng trong cp du {}. Chng ta c th s dng hm sizeof()
ly s phn t ca mng nh sau:

S phn t=sizeof(tn mng)/ sizeof(kiu)

b.Khai bo mng l tham s hnh thc ca hm, trong trng hp ny ta khng cn ch


nh s phn t ca mng l bao nhiu.

Truy xut tng phn t ca mng

116/199
Mi phn t ca mng c truy xut thng qua Tn bin mng theo sau l ch s nm
trong cp du ngoc vung [ ]. Chng hn a[0] l phn t u tin ca mng a c
khai bo trn. Ch s ca phn t mng l mt biu thc m gi tr l kiu s nguyn.

Vi cch truy xut theo kiu ny, Tn bin mng[Ch s] c th coi nh l mt bin c
kiu d liu l kiu c ch ra trong khai bo bin mng.

V d 1:

int a[10];

Trong khai bo ny, vic truy xut cc phn t c ch ra trong hnh 1. Chng hn phn
t th 2 (c v tr 1) l a[1]

V d 2: Va khai bo va gn tr cho 1 mng 1 chiu cc s nguyn. In mng s nguyn


ny ln mn hnh.

Gi s ta bit s phn t ca mng l n; vic hin th 1 gi tr s nguyn ln mn


hnh ta cn s dng hm printf() vi nh dng %d, tng qut ha ln nu mun hin th
ln mn hnh gi tr ca n s nguyn, ta cn gi hm printf() ng n ln. Nh vy trong
trng hp ny ta s dng 1 vng lp in ra gi tr cc phn t.

Ta c on chng trnh sau:

#include <stdio.h>

#include <conio.h>

int main()

int n,i,j,tam;

int dayso[]={66,65,69,68,67,70};

clrscr();

n=sizeof(dayso)/sizeof(int); /*Ly s phn t*/

printf("\n Noi dung cua mang ");

for (i=0;i<n;i++)

117/199
printf("%d ",dayso[i]);

return 0;

V d 3: i mt s nguyn dng thp phn thnh s nh phn. Vic chuyn i ny


c thc hin bng cch ly s chia lin tip cho 2 cho ti khi bng 0 v ly cc s
d theo chiu ngc li to thnh s nh phn. Ta s dng mng mt chiu lu li
cc s d . Chng trnh c th nh sau:

#include<conio.h>

#include<stdio.h>

int main()

unsigned int N;

unsigned int Du;

unsigned int NhiPhan[20],K=0,i;

printf("Nhap vao so nguyen N= ");scanf("%d",&N);

do

Du=N % 2;

NhiPhan[K]=Du; /* Lu s d vo mng v tr K*/

K++; /* Tng K ln ln k lu vo v tr k*/

N = N/2;

} while(N>0);

printf("Dang nhi phan la: ");

for(i=K-1;i>=0;i--)

118/199
printf("%d",NhiPhan[i]);

getch();

return 0;

V d 4: Nhp vo mt dy n s v sp xp cc s theo th t tng. y l mt bi ton


c ng dng rng ri trong nhiu lnh vc. C rt nhiu gii thut sp xp. Mt trong s
c m t nh sau:

u tin a phn t th nht so snh vi cc phn t cn li, nu n ln hn mt phn


t ang so snh th i ch hai phn t cho nhau. Sau tip tc so snh phn t th hai
vi cc phn t t th ba tr i ... c tip tc nh vy cho n phn t th n-1.

Chng trnh s c chia thnh cc hm Nhap (Nhp cc s), SapXep (Sp xp) v
InMang (In cc s); cc tham s hnh thc ca cc hm ny l 1 mng khng ch nh
r s phn t ti a, nhng ta cn c thm s phn t thc t c s dng ca mng l
bao nhiu, y l mt gi tr nguyn.

#include<conio.h>

#include<stdio.h>

void Nhap(int a[],int N)

int i;

for(i=0; i< N; i++)

printf("Phan tu thu %d: ",i);scanf("%d",&a[i]);

void InMang(int a[], int N)

119/199
int i;

for (i=0; i<N;i++)

printf("%d ",a[i]);

printf("\n");

void SapXep(int a[], int N)

int t,i;

for(i=0;i<N-1;i++)

for(int j=i+1;j<N;j++)

if (a[i]>a[j])

t=a[i];

a[i]=a[j];

a[j]=t;

int main()

int b[20], N;

printf("So phan tu thuc te cua mang N= ");

scanf("%d",&N);

120/199
Nhap(b,N);

printf("Mang vua nhap: ");

InMang(b,N);

SapXep(b,N); /* Gi hm sp xp*/

printf("Mang sau khi sap xep: ");

InMang(b,N);

getch();

return 0;

Kt qu chy chng trnh c th l:

MNG NHIU CHIU

Mng nhiu chiu l mng c t 2 chiu tr ln. iu c ngha l mi phn t ca


mng l mt mng khc.

Ngi ta thng s dng mng nhiu chiu lu cc ma trn, cc ta 2 chiu, 3


chiu

Phn di y l cc vn lin quan n mng 2 chiu; cc mng 3, 4, chiu th


tng t (ch cn tng qut ha ln).

Khai bo

Khai bo mng 2 chiu tng minh

C php:

121/199
<Kiu> <Tn mng><[S phn t chiu 1]><[S phn t chiu 2]>

V d: Ngi ta cn lu tr thng tin ca mt ma trn gm cc s thc. Lc ny ta c


th khai bo mt mng 2 chiu nh sau:

float m[8][9]; /* Khai bo mng 2 chiu c 8*9 phn t l s thc*/

Trong trng hp ny, ta khai bo cho mt ma trn c ti a l 8 dng, mi dng c


ti a l 9 ct. Hnh nh ca ma trn ny c cho trong hnh 2:

Dng\
0 1 2 3 4 5 6 7 8
Ct
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]
3 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]
4 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]
5 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]
6 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]
7 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]

Hnh 2: Ma trn c m t l 1 mng 2 chiu

Khai bo mng 2 chiu khng tng minh

khai bo mng 2 chiu khng tng minh, ta vn phi ch ra s phn t ca chiu


th hai (chiu cui cng).

C php: <Kiu> <Tn mng> <[]><[S phn t chiu 2]>

Cch khai bo ny cng c p dng trong trng hp va khai bo, va gn tr hay


t mng 2 chiu l tham s hnh thc ca hm.

Truy xut tng phn t ca mng 2 chiu

Ta c th truy xut mt phn t ca mng hai chiu bng cch vit ra tn mng theo sau
l hai ch s t trong hai cp du ngoc vung. Chng hn ta vit m[2][3].

122/199
Vi cch truy xut theo cch ny, Tn mng[Ch s 1][Ch s 2] c th coi l 1 bin c
kiu c ch ra trong khai bo bin mng.

V d 1: Vit chng trnh cho php nhp 2 ma trn a, b c m dng n ct, thc hin
php ton cng hai ma trn a,b v in ma trn kt qu ln mn hnh.

Trong v d ny, ta s s dng hm lm ngn gn hn chng trnh ca ta. Ta s vit


cc hm: nhp 1 ma trn t bn phm, hin th ma trn ln mn hnh, cng 2 ma trn.

#include<conio.h>

#include<stdio.h>

void Nhap(int a[][10],int M,int N)

int i,j;

for(i=0;i<M;i++)

for(j=0; j<N; j++){

printf("Phan tu o dong %d cot %d: ",i,j);

scanf("%d",&a[i][j]);

void InMaTran(int a[][10], int M, int N)

int i,j;

for(i=0;i<M;i++){

for(j=0; j< N; j++)

printf("%d ",a[i][j]);

printf("\n");

123/199
}

/* 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,j;

for(i=0;i<M;i++)

for(j=0; j<N; j++)

c[i][j]=a[i][j]+b[i][j];

int main()

int a[10][10], b[10][10], M, N;

int c[10][10];/* Ma tran tong*/

printf("So dong M= "); scanf("%d",&M);

printf("So cot M= "); scanf("%d",&N);

printf("Nhap ma tran A\n");

Nhap(a,M,N);

printf("Nhap ma tran B\n");

Nhap(b,M,N);

printf("Ma tran A: \n");

InMaTran(a,M,N);

printf("Ma tran B: \n");

124/199
InMaTran(b,M,N);

CongMaTran(a,b,M,N,c);

printf("Ma tran tong C:\n");

InMaTran(c,M,N);

getch();

return 0;

V d 2: Nhp vo mt ma trn 2 chiu gm cc s thc, in ra tng ca cc phn t trn


ng cho chnh ca ma trn ny.

Ta nhn thy rng gi s ma trn a c M dng, N ct th cc phn t ca ng cho


chnh l cc phn t c dng: a[i][i] vi i [0min(M,N)-1].

#include<conio.h>

#include<stdio.h>

int main()

float a[10][10], T=0;

int M, N, i,j, Min;

clrscr();

printf("Ma tran co bao nhieu dong? ");scanf("%d",&M);

printf("Ma tran co bao nhieu cot? ");scanf("%d",&N);

for(i=0;i<M;i++)

for(j=0; j<N; j++)

125/199
printf("Phan tu o dong %d cot %d: ",i,j);

scanf("%f",&a[i][j]);

printf("Ma tran vua nhap: \n");

for(i=0;i<M;i++)

for(j=0; j< N; j++)

printf("%.2f ",a[i][j]);

printf("\n");

Min=(M>N) ? N: M; /* Tm gi tr nh nht ca M & N*/

for(i=0;i<Min;i++)

T=T+a[i][i];

printf("Tong cac phan tu o duong cheo chinh la: %f",T);

getch();

return 0;

126/199
Bi tp

Mc ch yu cu

Lm quen vi kiu d liu c cu trc trong C, kiu mng. Thc hin cc bi tp trong
phn ni dung bng cch kt hp kiu d liu mng, cc kiu d liu hc v cc phn
hc trong cc bi tp trc.

Ni dung

1. Vit chng trnh nhp vo mt dy n s thc a[0], a[1],..., a[n-1], sp xp dy s


theo th t t ln n nh. In dy s sau khi sp xp.

2. Vit chng trnh sp xp mt mng theo th t tng dn sau khi loi b cc phn
t trng nhau.

3. Vit chng trnh nhp vo mt mng, hy xut ra mn hnh:

- Phn t ln nht ca mng.

- Phn t nh nht ca mng.

- Tnh tng ca cc phn t trong mng .

4. Vit chng trnh nhp vo mt dy cc s theo th t tng, nu nhp sai quy cch
th yu cu nhp li. In dy s sau khi nhp xong. Nhp thm mt s mi v chn s
vo dy c sao cho dy vn m bo th t tng. In li dy s kim tra.

5. Vit chng trnh nhp vo mt ma trn (mng hai chiu) cc s nguyn, gm m


hng, n ct. In ma trn ln mn hnh. Nhp mt s nguyn khc vo v xt xem c
phn t no ca ma trn trng vi s ny khng ? v tr no ? C bao nhiu phn t ?

6. Vit chng trnh chuyn i v tr t dng thnh ct ca mt ma trn (ma trn


chuyn v) vung 4 hng 4 ct. Sau vit cho ma trn tng qut cp m*n.

V d:

12341291

25582545

94203528

127/199
15864806

7. Vit chng trnh nhp vo mt mng s t nhin. Hy xut ra mn hnh:

- Dng 1 : gm cc s l, tng cng c bao nhiu s l.

- Dng 2 : gm cc s chn, tng cng c bao nhiu s chn.

- Dng 3 : gm cc s nguyn t.

- Dng 4 : gm cc s khng phi l s nguyn t.

8. Vit chng trnh tnh tng bnh phng ca cc s m trong mt mng cc s


nguyn.

9. Vit chng trnh thc hin vic o mt mng mt chiu.

V d : 1 2 3 4 5 7 9 10 o thnh 10 9 7 5 4 3 2 1 .

10. Vit chng trnh nhp vo hai ma trn A v B c cp m, n. In hai ma trn ln mn


hnh. Tng hai ma trn A v B l ma trn C c tnh bi cng thc:

cij= aij +bij ( i=0,1,2,...m-1; j=0,1,2...n-1)

Tnh ma trn tng C v in kt qu ln mn hnh.

11. Vit chng trnh nhp vo hai ma trn A c cp m, k v B c cp k, n. In hai ma


trn ln mn hnh. Tch hai ma trn A v B l ma trn C c tnh bi cng thc:

cij= ai1*b1j + ai2 *b2j + ai3 *b3j + ... + aik *bkj (i=0,1,2,...m-1;j=0,1,2...n-1)

Tnh ma trn tch C v in kt qu ln mn hnh.

12. Xt ma trn A vung cp n, cc phn t a[i, i] ( i= 1 ... n ) c gi l ng cho


chnh ca ma trn vung A. Ma trn vung A c gi l ma trn tam gic nu tt c
cc phn t di ng cho chnh u bng 0. nh thc ca ma trn tam gic bng
tch cc phn t trn ng cho chnh.

Ta c th chuyn mt ma trn vung bt k v ma trn tam gic bng thut ton:

- Xt ct i (i =0,1...n-2)

- Trong ct i xt cc phn t a[k,i] ( k=i+1...n-1)

128/199
+ Nu a[k,i]=0 th tng k ln xt phn t khc

+ Nu a[k,i] <> 0 th lm nh sau:

Nhn ton b hng k vi - a[i,i]/a[k,i]

Ly hng i cng vo hng k sau khi thc hin php nhn trn.

i ch hai hng i v k cho nhau

Nhn ton b hng k vi -1 sau khi i ch vi hng i

Tng k ln xt phn t khc.

Vit chng trnh tnh nh thc cp n thng qua cc bc nhp ma trn, in ma trn, a
ma trn v dng tam gic, in ma trn tam gic, in kt qu tnh nh thc.

13. Vit chng trnh thc hin vic trn hai dy c th t thnh mt dy c th t. Yu
cu khng c trn chung ri mi sp th t. Khi trn phi tn dng c tnh cht
sp ca hai dy con.

129/199
Chng VII. Kiu con tr
Mc tiu bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

Khi nim v kiu d liu con tr.


Cch khai bo v cch s dng bin kiu con tr.
Mi quan h gia mng v con tr.

130/199
Kiu d liu con tr

GII THIU KIU D LIU CON TR

Cc bin chng ta bit v s dng trc y u l bin c kch thc v kiu d liu
xc nh. Ngi ta gi cc bin kiu ny l bin tnh. Khi khai bo bin tnh, mt lng
nh cho cc bin ny s c cp pht m khng cn bit trong qu trnh thc thi
chng trnh c s dng ht lng nh ny hay khng. Mt khc, cc bin tnh dng
ny s tn ti trong sut thi gian thc thi chng trnh d c nhng bin m chng
trnh ch s dng 1 ln ri b.

Mt s hn ch c th gp phi khi s dng cc bin tnh:

Cp pht nh d, gy ra lng ph nh.


Cp pht nh thiu, chng trnh thc thi b li.

trnh nhng hn ch trn, ngn ng C cung cp cho ta mt loi bin c bit gi l


bin ng vi cc c im sau:

Ch pht sinh trong qu trnh thc hin chng trnh ch khng pht sinh lc
bt u chng trnh.
Khi chy chng trnh, kch thc ca bin, vng nh v a ch vng nh
c cp pht cho bin c th thay i.
Sau khi s dng xong c th gii phng tit kim ch trong b nh.

Tuy nhin cc bin ng khng c a ch nht nh nn ta khng th truy cp n chng


c. V th, ngn ng C li cung cp cho ta mt loi bin c bit na khc phc
tnh trng ny, l bin con tr (pointer) vi cc c im:

Bin con tr khng cha d liu m ch cha a ch ca d liu hay cha a


ch ca nh cha d liu.
Kch thc ca bin con tr khng ph thuc vo kiu d liu, lun c kch
thc c nh l 2 byte.

KHAI BO V S DNG BIN CON TR

Khai bo bin con tr

C php: <Kiu> * <Tn con tr>

ngha: Khai bo mt bin c tn l Tn con tr dng cha a ch ca cc bin c


kiu Kiu.

131/199
V d 1: Khai bo 2 bin a,b c kiu int v 2 bin pa, pb l 2 bin con tr kiu int.

int a, b, *pa, *pb;

V d 2: Khai bo bin f kiu float v bin pf l con tr float

float f, *pf;

Ghi ch: Nu cha mun khai bo kiu d liu m con tr ptr ang ch n, ta s dng:

void *ptr;

Sau , nu ta mun con tr ptr ch n kiu d liu g cng c. Tc dng ca khai


bo ny l ch dnh ra 2 bytes trong b nh cp pht cho bin con tr ptr.

Cc thao tc trn con tr

Gn a ch ca bin cho bin con tr

Ton t & dng nh v con tr n a ch ca mt bin ang lm vic.

C php: <Tn bin con tr>=&<Tn bin>

Gii thch: Ta gn a ch ca bin Tn bin cho con tr Tn bin con tr.

V d: Gn a ch ca bin a cho con tr pa, gn a ch ca bin b cho con tr pb.

pa=&a; pb=&b;

Lc ny, hnh nh ca cc bin trong b nh c m t:

a b B nh
pa pb 2 byte 2 byte

Lu :

Khi gn a ch ca bin tnh cho con tr cn phi lu kiu d liu ca chng. V d


sau y khng ng do khng tng thch kiu:

int Bien_Nguyen;

float *Con_Tro_Thuc;

132/199
...

Con_Tro_Thuc=&Bien_Nguyen;

Php gn y l sai v Con_Tro_Thuc l mt con tr kiu float (n ch c th cha


c a ch ca bin kiu float); trong khi , Bien_Nguyen c kiu int.

Ni dung ca nh con tr ch ti

truy cp n ni dung ca nh m con tr ch ti, ta s dng c php:

*<Tn bin con tr>

Vi cch truy cp ny th *<Tn bin con tr> c th coi l mt bin c kiu c m


t trong phn khai bo bin con tr.

V d: V d sau y cho php khai bo, gn a ch cng nh ly ni dung vng nh


ca bin con tr:

int x=100;

int *ptr;

ptr=&x;

int y= *ptr;

Lu : Khi gn a ch ca mt bin cho mt bin con tr, mi s thay i trn ni dung


nh con tr ch ti s lm gi tr ca bin thay i theo (thc cht ni dung nh v
bin ch l mt).

V d: on chng trnh sau thy r s thay i ny :

#include <stdio.h>

#include <conio.h>

int main()

int a,b,*pa,*pb;

a=2;

133/199
b=3;

clrscr();

printf("\nGia tri cua bien a=%d \nGia tri cua bien b=%d ",a,b);

pa=&a;

pb=&b;

printf("\nNoi dung cua o nho con tro pa tro toi=%d",*pa);

printf("\nNoi dung cua o nho con tro pb tro toi=%d ",*pb);

*pa=20; /* Thay i gi tr ca *pa*/

*pb=20; /* Thay i gi tr ca *pb*/

printf("\nGia tri moi cua bien a=%d \n

Gia tri moi cua bien b=%d ",a,b); /* a, b thay i theo*/

getch();

return 0;

Kt qu thc hin chng trnh:

Cp pht vng nh cho bin con tr

Trc khi s dng bin con tr, ta nn cp pht vng nh cho bin con tr ny qun
l a ch. Vic cp pht c thc hin nh cc hm malloc(), calloc() trong th vin
alloc.h.

C php cc hm:

134/199
void *malloc(size_t size): Cp pht vng nh c kch thc l size.

void *calloc(size_t nitems, size_t size): Cp pht vng nh c kch thc l


nitems*size.

V d: Gi s ta c khai bo:

int a, *pa, *pb;

pa = (int*)malloc(sizeof(int)); /* Cp pht vng nh c kch thc bng vi kch thc


ca mt s nguyn */

pb= (int*)calloc(10, sizeof(int)); /* Cp pht vng nh c th cha c 10 s nguyn*/

Lc ny hnh nh trong b nh nh sau:

0 1 2 3 4 5 6 7 8 9

pa 2 byte pb 2 byte

Lu : Khi s dng hm malloc() hay calloc(), ta phi p kiu v nguyn mu cc hm


ny tr v con tr kiu void.

Cp pht li vng nh cho bin con tr

Trong qu trnh thao tc trn bin con tr, nu ta cn cp pht thm vng nh c kch
thc ln hn vng nh cp pht, ta s dng hm realloc().

C php: void *realloc(void *block, size_t size)

ngha:

- Cp pht li 1 vng nh cho con tr block qun l, vng nh ny c kch thc mi l


size; khi cp pht li th ni dung vng nh trc vn tn ti.

- Kt qu tr v ca hm l a ch u tin ca vng nh mi. a ch ny c th khc


vi a ch c ch ra khi cp pht ban u.

V d: Trong v d trn ta c th cp pht li vng nh do con tr pa qun l nh sau:

int a, *pa;

pa=(int*)malloc(sizeof(int)); /*Cp pht vng nh c kch thc 2 byte*/

135/199
pa = realloc(pa, 6); /* Cp pht li vng nh c kch thc 6 byte*/

Gii phng vng nh cho bin con tr

Mt vng nh cp pht cho bin con tr, khi khng cn s dng na, ta s thu hi li
vng nh ny nh hm free().

C php: void free(void *block)

ngha: Gii phng vng nh c qun l bi con tr block.

V d: v d trn, sau khi thc hin xong, ta gii phng vng nh cho 2 bin con tr
pa & pb:

free(pa);

free(pb);

Mt s php ton trn con tr

a. Php gn con tr: Hai con tr cng kiu c th gn cho nhau.

V d:

int a, *p, *a ; float *f;

a = 5 ; p = &a ; q = p ; /* ng */

f = p ; /* sai do khc kiu */

Ta cng c th p kiu con tr theo c php:

(<Kiu kt qu>*)<Tn con tr>

Chng hn, v d trn c vit li:

int a, *p, *a ; float *f;

a = 5 ; p = &a ; q = p ; /* ng */

f = (float*)p; /* ng nh p kiu*/

b. Cng, tr con tr vi mt s nguyn

136/199
Ta c th cng (+), tr (-) 1 con tr vi 1 s nguyn N no ; kt qu tr v l 1 con
tr. Con tr ny ch n vng nh cch vng nh ca con tr hin ti N phn t.

V d: Cho on chng trnh sau:

int *pa;

pa = (int*) malloc(20); /* Cp pht vng nh 20 byte=10 s nguyn*/

int *pb, *pc;

pb = pa + 7;

pc = pb - 3;

Lc ny hnh nh ca pa, pb, pc nh sau:

0 1 2 3 4 5 6 7 8 9

pa pc pb

c. Con tr NULL: l con tr khng cha a ch no c. Ta c th gn gi tr NULL cho


1 con tr c kiu bt k.

d. Lu :

- Ta khng th cng 2 con tr vi nhau.

- Php tr 2 con tr cng kiu s tr v 1 gi tr nguyn (int). y chnh l khong cch


(s phn t) gia 2 con tr . Chng hn, trong v d trn pc-pa=4.

CON TR V MNG

Con tr v mng 1 chiu

Gia mng v con tr c mt s lin h rt cht ch. Nhng phn t ca mng c th


c xc nh bng ch s trong mng, bn cnh chng cng c th c xc lp qua
bin con tr.

Truy cp cc phn t mng theo dng con tr

Ta c cc quy tc sau:

137/199
&<Tn mng>[0] tng ng vi <Tn mng>

&<Tn mng> [<V tr>] tng ng vi <Tn mng> + <V tr>

<Tn mng>[<V tr>] tng ng vi *(<Tn mng> + <V tr>)

V d: Cho 1 mng 1 chiu cc s nguyn a c 5 phn t, truy cp cc phn t theo kiu


mng v theo kiu con tr.

#include <stdio.h>

#include <conio.h>

/* Nhp mng bnh thng*/

void NhapMang(int a[], int N){

int i;

for(i=0;i<N;i++)

printf("Phan tu thu %d: ",i);scanf("%d",&a[i]);

/* Nhp mng theo dng con tr*/

void NhapContro(int a[], int N)

int i;

for(i=0;i<N;i++){

printf("Phan tu thu %d: ",i);scanf("%d",a+i);

138/199
int main()

int a[20],N,i;

clrscr();

printf("So phan tu N= ");scanf("%d",&N);

NhapMang(a,N); /* NhapContro(a,N)*/

printf("Truy cap theo kieu mang: ");

for(i=0;i<N;i++)

printf("%d ",a[i]);

printf("\nTruy cap theo kieu con tro: ");

for(i=0;i<N;i++)

printf("%d ",*(a+i));

getch();

return 0;

Kt qu thc thi ca chng trnh:

Truy xut tng phn t ang c qun l bi con tr theo dng mng

<Tn bin>[<V tr>] tng ng vi *(<Tn bin> + <V tr>)

&<Tn bin> [ <V tr> ] tng ng vi (<Tn bin> + <V tr>)

139/199
Trong <Tn bin> l bin con tr, <V tr> l 1 biu thc s nguyn.

V d: Gi s c khai bo:

#include <stdio.h>

#include <alloc.h>

#include <conio.h>

int main(){

int *a;

int i;

clrscr();

a=(int*)malloc(sizeof(int)*10);

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

a[i] = 2*i;

printf("Truy cap theo kieu mang: ");

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

printf("%d ",a[i]);

printf("\nTruy cap theo kieu con tro: ");

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

printf("%d ",*(a+i));

getch();

return 0;

Kt qu chng trnh:

140/199
Vi khai bo trn, hnh nh ca con tr a trong b nh:

0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
a 2 byte

Con tr ch n phn t mng

Gi s con tr ptr ch n phn t a[i] no ca mng a th:

ptr + j ch n phn t th j sau a[i], tc a[i+j]

ptr - j ch n phn t ng trc a[i], tc a[i-j]

V d: Gi s c 1 mng mang_int, cho con tr contro_int ch n phn t th 5 trong


mng. In ra cc phn t ca contro_int & mang_int.

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

int main()

int i,mang_int[10];

int *contro_int;

clrscr();

for(i=0;i<=9;i++)

mang_int[i]=i*2;

contro_int=&mang_int[5];

141/199
printf("\nNoi dung cua mang_int ban dau=");

for (i=0;i<=9;i++)

printf("%d ",mang_int[i]);

printf("\nNoi dung cua contro_int ban dau =");

for (i=0;i<5;i++)

printf("%d ",contro_int[i]);

for(i=0;i<5;i++)

contro_int[i]++;

printf("\n--------------------------------------------------------");

printf("\nNoi dung cua mang_int sau khi tang 1=");

for (i=0;i<=9;i++)

printf("%d ",mang_int[i]);

printf("\nNoi dung cua contro_int sau khi tang 1=");

for (i=0;i<5;i++)

printf("%d ",contro_int[i]);

if (contro_int!=NULL)

free(contro_int);

getch();

return 0;

Kt qu chng trnh

142/199
Con tr v mng nhiu chiu

Ta c th s dng con tr thay cho mng nhiu chiu nh sau:

Gi s ta c mng 2 chiu v bin con tr nh sau:

int a[n][m];

int *contro_int;

Thc hin php gn contro_int=a;

Khi phn t a[0][0] c qun l bi contro_int;

a[0][1] c qun l bi contro_int+1;

a[0][2] c qun l bi contro_int+2;

...

a[1][0] c qun l bi contro_int+m;

a[1][1] c qun l bi contro_int+m+1;

...

a[n][m] c qun l bi contro_int+n*m;

Tng t nh th i vi mng nhiu hn 2 chiu.

V d: S tng ng gia mng 2 chiu v con tr.

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

143/199
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;

clrscr();

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---------------------------------");

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--------------------------------------------------------");

144/199
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;

Kt qu thc hin chng trnh nh sau:

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***

CON TR V THAM S HNH THC CA HM

Khi tham s hnh thc ca hm l mt con tr th theo nguyn tc gi hm ta dng tham


s thc t l 1 con tr c kiu ging vi kiu ca tham s hnh thc. Nu lc thc thi
hm ta c s thay i trn ni dung vng nh c ch bi con tr tham s hnh thc th
lc ni dung vng nh c ch bi tham s thc t cng s b thay i theo.

V d : Xt hm hon v c vit nh sau :

#include<stdio.h>

145/199
#include<conio.h>

void HoanVi(int *a, int *b)

int c=*a;

*a=*b;

*b=c;

int main()

int m=20,n=30;

clrscr();

printf("Truoc khi goi ham m= %d, n= %d\n",m,n);

HoanVi(&m,&n);

printf("Sau khi goi ham m= %d, n= %d",m,n);

getch();

return 0;

Kt qu thc thi chng trnh:

146/199
147/199
Bi tp

Mc tiu

Tip cn vi mt kiu d liu rt mnh trong C l kiu con tr. T , sinh vin c th
xy dng cc ng dng bng cch s dng cp pht ng thng qua bin con tr.

Ni dung

Thc hin cc bi tp chng trc (chng VI : Kiu mng) bng cch s dng con
tr.

148/199
Chng VIII. Chui k t
Mc tiu ca bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

Khi nim v chui k t.


Mt s hm x l chui v ng dng ca chng trong thc t.

149/199
Chui k t v cc thao tc trn chui k t

KHI NIM

Chui k t l mt dy gm cc k t hoc mt mng cc k t c kt thc bng k


t \0 (cn c gi l k t NULL trong bng m Ascii).

Cc hng chui k t c t trong cp du nhy kp .

KHAI BO

Khai bo theo mng

C php: char <Bin> [Chiu di ti a]

V d: Trong chng trnh, ta c khai bo:

char Ten[12];

Trong khai bo ny, b nh s cung cp 12+1 bytes lu tr ni dung ca chui k t


Ten; byte cui cng lu tr k t \0 chm dt chui.

Ghi ch:

- Chiu di ti a ca bin chui l mt hng nguyn nm trong khong t 1 n 255


bytes.

- Chiu di ti a khng nn khai bo tha trnh lng ph b nh, nhng cng khng
nn khai bo thiu.

Khai bo theo con tr

C php: char *<Bin>

V d: Trong chng trnh, ta c khai bo:

char *Ten;

Trong khai bo ny, b nh s dnh 2 byte lu tr a ch ca bin con tr Ten ang


ch n, cha cung cp ni lu tr d liu. Mun c ch lu tr d liu, ta phi
gi n hm malloc() hoc calloc() c trong alloc.h, sau mi gn d liu cho bin.

150/199
Va khai bo va gn gi tr

C php: char <Bin> []= < Hng chui>

V d:

#include<stdio.h>

#include<conio.h>

int main()

char Chuoi[]="Mau nang hay la mau mat em ;

printf("Vua khai bao vua gan tr : %s,Chuoi) ;

getch();

return 0;

* Ghi ch: Chui c khai bo l mt mng cc k t nn cc thao tc trn mng c


th p dng i vi chui k t.

CC THAO TC TRN CHUI K T

Nhp xut chui

Nhp chui t bn phm

nhp mt chui k t t bn phm, ta s dng hm gets()

C php: gets(<Bin chui>)

V d: char Ten[20];

gets(Ten);

Ta cng c th s dng hm scanf() nhp d liu cho bin chui, tuy nhin lc ny ta
ch c th nhp c mt chui khng c du khong trng.

151/199
Ngoi ra, hm cgets() (trong conio.h) cng c s dng nhp chui.

Xut chui ln mn hnh

xut mt chui (biu thc chui) ln mn hnh, ta s dng hm puts().

C php: puts(<Biu thc chui>)

V d: Nhp vo mt chui v hin th trn mn hnh 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();

return 0;

Ngoi ra, ta c th s dng hm printf(), cputs() (trong conio.h) hin th chui ln


mn hnh.

Mt s hm x l chui (trong string.h)

Cng chui - Hm strcat()

C php: char *strcat(char *des, const char *source)

Hm ny c tc dng ghp chui ngun vo chui ch.

V d: Nhp vo h lt v tn ca mt ngi, sau in c h v tn ca h ln mn hnh.

152/199
#include<conio.h>

#include<stdio.h>

#include<string.h>

int main()

char HoLot[30], Ten[12];

printf("Nhap Ho Lot: ");gets(HoLot);

printf("Nhap Ten: ");gets(Ten);

strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/

printf("Ho ten la: ");puts(HoLot);

getch();

return 0;

Xc nh di chui - Hm strlen()

C php: int strlen(const char* s)

V d: S dng hm strlen xc nh di mt chui nhp t bn phm.

#include<conio.h>

#include<stdio.h>

#include<string.h>

int main(){

char Chuoi[255];

int Dodai;

153/199
printf("Nhap chuoi: ");gets(Chuoi);

Dodai = strlen(Chuoi)

printf("Chuoi vua nhap: ");puts(Chuoi);

printf(Co do dai %d,Dodai);

getch();

return 0;

i mt k t thng thnh k t hoa - Hm toupper()

Hm toupper() (trong ctype.h) c dng chuyn i mt k t thng thnh k t


hoa.

C php: char toupper(char c)

i chui ch thng thnh chui ch hoa, hm strupr()

Hm struppr() c dng chuyn i chui ch thng thnh chui ch hoa, kt qu


tr v ca hm l mt con tr ch n a ch chui c chuyn i.

C php: char *strupr(char *s)

V d: Vit chng trnh nhp vo mt chui k t t bn phm. Sau s dng hm


strupr() chuyn i chng thnh chui ch hoa.

#include<conio.h>

#include<stdio.h>

#include<string.h>

int main()

char Chuoi[255],*s;

printf("Nhap chuoi: ");gets(Chuoi);

154/199
s=strupr(Chuoi) ;

printf(Chuoi chu hoa: );puts(s);

getch();

return 0;

i chui ch hoa thnh chui ch thng, hm strlwr()

Mun chuyn i chui ch hoa thnh chui ton ch thng, ta s dng hm strlwr(),
cc tham s ca hm tng t nh hm strupr()

C php: char *strlwr(char *s)

Sao chp chui, hm strcpy()

Hm ny c dng sao chp ton b ni dung ca chui ngun vo chui ch.

C php: char *strcpy(char *Des, const char *Source)

V d: Vit chng trnh cho php chp ton b chui ngun vo chui ch.

#include<conio.h>

#include<stdio.h>

#include<string.h>

int main()

char Chuoi[255],s[255];

printf("Nhap chuoi: ");gets(Chuoi);

strcpy(s,Chuoi);

printf(Chuoi dich: );puts(s);

getch();

155/199
return 0;

Sao chp mt phn chui, hm strncpy()

Hm ny cho php chp n k t u tin ca chui ngun sang chui ch.

C php: char *strncpy(char *Des, const char *Source, size_t n)

Trch mt phn chui, hm strchr()

trch mt chui con ca mt chui k t bt u t mt k t c ch nh trong


chui cho n ht chui, ta s dng hm strchr().

C php : char *strchr(const char *str, int c)

Ghi ch:

- Nu k t ch nh khng c trong chui, kt qu tr v l NULL.

- Kt qu tr v ca hm l mt con tr, con tr ny ch n k t c c tm thy u


tin trong chui str.

Tm kim ni dung chui, hm strstr()

Hm strstr() c s dng tm kim s xut hin u tin ca chui s2 trong chui


s1.

C php: char *strstr(const char *s1, const char *s2)

Kt qu tr v ca hm l mt con tr ch n phn t u tin ca chui s1 c cha


chui s2 hoc gi tr NULL nu chui s2 khng c trong chui s1.

V d: Vit chng trnh s dng hm strstr() ly ra mt phn ca chui gc bt u


t chui hoc.

#include<conio.h>

#include<stdio.h>

#include<string.h>

int main()

156/199
{

char Chuoi[255],*s;

printf("Nhap chuoi: ");gets(Chuoi);

s=strstr(Chuoi,hoc);

printf(Chuoi trich ra: );puts(s);

getch();

return 0;

So snh chui, hm strcmp()

so snh hai chui theo tng k t trong bng m Ascii, ta c th s dng hm


strcmp().

C php: int strcmp(const char *s1, const char *s2)

Hai chui s1 v s2 c so snh vi nhau, kt qu tr v l mt s nguyn (s ny c


c bng cch ly k t ca s1 tr k t ca s2 ti v tr u tin xy ra s khc nhau).

- Nu kt qu l s m, chui s1 nh hn chui s2.

- Nu kt qu l 0, hai chui bng nhau.

- Nu kt qu l s dng, chui s1 ln hn chui s2.

So snh chui, hm stricmp()

Hm ny thc hin vic so snh trong n k t u tin ca 2 chui s1 v s2, gia ch


thng v ch hoa khng phn bit.

C php: int stricmp(const char *s1, const char *s2)

Kt qu tr v tng t nh kt qu tr v ca hm strcmp()

157/199
Khi to chui, hm memset()

Hm ny c s dng t n k t u tin ca chui l k t c.

C php: memset(char *Des, int c, size_t n)

i t chui ra s, hm atoi(), atof(), atol() (trong stdlib.h)

chuyn i chui ra s, ta s dng cc hm trn.

C php : int atoi(const char *s) : chuyn chui thnh s nguyn

long atol(const char *s) : chuyn chui thnh s nguyn di

float atof(const char *s) : chuyn chui thnh s thc

Nu chuyn i khng thnh cng, kt qu tr v ca cc hm l 0.

Ngoi ra, th vin string.h cn h tr cc hm x l chui khc, ta c th c thm


trong phn tr gip.

158/199
Bi tp

Mc ch yu cu

i su vo kiu d liu chui v cc php ton trn chui.

Ni dung

1. Vit chng trnh nhp mt chui k t t bn phm, xut ra mn hnh m Ascii ca


tng k t c trong chui.

2. Vit chng trnh nhp mt chui k t t bn phm, xut ra mn hnh chui o


ngc ca chui . V d o ca abcd egh l hge dcba.

3. Vit chng trnh nhp mt chui k t v kim tra xem chui c i xng khng.

V d : Chui ABCDEDCBA l chui i xng.

4. Nhp vo mt chui bt k, hy m s ln xut hin ca mi loi k t.

5. Vit chng trnh nhp vo mt chui.

- In ra mn hnh t bn tri nht v phn cn li ca chui. V d: Nguyn Vn Minh


in ra thnh:

Nguyn

Vn Minh

- In ra mn hnh t bn phi nht v phn cn li ca chui. V d: Nguyn Vn Minh


in ra thnh:

Minh

Nguyn Vn

6. Vit chng trnh nhp vo mt chui ri xut chui ra mn hnh di dng mi


t mt dng.

V d: Nguyn Vn Minh

In ra :

159/199
Nguyn

Vn

Minh

7. Vit chng trnh nhp vo mt chui, in ra chui o ngc ca n theo tng t.

V d : chui Nguyn Vn Minh o thnh Minh Vn Nguyn

8. Vit chng trnh i s tin t s thnh ch.

9. Vit chng trnh nhp vo h v tn ca mt ngi, ct b cc khong trng khng


cn thit (nu c), tch tn ra khi h v tn, in tn ln mn hnh. Ch n trng hp
c h v tn ch c mt t.

10. Vit chng trnh nhp vo h v tn ca mt ngi, ct b cc khong trng bn


phi, tri v cc khong trng khng c ngha trong chui. In ra mn hnh ton b h tn
ngi di dng ch hoa, ch thng.

11. Vit chng trnh nhp vo mt danh sch h v tn ca n ngi theo kiu ch
thng, i cc ch ci u ca h, tn v ch lt ca mi ngi thnh ch hoa. In kt
qu ln mn hnh.

12. Vit chng trnh nhp vo mt danh sch h v tn ca n ngi, tch tn tng ngi
ra khi h v tn ri sp xp danh sch tn theo th t t in. In danh sch h v tn
sau khi sp xp.

160/199
Chng IX. Kiu cu trc
Mc tiu ca bi hc

Hc xong chng ny, sinh vin s nm c cc vn sau:

Khi nim v kiu cu trc.


Cch s dng kiu cu trc.
Con tr cu trc.

161/199
Kiu cu trc v cc thao tc trn kiu cu trc

KIU CU TRC TRONG C

Khi nim

Kiu cu trc (Structure) l kiu d liu bao gm nhiu thnh phn c kiu khc nhau,
mi thnh phn c gi l mt trng (field)

S khc bit gia kiu cu trc v kiu mng l: cc phn t ca mng l cng kiu cn
cc phn t ca kiu cu trc c th c kiu khc nhau.

Hnh nh ca kiu cu trc c minh ha:

1 2 3 4 5 6 Trng7

y l cu trc c 7 trng

Cn kiu mng c dng:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 Phn t14

y l mng c 15 phn t

nh ngha kiu cu trc

Cch 1:

struct <Tn cu trc>

<Kiu> <Trng 1> ;

<Kiu> <Trng 2> ;

..

<Kiu> <Trng n> ;

};

162/199
Cch 2: S dng t kha typedef nh ngha kiu:

typedef struct

<Kiu> <Trng 1> ;

<Kiu> <Trng 2> ;

..

<Kiu> <Trng n> ;

} <Tn cu trc>;

Trong :

- <Tn cu trc>: l mt tn c t theo quy tc t tn ca danh biu; tn ny mang


ngha s l tn kiu cu trc.

- <Kiu> <Trng i> (i=1..n): mi trng trong cu trc c d liu thuc kiu g (tn
ca trng phi l mt tn c t theo quy tc t tn ca danh biu).

V d 1: qun l ngy, thng, nm ca mt ngy trong nm ta c th khai bo kiu


cu trc gm 3 thng tin: ngy, thng, nm.

struct NgayThang

unsigned char Ngay;

unsigned char Thang;

unsigned int Nam;

};

typedef struct

unsigned char Ngay;

163/199
unsigned char Thang;

unsigned int Nam;

} NgayThang;

V d 2: Mi sinh vin cn c qun l bi cc thng tin: m s sinh vin, h tn, ngy


thng nm sinh, gii tnh, a ch thng tr. Lc ny ta c th khai bo mt struct gm
cc thng tin trn.

struct SinhVien

char MSSV[10];

char HoTen[40];

struct NgayThang NgaySinh;

int Phai;

char DiaChi[40];

};

typedef struct

char MSSV[10];

char HoTen[40];

NgayThang NgaySinh;

int Phai;

char DiaChi[40];

} SinhVien;

164/199
Khai bo bin cu trc

Vic khai bo bin cu trc cng tng t nh khai bo bin thuc kiu d liu chun.

C php:

- i vi cu trc c nh ngha theo cch 1:

struct <Tn cu trc> <Bin 1> [, <Bin 2>];

- i vi cc cu trc c nh ngha theo cch 2:

<Tn cu trc> <Bin 1> [, <Bin 2>];

V d: Khai bo bin NgaySinh c kiu cu trc NgayThang; bin SV c kiu cu trc


SinhVien.

struct NgayThang NgaySinh;

struct SinhVien SV;

NgayThang NgaySinh;

SinhVien SV;

CC THAO TC TRN BIN KIU CU TRC

Truy xut n tng trng ca bin cu trc

C php: <Bin cu trc>.<Tn trng>

Khi s dng cch truy xut theo kiu ny, cc thao tc trn <Bin cu trc>.<Tn
trng> ging nh cc thao tc trn cc bin ca kiu d liu ca <Tn trng>.

V d : Vit chng trnh cho php c d liu t bn phm cho bin mu tin SinhVien
v in bin mu tin ln mn hnh:

#include<conio.h>

#include<stdio.h>

#include<string.h>

typedef struct

165/199
{

unsigned char Ngay;

unsigned char Thang;

unsigned int Nam;

} NgayThang;

typedef struct

char MSSV[10];

char HoTen[40];

NgayThang NgaySinh;

int Phai;

char DiaChi[40];

} SinhVien;

/* Hm in ln mn hnh 1 mu tin SinhVien*/

void InSV(SinhVien s)

printf("MSSV: | Ho va ten | Ngay Sinh | Dia chi\n");

printf("%s | %s | %d-%d-%d | %s\n",s.MSSV,s.HoTen,

s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi);

int main()

166/199
SinhVien SV, s;

printf("Nhap MSSV: ");gets(SV.MSSV);

printf("Nhap Ho va ten: ");gets(SV.HoTen);

printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay);

printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang);

printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam);

printf("Gioi tinh (0: Nu), (1: Nam): ");scanf("%d",&SV.Phai);

flushall();

printf("Dia chi: ");gets(SV.DiaChi);

InSV(SV);

s=SV; /* Gn tr cho mu tin s*/

InSV(s);

getch();

return 0;

Lu :

- Cc bin cu trc c th gn cho nhau. Thc cht y l thao tc trn ton b cu trc
khng phi trn mt trng ring r no. Chng trnh trn dng s=SV l mt v d.

167/199
- Vi cc bin kiu cu trc ta khng th thc hin c cc thao tc sau y:

S dng cc hm xut nhp trn bin cu trc.


Cc php ton quan h, cc php ton s hc v logic.

V d: Nhp vo hai s phc v tnh tng ca chng. Ta bit rng s phc l mt cp


(a,b) trong a, b l cc s thc, a gi l phn thc, b l phn o. (i khi ngi ta cng
vit s phc di dng a + ib trong i l mt n v o c tnh cht i2=-1). Gi s phc
c1=(a1, b1) v c2=(a2,b2) khi tng ca hai s phc c1 v c2 l mt s phc c3 m
c3=(a1+a2, b1+b2). Vi hiu bit nh vy ta c th xem mi s phc l mt cu trc c
hai trng, mt trng biu din cho phn thc, mt trng biu din cho phn o. Vic
tnh tng ca hai s phc c tnh bng cch ly phn thc cng vi phn thc v phn
o cng vi phn o.

#include<conio.h>

#include<stdio.h>

#include<string.h>

typedef struct

float Thuc;

float Ao;

} SoPhuc;

/* Hm in s phc ln mn hnh*/

void InSoPhuc(SoPhuc p)

printf("%.2f + i%.2f\n",p.Thuc,p.Ao);

int main()

168/199
SoPhuc p1,p2,p;

clrscr();

printf("Nhap so phuc thu nhat:\n");

printf("Phan thuc: ");scanf("%f",&p1.Thuc);

printf("Phan ao: ");scanf("%f",&p1.Ao);

printf("Nhap so phuc thu hai:\n");

printf("Phan thuc: ");scanf("%f",&p2.Thuc);

printf("Phan ao: ");scanf("%f",&p2.Ao);

printf("So phuc thu nhat: ");

InSoPhuc(p1);

printf("So phuc thu hai: ");

InSoPhuc(p2);

p.Thuc = p1.Thuc+p2.Thuc;

p.Ao = p1.Ao + p2.Ao;

printf("Tong 2 so phuc: ");

InSoPhuc(p);

getch();

return 0;

Kt qu thc hin chng trnh:

169/199
Khi to cu trc

Vic khi to cu trc c th c thc hin trong lc khai bo bin cu trc. Cc trng
ca cu trc c khi to c t gia 2 du { v }, chng c phn cch nhau bi
du phy (,).

V d: Khi to bin cu trc NgaySinh:

struct NgayThang NgaySinh ={29, 8, 1986};

CON TR CU TRC

Khai bo

Vic khai bo mt bin con tr kiu cu trc cng tng t nh khi khai bo mt bin
con tr khc, ngha l t thm du * vo pha trc tn bin.

C php: struct <Tn cu trc> * <Tn bin con tr>;

V d: Ta c th khai bo mt con tr cu trc kiu NgayThang nh sau:

struct NgayThang *p;

/* NgayThang *p; // Nu c nh ngha kiu */

S dng cc con tr kiu cu trc

Khi khai bo bin con tr cu trc, bin con tr cha c a ch c th. Lc ny n ch


mi c cp pht 2 byte lu gi a ch v c ghi nhn l con tr ch n 1 cu
trc, nhng cha ch n 1 i tng c th. Mun thao tc trn con tr cu trc hp l,
cng tng t nh cc con tr khc, ta phi:

- Cp pht mt vng nh cho n (s dng hm malloc() hay calloc)

- Hoc, cho n qun l a ch ca mt bin cu trc no .

170/199
V d: Sau khi khi to gi tr ca cu trc:

struct NgayThang Ngay = {29,8,1986};

p = &Ngay;

lc ny bin con tr p cha a ch ca Ngay.

Truy cp cc thnh phn ca cu trc ang c qun l bi con tr

truy cp n tng trng ca 1 cu trc thng qua con tr ca n, ta s dng ton t


du mi tn (->: du - v du >).

Ngoi ra, ta vn c th s dng n php ton * truy cp vng d liu ang c


qun l bi con tr cu trc ly thng tin cn thit.

V d: S dng con tr cu trc.

#include<conio.h>

#include<stdio.h>

typedef struct

unsigned char Ngay;

unsigned char Thang;

unsigned int Nam;

} NgayThang;

int main()

NgayThang Ng={29,8,1986};

NgayThang *p;

clrscr();

171/199
p=&Ng;

printf("Truy cap binh thuong %d-%d-%d\n",

Ng.Ngay,Ng.Thang,Ng.Nam);

printf("Truy cap qua con tro %d-%d-%d\n",

p->Ngay,p->Thang,p->Nam);

printf("Truy cap qua vung nho con tro %d-%d-%d\n",

(*p).Ngay,(*p).Thang,(*p).Nam);

getch();

return 0;

Kt qu:

172/199
Bi tp v kiu cu trc

Mc ch yu cu

Lm quen v bit cch s dng kiu d liu cu trc kt hp vi cc kiu d liu hc.
Phn bit kiu d liu mng v kiu cu trc. Thc hin cc bi tp trong phn ni dung.

Ni dung

1. Hy nh ngha kiu:

struct Hoso{

char HoTen[40];

float Diem;

char Loai[10];

};

Vit chng trnh nhp vo h tn, im ca n hc sinh. Xp loi vn ha theo cch sau:

im Xp loi

9, 10 Gii

7, 8 Kh

5, 6 Trung bnh

di 5 Khng t

In danh sch ln mn hnh theo dng sau:

XEP LOAI VAN HOA

HO VA TEN DIEM XEPLOAI

Nguyen Van A 7 Kha

Ho Thi B 5 Trung binh

173/199
Dang Kim C 4 Khong dat

........................................................................................................

2. Xem mt phn s l mt cu trc c hai trng l t s v mu s. Hy vit chng


trnh thc hin cc php ton cng, tr, nhn, chia hai phn s. (Cc kt qu phi ti
gin ).

3. To mt danh sch cn b cng nhn vin, mi ngi ngi xem nh mt cu trc


bao gm cc trng Ho, Ten, Luong, Tuoi, Dchi. Nhp mt s ngi vo danh sch, sp
xp tn theo th t t in, in danh sch sp xp theo mu sau:

DANH SACH CAN BO CONG NHAN VIEN

174/199
Chng X. Kiu tp tin
Mc tiu bi hc

Hc xong chng ny, sinh vin s nm r cc vn sau:

Mt s khi nim v tp tin?


Cc bc thao tc vi tp tin.
Mt s hm truy xut tp tin vn bn.
Mt s hm truy xut tp tin nh phn.

175/199
Kiu tp tin v cc thao tc trn kiu tp tin

MT S KHI NIM V TP TIN

i vi cc kiu d liu ta bit nh kiu s, kiu mng, kiu cu trc th d liu c


t chc trong b nh trong (RAM) ca my tnh nn khi kt thc vic thc hin chng
trnh th d liu cng b mt; khi cn chng ta bt buc phi nhp li t bn phm. iu
va mt thi gian va khng gii quyt c cc bi ton vi s liu ln. gii
quyt vn , ngi ta a ra kiu tp tin (file) cho php lu tr d liu b nh ngoi
(a). Khi kt thc chng trnh th d liu vn cn do chng ta c th s dng nhiu
ln. Mt c im khc ca kiu tp tin l kch thc ln vi s lng cc phn t khng
hn ch (ch b hn ch bi dung lng ca b nh ngoi).

C 3 loi d liu kiu tp tin:

Tp tin vn bn (Text File): l loi tp tin dng ghi cc k t ln a, cc k


t ny c lu tr di dng m Ascii. im c bit l d liu ca tp tin
c lu tr thnh cc dng, mi dng c kt thc bng k t xung dng
(new line), k hiu \n; k t ny l s kt hp ca 2 k t CR (Carriage
Return - V u dng, m Ascii l 13) v LF (Line Feed - Xung dng, m
Ascii l 10). Mi tp tin c kt thc bi k t EOF (End Of File) c m Ascii
l 26 (xc nh bi t hp phm Ctrl + Z).

Tp tin vn bn ch c th truy xut theo kiu tun t.

Tp tin nh kiu (Typed File): l loi tp tin bao gm nhiu phn t c cng
kiu: char, int, long, cu trc v c lu tr trn a di dng mt chui
cc byte lin tc.
Tp tin khng nh kiu (Untyped File): l loi tp tin m d liu ca chng
gm cc cu trc d liu m ngi ta khng quan tm n ni dung hoc kiu
ca n, ch lu n cc yu t vt l ca tp tin nh ln v cc yu t tc
ng ln tp tin m thi.

Bin tp tin: l mt bin thuc kiu d liu tp tin dng i din cho mt tp tin. D
liu cha trong mt tp tin c truy xut qua cc thao tc vi thng s l bin tp tin
i din cho tp tin .

Con tr tp tin: Khi mt tp tin c m ra lm vic, ti mi thi im, s c mt


v tr ca tp tin m ti vic c/ghi thng tin s xy ra. Ngi ta hnh dung c mt
con tr ang ch n v tr v t tn n l con tr tp tin.

176/199
Sau khi c/ghi xong d liu, con tr s chuyn dch thm mt phn t v pha cui tp
tin. Sau phn t d liu cui cng ca tp tin l du kt thc tp tin EOF (End Of File).

CC THAO TC TRN TP TIN

Mun thao tc trn tp tin, ta phi ln lt lm theo cc bc:

Khai bo bin tp tin.


M tp tin bng hm fopen().
Thc hin cc thao tc x l d liu ca tp tin bng cc hm c/ghi d liu.
ng tp tin bng hm fclose().

y, ta thao tc vi tp tin nh cc hm c nh ngha trong th vin stdio.h.

Khai bo bin tp tin

C php: FILE <Danh sch cc bin con tr>

Cc bin trong danh sch phi l cc con tr v c phn cch bi du phy(,).

V d: FILE *f1,*f2;

M tp tin

C php: FILE *fopen(char *Path, const char *Mode)

Trong :

- Path: chui ch ng dn n tp tin trn a.

- Type: chui xc nh cch thc m tp tin s m. Cc gi tr c th ca Mode:

Ch ngha
r M tp tin vn bn c
w To ra tp tin vn bn mi ghi
a Ni vo tp tin vn bn
rb M tp tin nh phn c
wb To ra tp tin nh phn ghi
ab Ni vo tp tin nh phn

177/199
r+ M mt tp tin vn bn c/ghi
w+ To ra tp tin vn bn c ghi
a+ Ni vo hay to mi tp tin vn bn c/ghi
r+b M ra tp tin nh phn c/ghi
w+b To ra tp tin nh phn c/ghi
a+b Ni vo hay to mi tp tin nh phn

- Hm fopen tr v mt con tr tp tin. Chng trnh ca ta khng th thay i gi tr


ca con tr ny. Nu c mt li xut hin trong khi m tp tin th hm ny tr v con tr
NULL.

V d: M mt tp tin tn TEST.txt ghi.

FILE *f;

f = fopen(TEST.txt, w);

if (f!=NULL)

/* Cc cu lnh thao tc vi tp tin*/

/* ng tp tin*/

Trong v d trn, ta c s dng cu lnh kim tra iu kin xc nh m tp tin c


thnh cng hay khng?.

Nu m tp tin ghi, nu tp tin tn ti ri th tp tin s b xa v mt tp tin mi


c to ra. Nu ta mun ghi ni d liu, ta phi s dng ch a. Khi m vi ch
c, tp tin phi tn ti ri, nu khng mt li s xut hin.

ng tp tin

Hm fclose() c dng ng tp tin c m bi hm fopen(). Hm ny s ghi d


liu cn li trong vng m vo tp tin v ng li tp tin.

C php: int fclose(FILE *f)

178/199
Trong f l con tr tp tin c m bi hm fopen(). Gi tr tr v ca hm l 0 bo
rng vic ng tp tin thnh cng. Hm tr v EOF nu c xut hin li.

Ngoi ra, ta cn c th s dng hm fcloseall() ng tt c cc tp tin li.

C php: int fcloseall()

Kt qu tr v ca hm l tng s cc tp tin c ng li. Nu khng thnh cng, kt


qu tr v l EOF.

Kim tra n cui tp tin hay cha?

C php: int feof(FILE *f)

ngha: Kim tra xem chm ti cui tp tin hay cha v tr v EOF nu cui tp tin
c chm ti, ngc li tr v 0.

Di chuyn con tr tp tin v u tp tin - Hm rewind()

Khi ta ang thao tc mt tp tin ang m, con tr tp tin lun di chuyn v pha cui tp
tin. Mun cho con tr quay v u tp tin nh khi m n, ta s dng hm rewind().

C php:void rewind(FILE *f)

TRUY CP TP TIN VN BN

Ghi d liu ln tp tin vn bn

Hm putc()

Hm ny c dng ghi mt k t ln mt tp tin vn bn ang c m lm vic.

C php: int putc(int c, FILE *f)

Trong , tham s c cha m Ascii ca mt k t no . M ny c ghi ln tp tin


lin kt vi con tr f. Hm ny tr v EOF nu gp li.

Hm fputs()

Hm ny dng ghi mt chui k t cha trong vng m ln tp tin vn bn.

C php: int puts(const char *buffer, FILE *f)

179/199
Trong , buffer l con tr c kiu char ch n v tr u tin ca chui k t c ghi
vo. Hm ny tr v gi tr 0 nu buffer cha chui rng v tr v EOF nu gp li.

III.1.3 Hm fprintf()

Hm ny dng ghi d liu c nh dng ln tp tin vn bn.

C php: fprintf(FILE *f, const char *format, varexpr)

Trong : format: chui nh dng (ging vi cc nh dng ca hm printf()), varexpr:


danh sch cc biu thc, mi biu thc cch nhau du phy (,).

nh dng ngha
%d Ghi s nguyn
Ghi s thc c <s ch s thp phn> theo quy tc lm
%[.s ch s thp phn] f
trn s.
%o Ghi s nguyn h bt phn
%x Ghi s nguyn h thp lc phn
%c Ghi mt k t
%s Ghi chui k t
%e hoc %E hoc %g hoc
Ghi s thc dng khoa hc (nhn 10 m x)
%G

V d: Vit chng trnh ghi chui k t ln tp tin vn bn D:\\Baihat.txt

#include<stdio.h>

#include<conio.h>

int main()

FILE *f;

clrscr();

f=fopen("D:\\Baihat.txt","r+");

if (f!=NULL)

180/199
{

fputs("Em oi Ha Noi pho.\n",f);

fputs("Ta con em, mui hoang lan; ta con em, mui hoa sua.",f);

fclose(f);

getch();

return 0;

Ni dung tp tin Baihat.txt khi c m bng trnh son tho vn bn Notepad.

c d liu t tp tin vn bn

Hm getc()

Hm ny dng c d liu t tp tin vn bn ang c m lm vic.

C php: int getc(FILE *f)

Hm ny tr v m Ascii ca mt k t no (k c EOF) trong tp tin lin kt vi con


tr f.

Hm fgets()

C php: char *fgets(char *buffer, int n, FILE *f)

Hm ny c dng c mt chui k t t tp tin vn bn ang c m ra v lin


kt vi con tr f cho n khi c n k t hoc gp k t xung dng \n (k t ny
cng c a vo chui kt qu) hay gp k t kt thc EOF (k t ny khng c
a vo chui kt qu).

181/199
Trong :

- buffer (vng m): con tr c kiu char ch n cng nh ln cha cc k t nhn


c.

- n: gi tr nguyn ch di ln nht ca chui k t nhn c.

- f: con tr lin kt vi mt tp tin no .

- K t NULL (\0) t ng c thm vo cui chui kt qu lu trong vng m.

- Hm tr v a ch u tin ca vng m khi khng gp li v cha gp k t kt thc


EOF. Ngc li, hm tr v gi tr NULL.

Hm fscanf()

Hm ny dng c d liu t tp tin vn bn vo danh sch cc bin theo nh dng.

C php: fscanf(FILE *f, const char *format, varlist)

Trong : format: chui nh dng (ging hm scanf()); varlist: danh sch cc bin mi
bin cch nhau du phy (,).

V d: Vit chng trnh chp tp tin D:\Baihat.txt trn sang tp tin D:\Baica.txt.

#include<stdio.h>

#include<conio.h>

int main()

FILE *f1,*f2;

clrscr();

f1=fopen("D:\\Baihat.txt","rt");

f2=fopen("D:\\Baica.txt","wt");

if (f1!=NULL && f2!=NULL)

182/199
int ch=fgetc(f1);

while (! feof(f1))

fputc(ch,f2);

ch=fgetc(f1);

fcloseall();

getch();

return 0;

TRUY CP TP TIN NH PHN

Ghi d liu ln tp tin nh phn - Hm fwrite()

C php: size_t fwrite(const void *ptr, size_t size, size_t n, FILE *f)

Trong :

- ptr: con tr ch n vng nh cha thng tin cn ghi ln tp tin.

- n: s phn t s ghi ln tp tin.

- size: kch thc ca mi phn t.

- f: con tr tp tin c m.

- Gi tr tr v ca hm ny l s phn t c ghi ln tp tin. Gi tr ny bng n tr khi


xut hin li.

c d liu t tp tin nh phn - Hm fread()

C php: size_t fread(const void *ptr, size_t size, size_t n, FILE *f)

183/199
Trong :

- ptr: con tr ch n vng nh s nhn d liu t tp tin.

- n: s phn t c c t tp tin.

- size: kch thc ca mi phn t.

- f: con tr tp tin c m.

- Gi tr tr v ca hm ny l s phn t c c t tp tin. Gi tr ny bng n hay


nh hn n nu chm n cui tp tin hoc c li xut hin..

Di chuyn con tr tp tin - Hm fseek()

Vic ghi hay c d liu t tp tin s lm cho con tr tp tin dch chuyn mt s byte,
y chnh l kch thc ca kiu d liu ca mi phn t ca tp tin.

Khi ng tp tin ri m li n, con tr lun v tr ngay u tp tin. Nhng nu ta s


dng kiu m tp tin l a ghi ni d liu, con tr tp tin s di chuyn n v tr cui
cng ca tp tin ny.

Ta cng c th iu khin vic di chuyn con tr tp tin n v tr ch nh bng hm


fseek().

C php: int fseek(FILE *f, long offset, int whence)

Trong :

f: con tr tp tin ang thao tc.


offset: s byte cn dch chuyn con tr tp tin k t v tr trc . Phn t u
tin l v tr 0.
whence: v tr bt u tnh offset, ta c th chn im xut pht l:

0 SEEK_SET V tr u tp tin
1 SEEK_CUR V tr hin ti ca con tr tp tin
2 SEEK_END V tr cui tp tin

Kt qu tr v ca hm l 0 nu vic di chuyn thnh cng. Nu khng thnh


cng, 1 gi tr khc 0 ( l 1 m li) c tr v.

184/199
V d

V d 1: Vit chng trnh ghi ln tp tin CacSo.Dat 3 gi tr s (thc, nguyn, nguyn


di). Sau c cc s t tp tin va ghi v hin th ln mn hnh.

#include<stdio.h>

#include<conio.h>

int main()

FILE *f;

clrscr();

f=fopen("D:\\CacSo.txt","wb");

if (f!=NULL)

double d=3.14;

int i=101;

long l=54321;

fwrite(&d,sizeof(double),1,f);

fwrite(&i,sizeof(int),1,f);

fwrite(&l,sizeof(long),1,f);

/* Doc tu tap tin*/

rewind(f);

fread(&d,sizeof(double),1,f);

fread(&i,sizeof(int),1,f);

fread(&l,sizeof(long),1,f);

185/199
printf("Cac ket qua la: %f %d %ld",d,i,l);

fclose(f);

getch();

return 0;

V d 2: Mi sinh vin cn qun l t nht 2 thng tin: m sinh vin v h tn. Vit
chng trnh cho php la chn cc chc nng: nhp danh sch sinh vin t bn phm
ri ghi ln tp tin SinhVien.dat, c d liu t tp tin SinhVien.dat ri hin th danh sch
ln mn hnh, tm kim h tn ca mt sinh vin no da vo m sinh vin nhp t
bn phm.

Ta nhn thy rng mi phn t ca tp tin SinhVien.Dat l mt cu trc c 2 trng: m


v h tn. Do , ta cn khai bo cu trc ny v s dng cc hm c/ghi tp tin nh
phn vi kch thc mi phn t ca tp tin l chnh kch thc cu trc .

#include<stdio.h>

#include<conio.h>

#include<string.h>

typedef struct

char Ma[10];

char HoTen[40];

} SinhVien;

void WriteFile(char *FileName)

FILE *f;

186/199
int n,i;

SinhVien sv;

f=fopen(FileName,"ab");

printf("Nhap bao nhieu sinh vien? ");scanf("%d",&n);

fflush(stdin);

for(i=1;i<=n;i++)

printf("Sinh vien thu %i\n",i);

printf(" - MSSV: ");gets(sv.Ma);

printf(" - Ho ten: ");gets(sv.HoTen);

fwrite(&sv,sizeof(sv),1,f);

fflush(stdin);

fclose(f);

printf("Bam phim bat ky de tiep tuc");

getch();

void ReadFile(char *FileName)

FILE *f;

SinhVien sv;

f=fopen(FileName,"rb");

187/199
printf(" MSSV | Ho va ten\n");

fread(&sv,sizeof(sv),1,f);

while (!feof(f))

printf(" %s | %s\n",sv.Ma,sv.HoTen);

fread(&sv,sizeof(sv),1,f);

fclose(f);

printf("Bam phim bat ky de tiep tuc!!!");

getch();

void Search(char *FileName)

char MSSV[10];

FILE *f;

int Found=0;

SinhVien sv;

fflush(stdin);

printf("Ma so sinh vien can tim: ");gets(MSSV);

f=fopen(FileName,"rb");

while (!feof(f) && Found==0)

188/199
fread(&sv,sizeof(sv),1,f);

if (strcmp(sv.Ma,MSSV)==0) Found=1;

fclose(f);

if (Found == 1)

printf("Tim thay SV co ma %s. Ho ten la: %s",sv.Ma,sv.HoTen);

else

printf("Tim khong thay sinh vien co ma %s",MSSV);

printf("\nBam phim bat ky de tiep tuc!!!");

getch();

int main()

int c;

for (;;)

clrscr();

printf("1. Nhap DSSV\n");

printf("2. In DSSV\n");

printf("3. Tim kiem\n");

printf("4. Thoat\n");

printf("Ban chon 1, 2, 3, 4: "); scanf("%d",&c);

189/199
if(c==1)

WriteFile("d:\\SinhVien.Dat");

else if (c==2)

ReadFile("d:\\SinhVien.Dat");

else if (c==3)

Search("d:\\SinhVien.Dat");

else break;

return 0;

Ngoi ra th vin stdio.h cn nh ngha mt s hm khc cho php thao tc vi tp tin,


sinh vin c th tham kho trong phn tr gip.

190/199
Bi tp

Mc ch yu cu

Nm vng cch s dng kiu d liu tp tin. Phn bit n vi tt c cc kiu d liu c
cu trc hc. Lm quen v bit cch thao tc trn tp tin. Vn dng cc kin thc
hc vit cc chng trnh trong phn ni dung.

Ni dung

1. Vit chng trnh qun l mt tp tin vn bn theo cc yu cu:

a- Nhp t bn phm ni dung mt vn bn sau ghi vo a.

b- c t a ni dung vn bn va nhp v in ln mn hnh.

c- c t a ni dung vn bn va nhp, in ni dung ln mn hnh v cho php ni


thm thng tin vo cui tp tin .

2. Vit chng trnh cho php thng k s ln xut hin ca cc k t l ch


(A..Z,a..z) trong mt tp tin vn bn.

3. Vit chng trnh m s t v s dng trong mt tp tin vn bn.

4. Vit chng trnh nhp t bn phm v ghi vo 1 tp tin tn l DMHH.DAT vi mi


phn t ca tp tin l 1 cu trc bao gm cc trng: Ma (m hng: char[5]), Ten (Tn
hng: char[20]).Kt thc vic nhp bng cch g ENTER vo Ma. Ta s dng tp tin
ny gii m hng ha cho tp tin DSHH.DAT s cp trong bi 5.

5. Vit chng trnh cho php nhp t bn phm v ghi vo 1 tp tin tn DSHH.Dat vi
mi phn t ca tp tin l mt cu trc bao gm cc trng : mh (m hng: char[5]), sl
(s lng : int), dg ( n gi: float), st (S tin: float) theo yu cu:

- Mi ln nhp mt cu trc

- Trc tin nhp m hng (mh), a mh so snh vi Ma trong tp tin DMHH.DAT


c to ra bi bi tp 1, nu mh=ma th in tn hng ngay bn cnh m hng.

- Nhp s lng (sl).

- Nhp n gi (dg).

191/199
- Tnh s tin = s lng * n gi.

Kt thc vic nhp bng cch nh ENTER vo m hng. Sau khi nhp xong yu cu in
ton b danh sch hng ha c s gii m v tn hng theo mu sau:

192/199
Tham gia ng gp
Ti liu: Gio Trnh Lp Trnh Cn Bn
Bin tp bi: duongvanhieu
URL: http://voer.edu.vn/c/ab1e3116
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Tng quan


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/2b52435d
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/6cb00baf
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Cu trc d liu v gii thut


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/0b2a1d9c
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/54bb3843
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/54a70db7
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Tng quan v ngn ng lp trnh C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/8c037c30

193/199
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mi trng lp trnh Turbo C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/3b84c454
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/70deba69
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Kiu d liu s cp chun trong C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/24f9d9ae
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Tn v hng trong C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/b7c15ef8
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bin v Biu thc Trong C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/b7247bc1
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/5aa417b4
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/fcaf32e3
Giy php: http://creativecommons.org/licenses/by/3.0/

194/199
Module: Cu lnh v cc lnh n trong C
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/22bf7c22
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp v cc cu lnh n trong C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/5921b36a
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/bbb0f95e
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Khi lnh trong lp trnh C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/04fff923
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Cu trc r nhnh trong lp trnh C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/8052147a
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Cu trc la chn


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/299fb935
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Cu trc vng lp v cc cu lnh c bit


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/4ca4de6e
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp

195/199
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/00bb1ba5
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu bi hc chng trnh con trong lp trnh C


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/78889014
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Hm v cch xy dng mt hm


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/c20ccc3f
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/c44c9b95
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/35a956c4
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mng 1 chiu v Mng nhiu chiu


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/8403024d
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/2e4b56f6
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu bi hc
Cc tc gi: unknown

196/199
URL: http://www.voer.edu.vn/m/4780ad23
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Kiu d liu con tr


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/f3f6bf0d
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/078a112e
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/c217a4e2
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Chui k t v cc thao tc trn chui k t


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/f72fc875
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/a60b108d
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/16253bc0
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Kiu cu trc v cc thao tc trn kiu cu trc


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/5d14167d

197/199
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp v kiu cu trc


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/eb5379b2
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Mc tiu bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/0eee65ab
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Kiu tp tin v cc thao tc trn kiu tp tin


Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/274438af
Giy php: http://creativecommons.org/licenses/by/3.0/

Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/6ba9186a
Giy php: http://creativecommons.org/licenses/by/3.0/

198/199
Chng trnh Th vin Hc liu M Vit Nam

Chng trnh Th vin Hc liu M Vit Nam (Vietnam Open Educational Resources
VOER) c h tr bi Qu Vit Nam. Mc tiu ca chng trnh l xy dng kho
Ti nguyn gio dc M min ph ca ngi Vit v cho ngi Vit, c ni dung phong
ph. Cc ni dung u tun th Giy php Creative Commons Attribution (CC-by) 4.0
do cc ni dung u c th c s dng, ti s dng v truy nhp min ph trc
ht trong trong mi trng ging dy, hc tp v nghin cu sau cho ton x hi.

Vi s h tr ca Qu Vit Nam, Th vin Hc liu M Vit Nam (VOER) tr thnh


mt cng thng tin chnh cho cc sinh vin v ging vin trong v ngoi Vit Nam. Mi
ngy c hng chc nghn lt truy cp VOER (www.voer.edu.vn) nghin cu, hc
tp v ti ti liu ging dy v. Vi hng chc nghn module kin thc t hng nghn
tc gi khc nhau ng gp, Th Vin Hc liu M Vit Nam l mt kho tng ti liu
khng l, ni dung phong ph phc v cho tt c cc nhu cu hc tp, nghin cu ca
c gi.

Ngun ti liu m phong ph c trn VOER c c l do s chia s t nguyn ca cc


tc gi trong v ngoi nc. Qu trnh chia s ti liu trn VOER tr ln d dng nh
m 1, 2, 3 nh vo sc mnh ca nn tng Hanoi Spring.

Hanoi Spring l mt nn tng cng ngh tin tin c thit k cho php cng chng d
dng chia s ti liu ging dy, hc tp cng nh ch ng pht trin chng trnh ging
dy da trn khi nim v hc liu m (OCW) v ti nguyn gio dc m (OER) . Khi
nim chia s tri thc c tnh cch mng c khi xng v pht trin tin phong
bi i hc MIT v i hc Rice Hoa K trong vng mt thp k qua. K t , phong
tro Ti nguyn Gio dc M pht trin nhanh chng, c UNESCO h tr v c
chp nhn nh mt chng trnh chnh thc nhiu nc trn th gii.

199/199

You might also like