Professional Documents
Culture Documents
Lâp Trình C
Lâp Trình C
net
Gii thiu
H ni thng 11 nm 1997
Nguyn Hu Tun
Chng 1
cc khi nim c bn
break
case
cdecl
char
const
continue
default
do
double
else
enum
extern
far
float
for
goto
huge
if
int
interrupt
long
near
pascal
register
return
short
signed
sizeof
static
struct
switch
tipedef
union
unsigned
void
volatile
while
V d :
Cc tn ng :
a_1
Cc tn sai
delta
x1
_step
GAMA
:
3MN
K t u tin l s
m#2
S dng k t #
f(x)
S dng cc du ( )
do
Trng vi t kho
te ta
S dng du trng
Y-3
S dng du -
Ch :
Trong TURBO C, tn bng ch thng v ch hoa l khc nhau v d tn AB khc vi ab.
trong C, ta thng dng ch hoa t tn cho cc hng v dng ch thng t tn cho hu
ht cho cc i lng khc nh bin, bin mng, hm, cu trc. Tuy nhin y khng phi l iu
bt buc.
M ASCII
048
049
050
065
066
097
098
S k t
Kch
thc
-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 chng trnh sau :
char ch1;
unsigned char ch2;
......
ch1=200; ch2=200;
Khi thc cht :
ch1=-56;
ch2=200;
Nhng c ch1 v ch2 u biu din cng mt k t c m 200.
Phn loi k t :
C th chia 256 k t lm ba nhm :
Kch thc
-32768 n 32767
2 byte
0 n 65535
2 byte
-2147483648 n 2147483647
4 byte
0 n 4294967295
4 byte
int
unsigned int
long
unsigned long
Ch :
Kiu k t cng c th xem l mt dng ca kiu nguyn.
S ch s
Kch thc
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 lu tr c cc s kiu float c gi tr tuyt i t 3.4E-38 n 3.4E+38.
Cc s c gi tr tuyt i nh hn3.4E-38 c xem bng 0. Phm vi biu din ca s double
c hiu theo ngha tng t.
1.6. Hng :
Hng l cc i lng 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
V d :
#define MAX 1000
Lc ny, tt c cc tn MAX trong chng trnh xut hin sau ny u c thay bng
1000. V vy, ta thng 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
#define sl 8865056
V d :
#define h8 0345
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
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 ( thng gi l k t null ) c m ASCII l 0.
Hng k t thc s l mt s nguyn, v vy c th dng cc s nguyn h 10 biu
din cc k t, v d lnh printf("%c%c",65,66) s in ra AB.
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"
Xu k t c lu tr trong my di dng mt bng c cc phn t l cc k t ring
bit. Trnh bin dch t ng thm k t null \0 vo cui mi xu ( k t \0 c xem l du hiu
kt thc ca mt xu k t ).
Ch :
Cn phn bit hai hng 'a' v "a". 'a' l hng k t c lu tr trong 1 byte, cn "a" l
hng xu k t c lu tr trong 1 mng hai phn t : phn t th nht cha ch a cn phn t
th hai cha \0.
1.7. Bin :
Mi bin cn phi c khai bo trc 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 tng t.
Cc bin kiu char ch cha c mt k t. lu tr c mt xu k t cn s dng mt mng
kiu char.
V tr ca khai bo bin :
Cc khai bo cn phi c t ngay sau du { u tin ca thn hm v cn ng trc
mi cu lnh khc. Sau y l mt v d v khai bo bin sai :
( Khi nim v hm v cu trc chng trnh s nghin cu sau ny)
main()
{
int a,b,c;
a=2;
int d; /* V tr ca khai bo sai */
.....
}
Khi u cho bin :
10
V d :
int a,b=20,c,d=40;
float e=-55.2,x=27.23,y,z,t=18.98;
Vic khi u v vic khai bo bin ri gn gi tr cho n sau ny l hon ton tng ng.
Ly a ch ca bin :
Mi bin c cp pht mt vng nh gm mt s byte lin tip. S hiu ca byte u
chnh l a ch ca bin. a ch ca bin s c s dng trong mt s hm ta s nghin cu sau
ny ( v d nh hm scanf ).
ly a ch ca mt bin ta s dng php ton :
& tn bin
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 nhng cch ny khng thun li. Trong trng 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 thc 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 thc mi chiu thng qua cc v d c th di 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 :
11
Th t
Tn mng
Kiu mng
S chiu
Kch thc
Cc phn t
Int
10
a[0],a[1],a[2]...a[9]
Int
4x2
b[0][0], b[0][1]
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 vt qu kch thc tng 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]
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..
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]
12
b[1.9] l a[1]
*
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, nhng 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] nhng 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.
13
}
Khi khi u mng ngoi c th khng cn ch ra kch thc ( 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 thc ca mng, th kch thc ny cn khng nh hn kch thc 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 :
....
float z[][3]={
{31.5},
{12,13},
{-45.76}
};
14
int z[13][2]={
{31.11},
{12},
{45.14,15.09}
};
Khi u ca mt mng char c th l
Mt danh sch cc hng k t.
Mt hng xu k t.
V d :
char ten[]={'h','a','g'}
char ho[]='tran'
char dem[10]
="van"
15
Chng 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 lu 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.
sang dng mi
\f
sang trang mi
\b
li li mt bc
\t
du tab
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
bn phi hoc
bn tri.
Khi khng c fw hoc fw nh hn hay bng di thc t ca kt qu ra th
nguyn
ca i tng 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 tng ng l mt xu k t hoc mt
gi tr kiu float hay double.
Trong trng hp i tng ng c gi tr kiu float hay double th pp l
chnh xc ca trng ra. Ni mt cch c th hn gi tr in ra s c pp ch s
phn.
Khi vng mt pp th chnh xc s c xem l 6.
Khi i l xu k t :
19
sau
thp
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
trng ra
-435.645
10
-435.65
-435.645
10
-436
-435.645
vng
-435.645000
11
"alphabeta"
vng
alp
"alphabeta"
vng
vng
vng
alphabeta
"alpha"
alpha
ngha
20
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 tng ng vi
printf("\n%f\n%8.2f",x,n,y);
V n=8 tng 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
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
22
ld
lo
lx
f hay e
lf hay le
23
xu "xyz' cho ck
584 cho b
Ch :
Xt on chng trnh dng nhp ( t bn phm ) ba gi tr nguyn ri gn cho ba bin
a,b,c nh sau :
int a,b,c;
scanf("%d%d%d,&a,&b,&c);
vo s liu ta c th thao tc theo nhiu cch khc nhau:
Cch 1 :
a ba s vo cng mt dng, cc s phn cch nhau bng du cch hoc du tab.
Cch 2 :
a ba s vo ba dng khc nhau.
Cch 3 :
Hai s u cng mt dng ( cch nahu bi du cch ho tab ), s th ba trn dng tip
theo.
Cch 4 :
S th nht trn mt dng, hai s sau cng mt dng tip theo ( cch nahu bi du cch
ho tab ), s th ba trn dng tip theo.
Khi vo sai s bo li v nhy v chng 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 chng 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
Chng 3
Biu thc
26
Biu thc gn c th s dng trong cc php ton v cc cu lnh nh cc biu thc khc.
V d nh khi ta vit
a=b=5;
th iu c ngha l gn gi tr ca biu thc b=5 cho bin a. Kt qa l b=5 v a=5.
Hon ton tng t nh :
a=b=c=d=6; gn 6 cho c a, b, c v d
V d :
z=(y=2)*(x=6); { y * l php ton nhn }
gn 2 cho y, 6 cho x v nhn hai biu thc li cho ta z=12.
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 )
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
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 nhng thp
hn s th t ca bn php u.
Cc php ton quan h c s th t u tin thp hn so vi cc php ton s hc, cho nn
biu thc :
i<n-1
c hiu l i<(n-1).
Cc php ton logic :
Trong C s dng ba php ton logic :
Php ph nh mt ngi !
a
!a
khc 0
bng 0
a&&b
28
a||b
khc 0
khc 0
khc 0
bng 0
bng 0
khc 0
bng 0
bng 0
Ch :
C a v b c th l nguyn hoc thc.
3.5. Php ton tng gim :
C a ra hai php ton mt ngi tng v gim cc bin ( nguyn v thc ). Ton t tng
l ++ s cng 1 vo ton hng ca n, ton t gim -- th s tr ton hng i 1.
V d :
n=5
++n
Cho ta n=6
--n
Cho ta n=4
Ta c th vit php ton ++ v -- trc hoc sau ton hng nh sau : ++n, n++, --n, n--.
S khc nhau ca ++n v n++ ch : trong php n++ th tng sau khi gi tr ca n c s
dng, cn trong php ++n th n c tng trc khi s dng. S khc nhau gia n-- v --n cng
nh vy.
V d :
n=5
x=++n
x=n++
29
Php ton
Trnh t kt hp
() [] ->
* ( php nhn ) / %
+-
<< >>
== !=
&
10
11
&&
12
||
13
?:
14
15
Ch thch :
Cc php ton tn mt dng c cng th t u tin, cc php ton hng trn c s u
tin cao hn cc s hng di.
i vi cc php ton cng mc u tin th trnh t tnh ton c th t tri qua phi hay
ngc li c ch ra trong ct trnh t kt hp.
V d :
*--px=*(--px) ( Phi qua tri )
8/4*6=(8/4)*6 ( Tri qua phi )
Nn dng cc du ngoc trn vit biu thc mt cch chnh xc.
Cc php ton l :
Dng 1
[ ] Dng biu din phn t mng, v d : a[i][j]
.
-> Dng biu din thnh phn cu trc thng qua con tr
30
Dng 2
* Dng khai bo con tr, v d : int *a
& Php ton ly a ch, v d : &x
( type) l php chuyn i kiu, v d : (float)(x+y)
Dng 15
Ton t , thng dng vit mt dy biu thc trong ton t for.
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 trc khi thc hin php ton. Kt qu thu c l mt gi tr kiu cao hn.
Chng hn :
Gia int v long th int chuyn thnh long.
Gia int v float th int chuyn thnh float.
Gia float v double th float chuyn thnh double.
V d :
1.5*(11/3)=4.5
1.5*11/3=5.5
(11/3)*1.5=4.5
31
V d :
int n;
n=15.6
gi tr ca n l 15
(int)a
32
Chng 4
Cu trc c bn ca chng trnh
4.1. Li ch thch :
Cc li bnh lun, cc li gii thch c th a vo bt k ch no ca chng trnh
cho chng trnh d hiu, d c hn m khng lm nh hng n cc phn khc. Li gii thch
c t gia hai du /* v */.
Trong mt chng trnh cn ( v lun lun cn ) vit thm nhng li gii thch chng
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 chng 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;
}
33
V d :
x=0;
++i;
scanf(...);
Trong chng trnh C, du ; l du hiu kt thc cu lnh.
34
Bn trong mt khi lnh li c th vit lng khi lnh khc. S lng nhau theo cch nh
vy l khng hn ch.
Khi my bt u lm vic vi mt khi lnh th cc bin v mng khai bo bn trong n
mi c hnh thnh v c hnh thnh v c cp pht b nh. Cc bin ny ch tn ti trong
thi gian my lm vic bn trong khi lnh v chng lp tc bin mt ngay sau khi my ra khi
khi lnh. Vy :
Gi tr ca mt bin hay mt mng khai bo bn trong mt khi lnh khng th a ra s
dng bt k ch no bn ngoi khi lnh .
bt k ch no bn ngoi mt khi lnh ta khng th can thip n cc bin v cc
mng c khai bo bn trong khi lnh
Nu bn trong mt khi ta dng mt bin hay mt mng c tn l a th iu ny khng
lm thay i gi tr ca mt bin khc cng c tn l a ( nu c ) c dng u bn ngoi
khi lnh ny.
Nu c mt bin c khai bo ngoi mt khi lnh v khng trng tn vi cc bin
khai bo bn trong khi lnh ny th bin cng c th s dng c bn trong cng nh bn
ngoi khi lnh.
V d :
Xt on chng trnh sau :
{
int a=5,b=2;
{
int a=4;
b=a+b;
printf("\n a trong =%3d b=%3d",a,b);
}
printf("\n a ngoai =%3d b=%3d",a,b);
}
Khi on chng trnh s in kt qu nh sau :
a trong =4 b=6
a ngoi =5 b=6
Do tnh cht bin a trong v ngoi khi lnh.
35
Cc #include
Cc #define
Hm main().
36
V d :
Chng 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 chng 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 chng trnh ta phi khai bo s dng ;
#include "stdio.h "
Qui tc th t l :
37
38
Chng 5
Cu trc iu khin
Mt chng trnh bao gm nhiu cu lnh. Thng thng cc cu lnh c thc hin
mt cch ln lt 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 trc 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;
/* Dng mt */
khi lnh 1;
else
khi lnh 2 ;
/* Dng hai */
39
biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin khi lnh 2
sau thc hin tip cc lnh tip sau khi lnh 2 trong chng trnh.
V d :
Chng trnh nhp vo hai s a v b, tm max ca hai s ri in kt qu ln mn hnh.
Chng trnh c th vit bng c hai cch trn nh sau :
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
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);
}
40
C cho php s dng cc ton t if lng nhau c ngha l trong cc khi lnh ( 1 v 2 )
trn c th cha cc ton t if - else khc. Trong trng hp ny, nu khng s dng cc du ng
m ngoc cho cc khi th s c th nhm ln gia cc if-else.
Ch l my s gn ton t else vi ton t if khng c else gn nht. Chng hn nh
on chng trnh v d sau :
if ( n>0 )
/* if th nht*/
if ( a>b )
/* if th hai*/
z=a;
else
z=b;
th else y s i vi if th hai.
on chng trnh trn tng ng vi :
if ( n>0 )
/* if th nht*/
{
if ( a>b )
/* if th hai*/
z=a;
else
z=b;
}
Trng hp ta mun else i vi if th nht ta vit nh sau :
if ( n>0 )
/* if th nht*/
{
if ( a>b )
/* if th hai*/
z=a;
}
else
z=b;
41
42
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.
Khi dng ton t goto cn ch :
Cu lnh goto v nhn cn nm trong mt hm, c ngha l ton t goto ch cho php
nhy t v tr ny n v tr khc trong thn mt hm v khng th dng nhy t mt hm ny
sang mt hm khc.
Khng cho php dng ton t goto nhy t ngoi vo trong mt khi lnh. Tuy nhin
vic nhy t trong mt khi lnh ra ngoi l hon ton hp l. V d nh on chng trnh sau l
sai.
goto n1;
.......
{
.....
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;
tong:
43
++i;
s=s+i;
if (i<10) goto tong;
printf("\n tong s=%d",s);
}
Ch :
44
My s nhy ra khi ton t switch khi n gp cu lnh break hoc du ngoc nhn ng
cui cng ca thn switch. Ta cng c th dng cu lnh goto trong thn ca ton t switch
nhy ti mt cu lnh bt k bn ngoi switch.
Khi ton t switch nm trong thn mt hm no th ta c th s dng cu lnh return
trong thn ca switch ra khi hm ny ( lnh return s cp sau ).
Khi my nhy ti mt cu lnh no th s hot ng tip theo ca n s ph thuc vo
cc cu lnh ng sau cu lnh ny. Nh vy nu my nhy ti cu lnh c nhn case ni th n c
th thc hin tt c cc cu lnh sau cho ti khi no gp cu lnh break, goto hoc return. Ni
cch khc, my c th i t nhm lnh thuc case ni sang nhm lnh thuc case th ni+1. Nu
mi nhm lnh c kt thc bng break th ton t switch s thc hin ch mt trong cc nhm
lnh ny.
V d :
Lp chng trnh phn loi hc sinh theo im s dng cu trc switch :
#include "stdio.h"
main()
{
int diem;
tt: printf("\nVao du lieu :");
printf("\n Diem =");
scanf("%d",&diem);
switch (diem)
{
case 0:
case 1:
case 2:
case 3:printf("Kem\n");break;
case 4:printf("Yeu\n");break;
case 5:
case 6:printf("Trung binh\n");break;
case 7:
case 8:printf("Kha\n");break;
case 9:
case 10:printf("Gioi\n");break;
default:printf(Vao sai\n);
45
}
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 chng 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 bc 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.
46
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 :
Chng trnh tnh tch v hng 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);
}
47
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);
}
48
Ch :
Nu biu thc 2 vng mt th n lun c xem l ng. Trong trng hp ny vic ra
khi chu trnh for cn phi c thc hin nh cc lnh break, goto hoc return vit trong thn
chu trnh.
Trong du ngoc trn sau t kho for gm ba biu thc phn cch nhau bi du ;. Trong
mi biu thc khng nhng c th vit mt biu thc m c quyn vit mt dy biu thc phn
cch nhau bi du phy. Khi cc biu thc trong mi phn c xc nh t tri sang phi.
Tnh ng sai ca dy biu thc c tnh l tnh ng sai ca biu thc cui cng trong dy ny.
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 ngc 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]);
}
49
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"
50
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.
51
V d :
on chng 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 ");
52
}
5.5. Cu lnh break :
Cu lnh break cho php ra khi cc chu trnh vi cc ton t for, while v switch. Khi c
nhiu chu trnh lng nhau, cu lnh break s a my ra khi chu trnh bn trong nht cha n
khng cn iu kin g. Mi cu lnh break c th thay bng cu lnh goto vi nhn thch hp.
V d :
Bit s nguyn dng 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 chng trnh c vo s nguyn dng 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);
}
5.6. Cu lnh continue :
Tri vi cu lnh break, lnh continue dng bt u mt vng mi ca chu trnh cha
n. Trong while v do while, lnh continue chuyn iu khin v thc hin ngay phn kim tra,
53
54
55
Chng 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 :
Sau dng tiu l thn hm. Thn hm l ni dung chnh ca hm bt u v kt thc
bng cc du { }.
Trong thn hm cha cc cu lnh cn thit thc hin mt yu cu no ra cho
hm.
56
V d :
Xt bi ton : Tm gi tr ln nht ca ba s m gi tr m gi tr ca chng c a vo
bn phm.
Xy dng chng trnh v t chc thnh hai hm : Hm main() v hm max3s. Nhim v
ca hm max3s l tnh gi tr ln nht ca ba s c vo, gi s l a,b,c. Nhim v ca hm
main() l c ba gi tr vo t bn phm, ri dng hm max3s tnh nh trn, ri a kt qu ra
mn hnh.
Chng trnh c vit nh sau :
#include "stdio.h"
float max3s(float a,float b,float c ); /* Nguyn mu hm*/
main()
{
float x,y,z;
printf("\n Vao ba so x,y,z:");
scanf("%f%f%f",&x&y&z);
printf("\n Max cua ba so x=%8.2f y=%8.2f z=%8.2f la : %8.2f",
x,y,z,max3s(x,y,z));
}
/* Kt thc hm main*/
57
Quy tc hot ng ca hm :
Mt cch tng qut li gi hm c dng sau :
tn hm ([Danh sch cc tham s thc])
S cc tham s thc t thay vo trong danh sch cc i phi bng s tham s hnh thc
v ln lt chng c kiu tng ng vi nhau.
Khi gp mt li gi hm th n s bt u c thc hin. Ni cch khc, khi my gp li
gi hm mt v tr no trong chng trnh, my s tm di ch v chuyn n hm tng
ng. Qu trnh din ra theo trnh t sau :
Cp pht b nh cho cc bin cc b.
Gn gi tr ca cc tham s thc cho cc i tng ng.
Thc hin cc cu lnh trong thn hm.
Khi gp cu lnh return hoc du } cui cng ca thn hm th my s xo cc i, bin
cc b v ra khi hm.
Nu tr v t mt cu lnh return c cha biu thc th gi tr ca biu thc c gn cho
hm. Gi tr ca hm s c s dng trong cc biu thc cha n.
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 lng ngoi hm m khng gy ra nhm
ln no.
Khi mt hm c gi ti, vic u tin l gi tr ca cc tham s thc c gn cho cc
i ( trong v d trn hm max3s, cc tham s thc l x,y,z, cc i tng ng l a,b,c ). Nh vy
cc i chnh l cc bn sao ca cc tham s thc. Hm ch lm vic trn cc i.
Cc i c th b bin i trong thn hm, cn cc tham s thc th khng b thay i.
Ch :
Khi hm khai bo khng c kiu trc n th n c mc nh l kiu int.
Khng nht thit phi khai bo nguyn mu hm. Nhng ni chung nn c v n cho php
chng trnh bin dch pht hin li khi gi hm hay t ng vic chuyn dng.
58
59
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
60
61
int m,n;
printf("\n Nhap cac gia tri cua a va b :");
scanf("%d%d",&m,&n);
printf("\n USCLN cua a=%d va b=%d la :%d",m,m,uscln(m,n))
}
int uscln(int a,int b)
{
if (a==b)
return a;
else
if (a>b)
return uscln(a-b,b);
62
else
return uscln(a,b-a);
}
V d 2 :
Chng trnh c vo mt s ri in n ra di dng cc k t lin tip.
# include "stdio.h"
# include "conio.h"
void prind(int n);
main()
{
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 :
63
V d :
#define YES 1
Macro thay bin YES bi gi tr 1 c ngha l h c ch no trong chng trnh c xut
hin bin YES th n s c thay bi gi tr 1.
Phm vi cho tn c nh ngha bi #define l t im nh ngha n cui file gc. C
th nh ngha li tn v mt nh ngha c th s dng cc nh ngha khc trc . Php th
khng thc hin cho cc xu du nhy, v d nh YES l tn c nh ngha th khng c vic
thay th no c thc hin trong on lnh c "YES".
V vic thit lp #define l mt bc chun b ch khng phi l mt phn ca chng
trnh bin dch nn c rt t hn ch v vn phm v vic phi nh ngha ci g. Chng hn nh
nhng ngi lp trnh a thch PASCAL c th nh ngha :
#define then
#define begin {
#define end; }
64
65
y=10*5;
z=x+y;
z=x+y+6;
z=5*x+y;
z=5*(x+y);
z=5*((x)+(y));
printf("Z=%d",z);
getch();
return;
}
Chng trnh s dng MACRO s nh sau :
#define BEGIN {
#define END }
#define INTEGER int
#define NB 10
#define LIMIT NB*5
#define SUMXY x+y
#define SUM1 (x+y)
#define SUM2 ((x)+(y))
main()
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
66
Chng 7
Con tr
7.1. Con tr v a ch :
V con tr cha a ch ca i tng nn n c th xm nhp vo i tng 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 tng, 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;
67
Trong khai bo trn ta ng ni rng l mt cch tng trng, rng t hp *px c kiu int,
tc l nu px xut hin trong ng cnh *px th n cng tng 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 trc 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 tng 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.
68
*(a+i)
p[i]
*(p+i)
V d :
Vo s liu ca cc phn t ca mt mng v tnh tng ca chng :
69
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];
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
70
}
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 tng ng phi cng kiu.
7.2.4. Mng, con tr v xu k t :
Nh ta bit trc y, xu k t l mt dy k t t trong hai du nhy kp, v d nh
:
"Viet nam"
Khi gp mt xu k t, my s cp pht mt khong nh cho mt mng kiu char ln
cha cc k t ca xu v cha thm k t '\0' l k t dng lm k t kt thc ca mt xu k
t. Mi k t ca xu c cha trong mt phn t ca mng.
Cng ging nh tn mng, xu k t l mt hng a ch biu th a ch u ca mng
cha n. V vy nu ta khai bo bin xau nh mt con tr kiu char :
char *xau;
th php gn :
71
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 thng dng cha mt dy k t c vo b nh. V d, np t bn
phm tn ca mt ngi 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 lu vo mt vng nh m con tr xau
tr ti. Song ni dung ca con tr xau cn cha 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. Con tr v mng nhiu chiu :
Vic s l mng nhiu chiu phc tp hn so vi mng mt chiu. Khng phi mi qui
tc ng vi mng mt chiu u c th p dng cho mng nhiu chiu.
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.
72
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
a ch
73
74
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 lu a ch. Mi kiu a ch cn c kiu con tr tng 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. Nhng 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);
75
76
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 chng 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)
7.4.3. Con tr kiu void :
Con tr kiu void c khai bo nh sau :
void *tn_con_tr;
y l con tr c bit, con tr khng kiu, n c th nhn bt k kiu no. Chng hn
cu lnh sau l hp l :
void *pa;
77
float a[20][30];
pa=a;
Con tr void thng dng lm i nhn bt k a ch kiu no t tham s thc. Trong
thn hm phi dng php chuyn i kiu chuyn sang dng a ch cn s l.
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 :
void congmt(void *a,void *b,void *c,int N,int N, int m);
{
float *pa,*pb,*pc;
int i,j;
pa=(float*)a;
pb=(float*)b;
pc=(float*)c;
for (i=1;i<m;++i)
for (j=1;j<m;++j)
*(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.
7.5. Mng con tr :
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. Tng t cho cc mng
con tr ca cc kiu khc.
Mng con tr c khai bo theo mu :
78
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 lu
tr mt a ch kiu double.
Ch :
Bn thn cc mng con tr khng dng lu tr s liu. Tuy nhin mng con tr cho
php s dng cc mng khc lu 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.
Trc 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 ngi, m ca mi ngi 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')
79
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 :
V d 2:
80
Cu lnh :
double (*g)(int, double),(*mg[30])(double, float);
khai bo :
81
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 tng ng phi l mt con tr hm.
Cch dng con tr hm trong thn hm :
Nu i c khai bo :
double (*f)(double, int);
th trong thn hm ta c th dng cc cch vit sau xc nh gi tr ca hm ( do con tr f tr
ti ) :
f(x,m) hoc (f)(x,m) hoc (*f)(x,m)
y x l bin kiu double cn m l bin kiu int.
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 bc 0.5
#include "stdio.h"
#include "math.h"
double bp(double x) /* Hm tnh x*x */
{
return x*x;
}
main()
{
int i,j;
double x=1.0;
typedef double (*ham)(double);
82
83
Chng 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 trc vv..
V d :
V d 1:
84
on chng trnh :
struct ngay {
int ngaythu;
char thang[12];
int nam;
};
m t mt kiu cu trc c tn l ngay gm c ba thnh phn : Bin nguyn ngaythu, mng
thang, v bin nguyn nam.
V d 2:
on chng trnh :
struct nhancong
{
char ten[15];
char diachi[20]
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
};
85
} 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;
s cho ta hai cu trc vi tn l ngaydi v ngayden. C hai cu trc u c xy dng theo cu
trc kiu ngay.
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 :
86
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;
87
(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;
88
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 lng 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 :
89
Cch lm nh sau :
int year;
scanf("%d",&year);
nhom1. ngaybatdaucongtac.nam=year;
V d :
Gi s ta lp trnh qun l thng tin cn b. Gi s mi d liu ca mt cn b gm :
Bc lng.
Vo s lu ca mt cn b.
a s liu ra my in.
90
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);
}
8.4. Mng cu trc :
Nh cp cc chng trc, khi s dng mt kiu gi tr ( v d nh kiu int ) ta c
th khai bo cc bin v cc mng kiu . V d nh khai bo :
int a,b,c[10];
cho ta hai bin nguyn l a,b v mt mng nguyn c c 10 phn t.
Hon ton tng 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
91
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
V d 2 :
on chng trnh sau s tnh tng lng 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 trng hp ny ta dng bin trung gian.
92
V d :
on chng 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;
}
93
Nu khai bo :
struct nhancong *p,*p1,*p2,nc1,nc2,ds[100];
ta c :
ds l mng cu trc
/* 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
94
ds[i].ngaysinh.nam
p[i].ngaysinh.nam
+ (p+i)->thnh_phn (p+i)->ngaysinh.nam
p[i]
*(p+i)
95
Khi ta lp mt chng trnh qun l m bn thn s bin (cu trc) cha c bit trc,
nu ta s dng mng ( cp pht b nh tnh ) th ta phi s dng s cc phn t l ti a. Nh vy
s c rt nhiu vng nh c cp pht m khng bao gi dng n. Lc ta c cch cp
pht b nh ng. S vng nh cp ra s bin cn dng.
Cu trc c t nht mt thnh phn l con tr kiu cu trc ang nh ngha gi l cu trc
t tr.
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;
};
Cch 3 :
struct pp
{
char ht[20];
char qq[25];
96
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 lt t cu trc u n cu trc cui theo chiu t trn xung
di.
Nhm cu trc mc ni theo chiu ngc c tnh cht sau :
To danh sch mi :
97
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 */
98
99
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) ;
/* 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);
100
p=p->tiep;
}
getch();
}
Mc ni theo chiu ngc (Vo sau ra trc 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 : ");
gets(p->ht);
printf(" Que quan : ");
gets(p->qq);
printf(" Tuoi: ");
gets(tam);
p->tuoi=atoi(tam);
if (pdau==NULL)
101
{
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();
}
102
Chng 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.
103
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).
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);
Nguyn hm trong : stdio.h .
Trong :
i th nht l tn tp, i th hai l kiu truy nhp.
Cng dng :
104
ngha
"r" "rt"
"w" "wt"
"a" "at"
"rb"
"wb"
"ab"
"r+" "r+t"
"w+" "w+t"
"a+" "a+t"
"r+b"
"w+b"
"a+b"
Ch :
Trong cc kiu c ghi, ta nn lm sch vng m trc khi chuyn t c sang ghi hoc
ngc li. Ta s cp n cc hm vi tnh nng xo sau ny.
V d :
105
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 :
fclose(f);
9.2.4. ng tt c cc tp ang m- hm fcloseall :
Cu trc ng php ca hm :
int fcloseall(void);
106
Cu trc ng php ca hm :
int fflush(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.
107
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);
Nguyn hm trong : stdio.h .
Trong fp l con tr tp.
Cng dng :
Chuyn con tr ch v ca tp fp v u tp. Khi vic nhp xut trn tp fp c thc
hin t u.
V d :
rewind(f);
108
Cng dng :
Chuyn con tr ch v ca tp fp v v tr xc nh bi xp qua mt s byte xc nh bng
gi tr tuyt i ca sb. Chiu di chuyn l v cui tp nu sb dng, tri li n s di chuyn v
u tp. Khi thnh cng, hm tr v gi tr 0. Khi c li hm tr v gi tr khc khng.
Ch :
Khng nn dng fseek trn tp tin vn bn, do s chuyn i k t s lm cho vic nh v
thiu chnh xc.
V d :
fseek(stream, SEEK_SET, 0);
fseek(fp,0,SEEK_END);
ftell(fp) cho gi tr 3.
Sau lnh
fseek(fp,-1,SEEK_END);
ftell(fp) cho gi tr 2.
109
l s mu tin cn ghi
fp
l con tr tp
Cng dng :
Hm ghi n mu tin kch thc size byte t vng nh ptr ln tp fp.
Hm s tr v mt gi tr bng s mu tin thc s ghi c.
V d :
#include "stdio.h"
struct mystruct
{
int i;
char ch;
};
main()
{
FILE *stream;
struct mystruct s;
stream = fopen("TEST.TXT", "wb") /* M tp TEST.TXT */
s.i = 0;
s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* Vit cu trc vo tp */
fclose(stream); /* ng tp */
return 0;
}
110
l s mu tin cn ghi
fp
l con tr tp
Cng dng :
Hm c n mu tin kch thc size byte t tp fp ln ln vng nh ptr.
Hm s tr v mt gi tr bng s mu tin thc s c c.
V d :
#include "string.h"
#include "stdio.h"
main()
{
FILE *stream;
char msg[] = "Kim tra";
char buf[20];
stream = fopen("DUMMY.FIL", "w+");
/* Vit vi d liu ln tp */
fwrite(msg, strlen(msg)+1, 1, stream);
/* Tm im u ca file */
fseek(stream, SEEK_SET, 0);
/* c s liu v hin th */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
fclose(stream);
return 0;
111
}
9.2.10. Nhp xut k t :
9.2.10.1. Cc hm putc v fputc :
Cu trc ng php :
int putc(int ch, FILE *fp);
int fputc(int ch, FILE *fp);
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;
}
9.2.12.2. Cc hm getc v fgettc :
Cu trc ng php :
int gretc(FILE *fp);
int fputc(FILE *fp);
112
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);
} while (ch != EOF);
fclose(stream);
113
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");
status = access("junk.jnk",0);
if (status == 0)
printf("Tp tn ti\n");
else
printf("Tp khng tn ti\n");
return 0;
114
115
Chng 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 chng 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)
MCGA (2)
EGA (3)
EGA64 (4)
CGAC0 (0)
320x200
CGAC1 (1)
320x200
CGAC2 (2)
320x200
CGAC3 (3)
320x200
CGAHi (4)
640x200
MCGA0 (0)
320x200
MCGA1 (1)
320x200
MCGA2 (2)
320x200
MCGA3 (3)
320x200
MCGAMed (4)
640x200
MCGAHi (5)
640x480
EGAL0 (0)
640x200
EGAHi (1)
640x350
EGA64LO (0)
640x200
116
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 :
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 */
}
117
V d :
Chng trnh di y xc nh kiu mn hnh ang s dng :
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
printf("\n Gia tri so cua man hinh la : %d",mh);
printf("\n Gia tri so mode do hoa la : %d",mode);
closegraph();
}
10.2. Cc hm ho :
10.2.1. Mu v mu :
t mu nn :
t mu cho nn ta dng th tc sau :
118
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);
Gi tr s
Mu hin th
BLACK
en
BLUE
Xanh da tri
GREEN
Xanh l cy
CYAN
Xanh l
RED
MAGENTA
Tm
BROWN
Nu
LIGHTGRAY
Xm nht
DARKGRAY
Xm m
LIGHTBLUE
LIGHTGREEN
10
Xanh l cy nht
LIGHTCYAN
11
Xanh l nht
LIGHTRED
12
nht
LIGHTMAGENTA
13
Tm nht
YELLOW
14
Vng
WHITE
16
Trng
Cc gi tr kh d ca mu cho bi bng di y :
Bng cc gi tr kh d ca mu
Tn hng
Gi tr s
Kiu mu t
EMPTY_FILL
T bng mu nn
SOLID_FILL
T bng ng lin nt
119
LINE_FILL
T bng ng --------
LTSLASH_FILL
T bng ///
SLASH_FILL
T bng /// in m
BKSLASH_FILL
T bng \\\ in m
LTBKSLASH_FILL
T bng \\\
HATCH_FILL
XHATCH_FILL
INTERLEAVE_FILL
T bng ng t qung
WIDE_DOT_FILL
10
CLOSE_DOT_FILL
11
Chn gii mu :
thay i gii mu c nh ngha trong bng trn, ta s dng hm :
void setpalete(int s_th_t_mu, int mu );
V d :
Cu lnh :
setpalete(0,lightcyan);
bin mu u tin trong bng mu thnh mu xanh l nht. Cc mu khc khng b nh hng.
10.2.2. V v t mu :
C th chia cc ng v hnh thnh bn nhm chnh :
ng gp khc v a gic.
ng thng.
Hnh ch nht.
120
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 ).
xr l bn trc nm ngang.
yr l bn trc thng ng.
121
V d :
V mt cung elip c tm ti (100,50), gc u l 0, gc cui l 180, bn trc ngang 30,
bn trc ng l 20.
ellipse(100,50,0,180,30,20);
Hnh qut :
v v t mu mt hnh qut ta dng hm :
void pieslice(int x, int y, int gd, int gc, int r);
Trong :
(x,y) l to tm hnh qut.
gd l gc u hnh qut (0 n 360 ).
gc l gc cui hnh qut (gd n 360 ).
r l bn knh hnh qut .
V d :
Chng trnh di y s v mt cung trn gc phn t th nht, mt cung elip gc
phn t th ba, mt ng trn v mt hnh qut qut t 90 n 360 .
# include "graphics.h"
#include "stdio.h"
#include "conio.h"
main()
{
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();
}
122
V ng gp khc :
Mun v ng gp khc i qua n im : (x1,y1), (x2,y2), ...., (xn,yn) th trc ht ta phi
T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);
123
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);
Chn kiu ng :
Hm
124
ca kiu_ng :
Tn hng
Gi tr s
Kiu ng
SOLID_LINE
Nt lin
DOTTED_LINE
Nt chm
CENTER_LINE
Nt chm gch
DASHED_LINE
Nt gch
USERBIT_LINE
Mu t to
Gi tr s
B dy
NORM_WIDTH
B dy bnh thng
THICK_WIDTH
B dy gp ba
V d :
Chng trnh v mt ng gp khc bng cc on thng. ng gp khc i qua cc
nh sau :
(20,20),(620,20),(620,180),(20,180) v (320,100)
#include "graphics.h"
#include "stdio.h"
#include "conio.h"
main()
{
int mh=0, mode;
125
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();
}
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 :
Nu im ny cha c t mu bi cc hm v hoc hm putpixel (m ch mi c to
mu nn bi setbkcolor) th hm cho gi tr 0.
T min :
t mu cho mt min no trn mn hnh, ta dng hm sau :
void floodfill(int x, int y, int border);
y :
(x,y) l to ca mt im no gi l im gieo.
Tham s border cha m ca mu.
S hot ng ca hm floodfill ph thuc vo gi tr ca x,y,border v trng thi mn hnh.
126
Hm :
void rectangle(int x1, int y1, int x2, int y2);
127
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);
top=1
top=0
V d :
Chng trnh di y to nn mt hnh ch nht, mt khi hnh ch nht v mt hnh
hp c np :
#include "graphics.h"
main()
{
int mh=mode=0;
initgraph(&mh,&mode,"");
if (graphresult != grOk) exit(1);
setbkcolor(GREEN);
setcolor(RED);
setfillstyle(CLOSE_DOT_FILL,YELLOW);
128
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 :
V d :
setviewport(100,50,200,150,1);
Lp nn mt vng viewport hnh ch nht c to gc tri cao l (100,50) v to gc phi
thp l (200,150) (l to trc khi t viewport).
Ch :
Sau khi lp viewport, ta c h to mi m gc trn bn tri s c to (0,0).
129
int clip;
};
Xa viewport :
S dng hm :
void clearviewport(void);
To m dng :
Nh s dng viewport c th vit cc chng trnh ho theo to m dng. Mun
130
131
Hm :
void outtext(char *s);
cho hin chui k t ( do con tr s tr ti ) ti v tr con tr ho hin thi.
Hm :
void outtextxy(int x, int y,char *s);
cho hin chui k t ( do con tr s tr ti ) ti v tr (x,y).
V d :
Hai cch vit di y :
outtextxy(50,50," Say HELLO");
v
moveto(50,50);
outtext(" Say HELLO");
cho cng kt qu.
S dng cc Fonts ch :
Cc Fonts ch nm trong cc tp tin *.CHR trn a. Cc Fonts ny cho cc kch thc v
132
CENTER_TEXT
RIGHT_TEXT
V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm di ch B.
Chiu cao :
133
Hm :
textheight(char *s);
cho chiu cao ( tnh bng pixel ) ca chui do con tr s tr ti.
V d 1 :
Vi font bit map v h s phng i l 1 th textheight("A") ch gi tr l 8.
V d 2 :
#include "stdio.h"
#include "graphics.h"
main()
{
int mh=mode=DETECT, y,size;
initgraph(mh,mode,"C:\\TC\\BGI");
y=10;
settextjustify(0,0);
for (size=1;size<5;++size)
{
settextstyle(0,0,size);
outtextxy(0,y,"SACRIFICE");
y+=textheight("SACRIFICE")+10;
}
getch();
closegraph();
}
B rng :
Hm :
textwidth(char *s);
cho b rng chui ( tnh theo pixel ) m con tr s tr ti da trn chiu di chui, kch thc font
ch, h s phng i.
134
Mc lc
Gii thiu
Chng 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
Chng 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()
135
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
Chng 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
Chng 4
Cu trc c bn ca chng 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 chng trnh
4.4. Mt s qui tc cn nh khi vit chng trnh
Chng 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
136
137
138
Bi tp.
Phn th nht : Nhm cc bi tp v tnh ton,hm v chu trnh .
Bi tp 1 :
Vit chng trnh hin th thp Pascal :
139
BI tp
Ngn ng lp trnh C
Phn 1 : Nhm cc bI tp v tnh ton, hm v chu trnh .
BI tp 1 :
Vit chng trnh hin th thp PASCAL :
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
Vit chng trnh hin th thp o ngc.
BI tp 2 :
140
Vit chng 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 chng trnh tnh hm s :
f(x) =
K0
x
K1+ ----------------------------------------x
K2 + -----------------------x
K3 + ---------------------x
K4 + --------------------
x
Kn-1 + ------------Kn
Bi tp 4 :
Vit chng trnh tnh tch hai ma trn C mxn = A mxn * B nxk .
Bi tp 5 :
Vit chng trnh nhp vo mt dy s sau tch dy ny thnh hai dy ch cha cc
s dng 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 chng 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.
Tnh s tru mi loi .
Bi tp 8 :
Va g va ch
B li cho trn
ng ba su con
Mt trm chn chn .
141
Tnh s g, s ch .
Bi tp 9 :
142