You are on page 1of 164

i hc Thi Nguyn

Tr-ng H K thut Cng nghip


Khoa in T
B mn K Thut My tnh
----------oOo----------

Gio trnh C
Bin son: Nguyn Tun Anh

Thi Nguyn, 2007

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

Gii thiu
Tin hc l mt ngnh khoa hc mi nhn pht trin ht sc nhanh chng trong vi
chc nm li y v ngy cng m rng lnh vc nghin cu, ng dng trong mi mt ca i
sng x hi.
Ngn ng lp trnh l mt loi cng c gip con ng-i th hin cc vn ca thc t
ln my tnh mt cch hu hiu. Vi s pht trin ca tin hc, cc ngn ng lp trnh cng
dn tin ho p ng cc thch thc mi ca thc t.
Khong cui nhng nm 1960 u 1970 xut hin nhu cu cn c cc ngn ng bc
cao h tr cho nhng nh tin hc trong vic xy dng cc phn mm h thng, h iu
hnh. Ngn ng C ra i t , n -c pht trin ti phng th nghim Bell. n nm
1978, gio trnh " Ngn ng lp trnh C " do chnh cc tc gi ca ngn ng l Dennish
Ritchie v B.W. Kernighan vit, -c xut bn v ph bin rng ri.
C l ngn ng lp trnh vn nng. Ngoi vic C -c dng vit h iu hnh UNIX,
ng-i ta nhanh chng nhn ra sc mnh ca C trong vic x l cho cc vn hin i ca
tin hc. C khng gn vi bt k mt h iu hnh hay my no, v mc du n -c gi l
" ngn ng lp trnh h thng" v n -c dng cho vic vit h iu hnh, n cng tin li
cho c vic vit cc ch-ng trnh x l s, x l vn bn v c s d liu.
V by gi chng ta i tm hiu th gii ca ngn ng C t nhng khi nim ban u
c bn nht.

Thi Nguyn, 2007


Nguyn Tun Anh
B mn K Thut My Tnh
Khoa in T
Tr-ng H K Thut Cng Nghip, Thi Nguyn

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

Mc lc
cc khi nim c bn ................................................................................ 6
1.1. Tp k t dng trong ngn ng C : ............................................................. 6
1.2. T kho : ..................................................................................................... 6
1.3. Tn : ............................................................................................................ 7
1.4. Kiu d liu : .............................................................................................. 7
1.4.1. Kiu k t (char) : .................................................................................................... 7
1.4.2. Kiu nguyn :........................................................................................................... 9
1.4.3. Kiu du phy ng : ................................................................................................ 9

1.5. nh ngha kiu bng TYPEDEF : ........................................................... 10


1.5.1. Cng dng :............................................................................................................. 10
1.5.2. Cch vit : ............................................................................................................... 10

1.6. Hng : ........................................................................................................ 10


1.6.1. Tn hng : ............................................................................................................... 10
1.6.2. Cc loi hng : ........................................................................................................ 11

1.7. Bin : ......................................................................................................... 14


1.8 Mng : ........................................................................................................ 15
Cc lnh vo ra ......................................................................................... 20
2.1. Thm nhp vo th- vin chun : ............................................................... 20
2.2.1. Hm getchar () : ...................................................................................................... 20
2.2.2. Hm putchar () : ...................................................................................................... 21
2.2.3. Hm getch() : .......................................................................................................... 21
2.2.4. Hm putch() : .......................................................................................................... 22

2.5. -a kt qu ra my in :............................................................................. 28
Biu thc ........................................................................................................ 30
3.1. Biu thc : ................................................................................................. 30
3.3. Cc php ton s hc : .............................................................................. 31
3.4. Cc php ton quan h v logic : .............................................................. 32
3.5. Php ton tng gim : ............................................................................... 33
3.6. Th t -u tin cc php ton : .................................................................. 34
3.7. Chuyn i kiu gi tr : ........................................................................... 35
Cu trc c bn ca ch-ng trnh ................................................. 38
4.1. Li ch thch : ........................................................................................... 38
4.2. Lnh v khi lnh : ................................................................................... 39
4.2.1. Lnh : ...................................................................................................................... 39
4.2.2. Khi lnh : .............................................................................................................. 39

4.3. Cu trc c bn ca ch-ng trnh : ........................................................... 41


4.4. Mt s qui tc cn nh khi vit ch-ng trnh : ......................................... 43
Cu trc iu khin ................................................................................. 44
5.1. Cu trc c iu kin : .............................................................................. 44
5.1.1. Lnh if-else : ........................................................................................................... 44
5.1.2. Lnh else-if : .......................................................................................................... 47

5.2. Lnh nhy khng iu kin - ton t goto : ............................................. 48


5.3. Cu trc r nhnh - ton t switch: ........................................................... 49
5.4. Cu trc lp : ............................................................................................. 51
5.4.1. Cu trc lp vi ton t while v for : ..................................................................... 51
5.4.2. Chu trnh do-while .................................................................................................. 57
3

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

5.5. Cu lnh break : ........................................................................................ 58


5.6. Cu lnh continue : ................................................................................... 59
Hm .................................................................................................................... 61
6.2. Hm khng cho cc gi tr :...................................................................... 64
6.3. Hm qui :.............................................................................................. 64
6.3.1. M u : .................................................................................................................. 64
6.3.2. Cc bi ton c th dng qui : ............................................................................ 66
6.3.4. Cc v d v dng hm qui :............................................................................... 67

6.4. B tin s l C :......................................................................................... 69


Con tr............................................................................................................ 73
7.1. Con tr v a ch : .................................................................................... 73
7.2. Con tr v mng mt chiu :..................................................................... 75
7.2.1.Php ton ly a ch : .............................................................................................. 75
7.2.2. Tn mng l mt hng a ch : .............................................................................. 75
7.2.3. Con tr tr ti cc phn t ca mng mt chiu : ................................................... 76
7.2.4. Mng, con tr v xu k t : ................................................................................... 78

7.3. Con tr v mng nhiu chiu : .................................................................. 79


7.3.1.Php ly a ch :...................................................................................................... 80
7.3.2. Php cng a ch trong mng hai chiu: ................................................................ 80
7.3.3. Con tr v mng hai chiu : .................................................................................... 81

7.4. Kiu con tr, kiu a ch, cc php ton trn con tr : ........................... 82
7.4.1. Kiu con tr v kiu a ch : .................................................................................. 82

7.5. Mng con tr : ........................................................................................... 87


7.6. Con tr ti hm : ....................................................................................... 89
7.6.1. Cch khai bo con tr hm v mng con tr hm : ................................................. 89
7.6.2. Tc dng ca con tr hm :..................................................................................... 90
7.6.3. i ca con tr hm : ............................................................................................. 91

Cu trc ......................................................................................................... 93
8.1. Kiu cu trc : ........................................................................................... 93
8.2. Khai bo theomt kiu cu trc nh ngha : ...................................... 95
8.3. Truy nhp n cc thnh phn cu trc : .................................................. 98
8.4. Mng cu trc : ....................................................................................... 101
8.5. Khi u mt cu trc : .......................................................................... 103
8.6. Php gn cu trc : .................................................................................. 103
8.7. Con tr cu trc v a ch cu trc : ...................................................... 104
8.8. Cu trc t tr v danh sch lin kt : ................................................... 107
tp tin - file ................................................................................................ 115
9.1. Khi nim v tp tin :.............................................................................. 115
9.2. Khai bo s dng tp - hm th-ng dng khi thao tc trn tp : .......... 116
9.2.1. Khai bo s dng tp : .......................................................................................... 116
9.2.2. M tp - hm fopen :............................................................................................ 116
9.2.3. ng tp - hm fclose : ......................................................................................... 118
9.2.4. ng tt c cc tp ang m- hm fcloseall : ....................................................... 119
9.2.5. Lm sch vng m - hm fflush : ....................................................................... 119
9.2.6. Lm sch vng m ca cc tp ang m - hm fflushall : .................................. 119
9.2.7. Kim tra li file - hm ferror : .............................................................................. 120
9.2.8. Kimtra cui tp - hm feof : ................................................................................ 120
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tr ch v : .................................. 121
9.2.10. Ghi cc mu tin ln tp - hm fwrite : ................................................................ 123
4

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

9.2.11. c cc mu tin t tp - hm fread : ................................................................... 124


9.2.12. Nhp xut k t : ................................................................................................ 125
9.2.13. Xo tp - hm unlink: ......................................................................................... 128

ho............................................................................................................ 130
10.1. Khi ng ho : ............................................................................... 130
10.2. Cc hm ho : .................................................................................. 133
10.2.1. Mu v mu : ...................................................................................................... 133
10.2.2. V v t mu : ..................................................................................................... 135
10.2.3. V -ng gp khc v a gic : .......................................................................... 138
10.2.4. V im, min : .................................................................................................. 142
10.2.5. Hnh ch nht : ................................................................................................... 144
10.2.6. Ca s (Viewport) : ............................................................................................. 145

10.3. X l vn bn trn mn hnh ho : .................................................. 149


Bi tP Ngn ng lp trnh C ............................................................ 162

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

Ch-ng 1

cc khi nim c bn
1.1. Tp k t dng trong ngn ng C :
Mi ngn ng lp trnh u -c xy dng t mt b k t no . Cc k t -c
nhm li theo nhiu cch khc nhau to nn cc t. Cc t li -c lin kt vi nhau theo
mt qui tc no to nn cc cu lnh. Mt ch-ng trnh bao gm nhiu cu lnh v th
hin mt thut ton gii mt bi ton no . Ngn ng C -c xy dng trn b k t sau :
26 ch ci hoa : A B C .. Z
26 ch ci th-ng : a b c .. z
10 ch s : 0 1 2 .. 9
Cc k hiu ton hc : + - * / = ( )
K t gch ni : _
Cc k t khc : . , : ; [ ] {} ! \ & % # $ ...
Du cch (space) dng tch cc t. V d ch VIET NAM c 8 k t, cn
VIETNAM ch c 7 k t.
Ch :
k t trn.

Khi vit ch-ng trnh, ta khng -c s dng bt k k t no khc ngoi cc

V d nh- khi lp ch-ng trnh gii ph-ng trnh bc hai ax2 +bx+c=0 , ta cn tnh bit
thc Delta = b2 - 4ac, trong ngn ng C khng cho php dng k t , v vy ta phi dng
k hiu khc thay th.

1.2. T kho :
char
do
extern
goto
interrupt
register
sizeof
tipedef
volatile

const
double
far
huge
long
return
static
union
while

continue
else
float
if
near
short
struct
unsigned

default
enum
for
int
pascal
signed
switch
void

ngha v cch s dng ca mi t kho s -c cp sau ny, y ta cn ch :


- Khng -c dng cc t kho t tn cho cc hng, bin, mng, hm ...

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

- T kho phi -c vit bng ch th-ng, v d : vit t kho khai bo kiu nguyn l
int ch khng phi l INT.

1.3. Tn :
Tn l mt khi nim rt quan trng, n dng xc nh cc i l-ng khc nhau
trong mt ch-ng trnh. Chng ta c tn hng, tn bin, tn mng, tn hm, tn con tr, tn
tp, tn cu trc, tn nhn,...
Tn -c t theo qui tc sau :
Tn l mt dy cc k t bao gm ch ci, s v gch ni. K t u tin ca tn phi
l ch hoc gch ni. Tn khng -c trng vi kho. di cc i ca tn theo mc nh l
32 v c th -c t li l mt trong cc gi tr t 1 ti 32 nh chc nng : Option-CompilerSource-Identifier length khi dng TURBO C.
V d :
Cc tn ng :
a_1
Cc tn sai

delta

x1

_step GAMA

:
3MN

K t u tin l s

m#2

S dng k t #

f(x)

S dng cc du ( )

do

Trng vi t kho

te ta

S dng du trng

Y-3

S dng du -

Ch :
Trong TURBO C, tn bng ch th-ng v ch hoa l khc nhau v d tn AB khc vi
ab. trong C, ta th-ng dng ch hoa t tn cho cc hng v dng ch th-ng t tn
cho hu ht cho cc i l-ng khc nh- bin, bin mng, hm, cu trc. Tuy nhin y khng
phi l iu bt buc.

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 :
7

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


K t

M ASCII

048

049

050

065

066

097

098

C hai kiu d liu char : kiu signed char v unsigned char.


Kiu

Phm vi biu din

S k t

Kch
th-c

Char ( Signed char )

-128 n 127

256

1 byte

0 n 255

256

1 byte

Unsigned char

V d sau minh ho s khc nhau gia hai kiu d liu trn : Xt on ch-ng trnh sau :
char ch1;
unsigned char ch2;
......
ch1=200; ch2=200;
Khi thc cht :
ch1=-56;
ch2=200;
Nh-ng c ch1 v ch2 u biu din cng mt k t c m 200.
Phn loi k t :
C th chia 256 k t lm ba nhm :
Nhm 1: Nhm cc k t iu khin c m t 0 n 31. Chng hn k t m 13 dng
chuyn con tr v u dng, k t 10 chuyn con tr xung dng d-i ( trn cng mt ct
). Cc k t nhm ny ni chung khng hin th ra mn hnh.
8

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

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 ).
1.4.2. Kiu nguyn :
Trong C cho php s dng s nguyn kiu int, s nguyn di kiu long v s nguyn
khng du kiu unsigned. Kch c v phm vi biu din ca chng -c ch ra trong bng d-i
y :
Kiu
int

Phm vi biu din

Kch th-c

-32768 n 32767

2 byte

0 n 65535

2 byte

-2147483648 n 2147483647

4 byte

0 n 4294967295

4 byte

unsigned int
long
unsigned long
Ch :

Kiu k t cng c th xem l mt dng ca kiu nguyn.


1.4.3. Kiu du phy ng :
Trong C cho php s dng ba loi d liu du phy ng, l float, double v long
double. Kch c v phm vi biu din ca chng -c ch ra trong bng d-i y :
Kiu

Phm vi biu din

S ch s

Kch th-c

c ngha
Float

3.4E-38 n 3.4E+38

7 n 8

4 byte

Double

1.7E-308 n 1.7E+308

15 n 16

8 byte

long double

3.4E-4932 n 1.1E4932

17 n 18

10 byte

Gii thch :
My tnh c th l-u tr -c cc s kiu float c gi tr tuyt i t 3.4E-38 n
3.4E+38. Cc s c gi tr tuyt i nh hn3.4E-38 -c xem bng 0. Phm vi biu din ca
s double -c hiu theo ngha t-ng t.

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

10

1.5. nh ngha kiu bng TYPEDEF :


1.5.1. Cng dng :
T kho typedef dng t tn cho mt kiu d liu. Tn kiu s -c dng khai
bo d liu sau ny. Nn chn tn kiu ngn v gn d nh. Ch cn thm t kho typedef
vo tr-c mt khai bo ta s nhn -c mt tn kiu d liu v c th dng tn ny khai
bo cc bin, mng, cu trc, vv...
1.5.2. Cch vit :
Vit t kho typedef, sau kiu d liu ( mt trong cc kiu trn ), ri n tn ca
kiu.
V d cu lnh :
typedef int nguyen;
s t tn mt kiu int l nguyen. Sau ny ta c th dng kiu nguyen khai bo cc bin,
cc mng int nh- v d sau ;
nguyen x,y,a[10],b[20][30];
T-ng t cho cc cu lnh :
typedef float mt50[50];
t tn mt kiu mng thc mt chiu c 50 phn t tn l mt50.
typedef int m_20_30[20][30];
t tn mt kiu mng thc hai chiu c 20x30 phn t tn l m_20_30.
Sau ny ta s dng cc kiu trn khai bo :
mt50 a,b;
m_20_30 x,y;

1.6. Hng :
Hng l cc i l-ng m gi tr ca n khng thay i trong qu trnh tnh ton.
1.6.1. Tn hng :
Nguyn tc t tn hng ta xem xt trong mc 1.3.
t tn mt hng, ta dng dng lnh sau :
#define tn hng gi tr

10

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

11

V d :
#define MAX 1000
Lc ny, tt c cc tn MAX trong ch-ng trnh xut hin sau ny u -c thay bng
1000. V vy, ta th-ng gi MAX l tn hng, n biu din s 1000.
Mt v d khc :
#define pi 3.141593
t tn cho mt hng float l pi c gi tr l 3.141593.
1.6.2. Cc loi hng :
1.6.2.1. Hng int :
Hng int l s nguyn c gi tr trong khong t -32768 n 32767.
V d :
#define number1 -50

nh nghi hng int number1 c gi tr l -50

#define sodem 2732

nh nghi hng int sodem c gi tr l 2732

Ch :
Cn phn bit hai hng 5056 v 5056.0 : y 5056 l s nguyn cn 5056.0 l hng
thc.
1.6.2.2. Hng long :
Hng long l s nguyn c gi tr trong khong t -2147483648 n 2147483647.
Hng long -c vit theo cch :
1234L hoc 1234l
( thm L hoc l vo ui )
Mt s nguyn v-t ra ngoi min xc nh ca int cng -c xem l long.
V d :
#define sl 8865056L

nh nghi hng long sl c gi tr l 8865056

#define sl 8865056

nh nghi hng long sl c gi tr l 8865056

11

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

12

1.6.2.3. Hng int h 8 :


Hng int h 8 -c vit theo cch 0c1c2c3.... y ci l mt s nguyn d-ng trong
khong t 1 n 7. Hng int h 8 lun lun nhn gi tr d-ng.
V d :
#define h8 0345

nh nghi hng int h 8 c gi tr l


3*8*8+4*8+5=229

1.6.2.4. Hng int h 16 :


Trong h ny ta s dng 16 k t : 0,1..,9,A,B,C,D,E,F.
Cch vit

Gi tr

a hoc A

10

b hoc B

11

c hoc C

12

d hoc D

13

e hoc E

14

f hoc F

15

Hng s h 16 c dng 0xc1c2c3... hc 0Xc1c2c3... y ci l mt s trong h 16.

V d :
#define h16 0xa5
#define h16 0xA5
#define h16 0Xa5
#define h16 0XA5
Cho ta cc hng s h16 trong h 16 c gi tr nh- nhau. Gi tr ca chng trong h 10 l :
10*16+5=165.
1.6.2.5. Hng k t :
Hng k t l mt k t ring bit -c vit trong hai du nhy n, v d 'a'.
Gi tr ca 'a' chnh l m ASCII ca ch a. Nh- vy gi tr ca 'a' l 97. Hng k t c th
tham gia vo cc php ton nh- mi s nguyn khc. V d :
'9'-'0'=57-48=9
12

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

13

V d :
#define kt 'a'

nh nghi hng k t kt c gi tr l 97

Hng k t cn c th -c vit theo cch sau :


' \c1c2c3'
trong c1c2c3 l mt s h 8 m gi tr ca n bng m ASCII ca k t cn biu din.
V d : ch a c m h 10 l 97, i ra h 8 l 0141. Vy hng k t 'a' c th vit d-i dng
'\141'. i vi mt vi hng k t c bit ta cn s dng cch vit sau ( thm du \ ) :
Cch vit

K t

'\''

'

'\"'

"

'\\'

'\n'

\n (chuyn dng )

'\0'

\0 ( null )

'\t'

Tab

'\b'

Backspace

'\r'

CR ( v u dng )

'\f'

LF ( sang trang )

Ch :
Cn phn bit hng k t '0' v '\0'. Hng '0' ng vi ch s 0 c m ASCII l 48,
cn hng '\0' ng vi kt \0 ( th-ng gi l k t null ) c m ASCII l 0.
Hng k t thc s l mt s nguyn, v vy c th dng cc s nguyn h 10 biu
din cc k t, v d lnh printf("%c%c",65,66) s in ra AB.
1.6.2.5. Hng xu k t :
Hng xu k t l mt dy k t bt k t trong hai du nhy kp.
V d :
#define xau1 "Ha noi"
#define xau2 "My name is Giang"
13

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

14

Xu k t -c l-u tr trong my d-i dng mt bng c cc phn t l cc k t ring


bit. Trnh bin dch t ng thm k t null \0 vo cui mi xu ( k t \0 -c xem l du
hiu kt thc ca mt xu k t ).
Ch :
Cn phn bit hai hng 'a' v "a". 'a' l hng k t -c l-u tr trong 1 byte, cn "a" l
hng xu k t -c l-u tr trong 1 mng hai phn t : phn t th nht cha ch a cn phn
t th hai cha \0.

1.7. Bin :
Mi bin cn phi -c khai bo tr-c khi -a vo s dng. Vic khai bo bin -c
thc hin theo mu sau :
Kiu d liu ca bin

tn bin ;

V d :
int a,b,c;

Khai bo ba bin int l a,b,c

long dai,mn;

Khai bo hai bin long l dai v mn

char kt1,kt2;

Khai bo hai bin k t l kt1 v kt2

float x,y

Khai bo hai bin float l x v y

double canh1, canh2;

Khai bo hai bin double l canh1 v canh2

Bin kiu int ch nhn -c cc gi tr kiu int. Cc bin khc cng c ngha t-ng
t. Cc bin kiu char ch cha -c mt k t. l-u tr -c mt xu k t cn s dng
mt mng kiu char.
V tr ca khai bo bin :
Cc khai bo cn phi -c t ngay sau du { u tin ca thn hm v cn ng
tr-c mi cu lnh khc. Sau y l mt v d v khai bo bin sai :
( Khi nim v hm v cu trc ch-ng trnh s nghin cu sau ny)
main() {

int a,b,c;
a=2;
int d; /* V tr ca khai bo sai */
.....

14

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

15

Khi u cho bin :


Nu trong khai bo ngay sau tn bin ta t du = v mt gi tr no th y chnh l
cch va khai bo va khi u cho bin.
V d :
int a,b=20,c,d=40;
float e=-55.2,x=27.23,y,z,t=18.98;
Vic khi u v vic khai bo bin ri gn gi tr cho n sau ny l hon ton 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 :
int a[10],b[4][2];
float x[5],y[3][3];
s xc nh 4 mng v ngha ca chng nh- sau :
15

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

Th t

Tn mng

Kiu mng

S chiu

Kch th-c

Cc phn t

Int

10

a[0],a[1],a[2]...a[9]

Int

4x2

b[0][0], b[0][1]

16

b[1][0], b[1][1]
b[2][0], b[2][1]
b[3][0], b[3][1]

Float

x[0],x[1],x[2]...x[4]

Float

3x3

y[0][0], y[0][1], y[0][2]


y[1][0], y[1][1], y[1][2]
y[2][0], y[2][1], y[1][2]

Ch :
Cc phn t ca mng -c cp pht cc khong nh lin tip nhau trong b nh. Ni
cch khc, cc phn t ca mng c a ch lin tip nhau.
Trong b nh, cc phn t ca mng hai chiu -c sp xp theo hng.

Ch s mng :
Mt phn t c th ca mng -c xc nh nh cc ch s ca n. Ch s ca mng
phi c gi tr int khng v-t qu kch th-c t-ng ng. S ch s phi bng s chiu ca
mng.
Gi s z,b,x,y -c khai bo nh- trn, v gi s i,j l cc bin nguyn trong i=2,
j=1. Khi :
a[j+i-1]

a[2]

b[j+i][2-i]

b[3][0]

y[i][j]

y[2][1]

16

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

17

Ch :
Mng c bao nhiu chiu th ta phi vit n c by nhiu ch s. V th nu ta vit nhsau s l sai : y[i] ( V y l mng 2 chiu ) vv..
Biu thc dng lm ch s c th thc. Khi phn nguyn ca biu thc thc s l ch
s mng.
V d :
a[2.5] l a[2]
b[1.9] l a[1]
*
Khi ch s v-t ra ngoi kch th-c mng, my s vn khng bo li, nh-ng n s truy
cp n mt vng nh bn ngoi mng v c th lm ri lon ch-ng trnh.
Ly a ch mt phn t ca mng :
C mt vi hn ch trn cc mng hai chiu. Chng hn c th ly a ch ca cc phn
t ca mng mt chiu, nh-ng ni chung khng cho php ly a ch ca phn t ca mng hai
chiu. Nh- vy my s chp nhn php tnh : &a[i] nh-ng khng chp nhn php tnh &y[i][j].
a ch u ca mt mng :
Tn mng biu th a ch u ca mng. Nh- vy ta c th dng a thay cho &a[0].
Khi u cho bin mng :
Cc bin mng khai bo bn trong thn ca mt hm ( k c hm main() ) gi l bin
mng cc b.
Mun khi u cho mt mng cc b ta s dng ton t gn trong thn hm.
Cc bin mng khai bo bn ngoi thn ca mt hm gi l bin mng ngoi.

khi u cho bin mng ngoi ta p dng cc qui tc sau :


Cc bin mng ngoi c th khi u ( mt ln ) vo lc dch ch-ng trnh bng cch
s dng cc biu thc hng. Nu khng -c khi u my s gn cho chng gi tr 0.
V d :
....
float y[6]={3.2,0,5.1,23,0,42};
int z[3][2]={
{25,31},
17

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

18

{12,13},
{45,15}
{
....
main()
{
....
}
Khi khi u mng ngoi c th khng cn ch ra kch th-c ( s phn t ) ca n. Khi
, my s dnh cho mng mt khong nh thu nhn danh sch gi tr khi u.
V d :
....
float a[]={0,5.1,23,0,42};
int m[][3]={
{25,31,4},
{12,13,89},
{45,15,22}
};
Khi ch ra kch th-c ca mng, th kch th-c ny cn khng nh hn kch th-c ca
b khi u.
V d :
....
float m[6]={0,5.1,23,0};
int z[6][3]={
{25,31,3},
{12,13,22},
{45,15,11}
};
18

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

19

....
i vi mng hai chiu, c th khi u vi s gi tr khi u ca mi hng c th
khc nhau :
V d :
....
float z[][3]={
{31.5},
{12,13},
{-45.76}
};
int z[13][2]={
{31.11},
{12},
{45.14,15.09}
};

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"

19

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

20

Ch-ng 2

Cc lnh vo ra

Ch-ng ny gii thiu th- vin vo/ra chun l mt tp cc hm -c thit k cung


cp h thng vo/ra chun cho cc ch-ng trnh C. Chng ta s khng m t ton b th- vin
vo ra y m ch quan tm nhiu hn n vic nu ra nhng iu c bn nht vit
ch-ng trnh C t-ng tc vi mi tr-ng v h iu hnh.

2.1. Thm nhp vo th- vin chun :


Mi tp gc c tham tr ti hm th- vin chun u phi cha dng :
#include <conio.h> cho cc hm getch(), putch(), clrscr(), gotoxy() ...
#include <stdio.h> cho cc hm khc nh- gets(), fflus(), fwrite(), scanf()...
gn ch bt u ch-ng trnh. Tp stdio.h nh ngha cc macro v bin cng cc hm dng
trong th- vin vo/ra. Dng du ngoc < v > thay cho cc du nhy thng th-ng ch th
cho trnh bin dch tm kim tp trong danh mc cha thng tin tiu chun.

2.2. Cc hm vo ra chun - getchar() v putchar() - getch() v putch() :


2.2.1. Hm getchar () :
C ch vo n gin nht l c tng k t t thit b vo chun, ni chung l bn
phm v mn hnh ca ng-i s dng, bng hm getchar().
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()

20

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

21

2.2.2. Hm putchar () :
-a mt k t ra thit b ra chun, ni chung l mn hnh, ta s dng hm putchar()
Cch dng :
Dng cu lnh sau :
putchar(ch);
Cng dng :
-a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s -c hin th vi mu
trng.
V d :
int c;
c = getchar();
putchar(c);

2.2.3. Hm getch() :
Hm nhn mt k t t b m bn phm, khng cho hin ln mn hnh.
Cch dng :
Dng cu lnh sau :
getch();
Cng dng :
Nu c sn k t trong b m bn phm th hm s nhn mt k t trong .
Nu b m rng, my s tm dng. Khi g mt k t th hm nhn ngay k t (
khng cn bm thm phm Enter nh- trong cc hm nhp khc ). K t va g khng hin ln
mn hnh.
Nu dng :
bin=getch();
Th bin s cha k t c vo.
V d :
c = getch();

21

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

22

2.2.4. Hm putch() :
Cch dng :
Dng cu lnh sau :
putch(ch);
Cng dng :
-a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s -c hin th theo
mu xc nh trong hm textcolor.
Hm cng tr v k t -c hin th.

2.3. -a kt qu ln mn hnh - hm printf :


Cch dng :
prinf(iu khin, i s 1, i s 2, ...);
Hm printf chuyn, to khun dng v in cc i ca n ra thit b ra chun d-i s
iu khin ca xu iu khin. Xu iu khin cha hai kiu i t-ng : cc k t thng
th-ng, chng s -c -a ra trc tip thit b ra, v cc c t chuyn dng, mi c t s to
ra vic i dng v in i tip sau ca printf.
Chui iu khin c th c cc k t iu khin :
\n

sang dng mi

\f

sang trang mi

\b

li li mt b-c

\t

du tab

Dng tng qut ca c t :


%[-][fw][.pp]k t chuyn dng
Mi c t chuyn dng u -c -a vo bng k t % v kt thc bi mt k t
chuyn dng. Gia % v k t chuyn dng c th c :
Du tr :
Khi khng c du tr th kt qu ra -c dn v bn phi nu di thc t ca kt
qu ra nh hn rng ti thiu fw dnh cho n. Cc v tr d- tha s
-c lp y bng
cc khong trng. Ring i vi cc tr-ng s, nu dy s fw bt u bng s 0 th cc v tr
d- tha bn tri s -c lp y bng cc s 0.
Khi c du tr th kt qu -c dn v bn tri v cc v tr d- tha v bn phi ( nu
c ) lun -c lp y bng cc khong trng.
22

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

23

fw :
Khi fw ln hn di thc t ca kt qu ra th cc v tr d- tha s -c lp
y bi cc khong trng hoc s 0 v ni dung ca kt qu ra s -c y v
bn
phi
hoc bn tri.
Khi khng c fw hoc fw nh hn hay bng di thc t ca kt qu ra
rng trn thit b ra dnh cho kt qu s bng chnh di ca n.

th

Ti v tr ca fw ta c th t du *, khi fw -c xc nh bi gi tr
nguyn ca i t-ng ng.
V d :
Kt qu ra

fw

Du -

Kt qu -a ra

-2503

-2503

-2503

08

-2503

-2503

khng

-2503

-2503

08

khng

000-2503

"abcdef"

khng

abcdef

"abcdef"

08

"abcdef"

08

khng

abcdef
abcdef

pp :
Tham s pp ch -c s dng khi i t-ng ng l mt xu k t hoc mt gi
tr kiu float hay double.
Trong tr-ng hp i t-ng ng c gi tr kiu float hay double th pp l
chnh xc ca tr-ng ra. Ni mt cch c th hn gi tr in ra s c pp ch s
sau s thp
phn.
Khi vng mt pp th chnh xc s -c xem l 6.
Khi i l xu k t :
Nu pp nh hn di ca xu th ch pp k t u tin ca xu -c in ra.
Nu khng c pp hoc nu pp ln hn hay bng di ca xu th c xu k t
s -c in
ra.

23

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

24

V d :
Kt qu ra

fw

pp

Du -

Kt qu -a
ra

di
tr-ng ra

-435.645

10

-435.65

-435.645

10

-436

-435.645

vng

-435.645000

11

"alphabeta"

vng

alp

"alphabeta"

vng

vng

vng

alphabeta

"alpha"

alpha

Cc k t chuyn dng v ngha ca n :


K t chuyn dng l mt hoc mt dy k hiu xc nh quy tc chuyn dng v dng
in ra ca i t-ng ng. Nh- vy s c tnh trng cng mt s s -c in ra theo cc dng
khc nhau. Cn phi s dng cc k t chuyn dng theo ng qui tc nh sn. Bng sau cho
cc thng tin v cc k t chuyn dng.
K t chuyn dng

ngha

i -c chuyn sang s nguyn h thp phn

i -c chuyn sang h tm khng du ( khng c s 0 ng


tr-c )

i -c chuyn sang h m-i su khng du ( khng c 0x


ng tr-c )

i -c chuyn sang h thp phn khng du

i -c coi l mt k t ring bit

i l xu k t, cc k t trong xu -c in cho ti khi gp k


t khng hoc cho ti khi s l-ng k t -c xc nh bi
cc c t v chnh xc pp.

i -c xem l float hoc double v -c chuyn sang dng


thp phn c dng [-]m.n..nE[+ hoc -] vi di ca xu cha n
l pp.

24

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


f

i -c xem l float hoc double v -c chuyn sang dng


thp phn c dng [-]m..m.n..n vi di ca xu cha n l pp.
chnh xc mc nh l 6. L-u rng chnh xc khng xc
nh ra s cc ch s c ngha phi in theo khun dng f.

Dng %e hoc %f, tu theo loi no ngn hn, khng in cc s 0


v ngha.

25

Ch :
Mi dy k t khng bt u bng % hoc khng kt thc bng k t chuyn dng u
-c xem l k t hin th.
hin th cc k t c bit :
Cch vit

Hin th

\'

'

\"

"

\\

Cc v d :
1

printf("\" Nang suat tang : %d % \" \n\\d"",30,-50);

"Nang suat tang ; 30 %"


\d=-50

n=8

25.500000

float x=25.5, y=-47.335

-47.34

printf("\n%f\n%*.2f",x,n,y);
Lnh ny t-ng -ng vi
printf("\n%f\n%8.2f",x,n,y);
V n=8 t-ng ng vi v tr *

2.4. Vo s liu t bn phm - hm scanf :


Hm scanf l hm c thng tin t thit b vo chun ( bn phm ), chuyn dch chng
( thnh s nguyn, s thc, k t vv.. ) ri l-u tr n vo b nh theo cc a ch xc nh.
Cch dng :
scanf(iu khin,i 1, i 2, ...);

25

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

26

Xu iu khin cha cc c t chuyn dng, mi c t s to ra vic i dng bin


tip sau ca scanf.
c t c th vit mt cch tng qut nh- sau :
%[*][d...d]k t chuyn dng
Vic c mt ca du * ni ln rng tr-ng vo vn -c d c bnh th-ng, nh-ng gi
tr ca n b b qua ( khng -c l-u vo b nh ). Nh- vy c t cha du * s khng c i
t-ng ng.
d...d l mt dy s xc nh chiu di cc i ca tr-ng vo, ngha ca n -c gii
thch nh- sau :
Nu tham s d...d vng mt hoc nu gi tr ca n ln hn hay bng di ca tr-ng
vo t-ng ng th ton b tr-ng vo s -c c, ni dung ca n -c dch v -c gn cho
a ch t-ng ng ( nu khng c du * ).
Nu gi tr ca d...d nh hn di ca tr-ng vo th ch phn u ca tr-ng c kch
c bng d...d -c c v gn cho a ch ca bin t-ng ng. Phn cn li ca tr-ng s -c
xem xt bi cc c t v i t-ng ng tip theo.
V d :
int a;
float x,y;
char ch[6],ct[6]
scanf("%f%5f%3d%3s%s",&x&y&a&ch&ct0;
Vi dng vo : 54.32e-1 25 12452348a
Kt qu l lnh scanf s gn
5.432 cho x
25.0 cho y
124

cho a

xu "523" v du kt thc \0 cho ch


xu "48a" v du kt thc \0 cho ct
K t chuyn dng :
K t chuyn dng xc nh cch thc d c cc k t trn dng vo cng nh- cch
chuyn dch thng tin c c tr-c khi gn n cho cc a ch t-ng ng.

26

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

27

Cch d c th nht l c theo tr-ng vo, khi cc khong trng b b qua. Cch
ny p dng cho hu ht cc tr-ng hp.
Cch d c th hai l c theo k t, khi cc khong trng cng -c xem xt
bnh ng nh- cc k t khc. Ph-ng php ny ch xy ra khi ta s dng mt trong ba k t
chuyn dng sau : C, [ dy k t ], [^ dy k t ]
Cc k t chuyn dng v ngha ca n :
c

Vo mt k t, i t-ng ng l con tr k t. C xt k t khong trng

Vo mt gi tr kiu int, i t-ng ng l con tr kiu int. Tr-ng phi vo l


s nguyn

ld

Vo mt gi tr kiu long, i t-ng ng l con tr kiu long. Tr-ng phi vo


l s nguyn

Vo mt gi tr kiu int h 8, i t-ng ng l con tr kiu int. Tr-ng phi


vo l s nguyn h 8

lo

Vo mt gi tr kiu long h 8, i t-ng ng l con tr kiu long. Tr-ng


phi vo l s nguyn h 8

Vo mt gi tr kiu int h 16, i t-ng ng l con tr kiu int. Tr-ng phi


vo l s nguyn h 16

lx

Vo mt gi tr kiu long h 16, i t-ng ng l con tr kiu long. Tr-ng


phi vo l s nguyn h 16

f hay e

Vo mt gi tr kiu float, i t-ng ng l con tr float, tr-ng vo phi l s


du phy ng

lf hay le

Vo mt gi tr kiu double, i t-ng ng l con tr double, tr-ng vo phi


l s du phy ng

Vo mt gi tr kiu double, i t-ng ng l con tr kiu char, tr-ng vo


phi l dy k t bt k khng cha cc du cch v cc du xung dng

[ Dy k t ], [ ^Dy k t ] Cc k t trn dng vo s ln l-t -c c cho n khi no gp


mt k t khng thuc tp cc k t t trong[]. i t-ng ng l con tr kiu char. Tr-ng
vo l dy k t bt k ( khong trng -c xem nh- mt k t ).

V d :
int a,b;
char ch[10], ck[10];
scanf("%d%[0123456789]%[^0123456789]%3d",&a,ch,ck,&b);
27

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

28

Vi dng vo :
35 13145 xyz 584235
S gn :
35 cho a
xu "13145" cho ch
xu "xyz' cho ck
584 cho b
Ch :
Xt on ch-ng trnh dng nhp ( t bn phm ) ba gi tr nguyn ri gn cho ba
bin a,b,c nh- sau :
int a,b,c;
scanf("%d%d%d,&a,&b,&c);
vo s liu ta c th thao tc theo nhiu cch khc nhau:
Cch 1 :
-a ba s vo cng mt dng, cc s phn cch nhau bng du cch hoc du tab.
Cch 2 :
-a ba s vo ba dng khc nhau.
Cch 3 :
Hai s u cng mt dng ( cch nahu bi du cch ho tab ), s th ba trn dng tip
theo.
Cch 4 :
S th nht trn mt dng, hai s sau cng mt dng tip theo ( cch nahu bi du
cch ho tab ), s th ba trn dng tip theo.
Khi vo sai s bo li v nhy v ch-ng trnh cha li gi n.

2.5. -a kt qu ra my in :
-a kt qu ra my in ta dng hm chun fprintf c dng sau :
fprintf(stdprn, iu khin, bin 1, bin 2,...);
Tham s stdprn xc nh thit b -a ra l my in.
28

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

29

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)
fprintf(stdprn,"%10.2f",a[i][j]);
fprintf(stdprn,"\n");
}

29

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

30

Ch-ng 3

Biu thc

Ton hng c th xem l mt i l-ng c mt gi tr no . Ton hng bao gm


hng, bin, phn t mng v hm.
Biu thc lp nn t cc ton hng v cc php tnh to nn nhng gi tr mi. Biu
thc dng din t mt cng thc, mt qui trnh tnh ton, v vy n l mt thnh phn
khng th thiu trong ch-ng trnh.

3.1. Biu thc :


Biu thc l mt s kt hp gia cc php ton v cc ton hng din t mt cng
thc ton hc no . Mi biu thc c s c mt gi tr. Nh- vy hng, bin, phn t mng v
hm cng -c xem l biu thc.
Trong C, ta c hai khi nim v biu thc :
Biu thc gn.
Biu thc iu kin .
Biu thc -c phn loi theo kiu gi tr : nguyn v thc. Trong cc mnh logic,
biu thc -c phn thnh ng ( gi tr khc 0 ) v sai ( gi tr bng 0 ).
Biu thc th-ng -c dng trong :
V phi ca cu lnh gn.
Lm tham s thc s ca hm.
Lm ch s.
Trong cc ton t ca cc cu trc iu khin.
Ti y, ta c hai khi nim chnh to nn biu thc l ton hng v php ton.
Ton hng gm : hng, bin, phn t mng v hm tr-c y ta xt. D-i y ta s ni n
cc php ton. Hm s -c cp trong ch-ng 6.
3.2. Lnh gn v biu thc:
Biu thc gn l biu thc c dng :
v=e
Trong v l mt bin ( hay phn t mng ), e l mt biu thc. Gi tr ca biu thc
gn l gi tr ca e, kiu ca n l kiu ca v. Nu t du ; vo sau biu thc gn ta s thu
-c php ton gn c dng :
30

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

31

v=e;
Biu thc gn c th s dng trong cc php ton v cc cu lnh nh- cc biu thc
khc. V d nh- khi ta vit
a=b=5;
th iu c ngha l gn gi tr ca biu thc b=5 cho bin a. Kt qa l b=5 v a=5.
Hon ton t-ng t nh- :
a=b=c=d=6; gn 6 cho c a, b, c v d
V d :
z=(y=2)*(x=6);

{ y * l php ton nhn }

gn 2 cho y, 6 cho x v nhn hai biu thc li cho ta z=12.

3.3. Cc php ton s hc :


Cc php ton hai ngi s hc l
Php ton

nghi

V d

Php cng

a+b

Php tr

a-b

Php nhn

a*b

Php chia

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 )

C php ton mt ngi - v du -(a+b) s o gi tr ca php cng (a+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.

31

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

32

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

3.4. Cc php ton quan h v logic :


Php ton quan h v logic cho ta gi tr ng ( 1 ) hoc gi tr sai ( 0 ). Ni cch khc,
khi cc iu kin nu ra l ng th ta nhn -c gi tr 1, tri li ta nhn gi tr 0.

Cc php ton quan h l :


Php ton

nghi

V d

>

So snh ln hn

a>b
4>5 c gi tr 0

>=

So snh ln hn hoc bng

a>=b
6>=2 c gi tr 1

<

So snh nh hn

a<b
6<=7 c gi tr 1

<=

So snh nh hn hoc bng

a<=b
8<=5 c gi tr 0

==

So snh bng nhau

a==b
6==6 c gi tr 1

!=

So snh khc nhau

a!=b
9!=9 c gi tr 0

Bn php ton u c cng s -u tin, hai php sau c cng s th t -u tin nh-ng
thp hn s th t ca bn php u.
Cc php ton quan h c s th t -u tin thp hn so vi cc php ton s hc, cho
nn biu thc :
i<n-1
-c hiu l i<(n-1).

32

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

33

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

a||b

khc 0

khc 0

khc 0

bng 0

bng 0

khc 0

bng 0

bng 0

Php v (AND) &&


Php hoc ( OR ) ||

Cc php quan h c s -u tin nh hn so vi ! nh-ng ln hn so vi && v ||, v vy


biu thc nh- :
(a<b)&&(c>d)
c th vit li thnh :
a<b&&c>d
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--.
33

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

34

S khc nhau ca ++n v n++ ch : trong php n++ th tng sau khi gi tr ca n -c s
dng, cn trong php ++n th n -c tng tr-c khi s dng. S khc nhau gia n-- v --n cng
nh- vy.
V d :
n=5
x=++n

Cho ta x=6 v n=6

x=n++

Cho ta x=5 v n=6

3.6. Th t -u tin cc php ton :


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

() [] ->

Tri qua phi

! ~ & * - ++ -- (type ) sizeof

Phi qua tri

* ( php nhn ) / %

Tri qua phi

+-

Tri qua phi

<< >>

Tri qua phi

< <= > >=

Tri qua phi

== !=

Tri qua phi

&

Tri qua phi

Tri qua phi

10

Tri qua phi

11

&&

Tri qua phi

12

||

Tri qua phi

13

?:

Phi qua tri

14

= += -= *= /= %= <<= >>= &= ^= |=

Phi qua tri

15

Tri qua phi

34

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

35

Ch thch :
Cc php ton tn mt dng c cng th t -u tin, cc php ton hng trn c s -u
tin cao hn cc s hng d-i.
i vi cc php ton cng mc -u tin th trnh t tnh ton c th t tri qua phi
hay ng-c li -c ch ra trong ct trnh t kt hp.
V d :
*--px=*(--px) ( Phi qua tri )
8/4*6=(8/4)*6 ( Tri qua phi )
Nn dng cc du ngoc trn vit biu thc mt cch chnh xc.
Cc php ton l :
Dng 1
[ ] Dng biu din phn t mng, v d : a[i][j]
.

Dng biu din thnh phn cu trc, v d : ht.ten

-> Dng biu din thnh phn cu trc thng qua con tr
Dng 2
* Dng khai bo con tr, v d : int *a
& Php ton ly a ch, v d : &x
( type) l php chuyn i kiu, v d : (float)(x+y)
Dng 15
Ton t , th-ng dng vit mt dy biu thc trong ton t for.

3.7. Chuyn i kiu gi tr :


Vic chuyn i kiu gi tr th-ng din ra mt cch t ng trong hai tr-ng hp sau
:
Khi gn biu thc gm cc ton hng khc kiu.
Khi gn mt gi tr kiu ny cho mt bin ( hoc phn t mng ) kiu khc. iu ny
xy ra trong ton t gn, trong vic truyn gi tr cc tham s thc s cho cc i.
Ngoi ra, ta c th chuyn t mt kiu gi tr sang mt kiu bt k m ta mun bng
php chuyn sau :
( type ) biu thc
35

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

36

V d :
(float) (a+b)
Chuyn i kiu trong biu thc :
Khi hai ton hng trong mt php ton c kiu khc nhau th kiu thp hn s -c
nng thnh kiu cao hn tr-c khi thc hin php ton. Kt qu thu -c l mt gi tr kiu
cao hn. Chng hn :
Gia int v long th int chuyn thnh long.
Gia int v float th int chuyn thnh float.
Gia float v double th float chuyn thnh double.
V d :
1.5*(11/3)=4.5
1.5*11/3=5.5
(11/3)*1.5=4.5
Chuyn i kiu thng qua php gn :
Gi tr ca v phi -c chuyn sang kiu v tri l kiu ca kt qu. Kiu int c
th -c -c chuyn thnh float. Kiu float c th chuyn thnh int do cht i phn thp
phn. Kiu double chuyn thnh float bng cch lm trn. Kiu long -c chuyn thnh int
bng cch ct b mt vi ch s.
V d :
int n;
n=15.6

gi tr ca n l 15

i kiu dng (type)biu thc :


Theo cch ny, kiu ca biu thc -c i thnh kiu type theo nguyn tc trn.
V d :
Php ton :

(int)a

cho mt gi tr kiu int. Nu a l float th y c s chuyn i t float sang int. Ch


rng bn thn kiu ca a vn khng b thay i. Ni cch khc, a vn c kiu float nh-ng
(int)a c kiu int.

36

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

37

i vi hm ton hc ca th- vin chun, th gi tr ca i v gi tr ca hm u c


kiu double, v vy tnh cn bc hai ca mt bin nguyn n ta phi dng php p kiu
chuyn kiu int sang double nh- sau :
sqrt((double)n)
Php p kiu c cng s -u tin nh- cc ton t mt ngi.
Ch :
Mun c gi tr chnh xc trong php chia hai s nguyn cn dng php p kiu :
((float)a)/b
i gi tr thc r sang nguyn, ta dng :
(int)(r+0.5)
Ch th t -u tin :
(int)1.4*10=1*10=10
(int)(1.4*10)=(int)14.0=14

37

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

38

Ch-ng 4
Cu trc c bn ca ch-ng trnh

4.1. Li ch thch :
Cc li bnh lun, cc li gii thch c th -a vo bt k ch no ca ch-ng trnh
cho ch-ng trnh d hiu, d c hn m khng lm nh h-ng n cc phn khc. Li gii
thch -c t gia hai du /* v */.
Trong mt ch-ng trnh cn ( v lun lun cn ) vit thm nhng li gii thch
ch-ng trnh thm r rng, thm d hiu.
V d :
#include "stdio.h"
#include "string.h"
#include "alloc.h"
#include "process.h"
int main()
{
char *str;
/* Cp pht b nh cho xu k t */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Kt thc ch-ng trnh nu thiu b nh */
}
/* copy "Hello" vo xu */
strcpy(str, "Hello");
/* Hin th xu */
printf("String is %s\n", str);

38

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

39

/* Gii phng b nh */
free(str);
return 0;
}

4.2. Lnh v khi lnh :


4.2.1. Lnh :
Mt biu thc kiu nh- x=0 hoc ++i hoc scanf(...) tr thnh cu lnh khi c i km
theo du ;
V d :
x=0;
++i;
scanf(...);
Trong ch-ng trnh C, du ; l du hiu kt thc cu lnh.
4.2.2. Khi lnh :
Mt dy cc cu lnh -c bao bi cc du { } gi l mt khi lnh. V d :
{
a=2;
b=3;
printf("\n%6d%6d",a,b);
}
TURBO C xem khi lnh cng nh- mt cu lnh ring l. Ni cch khc, ch no vit
-c mt cu lnh th cng c quyn t mt khi lnh.
Khai bo u khi lnh :
Cc khai bo bin v mng chng nhng c th t u ca mt hm m cn c th
vit u khi lnh :
{
int a,b,c[50];
float x,y,z,t[20][30];
39

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

40

a==b==3;
x=5.5; y=a*x;
z=b*x;
printf("\n y= %8.2f\n z=%8.2f",y,z);
}
S lng nhau ca cc khi lnh v phm vi hot ng ca cc bin v mng :
Bn trong mt khi lnh li c th vit lng khi lnh khc. S lng nhau theo cch
nh- vy l khng hn ch.
Khi my bt u lm vic vi mt khi lnh th cc bin v mng khai bo bn trong
n mi -c hnh thnh v -c hnh thnh v -c cp pht b nh. Cc bin ny ch tn ti
trong thi gian my lm vic bn trong khi lnh v chng lp tc bin mt ngay sau khi my
ra khi khi lnh. Vy :
Gi tr ca mt bin hay mt mng khai bo bn trong mt khi lnh khng th -a ra
s dng bt k ch no bn ngoi khi lnh .
bt k ch no bn ngoi mt khi lnh ta khng th can thip n cc bin v cc
mng -c khai bo bn trong khi lnh
Nu bn trong mt khi ta dng mt bin hay mt mng c tn l a th iu ny khng
lm thay i gi tr ca mt bin khc cng c tn l a ( nu c ) -c dng u bn
ngoi khi lnh ny.
Nu c mt bin -c khai bo ngoi mt khi lnh v khng trng tn vi cc
bin khai bo bn trong khi lnh ny th bin cng c th s dng c bn trong cng nhbn ngoi khi lnh.
V d :
Xt on ch-ng trnh sau :
{
int a=5,b=2;
{
int a=4;
b=a+b;
printf("\n a trong =%3d b=%3d",a,b);
}
40

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

41

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.

4.3. Cu trc c bn ca ch-ng trnh :


Cu trc ch-ng trnh v hm l mt trong cc vn quan trng ca C. V hm ta s
c mt ch-ng ni t m v n. y ta ch -a ra mt s qui tc chung :
Hm l mt n v c lp ca ch-ng trnh. Tnh c lp ca hm th hin hai im
:
Khng cho php xy dng mt hm bn trong cc hm khc.
Mi hm c cc bin, mng .. ring ca n v chng ch -c s dng ni b bn trong
hm. Ni cch khc hm l n v c tnh cht khp kn.
Mt ch-ng trnh bao gm mt hoc nhiu hm. Hm main() l thnh phn bt buc
ca ch-ng trnh. Ch-ng trnh bt u thc hin cc cu lnh u tin ca hm main() v kt
thc khi gp du } cui cng ca hm ny. Khi ch-ng trnh lm vic, my c th chy t hm
ny sang hm khc.
Cc ch-ng trnh C -c t chc theo mu :
.....
hm 1
.....
hm 2
.....

.....
hm n

41

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

42

Bn ngoi cc hm cc v tr (..... ) l ch t : cc ton t #include ... ( dng khai


bo s dng cc hm chun ), ton t #define ... ( dng nh ngha cc hng ), nh ngha
kiu d liu bng typedef, khai bo cc bin ngoi, mng ngoi....
Vic truyn d liu v kt qu t hm ny sang hm khc -c thc hin theo mt
trong hai cch :
S dng i ca hm.
S dng bin ngoi, mng ngoi ...
Vy ni tm li cu truc c bn ca ch-ng trnh nh- sau :

Cc #include

Cc #define

Khai bo cc i t-ng d liu ngoi ( bin, mng, cu trc vv..).

Khai bo nguyn mu cc hm.

Hm main().

nh ngha cc hm ( hm main c th t sau hoc xen vo gia cc hm khc ).

V d :
Ch-ng trnh tnh x ly tha y ri in ra my in kt qu :
#include "stdio.h"
#include "math.h"
main()
{
double x,y,z;
printf("\n Nhap x va y");
scanf("%lf%lf",&x,&y);
z=pow(x,y); /* hm ly lu tha y lu tha x */
fprintf(stdprn,"\n x= %8.2lf \n y=%8.2lf \n z=%8.2lf",x,y,z);
}

42

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

43

4.4. Mt s qui tc cn nh khi vit ch-ng trnh :


Qui tc u tin cn nh l :
Mi cu lnh c th vit trn mt hay nhiu dng nh-ng phi kt thc
bng du ;
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 "
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.

43

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

44

Ch-ng 5

Cu trc iu khin

Mt ch-ng trnh bao gm nhiu cu lnh. Thng th-ng cc cu lnh -c thc hin
mt cch ln l-t theo th t m chng -c vit ra. Cc cu trc iu khin cho php thay i
trt t ni trn, do my c th nhy thc hin mt cu lnh khc mt v tr tr-c hoc sau
cu lnh hin thi.
Xt v mt cng dng, c th chia cc cu trc iu khin thnh cc nhm chnh :
Nhy khng c iu kin.
R nhnh.
T chc chu trnh.
Ngoi ra cn mt s ton t khc c chc nng b tr nh- break, continue.

5.1. Cu trc c iu kin :


5.1.1. Lnh if-else :
Ton t if cho php la chn chy theo mt trong hai nhnh tu thuc vo s bng
khng v khc khng ca biu thc. N c hai cch vit sau :
if ( biu thc )
khi lnh 1;
/* Dng mt */

if ( biu thc )
khi lnh 1;
else
khi lnh 2 ;
/* Dng hai */

Hot ng ca biu thc dng 1 :


My tnh gi tr ca biu thc. Nu biu thc ng ( biu thc c gi tr khc 0 ) my
s thc hin khi lnh 1 v sau s thc hin cc lnh tip sau lnh if trong ch-ng trnh.
Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin ngay
cc lnh tip sau lnh if trong ch-ng trnh.
Hot ng ca biu thc dng 2 :
My tnh gi tr ca biu thc. Nu biu thc ng ( biu thc c gi tr khc 0 ) my
s thc hin khi lnh 1 v sau s thc hin cc lnh tip sau khi lnh 2 trong ch-ng
44

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

45

trnh. Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin
khi lnh 2 sau thc hin tip cc lnh tip sau khi lnh 2 trong ch-ng trnh.
V d :
Ch-ng trnh nhp vo hai s a v b, tm max ca hai s ri in kt qu ln mn hnh.
Ch-ng trnh c th vit bng c hai cch trn nh- sau :
#include "stdio.h"
main()
{
float a,b,max;
printf("\n Cho a=");
scanf("%f",&a);
printf("\n Cho b=");
scanf("%f",&b);
max=a;
if (b>max) max=b;
printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max);
}
#include "stdio.h"
main() {
float a,b,max;
printf("\n Cho a=");
scanf("%f",&a);
printf("\n Cho b=");
scanf("%f",&b);
if (a>b) max=a;
else max=b;
printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max);
}
45

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

46

S lng nhau ca cc ton t if :


C cho php s dng cc ton t if lng nhau c ngha l trong cc khi lnh ( 1 v 2 )
trn c th cha cc ton t if - else khc. Trong 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;

46

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

47

5.1.2. Lnh else-if :


Khi mun thc hin mt trong n quyt nh ta c th s dng cu trc sau :
if ( biu thc 1 )
khi lnh 1;
else if ( biu thc 2 )
khi lnh 2;
......
else if ( biu thc n-1 )
khi lnh n-1;
else
khi lnh n;
Trong cu trc ny, my s i kim tra t biu thc 1 tr i n khi gp biu thc no
c gi tr khc 0.
Nu biu thc th i (1,2, ...n-1) c gi tr khc 0, my s thc hin khi lnh i, ri sau
i thc hin lnh nm tip theo khi lnh n trong ch-ng trnh.
Nu trong c n-1 biu thc khng c biu thc no khc 0, th my s thc hin khi
lnh n ri sau i thc hin lnh nm tip theo khi lnh n trong ch-ng trnh.
V d :
Ch-ng trnh gii ph-ng trnh bc hai.
#include "stdio.h"
main()
{
float a,b,c,d,x1,x2;
printf("\n Nhap a, b, c:");
scanf("%f%f%f,&a&b&c);
d=b*b-4*a*c;
if (d<0.0)
printf("\n Phuong trinh vo nghiem ");
else if (d==0.0)
47

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

48

printf("\n Phuong trinh co nghiem kep x1,2=%8.2f",-b/(2*a));


else
{
printf("\n Phuong trinh co hai nghiem ");
printf("\n x1=%8.2f",(-b+sqrt(d))/(2*a));
printf("\n x2=%8.2f",(-b-sqrt(d))/(2*a));
}

5.2. Lnh nhy khng iu kin - ton t goto :


Nhn c cng dng nh- tn bin v c du : ng pha sau. Nhn c th -c gn
cho bt k cu lnh no trong ch-ng trnh.
V d :
ts : s=s++;
th y ts l nhn ca cu lnh gn s=s++.
Ton t goto c dng :
goto nhn;
Khi gp ton t ny my s nhy ti cu lnh c nhn vit sau t kho goto.
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: ");
.....

}
48

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

49

V d :
Tnh tng s=1+2+3+....+10
#include "stdio.h"
main() {
int s,i;
i=s=0;
tong:
++i;
s=s+i;
if (i<10) goto tong;
printf("\n tong s=%d",s);
}

5.3. Cu trc r nhnh - ton t switch:


L cu trc to nhiu nhnh c bit. N cn c vo gi tr mt biu thc nguyn
chn mt trong nhiu cch nhy.
Cu trc tng qut ca n l :
switch ( biu thc nguyn )
{
case n1
khi lnh 1
case n2
khi lnh 2
.......
case nk
khi lnh k
[ default
khi lnh k+1 ]
}
49

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

50

Vi ni l cc s nguyn, hng k t hoc biu thc hng. Cc ni cn c gi tr khc


nhau. on ch-ng trnh nm gia cc du { } gi l thn ca ton t switch.
default l mt thnh phn khng bt buc phi c trong thn ca switch.
S hot ng ca ton t switch ph thuc vo gi tr ca biu thc vit trong du
ngoc ( ) nh- sau :
Khi gi tr ca biu thc ny bng ni, my s nhy ti cc cu lnh c nhn l case ni.
Khi gi tr biu thc khc tt c cc ni th cch lm vic ca my li ph thuc vo s
c mt hay khng ca lnh default nh- sau :
Khi c default my s nhy ti cu lnh sau nhn default.
Khi khng c default my s nhy ra khi cu trc switch.
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)
{
50

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

51

case 0:
case 1:
case 2:
case 3:printf("Kem\n");break;
case 4:printf("Yeu\n");break;
case 5:
case 6:printf("Trung binh\n");break;
case 7:
case 8:printf("Kha\n");break;
case 9:
case 10:printf("Gioi\n");break;
default:printf(Vao sai\n);
}
printf("Tiep tuc 1, dung 0 :")
scanf("%d",&diem);
if (diem==1) goto tt;
getch();
return;
}

5.4. Cu trc lp :
5.4.1. Cu trc lp vi ton t while v for :
5.4.1.1. Cu trc lp vi ton t while :
Ton t while dng xy dng chu trnh lp dng :
while ( biu thc )
Lnh hoc khi lnh;
Nh- vy ton t while gm mt biu thc v thn chu trnh. Thn chu trnh c th l
mt lnh hoc mt khi lnh.

51

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

52

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.
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);
}
52

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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);
}
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);
}
5.4.1.2. Cu trc lp vi ton t for :
Ton t for dng xy dng cu trc lp c dng sau :
for ( biu thc 1; biu thc 2; biu thc 3)
Lnh hoc khi lnh ;

53

53

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

54

Ton t for gm ba biu thc v thn for. Thn for l mt cu lnh hoc mt khi lnh
vit sau t kho for. Bt k biu thc no trong ba biu thc trn c th vng mt nh-ng phi
gi du ; .
Thng th-ng biu thc 1 l ton t gn to gi tr ban u cho bin iu khin,
biu thc 2 l mt quan h logic biu th iu kin tip tc chu trnh, biu thc ba l mt
ton t gn dng thay i gi tr bin iu khin.
Hot ng ca ton t for :
Ton t for hot ng theo cc b-c sau :
Xc nh biu thc 1
Xc nh biu thc 2
Tu thuc vo tnh ng sai ca biu thc 2 my la chn mt trong
hai nhnh :
Nu biu thc hai c gi tr 0 ( sai ), my s ra khi for v chuyn ti cu
lnh sau thn for.
Nu biu thc hai c gi tr khc 0 ( ng ), my s thc hin cc cu lnh
trong thn for.
Tnh biu thc 3, sau quay li b-c 2 bt u mt vng mi ca chu trnh.
Ch :
Nu biu thc 2 vng mt th n lun -c xem l ng. Trong tr-ng hp ny vic ra
khi chu trnh for cn phi -c thc hin nh cc lnh break, goto hoc return vit trong thn
chu trnh.
Trong du ngoc trn sau t kho for gm ba biu thc phn cch nhau bi du ;.
Trong mi biu thc khng nhng c th vit mt biu thc m c quyn vit mt dy biu
thc phn cch nhau bi du phy. Khi cc biu thc trong mi phn -c xc nh t tri
sang phi. Tnh ng sai ca dy biu thc -c tnh l tnh ng sai ca biu thc cui cng
trong dy ny.
Trong thn ca for ta c th dng thm cc ton t for khc, v th ta c th xy dng
cc ton t for lng nhau.
Khi gp cu lnh break trong thn for, my ra s ra khi ton t for su nht cha cu
lnh ny. Trong thn for cng c th s dng ton t goto nhy n mt v tr mong mun
bt k.
V d 1:
Nhp mt dy s ri o ng-c th t ca n.

54

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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]);
}
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]);
}

55

55

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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"
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;
}

56

56

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

57

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.
Hot ng ca chu trnh nh- sau :
My thc hin cc lnh trong thn chu trnh.
Khi thc hin xong tt c cc lnh trong thn ca chu trnh, my s xc nh gi tr ca
biu thc sau t kho while ri quyt nh thc hin nh- sau :
Nu biu thc ng ( khc 0 ) my s thc hin lp li khi lnh ca chu trnh ln th
hai ri thc hin kim tra li biu thc nh- trn.
Nu biu thc sai ( bng 0 ) my s kt thc chu trnh v chuyn ti thc hin lnh
ng sau ton t while.
57

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

58

Ch :
Nhng iu l-u vi ton t while trn hon ton ng vi do while.
V d :
on ch-ng trnh xc nh phn t m u tin trong cc phn t ca mng x.
#include "stdio.h"
float x[5],c;
main() {

int i=0;
printf("\n nhap gia tri cho ma tran x ");
for (i=0;i<=4;++i)
{
printf("\n x[%d]=",i);
scanf("%f",&c);
y[i]=c;
}
do
++i;
while (x[i]>=0 && i<=4);
if (i<=4)
printf("\n Phan tu am dau tien = x[%d]=%8.2f",i,x[i]);
else
printf("\n Mang khong c phan tu am ");

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.

58

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

59

V d :
Bit s nguyn d-ng n s l s nguyn t nu n khng chia ht cho cc s nguyn
trong khong t 2 n cn bc hai ca n. Vit on ch-ng trnh c vo s nguyn d-ng n,
xem n c l s nguyn t.
# include "stdio.h"
# include "math.h"
unsigned int n;
main()
{
int i,nt=1;
printf("\n cho n=");
scanf("%d",&n);
for (i=2;i<=sqrt(n);++i)
if ((n % i)==0)
{
nt=0;
break;
}
if (nt)
printf("\n %d la so nguyen to",n);
else
printf("\n %d khong la so nguyen to",n);
}

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, 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).

59

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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);

60

60

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

61

Ch-ng 6

Hm

Mt ch-ng trnh vit trong ngn ng C l mt dy cc hm, trong c mt hm


chnh ( hm main() ). Hm chia cc bi ton ln thnh cc cng vic nh hn, gip thc hin
nhng cng vic lp li no mt cch nhanh chng m khng phi vit li on ch-ng
trnh. Th t cc hm trong ch-ng trnh l bt k, song ch-ng trnh bao gi cng i thc
hin t hm main().
6.1. C s :
Hm c th xem l mt n v c lp ca ch-ng trnh. Cc hm c vai tr ngang
nhau, v vy khng c php xy dng mt hm bn trong cc hm khc.
Xy dng mt hm bao gm: khai bo kiu hm, t tn hm, khai bo cc i v -a
ra cu lnh cn thit thc hin yu cu ra cho hm. Mt hm -c vit theo mu sau :
type tn hm ( khai bo cc i )
{
Khai bo cc bin cc b
Cc cu lnh
[return[biu thc];]
}
Dng tiu :
Trong dng u tin ca hm cha cc thng tin v : kiu hm, tn hm, kiu v tn
mi i.

V d :
float max3s(float a, float b, float c)
khai bo cc i c dng :
Kiu i 1 tn i 1, kiu i 2 tn i 2,..., kiu i n tn i n

Thn hm :

61

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

62

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.
Thn hm c th s dng mt cu lnh return, c th dng nhiu cu lnh return cc
ch khc nhau, v cng c th khng s dng cu lnh ny.
Dng tng qut ca n l :
return [biu thc];
Gi tr ca biu thc trong cu lnh return s -c gn cho hm.
V d :
Xt bi ton : Tm gi tr ln nht ca ba s m gi tr m gi tr ca chng -c -a
vo bn phm.
Xy dng ch-ng trnh v t chc thnh hai hm : Hm main() v hm max3s. Nhim
v ca hm max3s l tnh gi tr ln nht ca ba s c vo, gi s l a,b,c. Nhim v ca hm
main() l c ba gi tr vo t bn phm, ri dng hm max3s tnh nh- trn, ri -a kt qu
ra mn hnh.
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*/

float max3s(float a,float b,float c)


{

float max;
max=a;
if (max<b) max=b;
if (max<c) max=c;
62

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

63

return(max);
} /* Kt thc hm max3s*/
Quy tc hot ng ca hm :
Mt cch tng qut li gi hm c dng sau :
tn hm ([Danh sch cc tham s thc])
S cc tham s thc t thay vo trong danh sch cc i phi bng s tham s hnh
thc v ln l-t chng c kiu t-ng ng vi nhau.
Khi gp mt li gi hm th n s bt u -c thc hin. Ni cch khc, khi my gp
li gi hm mt v tr no trong ch-ng trnh, my s tm di ch v chuyn n hm
t-ng ng. Qu trnh din ra theo trnh t sau :
Cp pht b nh cho cc bin cc b.
Gn gi tr ca cc tham s thc cho cc i t-ng ng.
Thc hin cc cu lnh trong thn hm.
Khi gp cu lnh return hoc du } cui cng ca thn hm th my s xo cc i,
bin cc b v ra khi hm.
Nu tr v t mt cu lnh return c cha biu thc th gi tr ca biu thc -c gn
cho hm. Gi tr ca hm s -c s dng trong cc biu thc cha n.
Cc tham s thc, cc i v bin cc b :
Do i v bin cc b u c phm vi hot ng trong cng mt hm nn i v bin
cc b cn c tn khc nhau.
i v bin cc b u l cc bin t ng. Chng -c cp pht b nh khi hm -c
xt n v b xo khi ra khi hm nn ta khng th mang gi tr ca i ra khi hm.
i v bin cc b c th trng tn vi cc i l-ng ngoi hm m khng gy ra
nhm ln no.
Khi mt hm -c gi ti, vic u tin l gi tr ca cc tham s thc -c gn cho
cc i ( trong v d trn hm max3s, cc tham s thc l x,y,z, cc i t-ng ng l a,b,c ).
Nh- vy cc i chnh l cc bn sao ca cc tham s thc. Hm ch lm vic trn cc i.
Cc i c th b bin i trong thn hm, cn cc tham s thc th khng b thay i.
Ch :
Khi hm khai bo khng c kiu tr-c n th n -c mc nh l kiu int.
Khng nht thit phi khai bo nguyn mu hm. Nh-ng ni chung nn c v n cho
php ch-ng trnh bin dch pht hin li khi gi hm hay t ng vic chuyn dng.
63

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

64

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.1. M u :
C khng nhng cho php t hm ny gi ti hm khc, m n cn cho php t mt
im trong thn ca mt hm gi ti chnh hm . Hm nh- vy gi l hm qui.
Khi hm gi qui n chnh n, th mi ln gi my s to ra mt tp cc bin cc b
mi hon ton c lp vi tp cc bin cc b -c to ra trong cc ln gi tr-c.
minh ho chi tit nhng iu trn, ta xt mt v d v tnh giai tha ca s nguyn
d-ng n. Khi khng dng ph-ng php qui hm c th -c vit nh- sau :
long int gt(int n) /* Tnh n! vi n>=0*/
{
64

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

65

long int gtphu=1;


int i;
for (i=1;i<=n;++i)
gtphu*=i;
return s;
}
Ta nhn thy rng n! c th tnh theo cng thc truy hi sau :
n!=1

nu n=0

n!=n*(n-1)!

nu n>0

Hm tnh n! theo ph-ng php qui c th -c vit nh- sau :


long int gtdq(int n)
{
if (n==0 || n==1)
return 1;
else
return(n*gtdq(n-1));
}
Ta i gii thch hot ng ca hm qui khi s dng trong hm main d-i y :
#include "stdio.h"
main()
{
printf("\n 3!=%d",gtdq(3));
}
Ln gi u tin ti hm gtdq -c thc hin t hm main(). My s to ra mt tp cc
bin t ng ca hm gtdq. Tp ny ch gm cc i n. Ta gi i n -c to ra ln th nht l
n th nht. Gi tr ca tham s thc ( s 3 ) -c gn cho n th nht. Lc ny bin n trong thn
hm -c xem l n th nht. Do n th nht c gi tr bng 3 nn iu kin trong ton t if l
sai v do my s la chn cu lnh else. Theo cu lnh ny, my s tnh gi tr biu thc :
n*gtdq(n-1) (*)
65

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

66

tnh biu thc trn, my cn gi chnh hm gtdq v th ln gi th hai s thc hin.


My s to ra i n mi, ta gi l n th hai. Gi tr ca n-1 y li l i ca hm , -c
truyn cho hm v hiu l n th hai, do vy n th hai c gi tr l 2. By gi, do n th hai vn
ch-a tho mn iu kin if nn my li tip tc tnh biu thc :
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.
66

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


6.3.3. Cch xy dng hm qui :
Hm qui th-ng -c xy dng theo thut ton sau :
if ( tr-ng hp suy bin)
{
Trnh by cch gii bi ton khi suy bin
}
else /* Tr-ng hp tng qut */
{
Gi qui ti hm ( ang vit ) vi cc gi
tr khc ca tham s
}
6.3.4. Cc v d v dng hm qui :
V d 1 :
Bi ton dng qui tm USCLN ca hai s nguyn d-ng a v b.
Trong tr-ng hp suy bin, khi a=b th USCLN ca a v b chnh l gi tr ca chng.
Trong tr-ng hp chung :
uscln(a,b)=uscln(a-b,b) nu a>b
uscln(a,b)=uscln(a,b-a) nu a<b
Ta c th vit ch-ng trnh nh- sau :
#include "stdio.h"
int uscln(int a,int b ); /* Nguyn mu hm*/
main()
{

int m,n;
printf("\n Nhap cac gia tri cua a va b :");
scanf("%d%d",&m,&n);
printf("\n USCLN cua a=%d va b=%d la :%d",m,m,uscln(m,n))

}
67

67

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


int uscln(int a,int b)
{
if (a==b)
return a;
else
if (a>b)
return uscln(a-b,b);

else
return uscln(a,b-a);
}
V d 2 :
Ch-ng trnh c vo mt s ri in n ra d-i dng cc k t lin tip.
# include "stdio.h"
# include "conio.h"
void prind(int n);
main()
{
int a;
clrscr();
printf("n=");
scanf("%d",&a);
prind(a);
getch();
}
void prind(int n)
{

68

68

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

69

int i;
if (n<0)
{ putchar('-');
n=-n;
}
if ((i=n/10)!=0)
prind(i);
putchar(n%10+'0');
}

6.4. B tin s l C :
C -a ra mt s cch m rng ngn ng bng cc b tin s l macro n gin. C hai
cch m rng chnh l #define m ta hc v kh nng bao hm ni dung ca cc file khc
vo file ang -c dch.
Bao hm file :
d dng x l mt tp cc #define v khai bo ( trong cc i t-ng khc ), C -a
ra cch bao hm cc file khc vo file ang dch c dng :
#include "tn file"
Dng khai bo trn s -c thay th bi ni dung ca file c tn l tn file. Thng th-ng c
vi dng nh- vy xut hin ti u mi file gc gi vo cc cu lnh #define chung v cc
khai bo cho cc bin ngoi. Cc #include -c php lng nhau. Th-ng th cc #include -c
dng nhiu trong cc ch-ng trnh ln, n m bo rng mi file gc u -c cung cp cng
cc nh ngha v khai bo bin, do vy trnh -c cc li kh chu do vic thiu cc khai bo
nh ngha. Tt nhin khi thay i file -c bao hm vo th mi file ph thuc vo n u
phi dch li.
Php th MACRO :
nh ngha c dng :
#define biu thc 1 [ biu thc 2 ]
s gi ti mt macro thay th biu thc 2 (nu c) cho biu thc 1.
V d :#define YES 1
Macro thay bin YES bi gi tr 1 c ngha l h c ch no trong ch-ng trnh c xut
hin bin YES th n s -c thay bi gi tr 1.
69

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

70

Phm vi cho tn -c nh ngha bi #define l t im nh ngha n cui file gc.


C th nh ngha li tn v mt nh ngha c th s dng cc nh ngha khc tr-c . Php
th khng thc hin cho cc xu du nhy, v d nh- YES l tn -c nh ngha th khng c
vic thay th no -c thc hin trong on lnh c "YES".
V vic thit lp #define l mt b-c chun b ch khng phi l mt phn ca ch-ng
trnh bin dch nn c rt t hn ch v vn phm v vic phi nh ngha ci g. Chng hn
nh- nhng ng-i lp trnh -a thch PASCAL c th nh ngha :
#define then
#define begin {
#define end; }
sau vit on ch-ng trnh :
if (i>0) then
begin
a=i;
......
end;
Ta cng c th nh ngha cc macro c i, do vy vn bn thay th s ph thuc vo cch
gi ti macro.
V d :
nh ngha macro gi max nh- sau :
#define max(a,b) ((a)>(b) ?(a):(b))
Vic s dng :
x=max(p+q,r+s);
t-ng -ng vi :
x=((p+q)>(r+s) ? (p+q):(r+s));
Nh- vy ta c th c hm tnh cc i vit trn mt dng. Chng no cc i cn gi
-c tnh nht qun th macro ny vn c gi tr vi mi kiu d liu, khng cn phi c cc
loi hm max khc cho cc kiu d liu khc nh-ng vn phi c i cho cc hm.
Tt nhin nu ta kim tra li vic m rng ca hm max trn, ta s thy rng n c th gy ra
s by. Biu thc -c tnh li hai ln v iu ny l khng tt nu n gy ra hiu qu ph
kiu nh- cc li gi hm v ton t tng. Cn phi thn trng dng thm du ngoc m
bo trt t tnh ton. Tuy vy, macro vn rt c gi tr.
70

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

71

Ch :
Khng -c vit du cch gia tn macro vi du m ngoc bao quanh danh sch i.
V d :
Xt ch-ng trnh sau :
main()
{
int x,y,z;
x=5;
y=10*5;
z=x+y;
z=x+y+6;
z=5*x+y;
z=5*(x+y);
z=5*((x)+(y));
printf("Z=%d",z);
getch();
return;
}
Ch-ng trnh s dng MACRO s nh- sau :
#define BEGIN {
#define END }
#define INTEGER int
#define NB 10
#define LIMIT NB*5
#define SUMXY x+y
#define SUM1 (x+y)
#define SUM2 ((x)+(y))

71

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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

72

72

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

73

Ch-ng 7

Con tr

Con tr l bin cha a ch ca mt bin khc. Con tr -c s dng rt nhiu trong


C, mt phn l do chng i khi l cch duy nht biu din tnh ton, v phn na do chng
th-ng lm cho ch-ng trnh ngn gn v c hiu qu hn cc cch khc .
Con tr tng b coi nh- c hi chng km g lnh goto do cch s dng chng to
ra cc ch-ng trnh kh hiu. iu ny chc chn l ng khi ng-i ta s dng chng mt
cch ln xn v do to ra cc con tr tr n u khng bit tr-c -c.

7.1. Con tr v a ch :
V con tr cha a ch ca i t-ng nn n c th xm nhp vo i t-ng gin tip
qua con tr. Gi s x l mt bin kiu int, v gi s px l con tr -c to ra theo mt cch
no .
Php ton mt ngi & s cho a ch ca i t-ng, nn cu lnh :
px=&x;
s gn a ch ca bin x cho tr px, v px by gi -c gi l " tr ti bin x ". Php ton &
ch p dng -c cho cc bin v phn t bng, kt cu kiu &(x+1) v &3 l khng hp l.
Ly i ch ca bin register cng l sai.
Php ton mt ngi * coi l ton hng ca n l i ch cn xt v thm nhp ti a
ch ly ra ni dung. Nu bin y c kiu int th th lnh :
y=*px;
s gn gi tr ca bin m tr px tr ti. Vy dy lnh :
px=&x;
y=*px;
s gn gi tr ca x cho y nh- trong lnh :
y=x;
Cc khai bo cho cc bin con tr c dng :
tn kiu *tn con tr

73

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

74

V d :
Nh- trong v d trn, ta khai bo con tr px kiu int :
int *px;

Trong khai bo trn ta ng ni rng l mt cch t-ng tr-ng, rng t hp *px c kiu
int, tc l nu px xut hin trong ng cnh *px th n cng t-ng -ng vi bin c kiu int.
Con tr c th xut hin trong cc biu thc. Chng hn, nu px tr ti s nguyn x th
*px c th xut hin trong bt k ng cnh no m x c th xut hin.

V d :
Lnh y=*px+1;
s t y ln hn x mt n v.
Lnh

printf("%d",*px);

s in ra gi tr hin ti ca x

Lnh :
d=sqrt((double) *px);
s gn cho bin d cn bc hai ca x, gi tr ny b buc phi chuyn sang double tr-c khi
-c chuyn cho sqrt ( cch dng hm sqrt ).
Trong cc biu thc kiu nh- :
y=*px+1;
php ton mt ngi * v & c mc -u tin cao hn cc php ton s hc, cho nn biu thc
ny ly bt k gi tr no m px tr ti, cng vi 1 ri gn cho y.
Con tr cng c th xut hin bn v tri ca php gn. Nu px tr ti x th sau lnh :
*px=0;
x s c gi tr bng 0. Cng t-ng t cc lnh:
*px+=1;
(*px)++;
s tng gi tr ca x ln 1 dn v.
74

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

75

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.

7.2. Con tr v mng mt chiu :


Trong C c mi quan h cht ch gia con tr v mng : cc phn t ca mng c th
-c xc nh nh ch s hoc thng qua con tr.

7.2.1.Php ton ly a ch :
Php ton ny ch p dng cho cc phn t ca mng mt chiu. Gi s ta c khai bo :
double b[20];
Khi php ton :
&b[9]
s cho a ch ca phn t b[9].

7.2.2. Tn mng l mt hng a ch :


Khi khai bo :
float a[10];
my s b tr b tr cho mng a m-i khong nh lin tip, mi khong nh l 4 byte. Nhvy, nu bit a ch ca mt phn t no ca mng a, th ta c th d dng suy ra a ch
ca cc phn t khc ca mng.
Vi C ta c :
a t-ng -ng vi &a[0]
a+i t-ng -ng vi &a[i]
*(a+i) t-ng -ng vi a[i]
75

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

7.2.3. Con tr tr ti cc phn t ca mng mt chiu :


Khi con tr pa tr ti phn t a[k] th :
pa+i tr ti phn t th i sau a[k], c ngha l n tr ti a[k+i].
pa-i tr ti phn t th i tr-c a[k], c ngha l n tr ti a[k-i].
*(pa+i) t-ng -ng vi pa[i].
Nh- vy, sau hai cu lnh :
float a[20],*p;
p=a;
th bn cch vit sau c tc dng nh- nhau :
a[i]

*(a+i)

p[i]

*(p+i)

V d :
Vo s liu ca cc phn t ca mt mng v tnh tng ca chng :

Cch 1:
#include "stdio.h"
main()
{
float a[4],tong;
int i;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",a+i);
}
tong=0;
76

76

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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);
}

Cch 3 :
#include "stdio.h"
main()
{

77

77

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

78

float a[4],tong,*troa;
int i;
troa=a;
for (i=0;i<4;++i)
{
printf("\n a[%d]=",i);
scanf("%f",troa+i);
}
tong=0;
for (i=0;i<4;++i)
tong+=*(troa+i);
printf("\n Tong cac phan tu mang la :%8.2f ",tong);
}

Ch :
Mng mt chiu v con tr t-ng ng phi cng kiu.

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;
th php gn :
xau="Ha noi"
78

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

79

l hon ton c ngha. Sau khi thc hin cu lnh ny trong con tr xau s c a ch u ca
mng (kiu char) ang cha xu k t bn phi. Khi cc cu lnh :
puts("Ha noi");
puts(xau);
s c cng mt tc dng l cho hin ln mn hnh dng ch Ha noi.
Mng kiu char th-ng dng cha mt dy k t c vo b nh. V d, np t
bn phm tn ca mt ng-i ta dng mt mng kiu char vi di 25, ta s dng cc cu
lnh sau :
char ten[25];
printf("\n Ho ten :");
gets(ten);
By gi ta xem gia mng kiu char v con tr kiu char c nhng g ging v khc
nhau. thy -c s khc nhau ca chng, ta -a ra s so snh sau :
char *xau, ten[15];
ten="Ha noi"
gets(xau);
Cc cu lnh trn l khng hp l. Cu lnh th hai sai ch : ten l mt hng a ch v ta
khng th gn mt hng a ch ny cho mt hng a ch khc. Cu lnh th ba khng thc
hin -c, mc ch ca cu lnh l c t bn phm mt dy k t v l-u vo mt vng nh
m con tr xau tr ti. Song ni dung ca con tr xau cn ch-a xc nh. Nu tr xau tr
ti mt vng nh no th cu lnh ny hon ton c ngha. Chng hn nh- sau khi thc
hin cu lnh :
xau=ten;
th cch vit :
gets(ten) ; v gets(xau);
u c tc dng nh- nhau.

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.

79

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

80

7.3.1.Php ly a ch :
Php ly a ch i vi cc phn t mng hai chiu ch c th p dng khi cc phn t
mng hai chiu c kiu nguyn, cn li th php ly a ch cho cc phn t mng nhiu chiu
l khng thc hin -c .V d nh- ta c th ly a ch &a[1][2] khi a l mng nguyn.

Th thut c t bn phm phn t mng hai chiu dng lnh scanf :


Ch-ng trnh c vo s liu cho mt ma trn hai chiu s -c thc hin thng qua
vic c vo mt bin trung gian, c mt gi tr v cha tm vo mt bin trung gian sau
ta gn bin cho phn t mng:

#include "stdio.h"
main()
{
float a[2][3], tg;
int i,j;
for (i=0;i<2;++i)
for (j=0;j<2;++j)
{
printf("\n a[%d][%d]=",i,j);
scanf("%8.2f",&tg);
a[i][j]=tg;
}
}

7.3.2. Php cng a ch trong mng hai chiu:


Gi s ta c mng hai chiu a[2][3] c 6 phn t ng vi su a ch lin tip trong b
nh -c xp theo th t sau :
Phn t

a[0][0]

a[0][1]

a[0][2]

a[1][0]

a[1][1]

a[1][2]

a ch

80

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

81

Tn mng a biu th a ch u tin ca mng. Php cng a ch y -c thc hin nhsau :


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]
a+1 tr phn t u hng th hai ca mng : phn t a[1][0]
........

7.3.3. Con tr v mng hai chiu :


ln l-t duyt trn cc phn t ca mng hai chiu ta c th dng con tr nh- minh
ho v d sau :
float *pa,a[2][3];
pa=(float*)a;
lc :
pa tr ti a[0][0]
pa+1 tr ti a[0][1]
pa+2 tr ti a[0][2]
pa+3 tr ti a[1][0]
pa+4 tr ti a[1][1]
pa+5 tr ti a[1][2]

V d :
Dng con tr vo s liu cho mng hai chiu.

Cch 1 :
#include "stdio.h"
81

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

82

main()
{
float a[2][3],*pa;
int i;
pa=(float*)a;
for (i=0;i<6;++i)
scanf("%f",pa+i);
}

Cch 2 :
#include "stdio.h"
main()
{
float a[2][3],*pa;
int i;
for (i=0;i<6;++i)
scanf("%f",(float*)a+i);
}

7.4. Kiu con tr, kiu a ch, cc php ton trn con tr :
7.4.1. Kiu con tr v kiu a ch :
Con tr dng l-u a ch. Mi kiu a ch cn c kiu con tr t-ng ng. Php gn
a ch cho con tr ch c th thc hin -c khi kiu a ch ph hp vi kiu con tr.
V d theo khai bo :
float a[20][30],*pa,(*pm)[30];
th :

82

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

83

pa l con tr float
pm l con tr kiu float [30]
a l a ch kiu float [30]
V th php gn :
pa=a;
l khng hp l. Nh-ng php gn :
pm=a;

7.4.2. Cc php ton trn con tr:


C 4 php ton lin quan n con tr v i ch l :
Php gn.
Php tng gim a ch.
Php truy cp b nh.
Php so snh.

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);

Php tng gim a ch :


minh ho chi tit cho php ton ny, ta xt v d sau :
Cc cu lnh :
float x[30],*px;
px=&x[10];

83

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

84

cho con tr px l con tr float tr ti phn t x[10]. Kiu a ch float l kiu a ch 4 byte,
nn cc php tng gim a ch -c thc hin trn 4 byte. V th :
px+i tr ti phn t x[10+i]
px-i tr ti phn t x[10-i]
Xt v d khc :
Gi s ta khai bo :
float b[40][50];
Khai bo trn cho ta mt mng b gm cc dng 50 phn t thc. Kiu a ch ca b l
50*4=200 byte.
Do vy :
b tr ti u dng th nht ( phn t b[0][0]).
b+1 tr ti u dng th hai ( phn t b[1][0]).
..........
b+i tr ti u dng th i ( phn t b[i][0]).

Php truy cp b nh :
Con tr float truy nhp ti 4 byte, con tr int truy nhp 2 byte, con tr char truy nhp 1
byte. Gi s ta c c khai bo :

float *pf;
int *pi;
char *pc;

Khi :
Nu tr pi tr n byte th 100 th *pf biu th vng nh 4 byte lin tip t byte 100
n 103.
Nu tr pi tr n byte th 100 th *pi biu th vng nh 2 byte lin tip t byte 100
n 101.
Nu tr pc tr n byte th 100 th *pc biu th vng nh 1 byte chnh l byte 100.
84

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

85

Php so snh :
Cho php so snh cc con tr cng kiu, v d nu p1 v p2 l cc con tr cng kiu th
nu :
p1<p2 nu a ch p1 tr ti thp hn a ch p2 tr ti.
p1=p2 nu a ch p1 tr ti cng l a ch p2 tr ti.
p1>p2 nu a ch p1 tr ti cao hn a ch p2 tr ti.

V d :
V d 1 :
on ch-ng trnh tnh tng cc s thc dng php so snh con tr :

float a[100],*p,*pcuoi,tong=0.0;
int n;
pcuoi=a+n-1; /* a ch cui dy*/
for (p=a;p<=pcuoi;++p)
s+=*p;

V d 2 :
Dng con tr char tch cc byte ca mt bin nguyn, ta lm nh- sau :
Gi s ta c lnh :
unsigned int n=0xABCD; /* S nguyn h 16*/
char *pc;
pc=(char*)(&n);

Khi :
*pc=0xAB (byte th nht ca n)
*pc+1=0xCD (byte th hai ca n)
85

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

86

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;
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)
86

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

87

*(pc+i*N+j)=*(pa+i*N+j)+*(pb+i*N+j);
}
V i l con tr void nn n c th nhn -c a ch ca cc ma trn trong li gi
hm. Tuy nhin ta khng th s dng trc tip cc i con tr void trong thn hm m phi
chuyn kiu ca chng sang thnh float.

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. 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.

87

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

88

V d :
Xt mt t lao ng c 10 ng-i, m ca mi ng-i chnh l s th t. Ta lp mt hm
khi bit m s ca nhn vin th xc nh -c h tn ca nhn vin .
#include "stdio.h"
#include "ctype.h"
void tim(int code);
main()
{
int i;
tt:printf("\n Tim nguoi co so TT la :");
scanf("%d",&i);
tim(i);
printf("Co tiep tuc nua khong C/K : ');
if (tupper(getch())='C')
goto tt;
}
void tim(int code);
{
static char *list[]= {
"Khong co so thu tu nay "
" Nguyen Van Toan"
"Huynh Tuan Nghia"
"Le Hong Son"
"Tran Quang Tung"
"Chu Thanh Tu"
"Mac Thi Nga"
"Hoang Hung"
"Pham Trong Ha"
88

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


"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 :

f l con tr hm kiu float c i l float

mf l mng con tr hm kiu float c i kiu int ( c 50 phn t )

V d 2:
Cu lnh :
double (*g)(int, double),(*mg[30])(double, float);
khai bo :

g l con tr hm kiu double c cc i kiu int v double

mg l mng con tr hm kiu double c cc i kiu double v float ( c 30 phn


t )

89

89

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

90

7.6.2. Tc dng ca con tr hm :


Con tr hm dng cha a ch ca hm. Mun vy ta thc hin php gn tn hm
cho con tr hm. php gn c ngha th kiu hm v kiu con tr phi t-ng thch. Sau
php gn, ta c th dng tn con tr hm thay cho tn hm.

V d 1:
#include "stdio.h"
double fmax(double x, double y ) /* Tnh max x,y */
{
return(x>y ? x:y);
}
double (*pf)(double,double)=fmax; /*Khai bo v gn tn hm cho con tr hm */
main() /* S dng con tr hm*/
{
printf("\n max=%f",pf(5.0,9.6));
}

V d 2:
#include "stdio.h"
double fmax(double x, double y ) /* Tnh max x,y */
{
return(x>y ? x:y);
}
double (*pf)(double,double); /* Khai bo con tr hm*/

main() /* S dng con tr hm*/


{
90

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

91

pf=fmax;
printf("\n max=%f",pf(5.0,9.6));

7.6.3. i ca con tr hm :
C cho php thit k cc hm m tham s thc trong li gi ti n li l tn ca mt
hm khc. Khi tham s hnh thc t-ng ng phi l mt con tr hm.

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;
}

91

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

main()
{
int i,j;
double x=1.0;
typedef double (*ham)(double);
ham f[6]; /* Khai bao mng con tr hm*/
/* C th khai bo nh- sau double (*f[6](double)*/
f[1]=bp; f[2]=sin; f[3]=cos; f[4]=exp; f[5]=sqrt;
/* Gn tn hm cho cc phn t mng con tr hm */
while (x<=10.0) /* Lp bng gi tr */
{
printf("\n");
for (j=1;j<=5;++j)
printf("%10.2f ",f[j](x));
x+=0.5;
}
}

92

92

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

93

Ch-ng 8

Cu trc

Cu trc l tp hp ca mt hoc nhiu bin, chng c th khc kiu nhau, -c nhm


li d-i mt ci tn duy nht tin s l. Cu trc cn gi l bn ghi trong mt s ngn ng
khc, chng hn nh- PASCAL.
Cu trc gip cho vic t chc cc d liu phc tp, c bit trong nhng ch-ng trnh
ln v trong nhiu tnh hung chng cho php nhm cc bin c lin quan li x l nh- mt
n v thay v cc thc th tch bit.
Mt v d -c cp nhiu n l cu trc phiu ghi l-ng, trong mi nhn vin
-c m t bi mt tp cc thuc tnh chng hn nh- : tn, a ch, l-ng, ph cp vv.. mt s
trong cc thuc tnh ny li c th l cu trc bi trong n c th cha nhiu thnh phn : Tn
( H, m, tn ), a ch ( Ph, s nh ) vv.
Trong ch-ng ny chng ta s minh ho cch s dng ca cc cu trc trong ch-ng
trnh.

8.1. Kiu cu trc :


Khi xy dng cu trc, ta cn m t kiu ca n. iu ny cng t-ng t nh- vic phi
thit k ra mt kiu nh tr-c khi ta i xy dng nhng cn nh thc s cc a im khc
nhau. Cng vic nh ngha mt kiu cu trc bao gm vic nu ra tn ca kiu cu trc v cc
thnh phn ca n theo mu sau :
struct tn_kiu _cu_trc
{
Khai bo cc thnh phn ca cu trc

(1)

};
Trong :

struct l t kho

tn_kiu _cu_trc l mt tn bt k do ng-i lp trnh t t theo qui tc t tn


nu ra trong ch-ng 1.

Thnh phn ca cu trc c th l : bin, mng, cu trc khc -c nh ngha tr-c vv..
93

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

94

V d :
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;
};

to ra kiu cu trc c tn l nhancong gm c nm thnh phn. Ba thnh phn u khng c


g cn ni thm. Ch c hai thnh phn cn li l cc cu trc ngaysinh v
ngaybatdaucongtac -c xy dng theo cu trc ngay -c nh ngha trong v d 1.
nh ngha cu trc bng typedef :
94

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

95

C th dng ton t typedef nh ngha cc kiu cu trc ngay v nhancong trn


nh- sau :
typedef struct
{
int ngaythu;
char thang[12];
int nam;

} ngay;
typedef struct
{

char ten[15];
char diachi[20]
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;
} nhancong;

8.2. Khai bo theomt kiu cu trc nh ngha :


Xy dng nhng cu trc thc s theo cc kiu khai bo tr-c . Vn ny hon
ton ging nh- vic khai bo cc bin v cc mng. Gi s ta c cc kiu cu trc ngay v
nhancong nh- trong mc trn. Khi ta khai bo :

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.
95

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

96

V d 2 :
struct nhancong nhom1,nhom2;
s cho ta hai cu trc vi tn l nhom1 v nhom2. C hai cu trc u -c xy dng theo cu
trc kiu nhancong.
Nh- vy, mt cch tng qut, vic khai bo cu trc -c thc hin theo mu sau :

Cch 1 :
struct tn_kiu_cu_trc__khai_bo danh_sch_tn_cc_cu_trc; (2)

Ch :
Cc bin cu trc -c khai bo theo mu trn s -c cp pht b nh mt cch y
cho tt c cc thnh phn ca n.
Vic khai bo c th thc hin ng thi vi vic nh ngha kiu cu trc. Mun vy,
ch cn t danh sch tn bin cu trc cn khai bo sau du } ca (* ) nh- trn .
Ni cch khc, va khai bo kiu va khai bo bin ta dng cch sau :

Cch 2 :
struct tn_kiu_cu_trc
{
Cc thnh phn ca cu trc (3)
} danh_sch_tn_cc_cu_trc;

V d :
V d 1 :
struct ngay
{
int ngaythu;
char thang[12];
96

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

97

int nam;
} ngaydi,ngayden;

V d 2 :
struct nhancong
{

char ten[15];
char diachi[20];
double bacluong;
struc ngay ngaysinh;
struc ngay ngaybatdaucongtac;

} nhom1,nhom2;

Khi va nh ngha kiu cu trc va khai bo cu trc nh- trong v d trn, ta khng
th khng cn n tn kiu cu trc. Ni cch khc cu trc c th -c khai bo theo cch
sau :
struct
{
Cc thnh phn ca cu trc (4)
} danh_sch_tn_cc_cu_trc;

V d :
struct
{
int ngaythu;
char thang[12];
97

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

98

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;

8.3. Truy nhp n cc thnh phn cu trc :


Ta kh quen vi vic s dng cc bin, cc phn t ca mng v tn mng trong cc
cu lnh. Trn y ta cng cp n cc thnh phn ca cu trc l bin v mng. Vic x
l mt cu trc bao gi cng phi -c thc hin thng qua cc thnh phn ca n.
truy cp n mt thnh phn c bn ( l bin hoc mng ) ca mt cu trc ta s
dng mt trong cc cch vit sau :
tn_cu_trc.tn_thnh_phn
tn_cu_trc.tn_cu_trc.tn_thnh_phn
tn_cu_trc. tn_cu_trc.tn_cu_trc.tn_thnh_phn
.....
Cch vit th nht nh- trn -c s dng khi bin hoc mng l thnh phn trc tip
ca mt cu trc. V d nh- bin ngaythu, bin nam v mng thang l cc thnh phn trc
tip ca cc cu trc ngaydi, ngayden. Cc bin bacluong, cc mng ten, diachi l cc thnh
phn trc tip ca cc cu trc nhancong.

98

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

99

Cc cch vit cn li nh- trn -c s dng khi bin hoc mng l thnh phn trc tip
ca mt cu trc m bn thn cu trc ny li l thnh phn ca cc cu trc ln hn.

V d :
Ta xt php ton trn cc thnh phn ca cu trc nhom1, nhom2 :
Cu lnh :
printf("%s",nhom1.ten);
s -a ln mn hnh tn ca nhom1.
Cu lnh :
tongluong=nhom1.bacluong+nhom2.bacluong;
s gn tng l-ng ca nhom1 v nhom2 ri gn cho bin tongluong.
Cu lnh :
printf("%d",nhom1.ngaysinh.ten);
s -a ln mn hnh ngy sinh ca nhom1.
Cu lnh :
printf("%d",nhom1. ngaybatdaucongtac.nam);
s -a ln mn hnh ngy bt u cng tc ca nhom1.

Ch :

C th s dng php ton ly a ch i vi cc thnh phn cu trc nhp s


liu trc tip vo cc thnh phn cu trc. V d nh- ta vit :
scanf("%d",&nhom1. ngaybatdaucongtac.nam);

Nh-ng i vi cc thnh phn khng nguyn, vic lm trn c th dn n treo my. V th


nn nhp s liu vo mt bin trung gian sau mi gn cho thnh phn ca cu trc.

Cch lm nh- sau :


int year;
scanf("%d",&year);
nhom1. ngaybatdaucongtac.nam=year;
99

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

100

trnh di dng khi lm vic vi cc thnh phn cu trc ta c th dng lnh


#define. V d trong cu lnh scanf v d trn, ta c th vit nh- sau :

#define p nhom1. ngaybatdaucongtac


.....
scanf("%d",&p.nam);

V d :
Gi s ta lp trnh qun l thng tin cn b. Gi s mi d liu ca mt cn b gm :

Ngy thng nm sinh.

Ngy thng nm vo c quan.

Bc l-ng.

Yu cu vit mt ch-ng trnh :

Xy dng cu trc c s d liu cho cn b.

Vo s lu ca mt cn b.

-a s liu ra my in.

Ch-ng trnh -c vit nh- sau :


#include "stdio.h"
typedef struct
{
int ngay;
char thang[10];
int nam;
} date;
typedef struct
{
date ngaysinh;
date ngayvaocq;
100

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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 :


101

101

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

102

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.
Hon ton t-ng t nh- vy : ta c th s dng mt kiu cu trc m t khai bo
cc cu trc v mng cu trc.
Cch khai bo mng cu trc :
struct tn_kiu_cu_trc__nh_ngha tn_mng_cu_trc[s phn t ca mng];

V d :
V d 1 :
Gi s kiu cu trc canbo -c nh ngha nh- mc trn. Khi dng khai bo :
struct canbo cb1,cb2,nhom1[10],nhom2[7];

s cho :
Hai bin cu trc cb1 v cb2.
Hai mng cu trc nhom1 co 10 phn t v nhom2 c 7 phn t v mi phn t
hai nhm ny c kiu canbo.

ca

V d 2 :
on ch-ng trnh sau s tnh tng l-ng cho cc phn t nhm 1:
double tongluong=0;
for (i=0;i<10;++i)
tongluong+=nhom1[i].luong;

Ch :
Khng cho php s dng php ton ly a ch i vi cc thnh phn ca mng cu
trc khc kiu nguyn. Chng hn khng cho php s dng cu lnh sau :
scanf("%f",&nhom1[5].luong);
102

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

103

Trong tr-ng hp ny ta dng bin trung gian.

8.5. Khi u mt cu trc :


C th khi u cho mt cu trc ngoi, cu trc tnh, mng cu trc ngoi v mng
cu trc tnh

8.6. Php gn cu trc :


C th thc hin php gn trn cc bin v phn t mng cu trc cng kiu nh- sau :

Gn hai bin cu trc cho nhau

Gn bin cu trc cho phn t mng cu trc

Gn phn t mng cu trc cho bin cu trc

Gn hai phn t mng cu trc cho nhau

Mi mt php gn trn t-ng -ng vi mt dy php gn cc thnh phn t-ng ng.

V d :
on ch-ng trnh sau minh ho cch dng php gn cu trc sp xp n th sinh
theo th t gim ca tng im :
struct thisinh
{
char ht[25];
float td;
} tg,ts[100];
for (i=1;i<=n-1;++i)
for (j=1;j<=n;++j)
if (ts[i].td<ts[j].td)
{
tg=ts[i];
ts[i]=ts[j];
103

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


ts[j]=tg;
}

8.7. Con tr cu trc v a ch cu trc :


8.7.1. Con tr v a ch :
Ta xt v d sau :
struct ngay
{
int ngaythu;
char thang[10];
int nam;
};
struct nhancong
{
char ten[20];
char diachi[25];
double bacluong;
struct ngay ngaysinh;
};
Nu khai bo :
struct nhancong *p,*p1,*p2,nc1,nc2,ds[100];
ta c :

p, p1, p2 l con tr cu trc

nc1, nc2 l cc bin cu trc

ds l mng cu trc

Con tr cu trc dng l-u tr a ch ca bin cu trc v mng cu trc.


V d :
104

104

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


p1=&nc1;

/* Gi a ch nc1 vo p1 */

p2=&ds[4];

/* Gi a ch ds[4] vo p2 */

p=ds;

/* Gi a ch ds[0] vo p */

105

8.7.2. Truy nhp qua con tr:


C th truy nhp n cc thnh phn thng qua con tr theo mt trong hai cch sau :

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

8.7.3. Php gn qua con tr:


Gi s ta gn :
p1=&nc1;
p2=&ds[4];
Khi c th dng :
*p1 thay cho nc1
*p2 thay cho ds[4]
Tc l vit:

105

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

106

ds[5]=nc1;
ds[4]=nc2;
T-ng -ng vi :
ds[5]=*p1;
*p2=nc2;

8.7.4. Php cng a ch :


Sau cc php gn :
p=ds;
p2=&ds[4];
th p tr thi ds[[0]] v p2 tr ti ds[4]. Ta c th dng cc php cng, tr a ch lm cho p
v p2 tr ti cc thnh phn bt k no khc.

V d :
Sau cc lnh :
p=p+10;
p2=p2-4;
th p tr ti ds[10] cn p2 tr ti ds[0]

8.7.5. Con tr v mng :


Gi s con tr p tr ti u mng ds, khi :

Ta c th truy nhp ti cc thnh phn cu trc bng cc cch sau :


+ ds[i].thnh_phn

ds[i].ngaysinh.nam

+ p[i].thnh_phn

p[i].ngaysinh.nam

+ (p+i)->thnh_phn (p+i)->ngaysinh.nam

Khi ta s dng c cu trc th cc cch vit sau l t-ng -ng :


106

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


ds[i]

p[i]

107

*(p+i)

8.8. Cu trc t tr v danh sch lin kt :


Khi ta lp mt ch-ng trnh qun l m bn thn s bin (cu trc) ch-a -c bit
tr-c, 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;
107

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

108

person *tiep;
};

Cch 3 :
struct pp
{
char ht[20];
char qq[25];
int tuoi;
struct pp *tiep;
};
typedef pp person;
Cu trc t tr -c dng xy dng danh sch lin kt ( mc ni ), l mt nhm
cc cu trc c tnh cht sau : ( Mc ni theo chiu thun ).

Bit a ch cu trc u ang -c l-u tr trong mt con tr no .

Trong mi cu trc ( tr cu trc cui ) cha a ch ca cu trc tip sau ca danh


sch.

Cu trc cui cha hng NULL.

V d :
.........

Pdau

NULL

Vi danh sch ny, ta c th ln l-t t cu trc u n cu trc cui theo chiu t trn xung
d-i.
Nhm cu trc mc ni theo chiu ng-c c tnh cht sau :

Bit a ch cu trc cui.

Trong mi cu trc ( tr cu trc u ) u ch a ch ca cu trc tr-c.

Cu trc u cha hng NULL.


108

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

109

Vi danh sch ny, ta c th ln l-t t cu trc cui ln cu trc u theo chiu t d-i ln
trn.
Ngoi ra, ta c th xy dng cc danh sch m mi phn t cha hai a ch ca cu trc tr-c
v cu trc sau. Vi loi danh sch ny, ta c th truy nhp theo c hai chiu trn.
Khi lm vic vi danh sch mc ni, ta th-ng phi tin hnh cc cng vic sau sau :
( Gi s ta c con tr p, tr pdau ch cu trc u ca danh sch, con tr tiep l thnh phn
con tr ca cu trc )

To danh sch mi :

Cp pht b nh cho mt cu trc

Nhp mt bin cu trc vo vng nh va cp

Gn a ch ca cu trc sau cho thnh phn con tr ca cu trc tr-c

Duyt qua tt c cc phn t ca danh sch :

-a tr p v tr cng cu trc vi pdau bng lnh :


p=pdau

chuyn tip n ng-i tip theo ta dng lnh :


p=p->tiep

Du hiu bit ang xt cu trc cui cng ca danh sch l :


p->tiep==NULL

Loi mt cu trc ra khi danh sch :

L-u tr a ch ca cu trc cn loi vo mt con tr ( gii phng b nh ca


cu trc ny)

Sa cu trc tr-c c a ch ca cu trc cn loi

Gii phng b nh cu trc cn loi

B xung hoc chn mt cu trc vo danh sch:

Cp pht b nh v nhp b xung

109

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

110

Sa thnh phn con tr trong cc cu trc c lin quan m bo mi cu trc


cha a ch ca cu trc tip theo

Hm cp pht b nh :
void *malloc(kichthuoc_t kichthuoc);
Hm ly trong th- vin alloc.h hoc stdlib.h.
kichthuoc tnh bng s by te. Hm s -a con tr v v tr nh va -c cp hoc v NULL
nu khng b nh cn thit. Nu kichthuoc == 0 th n tr v NULL.

V d :
#include "stdio.h"
#include "string.h"
#include "alloc.h"
#include "process.h"
int main()
{
char *str;
/* Cp pht b nh cho xu k t */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Kt thc ch-ng trnh nu thiu b nh */
}
/* copy "Hello" vo xu */
strcpy(str, "Hello");
/* Hin th xu */
printf("String is %s\n", str);
/* Gii phng b nh */
110

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

111

free(str);
return 0;
}

V d :
To mt danh sch lin kt. Cc bin cu trc gm cc tr-ng : H tn, Qu qun, tui,
v mt tr-ng con tr l Tip.
Mc ni theo chiu thun (Vo tr-c ra tr-c FIFO first in first out ):
#include "stdio.h"
#include "alloc.h"
#include "conio.h"
#include "string.h"
typedef struct pp
{

char ht[25];
char qq[20];
int tuoi;
struct pp *tiep;

} nhansu;
main() {
char tt;
nhansu *pdau,*pcuoi,*p;
char tam[10];
clrscr();
pdau=NULL;
do
{
p=(nhansu*)malloc(sizeof(nhansu));
printf("\n Ho ten : ");
111

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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);
p=p->tiep;
}
112

112

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


getch();
}
Mc ni theo chiu ng-c (Vo sau ra tr-c LIFO last in first out ):
#include "stdio.h"
#include "alloc.h"
#include "conio.h"
#include "string.h"
typedef struct pp
{
char ht[25];
char qq[20];
int tuoi;
struct pp *tiep;
} nhansu;
main()
{
char tt;
nhansu *pdau,*pcuoi,*p;
char tam[10];
clrscr();
pdau=NULL;
do{
p=(nhansu*)malloc(sizeof(nhansu));
printf("\n Ho ten : ");
gets(p->ht);
printf(" Que quan : ");
gets(p->qq);

113

113

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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();
}

114

114

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

115

Ch-ng 9

tp tin - file

9.1. Khi nim v tp tin :


Tp tin hay tp d liu l mt tp hp cc d liu c lin quan vi nhau v c cng mt
kiu -c nhm li vi nhau thnh mt dy. Chng th-ng -c cha trong mt thit b nh
ngoi ca my tnh (a mm, a cng...) d-i mt ci tn no .
Tn ting Anh ca tp l file, n -c dng ch ra mt hp ng cc phiu hay th
ghi ca th- vin. Mt hnh nh r nt gip ta hnh dung ra tp l t phiu ca th- vin. Mt
hp c nhiu phiu ging nhau v hnh thc v t chc, song li khc nhau v ni dung. y,
t phiu l tp, cc l phiu l cc thnh phn ca tp. Trong my tnh, mt a cng hoc mt
a mm ng vai tr chic t ( cha nhiu tp).
Tp -c cha trong b nh ngoi, iu c ngha l tp -c l-u tr dng nhiu
ln v tn ti ngay c khi ch-ng trnh kt thc hoc mt in. Chnh v l do trn, ch nhng
d liu no cn l-u tr ( nh- h s chng hn) th ta nn dng n tp.
Tp l mt kiu d liu c cu trc. nh ngha tp c phn no ging mng ch
chng u l tp hp ca cc phn t d liu cng kiu, song mng th-ng c s phn t c
nh, s phn t ca tp khng -c xc nh trong nh ngha.
Trong C, cc thao tc tp -c thc hin nh cc hm th- vin. Cc hm ny -c chia
lm hai nhm : nhm 1 v nhm 2. Cc hm cp 1 l cc hm nhp / xut h thng, chng
thc hin vic c ghi nh- DOS. Cc hm cp 2 lm vic vi tp thng qua mt bin con tr
tp.
Do cc hm cp 2 c nhiu kiu truy xut v d dng hn so vi cc hm cp 1 nn
trong cc ch-ng trnh vit trong C, cc hm cp 2 hay -c s dng hn.
Mt tp tin d -c xy dng bng cch no i na cng ch n gin l mt dy cc
byte ghi trn a (c gi tr t 0 n 255). S byte ca dy chnh l di ca tp.
C hai kiu nhp xut d liu ln tp : Nhp xut nh phn v nhp xut vn bn.

Nhp xut nh phn :

D liu ghi ln tp theo cc byte nh phn nh- b nh, trong qu trnh nhp xut,
d liu khng b bin i.

Khi c tp, nu gp cui tp th ta nhn -c m kt thc tp EOF ( -c nh


ngha trong stdio.h bng -1) v hm feof cho gi tr khc 0.
115

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

116

Nhp xut vn bn:

Kiu nhp xut vn bn ch khc kiu nh phn khi x l k t chuyn dng ( m


10) v k t m 26. i vi cc k t khc, hai kiu u c ghi nh- nhau.

M chuyn dng :
Khi ghi, mt k t LF (m 10) -c chuyn thnh 2 k t CR (m 13) v
LF
Khi c, 2 k t lin tip CR v LF trn tp ch cho ta mt k t LF

M kt thc tp :
Trong khi c, nu gp k t c m 26 hoc cui tp th ta nhn -c m kt thc tp
EOF ( bng -1) v hm feof(fp) cho gi tr khc 0 ( bng 1).

9.2. Khai bo s dng tp - hm th-ng dng khi thao tc trn tp :


9.2.1. Khai bo s dng tp :
khai bo s dng tp, ta dng lnh sau :
FILE bin_con_tr_tp;

Trong bin_con_tr_tp c th l bin n hay mt danh sch cc bin phn cch nhau bi
du phy ( du , ).

V d :
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);

116

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

117

Nguyn hm trong : stdio.h .


Trong :
i th nht l tn tp, i th hai l kiu truy nhp.

Cng dng :
Hm dng m tp. Nu thnh cng hm cho con tr kiu FILE ng vi tp va m.
Cc hm cp hai s lm vic vi tp thng qua con tr ny. Nu c li hm s tr v gi tr
NULL.
Bng sau ch ra cc gi tr ca kiu :
Tn kiu

ngha

"r" "rt"

M mt tp c theo kiu vn bn. Tp


cn c phi tn ti, nu khng s c li

"w" "wt"

M mt tp ghi theo kiu vn bn. Nu


tp tn ti th n s b xo.

"a" "at"

M mt tp ghi b xung theo kiu vn


bn. Nu tp ch-a tn ti th to tp mi.

"rb"

M mt tp c theo kiu nh phn. Tp


cn c phi tn ti, nu khng s c
li.

"wb"

M mt tp mi ghi theo kiu nh phn.


Nu tp tn ti th n s b xo.

"ab"

M mt tp ghi b xung theo kiu nh


phn. Nu tp ch-a tn ti th to tp mi.

"r+" "r+t"

M mt tp c/ghi theo kiu vn bn.


Tp cn c phi tn ti, nu khng s
c li

"w+" "w+t"

M mt tp c/ghi theo kiu vn bn.


Nu tp tn ti th n s b xo.

"a+" "a+t"

M mt tp c/ghi b xung theo kiu


vn bn. Nu tp ch-a tn ti th to tp
mi.

"r+b"

M mt tp c/ghi theo kiu nh phn.


Tp cn c phi tn ti, nu khng s
c li.
117

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


"w+b"

M mt tp mi c/ghi theo kiu nh


phn. Nu tp tn ti th n s b xo.

"a+b"

M mt tp c/ghi b xung theo kiu


nh phn. Nu tp ch-a tn ti th to tp
mi.

118

Ch :
Trong cc kiu c ghi, ta nn lm sch vng m tr-c khi chuyn t c sang ghi
hoc ng-c li. Ta s cp n cc hm vi tnh nng xo sau ny.

V d :
f=fopen("TEPNP","wb");
9.2.3. ng tp - hm fclose :
Cu trc ng php ca hm :
int fclose(FILE *fp);

Nguyn hm trong : stdio.h .


Trong :
fp l con tr ng vi tp cn ng.

Cng dng :
Hm dng ng tp khi kt thc cc thao tc trn n. Khi ng tp, my thc hin
cc cng vic sau :

Khi ang ghi d liu th my s y d liu cn trong vng m ln a

Khi ang c d liu th my s xo vng m

Gii phng bin tr tp.

Nu lnh thnh cng, hm s cho gi tr 0, tri li n cho hm EOF.

V d :
118

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

119

fclose(f);

9.2.4. ng tt c cc tp ang m- hm fcloseall :


Cu trc ng php ca hm :
int fcloseall(void);

Nguyn hm trong : stdio.h .


Cng dng :
Hm dng ng tt c cc tp ang m . Nu lnh thnh cng, hm s cho gi tr
bng s l s tp -c ng, tri li n cho hm EOF.

V d :
fcloseall();

9.2.5. Lm sch vng m - hm fflush :


Cu trc ng php ca hm :
int fflush(FILE *fp);

Nguyn hm trong : stdio.h .


Cng dng :
Dng lm sch vng m ca tp fp. Nu lnh thnh cng, hm s cho gi tr 0, tri li
n cho hm EOF.

V d :
fflush(f);

9.2.6. Lm sch vng m ca cc tp ang m - hm fflushall :


Cu trc ng php ca hm :
119

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

120

int fflushall(void);

Nguyn hm trong : stdio.h .


Cng dng :
Dng lm sch vng m ca tt c cc tp ang m. Nu lnh thnh cng, hm s cho
gi tr bng s cc tp ang m, tri li n cho hm EOF.

V d :
fflushall();
9.2.7. Kim tra li file - hm ferror :
Cu trc ng php ca hm :
int ferror(FILE *fp);

Nguyn hm trong : stdio.h .


Trong fp l con tr tp.

Cng dng :
Hm dng kim tra li khi thao tc trn tp fp. Hm cho gi tr 0 nu khng c li,
tri li hm cho gi tr khc 0.

9.2.8. Kimtra cui tp - hm feof :


Cu trc ng php ca hm :
int feof(FILE *fp);

Nguyn hm trong : stdio.h .


Trong fp l con tr tp.

Cng dng :
120

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

121

Hm dng kim tra cui tp. Hm cho gi tr khc 0 nu gp cui tp khi c, tri
li hm cho gi tr 0.
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tr ch v :
9.2.7.1. Chuyn con tr ch v v u tp - Hm rewind :
Cu trc ng php :
void rewind(FILE *fp);

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);

9.2.9.2. Chuyn con tr ch v tr cn thit - Hm fseek :


Cu trc ng php :
int fseek(FILE *fp, long sb, int xp);

Nguyn hm trong : stdio.h .


Trong
fp l con tr tp.
sb l s byte cn di chuyn.
xp cho bit v tr xut pht m vic dch chuyn -c bt u t .
xp c th nhn cc gi tr sau :
xp=SEEK_SET hay 0 : Xut pht t u tp.
121

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

122

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);

9.2.9.3. V tr hin ti ca con tr ch v - Hm ftell :


Cu trc ng php :
int ftell(FILE *fp);

Nguyn hm trong : stdio.h .


Trong
fp l con tr tp.

Cng dng :
Hm cho bit v tr hin ti ca con tr ch v (byte th my trn tp fp) khi thnh
cng. S th t tnh t 0. Tri li hm cho gi tr -1L.
V d :
Sau lnh

fseek(fp,0,SEEK_END);
122

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


ftell(fp) cho gi tr 3.
Sau lnh

fseek(fp,-1,SEEK_END);

ftell(fp) cho gi tr 2.

9.2.10. Ghi cc mu tin ln tp - hm fwrite :


Cu trc ng php ca hm :
int fwrite(void *ptr, int size, int n, FILE *fp);

Nguyn hm trong : stdio.h .


Trong :
ptr l con tr tr ti vng nh cha d liu cn ghi.
size l kch th-c ca mu tin theo byte
n

l s mu tin cn ghi

fp

l con tr tp

Cng dng :
Hm ghi n mu tin kch th-c size byte t vng nh ptr ln tp fp.
Hm s tr v mt gi tr bng s mu tin thc s ghi -c.

V d :
#include "stdio.h"
struct mystruct
{
int i;
char ch;
};
main()
123

123

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


{
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;
}

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 :
124

124

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


#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;
}

9.2.12. Nhp xut k t :


9.2.12.1. Cc hm putc v fputc :
Cu trc ng php :
int putc(int ch, FILE *fp);
int fputc(int ch, FILE *fp);

Nguyn hm trong : stdio.h .


Trong :
125

125

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


ch l mt gi tr nguyn
fp l mt con tr tp.

Cng dng :
Hm ghi ln tp fp mt k t c m bng
m=ch % 256.
ch -c xem l mt gi tr nguyn khng du. Nu thnh cng hm cho m k t
-c ghi, tri li cho EOF

V d :
#include "stdio.h"
main()
{
char msg[] = "Hello world\n";
int i = 0;
while (msg[i])
putc(msg[i++], stdout); /* stdout thit b ra chun - Mn hnh*/
return 0;
}

9.2.12.2. Cc hm getc v fgettc :


Cu trc ng php :
int gretc(FILE *fp);
int fputc(FILE *fp);

Nguyn hm trong : stdio.h .


Trong :
fp l mt con tr tp.
126

126

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

127

Cng dng :
Hm c mt k t t tp fp. Nu thnh cng hm s cho m c -c ( c gi tr t 0
n 255). Nu gp cui tp hay c li hm s tr v EOF.
Trong kiu vn bn, hm c mt l-t c hai m 13, 10 v tr v gi tr 10. Khi gp m
26 hm s tr v EOF.

V d :
#include "string.h"
#include "stdio.h"
#include "conio.h"
main()
{
FILE *stream;
char string[] = "Kiem tra";
char ch;
/* M tp cp nht*/
stream = fopen("DUMMY.FIL", "w+");
/*Vit mt xu k t vo tp */
fwrite(string, strlen(string), 1, stream);
/* Tm v tr u ca tp */
fseek(stream, 0, SEEK_SET);
do
{
/* c mt k t t tp */
ch = fgetc(stream);
/* Hin th k t */
putch(ch);
127

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

128

} 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");
128

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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;
}

129

129

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

130

Ch-ng 10

ho

Ch-ng ny s gii thiu cc hm v th tc khi ng h ho, v cc -ng v


hnh c bn nh- hnh trn, cung elip, hnh qut, -ng gy khc, a gic, -ng thng, hnh
ch nht, hnh hp ch nht....
Cc hm v th tc ho -c khai bo trong file graphics.h.

10.1. Khi ng ho :
Mc ch ca vic khi ng h thng ho l xc nh thit b ho (mn hnh) v
mode ho s s dng trong ch-ng trnh. lm cng vic ny, ta c hm sau :
void initgraph(int *graphdriver,int graphmode,char *driverpath);
Trong :

driverpath l xu k t ch -ng dn n th- mc cha cc tp tin iu khin


ho.

graphdriver cho bit mn hnh ho s dng trong ch-ng trnh.

graphmode cho bit mode ho s dng trong ch-ng trnh.

Bng d-i y cho cc gi tr kh d ca graphdriver v graphmode :


graphdriver

graphmode

phn gii

DETECT (0)
CGA (1)

CGAC0 (0)

320x200

CGAC1 (1)

320x200

CGAC2 (2)

320x200

CGAC3 (3)

320x200

CGAHi (4)

640x200

130

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


MCGA (2)

MCGA0 (0)

320x200

MCGA1 (1)

320x200

MCGA2 (2)

320x200

MCGA3 (3)

320x200

MCGAMed (4)

640x200

MCGAHi (5)

640x480

EGAL0 (0)

640x200

EGAHi (1)

640x350

EGA64LO (0)

640x200

EGA64Hi (1)

640x350

EGAMONO (5)

EGAMONOHi (0)

640x350

VGA (9)

VGALO (0)

640x200

VGAMED (1)

640x350

VGAHI (2)

640x480

HERCMONO (7)

HERCMONOHI

720x348

ATT400 (8)

ATT400C0 (0)

320x200

ATT400C1 (1)

320x200

ATT400C2 (2)

320x200

ATT400C3 (3)

320x200

ATT400MED (4)

640x400

ATT400HI (5)

640x400

PC3270 (10)

PC3270HI (0)

720x350

IBM8514 (6)

PC3270LO (0)

640x480 256 mu

PC3270HI (1)

1024x768 256 mu

EGA (3)

EGA64 (4)

Ch :

131

131

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

132

Bng trn cho ta cc hng v gi tr ca chng m cc bin graphdtriver v


graphmode c th nhn. Chng hn hng DETECT c gi tr 0, hng VGA c gi
tr 9, hng VGALO c gi tr 0 vv...
Khi lp trnh ta c th thay th vo v tr t-ng ng ca chng trong hm tn
hng hoc gi tr ca hng .

V d :
Gi s my tnh c mn hnh VGA, cc tp tin ho cha trong th- mc C:\TC \BGI,
khi ta khi ng h thng ho nh- sau :
#include "graphics.h"
main()
{
int mh=VGA,mode=VGAHI; /*Hoc mh=9,mode=2*/
initgraph(&mh,&mode,"C:\\TC\\BGI");
/* V k t \ trong C l k t c bit nn ta phi gp i n */
}

Bng trn cn cho thy phn gii cn ph thuc c vo mn hnh v mode. V


d nh- trong mn hnh EGA nu dng EGALo th phn gii l 640x200 ( Hm
getmaxx() cho gi tr cc i ca s im theo chiu ngang ca mn hnh. Vi mn
hnh EGA trn : 639, Hm getmaxy() cho gi tr cc i ca s im theo chiu
dc ca mn hnh. Vi mn hnh EGA trn : 199 ).

Nu khng bit chnh xc kiu mn hnh ang s dng th ta gn cho bin


graphdriver bng DETECT hay gi tr 0. Khi , kt qu ca initgraph s l :
Kiu mn hnh ang s dng -c pht hin, gi tr ca n -c gn cho bin
graphdriver.
Mode ho phn gii cao nht ng vi mn hnh ang s dng cng
-c pht hin v tr s ca n -c gn cho bin graphmode.
Nh- vy dng hng s DETECT chng nhng c th khi ng -c h thng
ho vi mn hnh hin c theo mode c phn gii cao nht m cn gip
ta xc nh kiu mn hnh ang s dng.

V d :

132

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

133

Ch-ng trnh d-i y xc nh kiu mn hnh ang s dng :


#include "graphics.h"
#include "stdio.h"
main()
{
int mh=0, mode;
initgraph(&mh,&mode,"C:\\TC\\BGI");
printf("\n Gia tri so cua man hinh la : %d",mh);
printf("\n Gia tri so mode do hoa la : %d",mode);
closegraph();
}

Nu chui dng xc nh driverpath l chui rng th ch-ng trnh dch s tm


kim cc file iu khin ho trn th- mc ch ( Th- mc hin thi ).

10.2. Cc hm ho :
10.2.1. Mu v mu :

t mu nn :
t mu cho nn ta dng th tc sau :
void setbkcolor(int mu);

t mu -ng v :
t mu v -ng ta dng th tc sau :
void setcolor(int mu);

t mu (kiu) t v mu t :
t mu (kiu) t v mu t ta dng th tc sau :
void setfillstyle(int mu, int mu);

Trong c ba tr-ng hp mu xc nh m ca mu.


Cc gi tr kh d ca mu cho bi bng d-i y :

133

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


Bng cc gi tr kh d ca mu
Tn hng

Gi tr s

Mu hin th

BLACK

en

BLUE

Xanh da tri

GREEN

Xanh l cy

CYAN

Xanh l

RED

MAGENTA

Tm

BROWN

Nu

LIGHTGRAY

Xm nht

DARKGRAY

Xm m

LIGHTBLUE

Xanh xa tri nht

LIGHTGREEN

10

Xanh l cy nht

LIGHTCYAN

11

Xanh l nht

LIGHTRED

12

nht

LIGHTMAGENTA

13

Tm nht

YELLOW

14

Vng

WHITE

16

Trng

Cc gi tr kh d ca mu cho bi bng d-i y :


Bng cc gi tr kh d ca mu
Tn hng

Gi tr s

Kiu mu t

EMPTY_FILL

T bng mu nn

SOLID_FILL

T bng -ng lin nt

LINE_FILL

T bng -ng --------

LTSLASH_FILL

T bng ///

SLASH_FILL

T bng /// in m

134

134

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


BKSLASH_FILL

T bng \\\ in m

LTBKSLASH_FILL

T bng \\\

HATCH_FILL

T bng -ng gch bng nht

XHATCH_FILL

T bng -ng gch bng ch thp

INTERLEAVE_FILL

T bng -ng t qung

WIDE_DOT_FILL

10

T bng du chm th-a

CLOSE_DOT_FILL

11

T bng du chm mau

135

Chn gii mu :
thay i gii mu -c nh ngha trong bng trn, ta s dng hm :
void setpalete(int s_th_t_mu, int mu );
V d :
Cu lnh :
setpalete(0,lightcyan);
bin mu u tin trong bng mu thnh mu xanh l nht. Cc mu khc khng b nh
h-ng.

Ly gii mu hin thi :


+ Hm getcolor tr v mu xc nh bng th tc setcolor ngay tr-c
n.
+ Hm getbkcolor tr v mu xc nh bng hm setbkcolor ngay tr-c
n.

10.2.2. V v t mu :
C th chia cc -ng v hnh thnh bn nhm chnh :

Cung trn v hnh trn.

-ng gp khc v a gic.

-ng thng.
135

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

Hnh ch nht.

10.2.2.1. Cung trn v -ng trn :


Nhm ny bao gm : Cung trn, -ng trn, cung elip v hnh qut.

Cung trn :
v mt cung trn ta dng hm :
void arc(int x, int y, int gd, int gc, int r);

Trong :
(x,y) l to tm cung trn.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
r l bn knh cung trn .

V d :
V mt cung trn c tm ti (100,50), gc u l 0, gc cui l 180, bn knh 30.
arc(100,50,0,180,30);

-ng trn :
v -ng trn ta dng hm :
void circle(int x, int y, int r);

Trong :
(x,y) l to tm cung trn.
r l bn knh -ng trn.

V d :
V mt -ng trn c tm ti (100,50) v bn knh 30.
circle(100,50,30);

136

136

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

137

Cung elip
v mt cung elip ta dng hm :
void ellipse(int x, int y, int gd, int gc, int xr, int yr);

Trong :
(x,y) l to tm cung elip.
gd l gc u cung trn(0 n 360 ).
gc l gc cui cung trn (gd n 360 ).
xr l bn trc nm ngang.
yr l bn trc thng ng.

V d :
V mt cung elip c tm ti (100,50), gc u l 0, gc cui l 180, bn trc ngang 30,
bn trc ng l 20.
ellipse(100,50,0,180,30,20);

Hnh qut :
v v t mu mt hnh qut ta dng hm :
void pieslice(int x, int y, int gd, int gc, int r);

Trong :
(x,y) l to tm hnh qut.
gd l gc u hnh qut (0 n 360 ).
gc l gc cui hnh qut (gd n 360 ).
r l bn knh hnh qut .

V d :
Ch-ng trnh d-i y s v mt cung trn gc phn t- th nht, mt cung elip gc
phn t- th ba, mt -ng trn v mt hnh qut qut t 90 n 360 .
137

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

138

# include "graphics.h"
#include "stdio.h"
#include "conio.h"
main()
{
int md=0,mode;
initgraph(&md,&mode,"C:\\TC\\BGI");
setbkcolor(BLUE);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,RED);;
arc(160,50,0,90,45);
circle(160,150,45);
pieslice(480,150,90,360,45);
getch();
closegraph();
}

10.2.3. V -ng gp khc v a gic :

V -ng gp khc :

Mun v -ng gp khc i qua n im : (x1,y1), (x2,y2), ...., (xn,yn) th tr-c ht ta


phi gn cc to (xi,yi) cho mt mng a kiu int no theo nguyn tc sau :
To x1 gn cho a[0]
To y1 gn cho a[1]
To x2 gn cho a[2]
To y2 gn cho a[3]
....
To xn gn cho a[2n-2]
To yn gn cho a[2n-1]
138

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

139

Sau gi hm :
drawpoly(n,a);
Nu im cui cng (xn,yn) trng vi im u (x1,y1) th ta nhn -c mt -ng
gp khc khp kn.

T mu a gic :
Gi s ta c a l mng cp n trong mc trn, khi ta gi hm :
fillpoly(n,a);

s v v t mu mt a gic c nh l cc im (x1,y1), (x2,y2), ...., (xn,yn)

V d :
V mt -ng gp khc v hai -ng tam gic.
#include "graphics.h"
#include "stdio.h"
#include "conio.h"
int poly1[]={5,200,190,5,100,300};
int poly2[]={205,200,390,5,300,300};
int poly3[]={405,200,590,5,500,300,405,200};
main()
{
int md=0,mode;
initgraph(&md,&mode,"C:\\TC\\BGI");
setbkcolor(CYAN);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,MAGENTA);
drawpoly(3,poly1);
fillpoly(3,poly2);
fillpoly(4,poly3);
139

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

140

getch();
closegraph();
}

V -ng thng :
v -ng thng ni hai im bt k c to (x1,y1) v (x2,y2) ta s dng hm

sau :
void line(int x1, int y1, int x2, int y2);
Con chy ho gi nguyn v tr.
v -ng thng ni t im con chy ho n mt im bt c to (x,y) ta s
dng hm sau :
void lineto(int x, int y);
Con chy s chuyn n v tr (x,y).
v mt -ng thng t v tr con chy hin ti ( gi s l im x,y ) n im c to
(x+dx,y+dy) ta s dng hm sau :
void linerel(int dx, int dy);
Con chy s chuyn n v tr (x+dx,y+dy).

Di chuyn con chy ho :


di chuyn con chy n v tr (x,y), ta s dng hm sau :
void moveto(int x, int y);

Chn kiu -ng :


Hm

void setlinestyle(int kiu_-ng, int mu, int _dy);

tc ng n nt v ca cc th tc v -ng line, lineto,linerel , circle, rectangle (hm v hnh


ch nht, ta s hc trong phn v min d-i).
Hm ny s cho php ta xc nh ba yu t khi v -ng thng, l : Kiu -ng, b
dy v mu t to.
Dng -ng do tham s kiu_-ng xc nh. Bng d-i y cho cc gi tr kh d
ca kiu_-ng :
140

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

Tn hng

Gi tr s

Kiu -ng

SOLID_LINE

Nt lin

DOTTED_LINE

Nt chm

CENTER_LINE

Nt chm gch

DASHED_LINE

Nt gch

USERBIT_LINE

Mu t to

141

B dy ca -ng v do tham s _dy xc nh,. bng d-i y cho cc gi tr kh


d ca _dy :
Tn hng

Gi tr s

B dy

NORM_WIDTH

B dy bnh th-ng

THICK_WIDTH

B dy gp ba

Mu t to : Nu tham s th nht l USERBIT_LINE th ta c th to ra mu -ng


thng bng tham s mu. V d ta xt on ch-ng trnh :
int pattern = 0x1010;
setlinestile(USERBIT_LINE,pattern,NORM_WIDTH);
line(0,0,100,200);
Gi tr ca pattern trong h 16 l 1010, trong h 2 l :
0001 0000 0001 0000
Bit 1 s cho im sng, bit 0 s lm tt im nh.

V d :
Ch-ng trnh v mt -ng gp khc bng cc on thng. -ng gp khc i qua cc
nh sau :
(20,20),(620,20),(620,180),(20,180) v (320,100)
#include "graphics.h"
#include "stdio.h"
#include "conio.h"
141

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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();
}

10.2.4. V im, min :

V im :
Hm :
void putpixel(int x, int y, int color);

s t im (x,y) theo mu xc nh bi color.

Hm :
unsigned getpixel(int x, int y);
s tr v s hiu mu ca im nh v tr (x,y).

Ch :
142

142

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

143

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 :
t mu cho mt min no trn mn hnh, ta dng hm sau :
void floodfill(int x, int y, int border);

y :
(x,y) l to ca mt im no gi l im gieo.
Tham s border cha m ca mu.
S hot ng ca hm floodfill ph thuc vo gi tr ca x,y,border v trng thi mn hnh.
+ Khi trn mn hnh c mt -ng cong khp kn hoc -ng gp khc khp kn m m mu
ca n bng gi tr ca border th :
- Nu im gieo (x,y) nm trong min ny th min gii hn pha trong -ng s -c
t mu.
- Nu im gieo (x,y) nm ngoi min ny th min pha ngoi -ng s -c t mu.
+ Trong tr-ng hp khi trn mn hnh khng c -ng cong no nh- trn th c mn hnh s
-c t mu.

V d :
V mt -ng trn mu trn mn hnh mu xanh. To (x,y) ca im gieo -c
np t bn phm. Tu thuc gi tr c th ca x,y ch-ng trnh s t mu vng cho hnh trn
hoc phn mn hnh bn ngoi hnh trn.
#include "graphics.h"
#include "stdio.h"
main()
{
int mh=mode=0, x, y;
printf("\nVao toa do x,y:");
scanf("%d%d",&x,&y);
initgraph(&mh,&mode,"");
143

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

144

if (graphresult != grOk) exit(1);


setbkcolor(BLUE);
setcolor(RED);
setfillstyle(11,YELLOW);
circle(320,100,50);
moveto(1,150);
floodfill(x,y,RED);
closegraph();
}

10.2.5. Hnh ch nht :

Hm :
void rectangle(int x1, int y1, int x2, int y2);

s v mt hnh ch nht c cc cnh song song vi cc cnh ca mn hnh. To nh tri


trn ca hnh ch nht l (x1,y1) v to nh phi d-i ca hnh ch nht l (x2,y2).

Hm :
void bar(int x1, int y1, int x2, int y2);

s v v t mu mt hnh ch nht. To nh tri trn ca hnh ch nht l (x1,y1) v to


nh phi d-i ca hnh ch nht l (x2,y2).

Hm :
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);

s v mt khi hp ch nht, mt ngoi ca n l hnh ch nht xc nh bi cc to


(x1,y1), (x2,y2). Hnh ch nht ny -c t mu thng qua hm setfillstyle . Tham s depth
xc nh s im nh trn b su ca khi 3 chiu. Tham s top c th nhn cc gi tr 1 hay 0
v khi 3 chiu t-ng ng s c np hoc khng.

144

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

top=1

145

top=0

V d :
Ch-ng trnh d-i y to nn mt hnh ch nht, mt khi hnh ch nht v mt hnh
hp c np :
#include "graphics.h"
main()
{
int mh=mode=0;
initgraph(&mh,&mode,"");
if (graphresult != grOk) exit(1);
setbkcolor(GREEN);
setcolor(RED);
setfillstyle(CLOSE_DOT_FILL,YELLOW);
rectangle(5,5,300,160);
bar(3,175,300,340);
bar3d(320,100,500,340,100,1);
closegraph();
}

10.2.6. Ca s (Viewport) :

Thit lp viewport :

Viewport l mt vng ch nht trn mn hnh ho. thit lp viewport ta dng hm :


void setviewport(int x1, int y1, int x2, int y2, int clip);

145

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

146

trong (x1,y1) l to gc trn bn tri, (x2,y2) l to gc d-i bn phi. Bn gi tr


ny v th phi tho mn :
0 x1 x2
0 y1 y2
Tham s clip c th nhn mt trong hai gi tr :
clip=1 khng cho php v ra ngoi viewport.
clip=0 cho php v ra ngoi viewport.

V d :
setviewport(100,50,200,150,1);
Lp nn mt vng viewport hnh ch nht c to gc tri cao l (100,50) v to gc phi
thp l (200,150) (l to tr-c khi t viewport).

Ch :
Sau khi lp viewport, ta c h to mi m gc trn bn tri s c to (0,0).

Nhn din viewport hin hnh :

nhn viewport hin thi ta dng hm :


void getviewsetting(struct viewporttype *vp);
y kiu viewporttype -c nh ngha nh- sau :
struct viewporttype
{
int left,top,right,bottom;
int clip;
};

Xa viewport :
S dng hm :
146

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

147

void clearviewport(void);

Xo mn hnh, -a con chy v to (0,0) ca mn hnh :


S dng hm :
void cleardevice(void);

To m d-ng :

Nh s dng viewport c th vit cc ch-ng trnh ho theo to m d-ng.


Mun vy ta thit lp viewport v cho clip bng 0 c th v ra ngoi gii hn ca viewport.
Sau y l on ch-ng trnh thc hin cng vic trn :
int xc,yc;
xc=getmaxx()/2;
yc=getmaxy()/2;
setviewport(xc,yc,getmaxx(),getmaxy(),0);
Nh- th, mn hnh s -c chia lm bn phn vi to m d-ng nh- sau :
Phn t- tri trn : x m, y m.
x : t -getmaxx()/2 n 0.
y : t -getmaxy()/2 n 0.
Phn t- tri d-i : x m, y d-ng.
x : t -getmaxx()/2 n 0.
y : t 0 n getmaxy()/2.
Phn t- phi trn : x d-ng, y m.
x : t 0 n getmaxx()/2.
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.

147

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

148

V d :
Ch-ng trnh v th hm sin x trong h trc to m d-ng. Honh x ly cc
gi tr t -4 n 4. Trong ch-ng trnh c s dng hai hm mi l settextjustify v outtextxy
ta s cp ngay trong phn sau.
#include "graphics.h"
#include "conio.h"
#include "math.h"
#define TYLEX 20
#define TYLEY 60
main()
{
int mh=mode=DETECT;
int x,y,i;
initgraph(mh,mode,"");
if (graphresult!=grOK ) exit(1);
setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0);
setbkcolor(BLUE);
setcolor(YELLOW);
line(-getmaxx()/2,0,getmaxx()/2,0);
line(0,-getmaxy()/2,0,getmaxy()/2,0);
settextjustify(1,1);
setcolor(WHITE);
outtextxy(0,0,"(0,0)");
for (i=-400;i<=400;++i)
{
x=floor(2*M_PI*i*TYLEX/200);
y=floor(sin(2*M_PI*i/200)*TYLEY);
putpixel(x,y,WHITE);
148

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


}
getch();
closegraph();
}

10.3. X l vn bn trn mn hnh ho :

Hin th vn bn trn mn hnh ho :


Hm :
void outtext(char *s);

cho hin chui k t ( do con tr s tr ti ) ti v tr con tr ho hin thi.


Hm :
void outtextxy(int x, int y,char *s);

cho hin chui k t ( do con tr s tr ti ) ti v tr (x,y).

V d :
Hai cch vit d-i y :
outtextxy(50,50," Say HELLO");
v
moveto(50,50);
outtext(" Say HELLO");

cho cng kt qu.

S dng cc Fonts ch :

149

149

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

150

Cc Fonts ch nm trong cc tp tin *.CHR trn a. Cc Fonts ny cho cc kch th-c


v kiu ch khc nhau, chng s -c hin th ln mn hnh bng cc hm outtext v
outtextxy. chn v np Fonts ta dng hm :
void settextstyle(int font, int direction, int charsize);
Tham s font chn kiu ch v nhn mt trong cc hng sau :
DEFAULT_FONT=0
TRIPLEX_FONT=1
SMALL_FONT=2
SANS_SERIF_FONT=3
GOTHIC_FONT=4
Tham s derection chn h-ng ch v nhn mt trong cc hng sau :
HORIZ_DIR=0

vn bn hin th theo h-ng nm ngang t tri qua phi.

VERT_DIR=1

vn bn hin th theo h-ng thng ng t d-i ln trn.

Tham s charsize l h s phng to ca k t v c gi tr trong khong t 1 n 10.


Khi charsize=1, font hin th trong hnh ch nht 8*8 pixel.
Khi charsize=2 font hin th trong hnh ch nht 16*16 pixel.
............
Khi charsize=10, font hin th trong hnh ch nht 80*80 pixel.
Cc gi tr do settextstyle lp ra s gi nguyn ti khi gi mt settextstyle mi.

V d :
Cc dng lnh :
settextstyle(3,VERT_DIR,2);
outtextxy(30,30,"GODS TRUST YOU");
s hin th ti v tr (30,30) dng ch GODS TRUST YOU theo chiu t d-i ln trn, font
ch chn l SANS_SERIF_FONT v c ch l 2.

t v tr hin th ca cc xu k t cho bi outtext v outtextxy :


150

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

151

Hm settextjustify cho php ch nh ra ni hin th vn bn ca outtext theo quan h


vi v tr hin ti ca con chy v ca outtextxy theo quan h vi to (x,y);
Hm ny c dng sau :
void settextjustify(int horiz, int vert);
Tham s horiz c th l mt trong cc hng s sau :
LEFT_TEXT=0

( Vn bn xut hin bn phi con chy).

CENTER_TEXT

( Chnh tm vn bn theo v tr con chy).

RIGHT_TEXT

(Vn bn xut hin bn tri con chy).

Tham s vert c th l mt trong cc hng s sau :


BOTTOM_TEXT=0 ( Vn bn xut hin pha trn con chy).
CENTER_TEXT=1 ( Chnh tm vn bn theo v tr con chy).
TOP_TEXT=2

( Vn bn xut hin pha d-i con chy).

V d :
settextjustify(1,1);
outtextxy(100,100,"ABC");
s cho dng ch ABC trong im (100,100) s nm d-i ch B.

B rng v chiu cao vn bn :

Chiu cao :
Hm :
textheight(char *s);
cho chiu cao ( tnh bng pixel ) ca chui do con tr s tr ti.

V d 1 :
Vi font bit map v h s phng i l 1 th textheight("A") ch gi tr l 8.

V d 2 :
151

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

152

#include "stdio.h"
#include "graphics.h"
main()
{
int mh=mode=DETECT, y,size;
initgraph(mh,mode,"C:\\TC\\BGI");
y=10;
settextjustify(0,0);
for (size=1;size<5;++size)
{
settextstyle(0,0,size);
outtextxy(0,y,"SACRIFICE");
y+=textheight("SACRIFICE")+10;
}
getch();
closegraph();
}

B rng :
Hm :
textwidth(char *s);
cho b rng chui ( tnh theo pixel ) m con tr s tr ti da trn chiu di chui, kch th-c
font ch, h s phng i.

152

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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
153

153

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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()
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

154

154

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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
5.4.1.1. Cu trc lp vi ton t while
5.4.1.2. Cu trc lp vi ton t for :
5.4.2. Chu trnh do-while
5.5. Cu lnh break
5.6. Cu lnh continue

Ch-ng 6
Hm
6.1. C s
6.2. Hm khng cho cc gi tr
6.3. Hm qui
6.3.3. M u
6.3.2. Cc bi ton c th dng qui
6.3.3. Cch xy dng hm qui
6.3.4. Cc v d v dng hm qui

155

155

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


6.4. B tin s l C

Ch-ng 7
Con tr
7.1. Con tr v a ch
7.2. Con tr v mng mt chiu
7.2.1.Php ton ly a ch
7.2.2. Tn mng l mt hng a ch
7.2.3. Con tr tr ti cc phn t ca mng mt chiu
7.2.4. Mng, con tr v xu k t
7.3. Con tr v mng nhiu chiu
7.3.1.Php ly a ch
7.3.2. Php cng a ch trong mng hai chiu
7.3.3. Con tr v mng hai chiu
7.4. Kiu con tr kiu a ch, cc php ton trn con tr
7.4.1. Kiu con tr v kiu a ch
7.4.2. Cc php ton trn con tr
7.4.3. Con tr kiu void
7.5. Mng con tr
7.6. Con tr ti hm
7.6.1. Cch khai bo con tr hm v mng con tr hm
7.6.2. Tc dng ca con tr hm
7.6.3. i ca con tr hm

Ch-ng 8
Cu trc
8.1. Kiu cu trc

156

156

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


8.2. Khai bo theo mt kiu cu trc nh ngha
8.3. Truy nhp n cc thnh phn cu trc
8.4. Mng cu trc
8.5. Khi u mt cu trc
8.6. Php gn cu trc
8.7. Con tr cu trc v a ch cu trc
8.7.1. Con tr v a ch
8.7.2. Truy nhp qua con tr
8.7.3. Php gn qua con tr
8.7.4. Php cng a ch
8.7.5. Con tr v mng
8.8. Cu trc t tr v danh sch lin kt

Ch-ng 9
Tp tin - file
9.1. Khi nim v tp tin
9.2. Khai bo s dng tp - mt s hm th-ng dng khi thao tc trn tp
9.2.1. Khai bo s dng tp
9.2.2. M tp - hm fopen
9.2.3. ng tp - hm fclose
9.2.4. ng tt c cc tp ang m- hm fcloseall
9.2.5. Lm sch vng m - hm fflush
9.2.6. Lm sch vng m ca cc tp ang m - hm fflushall
9.2.7. Kim tra li file - hm ferror
9.2.8. Kimtra cui tp - hm feof
9.2.9. Truy nhp ngu nhin - cc hm di chuyn con tr ch v
9.2.9.1. Chuyn con tr ch v v u tp - Hm rewind

157

157

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


9.2.9.2. Chuyn con tr ch v tr cn thit - Hm fseek
9.2.9.3. V tr hin ti cu con tr ch v - Hm ftell
9.2.10. Ghi cc mu tin ln tp - hm fwrite
9.2.11. c cc mu tin t tp - hm fread
9.2.12. Nhp xut k t
9.2.12.1. Cc hm putc v fputc
9.2.12.2. Cc hm getc v fgettc
9.2.13. Xo tp - hm unlink

Ch-ng 10
ho
10.1. Khi ng ho
10.2. Cc hm ho
10.2.1. Mu v mu
10.2.2. V v t mu
10.2.3. V -ng gp khc v a gic
10.2.4. V im, min
10.2.5. Hnh ch nht
10.2.6. Ca s (Viewport)
10.3. S l vn bn trn mn hnh ho

158

158

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

159

Bi tp.
Phn 1 : Nhm cc bI tp v tnh ton, hm v chu trnh .
BI tp 1 :
Vit ch-ng trnh hin th thp PASCAL :
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
Vit ch-ng trnh hin th thp o ng-c.
BI tp 2 :
Vit ch-ng trnh nhp ba s thc. Kim tra xem ba s c th l chiu di ca ba cnh ca
mt tam gic -c khng? Nu -c th tnh chu vi v din tch tam gic .
BI tp 3 :
Vit ch-ng trnh tnh hm s :
f(x) =

K0
x
K1+ ----------------------------------------x
K2 + -----------------------x
K3 + ---------------------x
K4 + --------------------
x
Kn-1 + ------------Kn

Bi tp 4 :
Vit ch-ng trnh tnh tch hai ma trn C mxn = A mxn * B nxk .
Bi tp 5 :
Vit ch-ng trnh nhp vo mt dy s sau tch dy ny thnh hai dy ch cha cc s
d-ng v ch cha cc s m. Tnh tng s phn t ca mi dy sau sp xp hai dy c
gi tr gim dn.
Bi tp 6 :
Vit ch-ng trnh nhp vo mt ma trn A nxm. Tm gi tr cc i v cc tiu ca cc phn
t ca mng .
159

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


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 .
Tnh s g, s ch .

160

160

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn


ti liu tham kho
1. Cc ti liu ting Vit :
1.1. Ng Trung Vit - Ngn ng lp trnh C v C++ - Bi ging- Bi tp - Li gii mu
NXB giao thng vn ti 1995
1.2. Vin tin hc - Ngn ng lp trnh C
H ni 1990
1.3. L Vn Doanh - 101 thut ton v ch-ng trnh bng ngn ng C

2. Cc ti liu ting Anh :


2.1. B. Kernighan and D. Ritchie - The C programming language
Prentice Hall 1989
2.2. Programmer's guide Borland C++ Version 4.0
Borland International, Inc 1993
2.3. Bile - Nabaiyoti - TURBO C++
The Waite Group's UNIX 1991

161

161

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

162

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 :
Vit ch-ng trnh nhp ba s thc. Kim tra xem ba s c th l chiu di ca ba
cnh ca mt tam gic -c khng? Nu -c th tnh chu vi v din tch tam gic .
BI tp 3 :
Vit ch-ng trnh tnh hm s :

f(x) =

K0
x
K1+ ----------------------------------------162

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

163

x
K2 + -----------------------x
K3 + ---------------------x
K4 + ---------------------

x
Kn-1 + ------------Kn

Bi tp 4 :
Vit ch-ng trnh tnh tch hai ma trn C mxn = A mxn * B nxk .

Bi tp 5 :
Vit ch-ng trnh nhp vo mt dy s sau tch dy ny thnh hai dy ch cha
cc s d-ng v ch cha cc s m. Tnh tng s phn t ca mi dy sau sp xp
hai dy c gi tr gim dn.

Bi tp 6 :
Vit ch-ng trnh nhp vo mt ma trn A nxm. Tm gi tr cc i v cc tiu ca
cc phn t ca mng .

Bi tp 7 :
Trm tru,trm c
Tru ng n nm
Tru nm n ba
163

Nguyn Tun Anh, KTMT, in t, H K thut Cng nghip, Thi Nguyn

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 .
Tnh s g, s ch .

164

164

You might also like