You are on page 1of 96

B GIAO THNG VN TI

TRNG I HC HNG HI
B MN: KHOA HOC MAY TI NH
KHOA: CNG NGH THNG TIN

BI GING
K THUT LP TRNH C

TN HC PHN : K THUT LP TRNH C


M HC PHN : 17206
TRNH O TO : I HC CHNH QUY
DNG CHO SV NGNH : CNG NGH THNG TIN

HI PHNG - 2008

MC LC
MC LC .................................................................................................................................. 2
CHNG 1. GII THIU ........................................................................................................ 6
1.1. Gii thiu ngn ng lp trnh C. ...................................................................................... 6
1.2. Thut ton v s khi ................................................................................................. 8
CHNG 2. CC KHI NIM C BN V NGN NG LP TRNH C ......................... 9
2.1. Cc phn t c bn ca ngn ng lp trnh C. ............................................................... 9
2.2. Cu trc chung ca chng trnh C ............................................................................... 10
2.3. Cc bc c bn khi lp chng trnh ........................................................................... 11
2.4. Cc kiu d liu c s ................................................................................................... 12
2.5. Cc khai bo trong chng trnh C................................................................................ 17
2.6. Biu thc........................................................................................................................ 21
2.7. Cc hm ton hc .......................................................................................................... 22
CHNG 3. CC CU LNH C BN .............................................................................. 23
3.1. Lnh gn gi tr, lnh gp .............................................................................................. 23
3.2. Hm vit d liu ra mn hnh ........................................................................................ 25
3.3. Hm nhp d liu vo t bn phm ............................................................................... 27
3.4. Cu lnh iu kin ......................................................................................................... 31
3.5. Cu lnh la chn-lnh switch ...................................................................................... 34
3.6. Cu lnh lp for ............................................................................................................. 36
3.7. Cu lnh while ............................................................................................................... 37
3.8. Cu lnh do while ..................................................................................................... 37
3.9. Cu lnh break ............................................................................................................... 38
3.10. Lnh continue .............................................................................................................. 38
3.11. Ton t goto v nhn ( label )...................................................................................... 38
CHNG 4. HM CHNG TRNH V CU TRC CHNG TRNH. ...................... 39
4.1. Khi nim v chng trnh con ..................................................................................... 39
4.2. Hm trong C .................................................................................................................. 39
4.3. Chuyn tham s cho hm............................................................................................... 41
4.4. Bin ton cc v bin a phng ................................................................................. 41
4.5.Tnh quy ca hm ...................................................................................................... 42
4.6. B tin x l C............................................................................................................... 46
CHNG 5. MNG V CC KIU D LIU C CU TRC ........................................ 50
5.1.D liu kiu mng/con tr .............................................................................................. 50
5.3. D liu kiu cu trc ..................................................................................................... 61
CHNG 6. D LIU KIU TP ......................................................................................... 67
6.1. Khi nim v tp tin ...................................................................................................... 67
6.2. Cu trc v phn loi tp ............................................................................................... 67
2

6.3. To tp mi c/ghi d liu ...................................................................................... 68


6.4. Mt s hm x l tp ca C ........................................................................................... 70
6.5. Bi tp p dng .............................................................................................................. 77
CHNG 7. HO ............................................................................................................ 78
7.1. Gii thiu chung ............................................................................................................ 78
7.2. Cc hm t mu, v im, t mu................................................................................ 80
7.3. Cc hm v hnh c bn................................................................................................. 88
TI LIU THAM KHO ........................................................................................................ 96

11.6. Tn hc phn: K thut lp trnh (C)


B mn ph trch ging dy: Khoa hc My tnh
M hc phn: 17206

Loi hc phn: 2
Khoa ph trch: CNTT
Tng s TC: 4

TS tit L thuyt Thc hnh/Xemina T hc Bi tp ln


n mn hc
75
45
30
0
0
0
iu kin tin quyt:
Sinh vin phi hc xong cc hc phn sau mi c ng k hc phn ny:
Tin i cng, Ton ri rc, i s, Gii tch 1.
Mc tiu ca hc phn:
Cung cp cho sinh vin kin thc v rn luyn k nng lp trnh da trn ngn ng lp
trnh C
Ni dung ch yu
- Nhng vn c bn v ngn ng lp trnh C.
- Cch thc xy dng mt chng trnh da trn ngn ng lp trnh C.
- Cc vn v con tr, file v ha trong C
Ni dung chi tit ca hc phn:
TN CHNG MC
Chng 1: Gii thiu
1.1. Gii thiu ngn ng lp trnh C.
1.1.1. Xut x ca ngn ng lp trnh C.
1.1.2. Trnh bin dch C v cch s dng.
1.2. Thut ton v s khi
Chng 2. Cc khi nim c bn v ngn ng C
2.1. Cc phn t c bn ca ngn ng lp trnh C.
2.2. Cu trc chung ca chng trnh C
2.3. Cc bc c bn khi lp chng trnh
2.4. Cc kiu d liu c s
2.5. Cc khai bo trong chng trnh C
2.6. Biu thc
2.7. Cc hm ton hc
Chng 3. Cc cu lnh iu khin ca C
3.1. Lnh gn gi tr, lnh gp
3.2. Hm vit d liu ra mn hnh
3.3. Hm nhp d liu vo t bn phm
3.4. Cu lnh iu kin
3.5. Cu lnh la chn
3.6. Cu lnh lp for
3.7. Cu lnh lp while
3.8. Cu lnh dowhile.
3.9. Cu lnh break.
3.10. Lnh continue
3.11. Ton t goto v nhn (label)
Chng 4. Hm
4.1. Khi nim v chng trnh con
4.2. Hm trong C

TS
2

PHN PHI S TIT


LT TH/Xemina BT
2
0

13

14

KT

TN CHNG MC
4.3. Chuyn tham s cho hm
4.4. Bin ton cc v bin a phng
4.5. Tnh quy ca hm
4.6. i dng lnh ca hm
4.7. Mt s hm c bit
Chng 5. Mng v kiu d liu c cu trc
5.1. D liu kiu mng/con tr
5.1.1. Mng 1 chiu v nhiu chiu
5.1.2. Con tr v a ch
5.1.3. Lin h gia mng v con tr
5.1.4. Con tr v hm
5.2. D liu kiu xu k t. Lin h gia con tr v
xu k t
5.3. D liu kiu bn ghi
5.4. Mt s v d tng hp
Chng 6. File
6.1. Khi nim.
6.2. Cu trc v phn loi tp.
6.3. To tp mi c / ghi d liu.
6.4. Mt s hm x l tp ca C.
6.5. Bi tp p dng
Chng 7. ho trong C
7.1. Gii thiu chung
7.2. Cc hm t mu, v im, t mu
7.3. Cc hm v hnh c bn

TS

PHN PHI S TIT


LT TH/Xemina BT

21

12

10

KT

Nhim v ca sinh vin :


Tham d cc bui thuyt trnh ca gio vin, t hc, t lm bi tp do gio vin giao,
tham d cc bi kim tra nh k v cui k.
Ti liu tham kho:
1. Phm Vn t, K thut lp trnh C - C s v nng cao, NXB KHKT, 1998.
2. Quch Tun Ngc, Ngn ng lp trnh C, NXB GD, 1998.
3.
Mt
s
website
lin
quan:
http://www.codeproject.com,
http://www.cprogramming.com,
Hnh thc v tiu chun nh gi sinh vin:
Hnh thc thi cui k : Thi vn p trn my tnh, thi gian lm bi 45 pht
Sinh vin phi m bo cc iu kin theo Quy ch ca Nh trng v ca B
Thang im: Thang im ch A, B, C, D, F
im nh gi hc phn: Z = 0,3X + 0,7Y.
Bi ging ny l ti liu chnh thc v thng nht ca B mn Khoa hc my tnh,
Khoa Cng ngh thng tin v c dng ging dy cho sinh vin.
Ngy ph duyt:
/
/20

Trng B mn: ThS. Nguyn Hu Tun (k v ghi r h tn)

CHNG 1. GII THIU


1.1. Gii thiu ngn ng lp trnh C.
1.1.1. Xut x ca ngn ng lp trnh C.
Khong cui nhng nm 1960 u 1970 xut hin nhu cu cn c cc ngn ng bc cao h
tr cho nhng nh tin hc trong vic xy dng cc phn mm h thng, h iu hnh. Ngn
ng C ra i t , n c pht trin ti phng th nghim Bell. n nm 1978, gio trnh
" Ngn ng lp trnh C " do chnh cc tc gi ca ngn ng l Dennish Ritchie v B.W.
Kernighan vit, c xut bn v ph bin rng ri.
C l ngn ng lp trnh vn nng. Ngoi vic C c dng vit h iu hnh UNIX,
ngi ta nhanh chng nhn ra sc mnh ca C trong vic x l cho cc vn hin i ca tin
hc. C khng gn vi bt k mt h iu hnh hay my no, v mc du n c gi l "
ngn ng lp trnh h thng" v n c dng cho vic vit h iu hnh, n cng tin li cho
c vic vit cc chng trnh x l s, x l vn bn v c s d liu.
1.1.2. Trnh bin dch C v cch s dng..
A. Turbo C (TC)
1. Gii thiu chung TC
Khi ng C cng nh mi chng trnh khc bng cch nhp p chut ln biu tng ca
chng trnh. Khi chng trnh c khi ng s hin ra giao din gm c menu cng vic
v mt khung ca s bn di phc v cho son tho. Mt con tr nhp nhy trong khung ca
s v chng ta bt u nhp ni dung (vn bn) chng trnh vo trong khung ca s son
tho ny. Mc ch ca gio trnh ny l trang b nhng kin thc c bn ca lp trnh thng
qua NNLT C cho cc sinh vin mi bt u nn chng ti vn chn trnh by giao din ca
cc trnh bin dch quen thuc l Turbo C hoc Borland C. V cc trnh bin dch khc c
gi c th t tham kho trong cc ti liu lin quan.
kt thc lm vic vi C (son tho, chy chng trnh ...) v quay v mi trng Windows
chng ta n Alt-X.
2. Giao din v ca s son tho ca TC
a. M t chung
Khi gi chy C trn mn hnh s xut hin mt menu x xung v mt ca s son tho. Trn
menu gm c cc nhm chc nng: File, Edit, Search, Run, Compile, Debug, Project,
Options, Window, Help. kch hot cc nhm chc nng, c th n Alt+ch ci biu th
cho menu ca chc nng (l ch ci c gch di). V d m nhm chc nng File n
Alt+F, sau dch chuyn hp sng n mc cn chn ri n Enter. thun tin cho NSD,
mt s cc chc nng hay dng cn c gn vi mt t hp cc phm cho php ngi dng
c th chn nhanh chc nng ny m khng cn thng qua vic m menu nh m t trn.
Mt s t hp phm c th s c trnh by vo cui phn ny. Cc b chng trnh dch
h tr ngi lp trnh mt mi trng tch hp tc ngoi chc nng son tho, n cn cung
cp nhiu chc nng, tin ch khc gip ngi lp trnh va c th son tho vn bn chng
trnh va gi chy chng trnh va g li Cc chc nng lin quan n son tho phn
ln ging vi cc b son tho khc (nh WinWord) do vy chng ti ch trnh by tm tt
m khng trnh by chi tit y.
b. Cc chc nng son tho
Ging hu ht cc b son tho vn bn, b son tho ca Turbo C hoc Borland C cng s
dng cc phm sau cho qu trnh son tho:
Dch chuyn con tr: cc phm mi tn cho php dch chuyn con tr sang tri, phi mt k
t hoc ln trn, xung di 1 dng. dch chuyn nhanh c cc phm nh Home (v u
6

dng), End (v cui dng), PgUp, PgDn (ln, xung mt trang mn hnh). dch chuyn xa
hn c th kt hp cc phm ny cng phm Control (Ctrl, ^) nh ^PgUp: v u tp, ^PgDn:
v cui tp.
Chn, xo, sa: Phm Insert cho php chuyn ch son tho gia chn v . Cc phm
Delete, Backspace cho php xo mt k t ti v tr con tr v trc v tr con tr (xo li).
Cc thao tc vi khi dng: nh du khi dng (thc cht l khi k t lin nhau bt
k) ta a con tr n v tr u n Ctrl-KB v Ctrl-KK ti v tr cui. Cng c th thao tc
nhanh hn bng cch gi phm Shift v dng ccphm dch chuyn con tr qut t v tr u
n v tr cui, khi khi k t uc nh du s chuyn mu nn. Mt khi c nh du
c th dng ct, dn vo mt ni khc trong vn bn hoc xo khi vn bn. thc hin
thao tc ct dn, u tin phi a khi nh du vo b nh m bng nhm phm ShiftDelete (ct), sau dch chuyn con tr n v tr mi cn hin ni dung va ct v n t hp
phm Shift-Insert. Mt on vn bn c ghi vo b nh m c th c dn nhiu ln vo
nhiu v tr khc nhau bngcch lp li t hp phm Shift-Insert ti cc v tr khc nhau trong
vn bn. xo mt khi dng nh du m khng ghi vo b nh m, dng t hp phm
Ctrl-Delete. Khi mt ni dung mi ghi vo b nh m th n s xo (ghi ) ni dung c
c, do vy cn cn nhc s dng phm Ctrl-Delete (xo v khng lu li ni dung va xo
vo b m) v Shift-Delete (xo v lu li ni dung va xo) mt cch ph hp.
T hp phm Ctrl-A rt thun li khi cn nh du nhanh ton b vn bn.
c. Chc nng tm kim v thay th
Chc nng ny dng dch chuyn nhanh con tr vn bn n t cn tm. thc hin tm
kim bm Ctrl-QF, tm kim v thay th bm Ctrl-QA. Vo t hoc nhm t cn tm vo ca
s Find, nhm thay th (nu dng Ctrl-QA) vo ca s Replace v nh du vo cc tu chn
trong ca s bn di sau n Enter. Cc tu chn gm: khng phn bit ch hoa/thng,
tm t c lp hay ng trong t khc, tm trong ton vn bn hay ch trong phn c nh
du, chiu tm i n cui hay ngc v u vn bn, thay th c hi li hay khng hi li
dch chuyn con tr n cc vng khc nhau trong mt menu hay ca s cha cc tu
chn ta s dng phm Tab.
d. Cc chc nng lin quan n tp
Ghi tp ln a: Chn menu File\Save hoc phm F2. Nu tn tp cha c (cn mang tn
Noname.cpp) my s yu cu cho tn tp. Phn m rng ca tn tp c mc nh l CPP.
Son tho tp mi: Chn menu File\New. Hin ra ca s son tho trng v tn file tm thi
ly l Noname.cpp.
Son tho tp c: Chn menu File\Open hoc n phm F3, nhp tn tp hoc dch chuyn
con tr trong vng danh sch tp bn di n tn tp cn son ri n Enter. Cng c th p
dng cch ny son tp mi khi khng nhp vo tn tp c th.
Ghi tp ang son tho ln a vi tn mi: Chn menu File\Save As v nhp tn tp mi
vo ri n Enter.
e. Chc nng dch v chy chng trnh
Ctrl-F9: Khi ng chc nng dch v chy ton b chng trnh.
F4: Chy chng trnh t u n dng lnh hin ti (ang cha con tr)
F7: Chy tng lnh mt ca hm main(), k c cc lnh con trong hm.
F8: Chy tng lnh mt ca hm main(). Khi mi li gi hm c xem l mt lnh
(khng chy tng lnh trong cc hm c gi). Cc chc nng lin quan n dch chng
trnh c th c chn thng qua menuCompile (Alt-C).
f. Tm tt mt s phm nng hay dng
Cc phm kch hot menu: Alt+ch ci i din cho nhm menu . V d Alt-F m menu
File chn cc chc nng c th trong n nh Open (m file), Save (ghi file ln a), Print
(in ni dung vn bn chng trnh ra my in), Alt-C m menu Compile chn cc chc
nng dch chng trnh.
Cc phm dch chuyn con tr khi son tho.
F1: m ca s tr gip. y l chc nng quan trng gip ngi lp trnh nh tn lnh, c
7

php v cch s dng.


F2: ghi tp ln a.
F3: m tp c ra sa cha hoc son tho tp mi.
F4: chy chng trnh n v tr con tr.
F5: Thu hp/m rng ca s son tho.
F6: Chuyn i gia cc ca s son tho.
F7: Chy chng trnh theo tng lnh, k c cc lnh trong hm con.
F8: Chy chng trnh theo tng lnh trong hm chnh.
F9: Dch v lin kt chng trnh. Thng dng chc nng ny tm li c php ca
chng trnh ngun trc khi chy.
Alt-F7: Chuyn con tr v ni gy li trc .
Alt-F8: Chuyn con tr n li tip theo.
Ctrl-F9: Chy chng trnh.
Ctrl-Insert: Lu khi vn bn c nh du vo b nh m.
Shift-Insert: Dn khi vn bn trong b nh m vo vn bn ti v tr con tr.
Shift-Delete: Xo khi vn bn c nh du, lu n vo b nh m.
Ctrl-Delete: Xo khi vn bn c nh du (khng lu vo b nh m).
Alt-F5: Chuyn sang ca s xem kt qu ca chng trnh va chy xong.
Alt-X: thot C v li Windows.
B. Dev C
C. Visual C++
1.2. Thut ton v s khi

Khi nim: thut ton hay gii thut dng ch phng php hay cch thc
(method) gii quyt vn .
S d khi: s dng cc khi biu din thut ton
Bi tp:
1. V s khi gii thut gii phng trnh bc nht ax+b=0
2. V s khi gii thut gii bt phng trnh bc nht ax+b>0
3. V s khi gii thut gii phng trnh bc hai ax2+bx+c=0
4. V s khi gii thut tm c s chung ln nht ca 2 s nguyn dng
5. V s khi gii thut tm s nh nht ca 2 s

CHNG 2. CC KHI NIM C BN V NGN NG LP TRNH C


2.1. Cc phn t c bn ca ngn ng lp trnh C.
2.1.1. Tp k t dng trong ngn ng C
Mi ngn ng lp trnh u c xy dng t mt b k t no . Cc k t c
nhm li theo nhiu cch khc nhau to nn cc t. Cc t li c lin kt vi nhau theo
mt qui tc no to nn cc cu lnh. Mt chng trnh bao gm nhiu cu lnh v th
hin mt thut ton gii mt bi ton no . Ngn ng C c xy dng trn b k t sau
:
-

26 ch ci hoa : A B C .. Z

26 ch ci thng : a b c .. z

10 ch s : 0 1 2 .. 9

Cc k hiu ton hc : + - * / = ( )

K t gch ni : _

Cc k t khc : . , : ; [ ] {} ! \ & % # $ ...

Du cch (space) dng tch cc t. V d ch VIET NAM c 8 k t, cn


VIETNAM ch c 7 k t.
Ch : Khi vit chng trnh, ta khng c s dng bt k k t no khc ngoi cc k t
trn. V d nh khi lp chng trnh gii phng trnh bc hai ax 2 +bx+c=0 , ta cn tnh bit
thc Delta = b2 - 4ac, trong ngn ng C khng cho php dng k t , v vy ta phi dng
k hiu khc thay th.
2.1.2. T kho:

T kho l nhng t c s dng khai bo cc kiu d liu, vit

cc ton t v cc cu lnh. Bng di y lit k cc t kho ca TURBO C :


asm

break

case

cdecl

char

const

continue

default

do

double

else

enum

extern

far

float

for

goto

huge

if

int

interrupt

long

near

pascal

register

return

short

signed

sizeof

static

struct

switch

tipedef

union

unsigned

void

volatile

while

ngha v cch s dng ca mi t kho s c cp sau ny, y ta cn ch :


- Khng c dng cc t kho t tn cho cc hng, bin, mng, hm ...
9

- T kho phi c vit bng ch thng, v d : vit t kho khai bo kiu nguyn
l int ch khng phi l INT.
2.1.3. Tn: Tn l mt khi nim rt quan trng, n dng xc nh cc i lng khc nhau
trong mt chng trnh. Chng ta c tn hng, tn bin, tn mng, tn hm, tn con tr, tn
tp, tn cu trc, tn nhn,...
Tn c t theo qui tc sau: Tn l mt dy cc k t bao gm ch ci, s v gch ni. K
t u tin ca tn phi l ch hoc gch ni. Tn khng c trng vi kho. di cc i
ca tn theo mc nh l 32 v c th c t li l mt trong cc gi tr t 1 ti 32 nh chc
nng : Option-Compiler-Source-Identifier length khi dng TURBO C.
V d : Cc tn ng : a_1
Cc tn sai:

delta

x1

_step GAMA

3MN

K t u tin l s

m#2

S dng k t #

f(x)

S dng cc du ( )

do

Trng vi t kho

te ta

S dng du trng

Y-3

S dng du -

Ch : Trong TURBO C, tn bng ch thng v ch hoa l khc nhau v d tn AB khc


vi ab. Trong C, ta thng dng ch hoa t tn cho cc hng v dng ch thng t
tn cho hu ht cho cc i lng khc nh bin, bin mng, hm, cu trc. Tuy nhin y
khng phi l iu bt buc.
2.2. Cu trc chung ca chng trnh C
Mt chng trnh C c th c t trong mt hoc nhiu file vn bn khc nhau. Mi file
vn bn cha mt s phn no ca chng trnh. Vi nhng chng trnh n gin v
ngn thng ch cn t chng trn mt file.
Mt chng trnh gm nhiu hm, mi hm ph trch mt cng vic khc nhau ca chng
trnh. c bit trong cc hm ny c mt hm duy nht c tn hm l main(). Khi chy
chng trnh, cc cu lnh trong hm main() s c thc hin u tin. Trong hm main() c
th c cc cu lnh gi n cc hm khc khi cn thit, v cc hm ny khi chy li c th gi
n cc hm khc na c vit trong chng trnh (tr vic gi quay li hm main()). Sau
khi chy n lnh cui cng ca hm main() chng trnh s kt thc.
C th, thng thng mt chng trnh gm c cc ni dung sau:
Phn khai bo cc tp nguyn mu: khai bo tn cc tp cha nhng thnh phn c sn (nh
cc hng chun, kiu chun v cc hm chun) m NSD s dng trong chng trnh.
Phn khai bo cc kiu d liu, cc bin, hng ... do NSD nh ngha v c dng chung
trong ton b chng trnh.
Danh sch cc hm ca chng trnh (do NSD vit, bao gm c hm main()). Cu trc chi
tit ca mi hm s c cp n trong chng 4.
Di y l mt on chng trnh n gin ch gm 1 hm chnh l hm main().
Ni dung ca chng trnh dng in ra mn hnh dng ch: Cho cc bn, by gi l 2gi.
#include <stdio.h>// khai bo tp nguyn mu c s dng hm printf, scanf
void main()
10

{
int h = 2; // Khai bo v khi to bin h = 2
printf( Cho cc bn, by gi l %d gi,h) ;// in ra mn hnh
}
Dng u tin ca chng trnh l khai bo tp nguyn mu stdio.h. y l khai bo bt buc
v trong chng trnh c s dng hm chun printf() (in ra mn hnh), hm ny c khai bo
v nh ngha sn trong stdio.h.
Khng ring hm main(), mi hm khc u phi bt u tp hp cc cu lnh ca mnh bi
du { v kt thc bi du }. Tp cc lnh bt k bn trong cp du ny c gi l khi lnh.
Khi lnh l mt c php cn thit trong cc cu lnh c cu trc nh ta s thy trong cc
chng tip theo.
Vy ni tm li cu trc c bn ca chng trnh nh sau :

Cc #include

Cc #define

Khai bo cc i tng d liu ngoi ( bin, mng, cu trc vv..).

Khai bo nguyn mu cc hm.

Hm main().

nh ngha cc hm ( hm main c th t sau hoc xen vo gia cc hm khc

).
2.3. Cc bc c bn khi lp chng trnh
2.3.1. Qui trnh vit v thc hin chng trnh
Trc khi vit v chy mt chng trnh thng thng chng ta cn:
1. Xc nh yu cu ca chng trnh. Ngha l xc nh d liu u vo (input) cung cp cho
chng trnh v tp cc d liu cn t c tc u ra (output).Cc tp hp d liu ny ngoi
2
cc tn gi cn cn xc nh kiu ca n.V d gii mt phng trnh bc 2 dng: ax + bx
+ c = 0, cn bo cho chng trnh bit d liu u vo l a, b, c v u ra l nghim x1 v x2
ca phng trnh. Kiu ca a, b, c, x1, x2 l cc s thc.
2. Xc nh thut ton gii.
3. C th ho cc khai bo kiu v thut ton thnh dy cc lnh, tc vit thnh chng trnh
thng thng l trn giy, sau bt u son tho vo trong my. Qu trnh ny c gi l
son tho chng trnh ngun.
4. Dch chng trnh ngun tm v sa cc li gi l li c php.
5. Chy chng trnh, kim tra kt qu in ra trn mn hnh. Nu sai, sa li chng trnh, dch
v chy li kim tra. Qu trnh ny c thc hin lp i lp li cho n khi chng trnh
chy tt theo yu cu ra ca NSD.
2.3.2. Son tho tp chng trnh ngun
Son tho chng trnh ngun l mt cng vic n gin: g ni dung ca chng trnh (
vit ra giy) vo trong my v lu li n ln a. Thng thng khi lu li chng trnh ln
a ln sau s khng cn phi g li. C th son chng trnh ngun trn cc b son tho
(editor) khc nhng phi chy trong mi trng tch hp C++ (Borland C, Turbo C). Mc
ch ca son tho l to ra mt vn bn chng trnh v a vo b nh ca my. Vn bn
chng trnh cn c trnh by sng sa, r rng. Cc cu lnh cn ging thng ct theo cu
trc ca lnh (cc lnh cha trong mt lnh cu trc c trnh by tht vo trong so vi im
bt u ca lnh). Cc ch thch nn ghi ngn gn, r ngha v ph hp.
2.3.3. Dch chng trnh
Sau khi son tho xong chng trnh ngun, bc tip theo thng l dch (n t hp phm
11

Alt-F9) tm v sa cc li gi l li c php. Trong khi dch C++ s t con tr vo ni gy


li (vit sai c php) trong vn bn. Sau khi sa xong mt li NSD c th dng Alt-F8
chuyn con tr n li tip theo hoc dch li. chuyn con tr v ngc li li trc c
th dng Alt-F7. Qu trnh sa li dch c lp li cho n khi vn bn c sa ht
li c php.
Sn phm sau khi dch l mt tp mi gi l chng trnh ch c ui EXE tc l tp m
my thc hin.Tp ny c th lu tm thi trong b nh phc v cho qu trnh chy
chng trnh hoc lu li trn a tu theo tu chn khi dch ca NSD. Trong v sau khi dch,
C++ s hin mt ca s cha thng bo v cc li (nu c), hoc thng bo chng trnh
c dch thnh cng (khng cn li). Cc li ny c gi l li c php.
dch chng trnh ta chn menu \Compile\Compile hoc \Compile\Make hoc nhanh
chng hn bng cch n t hp phm Alt-F6.
2.3.4. Chy chng trnh
n Ctrl-F9 chy chng trnh, nu chng trnh cha dch sang m my, my s t ng
dch li trc khi chy. Kt qu ca chng trnh s hin ra trong mt ca s kt qu NSD
kim tra. Nu kt qu cha c nh mong mun, quay li vn bn sa v li chy li
chng trnh. Qu trnh ny c lp li cho n khi chng trnh chy ng nh yu cu
ra. Khi chng trnh chy, ca s kt qu s hin ra tm thi che khut ca s son tho.
Sau khi kt thc chy chng trnh ca s son tho s t ng hin ra tr li v che khut
ca s kt qu. xem li kt qu hin n Alt-F5 (hoc thm lnh getch() vo cui hm
main()). Sau khi xem xong quay li ca s son tho n phm bt k.
2.4. Cc kiu d liu c s
Trong C s dng cc cc kiu d liu c s sau :
2.4.1. Kiu k t (char):
Mt gi tr kiu char chim 1 byte ( 8 bit ) v biu din c mt k t thng qua bng
m ASCII. V d:
K t

M ASCII

048

049

050

065

066

097

098

C hai kiu d liu char : kiu signed char v unsigned char.


Kiu

Phm vi biu din

S k t

Kch thc

char (signed char )

-128 n 127

256

1 byte

unsigned char

0 n 255

256

1 byte

V d sau minh ho s khc nhau gia hai kiu d liu trn. Xt on chng trnh
sau:
char ch1;
12

unsigned char ch2;


......
ch1=200; ch2=200;
Khi thc cht :
ch1=-56;
ch2=200;
Nhng c ch1 v ch2 u biu din cng mt k t c m 200.
Phn loi k t :
C th chia 256 k t lm ba nhm :
Nhm 1: Nhm cc k t iu khin c m t 0 n 31. Chng hn k t m 13 dng
chuyn con tr v u dng, k t 10 chuyn con tr xung dng di ( trn cng mt ct
). Cc k t nhm ny ni chung khng hin th ra mn hnh.
Nhm 2 : Nhm cc k t vn bn c m t 32 n 126. Cc k t ny c th c
a ra mn hnh hoc my in.
Nhm 3 : Nhm cc k t ho c m s t 127 n 255. Cc k t ny c th a
ra mn hnh nhng khng in ra c ( bng cc lnh DOS ).
2.4.2. Kiu s nguyn :
Trong C cho php s dng s nguyn kiu int, s nguyn di kiu long v s nguyn
khng du kiu unsigned. Kch c v phm vi biu din ca chng c ch ra trong bng
di y :
Kiu

Phm vi biu din

Kch thc

int

-32768 n 32767

2 byte

unsigned int

0 n 65535

2 byte

long

-2147483648 n 2147483647

4 byte

unsigned long

0 n 4294967295

4 byte

Ch : Kiu k t cng c th xem l mt dng ca kiu nguyn.


2.4.3. Kiu du phy ng (s thc):
Trong C cho php s dng ba loi d liu du phy ng, l float, double v long
double. Kch c v phm vi biu din ca chng c ch ra trong bng di y :
S ch s

Kch

c ngha

thc

3.4E-38 n 3.4E+38

7 n 8

4 byte

double

1.7E-308 n 1.7E+308

15 n 16

8 byte

long double

3.4E-4932 n 1.1E4932

17 n 18

10 byte

Kiu

Phm vi biu din

float

13

Gii thch:
My tnh c th lu tr c cc s kiu float c gi tr tuyt i t 3.4E-38 n
3.4E+38. Cc s c gi tr tuyt i nh hn3.4E-38 c xem bng 0. Phm vi biu din ca
s double c hiu theo ngha tng t.
Ch : Trong C khng c kiu logic Boolean (th hin gi tr True, False). C s dng kiu s
nguyn xy dng kiu logic, 0 ng vi False, 0 ng vi tr True. V d: biu thc 6>8
nhn gi tr 0, 6>3 nhn gi tr 1.
2.4.4. nh ngha kiu bng typedef :
Cng dng: T kho typedef dng t tn cho mt kiu d liu. Tn kiu s c dng
khai bo d liu sau ny. Nn chn tn kiu ngn v gn d nh. Ch cn thm t kho
typedef vo trc mt khai bo ta s nhn c mt tn kiu d liu v c th dng tn ny
khai bo cc bin, mng, cu trc, vv...
Cch vit: Vit t kho typedef, sau kiu d liu ( mt trong cc kiu trn ), ri n tn
ca kiu. V d cu lnh:
typedef int nguyen;
s t tn mt kiu int l nguyen. Sau ny ta c th dng kiu nguyen khai bo cc bin,
cc mng int nh v d sau ;
nguyen x, y;
2.4.5. Cc php ton s hc, quan h v logic
Cc php ton s hc.
Cc php ton hai ngi s hc l
Php ton

nghi

V d

Php cng

a+b

Php tr

a-b

Php nhn

a*b

Php chia

Php ly phn d

a/b
( Chia s nguyn s cht phn thp phn )
a%b
( Cho phn d ca php chia a cho b )

C php ton mt ngi - v du -(a+b) s o gi tr ca php cng (a+b).


V d :11/3=3
11%3=2
-(2+6)=-8
Cc php ton + v - c cng th t u tin, c th t u tin nh hn cc php * , / ,
% v c ba php ny li c th t u tin nh hn php tr mt ngi.
14

Cc php ton s hc c thc hin t tri sang phi. S u tin v kh nng kt hp


ca php ton c ch ra trong mt mc sau ny
Cc php ton quan h v logic :
Php ton quan h v logic cho ta gi tr ng ( 1 ) hoc gi tr sai ( 0 ). Ni cch khc,
khi cc iu kin nu ra l ng th ta nhn c gi tr 1, tri li ta nhn gi tr 0.
Cc php ton quan h l :
Php ton

ngha

V d
a>b

>

So snh ln hn

>=

So snh ln hn hoc bng

<

So snh nh hn

<=

So snh nh hn hoc bng

==

So snh bng nhau

!=

So snh khc nhau

4>5 c gi tr 0
a>=b
6>=2 c gi tr 1
a<b
6<=7 c gi tr 1
a<=b
8<=5 c gi tr 0
a==b
6==6 c gi tr 1
a!=b
9!=9 c gi tr 0

Bn php ton u c cng s u tin, hai php sau c cng s th t u tin nhng
thp hn s th t ca bn php u. Cc php ton quan h c s th t u tin thp hn so
vi cc php ton s hc, cho nn biu thc: i<n-1 c hiu l i<(n-1).
Cc php ton logic :
Trong C s dng ba php ton logic :
Php ph nh mt ngi !
a

!a

A&&B

A || B

Php v (AND) &&


Php hoc ( OR ) ||

15

Cc php quan h c s u tin nh hn so vi ! nhng ln hn so vi && v ||, v vy


biu thc nh: (a<b)&&(c>d) c th vit li thnh: a<b&&c>d
Ch : C a v b c th l nguyn hoc thc.
Php ton tng gim :
C a ra hai php ton mt ngi tng v gim cc bin ( nguyn v thc ). Ton t
tng l ++ s cng 1 vo ton hng ca n, ton t gim -- th s tr ton hng i 1.
V d: n=5
++n

Cho ta n=6

--n

Cho ta n=4

Ta c th vit php ton ++ v -- trc hoc sau ton hng nh sau : ++n, n++, --n, n--.
S khc nhau ca ++n v n++ ch: trong php n++ th tng sau khi gi tr ca n c s
dng, cn trong php ++n th n c tng trc khi s dng. S khc nhau gia n-- v --n
cng nh vy.
V d: n=5
x=++n

Cho ta x=6 v n=6

x=n++

Cho ta x=5 v n=6

Th t u tin cc php ton :


Cc php ton c u tin khc nhau, iu ny c ngha trong cng mt biu thc
s c mt s php ton ny c thc hin trc mt s php ton khc.
Th t u tin ca cc php ton c trnh by trong bng sau :
TT

Php ton

Trnh t kt hp

() [] ->

Tri qua phi

! ~ & * - ++ -- (type ) sizeof

Phi qua tri

* ( php nhn ) / %

Tri qua phi

+-

Tri qua phi

<< >>

Tri qua phi

< <= > >=

Tri qua phi

== !=

Tri qua phi

&

Tri qua phi

Tri qua phi

10

Tri qua phi

11

&&

Tri qua phi

12

||

Tri qua phi


16

13

?:

Phi qua tri

14

= += -= *= /= %= <<= >>= &= ^= |=

Phi qua tri

15

Tri qua phi

Ch thch: Cc php ton tn mt dng c cng th t u tin, cc php ton hng trn c
s u tin cao hn cc s hng di. i vi cc php ton cng mc u tin th trnh t
tnh ton c th t tri qua phi hay ngc li c ch ra trong ct trnh t kt hp.
V d: *--px=*(--px) ( Phi qua tri )
8/4*6=(8/4)*6 ( Tri qua phi )
Nn dng cc du ngoc trn vit biu thc mt cch chnh xc.
Cc php ton l :
Dng 1
[ ] Dng biu din phn t mng, v d : a[i][j]
.

Dng biu din thnh phn cu trc, v d : ht.ten

-> Dng biu din thnh phn cu trc thng qua con tr
Dng 2
* Dng khai bo con tr, v d : int *a
& Php ton ly a ch, v d : &x
( type) l php chuyn i kiu, v d : (float)(x+y)
Dng 15
Ton t , thng dng vit mt dy biu thc trong ton t for.
2.5. Cc khai bo trong chng trnh C
2.5.1. Hng: Hng l cc i lng m gi tr ca n khng thay i trong qu trnh tnh
ton.
Tn hng: Nguyn tc t tn hng ta xem xt trong mc t tn phn trc.
t tn mt hng, ta dng dng lnh sau:
khai bo hng ta dng cc cu khai bo sau:
#define tn_hng gi_tr_hng
hoc:
const tn_hng = gi_tr_hng ;
V d:
#define sosv 50
#define MAX 100
const sosv = 50 ;
Lc ny, tt c cc tn MAX trong chng trnh xut hin sau ny u c thay bng
100. V vy, ta thng gi MAX l tn hng, n biu din s 100.
Mt v d khc : #define pi 3.141593
t tn cho mt hng float l pi c gi tr l 3.141593.
17

Cc loi hng :
Hng int: Hng int l s nguyn c gi tr trong khong t -32768 n 32767.
V d :

#define number1 -50

nh nghi hng int number1 c gi tr l -50

#define sodem 2732

nh nghi hng int sodem c gi tr l 2732

Ch : Cn phn bit hai hng 5056 v 5056.0 : y 5056 l s nguyn cn 5056.0 l hng
thc.
Hng long: Hng long l s nguyn c gi tr trong khong t -2147483648 n 2147483647.
Hng long c vit theo cch : 1234L hoc 1234l ( thm L hoc l vo ui )
Mt s nguyn vt ra ngoi min xc nh ca int cng c xem l long.
V d :

#define sl 8865056L

nh nghi hng long sl c gi tr l 8865056

#define sl 8865056

nh nghi hng long sl c gi tr l 8865056

Hng int h 8: Hng int h 8 c vit theo cch 0c1c2c3.... y ci l mt s nguyn dng
trong khong t 1 n 7. Hng int h 8 lun lun nhn gi tr dng.
V d:

nh nghi hng int h 8 c gi tr l

#define h8 0345

3*8*8+4*8+5=229
Hng int h 16:

Trong h ny ta s dng 16 k t : 0,1..,9,A,B,C,D,E,F.


Cch vit

Gi tr

a hoc A

10

b hoc B

11

c hoc C

12

d hoc D

13

e hoc E

14

f hoc F

15

Hng s h 16 c dng 0xc1c2c3... hc 0Xc1c2c3... y ci l mt s trong h 16.


V d :

#define h16 0xa5


#define h16 0xA5
#define h16 0Xa5
#define h16 0XA5

Cho ta cc hng s h16 trong h 16 c gi tr nh nhau. Gi tr ca chng trong h 10 l:


10*16+5=165.
Hng k t: Hng k t l mt k t ring bit c vit trong hai du nhy n, v d 'a'.
Gi tr ca 'a' chnh l m ASCII ca ch a. Nh vy gi tr ca 'a' l 97. Hng k t c th
tham gia vo cc php ton nh mi s nguyn khc. V d : '9'-'0'=57-48=9
18

V d :

nh nghi hng k t kt c gi tr l 97

#define kt 'a'

Hng k t cn c th c vit theo cch sau: ' \c1c2c3' .Trong c1c2c3 l mt s


h 8 m gi tr ca n bng m ASCII ca k t cn biu din.
V d : ch a c m h 10 l 97, i ra h 8 l 0141. Vy hng k t 'a' c th vit di dng
'\141'. i vi mt vi hng k t c bit ta cn s dng cch vit sau ( thm du \ ) :
Cch vit

K t

'\''

'

'\"'

"

'\\'

'\n'

\n (chuyn dng )

'\0'

\0 ( null )

'\t'

Tab

'\b'

Backspace

'\r'

CR ( v u dng )

'\f'

LF ( sang trang )

Ch : Cn phn bit hng k t '0' v '\0'. Hng '0' ng vi ch s 0 c m ASCII l 48,


cn hng '\0' ng vi kt \0 ( thng gi l k t null ) c m ASCII l 0.
Hng k t thc s l mt s nguyn, v vy c th dng cc s nguyn h 10 biu
din cc k t, v d lnh printf("%c%c",65,66) s in ra AB.
Hng xu k t:

Hng xu k t l mt dy k t bt k t trong hai du nhy kp.

V d : #define xau1 "Ha noi"


#define xau2 "My name is Giang"
Xu k t c lu tr trong my di dng mt bng c cc phn t l cc k t
ring bit. Trnh bin dch t ng thm k t null \0 vo cui mi xu ( k t \0 c xem l
du hiu kt thc ca mt xu k t ).
Ch : Cn phn bit hai hng 'a' v "a". 'a' l hng k t c lu tr trong 1 byte, cn "a" l
hng xu k t c lu tr trong 1 mng hai phn t : phn t th nht cha ch a cn phn
t th hai cha \0.
2.5.2. Bin. L i lng m gi tr c th thay i c trong chng trnh. Mi bin cn
phi c khai bo trc khi a vo s dng, gi tr ca bin c th thay i c trong
chng trnh. Vic khai bo bin c thc hin theo mu sau:
Kiu_d_liu_ca_bin tn bin ;
V d :

int a,b,c;

Khai bo ba bin int l a,b,c

long dai,mn;

Khai bo hai bin long l dai v mn


19

char kt1,kt2;

Khai bo hai bin k t l kt1 v kt2

float x,y

Khai bo hai bin float l x v y

double canh1, canh2;

Khai bo hai bin double l canh1 v canh2

Bin kiu int ch nhn c cc gi tr kiu int. Cc bin khc cng c ngha tng
t. Cc bin kiu char ch cha c mt k t. lu tr c mt xu k t cn s dng
mt mng kiu char.
V tr ca khai bo bin: Cc khai bo cn phi c t ngay sau du { u tin ca thn
hm v cn ng trc mi cu lnh khc. Sau y l mt v d v khai bo bin sai :
( Khi nim v hm v cu trc chng trnh s nghin cu sau ny)
main()
{
int a,b,c;
a=2;
int d; /* V tr ca khai bo sai */
.....
}
Khi u cho bin: Nu trong khai bo ngay sau tn bin ta t du = v mt gi tr no
th y chnh l cch va khai bo va khi u cho bin.
V d : int a, b=20, c, d=40;
float e=-55.2, x=27.23, y, z, t=18.98;
Vic khi u v vic khai bo bin ri gn gi tr cho n sau ny l hon ton tng ng.
Ly a ch ca bin: Mi bin c cp pht mt vng nh gm mt s byte lin tip. S
hiu ca byte u chnh l a ch ca bin. a ch ca bin s c s dng trong mt s
hm ta s nghin cu sau ny ( v d nh hm scanf ). ly a ch ca mt bin ta s dng
php ton: &tn_bin
2.5.3. Chuyn i kiu gi tr:
Vic chuyn i kiu gi tr thng din ra mt cch t ng trong hai trng hp sau :
+ Khi gn biu thc gm cc ton hng khc kiu.
+ Khi gn mt gi tr kiu ny cho mt bin ( hoc phn t mng ) kiu khc. iu
ny xy ra trong ton t gn, trong vic truyn gi tr cc tham s thc s cho cc i.
Ngoi ra, ta c th chuyn t mt kiu gi tr sang mt kiu bt k m ta mun bng
php chuyn sau: ( type ) biu thc
V d : (float) (a+b)
Chuyn i kiu trong biu thc :
20

Khi hai ton hng trong mt php ton c kiu khc nhau th kiu thp hn s c
nng thnh kiu cao hn trc khi thc hin php ton. Kt qu thu c l mt gi tr kiu
cao hn. Chng hn : Gia int v long th int chuyn thnh long. Gia int v float th int
chuyn thnh float. Gia float v double th float chuyn thnh double.
V d: 1.5*(11/3)=4.5
1.5*11/3=5.5
(11/3)*1.5=4.5
Chuyn i kiu thng qua php gn :
Gi tr ca v phi c chuyn sang kiu v tri l kiu ca kt qu. Kiu int c
th c c chuyn thnh float. Kiu float c th chuyn thnh int do cht i phn thp
phn. Kiu double chuyn thnh float bng cch lm trn. Kiu long c chuyn thnh int
bng cch ct b mt vi ch s.
V d :int n;
n=15.6

gi tr ca n l 15

i kiu dng (type)biu thc :


Theo cch ny, kiu ca biu thc c i thnh kiu type theo nguyn tc trn.
V d : Php ton :

(int)a

cho mt gi tr kiu int. Nu a l float th y c s chuyn i t float sang int. Ch


rng bn thn kiu ca a vn khng b thay i. Ni cch khc, a vn c kiu float nhng
(int)a c kiu int.
i vi hm ton hc ca th vin chun, th gi tr ca i v gi tr ca hm u c
kiu double, v vy tnh cn bc hai ca mt bin nguyn n ta phi dng php p kiu
chuyn kiu int sang double nh sau :

sqrt((double)n)

Php p kiu c cng s u tin nh cc ton t mt ngi.


Ch :Mun c gi tr chnh xc trong php chia hai s nguyn cn dng php p kiu :
(float)a/b
i gi tr thc r sang nguyn, ta dng: (int)(r+0.5)
Ch th t u tin:
(int)1.4*10=1*10=10
(int)(1.4*10)=(int)14.0=14
2.6. Biu thc
Biu thc l dy k hiu kt hp gia cc ton hng, php ton v cp du () theo mt qui tc
nht nh. Cc ton hng l hng, bin, hm. Biu thc cung cp mt cch thc tnh gi tr
mi da trn cc ton hng v ton t trong biu thc. Nh vy hng, bin, phn t mng v
hm cng c xem l biu thc.
V d:
21

(x + y) * 2 - 4 ;
3 - x + sqrt(y) ;
(-b + sqrt(delta)) / (2*a) ;
Trong C, ta c hai khi nim v biu thc :
Biu thc gn.
Biu thc iu kin.
Biu thc c phn loi theo kiu gi tr: nguyn v thc. Trong cc mnh logic,
biu thc c phn thnh ng ( gi tr khc 0 ) v sai ( gi tr bng 0, chng ta thng quy
c l 1 ).
Biu thc thng c dng trong:
+ V phi ca cu lnh gn.
+ Lm tham s thc s ca hm.
+ Lm ch s.
+ Trong cc ton t ca cc cu trc iu khin.
Ti y, ta c hai khi nim chnh to nn biu thc l ton hng v php ton.
Ton hng gm: hng, bin, phn t mng v hm trc y ta xt. Di y ta s ni n
cc php ton. Hm s c cp trong chng sau.
2.7. Cc hm ton hc
2.7.1. Cc hm s hc
abs(x), labs(x), fabs(x) : tr li gi tr tuyt i ca mt s nguyn, s nguyn di v s thc.
y
pow(x, y) : hm m, tr li gi tr x ly tha y (x ).
x
exp(x) : hm m, tr li gi tr e m x (e ).
log(x), log10(x) : tr li lgarit c s e v lgarit thp phn ca x (lnx, logx) .
sqrt(x) : tr li cn bc 2 ca x.
atof(s_number) : tr li s thc ng vi s vit di dng xu k t s_number.
2.7.2. Cc hm lng gic
sin(x), cos(x), tan(x) : tr li cc gi tr sinx, cosx, tgx.
Bi tp:
1. Vit chng trnh s dng cc hm ton hc tnh ton gi tr mt s biu thc
2. Tm hiu cch thc dch mt chng trnh bng mt trong cc chng trnh dch TC,
C-Free, Dev C,

22

CHNG 3. CC CU LNH C BN
3.1. Lnh gn gi tr, lnh gp
Lnh gn gi tr:
Biu thc gn (lnh gn) l biu thc c dng: v = e
Trong v l mt bin ( hay phn t mng ), e l mt biu thc. Gi tr ca biu thc
gn l gi tr ca e, kiu ca n l kiu ca v. Nu t du ; vo sau biu thc gn ta s thu
c php ton gn c dng: v = e;
Biu thc gn c th s dng trong cc php ton v cc cu lnh nh cc biu thc
khc. V d nh khi ta vit a=b=5;
th iu c ngha l gn gi tr ca biu thc b=5 cho bin a. Kt qa l b=5 v a=5.
Hon ton tng t nh: a=b=c=d=6; gn 6 cho c a, b, c v d
V d: z=(y=2)*(x=6);

{ y * l php ton nhn } gn 2 cho y, 6 cho x v nhn hai

biu thc li cho ta z=12.


Lnh gp (khi lnh):
Mt cu lnh trong C c thit lp t cc t kho v cc biu thc v lun lun c kt
thc bng du chm phy. Cc v d vo/ra hoc cc php gn to thnh nhng cu lnh n
gin nh:
x=3+x;
y = (x = sqrt(x)) + 1 ;
printf(x = %4d, y=%4.2f, x, y );
Cc cu lnh c php vit trn cng mt hoc nhiu dng. Mt s cu lnh c gi l lnh
c cu trc, tc bn trong n li cha dy lnh khc. Dy lnh ny phi c bao gia cp du
ngoc {} v c gi l khi lnh. V d tt c cc lnh trong mt hm (nh hm main()) lun
lun l mt khi lnh. Mt c im ca khi lnh l cc bin c khai bo trong khi lnh
no th ch c tc dng trong khi lnh .
Mt dy cc cu lnh c bao bi cc du { } gi l mt khi lnh. V d :
{
a=2;
b=3;
printf("\n%6d%6d",a,b);
}
TURBO C xem khi lnh cng nh mt cu lnh ring l. Ni cch khc, ch no vit c
mt cu lnh th cng c quyn t mt khi lnh.
Khai bo u khi lnh :
Cc khai bo bin v mng chng nhng c th t u ca mt hm m cn c th
vit u khi lnh :
{
int a, b;
23

float x, y, z;
a=b=3;
x=5.5; y=a*x;
z=b*x;
printf("\n y= %8.2f\n z=%8.2f",y,z);
}
S lng nhau ca cc khi lnh v phm vi hot ng ca cc bin v mng :
Bn trong mt khi lnh li c th vit lng khi lnh khc. S lng nhau theo cch
nh vy l khng hn ch. Khi my bt u lm vic vi mt khi lnh th cc bin v mng
khai bo bn trong n mi c hnh thnh v c hnh thnh v c cp pht b nh. Cc
bin ny ch tn ti trong thi gian my lm vic bn trong khi lnh v chng lp tc bin
mt ngay sau khi my ra khi khi lnh. Vy:

Gi tr ca mt bin hay mt mng khai

bo bn trong mt khi lnh khng th a ra s dng bt k ch no bn ngoi khi lnh


.
bt k ch no bn ngoi mt khi lnh ta khng th can thip n cc bin v cc
mng c khai bo bn trong khi lnh. Nu bn trong mt khi ta dng mt bin hay mt
mng c tn l a th iu ny khng lm thay i gi tr ca mt bin khc cng c tn l a (
nu c ) c dng u bn ngoi khi lnh ny. Nu c mt bin c khai bo
ngoi mt khi lnh v khng trng tn vi cc bin khai bo bn trong khi lnh ny th bin
cng c th s dng c bn trong cng nh bn ngoi khi lnh.
V d : Xt on chng trnh sau :
{
int a=5,b=2;
{
int a=4;
b=a+b;
printf("\n a trong =%3d b=%3d",a,b);
}
printf("\n a ngoai =%3d b=%3d",a,b);
}
Khi on chng trnh s in kt qu nh sau :
a trong =4 b=6
a ngoi =5 b=6
Do tnh cht bin a trong v ngoi khi lnh.
24

3.2. Hm vit d liu ra mn hnh


3.2.1. Hm putchar ():
a mt k t ra thit b ra chun, ni chung l mn hnh, ta s dng hm putchar()
Cch dng:

Dng cu lnh sau:

putchar(ch);

Cng dng: a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s c hin th


vi mu trng.
V d:

int c;
c = getchar();
putchar(c);

3.2.2. Hm putch():
Cch dng:

Dng cu lnh sau:

putch(ch);

Cng dng: a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s c hin th


theo mu xc nh trong hm textcolor. Hm cng tr v k t c hin th.
3.2.3. a kt qu ln mn hnh - hm printf :
Cch dng:

prinf(iu khin, i s 1, i s 2, ...);

Hm printf chuyn, to khun dng v in cc i ca n ra thit b ra chun di s iu


khin ca xu iu khin. Xu iu khin cha hai kiu i tng : cc k t thng thng,
chng s c a ra trc tip thit b ra, v cc c t chuyn dng, mi c t s to ra vic
i dng v in i tip sau ca printf.
Chui iu khin c th c cc k t iu khin:
\n sang dng mi; \f sang trang mi; \b

li li mt bc; \t

du tab

Dng tng qut ca c t :


%[-][n][.m] k_t_chuyn_dng
Mi c t chuyn dng u c a vo bng k t % v kt thc bi mt
k_t_chuyn_dng. Gia % v k_t_chuyn_dng c th c:
Du tr: Khi khng c du tr th kt qu ra c dn v bn phi nu di thc

ca kt qu ra nh hn rng ti thiu n dnh cho n. Cc v tr d tha s c lp y


bng cc khong trng. Ring i vi cc trng s, nu dy s n bt u bng s 0 th cc v
tr d tha bn tri s c lp y bng cc s 0.
Khi c du tr th kt qu c dn v bn tri v cc v tr d tha v bn phi (nu
c) lun c lp y bng cc khong trng.
n : Khi n ln hn di thc t ca kt qu ra th cc v tr d tha s c lp y
bi cc khong trng hoc s 0 v ni dung ca kt qu ra s c y v bn phi hoc bn
tri. Khi khng c n hoc n nh hn hay bng di thc t ca kt qu ra th rng trn
25

thit b ra dnh cho kt qu s bng chnh di ca n.

Ti v tr ca n ta c th t du *,

khi n c xc nh bi gi tr nguyn ca i tng ng.


V d :
Kt qu ra

Du -

Kt qu a ra

-2503

-2503

-2503

08

-2503

-2503

khng

-2503

-2503

08

khng

000-2503

"abcdef"

khng

abcdef

"abcdef"

08

"abcdef"

08

khng

abcdef
abcdef

m: Tham s m ch c s dng khi i tng ng l mt xu k t hoc mt gi tr kiu


float hay double. Trong trng hp i tng ng c gi tr kiu float hay double th m l
chnh xc ca trng ra. Ni mt cch c th hn gi tr in ra s c pp ch s sau s thp
phn. Khi vng mt pp th chnh xc s c xem l 6. Khi i l xu k t: Nu m nh
hn di ca xu th ch pp k t u tin ca xu c in ra. Nu khng c n hoc nu m
ln hn hay bng di ca xu th c xu k t s c in ra.
V d :
Kt qu ra

Du -

Kt qu a ra

di trng ra

-435.645

10

-435.65

-435.645

10

-436

-435.645

vng

-435.645000

11

"alphabeta"

vng

alp

"alphabeta"

vng

vng

vng

alphabeta

"alpha"

alpha

Cc k t chuyn dng v ngha ca n :


K t chuyn dng l mt hoc mt dy k hiu xc nh quy tc chuyn dng v
dng in ra ca i tng ng. Nh vy s c tnh trng cng mt s s c in ra theo cc
dng khc nhau. Cn phi s dng cc k t chuyn dng theo ng qui tc nh sn. Bng
sau cho cc thng tin v cc k t chuyn dng.
K t chuyn dng

ngha

i c chuyn sang s nguyn h thp phn

i c chuyn sang h tm khng du ( khng c s 0 ng trc )


26

i c chuyn sang h mi su khng du ( khng c 0x ng trc )

i c chuyn sang h thp phn khng du

i c coi l mt k t ring bit


i l xu k t, cc k t trong xu c in cho ti khi gp k t khng
hoc cho ti khi s lng k t c xc nh bi cc c t v chnh

xc m.
i c xem l float hoc double v c chuyn sang dng thp phn c

dng [-]m.n..nE[+ hoc -] vi di ca xu cha n l pp.


i c xem l float hoc double v c chuyn sang dng thp phn c
dng [-]m..m.n..n vi di ca xu cha n l pp. chnh xc mc nh l

6. Lu rng chnh xc khng xc nh ra s cc ch s c ngha phi in


theo khun dng f.
Dng %e hoc %f, tu theo loi no ngn hn, khng in cc s 0 v ngha.

Ch : Mi dy k t khng bt u bng % hoc khng kt thc bng k t chuyn dng u


c xem l k t hin th.
hin th cc k t c bit :
Cch vit

Hin th

\'

'

\"

"

\\

Cc v d :
1

printf("\" Nang suat tang : %d % \" \n\\d"",30,-50);

"Nang suat tang ; 30 %" \d=-50

n=8;

25.500000

float x=25.5, y=-47.335

-47.34

printf("\n%f\n%*.2f",x,n,y);
Lnh ny tng ng vi
printf("\n%f\n%8.2f",x,n,y);
V n=8 tng ng vi v tr *

3.3. Hm nhp d liu vo t bn phm


3.3.1. Hm getchar ():

C ch vo n gin nht l c tng k t t thit b vo

chun, ni chung l bn phm v mn hnh ca ngi s dng, bng hm getchar().


Cch dng:

Dng cu lnh sau:

bin = getchar();

27

Cng dng: Nhn mt k t vo t bn phm v khng a ra mn hnh. Hm s tr v k


t nhn c v lu vo bin.
V d:

int c;
c = getchar();

3.3.2. Hm getch(): Hm nhn mt k t t b m bn phm, khng cho hin ln mn


hnh.
Cch dng:

Dng cu lnh sau:

getch();

Cng dng : Nu c sn k t trong b m bn phm th hm s nhn mt k t trong .


Nu b m rng, my s tm dng. Khi g mt k t th hm nhn ngay k t (
khng cn bm thm phm Enter nh trong cc hm nhp khc ). K t va g khng hin ln
mn hnh.
Nu dng:

bin=getch(); Th bin s cha k t c vo.

V d:

c = getch();

3.3.3. Vo s liu t bn phm - hm scanf :


Hm scanf l hm c thng tin t thit b vo chun ( bn phm ), chuyn dch chng
( thnh s nguyn, s thc, k t vv.. ) ri lu tr n vo b nh theo cc a ch xc nh.
Cch dng:

scanf(iu khin,i 1, i 2, ...);

Xu iu khin cha cc c t chuyn dng, mi c t s to ra vic i dng bin


tip sau ca scanf.
c t c th vit mt cch tng qut nh sau :
%[*][d...d]k t chuyn dng
Vic c mt ca du * ni ln rng trng vo vn c d c bnh thng, nhng
gi tr ca n b b qua ( khng c lu vo b nh ). Nh vy c t cha du * s khng
c i tng ng.
d...d: l mt dy s xc nh chiu di cc i ca trng vo, ngha ca n c
gii thch nh sau:
Nu tham s d...d vng mt hoc nu gi tr ca n ln hn hay bng di ca
trng vo tng ng th ton b trng vo s c c, ni dung ca n c dch v c
gn cho a ch tng ng ( nu khng c du * ).
Nu gi tr ca d...d nh hn di ca trng vo th ch phn u ca trng c
kch c bng d...d c c v gn cho a ch ca bin tng ng. Phn cn li ca trng s
c xem xt bi cc c t v i tng ng tip theo.
V d : int a;
float x, y;
char ch[6],ct[6] ;//khai bo xu k t
28

scanf("%f%5f%3d%3s%s",&x&y&a&ch&ct0;
Vi dng vo : 54.32e-1 25 12452348a
Kt qu l lnh scanf s gn
5.432 cho x
25.0 cho y
124

cho a

xu "523" v du kt thc \0 cho ch


xu "48a" v du kt thc \0 cho ct
K t chuyn dng: K t chuyn dng xc nh cch thc d c cc k t trn dng vo
cng nh cch chuyn dch thng tin c c trc khi gn n cho cc a ch tng ng.
Cch d c th nht l c theo trng vo, khi cc khong trng b b qua. Cch
ny p dng cho hu ht cc trng hp.
Cch d c th hai l c theo k t, khi cc khong trng cng c xem xt
bnh ng nh cc k t khc. Phng php ny ch xy ra khi ta s dng mt trong ba k t
chuyn dng sau : C, [ dy k t ], [^ dy k t ]
Cc k t chuyn dng v ngha ca n :
c

Vo mt k t, i tng ng l con tr k t. C xt k t khong trng

Vo mt gi tr kiu int, i tng ng l con tr kiu int. Trng phi vo l s


nguyn

ld

Vo mt gi tr kiu long, i tng ng l con tr kiu long. Trng phi vo


l s nguyn

Vo mt gi tr kiu int h 8, i tng ng l con tr kiu int. Trng phi vo


l s nguyn h 8

lo

Vo mt gi tr kiu long h 8, i tng ng l con tr kiu long. Trng phi


vo l s nguyn h 8

Vo mt gi tr kiu int h 16, i tng ng l con tr kiu int. Trng phi


vo l s nguyn h 16

lx

Vo mt gi tr kiu long h 16, i tng ng l con tr kiu long. Trng phi


vo l s nguyn h 16

f hay e

Vo mt gi tr kiu float, i tng ng l con tr float, trng vo phi l s


du phy ng

lf hay le

Vo mt gi tr kiu double, i tng ng l con tr double, trng vo phi l


s du phy ng

Vo mt gi tr kiu double, i tng ng l con tr kiu char, trng vo phi


29

l dy k t bt k khng cha cc du cch v cc du xung dng


[ Dy k t ], [ ^Dy k t ] Cc k t trn dng vo s ln lt c c cho n khi no
gp mt k t khng thuc tp cc k t t trong[]. i tng ng l con tr kiu char.
Trng vo l dy k t bt k ( khong trng c xem nh mt k t ).
V d :
int a,b;
char ch[10], ck[10];
scanf("%d%[0123456789]%[^0123456789]%3d",&a,ch,ck,&b);
Vi dng vo: 35 13145 xyz 584235
S gn: 35 cho a
xu "13145" cho ch
xu "xyz' cho ck
584 cho b
Ch : Xt on chng trnh dng nhp ( t bn phm ) ba gi tr nguyn ri gn cho ba
bin a,b,c nh sau: int a,b,c;
scanf("%d%d%d,&a,&b,&c);
vo s liu ta c th thao tc theo nhiu cch khc nhau:
Cch 1: a ba s vo cng mt dng, cc s phn cch nhau bng du cch hoc du tab.
Cch 2: a ba s vo ba dng khc nhau.
Cch 3: Hai s u cng mt dng ( cch nahu bi du cch ho tab ), s th ba trn dng tip
theo.
Cch 4: S th nht trn mt dng, hai s sau cng mt dng tip theo ( cch nhau bi du
cch hoc tab), s th ba trn dng tip theo. Khi vo sai s bo li v nhy v chng trnh
cha li gi n.
V d minh ha s dng hm printf, scanf nhp vo hai s a, b kiu nguyn, tnh ton v a
kt qu biu thc ab,

a ln mn hnh.

#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
int a, b;
float kq;
printf("\nNhap so thu nhat a= ");
30

scanf("%d",&a);
printf("\nNhap so thu hai b= ");
scanf("%d",&b);
kq=sqrt(a);
printf("\nKet qua %d ^ %4d = %6.2f",a,b, pow(a,b));
printf("\nKet qua can bac 2 cua %d = %4.2f",a, kq);
getch();
}
3.4. Cu lnh iu kin
3.4.1. Lnh if-else: Ton t if cho php la chn chy theo mt trong hai nhnh tu thuc vo
s bng khng v khc khng ca biu thc. N c hai cch vit sau :
if ( biu thc )
if ( biu thc )

khi lnh 1;

khi lnh 1;

else

/* Dng mt */

khi lnh 2 ;
/* Dng hai */

Hot ng ca biu thc dng 1 :


My tnh gi tr ca biu thc. Nu biu thc ng ( biu thc c gi tr khc 0 ) my
s thc hin khi lnh 1 v sau s thc hin cc lnh tip sau lnh if trong chng trnh.
Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin ngay
cc lnh tip sau lnh if trong chng trnh.
Hot ng ca biu thc dng 2 :
My tnh gi tr ca biu thc. Nu biu thc ng ( biu thc c gi tr khc 0 ) my
s thc hin khi lnh 1 v sau s thc hin cc lnh tip sau khi lnh 2 trong chng
trnh. Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin
khi lnh 2 sau thc hin tip cc lnh tip sau khi lnh 2 trong chng trnh.
V d :
Chng trnh nhp vo hai s a v b, tm max ca hai s ri in kt qu ln mn hnh.
Chng trnh c th vit bng c hai cch trn nh sau :
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
31

scanf("%f",&a);
printf("\n Cho b=");
scanf("%f",&b);
max=a;
if (b>max) max=b;
printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max);
}
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
scanf("%f",&a);
printf("\n Cho b=");
scanf("%f",&b);
if (a>b) max=a;
else max=b;
printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max);
}
S lng nhau ca cc ton t if :
C cho php s dng cc ton t if lng nhau c ngha l trong cc khi lnh ( 1 v 2 )
trn c th cha cc ton t if - else khc. Trong trng hp ny, nu khng s dng cc
du ng m ngoc cho cc khi th s c th nhm ln gia cc if-else.
Ch l my s gn ton t else vi ton t if khng c else gn nht. Chng hn nh
on chng trnh v d sau :
if ( n>0 )

/* if th nht*/

if ( a>b )

/* if th hai*/

z=a;
else
z=b;
th else y s i vi if th hai.
on chng trnh trn tng ng vi :
if ( n>0 )

/* if th nht*/

{
if ( a>b )

/* if th hai*/
32

z=a;
else
z=b;
}
Trng hp ta mun else i vi if th nht ta vit nh sau :
if ( n>0 )

/* if th nht*/

{
if ( a>b )

/* if th hai*/

z=a;
}
else
z=b;
3.4.2. Lnh else-if :
Khi mun thc hin mt trong n quyt nh ta c th s dng cu trc sau :
if ( biu thc 1 )
khi lnh 1;
else if ( biu thc 2 )
khi lnh 2;
......
else if ( biu thc n-1 )
khi lnh n-1;
else
khi lnh n;
Trong cu trc ny, my s i kim tra t biu thc 1 tr i n khi gp biu thc no
c gi tr khc 0.
Nu biu thc th i (1,2, ...n-1) c gi tr khc 0, my s thc hin khi lnh i, ri sau
i thc hin lnh nm tip theo khi lnh n trong chng trnh.
Nu trong c n-1 biu thc khng c biu thc no khc 0, th my s thc hin khi
lnh n ri sau i thc hin lnh nm tip theo khi lnh n trong chng trnh.
V d :
Chng trnh gii phng trnh bc hai.
#include "stdio.h"
main()
{
float a,b,c,d,x1,x2;
33

printf("\n Nhap a, b, c:");


scanf("%f%f%f,&a&b&c);
d=b*b-4*a*c;
if (d<0.0)
printf("\n Phuong trinh vo nghiem ");
else if (d= =0.0)
printf("\n Phuong trinh co nghiem kep x1,2=%8.2f",-b/(2*a));
else
{
printf("\n Phuong trinh co hai nghiem ");
printf("\n x1=%8.2f",(-b+sqrt(d))/(2*a));
printf("\n x2=%8.2f",(-b-sqrt(d))/(2*a));
}
3.5. Cu lnh la chn-lnh switch
L cu trc to nhiu nhnh c bit. N cn c vo gi tr mt biu thc nguyn chn
mt trong nhiu cch nhy.
Cu trc tng qut ca n l :
switch ( biu thc nguyn )
{
case n1: khi lnh 1
case n2: khi lnh 2
.......
case nk: khi lnh k
[ default: khi lnh k+1

}
Vi ni l cc s nguyn, hng k t hoc biu thc hng. Cc ni cn c gi tr khc
nhau. on chng trnh nm gia cc du { } gi l thn ca ton t switch.
default l mt thnh phn khng bt buc phi c trong thn ca switch.
S hot ng ca ton t switch ph thuc vo gi tr ca biu thc vit trong du
ngoc ( ) nh sau :
Khi gi tr ca biu thc ny bng ni, my s nhy ti cc cu lnh c nhn l case ni.
Khi gi tr biu thc khc tt c cc ni th cch lm vic ca my li ph thuc vo s
c mt hay khng ca lnh default nh sau :
Khi c default my s nhy ti cu lnh sau nhn default.
34

Khi khng c default my s nhy ra khi cu trc switch.


Ch :
My s nhy ra khi ton t switch khi n gp cu lnh break hoc du ngoc nhn
ng cui cng ca thn switch. Ta cng c th dng cu lnh goto trong thn ca ton t
switch nhy ti mt cu lnh bt k bn ngoi switch.
Khi ton t switch nm trong thn mt hm no th ta c th s dng cu lnh
return trong thn ca switch ra khi hm ny ( lnh return s cp sau ).
Khi my nhy ti mt cu lnh no th s hot ng tip theo ca n s ph thuc
vo cc cu lnh ng sau cu lnh ny. Nh vy nu my nhy ti cu lnh c nhn case ni
th n c th thc hin tt c cc cu lnh sau cho ti khi no gp cu lnh break, goto
hoc return. Ni cch khc, my c th i t nhm lnh thuc case ni sang nhm lnh thuc
case th ni+1. Nu mi nhm lnh c kt thc bng break th ton t switch s thc hin
ch mt trong cc nhm lnh ny.
V d: Lp chng trnh phn loi hc sinh theo im s dng cu trc switch :
#include "stdio.h"
main()
{
int diem;
tt: printf("\nVao du lieu :");
printf("\n Diem =");
scanf("%d",&diem);
switch (diem)
{
case 0:
case 1:
case 2:
case 3:printf("Kem\n");break;
case 4:printf("Yeu\n");break;
case 5:
case 6:printf("Trung binh\n");break;
case 7:
case 8:printf("Kha\n");break;
case 9:
case 10:printf("Gioi\n");break;
default:printf(Vao sai\n);
35

}
printf("Tiep tuc 1, dung 0 :")
scanf("%d",&diem);
if (diem= =1) goto tt;
getch();
return;
}
3.6. Cu lnh lp for
Ton t for dng xy dng cu trc lp c dng sau :
for ( biu thc 1; biu thc 2; biu thc 3)
Lnh hoc khi lnh ;
Ton t for gm ba biu thc v thn for. Thn for l mt cu lnh hoc mt khi lnh
vit sau t kho for. Bt k biu thc no trong ba biu thc trn c th vng mt nhng phi
gi du ;.
Thng thng biu thc 1 l ton t gn to gi tr ban u cho bin iu khin,
biu thc 2 l mt quan h logic biu th iu kin tip tc chu trnh, biu thc ba l mt
ton t gn dng thay i gi tr bin iu khin.
Hot ng ca ton t for :
Ton t for hot ng theo cc bc sau :
B1: Xc nh biu thc 1
B2: Xc nh biu thc 2
Tu thuc vo tnh ng sai ca biu thc 2 my la chn mt trong hai nhnh:
Nu biu thc hai c gi tr 0 ( sai ), my s ra khi for v chuyn ti cu lnh sau
thn for. Nu biu thc hai c gi tr khc 0 ( ng ), my s thc hin cc cu lnh trong
thn for.
Tnh biu thc 3, sau quay li bc 2 bt u mt vng mi ca chu trnh.
Ch : Nu biu thc 2 vng mt th n lun c xem l ng. Trong trng hp ny vic
ra khi chu trnh for cn phi c thc hin nh cc lnh break, goto hoc return vit trong
thn chu trnh.
Trong du ngoc trn sau t kho for gm ba biu thc phn cch nhau bi du ;.
Trong mi biu thc khng nhng c th vit mt biu thc m c quyn vit mt dy biu
thc phn cch nhau bi du phy. Khi cc biu thc trong mi phn c xc nh t tri
sang phi. Tnh ng sai ca dy biu thc c tnh l tnh ng sai ca biu thc cui cng
trong dy ny.
36

Trong thn ca for ta c th dng thm cc ton t for khc, v th ta c th xy dng


cc ton t for lng nhau.
Khi gp cu lnh break trong thn for, my ra s ra khi ton t for su nht cha cu
lnh ny. Trong thn for cng c th s dng ton t goto nhy n mt v tr mong mun
bt k.
3.7. Cu lnh while
- C php : while ( biu thc 1) lnh 1 ;
- Nguyn tc thc hin :
+b1. Tnh gi tr ca biu thc 1.
+b2. Nu gi tr ca biu thc 1 sai ( = 0 ) th chng trnh ra khi vng while
+b3. Nu gi tr ca biu thc ng th thc hin lnh 1 v quay li bc 1(b1).
- Ch : Biu thc 1 c th gm nhiu biu thc nhng tnh ng sai ph thuc vo biu thc
cui cng.
V d : Nhp 1 dy s nguyn t bn phm
#include < stdio.h >
#include < conio.h >
main ()
{
int dayso [ 10 ] ; int i = 0 ;
while ( i < 10)
{
printf ( "\n S thu %d : ", i ); scanf ( " %d", & dayso [i]);
i ++ ;
}
3.8. Cu lnh do while
- C php :
do {
lnh 1 ;
}while ( biu thc 1 ) ;
- Nguyn tc thc hin :
+b1. My thc hin cu lnh 1 ;
+b2. Sau tnh gi tr ca biu thc 1, nu gi tr ca biu thc 1 sai th chng trnh thot
ra khi vng lp. Nu gi tr ca biu thc 1 ng th quay li bc 1.
Ch : - while : iu kin c kim tra trc, nu ng mi thc hin.
- do while : cu lnh c thc hin trc khi kim tra. Cu lnh thc hin bao gi t nht l 1
ln. ( do while ngc vi
Repeat until ca Pascal : lnh Do while sai th dng, cn lnh repeat until ng th dng ).
-Biu thc 1 c th gm nhiu biu thc, tuy nhin tnh ng sai cn c theo biu thc cui
cng.
* V d : tnh pi vi sai s eps = 1E - 4 , pi = 4 - 4/3 + 4/5 - 4/7 + ...eps
#include < stdio.h >
#include < conio.h>
main ()
{
37

float pi, dau, i , eps, saiso ;


i=1.0; dau = -1; saiso = 1e -4 ;
pi = 4.0;
printf ( "\n ang x l vui lng i !");
do
{
eps = 4.0 / ( 2.0 * i + 1.0 );
pi + = dau * eps ; dau = dau * - 1.0 ; i + = 1.0;
}
while ( eps > saiso );
printf ("\n s pi l : " % f ", pi ) ;
getch ();
}
3.9. Cu lnh break
- C php : Dng thot khi vng lp. Khi gp cu lnh ny trong vng lp, my ra khi v
ch n cu lnh sau cc lnh trn. Nu nhiu vng lp ----> break s thot ra khi vng lp
gn nht.
3.10. Lnh continue
- C php continue; : khi gp lnh ny trong cc vng lp, my s b qua phn cn li trong
vng lp v tip tc thc hin vng lp tip theo.
- i vi lnh For my s tnh li biu thc 3 (bt3) v quay li bc 2.
- i vi lnh while, do while my s tnh li gi tr ca biu thc 1 v quay li bc 1.
* V d : Nhp 1 chui k t k c k t trng v b qua cc k t khng hp l v kt thc
khi n ESC hoc s k t vt qu kch thc mng.
char xau [MAXL], kytu ;
int i = 0 ;
while (1) /* lun lun ng vng lp vnh cu */
{
kytu = getch ( ) ;
if ( kytu = = 27 ) break ;
if ( i >= MAXL ) break ;
if ( kytu > 122 || kytu < 65 ) continue ;
Xau [ i ++] = kytu ;
}
xau [ i ] = ' \ 0 ' ;
3.11. Ton t goto v nhn ( label )
- V d : tiep tuc : st = a[ i ]; => tiep tuc l nhn ca lnh st = a [ i ];
- Lnh goto nhn => nhy n cu lnh ng sau nhn.
- CH : PHM VI NHN TRONG CNG 1 HM.
Bi tp:
1. Vit chng trnh gii pt bc nht ax+b=0
2. Vit chng trnh gii bt pt bc nht ax+b<0
3. Vit chng trnh gii pt bc hai ax2+bx+c=0
38

4. Vit chng trnh tm c s chung ln nht ca 2 s


5. Vit chng trnh tm s ln nht trong dy cc s nhp vo
CHNG 4. HM CHNG TRNH V CU TRC CHNG TRNH.
4.1. Khi nim v chng trnh con
Mt chng trnh vit trong ngn ng C l mt dy cc hm, trong c mt hm
chnh ( hm main() ). Hm chia cc bi ton ln thnh cc cng vic nh hn, gip thc hin
nhng cng vic lp li no mt cch nhanh chng m khng phi vit li on chng
trnh. Th t cc hm trong chng trnh l bt k, song chng trnh bao gi cng i thc
hin t hm main().
4.2. Hm trong C
Hm c th xem l mt n v c lp ca chng trnh. Cc hm c vai tr ngang
nhau, v vy khng c php xy dng mt hm bn trong cc hm khc.
Xy dng mt hm bao gm: khai bo kiu hm, t tn hm, khai bo cc i v a
ra cu lnh cn thit thc hin yu cu ra cho hm. Mt hm c vit theo mu sau :
type tn hm ( khai bo cc i )
{
Khai bo cc bin cc b
Cc cu lnh
[return[biu thc];]
}
Dng tiu :
Trong dng u tin ca hm cha cc thng tin v : kiu hm, tn hm, kiu v tn
mi i.
V d :
float max3s(float a, float b, float c)
khai bo cc i c dng :
Kiu i 1 tn i 1, kiu i 2 tn i 2,..., kiu i n tn i n
Thn hm :
Sau dng tiu l thn hm. Thn hm l ni dung chnh ca hm bt u v kt thc
bng cc du { }. Trong thn hm cha cc cu lnh cn thit thc hin mt yu cu no
ra cho hm.
Thn hm c th s dng mt cu lnh return, c th dng nhiu cu lnh return cc
ch khc nhau, v cng c th khng s dng cu lnh ny.
Dng tng qut ca n l :
39

return [biu thc];


Gi tr ca biu thc trong cu lnh return s c gn cho hm.
V d :
Xt bi ton: Tm gi tr ln nht ca ba s m gi tr m gi tr ca chng c a
vo bn phm. Xy dng chng trnh v t chc thnh hai hm : Hm main() v hm max3s.
Nhim v ca hm max3s l tnh gi tr ln nht ca ba s c vo, gi s l a,b,c. Nhim v
ca hm main() l c ba gi tr vo t bn phm, ri dng hm max3s tnh nh trn, ri
a kt qu ra mn hnh.
Chng trnh c vit nh sau :
#include "stdio.h"
float max3s(float a,float b,float c ); /* Nguyn mu hm*/
main()
{
float x,y,z;
printf("\n Vao ba so x,y,z:");
scanf("%f%f%f",&x&y&z);
printf("\n Max cua ba so x=%8.2f y=%8.2f z=%8.2f la : %8.2f",
x,y,z,max3s(x,y,z));
}

/* Kt thc hm main*/

float max3s(float a,float b,float c)


{
float max;
max=a;
if (max<b) max=b;
if (max<c) max=c;
return(max);
} /* Kt thc hm max3s*/
Quy tc hot ng ca hm:
Mt cch tng qut li gi hm c dng sau :
tn hm ([Danh sch cc tham s thc])
S cc tham s thc t thay vo trong danh sch cc i phi bng s tham s hnh
thc v ln lt chng c kiu tng ng vi nhau.

40

Khi gp mt li gi hm th n s bt u c thc hin. Ni cch khc, khi my gp


li gi hm mt v tr no trong chng trnh, my s tm di ch v chuyn n hm
tng ng. Qu trnh din ra theo trnh t sau :
Cp pht b nh cho cc bin cc b.
Gn gi tr ca cc tham s thc cho cc i tng ng.
Thc hin cc cu lnh trong thn hm.
Khi gp cu lnh return hoc du } cui cng ca thn hm th my s xo cc i,
bin cc b v ra khi hm.
Nu tr v t mt cu lnh return c cha biu thc th gi tr ca biu thc c gn
cho hm. Gi tr ca hm s c s dng trong cc biu thc cha n.
4.3. Chuyn tham s cho hm
Cc tham s hnh thc: l cc tham s c khai bo phn khai bo (nh ngha hm).
Cc tham s ny khng c gi tr thc s, chng ch c ngha v mt hnh thc.
Cc tham s thc: l cc tham s c truyn vo khi hm c gi thc hin. Chng thay
th cc tham s hnh thc.
4.4. Bin ton cc v bin a phng
Bin ton cc l bin nm ngoi tt c cc hm. Bin cc b l bin c khai bo
bn trong mt hm no . Tham s hnh thc c th coi l bin cc b.
Do i v bin cc b u c phm vi hot ng trong cng mt hm nn i v bin
cc b cn c tn khc nhau.
i v bin cc b u l cc bin t ng. Chng c cp pht b nh khi hm
c xt n v b xo khi ra khi hm nn ta khng th mang gi tr ca i ra khi hm.
i v bin cc b c th trng tn vi cc i lng ngoi hm m khng gy ra
nhm ln no.
Khi mt hm c gi ti, vic u tin l gi tr ca cc tham s thc c gn cho
cc i ( trong v d trn hm max3s, cc tham s thc l x,y,z, cc i tng ng l a,b,c ).
Nh vy cc i chnh l cc bn sao ca cc tham s thc. Hm ch lm vic trn cc i.
Cc i c th b bin i trong thn hm, cn cc tham s thc th khng b thay i.
Ch :
Khi hm khai bo khng c kiu trc n th n c mc nh l kiu int.
Khng nht thit phi khai bo nguyn mu hm. Nhng ni chung nn c v n cho
php chng trnh bin dch pht hin li khi gi hm hay t ng vic chuyn dng.
Nguyn mu ca hm thc cht l dng u tin ca hm thm vo du ;. Tuy nhin
trong nguyn mu c th b tn cc i.
41

Hm thng c mt vi i. V d nh hm max3s c ba i l a,b,c. c ba i ny


u c gi tr float. Tuy nhin, cng c hm khng i nh hm main.
Hm thng cho ta mt gi tr no . L d nhin gi tr ca hm ph thuc vo gi
tr cc i.
Hm khng cho cc gi tr
Cc hm khng cho gi tr ging nh th tc ( procedure ) trong ngn ng lp trnh
PASCAL. Trong trng hp ny, kiu ca n l void.
V d hm tm gi tr max trong ba s l max3s trn c th c vit thnh th tc
hin th s cc i trong ba s nh sau :
void htmax3s(float a, float b, float c)
{
float max;
max=a;
if (max<b) max=b;
if (max<c) max=c;
}
Lc ny, trong hm main ta gi hm htmax3s bng cu lnh :
htmax3s(x,y,z);
4.5.Tnh quy ca hm
4.5.1. M u: C khng nhng cho php t hm ny gi ti hm khc, m n cn cho php
t mt im trong thn ca mt hm gi ti chnh hm . Hm nh vy gi l hm qui.
Khi hm gi qui n chnh n, th mi ln gi my s to ra mt tp cc bin cc b
mi hon ton c lp vi tp cc bin cc b c to ra trong cc ln gi trc.
minh ho chi tit nhng iu trn, ta xt mt v d v tnh giai tha ca s nguyn
dng n. Khi khng dng phng php qui hm c th c vit nh sau :
long int gt(int n) /* Tnh n! vi n>=0*/
{
long int gtphu=1;
int i;
for (i=1;i<=n;++i)
gtphu*=i;
return s;
}
Ta nhn thy rng n! c th tnh theo cng thc truy hi sau :
n!=1

nu n=0
42

nu n>0

n!=n*(n-1)!

Hm tnh n! theo phng php qui c th c vit nh sau :


long int gtdq(int n)
{
if (n==0 || n==1)
return 1;
else
return(n*gtdq(n-1));
}
Ta i gii thch hot ng ca hm qui khi s dng trong hm main di y :
#include "stdio.h"
main()
{
printf("\n 3!=%d",gtdq(3));
}
Ln gi u tin ti hm gtdq c thc hin t hm main(). My s to ra mt tp
cc bin t ng ca hm gtdq. Tp ny ch gm cc i n. Ta gi i n c to ra ln th
nht l n th nht. Gi tr ca tham s thc ( s 3 ) c gn cho n th nht. Lc ny bin n
trong thn hm c xem l n th nht. Do n th nht c gi tr bng 3 nn iu kin trong
ton t if l sai v do my s la chn cu lnh else. Theo cu lnh ny, my s tnh gi tr
biu thc :
n*gtdq(n-1) (*)
tnh biu thc trn, my cn gi chnh hm gtdq v th ln gi th hai s thc hin.
My s to ra i n mi, ta gi l n th hai. Gi tr ca n-1 y li l i ca hm , c
truyn cho hm v hiu l n th hai, do vy n th hai c gi tr l 2. By gi, do n th hai vn
cha tho mn iu kin if nn my li tip tc tnh biu thc :
n*gtdq(n-1) (**)
Biu thc trn li gi hm gtdq ln th ba. My li to ra i n ln th ba v y n
th ba c gi tr bng 1. i n=1 th ba li c truyn cho hm, lc ny iu kin trong lnh
if c tho mn, my i thc hin cu lnh :
return 1=gtdq(1) (***)
Bt u t y, my s thc hin ba ln ra khi hm gtdq. Ln ra khi hm th nht
ng vi ln vo th ba. Kt qu l i n th ba c gii phng, hm gtdq(1) cho gi tr l 1
v my tr v xt gi tr biu thc
n*gtdq(1) y l kt qu ca (**)
43

y, n l n th hai v c gi tr bng 2. Theo cu lnh return, my s thc hin ln ra khi


hm ln th hai, i n th hai s c gii phng, kt qu l biu thc trong (**) c gi tr l
2.1. Sau my tr v biu thc (*) lc ny l :
n*gtdq(2)=n*2*1
n li hiu l th nht, n c gi tr bng 3, do vy gi tr ca biu thc trong (*) l 3.2.1=6.
Chnh gi tr ny c s dng trong cu lnh printf ca hm main() nn kt qu in ra trn
mn hnh l :
3!=6
Ch :
Hm qui so vi hm c th dng vng lp th n gin hn, tuy nhin vi my tnh
khi dng hm qui s dng nhiu b nh trn ngn xp v c th dn n trn ngn xp. V
vy khi gp mt bi ton m c th c cch gii lp ( khng dng qui ) th ta nn dng cch
lp ny. Song vn tn ti nhng bi ton ch c th gii bng qui.
4.5.2. Cc bi ton c th dng qui
Phng php qui thng p dng cho cc bi ton ph thuc tham s c hai c
im sau :
Bi ton d dng gii quyt trong mt s trng hp ring ng vi cc gi tr c bit
ca tham s. Ngi ta thng gi l trng hp suy bin.
Trong trng hp tng qut, bi ton c th qui v mt bi ton cng dng nhng gi
tr tham s th b thay i. Sau mt s hu hn bc bin i d qui n s dn ti trng hp
suy bin.
Bi ton tnh n giai tha nu trn th hin r nt c iu ny.
4.5.3. Cch xy dng hm qui :
Hm qui thng c xy dng theo thut ton sau :
if ( trng hp suy bin)
{
Trnh by cch gii bi ton khi suy bin
}
else /* Trng hp tng qut */
{
Gi qui ti hm ( ang vit ) vi cc gi
tr khc ca tham s
}
44

4.5.4. Cc v d v dng hm qui :


V d 1 :
Bi ton dng qui tm USCLN ca hai s nguyn dng a v b.
Trong trng hp suy bin, khi a=b th USCLN ca a v b chnh l gi tr ca chng.
Trong trng hp chung :
uscln(a,b)=uscln(a-b,b) nu a>b
uscln(a,b)=uscln(a,b-a) nu a<b
Ta c th vit chng trnh nh sau :
#include "stdio.h"
int uscln(int a,int b ); /* Nguyn mu hm*/
main()
{

int m,n;
printf("\n Nhap cac gia tri cua a va b :");
scanf("%d%d",&m,&n);
printf("\n USCLN cua a=%d va b=%d la :%d",m,m,uscln(m,n))

}
int uscln(int a,int b)
{
if (a==b)
return a;
else
if (a>b)
return uscln(a-b,b);

else
return uscln(a,b-a);
}
V d 2 :
Chng trnh c vo mt s ri in n ra di dng cc k t lin tip.
# include "stdio.h"
# include "conio.h"
void prind(int n);
main()
45

{
int a;
clrscr();
printf("n=");
scanf("%d",&a);
prind(a);
getch();
}
void prind(int n)
{
int i;
if (n<0)
{ putchar('-');
n=-n;
}
if ((i=n/10)!=0)
prind(i);
putchar(n%10+'0');
}
4.6. B tin x l C
C a ra mt s cch m rng ngn ng bng cc b tin s l macro n gin. C hai
cch m rng chnh l #define m ta hc v kh nng bao hm ni dung ca cc file khc
vo file ang c dch.
Bao hm file :
d dng x l mt tp cc #define v khai bo ( trong cc i tng khc ), C a
ra cch bao hm cc file khc vo file ang dch c dng :
#include "tn file"
Dng khai bo trn s c thay th bi ni dung ca file c tn l tn file. Thng thng c
vi dng nh vy xut hin ti u mi file gc gi vo cc cu lnh #define chung v cc
khai bo cho cc bin ngoi. Cc #include c php lng nhau. Thng th cc #include
c dng nhiu trong cc chng trnh ln, n m bo rng mi file gc u c cung cp
cng cc nh ngha v khai bo bin, do vy trnh c cc li kh chu do vic thiu cc
khai bo nh ngha. Tt nhin khi thay i file c bao hm vo th mi file ph thuc vo
n u phi dch li.
46

Php th MACRO :
nh ngha c dng :
#define biu thc 1 [ biu thc 2 ]
s gi ti mt macro thay th biu thc 2 (nu c) cho biu thc 1.
V d :
#define YES 1
Macro thay bin YES bi gi tr 1 c ngha l h c ch no trong chng trnh c
xut hin bin YES th n s c thay bi gi tr 1.
Phm vi cho tn c nh ngha bi #define l t im nh ngha n cui file gc.
C th nh ngha li tn v mt nh ngha c th s dng cc nh ngha khc trc . Php
th khng thc hin cho cc xu du nhy, v d nh YES l tn c nh ngha th khng c
vic thay th no c thc hin trong on lnh c "YES".
V vic thit lp #define l mt bc chun b ch khng phi l mt phn ca chng
trnh bin dch nn c rt t hn ch v vn phm v vic phi nh ngha ci g. Chng hn
nh nhng ngi lp trnh a thch PASCAL c th nh ngha :
#define then
#define begin {
#define end; }
sau vit on chng trnh :
if (i>0) then
begin
a=i;
......
end;
Ta cng c th nh ngha cc macro c i, do vy vn bn thay th s ph thuc vo cch
gi ti macro.
V d :
nh ngha macro gi max nh sau :
#define max(a,b) ((a)>(b) ?(a):(b))
Vic s dng :
x=max(p+q,r+s);
tng ng vi :
x=((p+q)>(r+s) ? (p+q):(r+s));
47

Nh vy ta c th c hm tnh cc i vit trn mt dng. Chng no cc i cn gi


c tnh nht qun th macro ny vn c gi tr vi mi kiu d liu, khng cn phi c cc
loi hm max khc cho cc kiu d liu khc nhng vn phi c i cho cc hm.
Tt nhin nu ta kim tra li vic m rng ca hm max trn, ta s thy rng n c th gy ra
s by. Biu thc c tnh li hai ln v iu ny l khng tt nu n gy ra hiu qu ph
kiu nh cc li gi hm v ton t tng. Cn phi thn trng dng thm du ngoc m
bo trt t tnh ton. Tuy vy, macro vn rt c gi tr.
Ch :
Khng c vit du cch gia tn macro vi du m ngoc bao quanh danh sch i.
V d :
Xt chng trnh sau :
main()
{
int x,y,z;
x=5;
y=10*5;
z=x+y;
z=x+y+6;
z=5*x+y;
z=5*(x+y);
z=5*((x)+(y));
printf("Z=%d",z);
getch();
return;
}
Chng trnh s dng MACRO s nh sau :
#define BEGIN {
#define END }
#define INTEGER int
#define NB 10
#define LIMIT NB*5
#define SUMXY x+y
#define SUM1 (x+y)
#define SUM2 ((x)+(y))
main()
48

BEGIN
INTEGER x,y,z;
x=5;
y=LIMIT;
z=SUMXY;
z=5*SUMXY;
z=5*SUM1;
z=5*SUM2;
printf("\n Z=%d",z);
getch();
return;
END
Bi tp
1. Vit hm tm c s chung ln nht ca 2 s
2. Vit hm tm bi s chung nh nht ca 2 s
3. Vit hm tm s ln nht ca 3 s
4. Vit hm in cc s chn trong mt dy s nhp t bn phm
5. Vit hm tnh tng cc s t 1 - n

49

CHNG 5. MNG V CC KIU D LIU C CU TRC


5.1.D liu kiu mng/con tr
Mng l tp hp ca cc bin cng kiu c xp lin tip nhau trong b nh trong.
5.1.1. Mng 1 chiu v nhiu chiu
a/ Khai bo mng 1 chiu : < kiu phn t > < tn mng> [ < ch s > ]
V d : int a [5 ] ; => a [0] a[1] a[2] a [3] a [4] ( ch s chy t 0 n n - 1 ).
char S [20] ; => 'A' 'B' ...... 'X '
S[0]S[1] S[19]
b/ Cch nhp s liu cho mng t bn phm ( c th dng hm Random C).
+ Mng s nguyn :
V d : Nhp vo mng s nguyn 5 phn t
#include < stdio.h>
#include < conio.h>
#define n 5
main ()
{
int a [ n ] ; int i ;
for ( i = 0 ; i < n ; i ++ )
{
printf ( " a [ %d ] = " , i ); scanf ( " % d" , & a [ i ]);
}
/* Xut s liu mng ra mn hnh */
for ( i = 0 ; i < n ; ++ i)
printf ( " \ n a [ % d ] = % d ", i , a [ i ]);
getch ();
}
+ Mng s thc float :
#include <stdio.h>
#include < conio.h>
#define n 5 ;
main ()
{
float a [ n ] , tam ;
.....scanf ( " % f " , &tam) ; /*nhp qua bin trung gian tm */
a [ i ] = tam ;
c/Khi to mng :
a [ 5 ] = { 1,2,3,5,4 }a[0]=1 a[2]=2 .. a[4]=4
d/ Mng k t :
- l chui k t kt thc bng k t NULL c m ASCII l 0 .
- V d : char S [3] = { 'L', '0', 'P'] : chui ny khng ng do thiu ch cho k t kt thc l
NULL.
- Ta c th gn :
char S [ 4 ] = " Lop "; Ngn ng C s t ng ghi k t kt thc l NULL, tc l ' \0 '.
char S[ ] = " Lop " ; Khng cn khai bo s phn t mng.
* V d 1 : Nhp v mt mng s nguyn sau sp xp theo th t tng dn :
#include < stdio.h>
#define n 5
main ( )
{
50

int a [ n ] ; int i , j, t ;
for ( i = 0 ; i > n ; i ++ );
{
printf ( " nhp a [ % d] = " , i ); scanf ( " %d", & a [i ]);
}
/* Sp xp tng dn */
for ( i = 0 ; i < n - 1 ; i ++)
for ( j = i + 1 ; j < n ; j ++ )
if ( a [ i ] < a [j ] )
{
t = a [ i ] ; a [ i ] = a [ j ]; a [j ] = t ;
}
/* in kt qu */
for ( i = 0 ; i < n ; i ++ )
printf ( " % 5d " , a [ i ] );
getch ( );
}
V d 2 : Lm li v d 1 nhng vit ring hm sp xp v truyn tham s cho mng 1 chiu
#include <stdio.h>
#include <conio.h>
#define N 5
void sapxep ( int a [ ] , int n );
void main ( )
{
int a [ N ] ; int i ;
/* nhp 1 s liu cho mng */
for ( i = 0 ; i < N , i ++ )
{
printf ( " A [ %d ] = ", i ); scanf ( " %d ", & a [ i ] ); }
/* gi hm sp xp sp tng dn */
sapxep ( a, N );
/* in kt qu */
for ( i = 0 ; i < N ; i ++ )
printf ( " %5d ", a [ i ] );
getch ( );
}
/* hm sp xp tng dn */
void sapxep ( int a [ ], int n )
{
int i, j, t ;
for ( i = 0 ; i > n - 1 ; i ++)
for ( j = i + 1 ; j < n ; j ++ )
if ( a [ i ] > a [ j ]
{
t = a [ i ] ; a [ i ] = a [ j ] ; a [j ] = t ;
}
* V d 3 : chuyn i 1 chui k t thng thnh Hoa.
Ch : + Hm tolower ( ch ) : i 1 k t ch thnh thng.
+ Hm toupper ( ch ) : i k t ch thnh Hoa.
+ C 2 hm trn u nm trong th vin : < ctyte.h>
Gii : #include < stdio.h>
# include < ctyte.h>
51

#define n 20
main ( )
{
char s [ n ] ; int i ;
for ( i = 0 ; i < n ; i ++ )
s[ i ] = toupper ( getchar ( ) ) ; /* nhp k t v i thnh hoa lu vo mng */
/* kt xut chui s */
for ( i = 0 ; i < n ; i ++ )
putchar ( s [ i ] ) ; /* putchar ( ch ) : in k t ch ra mn hnh */
getch ( )
}
Bi tp : 1/ vit chng trnh nhp s liu cho mng A gm N phn t v mng B gm n phn
t , sau ghp 2 mng A v B thnh mng C gm m + n phn t v sp xp tng dn ( Bi
ny phi dng hm nhp s liu cho mng v hm sp xp).
- Tnh tng cc phn t m, dng, s chn, s l v tng tt c cc phn t ca mng
C [ m + n ].In cc s l trn 1 hng v cc s chn trn 1 hng.
- Nhp vo mt gi tr v tm xem gi tr c thuc vo mng C khng. Nu c in ra tt c
cc phn t tm c.
d) Mng nhiu chiu
Khai bo mng hai chiu : < kiu phn t > < tn mng > [ < ch s hng > ] [ < ch s ct >]
*V d 1 : int a [ 3 ] [ 2 ] ; float b [ 3 ] [ 4 ] ; char c [5 ] [6 ] ;
=> a [ 0 ] [0 ] a [ 0 ] [ 1 ]
a [ 1 ] [ 0 ] a [ 1 ] [ 1]
a[2][0]a[2][1]
V d 2 : #define Hang 5
# define Cot 6
int a [ Hang ] [ Cot ] ;
=> ta c cc bin chy i ( ch s chy t 0 n ( Dong - 1)).
ta c cc bin chy j ( ch s chy t 0 n ( Cot - 1 )) .
a [0] [0] a [0][1] ...... a [ 0 ][Cot - 1]
a [1] [0] a [1][1] ...... a [a][Cot - 1]
.................................
a[Dong-1][0]...... . . . . . . . . a[Dong-1][Cot-1]
*V d : Vit chng trnh tnh tng, tch cc s trong mng s thc a[3][2] ;
#include < stdio.h>
#define N 3
#define N 2
main ( )
{
int i , j ; float a [M][N] ; float tong, tich, tam ;
/* nhp s liu */
for ( i = 0 ; i < M ; i ++ )
for ( j = 0 ; j < N ; j ++ )
{ printf ( " nhp a [ %d][%d] = " , i , j );
scanf ( " %f " , & tam ) ; a [i][j] = tam ;}
/* tnh tng */
Tong = 0 ; Tich = 1;
for ( i = 0 ; i < M ; i ++ )
for ( j = 0 ); j < N ; j ++ )
52

{
Tong = Tong + a [ i ][j] ; Tich = Tich * a [i][j] ; }
/* in kt qu */
printf ( " Tng l tng = %f, TONG );
printf ( " tch l TICH = %F, TICH );
getch ( ) ;
}
Truyn tham s mng nhiu chiu cho hm ( tham s thc l tn mng nhiu chiu )
- gi s a l mng 2 chiu : float a[M][N]
+ Chng trnh gi :
{
float a [M][N]
Tong ( a ) ;// ( truyn a ch ca mng cho hm )
}
+ Chng trnh b gi ( chng trnh con ) :
float tong ( float a[ ][N] ) /* khai bo i nhn a ch ca mng */
{
}
Note : hm tong ch dng c i vi cc mng hai chiu c N ct v s hng khng quan
trng, khng khai bo ) :
* V d : Vit chng trnh tnh tng ca 2 ma trn cp m x n theo cng thc :
C[i][j] = a[i][j] + b [i][j]
#include <stdio.h>
#define m 3
#define n 4
/* cc prototype ( khai bo hm )*/
void nhap ( int a[ ][N] , int M, int N );
void TongMT ( int a[ ][N], int b[ ][N] , int c [ ][N], int M , int N );
void InMT ( int c [ ][N], int M, int N );
/* chng trnh chnh */
{ int a [M][N], b[M][N], c[M][N] ;
/* gi cc hm */
Nhap ( a, M ,N ) ; nhap ( b, M,N);
TONGMT ( a, b, c , M, N );
InMT ( c, M, N );
Getch ( ) ;
}
/* Hm nhp s liu cho mng 2 chiu m x n phn t */
void Nhap ( int a [ ][N] , int M , int N )
{
int i , j ;
for ( i= 0 ; i < M ; i ++ )
for ( j = 0 ; j < N ; j++ )
{
printf ( " a[%d][5d] = " , i , j ) ; scanf ( " %d " , &a [i][j]) ; }
return ;
}
void TongM ( int a [ ][N], int b [ ][N], int c [ ][N], int M , int N )
{
int i, j ;
for ( i = 0 ; i < M ; i ++ )
53

for ( j = 0 ; j < N ; j ++ )
c [i][j] = a [i][j] + b [i][j] ;
return ;
}
/* in kt qu */
void inMT ( int c[ ][N], int M, int N )
{
int i, j ;
for ( i = o ; i < M ; i ++ )
{ for ( j = 0 ; j < N ; j ++ )
printf ( " % 3d", a[i][j] );
printf ( " \n " ) ; /* xung dng */
}
return ;
}
Bi tp mng :
1/ cho mng 2 chiu A, l ma trn vung cp n x n , lp chng trnh :
a/ tnh tng tt c cc phn t dng ca mng.
b/ tnh tng cc phn t A[i][j] m i + j chia ht cho 5 .
c/ In ra cc s nguyn t theo tng hng.
d/ Sp xp theo hng.
e/ Sp xp theo ct .
f/ Tnh tng cc phn t trn ng cho ( i = j ) , ng bin.
g/ Tm max ; min theo tng hng, ct v ton b ma trn.
2/ Mt chui gi l palindrone nu n khng thay i khi ta o ngc th t ca cc k t
trong n ( v d " 12321 " )
. Lp chng trnh c mt chui ( xu ) k t v xc nh xem c tnh palondrone khng.
5.1.2. Bin con tr
a) Khi nim con tr ( pointer ) v a ch :
- Mi bin trong ngn ng C u c 1 tn v tng ng vi n l mt vng nh dng cha
gi tr ca n. Tu theo bin m vng nh dnh cho bin c di khc nhau. a ch ca
bin l s th t ca byte u tin tng ng vi bin . a ch ca bin c kiu khc nhau
l khc nhau. a ch v bin kiu int lin tip cch nhau 2 byte , bin kiu float l 4 byte.
- Con tr l bin dng cha a ch ca bin khc hoc c th l mt hm. Do c nhiu loi
a ch nn cng c nhiu loi bin con tr. Con tr kiu int dng cha a ch ca kiu int.
Con tr kiu float dng cha a ch kiu float.
- Mun s dng c pointer, trc tin phi c c a ch ca bin m ta cn quan tm
bng php ton ly a ch & . Kt qu ca php ly a ch & s l 1 phn t hng.
* V d : int num ; => &num l a ch ca num.
int pnum ; /* pnum l 1 pointer ch n mt int */
pnum = & num ; /* pnum cha a ch bin int num*/
gi s : num = 5 ; => * pnum = 5 /* do * l ton t ni dung */
Hai cu lnh sau y l tng ng
Num = 100 ;
( * pnum ) = 100 ;
- Quy tc khai bo bin con tr : < kiu d liu> * < tn bin con tr >
*V d 2 : int a, *p ;
a = 5 ; /* gi s a ch ca a l < 106 > */
p = & a ; /* p = <106> */
p = a ; /* php gn sai */
54

* p = a ; /* php gn ng */
scanf ( " %d " , &a ) ; tng ng scanf ( " %d , p ) ;
b) Tnh ton trn bin con tr ( pointer )
+ Hai bin con tr cng kiu c th gn cho nhau :
V d 1 : int a, * p, *a ; float * f;
a = 5 ; p = &a ; q = p ; /* ng */
f = p ; /* sai do khc kiu */
f = ( float * )p ; /* ng nh p kiu con tr nguyn v kiu float */
V d 2 : int a ;
char *c ;
c = &a ; /* sai v khc kiu */
c = ( char*) /* ng */
+ Mt bin pointer c th c cng, tr vi mt s nguyn ( int , long ) cho kt qu l
mt pointer.
* V d : int a , *p , * p10 ;
a=5;
p = &a ;
p10 = p + 10 ;
V d : int V[10] ;/* mng 10 phn t */
int *p ;
p = & V[0];
for ( i = 0 ; i < 10 ; i ++ )
{ *p = i ; /* gn gi tr i cho phn t m p ang tr n */
p ++ /* p c tng ln 1 ch n phn t k tip */
}
/* kt qu V[0] = 0 , V [ 1] = 1 ... V[9] = 9 * /
+ Php tr 2 pointer cho kt qu l mt s int biu th khong cch ( s phn t ) gia 2
pointer .
+ Php cng 2 pointer l khng hp l, pointer khng c nhn chia vi 1 s nguyn hoc
nhn chia vi nhau.
+ p = NULL : l con tr p khng tr n u c.
Ch : khng c s dng bin con tr khi cha c khi gn .
V d : int a , *p ;
scanf ( "%d", p ) ( sai )
=> thay bng cc lnh : p = &a v scanf ( "%d" p ) ( ng)
c) Con tr mng
+ Mng 1 chiu v con tr :
- Trong ngn ng C : gia mng v con tr c mi quan h cht ch. Cc phn t ca mng
c th xc nh nh ch s hoc thng qua con tr.
- V d : int A[5] ; * p ;
P=A;
+ mng b tr 5 nh lin tip ( mi chim 2 byte ).
+ Tn mng l 1 hng a ch ( khng thay i c ), chnh l a ch ca phn t u tin.
=> A tng ng vi &A[0]
(A + i ) tng ng vi &A[i]
*(A + i ) tng ng vi A[i]
p = A => p = &A[0] ( p tr ti phn t A[0])
*(p + i ) tng ng vi A[i].
=>bn cch vit nh sau l tng ng : A[i], * ( a + i ), * ( p + i ), p[i].
55

V d 2 : int a [5] ; *p ;
p=a;
for ( i = 0; i < 5 ; ++ i)
scanf ( " %d ", &a[i]); ( 1)
scanf ( " %d ",a + i ); ( 2)
scanf ( " %d", p + i ); ( 3)
scanf ( " % d", p ++ ); ( 4)
scanf ( " %d ", a ++ ); sai v a ch ca a l hng.
- Cc lnh (1), (2), (3), (4) tng ng nhau.
V d 3 : Nhp 5 s nguyn vo 1 mng gm 5 phn t ( a[5]) sau sp xp tng dn, in ra
s ln nht vf nh nht v tnh tng ca 5 s .
#include <stdio.h>
#define n 5
main ( )
{ int a [n], t , *p, i , j, ; int s ;
p=a;
for ( i = 0; i < n ; i ++ )
{ printf ( " a[%d] = " , i ) ; scanf ( " %d ", p + i ) }
/* Sp xp tng dn */
for ( i = 0 ; i < n-1 ; i ++ )
for ( j = i + 1 ; j<n ; j++)
if ( *(a + i ) > * ( a + j )
{ t = * ( a + i ) ; *(a + i ) = * ( a + j) ; *(a + j ) = t ; }
s= 0 ;
for ( j=0 ; i < n , ++i )
s + = a[ i];
printf ("\n Tong = %5d ", s );
printf ( "\n s ln nht l %d ", a [4] );
printf ( " s nh nht l %d \n ", a [d] );
getch ( );
}
+ Con tr v mng nhiu chiu :
- Php ton ly a ch & ch p dng c vi mng 2 chiu kiu nguyn. Cc kiu khc
khng c.
* V d 1 : int a[2][3]
{ scanf ( "%d", & a[1][1]) } ( ng )
* V d 2 : float a[2][3]
Scanf (" %f", &a[1][1]); ( sai ).
- Mng 2 chiu a[2][3] => gm 2 x 3 = 6 phn t c 6 a ch lin tip theo th t sau :
Phn t : a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] ( * )
a ch : 0 1 2 3 4 5
- Ngn ng C quan nim mng 2 chiu l mng mt chiu ca mng a[2][3] tng ng
khng phn t m mi phn t ca n gm 3 s nguyn nn :
a tr ti hng th nht ( a [0][0] )
a+1 tr ti hng th hai ( a[1][0] )
- Do duyt cc phn t ca mng a[2][3] ta dng con tr theo cch sau :
+ ( theo * ) => ta c cng thc a[i][j] = ( int*) a + i * n + j
trong : int* : con tr a ( a ch a ).
n : s ct.
- float a[2][3] , *p ;
p = ( float*)a ; /* ch lnh ny */
khi : p tr ti a[0][0] /* p = & a[0][0] */
56

p + 1 tr ti a[0][1] /* *(p+1) = a[0][1] */


P + 2 tr ti a[0][2]
.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p + 5 tr ti a[1][2] /* *(p+5) = a[1][2] */
* Tng qut : a[i][j] = * ( p + i* N + 5 ); trong N : s ct )
Kt lun : Mng 2 chiu c th chuyn thnh mng 1 chiu nh con tr.
* V d : nhp mt s liu vo mng 2 chiu kiu float a[2][3] ta c th dng cc cch sau:
+ Cch 1 :
#include " stdio.h "
main ( )
{ float a[2][3] , *p ; int i ;
p = (float*)a ; /* lu lnh ny */
for ( i = 0 ; i < 2*3 ; ++i)
scanf ( "%f", (p+i)) ; /* (p_+ i ) l a ch */ ( X )
}
+ Cch 2 : Sa lnh ( X ) nh sau : scanf ( "%f", (float*)a + 1 ) ;
+ Cch 3 :
#include " stdio.h " #define m 2 #define n 3
main ( )
{ float a[m][n] ; int i , j ; float *p ; p = ( float* )a ;
for ( i=0 ; i<m ; i++ )
for ( j=0 ; j<n ; j++ )
scanf ( "%f" , ( p +i*n + j )
hoc lnh scanf ( " %f" , ( float *)a + i * N + j ));
}
+ Cch 4 : s dng bin trung gian :
#include " stdio.h"
#define dong 2
#define cot 3
main ( )
{ float a[dong][cot] , tam ; int i , j ;
for ( i = 0 ; i < dong ; i++ ) ;
for ( j=0 ; j < cot ; ++j )
{ printf ( "\n a[%d][%d] = " , i , j );
scanf ( " %f " , &tam ) ;
a[i][j] = tam ;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; }
Bi tp : Sp xp mng 2 chiu theo hng v ton b mng
+ Mng con tr : l mng m mi phn t ca n c th cha mt a ch no .
Khai bo : < kiu d liu > < tn mng > [<ch s>].
* V d : int *a[5] ;
- trong : a l mng gm 5 nh lin tip, mi nh l 1 bin con tr tr n kiu int ; bn
thn a khng th dng lu tr s liu.
- Gi s : a <100> <102> <104> <106> <108> < 110>
a[0] a[1] a[2] a[3] a[4] a[5]
a ch < 30> < 20> < 10 > < 80 > < 70 > < 100>
7 8 9 10 11
<10> <12> <14>
12345
<20> <22> <24> <26> <28>
6 12 13
<30> <32> <34>
57

- a= &a[0] => a = <100> ( a ch 100 ).


- a[0] = < 30 > ( a ch bng 30 : ti a ch 30 con tr a[0] tr n a ch <30 > v gi s ti
a ch < 30 > c gi tr l 6 ).
=> *a[0] = * (<30>> = 6 .
a[1] = < 20 > => *a[1] = 1
a [2] = < 10> => *a[2] = 7 .
Ch 1: Xem a l con tr 2 ln ( con tr ca con tr ) :
- a = <100 > => *a = <30 > ( do a = &a[0] )
=> **a = 6 ( do *(<30>)).
- *(*(a + 1) + 2 )
*(102)
* ( <20> + 2 ) => *<24> = 3
Ch 2 : - int a[5] => a l con tr hng khng thay di a ch ca n c ( nn a++ sai)
- int *a[5] ; => a laf con tr ng nn thay i gi tr c ( a++ ng ).
V d : int *a[5]
For ( i = 0 ; i < 5 ; i++ )
{ printf ("%d", *a[0] );
a[0]++ ;
}
* Ch 3 : mng 2 chiu chng qua l 1 con tr 2 ln ( con tr ca con tr ).
L do : a[i][k] ; trong t b = a[i] => b[k] = a[i][k] ;
+ Cng thc : ( a[i] = *(a+i)) => ( b[i] = *(b+i)).
b[k] = *(b+k)).
b[k] = *(a[i] + k )
= * ( *(a+i) + j).
=> a[i][k] = *(*(a+i) + k) ; trong *(*(a+i) l con tr 2 ln.
5.2. D liu kiu xu k t :
- Xu k t : l dy k t t trong ngoc kp . V d : " Lp hc ". Xu ny c cha trong
1 mng kiu char.
L O P H O C \0
a ch :<100> <101> <102> NULL : kt thc chui
=> char *lop ;
lop = " Lop Hoc " ; ng : gn a ch ca chui cho con tr lp.
+ puts (" Lop Hoc ") ; v puts (lop ) u hin th dng ch Lop Hoc.
V d : char Tenlop[10] ;
Printf ("\n Tenlop : " ) ; gets( Tenlop ) ; => ( Nhp vo chui " lp hc " )
Cn nu chng ta khai bo nh sau l sai :
Char *lop , tenlop [10] ;
Tenlop = " lp hc " ; sai v Tenlop v chui l 2 con tr hng , khng c gn cho nhau .
Mun gn ta dng hm strcpy (Tenlop , "lp hc ");
+ Con tr v vic nh v b nh ng :
- V d 1 :
#define N=10 ;
main ( )
{ int a[N] ; int m :
printf ( " nhp s phn t m = "); scanf("%d", &m) ;
for ( i= 0 ; i < m ; i++ )
scanf ( "%d", &a[i] );
- Nhn xt V d 1 trn : + Nu m <=N ( N =10) : th s b d 1 s bin mng l ( n - m).
+ Nu m > N ( tc l m > 10 ) : th chng trnh s chy sai v ta khng bin mng.
=> Do ta phi khc phc bng cch : nh v b nh ng. ( Bng hm malloc v calloc).
* V d 2 :
58

#include < stdio.h>


#include<alloc.h> hoc #include <stdio.h >
main ( )
{ int m , *a ;
printf (" Nhp s phn t m = " ); scanf ( "%d", &m );
/* Cp pht v nh v b nh ng */
a = ( int*) malloc ( m* size of ( int ) ); (1)
if ( a!= NULL ) /* cp pht thnh cng */
for ( i=0 ; i < m ; i++)
scanf ( "%d", &a[i] );
free (a) ; /* gii phng vng nh mng */
}
- Hm malloc ( ) nm trong th vin <alloc.h> . Hm ny cung cp s lng byte lin tip t
phn b nh cn cha s dng trn my tnh.
+ V d : malloc (num) = num byte v tr v con tr kiu void tr n a ch bt u ca
nh.
- Size of ( int ) : l s byte m mt bin kiu int yu cu ( gi tr = 2 )
- ( int*) : p kiu ( type - casing) : coi a ch bt u l int ( do malloc tr v con tr kiu
void , c bit khng c kiu ) , c th nhn bt k a ch kiu no ( nh p kiu ).
- Mun s dng hm calloc thay cho hm malloc => khai bo :
a = (int*) calloc ( n, size of (int));
* Ch : Lun gn mt a ch cho mt con tr trc khi s dng ti n. Nu khng bin con
tr s mang mt gi tr ngu nhin c th ph hu chng trnh.
* Cp pht b nh ng cho mng 2 chiu m x n phn t, m , n nhp t bn phm:
+ V d : #include <stdio.h>
#include <alloc.h>
void main ( )
{ int **a , m, n, OK ;
printf ( " nhp m = " ); scanf ("%d", &m);
printf (nhp m = n) ; scanf ( "%d", &n );
a = ( int** ) malloc ( m*seze of (int *));
if (a!=NULL ) /*Cp pht thnh cng */
{ OK = 1 ;
for ( i=0 ; i < m ; i++ ) } /* gi tr ban u cho bin con tr*/
a[i] = (int*) break ;
for ( i=0 ; i <m ; i ++ )
{ if !(OK) break ;
a[i] = (int*) malloc ( n * size of (int));
if ( a[i] = NULL ) OK = 0 ;
}
if(OK)
{ s dng a[0][0] , a[0][1]....., a[i][j] ...., a[m][n] }
/* gii phng vng nh cp pht */
if ( a!=NULL )
{ for ( i = 0 ; i < m ; i++)
if ( a[i] ! = NULL , free ( a[i]);
free (a);
}
}
* Ch : ta xem mng 2 chiu l mng 1 chiu nn c th khai bo :
a = (int*) malloc ( m*n * size of ( int ));
V A[I][J] = A[ I*N + J]
59

Bi tp :
1/ Lm li cc bi tp phn mng nhng dng con tr .
2/ Dng hm malloc hay calloc nhp mng n phn t , sau tnh tng cc phn t v sp xp
mng gim dn.
3/ Dng hm malloc hay calloc nhp ma trn m x n , sau tnh tng v sp xp theo tng dn
+ Mi lin h gia con tr v cc khi nim quan trng:
a/ Con tr v hm :
- Ch 1 : bn thn tham s truyn cho hm khng bao gi b thay i. Nhng nu tham s l
con tr th gi tr ca n khng thay i nhng ni dung c cha a ch li c th thay
i.
- Ch 2 : Truyn cho hm mt tham s hnh thc c khai bo l con tr, v khi gi hm
truyn cho n mt gi tr a ch ca bin mun thay i.
- V d :gi s tn xy dng mt hm dng hon v bin thc, ta vit nh sau :
Cch 1 :
#include<stdio.h>
void swap (float x , float y ) /* cch 1 sai */
{ float temp ;
temp = x ; s<y ; y = temp;
}
main ( )
{ float a, b ; a = 10.0 ; b = 20.0 ;
printf (" khi cha hon v a = %4.0f; b = %4.0f \n" , a , b ) ;
swap ( a , b ) ;
printf ( " sau khi hon v a = %4.0f ; b = %4.0f \n" , a, b ) ;
- Phn tch ci sai ca cch 1 ca v d trn :
+ Do a, b thuc hm main ( ). Khi khai bo s dng 2 khong nh ( mi khong 3 byte) . a, b
trong li gi hm swap(a,b) l 2 tham s thc.
+ Cc i x, y v bin cc b temp c cung cp khong nh nhng a ch khc. Do xx,
y ch tn ti hm swap(_), cn a, b tn ti sut c qu trnh ca chng trnh nn hm swap
() khng lm thay i ( tc hon v) c gi tr ca a v b => hm vit theo cch 1 khng t
yu cu => yu cu vit li theo cch 2.
* Cch 2 : void swap (float *x , float *y) /* vit ng*/
{ float temp ;
temp = *x ; *x = *y ; * y = temp ;
}
main ( )
b/ S hc con tr ( c th thao tc s hc trn ni dung con tr )
* V d : #include < stdio.h>
#include <alloc.h>
main ( )
{ #define N 3
int *list , i ;
list = int*) calloc ( N, size of(int));
*list = 15 ;
* (list + 1) = 20 ;
*(list + 2 ) = 30 ;
printf ( " cc a ch l : ");
for ( i=o ; i < N ; i++)
printf ("%4d",(list + i));
printf ("\n cha cc gi tr l : ");
for ( i=0 ; i < N ; i++)
printf("%4d", *(list + i));
60

printf("\n");
=> list tr ti mt di b nh di 6 byte ( 3*2) c cc gi tr l 5,20, 30 . gi tr a ch u l
06A => kt qu cc a ch l : 06A 06AC 06AE cha cc gi tr l : 5 20 30
c/ Con tr v mng :
- V d 2 :
#include
main ( )
{ #define N 3
int list [N] , i ;
list [0] = 5 ; list [1] = 20 ; list[2]=30;
printf ( " Cc a ch l : ");
for ( i = 0 ; i < N ; i++)
printf ( "%4p ", &list[i] );
printf("\n cha cc gi tr l : ");
for ( i=0; i<N ; i++)
printf ( "%4d", list [i] ));
}
-Kt qu chng trnh :
+ Cc a ch l : 163A 163C 163E
+ Cha cc gi tr l : 5 20 30
- So vi v d 1 th iu khc duy nht l gi tr a ch thay i. Nh vy ta c th s dng
tn ca mt mng nh con tr v ngc li.
=>{ list + i) = = &(list[i]) v *(list + i) = = list[i]}
d/ Con tr v cu trc :
- Ta c th khai bo con tr nh mt bin cu trc, cng nh con tr ca bu k kiu d liu
no khc. iu ny cho php to mt danh sch mc ni cc phn t ( s trnh by chng sau
).
e/ Con tr ti hm : dng cha a ch ca hm. Nn kiu ca hm v con tr phi ging
nhau.
V d : #include <stdio.h>
Double fmax ( double x, double y ) /* hm tnh max ca 2 s */
{ return ( x>y ? x:y ) ; }
/* khai bo v gn tn hm cho con tr hm */
double (*pf) (double , double ) = fmax ;
main ( )
{ printf ( " In max = % f " , pf(15.5, 20.5 ));
}
5.3. D liu kiu cu trc
- Khi nim : Cu trc l mt kiu d liu kiu bn ghi(record) , cho php nhiu loi d liu
c nhm li vi nhau. ( Khi nim cu trc trong C tng t nh pascal hay Foxpro).
5.3.1. Khai bo kiu cu trc :
a/ struct tn _ kiu cu trc
{
khai bo cc thnh phn ca n ( cc field v kiu d liu ca field)
} < danh sch bin>;
- V d 1 : struct kieu HV -> tn kiu cu trc.
{ char Ten[30] ;
int namsinh ;float diemTB ;
} HV ; ( bin HV)
- V d 2 : struct kieu HV
61

{
cc thnh phn
}
struct kieu HV HV ; /* khai bo bin theo cch 2 */
b/ Dng ton t typedef khai bo kiu cu trc ( nh ngha kiu mi) ;
- V d 3 : typedef struct
{ char Ten[30]
int namsinh ;
float diemTB ;
} kieu HV ;
kieu HV Hoc vien ;
kieu HV DSLop[20];
kieu HV Lop[ ] = { { "nguyn vn ng", 1980, 10.0},
{ " Trn vn Ty", 1982, 5.5},
{ " Phm vn Nam ", 1979, 6.5}
};
- V d 4 : struct ngay{
int ngay ;
char Thang[10];
int nam ;
};
type struct
{ char Ten[30] ;
ngay namsinh ; /* thnh phn cu trc c kiu cu trc*/
float diemTB;
} kieu HV ; kieu HV HV;
* Ch :
- Khai bo struct phi nm v tr ton cc ca chng trnh, thng sau cc #include.
- Cu trc thng dng xy dng mt bng cc cu trc.
+ V d : kieu HV DSLop[30] ; struct kieu HV person[50];
- C th truyn cu trc nh mt tham s hnh thc, nhng vi nhng cu trc kch thc ln
s khng ti u v thi gian ln nh. Khi khng nn s dng con tr cu trc.
+ V d : struc kieu HV *HV ;
5.3.2. Truy cp n cc thnh phn ca kiu cu trc :
Tn cu trc. Tn thnh phn
Hoc Tn cu trc. Tn cu trc con. Tn thnh phn.
- V d : + nhp vo tn, nm sinh, im cho bin cu trc hc vin ( v d 3).
gets(hoc vien.ten) /* nhp " Phm th Bc" v Enter */
scanf("%d ", & hoc vien.namsinh );
scanf("%f", &tam); hoc vien.diem = tam; (*)
+ Nhp nm sinh cho bin hc vin v d 4 :
scanf("%d",&hv.ngay.namsinh);
* Ch : Nu cc thnh phn khng phi l nguyn(int) => nhp qua trung gian nh (*).
puts(hoc vien.ten); => " Phm th Bc"
printf("%d%f", hoc vien.namsinh, hoc vien.diemTB);
* Lnh gn : + Ta c th gn 2 bin cu trc c cng kiu cho nhau :
V d : hv2=hv1;
+ Gn gi tr u cho bin cu trc v khai bo mt mng cu TRC( XEM V D 3)
Bi tp : vit chng trnh nhp danh sch hc vin gm cc trng h tn, tui, im, v tm
kim trong dnhch c ai tn " Phm To " khng.
Tn Tui im
HV [ 0] Nguyn A 20 5.5
62

HV [1] Trn B 22 6.5


HV [2] Phm To 25 8.5
HV [3] L C 21 7.5
#include <stdio.h>
#define n 10
typedef struct
{ char Ten[30];
int tuoi ;
float diem ;
} kieu HV ;
kieu HV HV[11]
void main( )
{ int i ; float tam ; kieu HV HV;
/* nhp d liu cch 1*/
for ( i = 0 ; i < n ; i++)
{ printf ("\n Nhp s liu cho hc vin th %d", i ) ;
printf (" H v tn = " ) ; gets ( hv[i].ten);
printf ("tui = "); scanf ( "%d" , &hv[i].tuoi);
printf("im = "); scanf ("%f*c", &tam ); hv[i].diem = tam ;
}
/* cch 2 nhp vo bin cu trc v gn hv[i] = h */
for ( i = 0 ; i<n ; i++ )
{ printf("H v tn = "); gets(h.ten);
} hv[i] = h ;
/* tm kim Phm To */
thay = 0 ; i = 0 ; /* thay = 0 : khng thy, thy = 1 : tm thy */
while ((!thay)&&(i <n))
if ( strcmp(hv[i].Ten , " Phm To ") = = 0 )
{ thay = 1 ;
printf ("%s%d%f ", hv[i].ten , hv[i].tui, hv[i].im );
}
else i++ ;
if (!thay ) puts ("\n khng tm thy Phm To !");
getch( ); }
Bi tp : Vit chng trnh nhp danh sch gm na hc vin gm cc thng tin nh : H , tn,
im pascal , im c, sau tnh im trung bnh (iemTB) = (diemC*2 + diempascal)/3 .
- V xt kt qu u hay rt theo qui c sau :
+ nu im trung bnh >= 5 th kt qu u.
+ Nu im trung bnh <5 th kt qua rt.
+ Nu im trung bnh = 4 m phi = "N" th kt qu l u.
1/ in danh sch va nhp gm h tn, phi , im c, im pascal, im TB , kt qu .
2/ Sp xp gim dn theo im trung bnh v in ra.
3/ Nhp vo tn cn tm v tm trong danh sch hc vin nu khng tm thy th in ra hc vin
c tn khng tm thy. Nu c nhiu hc vin c cng tn cn tm th hy in ra ngi cui
cng c tm thy.
4/ Ging cu 3 nhng in ra 2 ngi tm thy u tin ( nu c nhiu ngi ).
5/ Ging cu 3 nhng in ra ngi u tin v ngi cui cng ( nu c nhiu ngi). Nn vit
theo tng hm.
5.3.3. Con tr tr n cu trc v a ch cu trc :
a/ Con tr v a ch :
- V d : typedef struct
{ char Ten[30] ;
63

int tuoi ;
float diem ;
} kieu HV ;
kieu HV *p , HV , lop[50] ; HS [50] ( trong : HV l bin cu trc, *p : con tr cu trc
dng lu tr a ch cu trc v mng cu trc ) ( *).
main ( )
/* ta c th gn */
p = &HV ; /* ng do (*)*/
p = &lop[i]/*ng do (*) */
p = lp ; /* ng : p = a ch Lop[0] , p = &lop[0] ) do Lop = &Lop[0])
b/ truy cp thng qua con tr :
- Cch 1 : tn con tr - tn thnh phn.
- Cch 2 : (*tn con tr).tn thnh phn.
- V d : p = &HV ; p = &Lop[2] '
=> HV.Ten p -- tn;
Lop[2].tui (p*).tuoi p - tui ;
*p = HV ;
*P = Lop[2]
- Gi s cn nhp s liu ch vng trn th 3 cch vit sau l tng ng :
+ (1) : gets(HV.ten)
+ (2) gets ( p ten) gets( (*p).ten).
+ (3) scanf("%d",&HV.tuoi) ; scanf("%d", p - tui );
scanf ("%d", (*p).tuoi);
- Gi s cn nhp d liu cho mng cu trc th cc cch vit sau y tng ng :
+ V d : p = lop ;
for ( i = 0 ; i < n ; i++)
{ gets (lop[i].tn); tng ng vi :
. gets((*(lop* i ) ).ten);
.gets(*(p + i ).ten);
.gets ( p[i].ten);
.gets (p ten); p++ ;
.gets (*p).ten) ; p++;
- V d : lm li bi tp mu nhng s dng bin con tr :
#include <stdio.h>
#define n 10
typedef struct
{ char ten[30] ;
int tuoi ;
float diem ;
} kieu HV ;
main ( )
{ kieu HV hv [n], *p , h;
int i ; int thay ; float tam ; int tui ; p = hv;
for ( i = 0 ; i < n ; i++)
{ printf (" nhp hc vin th %d ", i );
printf("H v tn"); gets ( p ten);
printf("tui : ") ; scanf ("%d", &tui); p tuoi = tuoi;
printf ("diem : ") ; scanf ("%f%*c ", &tam ); p diem = tam;
p++ ; printf ("%c", getchar();
}
/* nhp theo cch 2 qua bin h xong gn *p = h */
/* tm Phm To */
64

thy = 0 ; i = 0 ; p = hv ; /* di chuyn con tr v u danh sch */


for ( i = 0 ; i < n ; i++ )
if ( strcmp(p ten, " Phm To " ) = = 0 )
{ thy = 1
printf ("%s %d%f" , p ten, p tuoi, p im );
break ;
else p++ ;
if (!thay) puts (" khng c Phm To trong danh sch ");
getch( );
}
Bi tp : lm li bi tp trc nhng s dng con tr.
5.3.4. Cp pht b nh ng cho kiu d liu cu trc :
- Gi s ta cn qun l danh sch hc vin nn dng mng cu trc ( cp pht b nh tnh danh sch c ) ta phi s dng s hc vin ti a => tha vng nh. cp pht va s s
hc vin nh ta mun => ta dng phng php cp pht b nh ng hm malloc hoc
calloc(.)
- V d : Nh danh sch n hc vin gm h tn, im v sp xp gim dn theo im.
#include <stdio.h> #include<conio.h> #include<alloc.h>
#include< string.h>
typedef struct
{ char ten[30] ; int diem ; char kq[5] ; } kieu HV;
kieu HV *lop , *p , tam ;
/* Hm nhp dan sch */
void nhapDS ( int n , kieu HV lop[ ])
{ int i , diem ;
p = lop ;
for ( i = 0 ; i < n ; i++)
{ printf("nhp H tn ngi th %d : " , i +1 ) ; gets ( p ten);
printf ( " im = " ) ; scanf ( "%d" , &diem ) ; p diem = diem ;
printf ("%c", getchar()); /* kh stdin */
p++ ;
}
/* Hm sp xp*/
void sapxep ( int n, kieu HV lop[ ])
{ int i , j ; kieu HV tam ;
for ( i = 0 ; i < n-1 ; i++)
for ( j=i + 1 ; j< n ; j++)
if ( lop[i].diem < lop[j].diem )
{ tam = lop[i] ; lop[j] = lop [j] ; lop [j] = tam ; }
/* hm in danh sch */
void inds( intn, kieu HV lop[ ] )
{ int i ;
for ( i = 0 ; i < n ; i++ )
{ printf ("%20s%5d ", lop[i].ten,lop[i].diem );
printf ("\n" ; /* xung hng */
/* chng trnh chnh */
void main ( )
{ int i , j, n , t, diem ;
printf ("\n Nhp s s : ") ; scanf ( "%d", &n);
lop = (kieu HV*)malloc ( n * size of ( kieu HV) ) ; printf ("%c", getchar ());
nhapds (n, lop ) ; sapxep ( n, lop ) ; inds ( in lop );
getch ( ); }
65

Bi tp :
1/ Lm li cc bi tp phn mng nhng dng con tr .
2/ Dng hm malloc hay calloc nhp mng n phn t , sau tnh tng cc phn t v sp xp
mng gim dn.
3/ Dng hm malloc hay calloc nhp ma trn m x n , sau tnh tng v sp xp theo tng dn
4/ Nhp v xut 1 danh sch gm n nhn vin
5/ Nhp, xut, sp xp, tm kim danh sch n sinh vin (sp xp theo im trung bnh, tm
theo tn)

66

CHNG 6. D LIU KIU TP


6.1. Khi nim v tp tin
Tp tin hay tp d liu l mt tp hp cc d liu c lin quan vi nhau v c cng
mt kiu c nhm li vi nhau thnh mt dy. Chng thng c cha trong mt thit b
nh ngoi ca my tnh (a mm, a cng...) di mt ci tn no .
Tn ting Anh ca tp l file, n c dng ch ra mt hp ng cc phiu hay th
ghi ca th vin. Mt hnh nh r nt gip ta hnh dung ra tp l t phiu ca th vin. Mt
hp c nhiu phiu ging nhau v hnh thc v t chc, song li khc nhau v ni dung.
y, t phiu l tp, cc l phiu l cc thnh phn ca tp. Trong my tnh, mt a cng
hoc mt a mm ng vai tr chic t ( cha nhiu tp).
Tp c cha trong b nh ngoi, iu c ngha l tp c lu tr dng nhiu
ln v tn ti ngay c khi chng trnh kt thc hoc mt in. Chnh v l do trn, ch nhng
d liu no cn lu tr ( nh h s chng hn) th ta nn dng n tp.
Tp l mt kiu d liu c cu trc. nh ngha tp c phn no ging mng ch
chng u l tp hp ca cc phn t d liu cng kiu, song mng thng c s phn t c
nh, s phn t ca tp khng c xc nh trong nh ngha.
Trong C, cc thao tc tp c thc hin nh cc hm th vin. Cc hm ny c
chia lm hai nhm : nhm 1 v nhm 2. Cc hm cp 1 l cc hm nhp / xut h thng,
chng thc hin vic c ghi nh DOS. Cc hm cp 2 lm vic vi tp thng qua mt bin
con tr tp.
Do cc hm cp 2 c nhiu kiu truy xut v d dng hn so vi cc hm cp 1 nn
trong cc chng trnh vit trong C, cc hm cp 2 hay c s dng hn.
6.2. Cu trc v phn loi tp
Mt tp tin d c xy dng bng cch no i na cng ch n gin l mt dy cc
byte ghi trn a (c gi tr t 0 n 255). S byte ca dy chnh l di ca tp.
C hai kiu nhp xut d liu ln tp : Nhp xut nh phn v nhp xut vn bn.
Nhp xut nh phn :

D liu ghi ln tp theo cc byte nh phn nh b nh, trong qu trnh nhp

xut, d liu khng b bin i.

Khi c tp, nu gp cui tp th ta nhn c m kt thc tp EOF ( c

nh ngha trong stdio.h bng -1) v hm feof cho gi tr khc 0.


Nhp xut vn bn:

Kiu nhp xut vn bn ch khc kiu nh phn khi x l k t chuyn dng (

m 10) v k t m 26. i vi cc k t khc, hai kiu u c ghi nh nhau.


67

M chuyn dng :
Khi ghi, mt k t LF (m 10) c chuyn thnh 2 k t CR (m 13) v
LF
Khi c, 2 k t lin tip CR v LF trn tp ch cho ta mt k t LF

M kt thc tp :
Trong khi c, nu gp k t c m 26 hoc cui tp th ta nhn c m kt thc tp
EOF ( bng -1) v hm feof(fp) cho gi tr khc 0 ( bng 1).
6.3. To tp mi c/ghi d liu
khai bo s dng tp, ta dng lnh sau :
FILE bin_con_tr_tp;
Trong bin_con_tr_tp c th l bin n hay mt danh sch cc bin phn cch nhau bi
du phy ( du , ).
V d :
/* Khai bo hai bin con tr tp */

FILE *vb, *np;


6.3.2. M tp - hm fopen :
Cu trc ng php ca hm :

FILE *fopen(const char *tn_tp, const char *kiu);


Nguyn hm trong : stdio.h .
Trong :
i th nht l tn tp, i th hai l kiu truy nhp.
Cng dng :
Hm dng m tp. Nu thnh cng hm cho con tr kiu FILE ng vi tp va m.
Cc hm cp hai s lm vic vi tp thng qua con tr ny. Nu c li hm s tr v gi tr
NULL.
Bng sau ch ra cc gi tr ca kiu :
Tn kiu

ngha

"r" "rt"

M mt tp c theo kiu vn bn. Tp


cn c phi tn ti, nu khng s c li

"w" "wt"

M mt tp ghi theo kiu vn bn. Nu


tp tn ti th n s b xo.

"a" "at"

M mt tp ghi b xung theo kiu vn


bn. Nu tp cha tn ti th to tp mi.

"rb"

M mt tp c theo kiu nh phn. Tp


cn c phi tn ti, nu khng s c
68

li.
"wb"

M mt tp mi ghi theo kiu nh phn.


Nu tp tn ti th n s b xo.

"ab"

M mt tp ghi b xung theo kiu nh


phn. Nu tp cha tn ti th to tp mi.

"r+" "r+t"

M mt tp c/ghi theo kiu vn bn.


Tp cn c phi tn ti, nu khng s
c li

"w+" "w+t"

M mt tp c/ghi theo kiu vn bn.


Nu tp tn ti th n s b xo.

"a+" "a+t"

M mt tp c/ghi b xung theo kiu


vn bn. Nu tp cha tn ti th to tp
mi.

"r+b"

M mt tp c/ghi theo kiu nh phn.


Tp cn c phi tn ti, nu khng s
c li.

"w+b"

M mt tp mi c/ghi theo kiu nh


phn. Nu tp tn ti th n s b xo.

"a+b"

M mt tp c/ghi b xung theo kiu


nh phn. Nu tp cha tn ti th to tp
mi.

Ch :
Trong cc kiu c ghi, ta nn lm sch vng m trc khi chuyn t c sang ghi
hoc ngc li. Ta s cp n cc hm vi tnh nng xo sau ny.
V d :
f=fopen("TEPNP","wb");
6.3.3. ng tp - hm fclose :
Cu trc ng php ca hm :
int fclose(FILE *fp);
Nguyn hm trong : stdio.h .
Trong :
fp l con tr ng vi tp cn ng.
Cng dng :
Hm dng ng tp khi kt thc cc thao tc trn n. Khi ng tp, my thc hin
cc cng vic sau :
69

Khi ang ghi d liu th my s y d liu cn trong vng m ln a

Khi ang c d liu th my s xo vng m

Gii phng bin tr tp.

Nu lnh thnh cng, hm s cho gi tr 0, tri li n cho hm EOF.

V d :
fclose(f);
6.3.4. ng tt c cc tp ang m- hm fcloseall :
Cu trc ng php ca hm :
int fcloseall(void);
Nguyn hm trong : stdio.h .
Cng dng :
Hm dng ng tt c cc tp ang m . Nu lnh thnh cng, hm s cho gi tr
bng s l s tp c ng, tri li n cho hm EOF.
V d : fcloseall();
6.4. Mt s hm x l tp ca C
6.4.1. Lm sch vng m - hm fflush :
Cu trc ng php ca hm :
int fflush(FILE *fp);
Nguyn hm trong : stdio.h .
Cng dng :
Dng lm sch vng m ca tp fp. Nu lnh thnh cng, hm s cho gi tr 0, tri li
n cho hm EOF.
V d :
fflush(f);
6.4.2. Lm sch vng m ca cc tp ang m - hm fflushall :
Cu trc ng php ca hm :
int fflushall(void);
Nguyn hm trong : stdio.h .
Cng dng :
Dng lm sch vng m ca tt c cc tp ang m. Nu lnh thnh cng, hm s
cho gi tr bng s cc tp ang m, tri li n cho hm EOF.
V d :
fflushall();
6.4.3. Kim tra li file - hm ferror :
70

Cu trc ng php ca hm :
int ferror(FILE *fp);
Nguyn hm trong : stdio.h .
Trong fp l con tr tp.
Cng dng :
Hm dng kim tra li khi thao tc trn tp fp. Hm cho gi tr 0 nu khng c li,
tri li hm cho gi tr khc 0.
6.4.4. Kimtra cui tp - hm feof :
Cu trc ng php ca hm :
int feof(FILE *fp);
Nguyn hm trong : stdio.h .
Trong fp l con tr tp.
Cng dng :
Hm dng kim tra cui tp. Hm cho gi tr khc 0 nu gp cui tp khi c, tri
li hm cho gi tr 0.
6.4.5. Truy nhp ngu nhin - cc hm di chuyn con tr ch v :
a. Chuyn con tr ch v v u tp - Hm rewind :
Cu trc ng php :
void rewind(FILE *fp);
Nguyn hm trong : stdio.h .
Trong fp l con tr tp.
Cng dng :
Chuyn con tr ch v ca tp fp v u tp. Khi vic nhp xut trn tp fp c
thc hin t u.
V d :
rewind(f);
b. Chuyn con tr ch v tr cn thit - Hm fseek :
Cu trc ng php :
int fseek(FILE *fp, long sb, int xp);
Nguyn hm trong : stdio.h .
Trong
fp l con tr tp.
sb l s byte cn di chuyn.
xp cho bit v tr xut pht m vic dch chuyn c bt u t .
xp c th nhn cc gi tr sau :
71

xp=SEEK_SET hay 0 : Xut pht t u tp.


xp=SEEK_CUR hay 1: Xut pht t v tr hin ti ca con tr ch v.
xp=SEEK_END hay 2 : Xut pht t cui tp.
Cng dng :
Chuyn con tr ch v ca tp fp v v tr xc nh bi xp qua mt s byte xc nh
bng gi tr tuyt i ca sb. Chiu di chuyn l v cui tp nu sb dng, tri li n s di
chuyn v u tp. Khi thnh cng, hm tr v gi tr 0. Khi c li hm tr v gi tr khc
khng.

Ch :
Khng nn dng fseek trn tp tin vn bn, do s chuyn i k t s lm cho vic
nh v thiu chnh xc.
V d :
fseek(stream, SEEK_SET, 0);
c. V tr hin ti ca con tr ch v - Hm ftell :
Cu trc ng php :
int ftell(FILE *fp);
Nguyn hm trong : stdio.h .
Trong
fp l con tr tp.
Cng dng :
Hm cho bit v tr hin ti ca con tr ch v (byte th my trn tp fp) khi thnh
cng. S th t tnh t 0. Tri li hm cho gi tr -1L.
V d :
Sau lnh

fseek(fp,0,SEEK_END);

ftell(fp) cho gi tr 3.
Sau lnh

fseek(fp,-1,SEEK_END);

ftell(fp) cho gi tr 2.
6.4.6. Ghi cc mu tin ln tp - hm fwrite :
Cu trc ng php ca hm :
int fwrite(void *ptr, int size, int n, FILE *fp);
Nguyn hm trong : stdio.h .
Trong :
ptr l con tr tr ti vng nh cha d liu cn ghi.
size l kch thc ca mu tin theo byte
72

l s mu tin cn ghi

fp

l con tr tp

Cng dng :
Hm ghi n mu tin kch thc size byte t vng nh ptr ln tp fp.
Hm s tr v mt gi tr bng s mu tin thc s ghi c.
V d :
#include "stdio.h"
struct mystruct
{
int i;
char ch;
};
main()
{
FILE *stream;
struct mystruct s;
stream = fopen("TEST.TXT", "wb") /* M tp TEST.TXT */
s.i = 0;
s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* Vit cu trc vo tp */
fclose(stream); /* ng tp */
return 0;
}
6.4.7. c cc mu tin t tp - hm fread :
Cu trc ng php ca hm :
int fread(void *ptr, int size, int n, FILE *fp);
Nguyn hm trong : stdio.h .
Trong :
ptr l con tr tr ti vng nh cha d liu cn ghi.
size l kch thc ca mu tin theo byte
n

l s mu tin cn ghi

fp

l con tr tp

Cng dng :
Hm c n mu tin kch thc size byte t tp fp ln ln vng nh ptr.
73

Hm s tr v mt gi tr bng s mu tin thc s c c.


V d :
#include "string.h"
#include "stdio.h"
main()
{
FILE *stream;
char msg[] = "Kim tra";
char buf[20];
stream = fopen("DUMMY.FIL", "w+");
/* Vit vi d liu ln tp */
fwrite(msg, strlen(msg)+1, 1, stream);
/* Tm im u ca file */
fseek(stream, SEEK_SET, 0);
/* c s liu v hin th */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
fclose(stream);
return 0;
}
6.4.8. Nhp xut k t :
a. Cc hm putc v fputc :
Cu trc ng php :
int putc(int ch, FILE *fp);
int fputc(int ch, FILE *fp);
Nguyn hm trong : stdio.h .
Trong :
ch l mt gi tr nguyn
fp l mt con tr tp.
Cng dng :
Hm ghi ln tp fp mt k t c m bng
m=ch % 256.
ch c xem l mt gi tr nguyn khng du. Nu thnh cng hm cho m k t
c ghi, tri li cho EOF
V d :
74

#include "stdio.h"
main()
{
char msg[] = "Hello world\n";
int i = 0;
while (msg[i])
putc(msg[i++], stdout); /* stdout thit b ra chun - Mn hnh*/
return 0;
}
b. Cc hm getc v fgettc :
Cu trc ng php :
int gretc(FILE *fp);
int fputc(FILE *fp);
Nguyn hm trong : stdio.h .
Trong :
fp l mt con tr tp.
Cng dng :
Hm c mt k t t tp fp. Nu thnh cng hm s cho m c c ( c gi tr t 0
n 255). Nu gp cui tp hay c li hm s tr v EOF.
Trong kiu vn bn, hm c mt lt c hai m 13, 10 v tr v gi tr 10. Khi gp
m 26 hm s tr v EOF.
V d :
#include "string.h"
#include "stdio.h"
#include "conio.h"
main()
{
FILE *stream;
char string[] = "Kiem tra";
char ch;
/* M tp cp nht*/
stream = fopen("DUMMY.FIL", "w+");
/*Vit mt xu k t vo tp */
fwrite(string, strlen(string), 1, stream);
/* Tm v tr u ca tp */
75

fseek(stream, 0, SEEK_SET);
do
{
/* c mt k t t tp */
ch = fgetc(stream);
/* Hin th k t */
putch(ch);
} while (ch != EOF);
fclose(stream);
return 0;
}
6.2.9. Xo tp - hm unlink:
Cu trc ng php :
int unlink(const char *tn_tp)
Nguyn hm trong : dos.h, io.h, stdio.h .
Trong
tn_tp l tn ca tp cn xo.
Cng dng :
Dng xo mt tp trn a. Nu thnh cng, hm cho gi tr 0, tri li hm cho gi
tr EOF.
V d :
#include <stdio.h>
#include <io.h>
int main(void)
{
FILE *fp = fopen("junk.jnk","w");
int status;
fprintf(fp,"junk");
status = access("junk.jnk",0);
if (status == 0)
printf("Tp tn ti\n");
else
printf("Tp khng tn ti\n");
fclose(fp);
unlink("junk.jnk");
76

status = access("junk.jnk",0);
if (status == 0)
printf("Tp tn ti\n");
else
printf("Tp khng tn ti\n");
return 0;
}
6.5. Bi tp p dng
Xy dng cc chng trnh cho trong chng 5 sao cho d liu c ghi v file.

77

CHNG 7. HO
Chng ny s gii thiu cc hm v th tc khi ng h ho, v cc ng v
hnh c bn nh hnh trn, cung elip, hnh qut, ng gy khc, a gic, ng thng, hnh
ch nht, hnh hp ch nht....
Cc hm v th tc ho c khai bo trong file graphics.h.
7.1. Gii thiu chung
Mc ch ca vic khi ng h thng ho l xc nh thit b ho (mn hnh)
v mode ho s s dng trong chng trnh. lm cng vic ny, ta c hm sau :
void initgraph(int *graphdriver,int graphmode,char *driverpath);
Trong :

driverpath l xu k t ch ng dn n th mc cha cc tp tin iu khin

ho.

graphdriver cho bit mn hnh ho s dng trong chng trnh.

graphmode cho bit mode ho s dng trong chng trnh.

Bng di y cho cc gi tr kh d ca graphdriver v graphmode :


graphdriver

graphmode

phn gii

DETECT (0)
CGA (1)

CGAC0 (0)

320x200

CGAC1 (1)

320x200

CGAC2 (2)

320x200

CGAC3 (3)

320x200

CGAHi (4)

640x200

MCGA0 (0)

320x200

MCGA1 (1)

320x200

MCGA2 (2)

320x200

MCGA3 (3)

320x200

MCGAMed (4)

640x200

MCGAHi (5)

640x480

EGAL0 (0)

640x200

EGAHi (1)

640x350

EGA64LO (0)

640x200

EGA64Hi (1)

640x350

EGAMONO (5)

EGAMONOHi (0)

640x350

VGA (9)

VGALO (0)

640x200

MCGA (2)

EGA (3)

EGA64 (4)

78

VGAMED (1)

640x350

VGAHI (2)

640x480

HERCMONO (7)

HERCMONOHI

720x348

ATT400 (8)

ATT400C0 (0)

320x200

ATT400C1 (1)

320x200

ATT400C2 (2)

320x200

ATT400C3 (3)

320x200

ATT400MED (4)

640x400

ATT400HI (5)

640x400

PC3270 (10)

PC3270HI (0)

720x350

IBM8514 (6)

PC3270LO (0)

640x480 256 mu

PC3270HI (1)

1024x768 256 mu

Ch :

Bng trn cho ta cc hng v gi tr ca chng m cc bin graphdtriver v

graphmode c th nhn. Chng hn hng DETECT c gi tr 0, hng VGA c gi


tr 9, hng VGALO c gi tr 0 vv...
Khi lp trnh ta c th thay th vo v tr tng ng ca chng trong hm tn
hng hoc gi tr ca hng .
V d :
Gi s my tnh c mn hnh VGA, cc tp tin ho cha trong th mc C:\TC
\BGI, khi ta khi ng h thng ho nh sau :
#include "graphics.h"
main()
{
int mh=VGA,mode=VGAHI; /*Hoc mh=9,mode=2*/
initgraph(&mh,&mode,"C:\\TC\\BGI");
/* V k t \ trong C l k t c bit nn ta phi gp i n */
}

Bng trn cn cho thy phn gii cn ph thuc c vo mn hnh v mode.

V d nh trong mn hnh EGA nu dng EGALo th phn gii l 640x200 (


Hm getmaxx() cho gi tr cc i ca s im theo chiu ngang ca mn hnh.
Vi mn hnh EGA trn : 639, Hm getmaxy() cho gi tr cc i ca s im theo
chiu dc ca mn hnh. Vi mn hnh EGA trn : 199 ).

Nu khng bit chnh xc kiu mn hnh ang s dng th ta gn cho bin

graphdriver bng DETECT hay gi tr 0. Khi , kt qu ca initgraph s l :


79

Kiu mn hnh ang s dng c pht hin, gi tr ca n c gn cho bin


graphdriver.
Mode ho phn gii cao nht ng vi mn hnh ang s dng cng
c pht hin v tr s ca n c gn cho bin graphmode.
Nh vy dng hng s DETECT chng nhng c th khi ng c h thng
ho vi mn hnh hin c theo mode c phn gii cao nht m cn gip
ta xc nh kiu mn hnh ang s dng.
V d :
Chng trnh di y xc nh kiu mn hnh ang s dng :
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
printf("\n Gia tri so cua man hinh la : %d",mh);
printf("\n Gia tri so mode do hoa la : %d",mode);
closegraph();
}

Nu chui dng xc nh driverpath l chui rng th chng trnh dch s

tm kim cc file iu khin ho trn th mc ch ( Th mc hin thi ).


7.2. Cc hm t mu, v im, t mu
7.2.1. Mu v mu :

t mu nn :
t mu cho nn ta dng th tc sau :
void setbkcolor(int mu);

t mu ng v :
t mu v ng ta dng th tc sau :
void setcolor(int mu);

t mu (kiu) t v mu t :
t mu (kiu) t v mu t ta dng th tc sau :
void setfillstyle(int mu, int mu);

Trong c ba trng hp mu xc nh m ca mu.


Cc gi tr kh d ca mu cho bi bng di y :
80

Bng cc gi tr kh d ca mu
Tn hng

Gi tr s

Mu hin th

BLACK

en

BLUE

Xanh da tri

GREEN

Xanh l cy

CYAN

Xanh l

RED

MAGENTA

Tm

BROWN

Nu

LIGHTGRAY

Xm nht

DARKGRAY

Xm m

LIGHTBLUE

Xanh xa tri nht

LIGHTGREEN

10

Xanh l cy nht

LIGHTCYAN

11

Xanh l nht

LIGHTRED

12

nht

LIGHTMAGENTA

13

Tm nht

YELLOW

14

Vng

WHITE

16

Trng

Cc gi tr kh d ca mu cho bi bng di y :
Bng cc gi tr kh d ca mu
Tn hng

Gi tr s

Kiu mu t

EMPTY_FILL

T bng mu nn

SOLID_FILL

T bng ng lin nt

LINE_FILL

T bng ng --------

LTSLASH_FILL

T bng ///

SLASH_FILL

T bng /// in m

BKSLASH_FILL

T bng \\\ in m

LTBKSLASH_FILL

T bng \\\

HATCH_FILL

T bng ng gch bng nht

XHATCH_FILL

T bng ng gch bng ch thp

INTERLEAVE_FILL

T bng ng t qung

WIDE_DOT_FILL

10

T bng du chm tha

CLOSE_DOT_FILL

11

T bng du chm mau

Chn gii mu :
81

thay i gii mu c nh ngha trong bng trn, ta s dng hm :


void setpalete(int s_th_t_mu, int mu );
V d :
Cu lnh :
setpalete(0,lightcyan);
bin mu u tin trong bng mu thnh mu xanh l nht. Cc mu khc khng b nh
hng.

Ly gii mu hin thi :


+ Hm getcolor tr v mu xc nh bng th tc setcolor ngay trc
n.
+ Hm getbkcolor tr v mu xc nh bng hm setbkcolor ngay trc
n.

7.2.2. V v t mu :
C th chia cc ng v hnh thnh bn nhm chnh :

Cung trn v hnh trn.

ng gp khc v a gic.

ng thng.

Hnh ch nht.

7.2.2.1. Cung trn v ng trn :


Nhm ny bao gm : Cung trn, ng trn, cung elip v hnh qut.

Cung trn :
v mt cung trn ta dng hm :
void arc(int x, int y, int gd, int gc, int r);

Trong :
(x,y) l to tm cung trn.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
r l bn knh cung trn .
V d :
V mt cung trn c tm ti (100,50), gc u l 0, gc cui l 180, bn knh 30.
arc(100,50,0,180,30);

ng trn :
v ng trn ta dng hm :
void circle(int x, int y, int r);
82

Trong :
(x,y) l to tm cung trn.
r l bn knh ng trn.
V d :
V mt ng trn c tm ti (100,50) v bn knh 30.
circle(100,50,30);

Cung elip
v mt cung elip ta dng hm :
void ellipse(int x, int y, int gd, int gc, int xr, int yr);

Trong :
(x,y) l to tm cung elip.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
xr l bn trc nm ngang.
yr l bn trc thng ng.
V d :
V mt cung elip c tm ti (100,50), gc u l 0, gc cui l 180, bn trc ngang 30,
bn trc ng l 20.
ellipse(100,50,0,180,30,20);

Hnh qut :
v v t mu mt hnh qut ta dng hm :
void pieslice(int x, int y, int gd, int gc, int r);

Trong :
(x,y) l to tm hnh qut.
gd l gc u hnh qut (0 n 360 ).
gc l gc cui hnh qut (gd n 360 ).
r l bn knh hnh qut .
V d :
Chng trnh di y s v mt cung trn gc phn t th nht, mt cung elip
gc phn t th ba, mt ng trn v mt hnh qut qut t 90 n 360 .
# include "graphics.h"
#include "stdio.h"
#include "conio.h"
main()
{
83

int md=0,mode;
initgraph(&md,&mode,"C:\\TC\\BGI");
setbkcolor(BLUE);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,RED);;
arc(160,50,0,90,45);
circle(160,150,45);
pieslice(480,150,90,360,45);
getch();
closegraph();
}
7.2.3. V ng gp khc v a gic :

V ng gp khc :
Mun v ng gp khc i qua n im : (x1,y1), (x2,y2), ...., (xn,yn) th trc ht ta

phi gn cc to (xi,yi) cho mt mng a kiu int no theo nguyn tc sau :


To x1 gn cho a[0]
To y1 gn cho a[1]
To x2 gn cho a[2]
To y2 gn cho a[3]
....
To xn gn cho a[2n-2]
To yn gn cho a[2n-1]
Sau gi hm :
drawpoly(n,a);
Nu im cui cng (xn,yn) trng vi im u (x1,y1) th ta nhn c mt ng
gp khc khp kn.

T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);

s v v t mu mt a gic c nh l cc im (x1,y1), (x2,y2), ...., (xn,yn)


V d :
V mt ng gp khc v hai ng tam gic.
#include "graphics.h"
#include "stdio.h"
#include "conio.h"
84

int poly1[]={5,200,190,5,100,300};
int poly2[]={205,200,390,5,300,300};
int poly3[]={405,200,590,5,500,300,405,200};
main()
{
int md=0,mode;
initgraph(&md,&mode,"C:\\TC\\BGI");
setbkcolor(CYAN);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,MAGENTA);
drawpoly(3,poly1);
fillpoly(3,poly2);
fillpoly(4,poly3);
getch();
closegraph();
}

V ng thng :
v ng thng ni hai im bt k c to (x1,y1) v (x2,y2) ta s dng hm

sau :
void line(int x1, int y1, int x2, int y2);
Con chy ho gi nguyn v tr.
v ng thng ni t im con chy ho n mt im bt c to (x,y) ta s
dng hm sau :
void lineto(int x, int y);
Con chy s chuyn n v tr (x,y).
v mt ng thng t v tr con chy hin ti ( gi s l im x,y ) n im c to
(x+dx,y+dy) ta s dng hm sau :
void linerel(int dx, int dy);
Con chy s chuyn n v tr (x+dx,y+dy).

Di chuyn con chy ho :


di chuyn con chy n v tr (x,y), ta s dng hm sau :
void moveto(int x, int y);

Chn kiu ng :
Hm

void setlinestyle(int kiu_ng, int mu, int _dy);


85

tc ng n nt v ca cc th tc v ng line, lineto,linerel , circle, rectangle (hm v


hnh ch nht, ta s hc trong phn v min di).
Hm ny s cho php ta xc nh ba yu t khi v ng thng, l : Kiu ng, b
dy v mu t to.
Dng ng do tham s kiu_ngxc nh. Bng di y cho cc gi tr kh d
ca kiu_ng :
Tn hng

Gi tr s

Kiu ng

SOLID_LINE

Nt lin

DOTTED_LINE

Nt chm

CENTER_LINE

Nt chm gch

DASHED_LINE

Nt gch

USERBIT_LINE

Mu t to

B dy ca ng v do tham s _dy xc nh,. bng di y cho cc gi tr kh


d ca _dy :
Tn hng

Gi tr s

B dy

NORM_WIDTH

B dy bnh thng

THICK_WIDTH

B dy gp ba

Mu t to : Nu tham s th nht l USERBIT_LINE th ta c th to ra mu ng


thng bng tham s mu. V d ta xt on chng trnh :
int pattern = 0x1010;
setlinestile(USERBIT_LINE,pattern,NORM_WIDTH);
line(0,0,100,200);
Gi tr ca pattern trong h 16 l 1010, trong h 2 l :
0001 0000 0001 0000
Bit 1 s cho im sng, bit 0 s lm tt im nh.
V d :
Chng trnh v mt ng gp khc bng cc on thng. ng gp khc i qua
cc nh sau :
(20,20),(620,20),(620,180),(20,180) v (320,100)
#include "graphics.h"
#include "stdio.h"
#include "conio.h"
main()
{
int mh=0, mode;
86

initgraph(&mh,&mode,"C:\\TC\\BGI");
setbkcolor(BLUE);
setcolor(YELLOW);
setlinestyle(SOLID-LINE,0,THICK_WIDTH);
moveto(320,100); /* con chy v tr ( 320,100 ) */
line(20,20,620,20); /* con chy vn v tr ( 320,100 ) */
linerel(-300,80);
lineto(620,180);
lineto(620,20);
getch();
closegraph();
}
7.2.4. V im, min :

V im :
Hm :
void putpixel(int x, int y, int color);

s t im (x,y) theo mu xc nh bi color.


Hm :
unsigned getpixel(int x, int y);
s tr v s hiu mu ca im nh v tr (x,y).
Ch :
Nu im ny cha c t mu bi cc hm v hoc hm putpixel (m ch mi c
to mu nn bi setbkcolor) th hm cho gi tr 0.

T min :
t mu cho mt min no trn mn hnh, ta dng hm sau :
void floodfill(int x, int y, int border);

y :
(x,y) l to ca mt im no gi l im gieo.
Tham s border cha m ca mu.
S hot ng ca hm floodfill ph thuc vo gi tr ca x,y,border v trng thi mn hnh.
+ Khi trn mn hnh c mt ng cong khp kn hoc ng gp khc khp kn m m mu
ca n bng gi tr ca border th :
- Nu im gieo (x,y) nm trong min ny th min gii hn pha trong ng s c
t mu.
- Nu im gieo (x,y) nm ngoi min ny th min pha ngoi ng s c t mu.
87

+ Trong trng hp khi trn mn hnh khng c ng cong no nh trn th c mn hnh s


c t mu.
V d :
V mt ng trn mu trn mn hnh mu xanh. To (x,y) ca im gieo c
np t bn phm. Tu thuc gi tr c th ca x,y chng trnh s t mu vng cho hnh trn
hoc phn mn hnh bn ngoi hnh trn.
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=mode=0, x, y;
printf("\nVao toa do x,y:");
scanf("%d%d",&x,&y);
initgraph(&mh,&mode,"");
if (graphresult != grOk) exit(1);
setbkcolor(BLUE);
setcolor(RED);
setfillstyle(11,YELLOW);
circle(320,100,50);
moveto(1,150);
floodfill(x,y,RED);
closegraph();
}
7.3. Cc hm v hnh c bn
7.3.1. Hnh ch nht :

Hm :
void rectangle(int x1, int y1, int x2, int y2);

s v mt hnh ch nht c cc cnh song song vi cc cnh ca mn hnh. To nh tri


trn ca hnh ch nht l (x1,y1) v to nh phi di ca hnh ch nht l (x2,y2).

Hm :
void bar(int x1, int y1, int x2, int y2);

s v v t mu mt hnh ch nht. To nh tri trn ca hnh ch nht l (x1,y1) v to


nh phi di ca hnh ch nht l (x2,y2).

88

Hm :
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);

s v mt khi hp ch nht, mt ngoi ca n l hnh ch nht xc nh bi cc to


(x1,y1), (x2,y2). Hnh ch nht ny c t mu thng qua hm setfillstyle . Tham s depth
xc nh s im nh trn b su ca khi 3 chiu. Tham s top c th nhn cc gi tr 1 hay 0
v khi 3 chiu tng ng s c np hoc khng.

top=1

top=0

V d :
Chng trnh di y to nn mt hnh ch nht, mt khi hnh ch nht v mt hnh
hp c np :
#include "graphics.h"
main()
{
int mh=mode=0;
initgraph(&mh,&mode,"");
if (graphresult != grOk) exit(1);
setbkcolor(GREEN);
setcolor(RED);
setfillstyle(CLOSE_DOT_FILL,YELLOW);
rectangle(5,5,300,160);
bar(3,175,300,340);
bar3d(320,100,500,340,100,1);
closegraph();
}
7.3.2. Ca s (Viewport) :

Thit lp viewport :

Viewport l mt vng ch nht trn mn hnh ho. thit lp viewport ta dng hm :


void setviewport(int x1, int y1, int x2, int y2, int clip);
trong (x1,y1) l to gc trn bn tri, (x2,y2) l to gc di bn phi. Bn gi tr
ny v th phi tho mn :
89

0 x1 x2
0 y1 y2
Tham s clip c th nhn mt trong hai gi tr :
clip=1 khng cho php v ra ngoi viewport.
clip=0 cho php v ra ngoi viewport.
V d :
setviewport(100,50,200,150,1);
Lp nn mt vng viewport hnh ch nht c to gc tri cao l (100,50) v to gc
phi thp l (200,150) (l to trc khi t viewport).

Ch :
Sau khi lp viewport, ta c h to mi m gc trn bn tri s c to (0,0).

Nhn din viewport hin hnh :

nhn viewport hin thi ta dng hm :


void getviewsetting(struct viewporttype *vp);
y kiu viewporttype c nh ngha nh sau :
struct viewporttype
{
int left,top,right,bottom;
int clip;
};

Xa viewport :
S dng hm :
void clearviewport(void);

Xo mn hnh, a con chy v to (0,0) ca mn hnh :


S dng hm :
void cleardevice(void);

To m dng :
Nh s dng viewport c th vit cc chng trnh ho theo to m dng.

Mun vy ta thit lp viewport v cho clip bng 0 c th v ra ngoi gii hn ca viewport.


Sau y l on chng trnh thc hin cng vic trn :
int xc,yc;
xc=getmaxx()/2;
yc=getmaxy()/2;
90

setviewport(xc,yc,getmaxx(),getmaxy(),0);
Nh th, mn hnh s c chia lm bn phn vi to m dng nh sau :
Phn t tri trn : x m, y m.
x : t -getmaxx()/2 n 0.
y : t -getmaxy()/2 n 0.
Phn t tri di : x m, y dng.
x : t -getmaxx()/2 n 0.
y : t 0 n getmaxy()/2.
Phn t phi trn : x dng, y m.
x : t 0 n getmaxx()/2.
y : t -getmaxy()/2 n 0.
Phn t phi di : x dng, y dng.
x : t 0 n getmaxx()/2.
y : t 0 n getmaxy()/2.
V d :
Chng trnh v th hm sin x trong h trc to m dng. Honh x ly cc
gi tr t -4 n 4. Trong chng trnh c s dng hai hm mi l settextjustify v
outtextxy ta s cp ngay trong phn sau.
#include "graphics.h"
#include "conio.h"
#include "math.h"
#define TYLEX 20
#define TYLEY 60
main()
{
int mh=mode=DETECT;
int x,y,i;
initgraph(mh,mode,"");
if (graphresult!=grOK ) exit(1);
setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);
setbkcolor(BLUE);
setcolor(YELLOW);
line(-getmaxx()/2,0,getmaxx()/2,0);
line(0,-getmaxy()/2,0,getmaxy()/2,0);
settextjustify(1,1);
91

setcolor(WHITE);
outtextxy(0,0,"(0,0)");
for (i=-400;i<=400;++i)
{
x=floor(2*M_PI*i*TYLEX/200);
y=floor(sin(2*M_PI*i/200)*TYLEY);
putpixel(x,y,WHITE);
}
getch();
closegraph();
}
7.3.3. X l vn bn trn mn hnh ho
Hin th vn bn trn mn hnh ho :
Hm :
void outtext(char *s);
cho hin chui k t ( do con tr s tr ti ) ti v tr con tr ho hin thi.
Hm :
void outtextxy(int x, int y,char *s);
cho hin chui k t ( do con tr s tr ti ) ti v tr (x,y).
V d :
Hai cch vit di y :
outtextxy(50,50," Say HELLO");
v
moveto(50,50);
outtext(" Say HELLO");
cho cng kt qu.

S dng cc Fonts ch :
Cc Fonts ch nm trong cc tp tin *.CHR trn a. Cc Fonts ny cho cc kch thc

v kiu ch khc nhau, chng s c hin th ln mn hnh bng cc hm outtext v


outtextxy. chn v np Fonts ta dng hm :
void settextstyle(int font, int direction, int charsize);
Tham s font chn kiu ch v nhn mt trong cc hng sau :
DEFAULT_FONT=0
TRIPLEX_FONT=1
SMALL_FONT=2
92

SANS_SERIF_FONT=3
GOTHIC_FONT=4
Tham s derection chn hng ch v nhn mt trong cc hng sau :
HORIZ_DIR=0

vn bn hin th theo hng nm ngang t tri qua phi.

VERT_DIR=1

vn bn hin th theo hng thng ng t di ln trn.

Tham s charsize l h s phng to ca k t v c gi tr trong khong t 1 n 10.


Khi charsize=1, font hin th trong hnh ch nht 8*8 pixel.
Khi charsize=2 font hin th trong hnh ch nht 16*16 pixel.
............
Khi charsize=10, font hin th trong hnh ch nht 80*80 pixel.
Cc gi tr do settextstyle lp ra s gi nguyn ti khi gi mt settextstyle mi.
V d :
Cc dng lnh :
settextstyle(3,VERT_DIR,2);
outtextxy(30,30,"GODS TRUST YOU");
s hin th ti v tr (30,30) dng ch GODS TRUST YOU theo chiu t di ln trn, font
ch chn l SANS_SERIF_FONT v c ch l 2.

t v tr hin th ca cc xu k t cho bi outtext v outtextxy :


Hm settextjustify cho php ch nh ra ni hin th vn bn ca outtext theo quan h

vi v tr hin ti ca con chy v ca outtextxy theo quan h vi to (x,y);


Hm ny c dng sau :
void settextjustify(int horiz, int vert);
Tham s horiz c th l mt trong cc hng s sau :
LEFT_TEXT=0

( Vn bn xut hin bn phi con chy).

CENTER_TEXT

( Chnh tm vn bn theo v tr con chy).

RIGHT_TEXT

(Vn bn xut hin bn tri con chy).

Tham s vert c th l mt trong cc hng s sau :


BOTTOM_TEXT=0 ( Vn bn xut hin pha trn con chy).
CENTER_TEXT=1 ( Chnh tm vn bn theo v tr con chy).
TOP_TEXT=2

( Vn bn xut hin pha di con chy).

V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm di ch B.

B rng v chiu cao vn bn :


93

Chiu cao :
Hm :
textheight(char *s);
cho chiu cao ( tnh bng pixel ) ca chui do con tr s tr ti.
V d 1 :
Vi font bit map v h s phng i l 1 th textheight("A") ch gi tr l 8.
V d 2 :
#include "stdio.h"
#include "graphics.h"
main()
{
int mh=mode=DETECT, y,size;
initgraph(mh,mode,"C:\\TC\\BGI");
y=10;
settextjustify(0,0);
for (size=1;size<5;++size)
{
settextstyle(0,0,size);
outtextxy(0,y,"SACRIFICE");
y+=textheight("SACRIFICE")+10;
}
getch();
closegraph();
}
B rng :
Hm :
textwidth(char *s);
cho b rng chui ( tnh theo pixel ) m con tr s tr ti da trn chiu di chui, kch thc
font ch, h s phng i.
Bi tp:
1. V v t mu cc hnh c bn
2. V hnh trn ri cho chy i chy li trn mn hnh
Mt s thi mu
1
Cu 1: Vit chng trnh nhp vo mt dy s gm n phn t. In cc s nhp ra mn hnh
v tnh tng cc s chn trong dy.

94

Cu 2: Vit chng trnh nhp vo mt danh sch gm n sinh vin (c cc thng tin: h tn,
m s, im trung bnh). In danh sch ban u v cc sinh vin c im trung bnh >7 ra mn
hnh.
2
Cu 1: Nhp vo mt ma trn c n hng, m ct. Tnh tng cc phn t trn ng cho chnh.
In kt qu vo file.
Cu 2: Nhp vo mt danh sch gm n nhn vin (c cc thng tin: tn nhn vin, h s
lng, a ch). Tnh lng cho cc nhn vin theo cng thc lng nhn vin=h s lng *
730000. In danh sch cc nhn vin c lng >5 triu vo file v ra mn hnh.
3
Cu 1: Nhp vo mt ma trn vung c n. In ra cc phn t ln nht ca tng hng trong ma
trn.
Cu 2: Nhp vo mt danh sch gm n sinh vin (c cc thng tin: h tn, m s, im trung
bnh). Sp xp danh sch theo h tn v in kt qu ra mn hnh.
4
Cu 1: Nhp vo mt dy s thc c n phn t. Tm phn t ln nht trong dy v v tr ca
n.
Cu 2: Nhp vo mt danh sch gm n sinh vin (c cc thng tin: h tn, m s, im trung
bnh). Tm sinh vin c tn l xyz no , vi xyz l tn bt k nhp vo t bn phm.
5
Cu 1: Tm tt c cc s nguyn t trong on [n, m]. Ghi kt qu tm c vo mt file.
Cu 2: Nhp vo mt danh sch gm n nhn vin (c cc thng tin: tn nhn vin, h s
lng, a ch). Tnh lng cho cc nhn vin theo cng thc lng nhn vin=h s lng *
730000. In danh sch cc nhn vin c lng mt nm >50 triu vo file v ra mn hnh.

95

TI LIU THAM KHO


1. Cc ti liu ting Vit :
1.1. Ng Trung Vit - Ngn ng lp trnh C v C++ - Bi ging- Bi tp - Li gii mu
NXB giao thng vn ti 1995
1.2. Vin tin hc - Ngn ng lp trnh C
H ni 1990
1.3. L Vn Doanh - 101 thut ton v chng trnh bng ngn ng C
2. Cc ti liu ting Anh :
2.1. B. Kernighan and D. Ritchie - The C programming language
Prentice Hall 1989
2.2. Programmer's guide Borland C++ Version 4.0
Borland International, Inc 1993
2.3. Bile - Nabaiyoti - TURBO C++
The Waite Group's UNIX 1991

96

You might also like