Professional Documents
Culture Documents
Gio trnh C
Bin son: Nguyn Tun Anh
Gii thiu
Tin hc l mt ngnh khoa hc mi nhn pht trin ht sc nhanh chng trong vi
chc nm li y v ngy cng m rng lnh vc nghin cu, ng dng trong mi mt ca i
sng x hi.
Ngn ng lp trnh l mt loi cng c gip con ng-i th hin cc vn ca thc t
ln my tnh mt cch hu hiu. Vi s pht trin ca tin hc, cc ngn ng lp trnh cng
dn tin ho p ng cc thch thc mi ca thc t.
Khong cui nhng nm 1960 u 1970 xut hin nhu cu cn c cc ngn ng bc
cao h tr cho nhng nh tin hc trong vic xy dng cc phn mm h thng, h iu
hnh. Ngn ng C ra i t , n -c pht trin ti phng th nghim Bell. n nm
1978, gio trnh " Ngn ng lp trnh C " do chnh cc tc gi ca ngn ng l Dennish
Ritchie v B.W. Kernighan vit, -c xut bn v ph bin rng ri.
C l ngn ng lp trnh vn nng. Ngoi vic C -c dng vit h iu hnh UNIX,
ng-i ta nhanh chng nhn ra sc mnh ca C trong vic x l cho cc vn hin i ca
tin hc. C khng gn vi bt k mt h iu hnh hay my no, v mc du n -c gi l
" ngn ng lp trnh h thng" v n -c dng cho vic vit h iu hnh, n cng tin li
cho c vic vit cc ch-ng trnh x l s, x l vn bn v c s d liu.
V by gi chng ta i tm hiu th gii ca ngn ng C t nhng khi nim ban u
c bn nht.
Mc lc
cc khi nim c bn ................................................................................ 6
1.1. Tp k t dng trong ngn ng C : ............................................................. 6
1.2. T kho : ..................................................................................................... 6
1.3. Tn : ............................................................................................................ 7
1.4. Kiu d liu : .............................................................................................. 7
1.4.1. Kiu k t (char) : .................................................................................................... 7
1.4.2. Kiu nguyn :........................................................................................................... 9
1.4.3. Kiu du phy ng : ................................................................................................ 9
2.5. -a kt qu ra my in :............................................................................. 28
Biu thc ........................................................................................................ 30
3.1. Biu thc : ................................................................................................. 30
3.3. Cc php ton s hc : .............................................................................. 31
3.4. Cc php ton quan h v logic : .............................................................. 32
3.5. Php ton tng gim : ............................................................................... 33
3.6. Th t -u tin cc php ton : .................................................................. 34
3.7. Chuyn i kiu gi tr : ........................................................................... 35
Cu trc c bn ca ch-ng trnh ................................................. 38
4.1. Li ch thch : ........................................................................................... 38
4.2. Lnh v khi lnh : ................................................................................... 39
4.2.1. Lnh : ...................................................................................................................... 39
4.2.2. Khi lnh : .............................................................................................................. 39
7.4. Kiu con tr, kiu a ch, cc php ton trn con tr : ........................... 82
7.4.1. Kiu con tr v kiu a ch : .................................................................................. 82
Cu trc ......................................................................................................... 93
8.1. Kiu cu trc : ........................................................................................... 93
8.2. Khai bo theomt kiu cu trc nh ngha : ...................................... 95
8.3. Truy nhp n cc thnh phn cu trc : .................................................. 98
8.4. Mng cu trc : ....................................................................................... 101
8.5. Khi u mt cu trc : .......................................................................... 103
8.6. Php gn cu trc : .................................................................................. 103
8.7. Con tr cu trc v a ch cu trc : ...................................................... 104
8.8. Cu trc t tr v danh sch lin kt : ................................................... 107
tp tin - file ................................................................................................ 115
9.1. Khi nim v tp tin :.............................................................................. 115
9.2. Khai bo s dng tp - hm th-ng dng khi thao tc trn tp : .......... 116
9.2.1. Khai bo s dng tp : .......................................................................................... 116
9.2.2. M tp - hm fopen :............................................................................................ 116
9.2.3. ng tp - hm fclose : ......................................................................................... 118
9.2.4. ng tt c cc tp ang m- hm fcloseall : ....................................................... 119
9.2.5. Lm sch vng m - hm fflush : ....................................................................... 119
9.2.6. Lm sch vng m ca cc tp ang m - hm fflushall : .................................. 119
9.2.7. Kim tra li file - hm ferror : .............................................................................. 120
9.2.8. Kimtra cui tp - hm feof : ................................................................................ 120
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tr ch v : .................................. 121
9.2.10. Ghi cc mu tin ln tp - hm fwrite : ................................................................ 123
4
ho............................................................................................................ 130
10.1. Khi ng ho : ............................................................................... 130
10.2. Cc hm ho : .................................................................................. 133
10.2.1. Mu v mu : ...................................................................................................... 133
10.2.2. V v t mu : ..................................................................................................... 135
10.2.3. V -ng gp khc v a gic : .......................................................................... 138
10.2.4. V im, min : .................................................................................................. 142
10.2.5. Hnh ch nht : ................................................................................................... 144
10.2.6. Ca s (Viewport) : ............................................................................................. 145
Ch-ng 1
cc khi nim c bn
1.1. Tp k t dng trong ngn ng C :
Mi ngn ng lp trnh u -c xy dng t mt b k t no . Cc k t -c
nhm li theo nhiu cch khc nhau to nn cc t. Cc t li -c lin kt vi nhau theo
mt qui tc no to nn cc cu lnh. Mt ch-ng trnh bao gm nhiu cu lnh v th
hin mt thut ton gii mt bi ton no . Ngn ng C -c xy dng trn b k t sau :
26 ch ci hoa : A B C .. Z
26 ch ci th-ng : a b c .. z
10 ch s : 0 1 2 .. 9
Cc k hiu ton hc : + - * / = ( )
K t gch ni : _
Cc k t khc : . , : ; [ ] {} ! \ & % # $ ...
Du cch (space) dng tch cc t. V d ch VIET NAM c 8 k t, cn
VIETNAM ch c 7 k t.
Ch :
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 :
char
do
extern
goto
interrupt
register
sizeof
tipedef
volatile
const
double
far
huge
long
return
static
union
while
continue
else
float
if
near
short
struct
unsigned
default
enum
for
int
pascal
signed
switch
void
- 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-CompilerSource-Identifier length khi dng TURBO C.
V d :
Cc tn ng :
a_1
Cc tn sai
delta
x1
_step GAMA
:
3MN
K t u tin l s
m#2
S dng k t #
f(x)
S dng cc du ( )
do
Trng vi t kho
te ta
S dng du trng
Y-3
S dng du -
Ch :
Trong TURBO C, tn bng ch 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 ht cho cc i l-ng khc nh- bin, bin mng, hm, cu trc. Tuy nhin y khng
phi l iu bt buc.
M ASCII
048
049
050
065
066
097
098
S k t
Kch
th-c
-128 n 127
256
1 byte
0 n 255
256
1 byte
Unsigned char
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.
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.
8
Kch th-c
-32768 n 32767
2 byte
0 n 65535
2 byte
-2147483648 n 2147483647
4 byte
0 n 4294967295
4 byte
unsigned int
long
unsigned long
Ch :
S ch s
Kch th-c
c ngha
Float
3.4E-38 n 3.4E+38
7 n 8
4 byte
Double
1.7E-308 n 1.7E+308
15 n 16
8 byte
long double
3.4E-4932 n 1.1E4932
17 n 18
10 byte
Gii thch :
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.
10
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 :
#define tn hng gi tr
10
11
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.
1.6.2. Cc loi hng :
1.6.2.1. Hng int :
Hng int l s nguyn c gi tr trong khong t -32768 n 32767.
V d :
#define number1 -50
Ch :
Cn phn bit hai hng 5056 v 5056.0 : y 5056 l s nguyn cn 5056.0 l hng
thc.
1.6.2.2. 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 v-t ra ngoi min xc nh ca int cng -c xem l long.
V d :
#define sl 8865056L
#define sl 8865056
11
12
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'.
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
12
13
V d :
#define kt 'a'
nh nghi hng k t kt c gi tr l 97
K t
'\''
'
'\"'
"
'\\'
'\n'
\n (chuyn dng )
'\0'
\0 ( null )
'\t'
Tab
'\b'
Backspace
'\r'
CR ( v u dng )
'\f'
LF ( sang trang )
Ch :
Cn phn bit hng k t '0' v '\0'. Hng '0' ng vi ch s 0 c m ASCII l 48,
cn hng '\0' ng vi kt \0 ( 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"
13
14
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;
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 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;
int d; /* V tr ca khai bo sai */
.....
14
15
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 :
int a[10],b[4][2];
float x[5],y[3][3];
s xc nh 4 mng v ngha ca chng nh- sau :
15
Th t
Tn mng
Kiu mng
S chiu
Kch th-c
Cc phn t
Int
10
a[0],a[1],a[2]...a[9]
Int
4x2
b[0][0], b[0][1]
16
b[1][0], b[1][1]
b[2][0], b[2][1]
b[3][0], b[3][1]
Float
x[0],x[1],x[2]...x[4]
Float
3x3
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]
a[2]
b[j+i][2-i]
b[3][0]
y[i][j]
y[2][1]
16
17
Ch :
Mng c bao nhiu chiu th ta phi vit n c by nhiu ch s. V th nu ta vit nhsau s l sai : y[i] ( V y l mng 2 chiu ) vv..
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].
Khi u cho bin mng :
Cc bin mng khai bo bn trong thn ca mt hm ( k c hm main() ) gi l bin
mng cc b.
Mun khi u cho mt mng cc b ta s dng ton t gn trong thn hm.
Cc bin mng khai bo bn ngoi thn ca mt hm gi l bin mng ngoi.
18
{12,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}
};
18
19
....
i vi mng hai chiu, c th khi u vi s gi tr khi u ca mi hng c th
khc nhau :
V d :
....
float z[][3]={
{31.5},
{12,13},
{-45.76}
};
int z[13][2]={
{31.11},
{12},
{45.14,15.09}
};
19
20
Ch-ng 2
Cc lnh vo ra
20
21
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.
V d :
c = getch();
21
22
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.
sang dng mi
\f
sang trang mi
\b
li li mt b-c
\t
du tab
23
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
rng trn thit b ra dnh cho kt qu s bng chnh di ca n.
th
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
-2503
-2503
08
-2503
-2503
khng
-2503
-2503
08
khng
000-2503
"abcdef"
khng
abcdef
"abcdef"
08
"abcdef"
08
khng
abcdef
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 :
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.
23
24
V d :
Kt qu ra
fw
pp
Du -
Kt qu -a
ra
di
tr-ng 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
24
25
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
n=8
25.500000
-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 *
25
26
cho a
26
27
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 ]
Cc k t chuyn dng v ngha ca n :
c
ld
lo
lx
f hay e
lf hay le
V d :
int a,b;
char ch[10], ck[10];
scanf("%d%[0123456789]%[^0123456789]%3d",&a,ch,ck,&b);
27
28
Vi dng vo :
35 13145 xyz 584235
S gn :
35 cho a
xu "13145" cho ch
xu "xyz' cho ck
584 cho b
Ch :
Xt on 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.
28
29
29
30
Ch-ng 3
Biu thc
31
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);
nghi
V d
Php cng
a+b
Php tr
a-b
Php nhn
a*b
Php chia
a/b
( Chia s nguyn s cht phn thp phn )
Php ly phn d-
a%b
( Cho phn d- ca php chia a cho b )
31
32
nghi
V d
>
So snh ln hn
a>b
4>5 c gi tr 0
>=
a>=b
6>=2 c gi tr 1
<
So snh nh hn
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 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).
32
33
!a
khc 0
bng 0
a&&b
a||b
khc 0
khc 0
khc 0
bng 0
bng 0
khc 0
bng 0
bng 0
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--.
33
34
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
x=n++
Php ton
Trnh t kt hp
() [] ->
* ( php nhn ) / %
+-
<< >>
== !=
&
10
11
&&
12
||
13
?:
14
15
34
35
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]
.
-> 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.
36
V d :
(float) (a+b)
Chuyn i kiu trong biu thc :
Khi hai ton hng trong mt php ton c kiu khc nhau th kiu thp hn s -c
nng thnh kiu cao hn tr-c 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
36
37
37
38
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);
38
39
/* Gii phng b nh */
free(str);
return 0;
}
40
a==b==3;
x=5.5; y=a*x;
z=b*x;
printf("\n y= %8.2f\n z=%8.2f",y,z);
}
S lng nhau ca cc khi lnh v phm vi hot ng ca cc bin v mng :
Bn trong mt khi lnh li c th vit lng khi lnh khc. S lng nhau theo cch
nh- vy l khng hn ch.
Khi my bt u lm vic vi mt khi lnh th cc bin v mng khai bo bn trong
n mi -c hnh thnh v -c hnh thnh v -c cp pht b nh. Cc bin ny ch tn ti
trong thi gian my lm vic bn trong khi lnh v chng lp tc bin mt ngay sau khi my
ra khi khi lnh. Vy :
Gi tr ca mt bin hay mt mng khai bo bn trong mt khi lnh khng th -a ra
s dng bt k ch no bn ngoi khi lnh .
bt k ch no bn ngoi mt khi lnh ta khng th can thip n cc bin v cc
mng -c khai bo bn trong khi lnh
Nu bn trong mt khi ta dng mt bin hay mt mng c tn l a th iu ny khng
lm thay i gi tr ca mt bin khc cng c tn l a ( nu c ) -c dng u bn
ngoi khi lnh ny.
Nu c mt bin -c khai bo ngoi mt khi lnh v khng trng tn vi cc
bin khai bo bn trong khi lnh ny th bin cng c th s dng c bn trong cng nhbn 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);
}
40
41
.....
hm n
41
42
Cc #include
Cc #define
Hm main().
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);
}
42
43
43
44
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.
if ( biu thc )
khi lnh 1;
else
khi lnh 2 ;
/* Dng hai */
45
trnh. Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin
khi lnh 2 sau thc hin tip cc lnh tip sau khi lnh 2 trong 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);
}
45
46
/* 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;
46
47
48
.....
n1: printf("\n Gia tri cua N la: ");
.....
}
48
49
V d :
Tnh tng s=1+2+3+....+10
#include "stdio.h"
main() {
int s,i;
i=s=0;
tong:
++i;
s=s+i;
if (i<10) goto tong;
printf("\n tong s=%d",s);
}
50
51
case 0:
case 1:
case 2:
case 3:printf("Kem\n");break;
case 4:printf("Yeu\n");break;
case 5:
case 6:printf("Trung binh\n");break;
case 7:
case 8:printf("Kha\n");break;
case 9:
case 10:printf("Gioi\n");break;
default:printf(Vao sai\n);
}
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.
51
52
53
53
54
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 nh-ng phi
gi du ; .
Thng th-ng 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 b-c sau :
Xc nh biu thc 1
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 b-c 2 bt u mt vng mi ca chu trnh.
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.
54
55
55
56
56
57
58
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 ");
58
59
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);
}
59
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);
60
60
61
Ch-ng 6
Hm
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 :
61
62
float x,y,z;
printf("\n Vao ba so x,y,z:");
scanf("%f%f%f",&x&y&z);
printf("\n Max cua ba so x=%8.2f y=%8.2f z=%8.2f la : %8.2f",
x,y,z,max3s(x,y,z));
/* Kt thc hm main*/
float max;
max=a;
if (max<b) max=b;
if (max<c) max=c;
62
63
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.
Cc tham s thc, cc i v bin cc b :
Do i v bin cc b u c phm vi hot ng trong cng mt hm nn i v bin
cc b cn c tn khc nhau.
i v bin cc b u l cc bin t ng. Chng -c cp pht b nh khi hm -c
xt n v b xo khi ra khi hm nn ta khng th mang gi tr ca i ra khi hm.
i v bin cc b c th trng tn vi cc i l-ng ngoi hm m khng gy ra
nhm ln no.
Khi mt hm -c gi ti, vic u tin l gi tr ca cc tham s thc -c gn cho
cc i ( trong v d trn hm max3s, cc tham s thc l x,y,z, cc i t-ng ng l a,b,c ).
Nh- vy cc i chnh l cc bn sao ca cc tham s thc. Hm ch lm vic trn cc i.
Cc i c th b bin i trong thn hm, cn cc tham s thc th khng b thay i.
Ch :
Khi hm khai bo khng c kiu tr-c n th n -c mc nh l kiu int.
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.
63
64
6.3. Hm qui :
6.3.1. M u :
C khng nhng cho php t hm ny gi ti hm khc, m n cn cho php t mt
im trong thn ca mt hm gi ti chnh hm . Hm nh- vy gi l hm qui.
Khi hm gi qui n chnh n, th mi ln gi my s to ra mt tp cc bin cc b
mi hon ton c lp vi tp cc bin cc b -c to ra trong cc ln gi 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*/
{
64
65
nu n=0
n!=n*(n-1)!
nu n>0
66
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))
}
67
67
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)
{
68
68
69
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 :
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.
69
70
71
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;
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))
71
72
72
73
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
73
74
V d :
Nh- trong v d trn, ta khai bo con tr px kiu int :
int *px;
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.
74
75
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].
*(a+i)
p[i]
*(p+i)
V d :
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;
76
76
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];
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
}
Cch 3 :
#include "stdio.h"
main()
{
77
77
78
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.
79
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.
79
80
7.3.1.Php ly a ch :
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;
}
}
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
a ch
80
81
V d :
Dng con tr vo s liu cho mng hai chiu.
Cch 1 :
#include "stdio.h"
81
82
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()
{
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 :
82
83
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;
pc=(char*)(&x);
83
84
cho con tr px l con tr float tr ti phn t x[10]. Kiu a ch float l kiu a ch 4 byte,
nn cc php tng gim a ch -c thc hin trn 4 byte. V th :
px+i tr ti phn t x[10+i]
px-i tr ti phn t x[10-i]
Xt v d khc :
Gi s ta khai bo :
float b[40][50];
Khai bo trn cho ta mt mng b gm cc dng 50 phn t thc. Kiu a ch ca b l
50*4=200 byte.
Do vy :
b tr ti u dng th nht ( phn t b[0][0]).
b+1 tr ti u dng th hai ( phn t b[1][0]).
..........
b+i tr ti u dng th i ( phn t b[i][0]).
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.
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.
84
85
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)
85
86
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 :
87
*(pc+i*N+j)=*(pa+i*N+j)+*(pb+i*N+j);
}
V i l con tr void nn n c th nhn -c a ch ca cc ma trn trong li gi
hm. Tuy nhin ta khng th s dng trc tip cc i con tr void trong thn hm m phi
chuyn kiu ca chng sang thnh float.
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.
87
88
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;
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"
88
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 :
V d 2:
Cu lnh :
double (*g)(int, double),(*mg[30])(double, float);
khai bo :
89
89
90
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 */
{
return(x>y ? x:y);
}
double (*pf)(double,double); /* Khai bo con tr hm*/
91
pf=fmax;
printf("\n max=%f",pf(5.0,9.6));
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;
}
91
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;
}
}
92
92
93
Ch-ng 8
Cu trc
(1)
};
Trong :
struct l t kho
Thnh phn ca cu trc c th l : bin, mng, cu trc khc -c nh ngha tr-c vv..
93
94
V d :
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;
};
95
} 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;
96
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)
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];
96
97
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;
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];
97
98
int nam;
} ngaydi,ngayden;
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;
98
99
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 :
100
V d :
Gi s ta lp trnh qun l thng tin cn b. Gi s mi d liu ca mt cn b gm :
Bc l-ng.
Vo s lu ca mt cn b.
-a s liu ra my in.
101
102
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
hai nhm ny c kiu canbo.
ca
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);
102
103
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];
103
ds l mng cu trc
104
/* 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 */
105
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
105
106
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]
ds[i].ngaysinh.nam
+ p[i].thnh_phn
p[i].ngaysinh.nam
+ (p+i)->thnh_phn (p+i)->ngaysinh.nam
p[i]
107
*(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;
107
108
person *tiep;
};
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 ).
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 :
109
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 )
To danh sch mi :
109
110
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"
#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 */
110
111
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;
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 : ");
111
{
pcuoi->tiep=p;
pcuoi=p;
p->tiep=NULL;
}
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=pdau;
while (p!=NULL)
{
printf("\n Ho ten: %25s Que : %20s Tuoi :
%d",(*p).ht,(*p).qq,(*p).tuoi);
p=p->tiep;
}
112
112
113
113
}
getch();
}
114
114
115
Ch-ng 9
tp tin - file
D liu ghi ln tp theo cc byte nh phn nh- b nh, trong qu trnh nhp xut,
d liu khng b bin i.
116
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;
9.2.2. M tp - hm fopen :
Cu trc ng php ca hm :
FILE *fopen(const char *tn_tp, const char *kiu);
116
117
Cng dng :
Hm dng m tp. Nu thnh cng hm cho con tr kiu FILE ng vi tp va m.
Cc hm cp hai s lm vic vi tp thng qua con tr ny. Nu c li hm s tr v gi tr
NULL.
Bng sau ch ra cc gi tr ca kiu :
Tn kiu
ngha
"r" "rt"
"w" "wt"
"a" "at"
"rb"
"wb"
"ab"
"r+" "r+t"
"w+" "w+t"
"a+" "a+t"
"r+b"
"a+b"
118
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.
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 :
V d :
118
119
fclose(f);
V d :
fcloseall();
V d :
fflush(f);
120
int fflushall(void);
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.
Cng dng :
120
121
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);
122
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);
122
fseek(fp,-1,SEEK_END);
ftell(fp) cho gi tr 2.
l s mu tin cn ghi
fp
l con tr tp
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()
123
123
l s mu tin cn ghi
fp
l con tr tp
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 :
124
124
125
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;
}
126
127
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
{
/* c mt k t t tp */
ch = fgetc(stream);
/* Hin th k t */
putch(ch);
127
128
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");
128
129
129
130
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 :
graphmode
phn gii
DETECT (0)
CGA (1)
CGAC0 (0)
320x200
CGAC1 (1)
320x200
CGAC2 (2)
320x200
CGAC3 (3)
320x200
CGAHi (4)
640x200
130
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
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
EGA (3)
EGA64 (4)
Ch :
131
131
132
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 */
}
V d :
132
133
10.2. Cc hm ho :
10.2.1. Mu v mu :
t mu nn :
t mu cho nn ta dng th tc sau :
void setbkcolor(int mu);
t mu -ng v :
t mu v -ng ta dng th tc sau :
void setcolor(int mu);
t mu (kiu) t v mu t :
t mu (kiu) t v mu t ta dng th tc sau :
void setfillstyle(int mu, int mu);
133
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
Gi tr s
Kiu mu t
EMPTY_FILL
T bng mu nn
SOLID_FILL
LINE_FILL
LTSLASH_FILL
T bng ///
SLASH_FILL
T bng /// in m
134
134
T bng \\\ in m
LTBKSLASH_FILL
T bng \\\
HATCH_FILL
XHATCH_FILL
INTERLEAVE_FILL
WIDE_DOT_FILL
10
CLOSE_DOT_FILL
11
135
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.
10.2.2. V v t mu :
C th chia cc -ng v hnh thnh bn nhm chnh :
-ng thng.
135
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);
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);
136
136
137
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 :
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 .
137
138
# 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);
getch();
closegraph();
}
V -ng gp khc :
139
Sau gi hm :
drawpoly(n,a);
Nu im cui cng (xn,yn) trng vi im u (x1,y1) th ta nhn -c mt -ng
gp khc khp kn.
T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);
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};
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);
139
140
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).
Tn hng
Gi tr s
Kiu -ng
SOLID_LINE
Nt lin
DOTTED_LINE
Nt chm
CENTER_LINE
Nt chm gch
DASHED_LINE
Nt gch
USERBIT_LINE
Mu t to
141
Gi tr s
B dy
NORM_WIDTH
B dy bnh th-ng
THICK_WIDTH
B dy gp ba
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"
#include "stdio.h"
#include "conio.h"
141
V im :
Hm :
void putpixel(int x, int y, int color);
Hm :
unsigned getpixel(int x, int y);
s tr v s hiu mu ca im nh v tr (x,y).
Ch :
142
142
143
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.
+ 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,"");
143
144
Hm :
void rectangle(int x1, int y1, int x2, int y2);
Hm :
void bar(int x1, int y1, int x2, int y2);
Hm :
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);
144
top=1
145
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;
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 :
145
146
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).
Xa viewport :
S dng hm :
146
147
void clearviewport(void);
To m d-ng :
147
148
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);
148
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 :
149
149
150
VERT_DIR=1
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.
151
CENTER_TEXT
RIGHT_TEXT
V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm d-i 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 :
151
152
#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 th-c
font ch, h s phng i.
152
Ch-ng 2
153
153
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
154
154
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
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
155
155
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
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
156
156
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
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
157
157
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
158
158
159
Bi tp.
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 :
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 .
159
160
160
161
161
162
BI tp
Ngn ng lp trnh C
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 :
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+ ----------------------------------------162
163
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
163
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 .
Tnh s g, s ch .
164
164