Thứ Năm, 23 tháng 1, 2014

Giáo trình ngôn ngữ C

Giáo trình tin học cơ sở II - N
gụn ng
C

5
- Cỏc ch cỏi: A, ,Z, a, ,z
- Cỏc ch s: 0, ,9
- Cỏc du phộp toỏn s hc: +,-,*,/,
- Cỏc du ngoc: (, ), [, ],
- Cỏc ký t khỏc
Mi kớ t cú tng ng 1 s duy nht gi l mó, trong ú cú 128 kớ t u (cú mó t 0 ti
127) l kớ t c nh v 128 kớ t cũn li (cú mó t 128 ti 255) l cỏc kớ t m rng, tc
l nú cú th thay i tu theo ngụn ng mi quc gia s dng.

T khoỏ v tờn: Tờn l mt xõu (dóy) cỏc kớ t, trong ngụn ng lp trỡnh núi chung
u yờu cu tờn phi tuõn theo nhng rng buc nht nh.
Vi C tờn l xõu kớ t ch cú th gm
- cỏc ch cỏi
- ch s
- du gch ni
Tờn phi bt u bng ch cỏi hoc du gch di, di khụng quỏ 32 kớ t, khụng c
trựng vi t khoỏ ca ngụn ng. V vỡ C phõn bit ch hoa v ch thng nờn cỏc tờn ch
hoa nh XY v xy l khỏc nhau.
Mi ngụn ng u cú riờng mt tp cỏc t vi ý ngha c bit ú l cỏc t khoỏ,
chỳng c dựng vi mc ớch nh trc nh tờn kiu d liu, tờn toỏn t,
Sau õy l mt s t khoỏ ca C

asm enum signed
auto extern sizeof
break float static
case for struct
char goto switch
const if typedef
continue int union
default long unsigned
do register void
double return volatile
else short while

I.2.Cỏc bc lp trỡnh gii bi toỏn
gii mt bi dự mc no thỡ bc u tiờn chỳng ta cng phi phỏt biu bi toỏn,
tc l chỳng ta phi hiu bi toỏn yờu cu gỡ thỡ mi cú th tỡm c thut gii, v ci t
thut toỏn ú v sau khi ó cú chng trỡnh bn phi chy kim nghim tớnh ỳng n
ca nú.
Nh vy gii bi toỏn bng chng trỡnh chỳng ta theo cỏc bc sau:
1. Xỏc nh i tng ca chng trỡnh
Giáo trình tin học cơ sở II - N
gụn ng
C

6
2. Xỏc nh phng phỏp v thut gii
3. Vit chng trỡnh (lp trỡnh)
4. Chy chng trỡnh v kim tra kt qu.
cú mt chng trỡnh chỳng ta cn phi vit cỏc lnh (lp trỡnh) trong mt ngụn
ng lp trỡnh no ú, nh C chng hn, nhng mỏy tớnh khụng chy trc tip c chng
trỡnh vit bng cỏc ngụn ng lp trỡnh bc cao (gi l chng trỡnh ngun), nú ch cú th
thc hin c cỏc chng trỡnh dng mó mỏy (chng trỡnh ớch). Vỡ vy sau khi ó cú
chng trỡnh ngun, chỳng ta cn thc hin chuyn chng trỡnh ngun thnh chng
trỡnh ớch, cụng vic ny chỳng ta cn n trỡnh biờn dch (compiler) v liờn kt (linker).
Nh vy ta thy chu trỡnh phỏt trin mt chng trỡnh nh sau:
1. Son tho chng trỡnh ngun
Chỳng ta cú th s dng mt trỡnh son tho vn bn chun (ASCII) no ú son
tho chng trỡnh, sau ú ghi vo file chng trỡnh ngun (ngm nh vi phn m rng
l .C).
Do C cng nh hu ht cỏc ngụn ng lp trỡnh ph bin u s dng bng ch cỏi
ASCII nờn bn cú th s dng bt k mt h son tho vn bn chun vit chng
trỡnh, tuy nhiờn hu ht cỏc trỡnh biờn dch ca C trờn mụi trng MS-DOS hoc
WINDOWS u cú tớch hp trỡnh son tho v bn nờn s dng trỡnh son tho tớch hp
ny s thun li hn.
2. Biờn dch chng trỡnh ngun
Hin nay cú rt nhiu chng trỡnh dch cho C nh: Turbo C, BC, Microsoft C, mc
ớch ca bc ny l chuyn chng trỡnh ngun thnh chng trỡnh mó i tng
(object). Sau bc ny (nu thnh cụng) chỳng ta thu c file chng trỡnh i tng
(cú phn m rng l .OBJ)
3. Liờn kt chng trỡnh
Sau bc biờn dch hon thnh ta cú chng trỡnh i tng, õy cha phi l chng
trỡnh cú th chy c trờn mỏy tớnh, bc ny chỳng ta phi s dng mt trỡnh liờn kt
liờn kt cỏc hm th vin vi chng trỡnh i tng to ra chng trỡnh ớch . Bn cú
th s dng trỡnh liờn kt c lp no ú, nhng vi cỏc trỡnh biờn dch ca C trờn mụi
trng DOS hay WINDOWS u cú sn trỡnh liờn kt.
4. Chy v kim tra kt qu chng trỡnh
Khi ó cú chng trỡnh ớch, chỳng ta cn phi kim tra tớnh ỳng n ca nú. bn
chy chng trỡnh vi cỏc b d liu mu v kim tra kt qu cú nh d kin hay khụng,
nu cú sai sút thỡ phi xỏc nh nguyờn nhõn gõy li v quay li bc 1 hiu chnh. v
chỳng ta lp li quỏ trỡnh ny cho ti khi c chng trỡnh gii ỳng bi toỏn mong i.

Giáo trình tin học cơ sở II - N
gụn ng
C

7

Hỡnh 1 Cỏc bc phỏt trin
chng trỡnh

Hin nay cú rt nhiu chng trỡnh dch cho C v hu ht (trờn nn DOS hoc Windows)
trong ú c tớch hp c trỡnh son tho, biờn dch, liờn kt - gi l mụi trng tớch hp.
Trong giỏo trỡnh ny chỳng ta s dng BC (Borland C) hoc turbo C lm mụi trng lp
trỡnh.
Giáo trình tin học cơ sở II - N
gụn ng
C

8
II. Bin, hng v cỏc kiu d liu trong C

II.1.Bin


Khỏi nim
Bin l i lng cú giỏ tr thuc mt kiu d liu no ú m c chp nhn bi
ngụn ng (xem phn cỏc kiu d liu), giỏ tr ca bin cú th thay i trong thi gian tn
ti ca bin (hay ta núi trong vũng i ca bin).
Cỏc thnh phn ca chng trỡnh s c lu trong b nh trong v bin cng khụng
ngoi l. Tc l bin cng c cp phỏt mt vựng nh lu gi giỏ tr thuc mt kiu
d liu xỏc nh. Vỡ th theo mt khớa cnh no ú cú th núi bin l mt cỏi tờn i din
cho ụ nh trong mỏy tớnh, chng trỡnh cú th truy xut ụ nh (ly hoc ghi giỏ tr) thụng
qua tờn bin.
Mt bin núi chung phi cú cỏc c trng sau:
- Tờn bin
- Kiu d liu: kiu ca bin
- Giỏ tr hin ti nú ang lu gi (giỏ tr ca bin)
( tuy nhiờn sau ny chỳng ta thy trong C cú bin kiu void, ban u coi õy l bin
khụng kiu nhng dn quan nim ú cng l 1 tờn kiu v l kiu khụng xỏc nh)

Tờn bin
Trong C cng nh cỏc ngụn ng lp trỡnh khỏc cỏc bin u phi cú tờn, cỏc tờn bin
hay núi chung l tờn (gm tờn bin, tờn hng, tờn hm, hoc t khoỏ) l mt xõu kớ t v
phi tuõn theo cỏc quy nh ca ngụn ng ú l:

Tờn ch cú th cha kớ t l ch cỏi (a , ,z; A, ,Z); ch s( 0, ,9) v kớ
t gch di (_), s kớ t khụng quỏ 32.

Kớ t u tiờn ca tờn phi l ch cỏi hoc kớ t gch di

Trong tờn phõn bit ch hoa v ch thng. Tc l hai xõu cựng cỏc kớ t nhng
khỏc nhau bi loi ch hoa hoc ch thng l hai tờn khỏc nhau, vớ d nh vi 2 xõu kớ
t AB v Ab l hai tờn hon ton phõn bit nhau.

Cỏc t khoỏ ca ngụn ng khụng c dựng lm tờn bin, tờn hng, hay tờn hm.
Hay núi khỏc i, trong chng trỡnh cú th bn phi dựng n tờn, tờn ny do bn t theo
ý tng ca bn nhng khụng c trựng vi cỏc t khoỏ.

Vớ d cỏc tờn hp l v khụng hp l

Tờn bin hp l / khụng hp l
Percent hp l
Giáo trình tin học cơ sở II - N
gụn ng
C

9
y2x5__fg7h hp l
ho_ten hp l
_1990_tax hp l
A hp l
ngay-sinh khụng hp l vỡ cú kớ t -(du tr)
double khụng hp l vỡ trựng vi t khoỏ
9winter
khụng hp l vỡ kớ t u tiờn
l s

ắ Cõu lnh nh ngha bin
Trong ngụn ng lp trỡnh cú cu trỳc núi chung v trong C núi riờng, mi bin u
phi c nh ngha trc khi s dng. Cõu lnh nh ngha bin bỏo cho chng trỡnh
dch bit cỏc thụng tin tờn, kiu d liu v cú th c giỏ tr khi u ca bin.
Cỳ phỏp khai bỏo bin :
<kiu_d_liu> <bin_1> [ = <giỏ_tr_1>] [, <bin_2>[ = <giỏ_tr_2>, ];
trong ú:
<kiu_d_liu> l tờn mt kiu d liu ó tn ti, ú cú th l tờn kiu d liu
chun hoc kiu d liu nh ngha bi ngi lp trỡnh.
<bin_1>, <bin_2> l cỏc tờn bin cn khai bỏo, cỏc tờn ny phi tuõn theo quy
tc v tờn ca ngụn ng.
<giỏ_tri_1>, <giỏ_tr_2> l cỏc giỏ tr khi u cho cỏc bin tng ng <bin_1>,
<bin_2>. Cỏc thnh phn ny l tu chn, nu cú thỡ giỏ tr ny phi phự hp vi kiu
ca bin.
Trờn mt dũng lnh nh ngha cú th khai bỏo nhiu bin cựng kiu, vi tờn l
<bin_1>, <bin_2>, cỏc bin cỏch nhau bi du phy (,) dũng khai bỏo kt thỳc bng
du chm phy (;).
Vớ d:
int a = 4, b = 6;
float x =4.5,y,z;
unsigned u ;
char c =A;
Khi gp cỏc lnh nh ngha bin, chng trỡnh dch s cp phỏt vựng nh cú kớch
thc phự hp vi kiu d liu ca bin, nu cú thnh phn khi u thỡ s gỏn giỏ tr
khi u vo vựng nh ú.

Giáo trình tin học cơ sở II - N
gụn ng
C

10
II.2. Hng

Khỏi nim
Hng l i lng cú giỏ tr thuc mt kiu d liu nht nh, nhng giỏ tr ca hng
khụng th thay i trong thi gian tn ti ca nú.
Cú hai loi hng mt l cỏc hng khụng cú tờn (chỳng ta s gi l hng thng) ú l
cỏc giỏ tr c th tc thi nh : 8, hay 9.5 hoc d.
Loi th hai l cỏc hng cú tờn ( gi l hng ký hiu). Cỏc hng ký hiu cng phi
nh ngha trc khi s dng, tờn ca hng c t theo quy tc ca tờn. Sau õy nu
khụng cú iu gỡ c bit thỡ chỳng ta gi chung l hng

nh ngha hng
Cỏc hng c nh ngha bng t khoỏ const vi cỳ phỏp nh sau:
const <kiu_d_liu> <tờn_hng> = <giỏ_tr>;
hoc const <tờn_hng> = <giỏ_tr>;
Trong dng th hai, chng trỡnh dch t ng n nh kiu ca hng l kiu ngm
nh, vi BC hay TC l int v nh vy chng trỡnh dch s t ng chuyn kiu ca
<giỏ_tr> v kiu int.
Vớ d:
const int a = 5; // nh ngha hng a kiu nguyờn, cú giỏ tr l 5
const float x = 4; // hng x kiu thc, cú giỏ tr l 4.0
const d = 7; // hng d kiu int, giỏ tr l 7
const c = 1; // hng c kiu int giỏ tr = 49
const char * s = Ngon ngu C;// s l hng con tr, tr ti xõu Ngo ngu C
Cỏc hng s trong C c ngm hiu l h 10, nhng bn cú th vit cỏc hng trong
h 16 hoc 8 bng cỳ phỏp, giỏ tr s h 16 c bt u bng 0x, vớ d nh 0x24, 0xA1
cỏc s h 8 bt u bi s 0, vớ d 025, 057.
Cỏc hng kớ t c vit trong cp du vớ d a, 2 cỏc giỏ tr ny c C hiu l
s nguyờn cú giỏ tr bng mó ca kớ t; a cú giỏ tr l 97, B cú giỏ tr bng 66.
Cỏc xõu kớ t l dóy cỏc kớ t c vit trong cp , vớ d Ngon ngu C, a (xõu kớ
t s c gii thiu trong phn sau)
Chỳ ý: Cỏc bin, hng cú th c nh ngha ngoi mi hm, trong hm hoc trong
mt khi lnh. Vi C chun thỡ khi nh ngha bin, hng trong mt khi thỡ dũng nh
ngha phi cỏc dũng u tiờn ca khi, tc l trc tt c cỏc lnh khỏc ca khi,
nhng trong C++ bn cú th t dũng nh ngha bt k v trớ no.

Giáo trình tin học cơ sở II - N
gụn ng
C

11
II.3. Cỏc kiu d liu chun n gin trong C
Mt trong mc ớch ca cỏc chng trỡnh l x lý, bin i thụng tin, cỏc thụng tin
cn x lý phi c biu din theo mt cu trỳc xỏc nh no ú ta gi l cỏc kiu d liu.
Cỏc kiu d liu ny c quy nh bi ngụn ng lp trỡnh, hay núi khỏc i mi ngụn ng
cú tp cỏc kiu d liu khỏc nhau. Khụng hon ton ging nh khỏi nim kiu d liu
trong toỏn hc, trong cỏc ngụn ng lp trỡnh núi chung mi kiu d liu ch biu din
c mt min giỏ xỏc nh no ú. Chng hn nh s nguyờn chỳng ta hiu l cỏc s
nguyờn t - ti +, nhng trong ngụn ng lp trỡnh min cỏc giỏ tr ny b gii hn, s
gii hn ny ph thuc vo kớch thc ca vựng nh biu din s ú. Vỡ vy khi núi ti
mt kiu d liu chỳng ta phi cp ti 3 thụng tin c trng ca nú ú l:
- tờn kiu d liu
- kớch thc vựng nh biu din nú,min giỏ tr
- cỏc phộp toỏn cú th s dng.
Cỏc kiu d liu n gin trong C ch l cỏc kiu s, thuc hai nhúm chớnh ú l s
nguyờn v s thc (s du phy ng).

Nhúm cỏc kiu nguyờn gm cú: char, unsigned char, int, unsigned int, short, unsigned
short, long, unsigned long c mụ t trong bng sau:

Kiu d liu
tờn kiu (t
khoỏ tờn kiu)
kớch
thc
min giỏ tr
kớ t cú du char 1 byte t -128 ti 127
kớ t khụng du unsigned char 1 byte t 0 ti 255
s nguyờn cú du int 2 byte t -32768 ti 32767
s nguyờn khụng du unsigned int 2 byte t 0 ti 65535
s nguyờn ngn cú du short 2 byte t -32768 ti 32767
s nguyờn ngn cú du unsigned short 2 byte t 0 ti 65535
s nguyờn di cú du long 4 byte t -2,147,483,648 ti 2,147,438,647
s nguyờn di khụng du unsigned long 4 byte t 0 ti 4,294,967,295

Khuụn dng s nguyờn: mc dự nh trờn chỳng ta cú kiu s nguyờn v kớ t (char)
nhng bn cht trong C chỳng u l cỏc s nguyờn m thụi. H thng biu din cỏc s
nguyờn di dng dóy cỏc bit (s nh phõn). Nh chỳng ta ó bit, mt bit ch cú th biu
din c 2 giỏ tr l 0 v 1.
Ta thy vi mt nhúm cú 2 bit (2 s nh phõn) thỡ cú th lu c giỏ tr nh nht khi
c 2 bit u bng 0 v ln nht khi c 2 bit bng 1 cú ngha l nú cú th biu din c
cỏc s 0,1,2,3 tc 2
2
giỏ tr khỏc nhau. Vi s nguyờn 1 byte (unsigned char) thỡ giỏ tr nú
cú th lu tr l 0,1, ,255.
Tng quỏt nu kiu d liu cú kớch thc n bit thỡ cú th biu din 2
n
giỏ tr khỏc
nhau l: 0,1, (2
n
1).
Giáo trình tin học cơ sở II - N
gụn ng
C

12

Nhng ú l trong trng hp tt c cỏc bit dựng biu din giỏ tr s(cỏc con s),
tc l ta cú s nguyờn khụng du (s dng unsigned ). Nhng s nguyờn chỳng ta cn
cú th l s õm (s cú du signed), trong trng hp ny bit cao nht c dựng biu
din du, nh vy ch cũn n-1 bit biu din giỏ tr. Nu s õm (cú du) thỡ bit du cú
giỏ tr =1, ngc li, nu s cú giỏ tr dng thỡ bit du cú giỏ tr =0.

Vớ d vi kiu char (signed char) mt byte thỡ cú 7 bit biu din cỏc con s, vy nú
cú th biu din cỏc s dng 0,1, ,127 v (theo cỏch biu din s õm xem phn h m
v biu din s õm) nú biu din c cỏc s õm 1, 128. Min giỏ tr ca cỏc kiu s
nguyờn khỏc c din gii tng t.
Cỏc bn cú th t cõu hi ti sao ó cú kiu int li vn cú kiu short hay cú s khỏc
nhau gia int v short hay khụng?. Thc ra s khỏc nhau gia chỳng ph thuc vo h
thng m bn dựng. Trờn mụi trng 32 bit thỡ int cú kớch thc l 4 byte, short cú kớch
thc 2 byte, cũn trờn mụi trng 16 bit thỡ chỳng ging nhau.
Thc ra s quy nh kớch thc ca cỏc kiu nguyờn ch l:
kiu char kớch thc l 1 byte
kiu short kớch thc l 2 byte
kiu long kớch thc l 4 byte
kớch thc kiu short <= kớch thc kiu int <= kớch thc kiu long

Nhúm cỏc kiu s thc gm: float, double, long double
Khuụn dng biu din ca s thc khụng ging nh s nguyờn. Mt s thc núi chung
c biu din theo ký phỏp khoa hc gm phn nh tr v phn m.

Trong giỏo trỡnh ny chỳng tụi khụng cú ý nh trỡnh by chi tit nh dng ca s
thc. Bn c cn quan tõm ti vn ny hóy tham kho [3 - Chng 14]. Chớnh vỡ
Giáo trình tin học cơ sở II - N
gụn ng
C

13
khuụn dng khỏc m min giỏ tr ca s thc so vi s nguyờn cú cựng kớch thc cng
khỏc.

Kiu d liu tờn kiu
kớch
thc
(tr tuyt i)min giỏ tr
s thc vi chớnh xỏc n float 4 byte 3.4e-38 -> 3.4e38
s thc vi chớnh xỏc kộp double 8 byte 1.7e-308 -> 1.7e308
s thc di vi chớnh xỏc kộp long double 10 byte 3.4e-4832 -> 1.1e 4932
Trong bng trờn min giỏi tr chỳng ta núi ti giỏ tr dng ln nht m s thc cú th
biu din (giỏ tr õm nh nht ly i) v giỏ tr dng nh nht cũn phõn bit c vi 0.
Vớ d vi kiu float, giỏ tr dng ln nht l 3.4e38 =3.4*10
38
v s dng nh nht
cú th biu din l 3.4e-38 = 3.4*10
-38
.
Tuy nhiờn, do s ch s trong phn nh tr l gii hn nờn s ch s ỏng tin cy
(hay ta núi l s ch s cú ngha) cng gii hn vi kiu float l 7-8 ch s, double l 15
ch s, v long double l 18-19 ch s.
ắ Kiu con tr v a ch
Ngoi hai kiu d liu s m chỳng ta va cp trong C cũn kiu d liu rt hay s
dng ú l kiu con tr. Chỳng ta bit l cỏc thnh phn: bin, hng, hm, c lu
trong b nh, tc l chỳng c nh v ti mt vựng nh cú c xỏc nh. Mt thnh
phn (bin, hng) cú th lu giỏ tr l a ch ca mt thnh phn khỏc c gi l con tr.
Giỏ s p l mt con tr lu a ch ca a thỡ ta núi p tr ti a v kiu ca con tr p l
kiu ca thnh phn m p tr ti.
Khai bỏo con tr
<kiu> * <tờn_con_tr>; // khai bỏo bin con tr
Vớ d:
int * p,*q; // p, q l 2 con tr kiu int
Kiu void : Ngoi cỏc kiu d liu trong C cũn cú nhng thnh phn (con tr) khụng xỏc
nh kiu, hoc hm khụng cn tr v giỏ tr trong trng hp ny chỳng ta cú con tr,
hm kiu void. Hay núi cỏc khỏc void l mt kiu nhng l kiu khụng xỏc nh.

II.4. Biu thc v cỏc phộp toỏn
ắ Biu thc
Giáo trình tin học cơ sở II - N
gụn ng
C

14
Biu thc l s kt hp gia cỏc toỏn hng v toỏn t theo mt cỏch phự hp din
t mt cụng thc toỏn hc no ú. Cỏc toỏn hng cú th l hng, bin, hay li gi hm
hay mt biu thc con. Cỏc toỏn t thuc vo tp cỏc toỏn t m ngụn ng h tr.
Biu thc c phỏt biu nh sau:
Cỏc hng, bin, li gi hm l biu thc
Nu A, B l biu thc v l mt phộp toỏn hai ngụi phự hp gia A v B
thỡ AB l biu thc.
Ch nhng thnh phn xõy dng t hai kh nng trờn l biu thc.
Mt biu thc phi cú th c lng c v tr v giỏ tr thuc mt kiu d liu c
th. Giỏ tr ú c gi l giỏ tr ca biu thc v kiu ca giỏ tr tr v c gi l kiu
ca biu thc, vớ d mt biu thc sau khi c lng tr li mt s nguyờn thỡ chỳng ta
núi biu thc ú cú kiu nguyờn (núi ngn gn l biu thc nguyờn).
Vớ d : p = (a+b+c)/2;
s = sqrt((p-a)*(p-b)*p-c));
trong ú a, b, c l 3 bin s thc.
Biu thc logic trong C: theo nh trờn chỳng ta núi thỡ biu thc logic l biu thc m
tr v kt qu kiu logic. Nhng trong ngụn ng lp trỡnh C khụng cú kiu d liu ny
(nh boolean trong Pascal). Trong C s dng cỏc s din t cỏc giỏ tr logic (ỳng
hay sai). Mt giỏ tr khỏc 0 nu c dựng trong ng cnh l giỏ tr logic s c coi l
ỳng v nu giỏ tr bng 0 c xem l sai. Ngc li mt giỏ tr sai(chng hn nh
giỏ tr ca biu thc so sỏnh sai (5==3)) s tr li s nguyờn cú giỏ tr 0, v giỏ tr ca biu
thc (vớ d nh 5 < 8) ỳng s tr li mt s nguyờn cú giỏ tr 1. Sau ny chỳng ta cũn
thy khụng phi ch cú cỏc s c dựng din t giỏ tr ỳng hay sai m mt con
tr cú giỏ tr khỏc NULL (rng) cng c coi l ỳng, v giỏ tr NULL c xem l
sai.

ắ Cỏc toỏn t (phộp toỏn) ca ngụn ng C
a. Phộp gỏn
Cỳ phỏp
<bin> = <giỏ tr>
Trong ú v trỏi l tờn mt bin v v phi l mt biu thc cú kiu phự hp vi kiu
ca bin. Vi phộp gỏn h thng s c lng giỏ tr ca v phi sau ú gỏn giỏ tr vo
bin bờn trỏi.
Vớ d:
int a, b;
a = 5;
b = a +15;

Xem chi tiết: Giáo trình ngôn ngữ C


Không có nhận xét nào:

Đăng nhận xét