Professional Documents
Culture Documents
H ni thng 11 nm 1997
Nguyn Hu Tun
Ch-ng 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 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.
1.4. Kiu d liu :
Trong C s dng cc cc kiu d liu sau :
1.4.1. Kiu k t (char) :
Mt gi tr kiu char chim 1 byte ( 8 bit ) v biu din -c mt k t thng qua bng
m ASCII. V d :
K t
M ASCII
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
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.
Nhm 2 : Nhm cc k t vn bn c m t 32 n 126. Cc k t ny c th -c -a ra
mn hnh hoc my in.
Nhm 3 : Nhm cc k t ho c m s t 127 n 255. Cc k t ny c th -a ra
mn hnh nh-ng khng in ra -c ( bng cc lnh DOS ).
Kch th-c
-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 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 :
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
V d :
#define MAX 1000
Lc ny, tt c cc tn MAX trong ch-ng trnh xut hin sau ny u -c thay bng
1000. V vy, ta th-ng gi MAX l tn hng, n biu din s 1000.
Mt v d khc :
#define pi 3.141593
t tn cho mt hng float l pi c gi tr l 3.141593.
V d :
Ch :
Cn phn bit hai hng 5056 v 5056.0 : y 5056 l s nguyn cn 5056.0 l hng
thc.
V d :
#define sl 8865056L
#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'.
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"
Ch :
Cn phn bit hai hng 'a' v "a". 'a' l hng k t -c l-u tr trong 1 byte, cn "a" l
hng xu k t -c l-u tr trong 1 mng hai phn t : phn t th nht cha ch a cn phn t
th hai cha \0.
1.7. Bin :
Mi bin cn phi -c khai bo tr-c khi -a vo s dng. Vic khai bo bin -c
thc hin theo mu sau :
Kiu d liu ca bin
tn bin ;
V d :
int a,b,c;
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;
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 t-ng -ng.
Ly a ch ca bin :
Mi bin -c cp pht mt vng nh gm mt s byte lin tip. S hiu ca byte u
chnh l a ch ca bin. a ch ca bin s -c s dng trong mt s hm ta s nghin cu
sau ny ( v d nh- hm scanf ).
ly a ch ca mt bin ta s dng php ton :
& tn bin
1.8 Mng :
Mi bin ch c th biu din mt gi tr. biu din mt dy s hay mt bng s ta c
th dng nhiu bin nh-ng cch ny khng thun li. Trong tr-ng hp ny ta c khi nim v
mng. Khi nim v mng trong ngn ng C cng ging nh- khi nim v ma trn trong i s
tuyn tnh.
Mng c th -c hiu l mt tp hp nhiu phn t c cng mt kiu gi tr v chung
mt tn. Mi phn t mng biu din -c mt gi tr. C bao nhiu kiu bin th c by nhiu
kiu mng. Mng cn -c khai bo nh r :
Loi mng : int, float, double...
Tn mng.
S chiu v kch th-c mi chiu.
Khi nim v kiu mng v tn mng cng ging nh- khi nim v kiu bin v tn bin. Ta s
gii thch khi nim v s chiu v kch th-c mi chiu thng qua cc v d c th d-i y.
Cc khai bo :
11
int a[10],b[4][2];
float x[5],y[3][3];
s xc nh 4 mng v ngha ca chng nh- sau :
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]
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]
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..
12
Biu thc dng lm ch s c th thc. Khi phn nguyn ca biu thc thc s l ch
s mng.
V d :
a[2.5] l a[2]
b[1.9] l a[1]
*
Khi ch s v-t ra ngoi kch th-c mng, my s vn khng bo li, nh-ng n s truy
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.
13
{45,15}
{
....
main()
{
....
}
Khi khi u mng ngoi c th khng cn ch ra kch th-c ( s phn t ) ca n. Khi
, my s dnh cho mng mt khong nh thu nhn danh sch gi tr khi u.
V d :
....
float a[]={0,5.1,23,0,42};
int m[][3]={
{25,31,4},
{12,13,89},
{45,15,22}
};
Khi ch ra kch th-c ca mng, th kch th-c ny cn khng nh hn kch th-c ca b
khi u.
V d :
....
float m[6]={0,5.1,23,0};
int z[6][3]={
{25,31,3},
{12,13,22},
{45,15,11}
};
....
i vi mng hai chiu, c th khi u vi s gi tr khi u ca mi hng c th khc
nhau :
V d :
14
....
float z[][3]={
{31.5},
{12,13},
{-45.76}
};
int z[13][2]={
{31.11},
{12},
{45.14,15.09}
};
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
Ch-ng 2
Cc lnh vo ra
Cch dng :
Dng cu lnh sau :
bin = getchar();
Cng dng :
Nhn mt k t vo t bn phm v khng -a ra mn hnh. Hm s tr v k t nhn
-c v l-u vo bin.
V d :
int c;
c = getchar()
16
2.2.2. Hm putchar () :
-a mt k t ra thit b ra chun, ni chung l mn hnh, ta s dng hm putchar()
Cch dng :
Dng cu lnh sau :
putchar(ch);
Cng dng :
-a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s -c hin th vi mu
trng.
V d :
int c;
c = getchar();
putchar(c);
2.2.3. Hm getch() :
Hm nhn mt k t t b m bn phm, khng cho hin ln mn hnh.
Cch dng :
Dng cu lnh sau :
getch();
Cng dng :
Nu c sn k t trong b m bn phm th hm s nhn mt k t trong .
Nu b m rng, my s tm dng. Khi g mt k t th hm nhn ngay k t (
khng cn bm thm phm Enter nh- trong cc hm nhp khc ). K t va g khng hin ln
mn hnh.
Nu dng :
bin=getch();
Th bin s cha k t c vo.
17
V d :
c = getch();
2..2.4. Hm putch() :
Cch dng :
Dng cu lnh sau :
putch(ch);
Cng dng :
-a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s -c hin th theo mu
xc nh trong hm textcolor.
Hm cng tr v k t -c hin th.
sang dng mi
\f
sang trang mi
\b
li li mt b-c
\t
du tab
18
Du tr :
Khi khng c du tr th kt qu ra -c dn v bn phi nu di thc
kt qu ra nh hn rng ti thiu fw dnh cho n. Cc v tr d- tha s
ca
-c lp y
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
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
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
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 t-ng -ng vi
printf("\n%f\n%8.2f",x,n,y);
V n=8 t-ng ng vi v tr *
Cch dng :
scanf(iu khin,i 1, i 2, ...);
Xu iu khin cha cc c t chuyn dng, mi c t s to ra vic i dng bin tip
sau ca scanf.
21
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 ch-ng trnh dng nhp ( t bn phm ) ba gi tr nguyn ri gn cho ba bin
a,b,c nh- sau :
int a,b,c;
scanf("%d%d%d,&a,&b,&c);
vo s liu ta c th thao tc theo nhiu cch khc nhau:
Cch 1 :
-a ba s vo cng mt dng, cc s phn cch nhau bng du cch hoc du tab.
Cch 2 :
-a ba s vo ba dng khc nhau.
Cch 3 :
Hai s u cng mt dng ( cch nahu bi du cch ho tab ), s th ba trn dng tip
theo.
Cch 4 :
S th nht trn mt dng, hai s sau cng mt dng tip theo ( cch nahu bi du cch
ho tab ), s th ba trn dng tip theo.
Khi vo sai s bo li v nhy v ch-ng trnh cha li gi n.
2.5. -a kt qu ra my in :
-a kt qu ra my in ta dng hm chun fprintf c dng sau :
fprintf(stdprn, iu khin, bin 1, bin 2,...);
Tham s stdprn xc nh thit b -a ra l my in.
iu khin c dng c t nh- lnh printf.
Dng ging nh- lnh printf, ch khc l in ra my in.
V d :
on ch-ng trnh in ma trn A, c 8x6. Mi hng ca ma trn -c in trn mt dng :
float a[8][6];
int i,j;
fprintf(stdprn,"\n%20c MA TRAN A\n\n\n",' ');
for (i=0;i<8;++i)
{ for (j=0;j<6;++j)
24
fprintf(stdprn,"%10.2f",a[i][j]);
fprintf(stdprn,"\n");
}
25
Ch-ng 3
Biu thc
26
v=e;
Biu thc gn c th s dng trong cc php ton v cc cu lnh nh- cc biu thc khc.
V d nh- khi ta vit
a=b=5;
th iu c ngha l gn gi tr ca biu thc b=5 cho bin a. Kt qa l b=5 v a=5.
Hon ton t-ng t nh- :
a=b=c=d=6; gn 6 cho c a, b, c v d
V d :
z=(y=2)*(x=6); { y * l php ton nhn }
gn 2 cho y, 6 cho x v nhn hai biu thc li cho ta z=12.
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 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).
Cc php ton logic :
Trong C s dng ba php ton logic :
Php ph nh mt ngi !
a
!a
khc 0
bng 0
28
a&&b
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 -- tr-c hoc sau ton hng nh- sau : ++n, n++, --n, n--.
S khc nhau ca ++n v n++ ch : trong php n++ th tng sau khi gi tr ca n -c s
dng, cn trong php ++n th n -c tng tr-c khi s dng. S khc nhau gia n-- v --n cng
nh- vy.
V d :
n=5
x=++n
x=n++
29
Cc php ton c -u tin khc nhau, iu ny c ngha trong cng mt biu thc s
c mt s php ton ny -c thc hin tr-c mt s php ton khc.
Th t -u tin ca cc php ton -c trnh by trong bng sau :
TT
Php ton
Trnh t kt hp
() [] ->
* ( 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 d-i.
i vi cc php ton cng mc -u tin th trnh t tnh ton c th t tri qua phi hay
ng-c li -c ch ra trong ct trnh t kt hp.
V d :
*--px=*(--px) ( Phi qua tri )
8/4*6=(8/4)*6 ( Tri qua phi )
Nn dng cc du ngoc trn vit biu thc mt cch chnh xc.
Cc php ton l :
Dng 1
[ ] Dng biu din phn t mng, v d : a[i][j]
30
-> Dng biu din thnh phn cu trc thng qua con tr
Dng 2
* Dng khai bo con tr, v d : int *a
& Php ton ly a ch, v d : &x
( type) l php chuyn i kiu, v d : (float)(x+y)
Dng 15
Ton t , th-ng dng vit mt dy biu thc trong ton t for.
V d :
(float) (a+b)
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
31
V d :
int n;
n=15.6
gi tr ca n l 15
(int)a
32
33
Ch-ng 4
Cu trc c bn ca ch-ng trnh
4.1. Li ch thch :
Cc li bnh lun, cc li gii thch c th -a vo bt k ch no ca ch-ng trnh
cho ch-ng trnh d hiu, d c hn m khng lm nh h-ng n cc phn khc. Li gii thch
-c t gia hai du /* v */.
Trong mt ch-ng trnh cn ( v lun lun cn ) vit thm nhng li gii thch ch-ng
trnh thm r rng, thm d hiu.
V d :
#include "stdio.h"
#include "string.h"
#include "alloc.h"
#include "process.h"
int main()
{
char *str;
/* Cp pht b nh cho xu k t */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Kt thc ch-ng trnh nu thiu b nh */
}
/* copy "Hello" vo xu */
strcpy(str, "Hello");
/* Hin th xu */
printf("String is %s\n", str);
/* Gii phng b nh */
free(str);
return 0;
}
34
V d :
x=0;
++i;
scanf(...);
Trong ch-ng trnh C, du ; l du hiu kt thc cu lnh.
35
V d :
Xt on ch-ng trnh sau :
{
int a=5,b=2;
{
int a=4;
b=a+b;
printf("\n a trong =%3d b=%3d",a,b);
}
printf("\n a ngoai =%3d b=%3d",a,b);
}
Khi on ch-ng trnh s in kt qu nh- sau :
a trong =4 b=6
a ngoi =5 b=6
Do tnh cht bin a trong v ngoi khi lnh.
36
Cc #include
Cc #define
37
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);
}
Qui tc th hai l :
Cc li gii thch cn -c t gia cc du /* v */ v c th -c vit
Trn mt dng
Trn nhiu dng
Trn phn cn li ca dng
Qui tc th ba l :
Trong ch-ng trnh, khi ta s dng cc hm chun, v d nh- printf(),
getch() ,... m cc hm ny li cha trong file stdio.h trong th- mc ca C,
v vy u ch-ng trnh ta phi khai bo s dng ;
#include "stdio.h "
38
Qui tc th t- l :
Mt ch-ng trnh c th ch c mt hm chnh ( hm main() ) hoc c th
c thm vi hm khc.
39
Ch-ng 5
Cu trc iu khin
Mt ch-ng trnh bao gm nhiu cu lnh. Thng th-ng cc cu lnh -c thc hin
mt cch ln l-t theo th t m chng -c vit ra. Cc cu trc iu khin cho php thay i
trt t ni trn, do my c th nhy thc hin mt cu lnh khc mt v tr tr-c hoc sau
cu lnh hin thi.
Xt v mt cng dng, c th chia cc cu trc iu khin thnh cc nhm chnh :
Nhy khng c iu kin.
R nhnh.
T chc chu trnh.
Ngoi ra cn mt s ton t khc c chc nng b tr nh- break, continue.
if ( biu thc )
khi lnh 1;
/* Dng mt */
khi lnh 1;
else
khi lnh 2 ;
/* Dng hai */
40
biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin khi lnh 2
sau thc hin tip cc lnh tip sau khi lnh 2 trong ch-ng trnh.
V d :
Ch-ng trnh nhp vo hai s a v b, tm max ca hai s ri in kt qu ln mn hnh.
Ch-ng trnh c th vit bng c hai cch trn nh- sau :
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
scanf("%f",&a);
printf("\n Cho b=");
scanf("%f",&b);
max=a;
if (b>max) max=b;
printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max);
}
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
scanf("%f",&a);
printf("\n Cho b=");
scanf("%f",&b);
if (a>b) max=a;
else max=b;
printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max);
}
41
C cho php s dng cc ton t if lng nhau c ngha l trong cc khi lnh ( 1 v 2 )
trn c th cha cc ton t if - else khc. Trong tr-ng hp ny, nu khng s dng cc du
ng m ngoc cho cc khi th s c th nhm ln gia cc if-else.
Ch l my s gn ton t else vi ton t if khng c else gn nht. Chng hn nhon ch-ng trnh v d sau :
if ( n>0 )
/* if th nht*/
if ( a>b )
/* if th hai*/
z=a;
else
z=b;
th else y s i vi if th hai.
on ch-ng trnh trn t-ng -ng vi :
if ( n>0 )
/* if th nht*/
{
if ( a>b )
/* if th hai*/
z=a;
else
z=b;
}
Tr-ng hp ta mun else i vi if th nht ta vit nh- sau :
if ( n>0 )
/* if th nht*/
{
if ( a>b )
/* if th hai*/
z=a;
}
else
z=b;
42
43
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 ch-ng 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;
44
tong:
++i;
s=s+i;
if (i<10) goto tong;
printf("\n tong s=%d",s);
}
45
Ch :
My s nhy ra khi ton t switch khi n gp cu lnh break hoc du ngoc nhn ng
cui cng ca thn switch. Ta cng c th dng cu lnh goto trong thn ca ton t switch
nhy ti mt cu lnh bt k bn ngoi switch.
Khi ton t switch nm trong thn mt hm no th ta c th s dng cu lnh return
trong thn ca switch ra khi hm ny ( lnh return s cp sau ).
Khi my nhy ti mt cu lnh no th s hot ng tip theo ca n s ph thuc vo
cc cu lnh ng sau cu lnh ny. Nh- vy nu my nhy ti cu lnh c nhn case ni th n c
th thc hin tt c cc cu lnh sau cho ti khi no gp cu lnh break, goto hoc return. Ni
cch khc, my c th i t nhm lnh thuc case ni sang nhm lnh thuc case th ni+1. Nu
mi nhm lnh -c kt thc bng break th ton t switch s thc hin ch mt trong cc nhm
lnh ny.
V d :
Lp ch-ng trnh phn loi hc sinh theo im s dng cu trc switch :
#include "stdio.h"
main()
{
int diem;
tt: printf("\nVao du lieu :");
printf("\n Diem =");
scanf("%d",&diem);
switch (diem)
{
case 0:
case 1:
case 2:
case 3:printf("Kem\n");break;
case 4:printf("Yeu\n");break;
case 5:
case 6:printf("Trung binh\n");break;
case 7:
case 8:printf("Kha\n");break;
case 9:
case 10:printf("Gioi\n");break;
46
default:printf(Vao sai\n);
}
printf("Tiep tuc 1, dung 0 :")
scanf("%d",&diem);
if (diem==1) goto tt;
getch();
return;
}
5.4. Cu trc lp :
5.4.1. Cu trc lp vi ton t while v for :
5.4.1.1. Cu trc lp vi ton t while :
Ton t while dng xy dng chu trnh lp dng :
while ( biu thc )
Lnh hoc khi lnh;
Nh- vy ton t while gm mt biu thc v thn chu trnh. Thn chu trnh c th l mt
lnh hoc mt khi lnh.
Hot ng ca chu trnh nh- sau :
My xc nh gi tr ca biu thc, tu thuc gi tr ca n my s chn cch thc hin
nh- sau :
Nu biu thc c gi tr 0 ( biu thc sai ), my s ra khi chu trnh v chuyn ti thc
hin cu lnh tip sau chu trnh trong ch-ng trnh.
Nu biu thc c gi tr khc khng ( biu thc ng ), my s thc hin lnh hoc khi
lnh trong thn ca while. Khi my thc hin xong khi lnh ny n li thc hin xc nh li gi
tr biu thc ri lm tip cc b-c nh- trn.
Ch :
Trong cc du ngoc ( ) sau while chng nhng c th t mt biu thc m cn c th
t mt dy biu thc phn cch nhau bi du phy. Tnh ng sai ca dy biu thc -c hiu l
tnh ng sai ca biu thc cui cng trong dy.
Bn trong thn ca mt ton t while li c th s dng cc ton t while khc. bng
cch ta i xy dng -c cc chu trnh lng nhau.
Khi gp cu lnh break trong thn while, my s ra khi ton t while su nht cha cu
lnh ny.
47
Trong thn while c th s dng ton t goto nhy ra khi chu trnh n mt v tr
mong mun bt k. Ta cng c th s dng ton t return trong thn while ra khi mt hm
no .
V d :
Ch-ng trnh tnh tch v h-ng ca hai vc t x v y :
Cch 1 :
#include "stdio.h"
float x[]={2,3.4,4.6,21}, y[]={24,12.3,56.8,32.9};
main()
{
float s=0;
int i=-1;
while (++i<4)
s+=x[i]*y[i];
printf("\n Tich vo huong hai vec to x va y la :%8.2f",s);
}
Cch 2 :
#include "stdio.h"
float x[]={2,3.4,4.6,21}, y[]={24,12.3,56.8,32.9};
main()
{
float s=0;
int i=0;
while (1)
{
s+=x[i]*y[i];
if (++i>=4) goto kt;
}
kt:printf("\n Tich vo huong hai vec to x va y la :%8.2f",s);
}
48
Cch 3 :
#include "stdio.h"
float x[]={2,3.4,4.6,21}, y[]={24,12.3,56.8,32.9};
main()
{
float s=0;
int i=0;
while ( s+=x[i]*y[i], ++i<=3 );
printf("\n Tich vo huong hai vec to x va y la :%8.2f",s);
}
49
Ch :
Nu biu thc 2 vng mt th n lun -c xem l ng. Trong tr-ng hp ny vic ra
khi chu trnh for cn phi -c thc hin nh cc lnh break, goto hoc return vit trong thn
chu trnh.
Trong du ngoc trn sau t kho for gm ba biu thc phn cch nhau bi du ;. Trong
mi biu thc khng nhng c th vit mt biu thc m c quyn vit mt dy biu thc phn
cch nhau bi du phy. Khi cc biu thc trong mi phn -c xc nh t tri sang phi.
Tnh ng sai ca dy biu thc -c tnh l tnh ng sai ca biu thc cui cng trong dy ny.
Trong thn ca for ta c th dng thm cc ton t for khc, v th ta c th xy dng cc
ton t for lng nhau.
Khi gp cu lnh break trong thn for, my ra s ra khi ton t for su nht cha cu
lnh ny. Trong thn for cng c th s dng ton t goto nhy n mt v tr mong mun bt
k.
V d 1:
Nhp mt dy s ri o ng-c th t ca n.
Cch 1:
#include stdio.h
float x[]={1.3,2.5,7.98,56.9,7.23};
int n=sizeof(x)/sizeof(float);
main()
{
int i,j;
float c;
for (i=0,j=n-1;i<j;++i,--j)
{
c=x[i];x[i]=x[j];x[j]=c;
}
fprintf(stdprn,\n Day so dao la \n\n);
for (i=0;i<n;++i)
fprintf(stdprn,%8.2f,x[i]);
}
50
Cch 2 :
#include stdio.h
float x[]={1.3,2.5,7.98,56.9,7.23};
int n=sizeof(x)/sizeof(float);
main()
{
int i,j;
float c;
for (i=0,j=n-1;i<j;c=x[i],x[i]=x[j],x[j]=c,++i,--j)
fprintf(stdprn,\n Day so dao la \n\n);
for (i=0;++i<n;)
fprintf(stdprn,%8.2f,x[i]);
}
Cch 3 :
#include stdio.h
float x[]={1.3,2.5,7.98,56.9,7.23};
int n=sizeof(x)/sizeof(float);
main()
{
int i=0,j=n-1;
float c;
for ( ; ; )
{
c=x[i];x[i]=x[j];x[j]=c;
if (++i>--j) break;
}
fprintf(stdprn,\n Day so dao la \n\n);
for (i=-1;i++<n-1; fprintf(stdprn,%8.2f,x[i]));
}
V d 2:
Tnh tch hai ma trn mxn v nxp.
#include "stdio.h"
51
float x[3][2],y[2][4],z[3][4],c;
main()
{
int i,j;
printf("\n nhap gia tri cho ma tran X ");
for (i=0;i<=2;++i)
for (j=0;j<=1;++j)
{
printf("\n x[%d][%d]=",i,j);
scanf("%f",&c);
x[i][j]=c;
}
printf("\n nhap gia tri cho ma tran Y ");
for (i=0;i<=1;++i)
for (j=0;j<=3;++j)
{
printf("\n y[%d][%d]=",i,j);
scanf("%f",&c);
y[i][j]=c;
}
for (i=0;i<=3;++i)
for (j=0;j<=4;++j)
z[i][j]
}
5.4.2. Chu trnh do-while
Khc vi cc ton t while v for, vic kim tra iu kin kt thc t u chu trnh,
trong chu trnh do while vic kim tra iu kin kt thc t cui chu trnh. Nh- vy thn ca chu
trnh bao gi cng -c thc hin t nht mt ln.
Chu trnh do while c dng sau :
do
Lnh hoc khi lnh;
while ( biu thc );
Lnh hoc khi lnh l thn ca chu trnh c th l mt lnh ring l hoc l mt khi
lnh.
52
V d :
on ch-ng trnh xc nh phn t m u tin trong cc phn t ca mng x.
#include "stdio.h"
float x[5],c;
main()
{
int i=0;
printf("\n nhap gia tri cho ma tran x ");
for (i=0;i<=4;++i)
{
printf("\n x[%d]=",i);
scanf("%f",&c);
y[i]=c;
}
do
++i;
while (x[i]>=0 && i<=4);
if (i<=4)
printf("\n Phan tu am dau tien = x[%d]=%8.2f",i,x[i]);
else
printf("\n Mang khong c phan tu am ");
53
}
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 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);
}
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,
54
cn trong for iu khin -c chuyn v b-c khi u li ( tc l b-c : tnh biu thc 3, sau
quay li b-c 2 bt u mt vng mi ca chu trnh).
Ch :
Lnh continue ch p dng cho chu trnh ch khng p dng cho switch.
V d :
Vit ch-ng trnh t mt nhp mt ma trn a sau :
Tnh tng cc phn t d-ng ca a.
Xc nh s phn t d-ng ca a.
Tm cc i trong cc phn t d-ng ca a.
#include "stdio.h"
float a[3[4];
main()
{
int i,j,soptd=0;
float tongduong=0,cucdai=0,phu;
for (i=0;i<3;++i)
for (j=0;i<4;++j)
{
printf("\n a[%d][%d]=",i,j );
scanf("%f",&phu);
a[i][j]=phu;
if (a[i][j]<=0) continue;
tongduong+=a[i][j];
if (cucdai<a[i][j]) cucdai=a[i][j];
++soptd;
}
printf("\n So phan tu duong la : %d",soptd);
printf("\n Tong cac phan tu duong la : %8.2f",tongduong);
printf("\n Cuc dai phan tu duong la : %8.2f",cucdai);
}
55
56
Ch-ng 6
Hm
V d :
float max3s(float a, float b, float c)
khai bo cc i c dng :
Kiu i 1 tn i 1, kiu i 2 tn i 2,..., kiu i n tn i n
Thn hm :
Sau dng tiu l thn hm. Thn hm l ni dung chnh ca hm bt u v kt thc
bng cc du { }.
57
V d :
Xt bi ton : Tm gi tr ln nht ca ba s m gi tr m gi tr ca chng -c -a vo
bn phm.
Xy dng ch-ng trnh v t chc thnh hai hm : Hm main() v hm max3s. Nhim v
ca hm max3s l tnh gi tr ln nht ca ba s c vo, gi s l a,b,c. Nhim v ca hm
main() l c ba gi tr vo t bn phm, ri dng hm max3s tnh nh- trn, ri -a kt qu ra
mn hnh.
Ch-ng 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*/
58
return(max);
} /* Kt thc hm max3s*/
Quy tc hot ng ca hm :
Mt cch tng qut li gi hm c dng sau :
tn hm ([Danh sch cc tham s thc])
S cc tham s thc t thay vo trong danh sch cc i phi bng s tham s hnh thc
v ln l-t chng c kiu t-ng ng vi nhau.
Khi gp mt li gi hm th n s bt u -c thc hin. Ni cch khc, khi my gp
li gi hm mt v tr no trong ch-ng trnh, my s tm di ch v chuyn n hm
t-ng ng. Qu trnh din ra theo trnh t sau :
Cp pht b nh cho cc bin cc b.
Gn gi tr ca cc tham s thc cho cc i t-ng ng.
Thc hin cc cu lnh trong thn hm.
Khi gp cu lnh return hoc du } cui cng ca thn hm th my s xo cc i, bin
cc b v ra khi hm.
Nu tr v t mt cu lnh return c cha biu thc th gi tr ca biu thc -c gn cho
hm. Gi tr ca hm s -c s dng trong cc biu thc cha n.
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.
59
Khng nht thit phi khai bo nguyn mu hm. Nh-ng ni chung nn c v n cho
php ch-ng trnh bin dch pht hin li khi gi hm hay t ng vic chuyn dng.
Nguyn mu ca hm thc cht l dng u tin ca hm thm vo du ;. Tuy nhin
trong nguyn mu c th b tn cc i.
Hm th-ng c mt vi i. V d nh- hm max3s c ba i l a,b,c. c ba i ny u
c gi tr float. Tuy nhin, cng c hm khng i nh- hm main.
Hm th-ng cho ta mt gi tr no . L d nhin gi tr ca hm ph thuc vo gi tr
cc i.
6.2. Hm khng cho cc gi tr :
Cc hm khng cho gi tr ging nh- th tc ( procedure ) trong ngn ng lp trnh
PASCAL. Trong tr-ng hp ny, kiu ca n l void.
V d hm tm gi tr max trong ba s l max3s trn c th -c vit thnh th tc hin
th s cc i trong ba s nh- sau :
void htmax3s(float a, float b, float c)
{
float max;
max=a;
if (max<b) max=b;
if (max<c) max=c;
}
Lc ny, trong hm main ta gi hm htmax3s bng cu lnh :
htmax3s(x,y,z);
6.3. Hm qui :
6.3.3. M u :
C khng nhng cho php t hm ny gi ti hm khc, m n cn cho php t mt im
trong thn ca mt hm gi ti chnh hm . Hm nh- vy gi l hm qui.
Khi hm gi qui n chnh n, th mi ln gi my s to ra mt tp cc bin cc b
mi hon ton c lp vi tp cc bin cc b -c to ra trong cc ln gi tr-c.
minh ho chi tit nhng iu trn, ta xt mt v d v tnh giai tha ca s nguyn
d-ng n. Khi khng dng ph-ng php qui hm c th -c vit nh- sau :
long int gt(int n) /* Tnh n! vi n>=0*/
{
60
nu n=0
n!=n*(n-1)!
nu n>0
61
n*gtdq(n-1) (**)
Biu thc trn li gi hm gtdq ln th ba. My li to ra i n ln th ba v y n th
ba c gi tr bng 1. i n=1 th ba li -c truyn cho hm, lc ny iu kin trong lnh if -c
tho mn, my i thc hin cu lnh :
return 1=gtdq(1) (***)
Bt u t y, my s thc hin ba ln ra khi hm gtdq. Ln ra khi hm th nht ng
vi ln vo th ba. Kt qu l i n th ba -c gii phng, hm gtdq(1) cho gi tr l 1 v my
tr v xt gi tr biu thc
n*gtdq(1) y l kt qu ca (**)
y, n l n th hai v c gi tr bng 2. Theo cu lnh return, my s thc hin ln ra khi hm
ln th hai, i n th hai s -c gii phng, kt qu l biu thc trong (**) c gi tr l 2.1. Sau
my tr v biu thc (*) lc ny l :
n*gtdq(2)=n*2*1
n li hiu l th nht, n c gi tr bng 3, do vy gi tr ca biu thc trong (*) l 3.2.1=6. Chnh
gi tr ny -c s dng trong cu lnh printf ca hm main() nn kt qu in ra trn mn hnh l :
3!=6
Ch :
Hm qui so vi hm c th dng vng lp th n gin hn, tuy nhin vi my tnh
khi dng hm qui s dng nhiu b nh trn ngn xp v c th dn n trn ngn xp. V vy
khi gp mt bi ton m c th c cch gii lp ( khng dng qui ) th ta nn dng cch lp
ny. Song vn tn ti nhng bi ton ch c th gii bng qui.
6.3.2. Cc bi ton c th dng qui :
Ph-ng php qui th-ng p dng cho cc bi ton ph thuc tham s c hai c im
sau :
Bi ton d dng gii quyt trong mt s tr-ng hp ring ng vi cc gi tr c bit ca
tham s. Ng-i ta th-ng gi l tr-ng hp suy bin.
Trong tr-ng hp tng qut, bi ton c th qui v mt bi ton cng dng nh-ng gi tr
tham s th b thay i. Sau mt s hu hn b-c bin i d qui n s dn ti tr-ng hp suy
bin.
Bi ton tnh n giai tha nu trn th hin r nt c iu ny.
6.3.3. Cch xy dng hm qui :
62
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)
63
return uscln(a-b,b);
else
return uscln(a,b-a);
}
V d 2 :
Ch-ng trnh c vo mt s ri in n ra d-i dng cc k t lin tip.
# include "stdio.h"
# include "conio.h"
void prind(int n);
main()
{
int a;
clrscr();
printf("n=");
scanf("%d",&a);
prind(a);
getch();
}
void prind(int n)
{
int i;
if (n<0)
{ putchar('-');
n=-n;
}
if ((i=n/10)!=0)
prind(i);
putchar(n%10+'0');
}
6.4. B tin s l C :
64
V d :
#define YES 1
Macro thay bin YES bi gi tr 1 c ngha l h c ch no trong ch-ng trnh c xut
hin bin YES th n s -c thay bi gi tr 1.
Phm vi cho tn -c nh ngha bi #define l t im nh ngha n cui file gc. C
th nh ngha li tn v mt nh ngha c th s dng cc nh ngha khc tr-c . Php th
khng thc hin cho cc xu du nhy, v d nh- YES l tn -c nh ngha th khng c vic
thay th no -c thc hin trong on lnh c "YES".
V vic thit lp #define l mt b-c chun b ch khng phi l mt phn ca ch-ng
trnh bin dch nn c rt t hn ch v vn phm v vic phi nh ngha ci g. Chng hn nhnhng ng-i lp trnh -a thch PASCAL c th nh ngha :
#define then
#define begin {
#define end; }
65
66
y=10*5;
z=x+y;
z=x+y+6;
z=5*x+y;
z=5*(x+y);
z=5*((x)+(y));
printf("Z=%d",z);
getch();
return;
}
Ch-ng trnh s dng MACRO s nh- sau :
#define BEGIN {
#define END }
#define INTEGER int
#define NB 10
#define LIMIT NB*5
#define SUMXY x+y
#define SUM1 (x+y)
#define SUM2 ((x)+(y))
main()
BEGIN
INTEGER x,y,z;
x=5;
y=LIMIT;
z=SUMXY;
z=5*SUMXY;
z=5*SUM1;
z=5*SUM2;
printf("\n Z=%d",z);
getch();
return;
END
67
Ch-ng 7
Con tr
7.1. Con tr v a ch :
V con tr cha a ch ca i t-ng nn n c th xm nhp vo i t-ng gin tip qua
con tr. Gi s x l mt bin kiu int, v gi s px l con tr -c to ra theo mt cch no .
Php ton mt ngi & s cho a ch ca i t-ng, nn cu lnh :
px=&x;
s gn a ch ca bin x cho tr px, v px by gi -c gi l " tr ti bin x ". Php ton & ch
p dng -c cho cc bin v phn t bng, kt cu kiu &(x+1) v &3 l khng hp l. Ly i
ch ca bin register cng l sai.
Php ton mt ngi * coi l ton hng ca n l i ch cn xt v thm nhp ti a ch
ly ra ni dung. Nu bin y c kiu int th th lnh :
y=*px;
s gn gi tr ca bin m tr px tr ti. Vy dy lnh :
px=&x;
y=*px;
s gn gi tr ca x cho y nh- trong lnh :
y=x;
Cc khai bo cho cc bin con tr c dng :
tn kiu *tn con tr
V d :
Nh- trong v d trn, ta khai bo con tr px kiu int :
int *px;
68
Trong khai bo trn ta ng ni rng l mt cch t-ng tr-ng, rng t hp *px c kiu int,
tc l nu px xut hin trong ng cnh *px th n cng t-ng -ng vi bin c kiu int.
Con tr c th xut hin trong cc biu thc. Chng hn, nu px tr ti s nguyn x th
*px c th xut hin trong bt k ng cnh no m x c th xut hin.
V d :
Lnh
y=*px+1;
s t y ln hn x mt n v.
Lnh
printf("%d",*px);
s in ra gi tr hin ti ca x
Lnh :
d=sqrt((double) *px);
s gn cho bin d cn bc hai ca x, gi tr ny b buc phi chuyn sang double tr-c khi -c
chuyn cho sqrt ( cch dng hm sqrt ).
Trong cc biu thc kiu nh- :
y=*px+1;
php ton mt ngi * v & c mc -u tin cao hn cc php ton s hc, cho nn biu thc ny
ly bt k gi tr no m px tr ti, cng vi 1 ri gn cho y.
Con tr cng c th xut hin bn v tri ca php gn. Nu px tr ti x th sau lnh :
*px=0;
x s c gi tr bng 0. Cng t-ng t cc lnh:
*px+=1;
(*px)++;
s tng gi tr ca x ln 1 dn v.
Cc du ngoc n cu lnh cui l cn thit , nu khng th biu thc s tng px thay
cho tng bin m n tr ti v php ton mt ngi nh- * v ++ -c tnh t phi sang tri.
Cui cng, v con tr l bin nn ta c thao tc chng nh- i vi cc bin khc. Nu py
cng l con tr int th lnh :
py=px;
s sao ni dung ca px vo py, ngha l lm cho py tr ti ni m px tr.
69
*(a+i)
p[i]
*(p+i)
V d :
70
Cch 1:
#include "stdio.h"
main()
{
float a[4],tong;
int i;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",a+i);
}
tong=0;
for (i=0;i<4;++i)
tong+=a[i];
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
}
Cch 2 :
#include "stdio.h"
main()
{
float a[4],tong, *troa;
int i;
troa=a;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",&troa[i]);
}
tong=0;
for (i=0;i<4;++i)
tong+=troa[i];
71
Ch :
Mng mt chiu v con tr t-ng ng phi cng kiu.
7.2.4. Mng, con tr v xu k t :
Nh- ta bit tr-c 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;
72
th php gn :
xau="Ha noi"
l hon ton c ngha. Sau khi thc hin cu lnh ny trong con tr xau s c a ch u ca
mng (kiu char) ang cha xu k t bn phi. Khi cc cu lnh :
puts("Ha noi");
puts(xau);
s c cng mt tc dng l cho hin ln mn hnh dng ch Ha noi.
Mng kiu char th-ng dng cha mt dy k t c vo b nh. V d, np t bn
phm tn ca mt ng-i ta dng mt mng kiu char vi di 25, ta s dng cc cu lnh sau :
char ten[25];
printf("\n Ho ten :");
gets(ten);
By gi ta xem gia mng kiu char v con tr kiu char c nhng g ging v khc
nhau. thy -c s khc nhau ca chng, ta -a ra s so snh sau :
char *xau, ten[15];
ten="Ha noi"
gets(xau);
Cc cu lnh trn l khng hp l. Cu lnh th hai sai ch : ten l mt hng a ch v ta
khng th gn mt hng a ch ny cho mt hng a ch khc. Cu lnh th ba khng thc hin
-c, mc ch ca cu lnh l c t bn phm mt dy k t v l-u vo mt vng nh m con
tr xau tr ti. Song ni dung ca con tr xau cn ch-a xc nh. Nu tr xau tr ti mt
vng nh no th cu lnh ny hon ton c ngha. Chng hn nh- sau khi thc hin cu
lnh :
xau=ten;
th cch vit :
gets(ten) ; v gets(xau);
u c tc dng nh- nhau.
7.3. 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 :
73
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
a ch
Tn mng a biu th a ch u tin ca mng. Php cng a ch y -c thc hin nh- sau :
C coi mng hai chiu l mng ( mt chiu ) ca mng, nh- vy khai bo
float a[2][3];
th a l mng m mi phn t ca n l mt dy 3 s thc ( mt hng ca mng ).
V vy :
a tr phn t th nht ca mng : phn t a[0][0]
74
75
float a[2][3],*pa;
int i;
for (i=0;i<6;++i)
scanf("%f",(float*)a+i);
}
7.4. Kiu con tr, kiu a ch, cc php ton trn con tr :
7.4.1. Kiu con tr v kiu a ch :
Con tr dng l-u a ch. Mi kiu a ch cn c kiu con tr t-ng ng. Php gn
a ch cho con tr ch c th thc hin -c khi kiu a ch ph hp vi kiu con tr.
V d theo khai bo :
float a[20][30],*pa,(*pm)[30];
th :
pa l con tr float
pm l con tr kiu float [30]
a l a ch kiu float [30]
V th php gn :
pa=a;
l khng hp l. Nh-ng php gn :
pm=a;
Php gn :
Php gn ch thc hin vi cc con tr cng kiu. Mun gn cc con tr khc kiu phi
dng php p kiu nh- v d sau :
int x;
char *pc;
76
pc=(char*)(&x);
77
Nu tr pi tr n byte th 100 th *pi biu th vng nh 2 byte lin tip t byte 100 n
101.
Nu tr pc tr n byte th 100 th *pc biu th vng nh 1 byte chnh l byte 100.
Php so snh :
Cho php so snh cc con tr cng kiu, v d nu p1 v p2 l cc con tr cng kiu th
nu :
p1<p2 nu a ch p1 tr ti thp hn a ch p2 tr ti.
p1=p2 nu a ch p1 tr ti cng l a ch p2 tr ti.
p1>p2 nu a ch p1 tr ti cao hn a ch p2 tr ti.
V d :
V d 1 :
on ch-ng trnh tnh tng cc s thc dng php so snh con tr :
float a[100],*p,*pcuoi,tong=0.0;
int n;
pcuoi=a+n-1;
/* a ch cui dy*/
for (p=a;p<=pcuoi;++p)
s+=*p;
V d 2 :
Dng con tr char tch cc byte ca mt bin nguyn, ta lm nh- sau :
Gi s ta c lnh :
unsigned int n=0xABCD; /* S nguyn h 16*/
char *pc;
pc=(char*)(&n);
Khi :
*pc=0xAB (byte th nht ca n)
*pc+1=0xCD (byte th hai ca n)
7.4.3. Con tr kiu void :
Con tr kiu void -c khai bo nh- sau :
78
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;
float a[20][30];
pa=a;
Con tr void th-ng 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 :
79
Mng con tr l s m rng khi nim con tr. Mng con tr l mt mng m mi phn
t ca n cha -c mt a ch no . Cng ging nh- con tr, mng con tr c nhiu kiu :
Mi phn t ca mng con tr kiu int s cha -c cc a ch kiu int. T-ng t cho cc mng
con tr ca cc kiu khc.
Mng con tr -c khai bo theo mu :
Kiu *Tn_mng_con_tr[N];
Trong Kiu c th l int, float, double, char ... cn Tn_mng_con_tr l tn ca
mng, N l mt hng s nguyn xc nh ln ca mng.
Khi gp khai bo trn, my s cp pht N khong nh lin tip cho N phn t ca mng
Tn_mng_con_tr.
V d :
Lnh :
double *pa[100];
Khai bo mt mng con tr kiu double gm 100 phn t. Mi phn t pa[i] c th dng l-u
tr mt a ch kiu double.
Ch :
Bn thn cc mng con tr khng dng l-u tr s liu. Tuy nhin mng con tr cho
php s dng cc mng khc l-u tr s liu mt cch c hiu qu hn theo cch : chia mng
thnh cc phn v ghi nh a ch u ca mi phn vo mt phn t ca mng con tr.
Tr-c khi s dng mt mng con tr ta cn gn cho mi phn t ca n mt gi tr. Gi
tr ny phi l gi tr ca mt bin hoc mt phn t mng. Cc phn t ca mng con tr kiu
char c th -c khi u bng cc xu k t.
V d :
Xt mt t lao ng c 10 ng-i, m ca mi ng-i chnh l s th t. Ta lp mt hm
khi bit m s ca nhn vin th xc nh -c h tn ca nhn vin .
#include "stdio.h"
#include "ctype.h"
void tim(int code);
main()
{
int i;
80
7.6. Con tr ti hm :
7.6.1. Cch khai bo con tr hm v mng con tr hm :
Ta s trnh by quy tc khai bo thng qua cc v d :
V d 1:
Cu lnh :
float (*f)(float),(*mf[50])(int);
khai bo :
81
V d 2:
Cu lnh :
double (*g)(int, double),(*mg[30])(double, float);
khai bo :
82
return(x>y ? x:y);
}
double (*pf)(double,double); /* Khai bo con tr hm*/
main() /* S dng con tr hm*/
{
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.
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 b-c 0.5
#include "stdio.h"
#include "math.h"
double bp(double x) /* Hm tnh x*x */
{
return x*x;
}
83
main()
{
int i,j;
double x=1.0;
typedef double (*ham)(double);
ham f[6]; /* Khai bao mng con tr hm*/
/* C th khai bo nh- sau double (*f[6](double)*/
f[1]=bp; f[2]=sin; f[3]=cos; f[4]=exp; f[5]=sqrt;
/* Gn tn hm cho cc phn t mng con tr hm */
while (x<=10.0) /* Lp bng gi tr */
{
printf("\n");
for (j=1;j<=5;++j)
printf("%10.2f ",f[j](x));
x+=0.5;
}
}
84
Ch-ng 8
Cu trc
(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..
V d :
85
V d 1:
on ch-ng 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 ch-ng trnh :
struct nhancong
{
char ten[15];
char diachi[20]
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
};
86
int nam;
} ngay;
typedef struct
{
char ten[15];
char diachi[20]
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
} nhancong;
V d 1 :
struct ngay ngaydi, ngayden;
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)
87
Ch :
Cc bin cu trc -c khai bo theo mu trn s -c cp pht b nh mt cch y
cho tt c cc thnh phn ca n.
Vic khai bo c th thc hin ng thi vi vic nh ngha kiu cu trc. Mun vy,
ch cn t danh sch tn bin cu trc cn khai bo sau du } ca (* ) nh- trn .
Ni cch khc, va khai bo kiu va khai bo bin ta dng cch sau :
Cch 2 :
struct tn_kiu_cu_trc
{
Cc thnh phn ca cu trc
(3)
} danh_sch_tn_cc_cu_trc;
V d :
V d 1 :
struct ngay
{
int ngaythu;
char thang[12];
int nam;
} ngaydi,ngayden;
V d 2 :
struct nhancong
{
char ten[15];
char diachi[20];
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
} nhom1,nhom2;
88
Khi va nh ngha kiu cu trc va khai bo cu trc nh- trong v d trn, ta khng th
khng cn n tn kiu cu trc. Ni cch khc cu trc c th -c khai bo theo cch sau :
struct
{
Cc thnh phn ca cu trc
(4)
} danh_sch_tn_cc_cu_trc;
V d :
struct
{
int ngaythu;
char thang[12];
int nam;
} ngaydi,ngayden;
S khc nhau ca cc cch khai bo cu trc trong (3) v (4) l ch : Vi (3) ta va khai
bo -c mt kiu cu trc va khai bo -c cc cu trc, v c th dng kiu cu trc ny
khai bo cho cc cu trc khc nh- trong (2), cn (4) ch khai bo -c cc cu trc.
Ch :
Nu dng t kho typedef nh ngha kiu cu trc nh- trong mc 8.1 th khi khai bo
cc cu trc mi ta khng cn dng t kho struct, ch cn dng tn kiu.
V d nh- kiu cu trc ngay -c khai bo bng typedef trong 8.1 th khi khai bo cc cu trc
mi l ngaydi v ngayden c cng kiu ngay ta dng dng lnh sau :
ngay ngaydi,ngayden;
89
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 :
90
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.
91
date ngaysinh;
date ngayvaocq;
float luong;
} canbo;
main()
{
canbo p;
printf("\n Sinh ngay : ");
scanf("%d",&p.ngaysinh.ngay);
printf("\n Thang : ");
scanf("%d",&p.ngaysinh.thang);
printf("\n Nam : ");
scanf("%d",&p.ngaysinh.nam);
printf("\n Vao co quan ngay : ");
scanf("%d",&p.ngayvaocq.ngay);
printf("\n Thang : ");
scanf("%d",&p.ngayvaocq.thang);
printf("\n Nam : ");
scanf("%d",&p.ngayvaocq.nam);
printf("\n Luong : ");
scanf("%d",&p.luong);
fprintf(stdprn,"\n Ngay sinh:%d%s%d",p.ngaysinh.ngay,p.ngaysinh.thang,
p.ngaysinh.nam);
fprintf(stdprn,"\n Ngay vao co quan:%d%s%d",p.ngayvaocq.ngay,
p.ngayvaocq.thang,p.ngayvaocq.nam);
fprintf(stdprn,"\n Luong : %8.2f",p.luong);
}
8.4. Mng cu trc :
Nh- cp cc ch-ng tr-c, 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.
92
ca hai
V d 2 :
on ch-ng trnh sau s tnh tng l-ng cho cc phn t nhm 1:
double tongluong=0;
for (i=0;i<10;++i)
tongluong+=nhom1[i].luong;
Ch :
Khng cho php s dng php ton ly a ch i vi cc thnh phn ca mng cu trc
khc kiu nguyn. Chng hn khng cho php s dng cu lnh sau :
scanf("%f",&nhom1[5].luong);
Trong tr-ng hp ny ta dng bin trung gian.
93
94
{
char ten[20];
char diachi[25];
double bacluong;
struct ngay ngaysinh;
};
Nu khai bo :
struct nhancong *p,*p1,*p2,nc1,nc2,ds[100];
ta c :
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
95
ds[i].ngaysinh.nam
p[i].ngaysinh.nam
+ (p+i)->thnh_phn (p+i)->ngaysinh.nam
96
p[i]
*(p+i)
Cch 1 :
typedef struct pp
{
char ht[20];
char qq[25];
int tuoi;
struct pp *tiep;
} person;
Cch 2 :
typedef struct pp person
struct pp
{
char ht[20];
char qq[25];
int tuoi;
person *tiep;
};
97
Cch 3 :
struct pp
{
char ht[20];
char qq[25];
int tuoi;
struct pp *tiep;
};
typedef pp person;
Cu trc t tr -c dng xy dng danh sch lin kt ( mc ni ), l mt nhm
cc cu trc c tnh cht sau : ( Mc ni theo chiu thun ).
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 :
Vi danh sch ny, ta c th ln l-t t cu trc cui ln cu trc u theo chiu t d-i ln trn.
Ngoi ra, ta c th xy dng cc danh sch m mi phn t cha hai a ch ca cu trc tr-c v
cu trc sau. Vi loi danh sch ny, ta c th truy nhp theo c hai chiu trn.
Khi lm vic vi danh sch mc ni, ta th-ng phi tin hnh cc cng vic sau sau :
( Gi s ta c con tr p, tr pdau ch cu trc u ca danh sch, con tr tiep l thnh phn con
tr ca cu trc )
98
To danh sch mi :
Hm cp pht b nh :
void *malloc(kichthuoc_t kichthuoc);
Hm ly trong th- vin alloc.h hoc stdlib.h.
kichthuoc tnh bng s by te. Hm s -a con tr v v tr nh va -c cp hoc v NULL nu
khng b nh cn thit. Nu kichthuoc == 0 th n tr v NULL.
V d :
#include "stdio.h"
99
#include "string.h"
#include "alloc.h"
#include "process.h"
int main()
{
char *str;
/* Cp pht b nh cho xu k t */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Kt thc ch-ng trnh nu thiu b nh */
}
/* copy "Hello" vo xu */
strcpy(str, "Hello");
/* Hin th xu */
printf("String is %s\n", str);
/* Gii phng b nh */
free(str);
return 0;
}
V d :
To mt danh sch lin kt. Cc bin cu trc gm cc tr-ng : H tn, Qu qun, tui,
v mt tr-ng con tr l Tip.
Mc ni theo chiu thun (Vo tr-c ra tr-c FIFO first in first out ):
#include "stdio.h"
#include "alloc.h"
#include "conio.h"
#include "string.h"
typedef struct pp
{
char ht[25];
char qq[20];
int tuoi;
100
struct pp *tiep;
} nhansu;
main()
{
char tt;
nhansu *pdau,*pcuoi,*p;
char tam[10];
clrscr();
pdau=NULL;
do
{
p=(nhansu*)malloc(sizeof(nhansu));
printf("\n Ho ten : ");
gets(p->ht);
printf(" Que quan : ");
gets(p->qq);
printf(" Tuoi: ");
gets(tam);
p->tuoi=atoi(tam);
if (pdau==NULL)
{
pdau=p;
pcuoi=p;
p->tiep=NULL;
}
else
{
pcuoi->tiep=p;
pcuoi=p;
p->tiep=NULL;
}
printf("\nBam phim bat ky de tiep tuc, ESC de dung");
tt=getch();
} while(tt!=27) ;
101
102
gets(p->ht);
printf(" Que quan : ");
gets(p->qq);
printf(" Tuoi: ");
gets(tam);
p->tuoi=atoi(tam);
if (pdau==NULL)
{
pdau=p;
pcuoi=p;
p->tiep=NULL;
}
else
{
p->tiep=pcuoi;
pcuoi=p;
}
printf("\nBam phim bat ky de tiep tuc, ESC de dung");
tt=getch();
} while(tt!=27) ;
/* -a danh sch lin kt ra mn hnh, tr pdau tro */
printf("\n Danh sach nhu sau :\n");
p=pcuoi;
while (p!=NULL)
{
printf("\n Ho ten: %25s Que : %20s Tuoi :
%d",(*p).ht,(*p).qq,(*p).tuoi);
p=p->tiep;
}
getch();
}
103
Ch-ng 9
tp tin - file
D liu ghi ln tp theo cc byte nh phn nh- b nh, trong qu trnh nhp xut, d
liu khng b bin i.
104
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 :
105
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 tr-c khi chuyn t c sang ghi hoc
ng-c li. Ta s cp n cc hm vi tnh nng xo sau ny.
106
V d :
f=fopen("TEPNP","wb");
9.2.3. ng tp - hm fclose :
Cu trc ng php ca hm :
int fclose(FILE *fp);
Cng dng :
Hm dng ng tp khi kt thc cc thao tc trn n. Khi ng tp, my thc hin cc
cng vic sau :
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);
107
Cng dng :
Hm dng kim tra li khi thao tc trn tp fp. Hm cho gi tr 0 nu khng c li,
tri li hm cho gi tr khc 0.
108
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);
109
sb l s byte cn di chuyn.
xp cho bit v tr xut pht m vic dch chuyn -c bt u t .
xp c th nhn cc gi tr sau :
xp=SEEK_SET hay 0 : Xut pht t u tp.
xp=SEEK_CUR hay 1: Xut pht t v tr hin ti ca con tr ch v.
xp=SEEK_END hay 2 : Xut pht t cui tp.
Cng dng :
Chuyn con tr ch v ca tp fp v v tr xc nh bi xp qua mt s byte xc nh bng
gi tr tuyt i ca sb. Chiu di chuyn l v cui tp nu sb d-ng, tri li n s di chuyn v
u tp. Khi thnh cng, hm tr v gi tr 0. Khi c li hm tr v gi tr khc khng.
Ch :
Khng nn dng fseek trn tp tin vn bn, do s chuyn i k t s lm cho vic nh
v thiu chnh xc.
V d :
fseek(stream, SEEK_SET, 0);
fseek(fp,0,SEEK_END);
ftell(fp) cho gi tr 3.
110
Sau lnh
fseek(fp,-1,SEEK_END);
ftell(fp) cho gi tr 2.
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()
{
FILE *stream;
struct mystruct s;
stream = fopen("TEST.TXT", "wb") /* M tp TEST.TXT */
s.i = 0;
s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* Vit cu trc vo tp */
111
fclose(stream); /* ng tp */
return 0;
}
9.2.11. c cc mu tin t tp - hm fread :
Cu trc ng php ca hm :
int fread(void *ptr, int size, int n, FILE *fp);
Nguyn hm trong : stdio.h .
Trong :
ptr l con tr tr ti vng nh cha d liu cn ghi.
size l kch th-c ca mu tin theo byte
n
l s mu tin cn ghi
fp
l con tr tp
Cng dng :
Hm c n mu tin kch th-c size byte t tp fp ln ln vng nh ptr.
Hm s tr v mt gi tr bng s mu tin thc s c -c.
V d :
#include "string.h"
#include "stdio.h"
main()
{
FILE *stream;
char msg[] = "Kim tra";
char buf[20];
stream = fopen("DUMMY.FIL", "w+");
/* Vit vi d liu ln tp */
fwrite(msg, strlen(msg)+1, 1, stream);
/* Tm im u ca file */
fseek(stream, SEEK_SET, 0);
/* c s liu v hin th */
112
V d :
#include "stdio.h"
main()
{
char msg[] = "Hello world\n";
int i = 0;
while (msg[i])
putc(msg[i++], stdout); /* stdout thit b ra chun - Mn hnh*/
return 0;
}
113
V d :
#include "string.h"
#include "stdio.h"
#include "conio.h"
main()
{
FILE *stream;
char string[] = "Kiem tra";
char ch;
/* M tp cp nht*/
stream = fopen("DUMMY.FIL", "w+");
/*Vit mt xu k t vo tp */
fwrite(string, strlen(string), 1, stream);
/* Tm v tr u ca tp */
fseek(stream, 0, SEEK_SET);
do
{
114
/* c mt k t t tp */
ch = fgetc(stream);
/* Hin th k t */
putch(ch);
} while (ch != EOF);
fclose(stream);
return 0;
}
9.2.13. Xo tp - hm unlink:
Cu trc ng php :
int unlink(const char *tn_tp)
Nguyn hm trong : dos.h, io.h, stdio.h .
Trong
tn_tp l tn ca tp cn xo.
Cng dng :
Dng xo mt tp trn a. Nu thnh cng, hm cho gi tr 0, tri li hm cho gi tr
EOF.
V d :
#include <stdio.h>
#include <io.h>
int main(void)
{
FILE *fp = fopen("junk.jnk","w");
int status;
fprintf(fp,"junk");
status = access("junk.jnk",0);
if (status == 0)
printf("Tp tn ti\n");
else
printf("Tp khng tn ti\n");
fclose(fp);
unlink("junk.jnk");
115
status = access("junk.jnk",0);
if (status == 0)
printf("Tp tn ti\n");
else
printf("Tp khng tn ti\n");
return 0;
}
116
Ch-ng 10
ho
10.1. Khi ng ho :
Mc ch ca vic khi ng h thng ho l xc nh thit b ho (mn hnh) v
mode ho s s dng trong ch-ng trnh. lm cng vic ny, ta c hm sau :
void initgraph(int *graphdriver,int graphmode,char *driverpath);
Trong :
graphmode
phn gii
DETECT (0)
CGA (1)
MCGA (2)
EGA (3)
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
117
EGA64 (4)
EGA64LO (0)
640x200
EGA64Hi (1)
640x350
EGAMONO (5)
EGAMONOHi (0)
640x350
VGA (9)
VGALO (0)
640x200
VGAMED (1)
640x350
VGAHI (2)
640x480
HERCMONO (7)
HERCMONOHI
720x348
ATT400 (8)
ATT400C0 (0)
320x200
ATT400C1 (1)
320x200
ATT400C2 (2)
320x200
ATT400C3 (3)
320x200
ATT400MED (4)
640x400
ATT400HI (5)
640x400
PC3270 (10)
PC3270HI (0)
720x350
IBM8514 (6)
PC3270LO (0)
640x480 256 mu
PC3270HI (1)
1024x768 256 mu
Ch :
V d :
Gi s my tnh c mn hnh VGA, cc tp tin ho cha trong th- mc C:\TC \BGI,
khi ta khi ng h thng ho nh- sau :
#include "graphics.h"
main()
{
int mh=VGA,mode=VGAHI; /*Hoc mh=9,mode=2*/
initgraph(&mh,&mode,"C:\\TC\\BGI");
/* V k t \ trong C l k t c bit nn ta phi gp i n */
}
118
V d :
Ch-ng trnh d-i y xc nh kiu mn hnh ang s dng :
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
printf("\n Gia tri so cua man hinh la : %d",mh);
printf("\n Gia tri so mode do hoa la : %d",mode);
closegraph();
}
10.2. Cc hm ho :
10.2.1. Mu v mu :
t mu nn :
119
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
Gi tr s
Kiu mu t
EMPTY_FILL
T bng mu nn
120
SOLID_FILL
LINE_FILL
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
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 h-ng.
10.2.2. V v t mu :
C th chia cc -ng v hnh thnh bn nhm chnh :
-ng thng.
Hnh ch nht.
121
Cung trn :
v mt cung trn ta dng hm :
void arc(int x, int y, int gd, int gc, int r);
Trong :
(x,y) l to tm cung trn.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
r l bn knh cung trn .
V d :
V mt cung trn c tm ti (100,50), gc u l 0, gc cui l 180, bn knh 30.
arc(100,50,0,180,30);
-ng trn :
v -ng trn ta dng hm :
void circle(int x, int y, int r);
Trong :
(x,y) l to tm cung trn.
r l bn knh -ng trn.
V d :
V mt -ng trn c tm ti (100,50) v bn knh 30.
circle(100,50,30);
Cung elip
v mt cung elip ta dng hm :
void ellipse(int x, int y, int gd, int gc, int xr, int yr);
Trong :
(x,y) l to tm cung elip.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
122
xr l bn trc nm ngang.
yr l bn trc thng ng.
V d :
V mt cung elip c tm ti (100,50), gc u l 0, gc cui l 180, bn trc ngang 30,
bn trc ng l 20.
ellipse(100,50,0,180,30,20);
Hnh qut :
v v t mu mt hnh qut ta dng hm :
void pieslice(int x, int y, int gd, int gc, int r);
Trong :
(x,y) l to tm hnh qut.
gd l gc u hnh qut (0 n 360 ).
gc l gc cui hnh qut (gd n 360 ).
r l bn knh hnh qut .
V d :
Ch-ng trnh d-i y s v mt cung trn gc phn t- th nht, mt cung elip gc
phn t- th ba, mt -ng trn v mt hnh qut qut t 90 n 360 .
# include "graphics.h"
#include "stdio.h"
#include "conio.h"
main()
{
int md=0,mode;
initgraph(&md,&mode,"C:\\TC\\BGI");
setbkcolor(BLUE);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,RED);;
arc(160,50,0,90,45);
circle(160,150,45);
pieslice(480,150,90,360,45);
123
getch();
closegraph();
}
V -ng gp khc :
Mun v -ng gp khc i qua n im : (x1,y1), (x2,y2), ...., (xn,yn) th tr-c ht ta
T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);
124
main()
{
int md=0,mode;
initgraph(&md,&mode,"C:\\TC\\BGI");
setbkcolor(CYAN);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,MAGENTA);
drawpoly(3,poly1);
fillpoly(3,poly2);
fillpoly(4,poly3);
getch();
closegraph();
}
V -ng thng :
v -ng thng ni hai im bt k c to (x1,y1) v (x2,y2) ta s dng hm sau :
void line(int x1, int y1, int x2, int y2);
125
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 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"
126
#include "stdio.h"
#include "conio.h"
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
setbkcolor(BLUE);
setcolor(YELLOW);
setlinestyle(SOLID-LINE,0,THICK_WIDTH);
moveto(320,100); /* con chy v tr ( 320,100 ) */
line(20,20,620,20); /* con chy vn v tr ( 320,100 ) */
linerel(-300,80);
lineto(620,180);
lineto(620,20);
getch();
closegraph();
}
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 ch-a -c t mu bi cc hm v hoc hm putpixel (m ch mi -c to
mu nn bi setbkcolor) th hm cho gi tr 0.
T min :
127
128
}
10.2.5. Hnh ch nht :
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);
top=1
top=0
V d :
Ch-ng trnh d-i y to nn mt hnh ch nht, mt khi hnh ch nht v mt hnh
hp c np :
#include "graphics.h"
main()
{
int mh=mode=0;
129
initgraph(&mh,&mode,"");
if (graphresult != grOk) exit(1);
setbkcolor(GREEN);
setcolor(RED);
setfillstyle(CLOSE_DOT_FILL,YELLOW);
rectangle(5,5,300,160);
bar(3,175,300,340);
bar3d(320,100,500,340,100,1);
closegraph();
}
10.2.6. Ca s (Viewport) :
Thit lp viewport :
V d :
setviewport(100,50,200,150,1);
Lp nn mt vng viewport hnh ch nht c to gc tri cao l (100,50) v to gc phi
thp l (200,150) (l to tr-c khi t viewport).
Ch :
Sau khi lp viewport, ta c h to mi m gc trn bn tri s c to (0,0).
130
Xa viewport :
S dng hm :
void clearviewport(void);
To m d-ng :
Nh s dng viewport c th vit cc ch-ng trnh ho theo to m d-ng. Mun
131
y : t -getmaxy()/2 n 0.
Phn t- phi d-i : x d-ng, y d-ng.
x : t 0 n getmaxx()/2.
y : t 0 n getmaxy()/2.
V d :
Ch-ng trnh v th hm sin x trong h trc to m d-ng. Honh x ly cc gi
tr t -4 n 4. Trong ch-ng trnh c s dng hai hm mi l settextjustify v outtextxy ta s
cp ngay trong phn sau.
#include "graphics.h"
#include "conio.h"
#include "math.h"
#define TYLEX 20
#define TYLEY 60
main()
{
int mh=mode=DETECT;
int x,y,i;
initgraph(mh,mode,"");
if (graphresult!=grOK ) exit(1);
setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);
setbkcolor(BLUE);
setcolor(YELLOW);
line(-getmaxx()/2,0,getmaxx()/2,0);
line(0,-getmaxy()/2,0,getmaxy()/2,0);
settextjustify(1,1);
setcolor(WHITE);
outtextxy(0,0,"(0,0)");
for (i=-400;i<=400;++i)
{
x=floor(2*M_PI*i*TYLEX/200);
y=floor(sin(2*M_PI*i/200)*TYLEY);
putpixel(x,y,WHITE);
}
132
getch();
closegraph();
}
S dng cc Fonts ch :
Cc Fonts ch nm trong cc tp tin *.CHR trn a. Cc Fonts ny cho cc kch th-c
133
SANS_SERIF_FONT=3
GOTHIC_FONT=4
Tham s derection chn h-ng ch v nhn mt trong cc hng sau :
HORIZ_DIR=0 vn bn hin th theo h-ng nm ngang t tri qua phi.
VERT_DIR=1
CENTER_TEXT
RIGHT_TEXT
134
V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm d-i ch B.
Chiu cao :
Hm :
textheight(char *s);
cho chiu cao ( tnh bng pixel ) ca chui do con tr s tr ti.
V d 1 :
Vi font bit map v h s phng i l 1 th textheight("A") ch gi tr l 8.
V d 2 :
#include "stdio.h"
#include "graphics.h"
main()
{
int mh=mode=DETECT, y,size;
initgraph(mh,mode,"C:\\TC\\BGI");
y=10;
settextjustify(0,0);
for (size=1;size<5;++size)
{
settextstyle(0,0,size);
outtextxy(0,y,"SACRIFICE");
y+=textheight("SACRIFICE")+10;
}
getch();
closegraph();
}
135
B rng :
Hm :
textwidth(char *s);
cho b rng chui ( tnh theo pixel ) m con tr s tr ti da trn chiu di chui, kch th-c font
ch, h s phng i.
136
Mc lc
Gii thiu
Ch-ng 1
Cc khi nim c bn
1.1. Tp k t dng trong ngn ng C
1.2. T kho
1.3. Tn
1.4. Kiu d liu
1.4.1. Kiu k t (char)
1.4.2. Kiu nguyn
1.4.3. Kiu du phy ng
1.5. nh ngha kiu bng TYPEDEF
1.5.1. Cng dng
1.5.2. Cch vit
1.6. Hng
1.6.1. Tn hng
1.6.2. Cc loi hng
1.6.2.1. Hng int
1.6.2.2. Hng long
1.6.2.3. Hng int h 8
1.6.2.4. Hng int h 16
1.6.2.5. Hng k t
1.6.2.5. Hng xu k t
1.7. Bin
1.8. Mng
Ch-ng 2
Cc lnh vo ra
2.1. Thm nhp vo th- vin chun
2.2. Cc hm vo ra chun - getchar() v putchar()
2.2.1. Hm getchar()
2.2.2. Hm putchar()
2.2.3. Hm getch()
137
2.2.4. Hm putch()
2.3. -a kt qu ln mn hnh - hm printf
2.4. Vo s liu t bn phm - hm scanf
2.5. -a kt qu ra my in
Ch-ng 3
Biu thc
3.1. Biu thc
3.2. Lnh gn v biu thc
3.3. Cc php ton s hc
3.4. Cc php ton quan h v logic
3.5. Php ton tng gim
3.6. Th t -u tin cc php ton
3.7. Chuyn i kiu gi tr
Ch-ng 4
Cu trc c bn ca ch-ng trnh
4.1. Li ch thch
4.2. Lnh v khi lnh
4.2.1. Lnh
4.2.2. Khi lnh
4.3. Cu trc c bn ca ch-ng trnh
4.4. Mt s qui tc cn nh khi vit ch-ng trnh
Ch-ng 5
Cu trc iu khin
5.1. Cu trc c iu kin
5.1.1. Lnh if-else
5.1.2. Lnh else-if
5.2. Lnh nhy khng iu kin - ton t goto
5.3. Cu trc r nhnh - ton t switch
5.4. Cu trc lp
5.4.1. Cu trc lp vi ton t while v for
138
139
140
Bi tp.
Phn th nht : Nhm cc bi tp v tnh ton,hm v chu trnh .
Bi tp 1 :
Vit ch-ng trnh hin th thp Pascal :
141
BI tp
Ngn ng lp trnh C
Phn 1 : Nhm cc bI tp v tnh ton, hm v chu trnh .
BI tp 1 :
Vit ch-ng trnh hin th thp PASCAL :
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
Vit ch-ng trnh hin th thp o ng-c.
BI tp 2 :
142
Vit ch-ng trnh nhp ba s thc. Kim tra xem ba s c th l chiu di ca ba cnh
ca mt tam gic -c khng? Nu -c th tnh chu vi v din tch tam gic .
BI tp 3 :
Vit ch-ng trnh tnh hm s :
f(x) =
K0
x
K1+ ----------------------------------------x
K2 + -----------------------x
K3 + ---------------------x
K4 + --------------------
x
Kn-1 + ------------Kn
Bi tp 4 :
Vit ch-ng trnh tnh tch hai ma trn C mxn = A mxn * B nxk .
Bi tp 5 :
Vit ch-ng trnh nhp vo mt dy s sau tch dy ny thnh hai dy ch cha cc
s d-ng v ch cha cc s m. Tnh tng s phn t ca mi dy sau sp xp hai
dy c gi tr gim dn.
Bi tp 6 :
Vit ch-ng trnh nhp vo mt ma trn A nxm. Tm gi tr cc i v cc tiu ca cc
phn t ca mng .
Bi tp 7 :
Trm tru,trm c
Tru ng n nm
Tru nm n ba
L kh tru gi
Ba con mt b.
Tnh s tru mi loi .
Bi tp 8 :
Va g va ch
B li cho trn
ng ba su con
Mt trm chn chn .
143
Tnh s g, s ch .
Bi tp 9 :
144