Professional Documents
Culture Documents
C - Nguyễn Hữu Tuấn PDF
C - Nguyễn Hữu Tuấn PDF
H ni thng 11 nm 1997
Nguyn Hu Tun
Ch-ng 1
cc khi nim c bn
Ch :
Khi vit ch-ng trnh, ta khng -c s dng bt k k t no khc ngoi cc k t trn.
V d nh- khi lp ch-ng trnh gii ph-ng 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.
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 d-i 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
2
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 ...
- T kho phi -c vit bng ch th-ng, v d : vit t kho khai bo kiu nguyn l
int ch khng phi l INT.
1.3. Tn :
Tn l mt khi nim rt quan trng, n dng xc nh cc i l-ng khc nhau trong
mt ch-ng 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 th-ng v ch hoa l khc nhau v d tn AB khc vi ab.
trong C, ta th-ng dng ch hoa t tn cho cc hng v dng ch th-ng t tn cho hu
3
ht cho cc i l-ng khc nh- bin, bin mng, hm, cu trc. Tuy nhin y khng phi l iu
bt buc.
V d sau minh ho s khc nhau gia hai kiu d liu trn : Xt on ch-ng trnh sau :
char ch1;
unsigned char ch2;
......
ch1=200; ch2=200;
Khi thc cht :
ch1=-56;
ch2=200;
Nh-ng c ch1 v ch2 u biu din cng mt k t c m 200.
4
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 d-i ( 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 nh-ng khng in ra -c ( bng cc lnh DOS ).
Ch :
Kiu k t cng c th xem l mt dng ca kiu nguyn.
Gii thch :
5
My tnh c th l-u 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 t-ng t.
1.6. Hng :
Hng l cc i l-ng m gi tr ca n khng thay i trong qu trnh tnh ton.
1.6.1. Tn hng :
Nguyn tc t tn hng ta xem xt trong mc 1.3.
t tn mt hng, ta dng dng lnh sau :
6
#define tn hng gi tr
V d :
#define MAX 1000
Lc ny, tt c cc tn MAX trong ch-ng trnh xut hin sau ny u -c thay bng
1000. V vy, ta th-ng gi MAX l tn hng, n biu din s 1000.
Mt v d khc :
#define pi 3.141593
t tn cho mt hng float l pi c gi tr l 3.141593.
V d :
Ch :
Cn phn bit hai hng 5056 v 5056.0 : y 5056 l s nguyn cn 5056.0 l hng
thc.
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
7
1.6.2.3. Hng int h 8 :
Hng int h 8 -c vit theo cch 0c1c2c3.... y ci l mt s nguyn d-ng trong
khong t 1 n 7. Hng int h 8 lun lun nhn gi tr d-ng.
V d :
#define h8 0345 nh nghi hng int h 8 c gi tr l
3*8*8+4*8+5=229
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
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.
1.6.2.5. Hng k t :
Hng k t l mt k t ring bit -c vit trong hai du nhy n, v d 'a'.
8
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
V d :
#define kt 'a' nh nghi hng k t kt c gi tr l 97
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 ( th-ng 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.
1.6.2.5. 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"
9
Xu k t -c l-u tr trong my d-i 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 l-u tr trong 1 byte, cn "a" l
hng xu k t -c l-u tr trong 1 mng hai phn t : phn t th nht cha ch a cn phn t
th hai cha \0.
1.7. Bin :
Mi bin cn phi -c khai bo tr-c khi -a vo s dng. 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
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 t-ng t.
Cc bin kiu char ch cha -c mt k t. l-u 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 tr-c
mi cu lnh khc. Sau y l mt v d v khai bo bin sai :
( Khi nim v hm v cu trc ch-ng trnh s nghin cu sau ny)
main()
{
int a,b,c;
a=2;
10
int d; /* V tr ca khai bo sai */
.....
}
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 t-ng -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
1.8 Mng :
Mi bin ch c th biu din mt gi tr. biu din mt dy s hay mt bng s ta c
th dng nhiu bin nh-ng cch ny khng thun li. Trong tr-ng hp ny ta c khi nim v
mng. Khi nim v mng trong ngn ng C cng ging nh- khi nim v ma trn trong i s
tuyn tnh.
Mng c th -c hiu l mt tp hp nhiu phn t c cng mt kiu gi tr v chung
mt tn. Mi phn t mng biu din -c mt gi tr. C bao nhiu kiu bin th c by nhiu
kiu mng. Mng cn -c khai bo nh r :
Loi mng : int, float, double...
Tn mng.
S chiu v kch th-c mi chiu.
Khi nim v kiu mng v tn mng cng ging nh- khi nim v kiu bin v tn bin. Ta s
gii thch khi nim v s chiu v kch th-c mi chiu thng qua cc v d c th d-i y.
Cc khai bo :
11
int a[10],b[4][2];
float x[5],y[3][3];
s xc nh 4 mng v ngha ca chng nh- sau :
3 X Float 1 5 x[0],x[1],x[2]...x[4]
4 Y Float 2 3x3 y[0][0], y[0][1], y[0][2]
y[1][0], y[1][1], y[1][2]
y[2][0], y[2][1], y[1][2]
Ch :
Cc phn t ca mng -c cp pht cc khong nh lin tip nhau trong b nh. Ni
cch khc, cc phn t ca mng c a ch lin tip nhau.
Trong b nh, cc phn t ca mng hai chiu -c sp xp theo hng.
Ch s mng :
Mt phn t c th ca mng -c xc nh nh cc ch s ca n. Ch s ca mng phi
c gi tr int khng v-t qu kch th-c t-ng ng. S ch s phi bng s chiu ca mng.
Gi s z,b,x,y -c khai bo nh- trn, v gi s i,j l cc bin nguyn trong i=2,
j=1. Khi :
a[j+i-1] l a[2]
b[j+i][2-i] l b[3][0]
y[i][j] l y[2][1]
Ch :
Mng c bao nhiu chiu th ta phi vit n c by nhiu ch s. V th nu ta vit nh-
sau s l sai : y[i] ( V y l mng 2 chiu ) vv..
12
Biu thc dng lm ch s c th thc. Khi phn nguyn ca biu thc thc s l ch
s mng.
V d :
a[2.5] l a[2]
b[1.9] l a[1]
* Khi ch s v-t ra ngoi kch th-c mng, my s vn khng bo li, nh-ng n s truy
cp n mt vng nh bn ngoi mng v c th lm ri lon ch-ng trnh.
Ly a ch mt phn t ca mng :
C mt vi hn ch trn cc mng hai chiu. Chng hn c th ly a ch ca cc phn t
ca mng mt chiu, nh-ng ni chung khng cho php ly a ch ca phn t ca mng hai
chiu. Nh- vy my s chp nhn php tnh : &a[i] nh-ng khng chp nhn php tnh &y[i][j].
a ch u ca mt mng :
Tn mng biu th a ch u ca mng. Nh- vy ta c th dng a thay cho &a[0].
V d :
....
float y[6]={3.2,0,5.1,23,0,42};
int z[3][2]={
{25,31},
{12,13},
13
{45,15}
{
....
main()
{
....
}
Khi khi u mng ngoi c th khng cn ch ra kch th-c ( s phn t ) ca n. Khi
, my s dnh cho mng mt khong nh thu nhn danh sch gi tr khi u.
V d :
....
float a[]={0,5.1,23,0,42};
int m[][3]={
{25,31,4},
{12,13,89},
{45,15,22}
};
Khi ch ra kch th-c ca mng, th kch th-c ny cn khng nh hn kch th-c ca b
khi u.
V d :
....
float m[6]={0,5.1,23,0};
int z[6][3]={
{25,31,3},
{12,13,22},
{45,15,11}
};
....
i vi mng hai chiu, c th khi u vi s gi tr khi u ca mi hng c th khc
nhau :
V d :
14
....
float z[][3]={
{31.5},
{12,13},
{-45.76}
};
int z[13][2]={
{31.11},
{12},
{45.14,15.09}
};
V d :
char ten[]={'h','a','g'}
char ho[]='tran'
char dem[10] ="van"
15
Ch-ng 2
Cc lnh vo ra
Cch dng :
Dng cu lnh sau :
bin = getchar();
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 l-u vo bin.
V d :
int c;
c = getchar()
16
2.2.2. 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);
2.2.3. 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.
17
V d :
c = getch();
2..2.4. 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.
18
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 fw dnh cho n. Cc v tr d- tha s -c lp y
bng cc khong trng. Ring i vi cc tr-ng s, nu dy s fw 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.
fw :
Khi fw 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 fw hoc fw nh hn hay bng di thc t ca kt qu ra
th rng trn thit b ra dnh cho kt qu s bng chnh di ca n.
Ti v tr ca fw ta c th t du *, khi fw -c xc nh bi gi tr nguyn
ca i t-ng ng.
V d :
Kt qu ra fw 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
pp :
Tham s pp ch -c s dng khi i t-ng ng l mt xu k t hoc mt
gi tr kiu float hay double.
Trong tr-ng hp i t-ng ng c gi tr kiu float hay double th pp l
chnh xc ca tr-ng 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 :
19
Nu pp nh hn di ca xu th ch pp k t u tin ca xu -c in ra. Nu
khng c pp hoc nu pp ln hn hay bng di ca xu th c xu k t s -c in ra.
V d :
Kt qu ra fw pp Du - Kt qu -a di
ra tr-ng 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
20
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 25.500000
float x=25.5, y=-47.335 -47.34
printf("\n%f\n%*.2f",x,n,y);
Lnh ny t-ng -ng vi
printf("\n%f\n%8.2f",x,n,y);
V n=8 t-ng ng vi v tr *
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.
21
Vic c mt ca du * ni ln rng tr-ng vo vn -c d c bnh th-ng, nh-ng gi
tr ca n b b qua ( khng -c l-u vo b nh ). Nh- vy c t cha du * s khng c i
t-ng ng.
d...d l mt dy s xc nh chiu di cc i ca tr-ng 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 tr-ng
vo t-ng ng th ton b tr-ng vo s -c c, ni dung ca n -c dch v -c gn cho a
ch t-ng ng ( nu khng c du * ).
Nu gi tr ca d...d nh hn di ca tr-ng vo th ch phn u ca tr-ng c kch
c bng d...d -c c v gn cho a ch ca bin t-ng ng. Phn cn li ca tr-ng s -c
xem xt bi cc c t v i t-ng ng tip theo.
V d :
int a;
float x,y;
char ch[6],ct[6]
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 tr-c khi gn n cho cc a ch t-ng ng.
Cch d c th nht l c theo tr-ng vo, khi cc khong trng b b qua. Cch
ny p dng cho hu ht cc tr-ng 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. Ph-ng php ny ch xy ra khi ta s dng mt trong ba k t chuyn
dng sau : C, [ dy k t ], [^ dy k t ]
22
Cc k t chuyn dng v ngha ca n :
c Vo mt k t, i t-ng ng l con tr k t. C xt k t khong trng
d Vo mt gi tr kiu int, i t-ng ng l con tr kiu int. Tr-ng phi vo l s
nguyn
ld Vo mt gi tr kiu long, i t-ng ng l con tr kiu long. Tr-ng phi vo l s
nguyn
o Vo mt gi tr kiu int h 8, i t-ng ng l con tr kiu int. Tr-ng phi vo l s
nguyn h 8
lo Vo mt gi tr kiu long h 8, i t-ng ng l con tr kiu long. Tr-ng phi vo
l s nguyn h 8
x Vo mt gi tr kiu int h 16, i t-ng ng l con tr kiu int. Tr-ng phi vo l
s nguyn h 16
lx Vo mt gi tr kiu long h 16, i t-ng ng l con tr kiu long. Tr-ng phi vo
l s nguyn h 16
f hay e Vo mt gi tr kiu float, i t-ng ng l con tr float, tr-ng vo phi l s du
phy ng
lf hay le Vo mt gi tr kiu double, i t-ng ng l con tr double, tr-ng vo phi l s
du phy ng
s Vo mt gi tr kiu double, i t-ng ng l con tr kiu char, tr-ng vo phi l
dy k t bt k khng cha cc du cch v cc du xung dng
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
23
xu "xyz' cho ck
584 cho b
Ch :
Xt on ch-ng 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 nahu bi du cch
ho tab ), s th ba trn dng tip theo.
Khi vo sai s bo li v nhy v ch-ng trnh cha li gi n.
2.5. -a kt qu ra my in :
-a kt qu ra my in ta dng hm chun fprintf c dng sau :
fprintf(stdprn, iu khin, bin 1, bin 2,...);
Tham s stdprn xc nh thit b -a ra l my in.
iu khin c dng c t nh- lnh printf.
Dng ging nh- lnh printf, ch khc l in ra my in.
V d :
on ch-ng trnh in ma trn A, c 8x6. Mi hng ca ma trn -c in trn mt dng :
float a[8][6];
int i,j;
fprintf(stdprn,"\n%20c MA TRAN A\n\n\n",' ');
for (i=0;i<8;++i)
{ for (j=0;j<6;++j)
24
fprintf(stdprn,"%10.2f",a[i][j]);
fprintf(stdprn,"\n");
}
25
Ch-ng 3
Biu thc
26
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 t-ng 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.
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.
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
27
3.4. 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.
Bn php ton u c cng s -u tin, hai php sau c cng s th t -u tin nh-ng 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).
Ch :
C a v b c th l nguyn hoc thc.
V d :
n=5
++n Cho ta n=6
--n Cho ta n=4
Ta c th vit php ton ++ v -- tr-c 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 tr-c 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
29
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 tr-c 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
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 d-i.
i vi cc php ton cng mc -u tin th trnh t tnh ton c th t tri qua phi hay
ng-c 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]
30
. 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 , th-ng dng vit mt dy biu thc trong ton t for.
V d :
(float) (a+b)
V d :
1.5*(11/3)=4.5
1.5*11/3=5.5
(11/3)*1.5=4.5
31
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
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
32
33
Ch-ng 4
Cu trc c bn ca ch-ng trnh
4.1. Li ch thch :
Cc li bnh lun, cc li gii thch c th -a vo bt k ch no ca ch-ng trnh
cho ch-ng trnh d hiu, d c hn m khng lm nh h-ng n cc phn khc. Li gii thch
-c t gia hai du /* v */.
Trong mt ch-ng trnh cn ( v lun lun cn ) vit thm nhng li gii thch ch-ng
trnh thm r rng, thm d hiu.
V d :
#include "stdio.h"
#include "string.h"
#include "alloc.h"
#include "process.h"
int main()
{
char *str;
/* Cp pht b nh cho xu k t */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Kt thc ch-ng trnh nu thiu b nh */
}
/* copy "Hello" vo xu */
strcpy(str, "Hello");
/* Hin th xu */
printf("String is %s\n", str);
/* Gii phng b nh */
free(str);
return 0;
}
34
4.2. Lnh v khi lnh :
4.2.1. Lnh :
Mt biu thc kiu nh- x=0 hoc ++i hoc scanf(...) tr thnh cu lnh khi c i km
theo du ;
V d :
x=0;
++i;
scanf(...);
Trong ch-ng trnh C, du ; l du hiu kt thc cu lnh.
35
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 ch-ng 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 ch-ng 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.
36
4.3. Cu trc c bn ca ch-ng trnh :
Cu trc ch-ng trnh v hm l mt trong cc vn quan trng ca C. V hm ta s c
mt ch-ng ni t m v n. y ta ch -a ra mt s qui tc chung :
Hm l mt n v c lp ca ch-ng trnh. Tnh c lp ca hm th hin hai im :
Khng cho php xy dng mt hm bn trong cc hm khc.
Mi hm c cc bin, mng .. ring ca n v chng ch -c s dng ni b bn trong
hm. Ni cch khc hm l n v c tnh cht khp kn.
Mt ch-ng trnh bao gm mt hoc nhiu hm. Hm main() l thnh phn bt buc ca
ch-ng trnh. Ch-ng trnh bt u thc hin cc cu lnh u tin ca hm main() v kt thc
khi gp du } cui cng ca hm ny. Khi ch-ng trnh lm vic, my c th chy t hm ny
sang hm khc.
Cc ch-ng trnh C -c t chc theo mu :
.....
hm 1
.....
hm 2
.....
.....
hm n
37
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 ).
V d :
Ch-ng trnh tnh x ly tha y ri in ra my in kt qu :
#include "stdio.h"
#include "math.h"
main()
{
double x,y,z;
printf("\n Nhap x va y");
scanf("%lf%lf",&x,&y);
z=pow(x,y); /* hm ly lu tha y lu tha x */
fprintf(stdprn,"\n x= %8.2lf \n y=%8.2lf \n z=%8.2lf",x,y,z);
}
Qui tc th hai l :
Cc li gii thch cn -c t gia cc du /* v */ v c th -c vit
Trn mt dng
Trn nhiu dng
Trn phn cn li ca dng
Qui tc th ba l :
Trong ch-ng trnh, khi ta s dng cc hm chun, v d nh- printf(),
getch() ,... m cc hm ny li cha trong file stdio.h trong th- mc ca C,
v vy u ch-ng trnh ta phi khai bo s dng ;
#include "stdio.h "
38
Qui tc th t- l :
Mt ch-ng trnh c th ch c mt hm chnh ( hm main() ) hoc c th
c thm vi hm khc.
39
Ch-ng 5
Cu trc iu khin
Mt ch-ng trnh bao gm nhiu cu lnh. Thng th-ng cc cu lnh -c thc hin
mt cch ln l-t theo th t m chng -c vit ra. Cc cu trc iu khin cho php thay i
trt t ni trn, do my c th nhy thc hin mt cu lnh khc mt v tr tr-c hoc sau
cu lnh hin thi.
Xt v mt cng dng, c th chia cc cu trc iu khin thnh cc nhm chnh :
Nhy khng c iu kin.
R nhnh.
T chc chu trnh.
Ngoi ra cn mt s ton t khc c chc nng b tr nh- break, continue.
40
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 ch-ng trnh.
V d :
Ch-ng trnh nhp vo hai s a v b, tm max ca hai s ri in kt qu ln mn hnh.
Ch-ng trnh c th vit bng c hai cch trn nh- sau :
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
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);
}
41
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 tr-ng 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 ch-ng 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 ch-ng trnh trn t-ng -ng vi :
if ( n>0 ) /* if th nht*/
{
if ( a>b ) /* if th hai*/
z=a;
else
z=b;
}
Tr-ng 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;
42
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 ch-ng 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 ch-ng trnh.
V d :
Ch-ng trnh gii ph-ng trnh bc hai.
#include "stdio.h"
main()
{
float a,b,c,d,x1,x2;
printf("\n Nhap a, b, c:");
scanf("%f%f%f,&a&b&c);
d=b*b-4*a*c;
if (d<0.0)
printf("\n Phuong trinh vo nghiem ");
else if (d==0.0)
printf("\n Phuong trinh co nghiem kep x1,2=%8.2f",-b/(2*a));
else
{
printf("\n Phuong trinh co hai nghiem ");
printf("\n x1=%8.2f",(-b+sqrt(d))/(2*a));
printf("\n x2=%8.2f",(-b-sqrt(d))/(2*a));
}
43
5.2. Lnh nhy khng iu kin - ton t goto :
Nhn c cng dng nh- tn bin v c du : ng pha sau. Nhn c th -c gn cho
bt k cu lnh no trong ch-ng trnh.
V d :
ts : s=s++;
th y ts l nhn ca cu lnh gn s=s++.
Ton t goto c dng :
goto nhn;
Khi gp ton t ny my s nhy ti cu lnh c nhn vit sau t kho goto.
.......
{ .....
n1: printf("\n Gia tri cua N la: ");
.....
}
V d :
Tnh tng s=1+2+3+....+10
#include "stdio.h"
main()
{
int s,i;
i=s=0;
44
tong:
++i;
s=s+i;
if (i<10) goto tong;
printf("\n tong s=%d",s);
}
45
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 ch-ng 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;
46
default:printf(Vao sai\n);
}
printf("Tiep tuc 1, dung 0 :")
scanf("%d",&diem);
if (diem==1) goto tt;
getch();
return;
}
5.4. Cu trc lp :
5.4.1. Cu trc lp vi ton t while v for :
5.4.1.1. Cu trc lp vi ton t while :
Ton t while dng xy dng chu trnh lp dng :
while ( biu thc )
Lnh hoc khi lnh;
Nh- vy ton t while gm mt biu thc v thn chu trnh. Thn chu trnh c th l mt
lnh hoc mt khi lnh.
Hot ng ca chu trnh nh- sau :
My xc nh gi tr ca biu thc, tu thuc gi tr ca n my s chn cch thc hin
nh- sau :
Nu biu thc c gi tr 0 ( biu thc sai ), my s ra khi chu trnh v chuyn ti thc
hin cu lnh tip sau chu trnh trong ch-ng trnh.
Nu biu thc c gi tr khc khng ( biu thc ng ), my s thc hin lnh hoc khi
lnh trong thn ca while. Khi my thc hin xong khi lnh ny n li thc hin xc nh li gi
tr biu thc ri lm tip cc b-c nh- trn.
Ch :
Trong cc du ngoc ( ) sau while chng nhng c th t mt biu thc m cn c th
t mt dy biu thc phn cch nhau bi du phy. Tnh ng sai ca dy biu thc -c hiu l
tnh ng sai ca biu thc cui cng trong dy.
Bn trong thn ca mt ton t while li c th s dng cc ton t while khc. bng
cch ta i xy dng -c cc chu trnh lng nhau.
Khi gp cu lnh break trong thn while, my s ra khi ton t while su nht cha cu
lnh ny.
47
Trong thn while c th s dng ton t goto nhy ra khi chu trnh n mt v tr
mong mun bt k. Ta cng c th s dng ton t return trong thn while ra khi mt hm
no .
V d :
Ch-ng trnh tnh tch v h-ng ca hai vc t x v y :
Cch 1 :
#include "stdio.h"
float x[]={2,3.4,4.6,21}, y[]={24,12.3,56.8,32.9};
main()
{
float s=0;
int i=-1;
while (++i<4)
s+=x[i]*y[i];
printf("\n Tich vo huong hai vec to x va y la :%8.2f",s);
}
Cch 2 :
#include "stdio.h"
float x[]={2,3.4,4.6,21}, y[]={24,12.3,56.8,32.9};
main()
{
float s=0;
int i=0;
while (1)
{
s+=x[i]*y[i];
if (++i>=4) goto kt;
}
kt:printf("\n Tich vo huong hai vec to x va y la :%8.2f",s);
}
48
Cch 3 :
#include "stdio.h"
float x[]={2,3.4,4.6,21}, y[]={24,12.3,56.8,32.9};
main()
{
float s=0;
int i=0;
while ( s+=x[i]*y[i], ++i<=3 );
printf("\n Tich vo huong hai vec to x va y la :%8.2f",s);
}
49
Ch :
Nu biu thc 2 vng mt th n lun -c xem l ng. Trong tr-ng 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.
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.
V d 1:
Nhp mt dy s ri o ng-c th t ca n.
Cch 1:
#include stdio.h
float x[]={1.3,2.5,7.98,56.9,7.23};
int n=sizeof(x)/sizeof(float);
main()
{
int i,j;
float c;
for (i=0,j=n-1;i<j;++i,--j)
{
c=x[i];x[i]=x[j];x[j]=c;
}
fprintf(stdprn,\n Day so dao la \n\n);
for (i=0;i<n;++i)
fprintf(stdprn,%8.2f,x[i]);
}
50
Cch 2 :
#include stdio.h
float x[]={1.3,2.5,7.98,56.9,7.23};
int n=sizeof(x)/sizeof(float);
main()
{
int i,j;
float c;
for (i=0,j=n-1;i<j;c=x[i],x[i]=x[j],x[j]=c,++i,--j)
fprintf(stdprn,\n Day so dao la \n\n);
for (i=0;++i<n;)
fprintf(stdprn,%8.2f,x[i]);
}
Cch 3 :
#include stdio.h
float x[]={1.3,2.5,7.98,56.9,7.23};
int n=sizeof(x)/sizeof(float);
main()
{
int i=0,j=n-1;
float c;
for ( ; ; )
{
c=x[i];x[i]=x[j];x[j]=c;
if (++i>--j) break;
}
fprintf(stdprn,\n Day so dao la \n\n);
for (i=-1;i++<n-1; fprintf(stdprn,%8.2f,x[i]));
}
V d 2:
Tnh tch hai ma trn mxn v nxp.
#include "stdio.h"
51
float x[3][2],y[2][4],z[3][4],c;
main()
{
int i,j;
printf("\n nhap gia tri cho ma tran X ");
for (i=0;i<=2;++i)
for (j=0;j<=1;++j)
{
printf("\n x[%d][%d]=",i,j);
scanf("%f",&c);
x[i][j]=c;
}
printf("\n nhap gia tri cho ma tran Y ");
for (i=0;i<=1;++i)
for (j=0;j<=3;++j)
{
printf("\n y[%d][%d]=",i,j);
scanf("%f",&c);
y[i][j]=c;
}
for (i=0;i<=3;++i)
for (j=0;j<=4;++j)
z[i][j]
}
5.4.2. Chu trnh do-while
Khc vi cc ton t while v for, vic kim tra iu kin kt thc t u chu trnh,
trong chu trnh do while vic kim tra iu kin kt thc t cui chu trnh. Nh- vy thn ca chu
trnh bao gi cng -c thc hin t nht mt ln.
Chu trnh do while c dng sau :
do
Lnh hoc khi lnh;
while ( biu thc );
Lnh hoc khi lnh l thn ca chu trnh c th l mt lnh ring l hoc l mt khi
lnh.
52
Hot ng ca chu trnh nh- sau :
My thc hin cc lnh trong thn chu trnh.
Khi thc hin xong tt c cc lnh trong thn ca chu trnh, my s xc nh gi tr ca
biu thc sau t kho while ri quyt nh thc hin nh- sau :
Nu biu thc ng ( khc 0 ) my s thc hin lp li khi lnh ca chu trnh ln th hai
ri thc hin kim tra li biu thc nh- trn.
Nu biu thc sai ( bng 0 ) my s kt thc chu trnh v chuyn ti thc hin lnh ng
sau ton t while.
Ch :
Nhng iu l-u vi ton t while trn hon ton ng vi do while.
V d :
on ch-ng trnh xc nh phn t m u tin trong cc phn t ca mng x.
#include "stdio.h"
float x[5],c;
main()
{
int i=0;
printf("\n nhap gia tri cho ma tran x ");
for (i=0;i<=4;++i)
{
printf("\n x[%d]=",i);
scanf("%f",&c);
y[i]=c;
}
do
++i;
while (x[i]>=0 && i<=4);
if (i<=4)
printf("\n Phan tu am dau tien = x[%d]=%8.2f",i,x[i]);
else
printf("\n Mang khong c phan tu am ");
53
}
V d :
Bit s nguyn d-ng n s l s nguyn t nu n khng chia ht cho cc s nguyn
trong khong t 2 n cn bc hai ca n. Vit on ch-ng trnh c vo s nguyn d-ng n,
xem n c l s nguyn t.
# include "stdio.h"
# include "math.h"
unsigned int n;
main()
{
int i,nt=1;
printf("\n cho n=");
scanf("%d",&n);
for (i=2;i<=sqrt(n);++i)
if ((n % i)==0)
{
nt=0;
break;
}
if (nt)
printf("\n %d la so nguyen to",n);
else
printf("\n %d khong la so nguyen to",n);
}
54
cn trong for iu khin -c chuyn v b-c khi u li ( tc l b-c : tnh biu thc 3, sau
quay li b-c 2 bt u mt vng mi ca chu trnh).
Ch :
Lnh continue ch p dng cho chu trnh ch khng p dng cho switch.
V d :
Vit ch-ng trnh t mt nhp mt ma trn a sau :
Tnh tng cc phn t d-ng ca a.
Xc nh s phn t d-ng ca a.
Tm cc i trong cc phn t d-ng ca a.
#include "stdio.h"
float a[3[4];
main()
{
int i,j,soptd=0;
float tongduong=0,cucdai=0,phu;
for (i=0;i<3;++i)
for (j=0;i<4;++j)
{
printf("\n a[%d][%d]=",i,j );
scanf("%f",&phu);
a[i][j]=phu;
if (a[i][j]<=0) continue;
tongduong+=a[i][j];
if (cucdai<a[i][j]) cucdai=a[i][j];
++soptd;
}
printf("\n So phan tu duong la : %d",soptd);
printf("\n Tong cac phan tu duong la : %8.2f",tongduong);
printf("\n Cuc dai phan tu duong la : %8.2f",cucdai);
}
55
56
Ch-ng 6
Hm
6.1. C s :
Hm c th xem l mt n v c lp ca ch-ng 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 { }.
57
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 :
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 ch-ng 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.
58
return(max);
} /* Kt thc hm max3s*/
Quy tc hot ng ca hm :
Mt cch tng qut li gi hm c dng sau :
tn hm ([Danh sch cc tham s thc])
S cc tham s thc t thay vo trong danh sch cc i phi bng s tham s hnh thc
v ln l-t chng c kiu t-ng ng vi nhau.
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 ch-ng trnh, my s tm di ch v chuyn n hm
t-ng 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 t-ng 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.
Ch :
Khi hm khai bo khng c kiu tr-c n th n -c mc nh l kiu int.
59
Khng nht thit phi khai bo nguyn mu hm. Nh-ng ni chung nn c v n cho
php ch-ng 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.
Hm th-ng 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 th-ng cho ta mt gi tr no . L d nhin gi tr ca hm ph thuc vo gi tr
cc i.
6.3. Hm qui :
6.3.3. M u :
C khng nhng cho php t hm ny gi ti hm khc, m n cn cho php t mt im
trong thn ca mt hm gi ti chnh hm . Hm nh- vy gi l hm qui.
Khi hm gi qui n chnh n, th mi ln gi my s to ra mt tp cc bin cc b
mi hon ton c lp vi tp cc bin cc b -c to ra trong cc ln gi tr-c.
minh ho chi tit nhng iu trn, ta xt mt v d v tnh giai tha ca s nguyn
d-ng n. Khi khng dng ph-ng php qui hm c th -c vit nh- sau :
long int gt(int n) /* Tnh n! vi n>=0*/
{
60
long int gtphu=1;
int i;
for (i=1;i<=n;++i)
gtphu*=i;
return s;
}
Ta nhn thy rng n! c th tnh theo cng thc truy hi sau :
n!=1 nu n=0
n!=n*(n-1)! nu n>0
Hm tnh n! theo ph-ng 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 d-i 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
ch-a tho mn iu kin if nn my li tip tc tnh biu thc :
61
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 (**)
62
Hm qui th-ng -c xy dng theo thut ton sau :
if ( tr-ng hp suy bin)
{
Trnh by cch gii bi ton khi suy bin
}
else /* Tr-ng hp tng qut */
{
Gi qui ti hm ( ang vit ) vi cc gi
tr khc ca tham s
}
63
return uscln(a-b,b);
else
return uscln(a,b-a);
}
V d 2 :
Ch-ng trnh c vo mt s ri in n ra d-i dng cc k t lin tip.
# include "stdio.h"
# include "conio.h"
void prind(int n);
main()
{
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');
}
6.4. B tin s l C :
64
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 t-ng 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 th-ng 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. Th-ng th cc #include -c dng
nhiu trong cc ch-ng 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.
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 ch-ng 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 tr-c . 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 b-c chun b ch khng phi l mt phn ca ch-ng
trnh bin dch nn c rt t hn ch v vn phm v vic phi nh ngha ci g. Chng hn nh-
nhng ng-i lp trnh -a thch PASCAL c th nh ngha :
#define then
#define begin {
#define end; }
65
sau vit on ch-ng 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);
t-ng -ng vi :
x=((p+q)>(r+s) ? (p+q):(r+s));
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 nh-ng 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 ch-ng trnh sau :
main()
{
int x,y,z;
x=5;
66
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;
}
Ch-ng 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()
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
67
Ch-ng 7
Con tr
7.1. Con tr v a ch :
V con tr cha a ch ca i t-ng nn n c th xm nhp vo i t-ng gin tip qua
con tr. Gi s x l mt bin kiu int, v gi s px l con tr -c to ra theo mt cch no .
Php ton mt ngi & s cho a ch ca i t-ng, nn cu lnh :
px=&x;
s gn a ch ca bin x cho tr px, v px by gi -c gi l " tr ti bin x ". Php ton & ch
p dng -c cho cc bin v phn t bng, kt cu kiu &(x+1) v &3 l khng hp l. Ly i
ch ca bin register cng l sai.
Php ton mt ngi * coi l ton hng ca n l i ch cn xt v thm nhp ti a ch
ly ra ni dung. Nu bin y c kiu int th th lnh :
y=*px;
s gn gi tr ca bin m tr px tr ti. Vy dy lnh :
px=&x;
y=*px;
s gn gi tr ca x cho y nh- trong lnh :
y=x;
Cc khai bo cho cc bin con tr c dng :
tn kiu *tn con tr
V d :
Nh- trong v d trn, ta khai bo con tr px kiu int :
int *px;
68
Trong khai bo trn ta ng ni rng l mt cch t-ng tr-ng, rng t hp *px c kiu int,
tc l nu px xut hin trong ng cnh *px th n cng t-ng -ng vi bin c kiu int.
Con tr c th xut hin trong cc biu thc. Chng hn, nu px tr ti s nguyn x th
*px c th xut hin trong bt k ng cnh no m x c th xut hin.
V d :
Lnh y=*px+1;
s t y ln hn x mt n v.
Lnh printf("%d",*px);
s in ra gi tr hin ti ca x
Lnh :
d=sqrt((double) *px);
s gn cho bin d cn bc hai ca x, gi tr ny b buc phi chuyn sang double tr-c khi -c
chuyn cho sqrt ( cch dng hm sqrt ).
Trong cc biu thc kiu nh- :
y=*px+1;
php ton mt ngi * v & c mc -u tin cao hn cc php ton s hc, cho nn biu thc ny
ly bt k gi tr no m px tr ti, cng vi 1 ri gn cho y.
Con tr cng c th xut hin bn v tri ca php gn. Nu px tr ti x th sau lnh :
*px=0;
x s c gi tr bng 0. Cng t-ng t cc lnh:
*px+=1;
(*px)++;
s tng gi tr ca x ln 1 dn v.
Cc du ngoc n cu lnh cui l cn thit , nu khng th biu thc s tng px thay
cho tng bin m n tr ti v php ton mt ngi nh- * v ++ -c tnh t phi sang tri.
Cui cng, v con tr l bin nn ta c thao tc chng nh- i vi cc bin khc. Nu py
cng l con tr int th lnh :
py=px;
s sao ni dung ca px vo py, ngha l lm cho py tr ti ni m px tr.
69
Trong C c mi quan h cht ch gia con tr v mng : cc phn t ca mng c th
-c xc nh nh ch s hoc thng qua con tr.
7.2.1.Php ton ly a ch :
Php ton ny ch p dng cho cc phn t ca mng mt chiu. Gi s ta c khai bo :
double b[20];
Khi php ton :
&b[9]
s cho a ch ca phn t b[9].
V d :
70
Vo s liu ca cc phn t ca mt mng v tnh tng ca chng :
Cch 1:
#include "stdio.h"
main()
{
float a[4],tong;
int i;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",a+i);
}
tong=0;
for (i=0;i<4;++i)
tong+=a[i];
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
}
Cch 2 :
#include "stdio.h"
main()
{
float a[4],tong, *troa;
int i;
troa=a;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",&troa[i]);
}
tong=0;
for (i=0;i<4;++i)
tong+=troa[i];
71
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
}
Cch 3 :
#include "stdio.h"
main()
{
float a[4],tong,*troa;
int i;
troa=a;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",troa+i);
}
tong=0;
for (i=0;i<4;++i)
tong+=*(troa+i);
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
}
Ch :
Mng mt chiu v con tr t-ng ng phi cng kiu.
72
th php gn :
xau="Ha noi"
l hon ton c ngha. Sau khi thc hin cu lnh ny trong con tr xau s c a ch u ca
mng (kiu char) ang cha xu k t bn phi. Khi cc cu lnh :
puts("Ha noi");
puts(xau);
s c cng mt tc dng l cho hin ln mn hnh dng ch Ha noi.
Mng kiu char th-ng dng cha mt dy k t c vo b nh. V d, np t bn
phm tn ca mt ng-i ta dng mt mng kiu char vi di 25, ta s dng cc cu lnh sau :
char ten[25];
printf("\n Ho ten :");
gets(ten);
By gi ta xem gia mng kiu char v con tr kiu char c nhng g ging v khc
nhau. thy -c s khc nhau ca chng, ta -a ra s so snh sau :
char *xau, ten[15];
ten="Ha noi"
gets(xau);
Cc cu lnh trn l khng hp l. Cu lnh th hai sai ch : ten l mt hng a ch v ta
khng th gn mt hng a ch ny cho mt hng a ch khc. Cu lnh th ba khng thc hin
-c, mc ch ca cu lnh l c t bn phm mt dy k t v l-u vo mt vng nh m con
tr xau tr ti. Song ni dung ca con tr xau cn ch-a xc nh. Nu tr xau tr ti mt
vng nh no th cu lnh ny hon ton c ngha. Chng hn nh- sau khi thc hin cu
lnh :
xau=ten;
th cch vit :
gets(ten) ; v gets(xau);
u c tc dng nh- nhau.
7.3.1.Php ly a ch :
73
Php ly a ch i vi cc phn t mng hai chiu ch c th p dng khi cc phn t
mng hai chiu c kiu nguyn, cn li th php ly a ch cho cc phn t mng nhiu chiu l
khng thc hin -c .V d nh- ta c th ly a ch &a[1][2] khi a l mng nguyn.
#include "stdio.h"
main()
{
float a[2][3], tg;
int i,j;
for (i=0;i<2;++i)
for (j=0;j<2;++j)
{
printf("\n a[%d][%d]=",i,j);
scanf("%8.2f",&tg);
a[i][j]=tg;
}
}
74
a+1 tr phn t u hng th hai ca mng : phn t a[1][0]
........
V d :
Dng con tr vo s liu cho mng hai chiu.
Cch 1 :
#include "stdio.h"
main()
{
float a[2][3],*pa;
int i;
pa=(float*)a;
for (i=0;i<6;++i)
scanf("%f",pa+i);
}
Cch 2 :
#include "stdio.h"
main()
{
75
float a[2][3],*pa;
int i;
for (i=0;i<6;++i)
scanf("%f",(float*)a+i);
}
7.4. Kiu con tr, kiu a ch, cc php ton trn con tr :
7.4.1. Kiu con tr v kiu a ch :
Con tr dng l-u a ch. Mi kiu a ch cn c kiu con tr t-ng ng. Php gn
a ch cho con tr ch c th thc hin -c khi kiu a ch ph hp vi kiu con tr.
V d theo khai bo :
float a[20][30],*pa,(*pm)[30];
th :
pa l con tr float
pm l con tr kiu float [30]
a l a ch kiu float [30]
V th php gn :
pa=a;
l khng hp l. Nh-ng php gn :
pm=a;
Php gn :
Php gn ch thc hin vi cc con tr cng kiu. Mun gn cc con tr khc kiu phi
dng php p kiu nh- v d sau :
int x;
char *pc;
76
pc=(char*)(&x);
Php truy cp b nh :
Con tr float truy nhp ti 4 byte, con tr int truy nhp 2 byte, con tr char truy nhp 1
byte. Gi s ta c c khai bo :
float *pf;
int *pi;
char *pc;
Khi :
Nu tr pi tr n byte th 100 th *pf biu th vng nh 4 byte lin tip t byte 100 n
103.
77
Nu tr pi tr n byte th 100 th *pi biu th vng nh 2 byte lin tip t byte 100 n
101.
Nu tr pc tr n byte th 100 th *pc biu th vng nh 1 byte chnh l byte 100.
Php so snh :
Cho php so snh cc con tr cng kiu, v d nu p1 v p2 l cc con tr cng kiu th
nu :
p1<p2 nu a ch p1 tr ti thp hn a ch p2 tr ti.
p1=p2 nu a ch p1 tr ti cng l a ch p2 tr ti.
p1>p2 nu a ch p1 tr ti cao hn a ch p2 tr ti.
V d :
V d 1 :
on ch-ng trnh tnh tng cc s thc dng php so snh con tr :
float a[100],*p,*pcuoi,tong=0.0;
int n;
pcuoi=a+n-1; /* a ch cui dy*/
for (p=a;p<=pcuoi;++p)
s+=*p;
V d 2 :
Dng con tr char tch cc byte ca mt bin nguyn, ta lm nh- sau :
Gi s ta c lnh :
unsigned int n=0xABCD; /* S nguyn h 16*/
char *pc;
pc=(char*)(&n);
Khi :
*pc=0xAB (byte th nht ca n)
*pc+1=0xCD (byte th hai ca n)
Ch :
Cc php ton tng gim a ch, so snh v truy cp b nh khng dng -c trn con
tr void.
V d :
Vit hm thc hin cng ma trn :
79
Mng con tr l s m rng khi nim con tr. Mng con tr l mt mng m mi phn
t ca n cha -c mt a ch no . Cng ging nh- con tr, mng con tr c nhiu kiu :
Mi phn t ca mng con tr kiu int s cha -c cc a ch kiu int. T-ng t cho cc mng
con tr ca cc kiu khc.
Mng con tr -c khai bo theo mu :
Kiu *Tn_mng_con_tr[N];
Trong Kiu c th l int, float, double, char ... cn Tn_mng_con_tr l tn ca
mng, N l mt hng s nguyn xc nh ln ca mng.
Khi gp khai bo trn, my s cp pht N khong nh lin tip cho N phn t ca mng
Tn_mng_con_tr.
V d :
Lnh :
double *pa[100];
Khai bo mt mng con tr kiu double gm 100 phn t. Mi phn t pa[i] c th dng l-u
tr mt a ch kiu double.
Ch :
Bn thn cc mng con tr khng dng l-u tr s liu. Tuy nhin mng con tr cho
php s dng cc mng khc l-u tr s liu mt cch c hiu qu hn theo cch : chia mng
thnh cc phn v ghi nh a ch u ca mi phn vo mt phn t ca mng con tr.
Tr-c khi s dng mt mng con tr ta cn gn cho mi phn t ca n mt gi tr. Gi
tr ny phi l gi tr ca mt bin hoc mt phn t mng. Cc phn t ca mng con tr kiu
char c th -c khi u bng cc xu k t.
V d :
Xt mt t lao ng c 10 ng-i, m ca mi ng-i chnh l s th t. Ta lp mt hm
khi bit m s ca nhn vin th xc nh -c h tn ca nhn vin .
#include "stdio.h"
#include "ctype.h"
void tim(int code);
main()
{
int i;
80
tt:printf("\n Tim nguoi co so TT la :");
scanf("%d",&i);
tim(i);
printf("Co tiep tuc nua khong C/K : ');
if (tupper(getch())='C')
goto tt;
}
void tim(int code);
{
static char *list[]= {
"Khong co so thu tu nay "
" Nguyen Van Toan"
"Huynh Tuan Nghia"
"Le Hong Son"
"Tran Quang Tung"
"Chu Thanh Tu"
"Mac Thi Nga"
"Hoang Hung"
"Pham Trong Ha"
"Vu Trung Duc"
"Mai Trong Quat"
};
printf("\n\n Ma so : %d",code);
printf(": %s",());
}
7.6. Con tr ti hm :
7.6.1. Cch khai bo con tr hm v mng con tr hm :
Ta s trnh by quy tc khai bo thng qua cc v d :
V d 1:
Cu lnh :
float (*f)(float),(*mf[50])(int);
khai bo :
81
f l con tr hm kiu float c i l float
mf l mng con tr hm kiu float c i kiu int ( c 50 phn t )
V d 2:
Cu lnh :
double (*g)(int, double),(*mg[30])(double, float);
khai bo :
V d 1:
#include "stdio.h"
double fmax(double x, double y ) /* Tnh max x,y */
{
return(x>y ? x:y);
}
double (*pf)(double,double)=fmax; /*Khai bo v gn tn hm cho con tr hm */
main() /* S dng con tr hm*/
{
printf("\n max=%f",pf(5.0,9.6));
}
V d 2:
#include "stdio.h"
double fmax(double x, double y ) /* Tnh max x,y */
{
82
return(x>y ? x:y);
}
double (*pf)(double,double); /* Khai bo con tr hm*/
7.6.3. i ca con tr hm :
C cho php thit k cc hm m tham s thc trong li gi ti n li l tn ca mt hm
khc. Khi tham s hnh thc t-ng ng phi l mt con tr hm.
V d :
Dng mng con tr lp bng gi tr cho cc hm : x*x, sin(x), cos(x), exp(x) v
sqrt(x). Bin x chay t 1.0 n 10.0 theo b-c 0.5
#include "stdio.h"
#include "math.h"
double bp(double x) /* Hm tnh x*x */
{
return x*x;
}
83
main()
{
int i,j;
double x=1.0;
typedef double (*ham)(double);
ham f[6]; /* Khai bao mng con tr hm*/
/* C th khai bo nh- sau double (*f[6](double)*/
f[1]=bp; f[2]=sin; f[3]=cos; f[4]=exp; f[5]=sqrt;
/* Gn tn hm cho cc phn t mng con tr hm */
while (x<=10.0) /* Lp bng gi tr */
{
printf("\n");
for (j=1;j<=5;++j)
printf("%10.2f ",f[j](x));
x+=0.5;
}
}
84
Ch-ng 8
Cu trc
Thnh phn ca cu trc c th l : bin, mng, cu trc khc -c nh ngha tr-c vv..
V d :
85
V d 1:
on ch-ng trnh :
struct ngay {
int ngaythu;
char thang[12];
int nam;
};
V d 2:
on ch-ng trnh :
struct nhancong
{
char ten[15];
char diachi[20]
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
};
86
int nam;
} ngay;
typedef struct
{
char ten[15];
char diachi[20]
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
} nhancong;
V d 1 :
struct ngay ngaydi, ngayden;
V d 2 :
struct nhancong nhom1,nhom2;
s cho ta hai cu trc vi tn l nhom1 v nhom2. C hai cu trc u -c xy dng theo cu
trc kiu nhancong.
Nh- vy, mt cch tng qut, vic khai bo cu trc -c thc hin theo mu sau :
Cch 1 :
struct tn_kiu_cu_trc__khai_bo danh_sch_tn_cc_cu_trc; (2)
87
Ch :
Cc bin cu trc -c khai bo theo mu trn s -c cp pht b nh mt cch y
cho tt c cc thnh phn ca n.
Vic khai bo c th thc hin ng thi vi vic nh ngha kiu cu trc. Mun vy,
ch cn t danh sch tn bin cu trc cn khai bo sau du } ca (* ) nh- trn .
Ni cch khc, va khai bo kiu va khai bo bin ta dng cch sau :
Cch 2 :
struct tn_kiu_cu_trc
{
Cc thnh phn ca cu trc (3)
} danh_sch_tn_cc_cu_trc;
V d :
V d 1 :
struct ngay
{
int ngaythu;
char thang[12];
int nam;
} ngaydi,ngayden;
V d 2 :
struct nhancong
{
char ten[15];
char diachi[20];
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
} nhom1,nhom2;
88
Khi va nh ngha kiu cu trc va khai bo cu trc nh- trong v d trn, ta khng th
khng cn n tn kiu cu trc. Ni cch khc cu trc c th -c khai bo theo cch sau :
struct
{
Cc thnh phn ca cu trc (4)
} danh_sch_tn_cc_cu_trc;
V d :
struct
{
int ngaythu;
char thang[12];
int nam;
} ngaydi,ngayden;
S khc nhau ca cc cch khai bo cu trc trong (3) v (4) l ch : Vi (3) ta va khai
bo -c mt kiu cu trc va khai bo -c cc cu trc, v c th dng kiu cu trc ny
khai bo cho cc cu trc khc nh- trong (2), cn (4) ch khai bo -c cc cu trc.
Ch :
Nu dng t kho typedef nh ngha kiu cu trc nh- trong mc 8.1 th khi khai bo
cc cu trc mi ta khng cn dng t kho struct, ch cn dng tn kiu.
V d nh- kiu cu trc ngay -c khai bo bng typedef trong 8.1 th khi khai bo cc cu trc
mi l ngaydi v ngayden c cng kiu ngay ta dng dng lnh sau :
ngay ngaydi,ngayden;
89
truy cp n mt thnh phn c bn ( l bin hoc mng ) ca mt cu trc ta s dng
mt trong cc cch vit sau :
tn_cu_trc.tn_thnh_phn
tn_cu_trc.tn_cu_trc.tn_thnh_phn
tn_cu_trc. tn_cu_trc.tn_cu_trc.tn_thnh_phn
.....
Cch vit th nht nh- trn -c s dng khi bin hoc mng l thnh phn trc tip ca
mt cu trc. V d nh- bin ngaythu, bin nam v mng thang l cc thnh phn trc tip ca
cc cu trc ngaydi, ngayden. Cc bin bacluong, cc mng ten, diachi l cc thnh phn trc
tip ca cc cu trc nhancong.
Cc cch vit cn li nh- trn -c s dng khi bin hoc mng l thnh phn trc tip
ca mt cu trc m bn thn cu trc ny li l thnh phn ca cc cu trc ln hn.
V d :
Ta xt php ton trn cc thnh phn ca cu trc nhom1, nhom2 :
Cu lnh :
printf("%s",nhom1.ten);
s -a ln mn hnh tn ca nhom1.
Cu lnh :
tongluong=nhom1.bacluong+nhom2.bacluong;
s gn tng l-ng ca nhom1 v nhom2 ri gn cho bin tongluong.
Cu lnh :
printf("%d",nhom1.ngaysinh.ten);
s -a ln mn hnh ngy sinh ca nhom1.
Cu lnh :
printf("%d",nhom1. ngaybatdaucongtac.nam);
s -a ln mn hnh ngy bt u cng tc ca nhom1.
Ch :
C th s dng php ton ly a ch i vi cc thnh phn cu trc nhp s liu
trc tip vo cc thnh phn cu trc. V d nh- ta vit :
scanf("%d",&nhom1. ngaybatdaucongtac.nam);
90
Nh-ng i vi cc thnh phn khng nguyn, vic lm trn c th dn n treo my. V th nn
nhp s liu vo mt bin trung gian sau mi gn cho thnh phn ca cu trc.
V d :
Gi s ta lp trnh qun l thng tin cn b. Gi s mi d liu ca mt cn b gm :
Ngy thng nm sinh.
Ngy thng nm vo c quan.
Bc l-ng.
Yu cu vit mt ch-ng trnh :
Xy dng cu trc c s d liu cho cn b.
Vo s lu ca mt cn b.
-a s liu ra my in.
Ch-ng trnh -c vit nh- sau :
#include "stdio.h"
typedef struct
{
int ngay;
char thang[10];
int nam;
} date;
typedef struct
{
91
date ngaysinh;
date ngayvaocq;
float luong;
} canbo;
main()
{
canbo p;
printf("\n Sinh ngay : ");
scanf("%d",&p.ngaysinh.ngay);
printf("\n Thang : ");
scanf("%d",&p.ngaysinh.thang);
printf("\n Nam : ");
scanf("%d",&p.ngaysinh.nam);
printf("\n Vao co quan ngay : ");
scanf("%d",&p.ngayvaocq.ngay);
printf("\n Thang : ");
scanf("%d",&p.ngayvaocq.thang);
printf("\n Nam : ");
scanf("%d",&p.ngayvaocq.nam);
printf("\n Luong : ");
scanf("%d",&p.luong);
fprintf(stdprn,"\n Ngay sinh:%d%s%d",p.ngaysinh.ngay,p.ngaysinh.thang,
p.ngaysinh.nam);
fprintf(stdprn,"\n Ngay vao co quan:%d%s%d",p.ngayvaocq.ngay,
p.ngayvaocq.thang,p.ngayvaocq.nam);
fprintf(stdprn,"\n Luong : %8.2f",p.luong);
}
92
Hon ton t-ng t nh- vy : ta c th s dng mt kiu cu trc m t khai bo
cc cu trc v mng cu trc.
Cch khai bo mng cu trc :
struct tn_kiu_cu_trc__nh_ngha tn_mng_cu_trc[s phn t ca mng];
V d :
V d 1 :
Gi s kiu cu trc canbo -c nh ngha nh- mc trn. Khi dng khai bo :
struct canbo cb1,cb2,nhom1[10],nhom2[7];
s cho :
Hai bin cu trc cb1 v cb2.
Hai mng cu trc nhom1 co 10 phn t v nhom2 c 7 phn t v mi phn t ca hai
nhm ny c kiu canbo.
V d 2 :
on ch-ng trnh sau s tnh tng l-ng cho cc phn t nhm 1:
double tongluong=0;
for (i=0;i<10;++i)
tongluong+=nhom1[i].luong;
Ch :
Khng cho php s dng php ton ly a ch i vi cc thnh phn ca mng cu trc
khc kiu nguyn. Chng hn khng cho php s dng cu lnh sau :
scanf("%f",&nhom1[5].luong);
Trong tr-ng hp ny ta dng bin trung gian.
93
Gn hai bin cu trc cho nhau
Gn bin cu trc cho phn t mng cu trc
Gn phn t mng cu trc cho bin cu trc
Gn hai phn t mng cu trc cho nhau
Mi mt php gn trn t-ng -ng vi mt dy php gn cc thnh phn t-ng ng.
V d :
on ch-ng trnh sau minh ho cch dng php gn cu trc sp xp n th sinh
theo th t gim ca tng im :
struct thisinh
{
char ht[25];
float td;
} tg,ts[100];
for (i=1;i<=n-1;++i)
for (j=1;j<=n;++j)
if (ts[i].td<ts[j].td)
{
tg=ts[i];
ts[i]=ts[j];
ts[j]=tg;
}
94
{
char ten[20];
char diachi[25];
double bacluong;
struct ngay ngaysinh;
};
Nu khai bo :
struct nhancong *p,*p1,*p2,nc1,nc2,ds[100];
ta c :
p, p1, p2 l con tr cu trc
nc1, nc2 l cc bin cu trc
ds l mng cu trc
Con tr cu trc dng l-u tr a ch ca bin cu trc v mng cu trc.
V d :
p1=&nc1; /* Gi a ch nc1 vo p1 */
p2=&ds[4]; /* Gi a ch ds[4] vo p2 */
p=ds; /* Gi a ch ds[0] vo p */
Cch mt :
Tn_con_tr->Tn_thnh_phn
Cch hai :
(*Tn_con_tr).Tn_thnh_phn
V d :
nc1.ngaysinh.nam
p1-> ngaysinh.nam
ds[4].ngaysinh.thang
(*p2). ngaysinh.thang
95
8.7.3. Php gn qua con tr:
Gi s ta gn :
p1=&nc1;
p2=&ds[4];
Khi c th dng :
*p1 thay cho nc1
*p2 thay cho ds[4]
Tc l vit:
ds[5]=nc1;
ds[4]=nc2;
T-ng -ng vi :
ds[5]=*p1;
*p2=nc2;
V d :
Sau cc lnh :
p=p+10;
p2=p2-4;
th p tr ti ds[10] cn p2 tr ti ds[0]
96
Khi ta s dng c cu trc th cc cch vit sau l t-ng -ng :
ds[i] p[i] *(p+i)
V d :
Cc cch nh ngha cu trc t tr person:
Cch 1 :
typedef struct pp
{
char ht[20];
char qq[25];
int tuoi;
struct pp *tiep;
} person;
Cch 2 :
typedef struct pp person
struct pp
{
char ht[20];
char qq[25];
int tuoi;
person *tiep;
};
97
Cch 3 :
struct pp
{
char ht[20];
char qq[25];
int tuoi;
struct pp *tiep;
};
typedef pp person;
Cu trc t tr -c dng xy dng danh sch lin kt ( mc ni ), l mt nhm
cc cu trc c tnh cht sau : ( Mc ni theo chiu thun ).
Bit a ch cu trc u ang -c l-u tr trong mt con tr no .
Trong mi cu trc ( tr cu trc cui ) cha a ch ca cu trc tip sau ca danh
sch.
Cu trc cui cha hng NULL.
V d :
.........
Pdau
NULL
Vi danh sch ny, ta c th ln l-t t cu trc u n cu trc cui theo chiu t trn xung
d-i.
Nhm cu trc mc ni theo chiu ng-c c tnh cht sau :
Bit a ch cu trc cui.
Trong mi cu trc ( tr cu trc u ) u ch a ch ca cu trc tr-c.
Cu trc u cha hng NULL.
Vi danh sch ny, ta c th ln l-t t cu trc cui ln cu trc u theo chiu t d-i ln trn.
Ngoi ra, ta c th xy dng cc danh sch m mi phn t cha hai a ch ca cu trc tr-c v
cu trc sau. Vi loi danh sch ny, ta c th truy nhp theo c hai chiu trn.
Khi lm vic vi danh sch mc ni, ta th-ng phi tin hnh cc cng vic sau sau :
( Gi s ta c con tr p, tr pdau ch cu trc u ca danh sch, con tr tiep l thnh phn con
tr ca cu trc )
98
To danh sch mi :
Cp pht b nh cho mt cu trc
Nhp mt bin cu trc vo vng nh va cp
Gn a ch ca cu trc sau cho thnh phn con tr ca cu trc tr-c
Hm cp pht b nh :
void *malloc(kichthuoc_t kichthuoc);
Hm ly trong th- vin alloc.h hoc stdlib.h.
kichthuoc tnh bng s by te. Hm s -a con tr v v tr nh va -c cp hoc v NULL nu
khng b nh cn thit. Nu kichthuoc == 0 th n tr v NULL.
V d :
#include "stdio.h"
99
#include "string.h"
#include "alloc.h"
#include "process.h"
int main()
{
char *str;
/* Cp pht b nh cho xu k t */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Kt thc ch-ng trnh nu thiu b nh */
}
/* copy "Hello" vo xu */
strcpy(str, "Hello");
/* Hin th xu */
printf("String is %s\n", str);
/* Gii phng b nh */
free(str);
return 0;
}
V d :
To mt danh sch lin kt. Cc bin cu trc gm cc tr-ng : H tn, Qu qun, tui,
v mt tr-ng con tr l Tip.
Mc ni theo chiu thun (Vo tr-c ra tr-c FIFO first in first out ):
#include "stdio.h"
#include "alloc.h"
#include "conio.h"
#include "string.h"
typedef struct pp
{
char ht[25];
char qq[20];
int tuoi;
100
struct pp *tiep;
} nhansu;
main()
{
char tt;
nhansu *pdau,*pcuoi,*p;
char tam[10];
clrscr();
pdau=NULL;
do
{
p=(nhansu*)malloc(sizeof(nhansu));
printf("\n Ho ten : ");
gets(p->ht);
printf(" Que quan : ");
gets(p->qq);
printf(" Tuoi: ");
gets(tam);
p->tuoi=atoi(tam);
if (pdau==NULL)
{
pdau=p;
pcuoi=p;
p->tiep=NULL;
}
else
{
pcuoi->tiep=p;
pcuoi=p;
p->tiep=NULL;
}
printf("\nBam phim bat ky de tiep tuc, ESC de dung");
tt=getch();
} while(tt!=27) ;
101
/* -a danh sch lin kt ra mn hnh, tr pdau tro */
printf("\n Danh sach nhu sau :\n");
p=pdau;
while (p!=NULL)
{
printf("\n Ho ten: %25s Que : %20s Tuoi :
%d",(*p).ht,(*p).qq,(*p).tuoi);
p=p->tiep;
}
getch();
}
Mc ni theo chiu ng-c (Vo sau ra tr-c LIFO last in first out ):
#include "stdio.h"
#include "alloc.h"
#include "conio.h"
#include "string.h"
typedef struct pp
{
char ht[25];
char qq[20];
int tuoi;
struct pp *tiep;
} nhansu;
main()
{
char tt;
nhansu *pdau,*pcuoi,*p;
char tam[10];
clrscr();
pdau=NULL;
do
{
p=(nhansu*)malloc(sizeof(nhansu));
printf("\n Ho ten : ");
102
gets(p->ht);
printf(" Que quan : ");
gets(p->qq);
printf(" Tuoi: ");
gets(tam);
p->tuoi=atoi(tam);
if (pdau==NULL)
{
pdau=p;
pcuoi=p;
p->tiep=NULL;
}
else
{
p->tiep=pcuoi;
pcuoi=p;
}
printf("\nBam phim bat ky de tiep tuc, ESC de dung");
tt=getch();
} while(tt!=27) ;
/* -a danh sch lin kt ra mn hnh, tr pdau tro */
printf("\n Danh sach nhu sau :\n");
p=pcuoi;
while (p!=NULL)
{
printf("\n Ho ten: %25s Que : %20s Tuoi :
%d",(*p).ht,(*p).qq,(*p).tuoi);
p=p->tiep;
}
getch();
}
103
Ch-ng 9
tp tin - file
104
Nhp xut vn bn:
Kiu nhp xut vn bn ch khc kiu nh phn khi x l k t chuyn dng ( m 10)
v k t m 26. i vi cc k t khc, hai kiu u c ghi nh- nhau.
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).
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 :
FILE *vb, *np; /* Khai bo hai bin con tr tp */
9.2.2. M tp - hm fopen :
Cu trc ng php ca hm :
FILE *fopen(const char *tn_tp, const char *kiu);
Cng dng :
105
Hm dng m tp. Nu thnh cng hm cho con tr kiu FILE ng vi tp va m.
Cc hm cp hai s lm vic vi tp thng qua con tr ny. Nu c li hm s tr v gi tr
NULL.
Bng sau ch ra cc gi tr ca kiu :
Tn kiu ngha
"r" "rt" M mt tp c theo kiu vn bn. Tp cn
c phi tn ti, nu khng s c li
"w" "wt" M mt tp ghi theo kiu vn bn. Nu tp
tn ti th n s b xo.
"a" "at" M mt tp ghi b xung theo kiu vn bn.
Nu tp ch-a tn ti th to tp mi.
"rb" M mt tp c theo kiu nh phn. Tp cn
c phi tn ti, nu khng s c li.
"wb" M mt tp mi ghi theo kiu nh phn.
Nu tp tn ti th n s b xo.
"ab" M mt tp ghi b xung theo kiu nh phn.
Nu tp ch-a tn ti th to tp mi.
"r+" "r+t" M mt tp c/ghi theo kiu vn bn. Tp
cn c phi tn ti, nu khng s c li
"w+" "w+t" M mt tp c/ghi theo kiu vn bn. Nu
tp tn ti th n s b xo.
"a+" "a+t" M mt tp c/ghi b xung theo kiu vn
bn. Nu tp ch-a tn ti th to tp mi.
"r+b" M mt tp c/ghi theo kiu nh phn. Tp
cn c phi tn ti, nu khng s c li.
"w+b" M mt tp mi c/ghi theo kiu nh phn.
Nu tp tn ti th n s b xo.
"a+b" M mt tp c/ghi b xung theo kiu nh
phn. Nu tp ch-a tn ti th to tp mi.
Ch :
Trong cc kiu c ghi, ta nn lm sch vng m tr-c khi chuyn t c sang ghi hoc
ng-c li. Ta s cp n cc hm vi tnh nng xo sau ny.
106
V d :
f=fopen("TEPNP","wb");
9.2.3. ng tp - hm fclose :
Cu trc ng php ca hm :
int fclose(FILE *fp);
Cng dng :
Hm dng ng tp khi kt thc cc thao tc trn n. Khi ng tp, my thc hin cc
cng vic sau :
Khi ang ghi d liu th my s y d liu cn trong vng m ln a
Khi ang c d liu th my s xo vng m
Gii phng bin tr tp.
Nu lnh thnh cng, hm s cho gi tr 0, tri li n cho hm EOF.
V d :
fclose(f);
V d :
fcloseall();
107
9.2.5. Lm sch vng m - hm fflush :
Cu trc ng php ca hm :
int fflush(FILE *fp);
V d :
fflush(f);
V d :
fflushall();
9.2.7. Kim tra li file - hm ferror :
Cu trc ng php ca hm :
int ferror(FILE *fp);
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.
108
9.2.8. Kimtra cui tp - hm feof :
Cu trc ng php ca hm :
int feof(FILE *fp);
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.
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tr ch v :
9.2.7.1. Chuyn con tr ch v v u tp - Hm rewind :
Cu trc ng php :
void rewind(FILE *fp);
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);
109
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 :
xp=SEEK_SET hay 0 : Xut pht t u tp.
xp=SEEK_CUR hay 1: Xut pht t v tr hin ti ca con tr ch v.
xp=SEEK_END hay 2 : Xut pht t cui tp.
Cng dng :
Chuyn con tr ch v ca tp fp v v tr xc nh bi xp qua mt s byte xc nh bng
gi tr tuyt i ca sb. Chiu di chuyn l v cui tp nu sb d-ng, tri li n s di chuyn v
u tp. Khi thnh cng, hm tr v gi tr 0. Khi c li hm tr v gi tr khc khng.
Ch :
Khng nn dng fseek trn tp tin vn bn, do s chuyn i k t s lm cho vic nh
v thiu chnh xc.
V d :
fseek(stream, SEEK_SET, 0);
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.
110
Sau lnh fseek(fp,-1,SEEK_END);
ftell(fp) cho gi tr 2.
Cng dng :
Hm ghi n mu tin kch th-c 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 */
111
fclose(stream); /* ng tp */
return 0;
}
Cng dng :
Hm c n mu tin kch th-c size byte t tp fp ln ln vng nh ptr.
Hm s tr v mt gi tr bng s mu tin thc s c -c.
V d :
#include "string.h"
#include "stdio.h"
main()
{
FILE *stream;
char msg[] = "Kim tra";
char buf[20];
stream = fopen("DUMMY.FIL", "w+");
/* Vit vi d liu ln tp */
fwrite(msg, strlen(msg)+1, 1, stream);
/* Tm im u ca file */
fseek(stream, SEEK_SET, 0);
/* c s liu v hin th */
112
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
fclose(stream);
return 0;
}
Cng dng :
Hm ghi ln tp fp mt k t c m bng
m=ch % 256.
ch -c xem l mt gi tr nguyn khng du. Nu thnh cng hm cho m k t
-c ghi, tri li cho EOF
V d :
#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;
}
113
9.2.12.2. Cc hm getc v fgettc :
Cu trc ng php :
int gretc(FILE *fp);
int fputc(FILE *fp);
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 l-t 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 */
fseek(stream, 0, SEEK_SET);
do
{
114
/* c mt k t t tp */
ch = fgetc(stream);
/* Hin th k t */
putch(ch);
} while (ch != EOF);
fclose(stream);
return 0;
}
9.2.13. 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");
115
status = access("junk.jnk",0);
if (status == 0)
printf("Tp tn ti\n");
else
printf("Tp khng tn ti\n");
return 0;
}
116
Ch-ng 10
ho
10.1. Khi ng ho :
Mc ch ca vic khi ng h thng ho l xc nh thit b ho (mn hnh) v
mode ho s s dng trong ch-ng trnh. lm cng vic ny, ta c hm sau :
void initgraph(int *graphdriver,int graphmode,char *driverpath);
Trong :
driverpath l xu k t ch -ng dn n th- mc cha cc tp tin iu khin
ho.
graphdriver cho bit mn hnh ho s dng trong ch-ng trnh.
graphmode cho bit mode ho s dng trong ch-ng trnh.
Bng d-i y cho cc gi tr kh d ca graphdriver v graphmode :
graphdriver graphmode phn gii
DETECT (0)
CGA (1) CGAC0 (0) 320x200
CGAC1 (1) 320x200
CGAC2 (2) 320x200
CGAC3 (3) 320x200
CGAHi (4) 640x200
MCGA (2) MCGA0 (0) 320x200
MCGA1 (1) 320x200
MCGA2 (2) 320x200
MCGA3 (3) 320x200
MCGAMed (4) 640x200
MCGAHi (5) 640x480
EGA (3) EGAL0 (0) 640x200
EGAHi (1) 640x350
117
EGA64 (4) EGA64LO (0) 640x200
EGA64Hi (1) 640x350
EGAMONO (5) EGAMONOHi (0) 640x350
VGA (9) VGALO (0) 640x200
VGAMED (1) 640x350
VGAHI (2) 640x480
HERCMONO (7) HERCMONOHI 720x348
ATT400 (8) ATT400C0 (0) 320x200
ATT400C1 (1) 320x200
ATT400C2 (2) 320x200
ATT400C3 (3) 320x200
ATT400MED (4) 640x400
ATT400HI (5) 640x400
PC3270 (10) PC3270HI (0) 720x350
IBM8514 (6) PC3270LO (0) 640x480 256 mu
PC3270HI (1) 1024x768 256 mu
Ch :
Bng trn cho ta cc hng v gi tr ca chng m cc bin graphdtriver v
graphmode c th nhn. Chng hn hng DETECT c gi tr 0, hng VGA c gi tr
9, hng VGALO c gi tr 0 vv...
Khi lp trnh ta c th thay th vo v tr t-ng ng ca chng trong hm tn
hng hoc gi tr ca hng .
V d :
Gi s my tnh c mn hnh VGA, cc tp tin ho cha trong th- mc C:\TC \BGI,
khi ta khi ng h thng ho nh- sau :
#include "graphics.h"
main()
{
int mh=VGA,mode=VGAHI; /*Hoc mh=9,mode=2*/
initgraph(&mh,&mode,"C:\\TC\\BGI");
/* V k t \ trong C l k t c bit nn ta phi gp i n */
}
118
Bng trn cn cho thy phn gii cn ph thuc c vo mn hnh v mode. V d
nh- trong mn hnh EGA nu dng EGALo th phn gii l 640x200 ( Hm
getmaxx() cho gi tr cc i ca s im theo chiu ngang ca mn hnh. Vi mn
hnh EGA trn : 639, Hm getmaxy() cho gi tr cc i ca s im theo chiu dc
ca mn hnh. Vi mn hnh EGA trn : 199 ).
Nu khng bit chnh xc kiu mn hnh ang s dng th ta gn cho bin
graphdriver bng DETECT hay gi tr 0. Khi , kt qu ca initgraph s l :
Kiu mn hnh ang s dng -c pht hin, gi tr ca n -c gn cho bin
graphdriver.
Mode ho phn gii cao nht ng vi mn hnh ang s dng cng -c
pht hin v tr s ca n -c gn cho bin graphmode.
Nh- vy dng hng s DETECT chng nhng c th khi ng -c h thng
ho vi mn hnh hin c theo mode c phn gii cao nht m cn gip ta xc
nh kiu mn hnh ang s dng.
V d :
Ch-ng trnh d-i y xc nh kiu mn hnh ang s dng :
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
printf("\n Gia tri so cua man hinh la : %d",mh);
printf("\n Gia tri so mode do hoa la : %d",mode);
closegraph();
}
Nu chui dng xc nh driverpath l chui rng th ch-ng trnh dch s tm
kim cc file iu khin ho trn th- mc ch ( Th- mc hin thi ).
10.2. Cc hm ho :
10.2.1. Mu v mu :
t mu nn :
119
t mu cho nn ta dng th tc sau :
void setbkcolor(int mu);
t mu -ng v :
t mu v -ng ta dng th tc sau :
void setcolor(int mu);
t mu (kiu) t v mu t :
t mu (kiu) t v mu t ta dng th tc sau :
void setfillstyle(int mu, int mu);
Trong c ba tr-ng hp mu xc nh m ca mu.
Cc gi tr kh d ca mu cho bi bng d-i y :
Bng cc gi tr kh d ca mu
Tn hng Gi tr s Mu hin th
BLACK 0 en
BLUE 1 Xanh da tri
GREEN 2 Xanh l cy
CYAN 3 Xanh l
RED 4
MAGENTA 5 Tm
BROWN 6 Nu
LIGHTGRAY 7 Xm nht
DARKGRAY 8 Xm m
LIGHTBLUE 9 Xanh xa tri nht
LIGHTGREEN 10 Xanh l cy nht
LIGHTCYAN 11 Xanh l nht
LIGHTRED 12 nht
LIGHTMAGENTA 13 Tm nht
YELLOW 14 Vng
WHITE 16 Trng
120
SOLID_FILL 1 T bng -ng lin nt
LINE_FILL 2 T bng -ng --------
LTSLASH_FILL 3 T bng ///
SLASH_FILL 4 T bng /// in m
BKSLASH_FILL 5 T bng \\\ in m
LTBKSLASH_FILL 6 T bng \\\
HATCH_FILL 7 T bng -ng gch bng nht
XHATCH_FILL 8 T bng -ng gch bng ch thp
INTERLEAVE_FILL 9 T bng -ng t qung
WIDE_DOT_FILL 10 T bng du chm th-a
CLOSE_DOT_FILL 11 T bng du chm mau
Chn gii mu :
thay i gii mu -c nh ngha trong bng trn, ta s dng hm :
void setpalete(int s_th_t_mu, int mu );
V d :
Cu lnh :
setpalete(0,lightcyan);
bin mu u tin trong bng mu thnh mu xanh l nht. Cc mu khc khng b nh h-ng.
Ly gii mu hin thi :
+ Hm getcolor tr v mu xc nh bng th tc setcolor ngay tr-c
n.
+ Hm getbkcolor tr v mu xc nh bng hm setbkcolor ngay tr-c
n.
10.2.2. V v t mu :
C th chia cc -ng v hnh thnh bn nhm chnh :
Cung trn v hnh trn.
-ng gp khc v a gic.
-ng thng.
Hnh ch nht.
121
10.2.2.1. Cung trn v -ng trn :
Nhm ny bao gm : Cung trn, -ng trn, cung elip v hnh qut.
Cung trn :
v mt cung trn ta dng hm :
void arc(int x, int y, int gd, int gc, int r);
Trong :
(x,y) l to tm cung trn.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
r l bn knh cung trn .
V d :
V mt cung trn c tm ti (100,50), gc u l 0, gc cui l 180, bn knh 30.
arc(100,50,0,180,30);
-ng trn :
v -ng trn ta dng hm :
void circle(int x, int y, int r);
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 ).
122
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 :
Ch-ng trnh d-i 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()
{
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);
123
getch();
closegraph();
}
T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);
s v v t mu mt a gic c nh l cc im (x1,y1), (x2,y2), ...., (xn,yn)
V d :
V mt -ng gp khc v hai -ng tam gic.
#include "graphics.h"
#include "stdio.h"
#include "conio.h"
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};
124
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).
125
tc ng n nt v ca cc th tc v -ng line, lineto,linerel , circle, rectangle (hm v hnh
ch nht, ta s hc trong phn v min d-i).
Hm ny s cho php ta xc nh ba yu t khi v -ng thng, l : Kiu -ng, b
dy v mu t to.
Dng -ng do tham s kiu_-ng xc nh. Bng d-i y cho cc gi tr kh d
ca kiu_-ng :
V d :
Ch-ng trnh v mt -ng gp khc bng cc on thng. -ng gp khc i qua cc
nh sau :
(20,20),(620,20),(620,180),(20,180) v (320,100)
#include "graphics.h"
126
#include "stdio.h"
#include "conio.h"
main()
{
int mh=0, mode;
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();
}
Hm :
unsigned getpixel(int x, int y);
s tr v s hiu mu ca im nh v tr (x,y).
Ch :
Nu im ny ch-a -c t mu bi cc hm v hoc hm putpixel (m ch mi -c to
mu nn bi setbkcolor) th hm cho gi tr 0.
T min :
127
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.
+ Trong tr-ng hp khi trn mn hnh khng c -ng cong no nh- trn th c mn hnh s
-c t mu.
V d :
V mt -ng trn mu trn mn hnh mu xanh. To (x,y) ca im gieo -c
np t bn phm. Tu thuc gi tr c th ca x,y ch-ng trnh s t mu vng cho hnh trn hoc
phn mn hnh bn ngoi hnh trn.
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=mode=0, x, y;
printf("\nVao toa do x,y:");
scanf("%d%d",&x,&y);
initgraph(&mh,&mode,"");
if (graphresult != grOk) exit(1);
setbkcolor(BLUE);
setcolor(RED);
setfillstyle(11,YELLOW);
circle(320,100,50);
moveto(1,150);
floodfill(x,y,RED);
closegraph();
128
}
Hm :
void bar(int x1, int y1, int x2, int y2);
s v v t mu mt hnh ch nht. To nh tri trn ca hnh ch nht l (x1,y1) v to
nh phi d-i ca hnh ch nht l (x2,y2).
Hm :
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);
s v mt khi hp ch nht, mt ngoi ca n l hnh ch nht xc nh bi cc to (x1,y1),
(x2,y2). Hnh ch nht ny -c t mu thng qua hm setfillstyle . Tham s depth xc nh s
im nh trn b su ca khi 3 chiu. Tham s top c th nhn cc gi tr 1 hay 0 v khi 3
chiu t-ng ng s c np hoc khng.
top=1 top=0
V d :
Ch-ng trnh d-i 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;
129
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();
}
10.2.6. Ca s (Viewport) :
Thit lp viewport :
Viewport l mt vng ch nht trn mn hnh ho. thit lp viewport ta dng hm :
void setviewport(int x1, int y1, int x2, int y2, int clip);
trong (x1,y1) l to gc trn bn tri, (x2,y2) l to gc d-i bn phi. Bn gi tr ny v
th phi tho mn :
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 tr-c khi t viewport).
Ch :
Sau khi lp viewport, ta c h to mi m gc trn bn tri s c to (0,0).
130
void getviewsetting(struct viewporttype *vp);
y kiu viewporttype -c nh ngha nh- sau :
struct viewporttype
{
int left,top,right,bottom;
int clip;
};
Xa viewport :
S dng hm :
void clearviewport(void);
To m d-ng :
Nh s dng viewport c th vit cc ch-ng trnh ho theo to m d-ng. Mun
vy ta thit lp viewport v cho clip bng 0 c th v ra ngoi gii hn ca viewport.
Sau y l on ch-ng trnh thc hin cng vic trn :
int xc,yc;
xc=getmaxx()/2;
yc=getmaxy()/2;
setviewport(xc,yc,getmaxx(),getmaxy(),0);
Nh- th, mn hnh s -c chia lm bn phn vi to m d-ng 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 d-i : x m, y d-ng.
x : t -getmaxx()/2 n 0.
y : t 0 n getmaxy()/2.
Phn t- phi trn : x d-ng, y m.
x : t 0 n getmaxx()/2.
131
y : t -getmaxy()/2 n 0.
Phn t- phi d-i : x d-ng, y d-ng.
x : t 0 n getmaxx()/2.
y : t 0 n getmaxy()/2.
V d :
Ch-ng trnh v th hm sin x trong h trc to m d-ng. Honh x ly cc gi
tr t -4 n 4. Trong ch-ng 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);
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);
}
132
getch();
closegraph();
}
V d :
Hai cch vit d-i y :
outtextxy(50,50," Say HELLO");
v
moveto(50,50);
outtext(" Say HELLO");
S dng cc Fonts ch :
Cc Fonts ch nm trong cc tp tin *.CHR trn a. Cc Fonts ny cho cc kch th-c
v kiu ch khc nhau, chng s -c hin th ln mn hnh bng cc hm outtext v outtextxy.
chn v np Fonts ta dng hm :
void settextstyle(int font, int direction, int charsize);
Tham s font chn kiu ch v nhn mt trong cc hng sau :
DEFAULT_FONT=0
TRIPLEX_FONT=1
SMALL_FONT=2
133
SANS_SERIF_FONT=3
GOTHIC_FONT=4
Tham s derection chn h-ng ch v nhn mt trong cc hng sau :
HORIZ_DIR=0 vn bn hin th theo h-ng nm ngang t tri qua phi.
VERT_DIR=1 vn bn hin th theo h-ng thng ng t d-i ln trn.
V d :
Cc dng lnh :
settextstyle(3,VERT_DIR,2);
outtextxy(30,30,"GODS TRUST YOU");
s hin th ti v tr (30,30) dng ch GODS TRUST YOU theo chiu t d-i ln trn, font ch
chn l SANS_SERIF_FONT v c ch l 2.
134
V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm d-i ch B.
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();
}
135
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 th-c font
ch, h s phng i.
136
Mc lc
Gii thiu
Ch-ng 1
Cc khi nim c bn
1.1. Tp k t dng trong ngn ng C
1.2. T kho
1.3. Tn
1.4. Kiu d liu
1.4.1. Kiu k t (char)
1.4.2. Kiu nguyn
1.4.3. Kiu du phy ng
1.5. nh ngha kiu bng TYPEDEF
1.5.1. Cng dng
1.5.2. Cch vit
1.6. Hng
1.6.1. Tn hng
1.6.2. Cc loi hng
1.6.2.1. Hng int
1.6.2.2. Hng long
1.6.2.3. Hng int h 8
1.6.2.4. Hng int h 16
1.6.2.5. Hng k t
1.6.2.5. Hng xu k t
1.7. Bin
1.8. Mng
Ch-ng 2
Cc lnh vo ra
2.1. Thm nhp vo th- vin chun
2.2. Cc hm vo ra chun - getchar() v putchar()
2.2.1. Hm getchar()
2.2.2. Hm putchar()
2.2.3. Hm getch()
137
2.2.4. Hm putch()
2.3. -a kt qu ln mn hnh - hm printf
2.4. Vo s liu t bn phm - hm scanf
2.5. -a kt qu ra my in
Ch-ng 3
Biu thc
3.1. Biu thc
3.2. Lnh gn v biu thc
3.3. Cc php ton s hc
3.4. Cc php ton quan h v logic
3.5. Php ton tng gim
3.6. Th t -u tin cc php ton
3.7. Chuyn i kiu gi tr
Ch-ng 4
Cu trc c bn ca ch-ng trnh
4.1. Li ch thch
4.2. Lnh v khi lnh
4.2.1. Lnh
4.2.2. Khi lnh
4.3. Cu trc c bn ca ch-ng trnh
4.4. Mt s qui tc cn nh khi vit ch-ng trnh
Ch-ng 5
Cu trc iu khin
5.1. Cu trc c iu kin
5.1.1. Lnh if-else
5.1.2. Lnh else-if
5.2. Lnh nhy khng iu kin - ton t goto
5.3. Cu trc r nhnh - ton t switch
5.4. Cu trc lp
5.4.1. Cu trc lp vi ton t while v for
138
5.4.1.1. Cu trc lp vi ton t while
5.4.1.2. Cu trc lp vi ton t for :
5.4.2. Chu trnh do-while
5.5. Cu lnh break
5.6. Cu lnh continue
Ch-ng 6
Hm
6.1. C s
6.2. Hm khng cho cc gi tr
6.3. Hm qui
6.3.3. M u
6.3.2. Cc bi ton c th dng qui
6.3.3. Cch xy dng hm qui
6.3.4. Cc v d v dng hm qui
6.4. B tin s l C
Ch-ng 7
Con tr
7.1. Con tr v a ch
7.2. Con tr v mng mt chiu
7.2.1.Php ton ly a ch
7.2.2. Tn mng l mt hng a ch
7.2.3. Con tr tr ti cc phn t ca mng mt chiu
7.2.4. Mng, con tr v xu k t
7.3. Con tr v mng nhiu chiu
7.3.1.Php ly a ch
7.3.2. Php cng a ch trong mng hai chiu
7.3.3. Con tr v mng hai chiu
7.4. Kiu con tr kiu a ch, cc php ton trn con tr
7.4.1. Kiu con tr v kiu a ch
7.4.2. Cc php ton trn con tr
7.4.3. Con tr kiu void
139
7.5. Mng con tr
7.6. Con tr ti hm
7.6.1. Cch khai bo con tr hm v mng con tr hm
7.6.2. Tc dng ca con tr hm
7.6.3. i ca con tr hm
Ch-ng 8
Cu trc
8.1. Kiu cu trc
8.2. Khai bo theo mt kiu cu trc nh ngha
8.3. Truy nhp n cc thnh phn cu trc
8.4. Mng cu trc
8.5. Khi u mt cu trc
8.6. Php gn cu trc
8.7. Con tr cu trc v a ch cu trc
8.7.1. Con tr v a ch
8.7.2. Truy nhp qua con tr
8.7.3. Php gn qua con tr
8.7.4. Php cng a ch
8.7.5. Con tr v mng
8.8. Cu trc t tr v danh sch lin kt
Ch-ng 9
Tp tin - file
9.1. Khi nim v tp tin
9.2. Khai bo s dng tp - mt s hm th-ng dng khi thao tc trn tp
9.2.1. Khai bo s dng tp
9.2.2. M tp - hm fopen
9.2.3. ng tp - hm fclose
9.2.4. ng tt c cc tp ang m- hm fcloseall
9.2.5. Lm sch vng m - hm fflush
9.2.6. Lm sch vng m ca cc tp ang m - hm fflushall
9.2.7. Kim tra li file - hm ferror
140
9.2.8. Kimtra cui tp - hm feof
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tr ch v
9.2.9.1. Chuyn con tr ch v v u tp - Hm rewind
9.2.9.2. Chuyn con tr ch v tr cn thit - Hm fseek
9.2.9.3. V tr hin ti cu con tr ch v - Hm ftell
9.2.10. Ghi cc mu tin ln tp - hm fwrite
9.2.11. c cc mu tin t tp - hm fread
9.2.12. Nhp xut k t
9.2.12.1. Cc hm putc v fputc
9.2.12.2. Cc hm getc v fgettc
9.2.13. Xo tp - hm unlink
Ch-ng 10
ho
10.1. Khi ng ho
10.2. Cc hm ho
10.2.1. Mu v mu
10.2.2. V v t mu
10.2.3. V -ng gp khc v a gic
10.2.4. V im, min
10.2.5. Hnh ch nht
10.2.6. Ca s (Viewport)
10.3. S l vn bn trn mn hnh ho
Bi tp.
141
ti liu tham kho
1. Cc ti liu ting Vit :
1.1. Ng Trung Vit - Ngn ng lp trnh C v C++ - Bi ging- Bi tp - Li gii mu
NXB giao thng vn ti 1995
1.2. Vin tin hc - Ngn ng lp trnh C
H ni 1990
1.3. L Vn Doanh - 101 thut ton v ch-ng trnh bng ngn ng C
BI tp
Ngn ng lp trnh C
Phn 1 : Nhm cc bI tp v tnh ton, hm v chu trnh .
BI tp 1 :
Vit ch-ng trnh hin th thp PASCAL :
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
Vit ch-ng trnh hin th thp o ng-c.
BI tp 2 :
142
Vit ch-ng trnh nhp ba s thc. Kim tra xem ba s c th l chiu di ca ba cnh
ca mt tam gic -c khng? Nu -c th tnh chu vi v din tch tam gic .
BI tp 3 :
Vit ch-ng trnh tnh hm s :
f(x) = K0
x
K1+ -----------------------------------------
x
K2 + ------------------------
x
K3 + ----------------------
x
K4 + ---------------------
x
Kn-1 + -------------
Kn
Bi tp 4 :
Vit ch-ng trnh tnh tch hai ma trn C mxn = A mxn * B nxk .
Bi tp 5 :
Vit ch-ng trnh nhp vo mt dy s sau tch dy ny thnh hai dy ch cha cc
s d-ng v ch cha cc s m. Tnh tng s phn t ca mi dy sau sp xp hai
dy c gi tr gim dn.
Bi tp 6 :
Vit ch-ng trnh nhp vo mt ma trn A nxm. Tm gi tr cc i v cc tiu ca cc
phn t ca mng .
Bi tp 7 :
Trm tru,trm c
Tru ng n nm
Tru nm n ba
L kh tru gi
Ba con mt b.
Bi tp 8 :
Va g va ch
B li cho trn
ng ba su con
Mt trm chn chn .
143
Tnh s g, s ch .
Bi tp 9 :
144