Professional Documents
Culture Documents
TRNG I HC HNG HI
B MN: KHOA HOC MAY TI NH
KHOA: CNG NGH THNG TIN
BI GING
K THUT LP TRNH C
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
Loi hc phn: 2
Khoa ph trch: CNTT
Tng s TC: 4
TS
2
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
21
12
10
KT
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
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
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 : _
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
- 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 -
{
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
Hm main().
).
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
M ASCII
048
049
050
065
066
097
098
S k t
Kch thc
-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
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
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
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 )
ngha
V d
a>b
>
So snh ln hn
>=
<
So snh nh hn
<=
==
!=
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
15
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
x=n++
Php ton
Trnh t kt hp
() [] ->
* ( php nhn ) / %
+-
<< >>
== !=
&
10
11
&&
12
||
13
?:
14
15
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 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 :
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
#define sl 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
3*8*8+4*8+5=229
Hng int h 16:
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
V d :
nh nghi hng k t kt c gi tr l 97
#define kt 'a'
K t
'\''
'
'\"'
"
'\\'
'\n'
\n (chuyn dng )
'\0'
\0 ( null )
'\t'
Tab
'\b'
Backspace
'\r'
CR ( v u dng )
'\f'
LF ( sang trang )
int a,b,c;
long dai,mn;
char kt1,kt2;
float x,y
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
(int)a
sqrt((double)n)
(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);
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:
putchar(ch);
int c;
c = getchar();
putchar(c);
3.2.2. Hm putch():
Cch dng:
putch(ch);
li li mt bc; \t
du tab
Ti v tr ca n ta c th t du *,
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
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
ngha
xc m.
i c xem l float hoc double v c chuyn sang dng thp phn c
Hin th
\'
'
\"
"
\\
Cc v d :
1
n=8;
25.500000
-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 *
bin = getchar();
27
int c;
c = getchar();
getch();
V d:
c = getch();
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
ld
lo
lx
f hay e
lf hay le
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 */
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
}
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
}
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
/* Kt thc hm main*/
40
nu n=0
42
nu n>0
n!=n*(n-1)!
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
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
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
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
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
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
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 */
ngha
"r" "rt"
"w" "wt"
"a" "at"
"rb"
li.
"wb"
"ab"
"r+" "r+t"
"w+" "w+t"
"a+" "a+t"
"r+b"
"w+b"
"a+b"
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
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
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
#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 :
ho.
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 :
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);
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
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
XHATCH_FILL
INTERLEAVE_FILL
T bng ng t qung
WIDE_DOT_FILL
10
CLOSE_DOT_FILL
11
Chn gii mu :
81
7.2.2. V v t mu :
C th chia cc ng v hnh thnh bn nhm chnh :
ng gp khc v a gic.
ng thng.
Hnh ch nht.
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
T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);
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).
Chn kiu ng :
Hm
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
Gi tr s
B dy
NORM_WIDTH
B dy bnh thng
THICK_WIDTH
B dy gp ba
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);
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
Hm :
void rectangle(int x1, int y1, int x2, int y2);
Hm :
void bar(int x1, int y1, int x2, int y2);
88
Hm :
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);
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 :
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).
Xa viewport :
S dng hm :
void clearviewport(void);
To m dng :
Nh s dng viewport c th vit cc chng trnh ho theo to m dng.
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
SANS_SERIF_FONT=3
GOTHIC_FONT=4
Tham s derection chn hng ch v nhn mt trong cc hng sau :
HORIZ_DIR=0
VERT_DIR=1
CENTER_TEXT
RIGHT_TEXT
V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm di ch B.
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
96