bÀi giẢng -...
TRANSCRIPT
-
B GIAO THNG VN TI
TRNG I HC HNG HI
B MN: KHOA HOC MAY TINH
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
-
2
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
-
3
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
-
4
11.6. Tn hc phn: K thut lp trnh (C) Loi hc phn: 2
B mn ph trch ging dy: Khoa hc My tnh Khoa ph trch: CNTT
M hc phn: 17206 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
PHN PHI S TIT
TS LT TH/Xemina BT KT
Chng 1: Gii thiu 2 2 0
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 8 4 4
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 13 7 5 1
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 14 8 6
4.1. Khi nim v chng trnh con
4.2. Hm trong C
-
5
TN CHNG MC
PHN PHI S TIT
TS LT TH/Xemina BT KT
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 21 12 8 1
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 10 5 4 1
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 4 3
7.1. Gii thiu chung
7.2. Cc hm t mu, v im, t mu
7.3. Cc hm v hnh c bn
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)
http://www.codeproject.com/http://www.cprogramming.com/
-
6
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
-
7
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 Shift-
Delete (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
-
8
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
-
9
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 ax2
+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 ...
-
10
- 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 delta x1 _step GAMA
Cc tn sai: 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 // khai bo tp nguyn mu c s dng hm printf, scanf
void main()
-
11
{
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
cc tn gi cn cn xc nh kiu ca n.V d gii mt phng trnh bc 2 dng: ax2 + 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
-
12
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
0 048
1 049
2 050
A 065
B 066
a 097
b 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;
-
13
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 :
Kiu Phm vi biu din S ch s
c ngha
Kch
thc
float 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
-
14
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 a/b
( Chia s nguyn s cht phn thp phn )
% Php ly phn d 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.
-
15
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
> So snh ln hn a>b
4>5 c gi tr 0
>= So snh ln hn hoc bng a>=b
6>=2 c gi tr 1
< So snh nh hn a
-
16
0 0 0 0
Cc php quan h c s u tin nh hn so vi ! nhng ln hn so vi && v ||, v vy
biu thc nh: (ad) c th vit li thnh: ad
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
1 () [] -> Tri qua phi
2 ! ~ & * - ++ -- (type ) sizeof Phi qua tri
3 * ( php nhn ) / % Tri qua phi
4 + - Tri qua phi
5 > Tri qua phi
6 < >= Tri qua phi
7 == != Tri qua phi
8 & Tri qua phi
9 ^ Tri qua phi
10 | Tri qua phi
11 && Tri qua phi
12 || Tri qua phi
-
17
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.
-
18
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: #define h8 0345 nh nghi hng int h 8 c gi tr l
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
-
19
V d : #define kt 'a' nh nghi hng k t kt c gi tr l 97
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
-
20
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 :
-
21
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:
-
22
(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.
pow(x, y) : hm m, tr li gi tr x ly tha y (xy).
exp(x) : hm m, tr li gi tr e m x (ex).
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,
-
23
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;
-
24
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.
-
25
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 t
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
-
26
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 n Du - Kt qu a ra
-2503 8 c -2503
-2503 08 c -2503
-2503 8 khng -2503
-2503 08 khng 000-2503
"abcdef" 8 khng abcdef
"abcdef" 08 c abcdef
"abcdef" 08 khng 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 n m Du - Kt qu a ra di trng ra
-435.645 10 2 c -435.65 7
-435.645 10 0 c -436 4
-435.645 8 vng c -435.645000 11
"alphabeta" 8 3 vng alp 3
"alphabeta" vng vng vng alphabeta 9
"alpha" 8 6 c alpha 5
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
D i c chuyn sang s nguyn h thp phn
O i c chuyn sang h tm khng du ( khng c s 0 ng trc )
-
27
x i c chuyn sang h mi su khng du ( khng c 0x ng trc )
u i c chuyn sang h thp phn khng du
c i c coi l mt k t ring bit
s
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.
e 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.
f
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.
g 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
2 n=8;
float x=25.5, y=-47.335
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 *
25.500000
-47.34
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();
-
28
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
-
29
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
d 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
o 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
x 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
s Vo mt gi tr kiu double, i tng ng l con tr kiu char, trng vo phi
-
30
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
#include
#include
void main()
{
int a, b;
float kq;
printf("\nNhap so thu nhat a= ");
-
31
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 )
khi lnh 1;
/* Dng mt */
if ( biu thc )
khi lnh 1;
else
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=");
-
32
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*/
-
33
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;
-
34
printf("\n Nhap a, b, c:");
scanf("%f%f%f,&a&b&c);
d=b*b-4*a*c;
if (d
-
35
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);
-
36
}
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.
-
37
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 ()
{
-
38
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
-
39
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 :
-
40
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
-
41
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.
-
42
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
-
43
n!=n*(n-1)! nu n>0
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 (**)
-
44
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
}
-
45
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 ab)
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()
-
46
{
int a;
clrscr();
printf("n=");
scanf("%d",&a);
prind(a);
getch();
}
void prind(int n)
{
int i;
if (n
-
47
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));
-
48
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()
-
49
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
-
50
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
#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 ( )
{
-
51
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
#include
#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>
-
52
#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 ++ )
-
53
{
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
#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 ++ )
-
54
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 = */
p = a ; /* php gn sai */
file:///E:/X15/Document/Giao%20trinh%20-%20Bai%20giang%20Khoa%20Cong%20nghe%20Thong%20tin/Giao%20trinh%20-%20Bai%20giang%20Khoa%20Cong%20nghe%20Thong%20tin/To%20mon%20Khoa%20hoc%20May%20tinh/utf-8''giaotrinh/giaotrinh/chuong5_c.htm%23chuong5file:///E:/X15/Document/Giao%20trinh%20-%20Bai%20giang%20Khoa%20Cong%20nghe%20Thong%20tin/Giao%20trinh%20-%20Bai%20giang%20Khoa%20Cong%20nghe%20Thong%20tin/To%20mon%20Khoa%20hoc%20May%20tinh/utf-8''giaotrinh/giaotrinh/chuong5_c.htm%23chuong5
-
55
* 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.