Professional Documents
Culture Documents
Giáo Trình Lập Trình Căn Bản
Giáo Trình Lập Trình Căn Bản
Giáo Trình Lập Trình Căn Bản
Bin tp bi:
duongvanhieu
MC LC
1. Phn I.Tng quan v mn hc
1.1. Tng quan
1.2. Gii thiu v Cu Trc D Liu V Gii Thut
1.2.1. Mc tiu ca bi hc
1.2.2. Cu trc d liu v gii thut
1.2.3. Bi tp
2. Phn II.Ngn ng Lp trnh C
2.1. Chng I. Gii thiu v ngn ng C & Mi trng TurBo C 3.0
2.1.1. Mc tiu ca bi hc
2.1.2. Tng quan v ngn ng lp trnh C
2.1.3. Mi trng lp trnh Turbo C
2.2. Chng II. Cc thnh phn c bn trong C
2.2.1. Mc tiu bi hc
2.2.2. Kiu d liu s cp chun trong C
2.2.3. Tn v hng trong C
2.2.4. Bin v Biu thc Trong C
2.2.5. Bi tp
2.3. Chng III. Cc cu lnh n trong C
2.3.1. Mc tiu ca bi hc
2.3.2. Cu lnh v cc lnh n trong C
2.3.3. Bi tp v cc cu lnh n trong C
2.4. Chng IV. Cc lnh c cu trc
2.4.1. Mc tiu ca bi hc
2.4.2. Khi lnh trong lp trnh C
2.4.3. Cu trc r nhnh trong lp trnh C
2.4.4. Cu trc la chn
2.4.5. Cu trc vng lp v cc cu lnh c bit
2.4.6. Bi tp
2.5. Chng V. Chng trnh con
2.5.1. Mc tiu bi hc chng trnh con trong lp trnh C
2.5.2. Hm v cch xy dng mt hm
2.5.3. Bi tp
2.6. Chng VI. Kiu mng
1/199
2.6.1. Mc tiu bi hc
2.6.2. Mng 1 chiu v Mng nhiu chiu
2.6.3. Bi tp
2.7. Chng VII. Kiu con tr
2.7.1. Mc tiu bi hc
2.7.2. Kiu d liu con tr
2.7.3. Bi tp
2.8. Chng VIII. Chui k t
2.8.1. Mc tiu ca bi hc
2.8.2. Chui k t v cc thao tc trn chui k t
2.8.3. Bi tp
2.9. Chng IX. Kiu cu trc
2.9.1. Mc tiu ca bi hc
2.9.2. Kiu cu trc v cc thao tc trn kiu cu trc
2.9.3. Bi tp v kiu cu trc
2.10. Chng X. Kiu tp tin
2.10.1. Mc tiu bi hc
2.10.2. Kiu tp tin v cc thao tc trn kiu tp tin
2.10.3. Bi tp
Tham gia ng gp
2/199
I TNG MN HC
Mn hc lp trnh cn bn c dng ging dy cho cc sinh vin sau:
- Sinh vin nm th 2 chuyn ngnh Tin hc, Ton Tin, L Tin.
3/199
NI DUNG CT LI
Trong khun kh 45 tit, gio trnh c cu trc thnh 2 phn: Phn 1 gii thiu v lp
trnh cu trc, cc khi nim v lp trnh, gii thut Phn 2 trnh by c h thng v
ngn ng lp trnh C, cc cu lnh, cc kiu d liu
PHN 1: Gii thiu cu trc d liu v gii thut
PHN 2: Gii thiu v mt ngn ng lp trnh - Ngn ng lp trnh C
Chng 1: Gii thiu v ngn ng C & mi trng lp trnh Turbo C
Chng 2: Cc thnh phn ca ngn ng C
Chng 3: Cc kiu d liu s cp chun v cc lnh n
Chng 4: Cc lnh c cu trc
Chng 5: Chng trnh con
Chng 6: Kiu mng
Chng 7: Kiu con tr
Chng 8: Kiu chui k t
Chng 9: Kiu cu trc
Chng 10: Kiu tp tin
T KHA
Bi ton, chng trnh, gii thut, ngn ng gi, lu , biu thc, gn, r nhnh, lp,
hm, mng, con tr, cu trc, tp tin.
5/199
6/199
GII THUT
Khi nim gii thut
Gii thut l mt h thng cht ch v r rng cc quy tc nhm xc nh mt dy cc
thao tc trn nhng d liu vo sao cho sau mt s hu hn bc thc hin cc thao tc
ta thu c kt qu ca bi ton.
V d 1: Gi s c hai bnh A v B ng hai loi cht lng khc nhau, chng hn bnh A
ng ru, bnh B ng nc mm. Gii thut hon i (swap) cht lng ng trong
hai bnh l:
8/199
9/199
Mt s gii thut c bn
V d 1: Cn vit chng trnh cho my tnh sao cho khi thc hin chng trnh , my
tnh yu cu ngi s dng chng trnh nhp vo cc s hng ca tng (n); nhp vo
dy cc s hng ai ca tng. Sau , my tnh s thc hin vic tnh tng cc s ai ny
v in kt qu ca tng tnh c.
Yu cu: Tnh tng n s S=a1+ a2+a3+......+an .
tnh tng trn, chng ta s dng phng php cng tch ly ngha l khi u cho
S=0. Sau mi ln nhn c mt s hng ai t bn phm, ta cng tch ly ai vo S (ly
gi tr c lu tr trong S, cng thm ai v lu tr li vo S). Tip tc qu trnh ny
n khi ta tch ly c an vo S th ta c S l tng cc ai. Chi tit gii thut c m t
bng ngn ng t nhin nh sau:
- Bc 1: Nhp s cc s hng n.
- Bc 2: Cho S=0 (lu tr s 0 trong S)
- Bc 3: Cho i=1 (lu tr s 1 trong i)
- Bc 4: Kim tra nu i<=n th thc hin bc 5, ngc li thc hin bc 8.
- Bc 5: Nhp ai
10/199
11/199
12/199
- Bc 8: Tng i ln mt n v v quay li bc 5
- Bc 9: In max - kt thc
Phn m t gii thut bng lu , sinh vin t lm xem nh bi tp.
V d 4: Vit chng trnh cho php nhp vo 1 s n, sau ln lt nhp vo n gi tr
a1, a2,,an. Sp theo th t tng dn mt dy n s a1, a2,...an ni trn. C rt nhiu gii
thut gii quyt bi ton ny. Phn trnh by di y l mt phng php.
Gi s ta nhp vo my dy n s a1, a2,..., an. Vic sp xp dy s ny tri qua (n-1)
ln:
- Ln 1: So snh phn t u tin vi tt c cc phn t ng sau phn t u tin. Nu
c phn t no nh hn phn t u tin th i ch phn t u tin vi phn t nh
hn . Sau ln 1, ta c phn t u tin l phn t nh nht.
- Ln 2: So snh phn t th 2 vi tt c cc phn t ng sau phn t th 2. Nu c
phn t no nh hn phn t th 2 th i ch phn t th 2 vi phn t nh hn . Sau
ln 2, ta c phn t u tin v phn t th 2 l ng v tr ca n khi sp xp.
-
- Ln (n-1): So snh phn t th (n-1) vi phn t ng sau phn t (n-1) l phn t th
n. Nu phn t th n nh hn phn t th (n-1) th i ch 2 phn t ny. Sau ln th
(n-1), ta c danh sch gm n phn t c sp th t.
M t gii thut bng ngn ng t nhin:
- Bc 1: Gn i=1
- Bc 2: Gn j=i+1
- Bc 3: Nu i <=n-1 th thc hin bc 4, ngc li thc hin bc 8
- Bc 4: Nu j <=n th thc hin bc 5, ngc li th thc hin bc 7.
- Bc 5: Nu ai > aj th hon i ai v aj cho nhau (nu khng th thi).
- Bc 6: Tng j ln mt n v v quay li bc 4
- Bc 7: Tng i ln mt n v v quay li bc 3
- Bc 6: In dy s a1, a2,..., an - Kt thc.
13/199
KIU D LIU
Cc s liu lu tr trong my tnh gi l d liu (data). Mi n v d liu thuc mt
kiu d liu no .
Kiu d liu l mt tp hp cc gi tr c cng mt tnh cht v tp hp cc php ton
thao tc trn cc gi tr . Ngi ta chia kiu d liu ra lm 2 loi: kiu d liu s cp
v kiu d liu c cu trc.
Kiu d liu s cp
Kiu d liu s cp l kiu d liu m gi tr ca n l n nht.
V d: Trong ngn ng lp trnh C, kiu int gi l kiu s cp v kiu ny bao gm cc
s nguyn t -32768 n 32767 v cc php ton +, -, *, /, %
Kiu d liu c cu trc
Kiu d liu c cu trc l kiu d liu m cc gi tr ca n l s kt hp ca cc gi
tr khc.
V d : Kiu chui k t trong ngn ng lp trnh C l mt kiu d liu c cu trc.
Cc ngn ng lp trnh u c nhng kiu d liu do ngn ng xy dng sn, m ta
gi l cc kiu chun. Chng hn nh kiu int, char trong C; integer, array trong
Pascal. Ngoi ra, hu ht cc ngn ng u cung cp c ch cho php ngi lp trnh
nh ngha kiu ca ring mnh phc v cho vic vit chng trnh.
15/199
NGN NG LP TRNH
Khi nim ngn ng lp trnh
Ngn ng lp trnh l mt ngn ng dng vit chng trnh cho my tnh. Ta c th
chia ngn ng lp trnh thnh cc loi sau: ngn ng my, hp ng v ngn ng cp cao.
Ngn ng my (machine language): L cc ch th di dng nh phn, can thip trc
tip vo trong cc mch in t. Chng trnh c vit bng ngn ng my th c th
c thc hin ngay khng cn qua bc trung gian no. Tuy nhin chng trnh vit
bng ngn ng my d sai st, cng knh v kh c, kh hiu v ton nhng con s 0
v 1.
Hp ng (assembly language): Bao gm tn cc cu lnh v quy tc vit cc cu lnh
. Tn cc cu lnh bao gm hai phn: phn m lnh (vit ta ting Anh) ch php ton
cn thc hin v a ch cha ton hng ca php ton . V d:
INPUT a ; Nhp gi tr cho a t bn phm
LOAD a ; c gi tr a vo thanh ghi tng A
PRINT a; Hin th gi tr ca a ra mn hnh.
INPUT b
ADD b; Cng gi tr ca thanh ghi tng A vi gi tr b
Trong cc lnh trn th INPUT, LOAD, PRINT, ADD l cc m lnh cn a, b l a ch.
my thc hin c mt chng trnh vit bng hp ng th chng trnh phi
c dch sang ngn ng my. Cng c thc hin vic dch c gi l Assembler.
Ngn ng cp cao (High level language): Ra i v pht trin nhm phn nh cch thc
ngi lp trnh ngh v lm. Rt gn vi ngn ng con ngi (Anh ng) nhng chnh
xc nh ngn ng ton hc. Cng vi s pht trin ca cc th h my tnh, ngn ng
lp trnh cp cao cng c pht trin rt a dng v phong ph, vic lp trnh cho
my tnh v th m cng c nhiu khuynh hng khc nhau: lp trnh cu trc, lp trnh
hng i tng, lp trnh logic, lp trnh hm... Mt chng trnh vit bng ngn ng
cp cao c gi l chng trnh ngun (source programs). my tnh "hiu" v thc
hin c cc lnh trong chng trnh ngun th phi c mt chng trnh dch dch
chung trnh ngun (vit bng ngn ng cp cao) thnh dng chng trnh c kh nng
thc thi.
16/199
17/199
Bi tp
Mc ch yu cu
Lm quen v nm vng cc cch m t gii thut; t ng trc mt bi ton c th,
sinh vin c th m t tht chi tit cc bc gii quyt vn .
Ni dung
Bng ngn ng t nhin v lu , anh (ch) hy m t gii thut cho cc bi ton sau:
1. Gii phng trnh bc 2 dng ax2 + bx + c = 0 vi a, b, c l cc s s nhp t bn phm.
2.Tnh tng bnh phng ca n s nguyn c dng sau: S= a21 + a22 + + a2n, vi n v ai
(i=1..n) l cc s s nhp t bn phm.
3. Tnh tng c dng sau: S= 1 a21 + a22 a23 + + ( 1)na2n, vi n v ai (i=1..n) l cc
s s nhp t bn phm.
4. Trnh by kt qu qua cc bc lp (c m t trn) sp xp dy s sau theo
th t tng dn.
a) 12 13 11 10 10 9 8 7 6 5
b) 11 12 13 14 3 4 5 6 7 11 8
18/199
19/199
20/199
21/199
Dng trn cng gi l thanh menu (menu bar). Mi mc trn thanh menu li c th c
nhiu mc con nm trong mt menu ko xung.
Dng di cng ghi chc nng ca mt s phm c bit. Chng hn khi g phm F1 th
ta c c mt h thng tr gip m ta c th tham kho nhiu thng tin b ch.
Mun vo thanh menu ngang ta g phm F10. Sau dng cc phm mi tn qua tri
hoc phi di chuyn vng sng ti mc cn chn ri g phm Enter. Trong menu ko
xung ta li dng cc phm mi tn ln xung di chuyn vng sng ti mc cn chn
ri g Enter.
Ta cng c th chn mt mc trn thanh menu bng cch gi phm Alt v g vo mt k
t i din ca mc (k t c mu sc khc vi cc k t khc). Chng hn chn
mc File ta g Alt-F (F l k t i din ca File)
22/199
ngha
Enter
Mi tn i ln
Phm tt ( t hp phm)
Ctrl-E
Ctrl-X
Mi tn sang tri
Ctrl-S
Home
a con tr n u dng
PgUp
Ctrl-R
PgDn
Ctrl-C
Ctrl-A
Ctrl-F
Cc phm xo k t/ dng:
Phm
ngha
Phm tt
Delete
Xo k t ti v tr con tr
Ctrl-G
Ctrl-Y
23/199
Ctrl-Q-Y
Xa k t bn phi con tr
Ctrl-T
ngha
Ctrl-K-B nh du u khi
Ctrl-K-K nh du cui khi
Ctrl-K-C Chp khi vo sau v tr con tr
Ctrl-K-V Chuyn khi ti sau v tr con tr
Ctrl-K-Y Xo khi
Ctrl-K-W Ghi khi vo a nh mt tp tin
Ctrl-K-R c khi (tp tin) t a vo sau v tr con tr
Ctrl-K-H Tt/m khi
Ctrl-K-T nh du t cha chon tr
Ctrl-K-P
In mt khi
Phm tt
F10
Ctrl-K-D, Ctrl-KQ
24/199
F2
F3
To tp tin mi
Tab
Ctrl-K-S
Ctrl-I
Ctrl-U
ng tp tin hin ti
Alt-F3
Ctrl-Q-F
Ctrl-Q-A
Tm kim tip tc
Ctrl-L
26/199
27/199
B ch vit trong C.
Cc t kha.
Danh biu.
Cc kiu d liu
Bin v cc biu thc trong C.
Cu trc ca mt chng trnh vit bng ngn ng lp trnh C
28/199
Min gi tr (Domain)
char
T -128 n 127
enum
T -32,768 n 32,767
29/199
short int
T -32,768 n 32,767
int
T -32,768 n 32,767
Kiu enum, short int, int : Lu cc s nguyn t -32768 n 32767. S dng bit bn tri
nht lm bit du.
=> Nu gn gi tr >32767 cho bin c 1 trong 3 kiu trn th gi tr ca bin ny c th
l s m.
Kiu unsigned int: Kiu unsigned int lu cc s nguyn dng t 0 n 65535.
Kiu s nguyn 4 byte (32 bits)
Kiu s nguyn 4 bytes hay cn gi l s nguyn di (long) gm c 2 kiu sau:
STT Kiu d liu
Min gi tr (Domain)
long
T -2,147,483,648 n 2,147,483,647
float
4 bytes
double
8 bytes
Ngoi ra ta cn c kiu d liu void, kiu ny mang ngha l kiu rng khng cha gi
tr g c.
31/199
Tn v hng trong C
Tn (danh biu)
Tn hay cn gi l danh biu (identifier) c dng t cho chng trnh, hng, kiu,
bin, chng trnh con... Tn c hai loi l tn chun v tn do ngi lp trnh t.
Tn chun l tn do C t sn nh tn kiu: int, char, float,; tn hm: sin, cos...
Tn do ngi lp trnh t t dng trong chng trnh ca mnh. S dng b ch ci,
ch s v du gch di (_) t tn, nhng phi tun th quy tc:
Hng (Constant)
L i lng khng i trong sut qu trnh thc thi ca chng trnh.
Hng c th l mt chui k t, mt k t, mt con s xc nh. Chng c th c biu
din hay nh dng (Format) vi nhiu dng thc khc nhau.
Hng s thc
S thc bao gm cc gi tr kiu float, double, long double c th hin theo 2 cch
sau:
- Cch 1: S dng cch vit thng thng m chng ta s dng trong cc mn Ton,
L, iu cn lu l s dng du thp phn l du chm (.);
V d: 123.34 -223.333 3.00 -56.0
32/199
- Cch 2: S dng cch vit theo s m hay s khoa hc. Mt s thc c tch lm 2
phn, cch nhau bng k t e hay E
Phn gi tr: l mt s nguyn hay s thc c vit theo cch 1.
Phn m: l mt s nguyn
Gi tr ca s thc l: Phn gi tr nhn vi 10 m phn m.
V d: 1234.56e-3 = 1.23456 (l s 1234.56 * 10-3)
-123.45E4 = -1234500 ( l -123.45 *104)
Hng s nguyn
S nguyn gm cc kiu int (2 bytes) , long (4 bytes) c th hin theo nhng cch
sau.
- Hng s nguyn 2 bytes (int) h thp phn: L kiu s m chng ta s dng thng
thng, h thp phn s dng cc k s t 0 n 9 biu din mt gi tr nguyn.
V d: 123 ( mt trm hai mi ba), -242 ( tr hai trm bn mi hai).
- Hng s nguyn 2 byte (int) h bt phn: L kiu s nguyn s dng 8 k s t 0 n
7 biu din mt s nguyn.
Cch biu din: 0<cc k s t 0 n 7>
V d : 0345 (s 345 trong h bt phn)
-020 (s -20 trong h bt phn)
Cch tnh gi tr thp phn ca s bt phn nh sau:
S bt phn : 0dndn-1dn-2d1d0 ( di c gi tr t 0 n 7)
=> Gi tr thp phn= ni = 0 di 8i
0345=229 , 020=16
- Hng s nguyn 2 byte (int) h thp lc phn: L kiu s nguyn s dng 10 k s t
0 n 9 v 6 k t A, B, C, D, E ,F biu din mt s nguyn.
K t gi tr
33/199
A 10
B 11
C 12
D 13
E 14
F 15
Cch biu din: 0x<cc k s t 0 n 9 v 6 k t t A n F>
V d:
0x345 (s 345 trong h 16)
0x20 (s 20 trong h 16)
0x2A9 (s 2A9 trong h 16)
Cch tnh gi tr thp phn ca s thp lc phn nh sau:
S thp lc phn : 0xdndn-1dn-2d1d0 ( di t 0 n 9 hoc A n F)
=> Gi tr thp phn= ni = 0 di 16i
0x345=827 , 0x20=32 , 0x2A9= 681
- Hng s nguyn 4 byte (long): S long (s nguyn di) c biu din nh s int trong
h thp phn v km theo k t l hoc L. Mt s nguyn nm ngoi min gi tr ca s
int ( 2 bytes) l s long ( 4 bytes).
V d: 45345L hay 45345l hay 45345
- Cc hng s cn li: Vit nh cch vit thng thng (khng c du phn cch gia 3
s)
V d:
12 (mi hai)
12.45 (mi hai chm 45)
34/199
35/199
int main()
{}
b)Khai bo bin trong: Cc bin c t bn trong hm, chng trnh chnh hay mt
khi lnh. Cc bin ny ch c tc dng hay nh hng n hm, chng trnh hay khi
lnh cha n. Khi khai bo bin, phi t cc bin ny u ca khi lnh, trc cc
lnh gn,
V d 1:
#include <stdio.h>
#include<conio.h>
int bienngoai; /*khai bao bien ngoai*/
int main ()
{ int j,i; /*khai bao bien ben trong chuong trinh chinh*/
clrscr();
i=1; j=2;
bienngoai=3;
printf("\n Gia7 tri cua i la %d",i);
/*%d l s nguyn, s bit sau */
printf("\n Gia tri cua j la %d",j);
printf("\n Gia tri cua bienngoai la %d",bienngoai);
getch();
return 0;
}
V d 2:
#include <stdio.h>
37/199
#include<conio.h>
int main ()
{ int i, j; /*Bien ben trong*/
clrscr();
i=4; j=5;
printf("\n Gia tri cua i la %d",i);
printf("\n Gia tri cua j la %d",j);
if(j>i)
{
int hieu=j-i; /*Bien ben trong */
printf("\n Hieu so cua j tru i la %d",hieu);
}
else
{
int hieu=i-j ; /*Bien ben trong*/
printf("\n Gia tri cua i tru j la %d",hieu);
}
getch();
return 0;
}
Biu thc
Biu thc l mt s kt hp gia cc ton t (operator) v cc ton hng (operand) theo
ng mt trt t nht nh.
38/199
Cng
Tr
Nhn
Chia
Chia ly phn d
--
Gim 1 n v
++
Tng 1 n v
39/199
Tuy nhin gia tin t v hu t c s khc bit khi s dng trong 1 biu thc. Khi 1
ton t tng hay gim ng trc ton hng ca n, C thc hin vic tng hay gim
trc khi ly gi tr dng trong biu thc. Nu ton t i sau ton hng, C ly gi tr ton
hng trc khi tng hay gim n. Tm li:
x = 10
y = ++x //y = 11
Tuy nhin:
x = 10
x = x++ //y = 10
Th t u tin ca cc ton t s hc:
++ -- sau l * / % ri mi n + Cc ton t quan h v cc ton t Logic
tng chnh ca ton t quan h v ton t Logic l ng hoc sai. Trong C mi gi
tr khc 0 c gi l ng, cn sai l 0. Cc biu thc s dng cc ton t quan h v
Logic tr v 0 nu sai v tr v 1 nu ng.
Ton t
ngha
Cc ton t quan h
>
Ln hn
>=
Ln hn hoc bng
<
Nh hn
<=
Nh hn hoc bng
==
Bng
!=
Khc
Cc ton t Logic
&&
AND
||
OR
NOT
40/199
0 1 0
1 0 0
1 1 1
AND
OR
XOR
41/199
NOT
>>
Dch phi
<<
Dch tri
42/199
43/199
Cao nht
() []
! ~ ++ -- (Kiu) * &
*/%
+<< >>
< <= > >=
&
^
|
&&
||
?:
= += -= *= /=
Thp nht ,
VI.2.9 Cch vit tt trong C
C nhiu php gn khc nhau, i khi ta c th s dng vit tt trong C na. Chng hn:
x = x + 10 c vit thnh x +=10
Ton t += bo cho chng trnh dch bit tng gi tr ca x ln 10.
Cch vit ny lm vic trn tt c cc ton t nh phn (php ton hai ngi) ca C. Tng
qut:
(Bin) = (Bin) (Ton t) (Biu thc)
c th c vit:
(Bin) (Ton t)= (Biu thc)
44/199
Bi tp
BI TP
Bi 1: Biu din cc hng s nguyn 2 byte sau y di dng s nh phn, bt phn,
thp lc phn
a)12 b) 255 c) 31000 d) 32767 e) -32768
Bi 2: Biu din cc hng k t sau y di dng s nh phn, bt phn.
a) A b) a c) Z d) z
45/199
Cu lnh l g?
Cch s dng cu lnh gn gi tr ca mt biu thc cho mt bin.
Cch s dng lnh scanf nhp gi tr cho bin.
Cch s dng lnh printf xut gi tr ca biu thc ln mn hnh v cch
nh dng d liu.
46/199
Nguyn tc khi dng lnh gn l kiu ca bin v kiu ca biu thc phi ging nhau,
gi l c s tng thch gia cc kiu d liu. Chng hn v d sau cho thy mt s
khng tng thch v kiu:
int main() {
int x,y;
x = 10; /*Gn hng s 10 cho bin x*/
y = Xin chao;
/*y c kiu int, cn Xin chao c kiu char* */
return 0;
}
Khi bin dch chng trnh ny, C s bo li "Cannot convert char * to int" tc
l C khng th t ng chuyn i kiu t char * (chui k t) sang int.
Tuy nhin trong a s trng hp s t ng bin i kiu s tng thch v kiu
s c thc hin. V d:
int main() {
int x,y;
float r;
char ch;
r = 9000;
x = 10; /* Gn hng s 10 cho bin x */
y = 'd'; /* y c kiu int, cn d c kiu char*/
r = 'e'; /* r c kiu float, e c kiu char*/
ch = 65.7; /* ch c kiu char, cn 65.7 c kiu float*/
return 0;
48/199
}
Trong nhiu trng hp to ra s tng thch v kiu, ta phi s dng n cch
thc chuyn i kiu mt cch tng minh. C php ca php ton ny nh sau:
(Tn kiu) <Biu thc>
Chuyn i kiu ca <Biu thc> thnh kiu mi <Tn kiu>. Chng hn nh:
float f;
f = (float) 10 / 4; /* f lc ny l 2.5*/
Ch :
- Khi mt biu thc c gn cho mt bin th gi tr ca n s thay th gi tr c m
bin lu gi trc .
- Trong cu lnh gn, du = l mt ton t; do n c th c s dng l mt thnh
phn ca biu thc. Trong trng hp ny gi tr ca biu thc gn chnh l gi tr ca
bin.
V d:
int x, y;
y = x = 3; /* y lc ny cng bng 3*/
- Ta c th gn tr cho bin lc bin c khai bo theo cch thc sau:
<Tn kiu> <Tn bin> = <Biu thc>;
V d: int x = 10, y=x;
Lnh nhp gi tr t bn phm cho bin (hm scanf)
L hm cho php c d liu t bn phm v gn cho cc bin trong chng trnh khi
chng trnh thc thi. Trong ngn ng C, l hm scanf nm trong th vin stdio.h.
C php:
scanf(Chui nh dng, a ch ca cc bin);
Gii thch:
49/199
- Chui nh dng: dng qui nh kiu d liu, cch biu din, rng, s ch s
thp phn... Mt s nh dng khi nhp kiu s nguyn, s thc, k t.
nh
dng
ngha
%[s
k
s]d
%[s
k s] Nhp s thc c ti a <s k s> tnh c du chm
f
%c
Nhp mt k t
V d:
%d
Nhp s nguyn
%4d
%f
Nhp s thc
%6f
50/199
51/199
Nu ta nhp lin tip 2 s cch nhau bi khong trng nh sau: 12345 3.142325:
- 2 k s u tin (12) s c c vo cho biennguyen.
- 3 k s tip theo trc khong trng (345) s c c vo cho bienthuc.
- Khong trng s c c cho bienchar.
Nu ta ch nhp 1 s gm nhiu k s nh sau: 123456789:
- 2 k s u tin (12) s c c vo cho biennguyen.
- 5 k s tip theo (34567) s c c vo cho bienthuc.
- bienchar s c gi tr l k s tip theo 8.
scanf(%s,chuoi1); hoc scanf(%s,chuoi2)
Nu ta nhp chui nh sau: Nguyen Van Linh ? th gi tr ca bin chuoi1 hay chuoi2
ch l Nguyen .
scanf(%s%s,chuoi1, chuoi2);
Nu ta nhp chui nh sau: Duong Van Hieu ? th gi tr ca bin chuoi1 l Duong v
gi tr ca bin chuoi2 l Van.
V sao nh vy? C s c t u n khi gp khong trng v gn gi tr cho bin
u tin, phn cn li sau khong trng l gi tr ca cc bin tip theo.
gets(chuoi1);
Nu nhp chui : Nguyen Van Linh ? th gi tr ca bin chuoi1 l Nguyen Van Linh
Lnh xut gi tr ca biu thc ln mn hnh (hm printf)
Hm printf (nm trong th vin stdio.h) dng xut gi tr ca cc biu thc ln mn
hnh.
C php:
printf(Chui nh dng , Cc biu thc);
Gii thch:
52/199
- Chui nh dng: dng qui nh kiu d liu, cch biu din, rng, s ch s
thp phn... Mt s nh dng khi i vi s nguyn, s thc, k t.
nh dng
ngha
%d
Xut s nguyn
%[.s ch s thp
phn] f
%o
%x
%c
Xut mt k t
%s
Xut chui k t
%e hoc %E hoc %g
Xut s nguyn dng khoa hc (nhn 10 m x)
hoc %G
V d
%d
In ra s nguyn
%4d
In s nguyn ti a 4 k s, nu s cn in nhiu hn 4 k s
th in ht
%f
In s thc
%6f
%.3f
In s thc c 3 s l, nu s cn in c nhiu hn 3 s l th
lm trn.
53/199
54/199
Gi tr
thp lc
phn
K t c hin th
ngha
\a
0x07
BEL
\b
0x08
BS
\f
0x0C
FF
Sang trang
\n
0x0A
LF
Xung dng
\r
0x0D
CR
Tr v u dng
\t
0x09
HT
\\
0x5C
Du \
0x2C
Du nhy n ()
0x22
Du nhy kp ()
\?
0x3F
u chm hi (?)
\ddd
ddd
K t c m ACSII trong
h bt phn l s ddd
\xHHH
oxHHH
K t c m ACSII trong
h thp lc phn l HHH
V d:
#include <stdio.h>
#include<conio.h>
int main ()
55/199
{ clrscr();
printf("\n Tieng Beep \a");
printf("\n Doi con tro sang trai 1 ky tu\b");
printf("\n Dau Tab \tva dau backslash \\");
printf("\n Dau nhay don \' va dau nhay kep \"");
printf("\n Dau cham hoi \?");
printf("\n Ky tu co ma bat phan 101 la \101");
printf("\n Ky tu co ma thap luc phan 41 la \x041");
printf("\n Dong hien tai, xin go enter");
getch();
printf("\rVe dau dong");
getch();
return 0;
}
Kt qu trc khi g phm Enter:
56/199
57/199
Bi tp v cc cu lnh n trong C
Mc ch yu cu
Lm quen v nm vng cc lnh n gin (printf, scanf), cc kiu d liu chun (int,
long, char, float...), cc php ton v cc hm chun ca ngn ng lp trnh C. Thc hin
vit cc chng trnh hon chnh s dng cc lnh n gin v cc kiu d liu chun
.
Ni dung
1. Vit chng trnh in ln mn hnh mt thip mi d sinh nht c dng:
*******************************************
THIEP MOI
Thn mi bn : Nguyn Mnh Hng
Ti d l sinh nht ca mnh
Vo lc 19h ngy 12/10/2005
Ti 05/42 Trn Ph - Cn Th
Rt mong c n tip !
H Thu Hng
*******************************************
2. Vit chng trnh nhp vo bn knh r ca mt hnh trn. Tnh chu vi v din tch ca
hnh trn theo cng thc :
Chu vi CV = 2*Pi*r
Din tch S = Pi*r*r
In cc kt qu ln mn hnh
3. Vit chng trnh nhp vo di 3 cnh a, b, c ca mt tam gic. Tnh chu vi v
din tch ca tam gic theo cng thc:
58/199
Chu vi CV = a+b+c
Din tch S = sqrt(p*(p-a)*(p-b)*(p-c))
Trong : p=CV/2
In cc kt qu ln mn hnh
4. Vit chng trnh tnh logax vi a, x l cc s thc nhp vo t bn phm, v x>0,
a>0, a != 1.( dng logax=lnx/lna)
5. Vit chng trnh nhp vo ta ca hai im (x1, y1) v (x2, y2)
a) Tnh h s gc ca ng thng i qua hai im theo cng thc:
H s gc = (y2 - y1) /(x2 - x1)
b) Tnh khong cch gia hai im theo cng thc:
2
1
R
1
R1
1
R2
1
R3
59/199
60/199
61/199
Mt khi lnh c th cha bn trong n nhiu khi lnh khc gi l khi lnh lng nhau.
S lng nhau ca cc khi lnh l khng hn ch.
Minh ha:
{
lnh;
{
lnh;
{
lnh;
}
lnh;
}
lnh;
}
Lu v phm vi tc ng ca bin trong khi lnh lng nhau:
- Trong cc khi lnh khc nhau hay cc khi lnh lng nhau c th khai bo cc bin
cng tn.
V d 1:
{
lnh;
{
int a,b; /*bin a, b trong khi lnh th nht*/
lnh;
62/199
}
lnh;
{
int a,b; /*bin a,b trong khi lnh th hai*/
lnh;
}
}
V d 2:
{
int a, b; /*bin a,b trong khi lnh bn ngoi*/
lnh;
{
int a,b; /*bin a,b bn trong khi lnh con*/
}
}
- Nu mt bin c khai bo bn ngoi khi lnh v khng trng tn vi bin bn trong
khi lnh th n cng c s dng bn trong khi lnh.
- Mt khi lnh con c th s dng cc bin bn ngoi, cc lnh bn ngoi khng th s
dng cc bin bn trong khi lnh con.
V d:
{
int a, b, c;
lnh;
63/199
{
int c, d;
lnh;
}
}
64/199
Dng khng y
C php:
if (< Biu thc iu kin >)
<Cng vic>
Lu c php:
Gii thch:
<Cng vic> c th hin bng 1 cu lnh hay 1 khi lnh.
Kim tra Biu thc iu kin trc.
Nu iu kin ng (!= 0) th thc hin cu lnh hoc khi lnh lin sau iu kin.
Nu iu kin sai th b qua lnh hoc khi lnh lin sau iu kin (nhng lnh v khi
lnh sau vn c thc hin bnh thng v n khng ph thuc vo iu kin sau
if).
65/199
V d 1:
Yu cu ngi thc hin chng trnh nhp vo mt s thc a. In ra mn hnh kt qu
nghch o ca a khi a 0.
#include <stdio.h>
#include <conio.h>
int main ()
{
float a;
printf("Nhap a = "); scanf("%f",&a);
if (a !=0 )
printf("Nghich dao cua %f la %f",a,1/a);
getch();
return 0;
}
Gii thch:
- Nu chng ta nhp vo a 0 th cu lnh printf("Nghich dao cua %f la %f",a,1/a)c
thc hin, ngc li cu lnh ny khng c thc hin.
- Lnh getch() lun lun c thc hin v n khng phi l lnh lin sau iu kin if.
V d 2: Yu cu ngi chy chng trnh nhp vo gi tr ca 2 s a v b, nu a ln hn
b th in ra thng bo Gia tr ca a ln hn gi tr ca b, sau hin th gi tr c th
ca 2 s ln mn hnh.
#include <stdio.h>
#include<conio.h>
int main ()
66/199
{
int a,b;
printf("Nhap vao gia tri cua 2 so a, b!");
scanf("%d%d",&a,&b);
if (a>b)
{
printf("\n Gia tri cua a lon hon gia tri cua b");
printf("\n a=%d, b=%d",a,b);
}
getch();
return 0;
}
Gii thch:
Nu chng ta nhp vo gi tr ca a ln hn gi tr ca b th khi lnh:
{
printf("\n Gia tri cua a lon hon gia tri cua b");
printf("\n a=%d, b=%d",a,b);
}
s c thc hin, ngc li khi lnh ny khng c thc hin.
Dng y
C php:
if (< Biu thc iu kin >)
67/199
Gii thch:
Cng vic 1, cng vic 2 c th hin l 1 cu lnh hay 1 khi lnh.
u tin Biu thc iu kin c kim tra trc.
Nu iu kin ng th thc hin cng vic 1.
Nu iu kin sai th thc hin cng vic 2.
Cc lnh pha sau cng vic 2 khng ph thuc vo iu kin.
V d 1: Yu cu ngi thc hin chng trnh nhp vo mt s thc a. In ra mn hnh
kt qu nghch o ca a khi a 0, khi a =0 in ra thng bo Khong the tim duoc nghich
dao cua a
#include <stdio.h>
#include <conio.h>
int main ()
68/199
{
float a;
printf("Nhap a = "); scanf("%f",&a);
if (a !=0 )
printf("Nghich dao cua %f la %f",a,1/a);
else
printf(Khong the tim duoc nghich dao cua a);
getch();
return 0;
}
Gii thch:
- Nu chng ta nhp vo a 0 th cu lnh printf("Nghich dao cua %f la %f",a,1/a)c
thc hin, ngc li cu lnh printf(Khong the tim duoc nghich dao cua a) c thc
hin.
- Lnh getch() lun lun c thc hin.
V d 2: Yu cu ngi chy chng trnh nhp vo gi tr ca 2 s a v b, nu a ln hn
b th in ra thng bo Gia tr ca a ln hn gi tr ca b, gi tr ca 2 s, ngc li th
in ra mn hnh cu thng bo Gi tr ca a nh hn hoc bng gi tr ca b, gi tr ca
2 s.
#include <stdio.h>
#include<conio.h>
int main ()
{
int a, b;
printf("Nhap vao gia tri cua 2 so a va b !");
69/199
scanf("%d%d",&a,&b);
if (a>b)
{
printf("\n a lon hon b);
printf("\n a=%d b=%d ",a,b);
}
else
{
printf("\n a nho hon hoac bang b");
printf("\n a=%d b=%d",a,b);
}
printf("\n Thuc hien xong lenh if");
getch();
return 0;
}
Gii thch:
- Nu chng ta nhp vo 40 30 ? th kt qu hin ra trn mn hnh l
a lon hon b
a=40 b=30
Thuc hien xong lenh if
- Cn nu chng ta nhp 40 50 ? th kt qu hin ra trn mn hnh l
a nho hon hoac bang b
70/199
a=40 b=50
Thuc hien xong lenh if
V d 3: Yu cu ngi thc hin chng trnh nhp vo mt s nguyn dng l thng
trong nm v in ra s ngy ca thng .
- Thng c 31 ngy: 1, 3, 5, 7, 8, 10, 12
- Thng c 30 ngy: 4, 6, 9, 10
- Thng c 28 hoc 29 ngy : 2
#include <stdio.h>
#include<conio.h>
int main ()
{
int thg;
printf("Nhap vao thang trong nam !");
scanf("%d",&thg);
if (thg==1||thg==3||thg==5||thg==7||thg==8||thg==10||thg==12)
printf("\n Thang %d co 31 ngay ",thg);
else if (thg==4||thg==6||thg==9||thg==11)
printf("\n Thang %d co 30 ngay",thg);
else if (thg==2)
printf("\n Thang %d co 28 hoac 29 ngay",thg);
else printf("Khong co thang %d",thg);
printf("\n Thuc hien xong lenh if");
getch();
71/199
return 0;
}
Gii thch:
- Nu chng ta nhp vo mt trong cc s 1, 3, 5, 7, 8, 10, 12 th kt qu xut hin trn
mn hnh s l
Thang <s> co 31 ngay
Thuc hien xong lenh if
- Nu chng ta nhp vo mt trong cc s 4, 6, 9, 11 th kt qu xut hin trn mn hnh
s l
Thang <s> co 30 ngay
Thuc hien xong lenh if
- Nu chng ta nhp vo s 2 th kt qu xut hin trn mn hnh s l
Thang 2 co 28 hoac 29 ngay
Thuc hien xong lenh if
- Nu chng ta nhp vo s nh hn 0 hoc ln hn 12 th kt qu xut hin trn mn
hnh s l
Khong co thang <s>
Thuc hien xong lenh if
Trong <s> l con s m chng ta nhp vo.
Lu :
- Ta c th s dng cc cu lnh ifelse lng nhau. Trong trng hp ifelse lng
nhau th else s kt hp vi if gn nht cha c else.
- Trong trng hp cu lnh if bn trong khng c else th phi vit n trong cp du
{} (coi nh l khi lnh) trnh s kt hp else if sai.
V d 1:
72/199
if ( so1>0)
if (so2 > so3)
a=so2;
else /*else ca if (so2>so3) */
a=so3;
V d 2:
if (so1>0)
{
if (so2>so3) /*lnh if ny khng c else*/
a=so2;
}
else /*else ca if (so1>0)*/
a=so3;
73/199
Cu trc la chn
CU TRC LA CHN
Cu trc la chn cho php la chn mt trong nhiu trng hp. Trong C, l cu
lnh switch.
C php:
switch (< Biu thc > )
{
case gi tr 1 :
Khi lnh thc hin cng vic 1;
break;
case gi tr n:
Khi lnh thc hin cng vic n;
break;
[ default :
Khi lnh thc hin cng vic mc nh;
break; ]
}
Lu :
74/199
Gii thch:
- Tnh gi tr ca biu thc trc.
- Nu gi tr ca biu thc bng gi tr 1 th thc hin cng vic 1 ri thot.
- Nu gi tr ca biu thc khc gi tr 1 th so snh vi gi tr 2, nu bng gi tr 2 th
thc hin cng vic 2 ri thot.
- C nh th, so snh ti gi tr n.
- Nu tt c cc php so snh trn u sai th thc hin cng vic mc nh ca trng
hp default.
Lu :
- Biu thc trong switch() phi c kt qu l gi tr kiu s nguyn (int, char, long, ).
- Cc gi tr sau case cng phi l kiu s nguyn.
- Khng bt buc phi c default.
V d 1: Nhp vo mt s nguyn, chia s nguyn ny cho 2 ly phn d. Kim tra nu
phn d bng 0 th in ra thng bo s chn, nu s d bng 1 th in thng bo s l.
#include <stdio.h>
75/199
#include<conio.h>
int main ()
{ int songuyen, phandu;
clrscr();
printf("\n Nhap vao so nguyen ");
scanf("%d",&songuyen);
phandu=(songuyen % 2);
switch(phandu)
{
case 0: printf("%d la so chan ",songuyen);
break;
case 1: printf("%d la so le ",songuyen);
break;
}
getch();
return 0;
}
V d 2: Nhp vo 2 s nguyn v 1 php ton.
- Nu php ton l +, -, * th in ra kt qua l tng, hiu, tch ca 2 s.
- Nu php ton l / th kim tra xem s th 2 c khc khng hay khng? Nu khc
khng th in ra thng ca chng, ngc li th in ra thng bo khong chia cho 0.
#include <stdio.h>
#include<conio.h>
76/199
int main ()
{ int so1, so2;
float thuong;
char pheptoan;
clrscr();
printf("\n Nhap vao 2 so nguyen ");
scanf("%d%d",&so1,&so2);
fflush(stdin);
/*Xa k t enter trong vng m trc khi nhp php ton */
printf("\n Nhap vao phep toan ");
scanf("%c",&pheptoan);
switch(pheptoan)
{
case '+':
printf("\n %d + %d =%d",so1, so2, so1+so2);
break;
case '-':
printf("\n %d - %d =%d",so1, so2, so1-so2);
break;
case '*':
printf("\n %d * %d =%d",so1, so2, so1*so2);
break;
77/199
case '/':
if (so2!=0)
{ thuong=float(so1)/float(so2);
printf("\n %d / %d =%f", so1, so2, thuong);
}
else printf("Khong chia duoc cho 0");
break;
default :
printf("\n Chua ho tro phep toan %c", pheptoan); break;
}
getch();
return 0;
}
Trong v d trn, ti sao phi xa k t trong vng m trc khi nhp php ton?
V d 3: Yu cu ngi thc hin chng trnh nhp vo mt s nguyn dng l thng
trong nm v in ra s ngy ca thng .
- Thng c 31 ngy: 1, 3, 5, 7, 8, 10, 12
- Thng c 30 ngy: 4, 6, 9, 10
- Thng c 28 hoc 29 ngy : 2
- Nu nhp vo s <1 hoc >12 th in ra cu thng bo khng c thng ny .
#include <stdio.h>
#include<conio.h>
int main ()
78/199
{ int thang;
clrscr();
printf("\n Nhap vao thangs trong nam ");
scanf("%d",&thang);
switch(thang)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("\n Thang %d co 31 ngay ",thang);
break;
case 4:
case 6:
case 9:
case 11:
printf("\n Thang %d co 30 ngay ",thang);
break;
case 2:
79/199
80/199
Gii thch:
81/199
<Cng vic>: c th hin l 1 cu lnh hay 1 khi lnh. Th t thc hin ca cu lnh
for nh sau:
B1: Tnh gi tr ca biu thc 1.
B2: Tnh gi tr ca biu thc 2.
- Nu gi tr ca biu thc 2 l sai (=0): thot khi cu lnh for.
- Nu gi tr ca biu thc 2 l ng (!=0): <Cng vic> c thc hin.
B3: Tnh gi tr ca biu thc 3 v quay li B2.
Mt s lu khi s dng cu lnh for:
- Khi biu thc 2 vng mt th n c coi l lun lun ng
- Biu thc 1: thng thng l mt php gn khi to gi tr ban u cho bin iu
kin.
- Biu thc 2: l mt biu thc kim tra iu kin ng sai dng vng lp.
- Biu thc 3: thng thng l mt php gn thay i gi tr ca bin iu kin.
- Trong mi biu thc c th c nhiu biu thc con. Cc biu thc con c phn bit
bi du phy.
V d 1: Vit on chng trnh in dy s nguyn t 1 n 10.
#include <stdio.h>
#include<conio.h>
int main ()
{ int i;
clrscr();
printf("\n Day so tu 1 den 10 :");
for (i=1; i<=10; i++)
printf("%d ",i);
82/199
getch();
return 0;
}
Kt qu chng trnh nh sau:
83/199
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int dong, cot, n, m;
clrscr();
printf("\n Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
for (dong=0;dong<n;dong++)
{
printf("\n");
for (cot=1;cot<=m;cot++)
printf("%d\t",dong+cot);
}
getch();
return 0;
}
Kt qu khi nhp 3 dng 6 ct nh sau
84/199
Vng lp while
Vng lp while ging nh vng lp for, dng lp li mt cng vic no cho n
khi iu kin sai.
C php:
while ( Biu thc iu kin )
<Cng vic>
Lu :
Gii thch:
- <Cng vic>: c th hin bng 1 cu lnh hay 1 khi lnh.
- Kim tra Biu thc iu kin trc.
- Nu iu kin sai (=0) th thot khi lnh while.
- Nu iu kin ng (!=0) th thc hin cng vic ri quay li kim tra iu kin tip.
Lu :
85/199
- Lnh while gm c biu thc iu kin v thn vng lp (khi lnh thc hin cng
vic)
- Vng lp dng li khi no iu kin sai.
- Khi lnh thc hin cng vic c th rng, c th lm thay i iu kin.
V d 1: Vit on chng trnh in dy s nguyn t 1 n 10.
#include <stdio.h>
#include<conio.h>
int main ()
{ int i;
clrscr();
printf("\n Day so tu 1 den 10 :");
i=1;
while (i<=10)
printf("%d ",i++);
getch();
return 0;
}
Kt qu chng trnh nh sau:
86/199
int main ()
{ unsigned int n,i,tong;
clrscr();
printf("\n Nhap vao so nguyen duong n:");
scanf("%d",&n);
tong=0;
i=1;
while (i<=n)
{
tong+=i;
i++;
}
printf("\n Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
Nu chng ta nhp vo s 9 th kt qu nh sau:
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int dong, cot, n, m;
clrscr();
printf("\n Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
dong=0;
while (dong<n)
{
printf("\n");
cot=1;
while (cot<=m)
{
printf("%d\t",dong+cot);
cot++;
}
dong++;
}
getch();
return 0;
88/199
}
Kt qu khi nhp 3 dng 6 ct nh sau
Vng lp do while
Vng lp do while ging nh vng lp for, while, dng lp li mt cng vic no
khi iu kin cn ng.
C php:
do
<Cng vic>
while (< Biu thc iu kin >)
Lu :
Gii thch:
- <Cng vic>: c th hin bng 1 cu lnh hay 1 khi lnh.
- Trc tin cng vic c thc hin trc, sau mi kim tra Biu thc iu kin.
- Nu iu kin sai th thot khi lnh do while.
89/199
- Nu iu kin cn ng th thc hin cng vic ri quay li kim tra iu kin tip.
Lu :
- Lnh dowhile thc hin cng vic t nht 1 ln.
- Vng lp dng li khi iu kin sai.
- Khi lnh thc hin cng vic c th rng, c th lm thay i iu kin.
V d 1: Vit on chng trnh in dy s nguyn t 1 n 10.
#include <stdio.h>
#include<conio.h>
int main ()
{ int i;
clrscr();
printf("\n Day so tu 1 den 10 :");
i=1;
do
printf("%d ",i++);
while (i<=10);
getch();
return 0;
}
Kt qu chng trnh nh sau:
90/199
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
clrscr();
printf("\n Nhap vao so nguyen duong n:");
scanf("%d",&n);
tong=0;
i=1;
do
{
tong+=i;
i++;
} while (i<=n);
printf("\n Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
Nu chng ta nhp vo s 9 th kt qu nh sau:
91/199
1234567
2345678
3456789
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int dong, cot, n, m;
clrscr();
printf("\n Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
dong=0;
do
{
printf("\n");
cot=1;
do
{
printf("%d\t",dong+cot);
cot++;
} while (cot<=m);
dong++;
92/199
} while (dong<n);
getch();
return 0;
}
Kt qu khi nhp 3 dng 6 ct nh sau
So snh cc vng lp
Vng lp for, while:
- Kim tra iu kin trc thc hin cng vic sau nn on lnh thc hin cng vic c
th khng c thc hin .
- Vng lp kt thc khi no iu kin sai.
Vng lp dowhile:
- Thc hin cng vic trc kim tra iu kin sau nn on lnh thc hin cng vic
c thc hin t nht 1 ln.
- Vng lp kt thc khi no iu kin sai.
CC CU LNH C BIT
Lnh break
C php: break
Dng thot khi vng lp. Khi gp cu lnh ny trong vng lp, chng trnh s thot
ra khi vng lp v ch n cu lnh lin sau n. Nu nhiu vng lp --> break s thot ra
khi vng lp gn nht. Ngoi ra, break cn c dng trong cu trc la chn switch.
Lnh continue
C php: continue
93/199
- Khi gp lnh ny trong cc vng lp, chng trnh s b qua phn cn li trong vng
lp v tip tc thc hin ln lp tip theo.
- i vi lnh for, biu thc 3 s c tnh tr v quay li bc 2.
- i vi lnh while, do while; biu thc iu kin s c tnh v xt xem c th tip
tc thc hin <Cng vic> na hay khng? (da vo kt qu ca biu thc iu kin).
94/199
Bi tp
Mc ch yu cu
Lm quen v bit cch s dng kiu d liu cu trc kt hp vi cc kiu d liu hc.
Phn bit kiu d liu mng v kiu cu trc. Thc hin cc bi tp trong phn ni dung.
Ni dung
1. Hy nh ngha kiu:
struct Hoso{
char HoTen[40];
float Diem;
char Loai[10];
};
Vit chng trnh nhp vo h tn, im ca n hc sinh. Xp loi vn ha theo cch sau:
im Xp loi
9, 10 Gii
7, 8 Kh
5, 6 Trung bnh
di 5 Khng t
In danh sch ln mn hnh theo dng sau:
XEP LOAI VAN HOA
HO VA TEN DIEM XEPLOAI
Nguyen Van A 7 Kha
Ho Thi B 5 Trung binh
95/199
96/199
97/199
Hm v cch xy dng mt hm
KHI NIM V HM TRONG C
Trong nhng chng trnh ln, c th c nhng on chng trnh vit lp i lp li
nhiu ln, trnh rm r v mt thi gian khi vit chng trnh; ngi ta thng phn
chia chng trnh thnh nhiu module, mi module gii quyt mt cng vic no .
Cc module nh vy gi l cc chng trnh con.
Mt tin li khc ca vic s dng chng trnh con l ta c th d dng kim tra xc
nh tnh ng n ca n trc khi rp ni vo chng trnh chnh v do vic xc
nh sai st tin hnh hiu nh trong chng trnh chnh s thun li hn. Trong C,
chng trnh con c gi l hm. Hm trong C c th tr v kt qu thng qua tn hm
hay c th khng tr v kt qu.
Hm c hai loi: hm chun v hm t nh ngha. Trong chng ny, ta ch trng n
cch nh ngha hm v cch s dng cc hm .
Mt hm khi c nh ngha th c th s dng bt c u trong chng trnh. Trong
C, mt chng trnh bt u thc thi bng hm main.
V d 1: Ta c hm max tm s ln gia 2 s nguyn a, b nh sau:
int max(int a, int b)
{
return (a>b) ? a:b;
}
V d 2: Ta c chng trnh chnh (hm main) dng nhp vo 2 s nguyn a,b v in
ra mn hnh s ln trong 2 s
#include <stdio.h>
#include <conio.h>
int max(int a, int b)
{
return (a>b) ? a:b;
98/199
}
int main()
{
int a, b, c;
printf("\n Nhap vao 3 so a, b,c ");
scanf("%d%d%d",&a,&b,&c);
printf("\n So lon la %d",max(a, max(b,c)));
getch();
return 0;
}
Hm th vin
Hm th vin l nhng hm c nh ngha sn trong mt th vin no , mun s
dng cc hm th vin th phi khai bo th vin trc khi s dng bng lnh #include
<tn th vin.h>
Mt s th vin:
alloc.h assert.h bcd.h bios.h complex.h
conio.h ctype.h dir.h dirent.h dos.h
errno.h fcntl.h float.h fstream.h grneric.h
graphics.h io.h iomanip.h iostream.h limits.h
locale.h malloc.h math.h mem.h process.h
setjmp.h share.h signal.h stdarg.h stddef.h
stdio.h stdiostr.h stdlib.h stream.h string.h
strstrea.h sys\stat.h sys\timeb.h sys\types.h time.h
99/199
values.h
ngha ca mt s th vin thng dng:
1. stdio.h : Th vin cha cc hm vo/ ra chun (standard input/output). Gm cc
hm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(),
fwrite(), getchar(), putchar(), getw(), putw()
2. conio.h : Th vin cha cc hm vo ra trong ch DOS (DOS console). Gm cc
hm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),
3. math.h: Th vin cha cc hm tnh ton gm cc hm abs(), sqrt(), log(). log10(),
sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),
4. alloc.h: Th vin cha cc hm lin quan n vic qun l b nh. Gm cc hm
calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(),
5. io.h: Th vin cha cc hm vo ra cp thp. Gm cc hm open(), _open(), read(),
_read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),
6. graphics.h: Th vin cha cc hm lin quan n ha. Gm initgraph(), line(),
circle(), putpixel(), getpixel(), setcolor(),
...
Mun s dng cc hm th vin th ta phi xem c php ca cc hm v s dng theo
ng c php (xem trong phn tr gip ca Turbo C).
Hm ngi dng
Hm ngi dng l nhng hm do ngi lp trnh t to ra nhm p ng nhu cu x l
ca mnh.
XY DNG MT HM
nh ngha hm
Cu trc ca mt hm t thit k:
<kiu kt qu> Tn hm ([< kiu t s> < tham s >][,< kiu t s >< tham s >][])
{
[Khai bo bin cc b v cc cu lnh thc hin hm]
100/199
101/199
}
V d 2: Vit hm tm c chung ln nht gia 2 s nguyn a, b. Cch tm: u tin ta
gi s UCLN ca hai s l s nh nht trong hai s . Nu iu khng ng th ta
gim i mt n v v c gim nh vy cho ti khi no tm thy UCLN
int ucln(int a, int b)
{
int u;
if (a<b)
u=a;
else
u=b;
while ((a%u !=0) || (b%u!=0))
u--;
return u;
}
S dng hm
Mt hm khi nh ngha th chng vn cha c thc thi tr khi ta c mt li gi n
hm .
C php gi hm: <Tn hm>([Danh sch cc tham s])
V d: Vit chng trnh cho php tm c s chung ln nht ca hai s t nhin.
#include<stdio.h>
unsigned int ucln(unsigned int a, unsigned int b)
{
unsigned int u;
102/199
if (a<b)
u=a;
else
u=b;
while ((a%u !=0) || (b%u!=0))
u--;
return u;
}
int main()
{
unsigned int a, b, UC;
printf(Nhap a,b: );scanf(%d%d,&a,&b);
UC = ucln(a,b);
printf(Uoc chung lon nhat la: , UC);
return 0;
}
Lu : Vic gi hm l mt php ton, khng phi l mt pht biu.
Nguyn tc hot ng ca hm
Trong chng trnh, khi gp mt li gi hm th hm bt u thc hin bng cch
chuyn cc lnh thi hnh n hm c gi. Qu trnh din ra nh sau:
- Nu hm c tham s, trc tin cc tham s s c gn gi tr thc tng ng.
- Chng trnh s thc hin tip cc cu lnh trong thn hm bt u t lnh u tin
n cu lnh cui cng.
103/199
- Khi gp lnh return hoc du } cui cng trong thn hm, chng trnh s thot khi
hm tr v chng trnh gi n v thc hin tip tc nhng cu lnh ca chng trnh
ny.
Lu :
- Trong hm InKT trn, bin ch gi l tham s hnh thc c truyn bng gi tr (gi
l tham tr ca hm). Cc tham tr ca hm coi nh l mt bin cc b trong hm v
chng c s dng nh l d liu u vo ca hm.
- Khi chng trnh con c gi thi hnh, tham tr c cp nh v nhn gi tr l
bn sao gi tr ca tham s thc. Do , mc d tham tr cng l bin, nhng vic thay
i gi tr ca chng khng c ngha g i vi bn ngoi hm, khng nh hng n
chng trnh chnh, ngha l khng lm nh hng n tham s thc tng ng.
V d 2: Ta xt chng trnh sau y:
#include <stdio.h>
#include <conio.h>
int hoanvi(int a, int b)
{
int t;
t=a; /*on ny hon v gi tr ca 2 bin a, b*/
a=b;
b=t;
printf("\Ben trong ham a=%d , b=%d",a,b);
return 0;
}
int main()
{
int a, b;
clrscr();
printf("\n Nhap vao 2 so nguyen a, b:");
105/199
scanf("%d%d",&a,&b);
printf("\n Truoc khi goi ham hoan vi a=%d ,b=%d",a,b);
hoanvi(a,b);
printf("\n Sau khi goi ham hoan vi a=%d ,b=%d",a,b);
getch();
return 0;
}
Kt qu thc hin chng trnh:
***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***
Gii thch:
- Nhp vo 2 s 6 v 5 (a=6, b=5)
- Trc khi gi hm hon v th a=6, b=5
- Bn trong hm hon v a=5, b=6
- Khi ra khi hm hon v th a=6, b=5
* Lu
Trong on chng trnh trn, nu ta mun sau khi kt thc chng trnh con gi tr ca
a, b thay i th ta phi t tham s hnh thc l cc con tr, cn tham s thc t l a
ch ca cc bin.
Lc ny mi s thay i trn vng nh c qun l bi con tr l cc tham s hnh thc
ca hm th s nh hng n vng nh ang c qun l bi tham s thc t tng
ng (cn rng vng nh ny chnh l cc bin ta cn thay i gi tr).
Ngi ta thng p dng cch ny i vi cc d liu u ra ca hm.
V d: Xt chng trnh sau y:
#include <stdio.h>
106/199
#include <conio.h>
long hoanvi(long *a, long *b)
/* Khai bo tham s hnh thc *a, *b l cc con tr kiu long */
{
long t;
t=*a; /*gn ni dung ca x cho t*/
*a=*b; /*Gn ni dung ca b cho a*/
*b=t; /*Gn ni dung ca t cho b*/
printf("\n Ben trong ham a=%ld , b=%ld",*a,*b);
/*In ra ni dung ca a, b*/
return 0;
}
int main()
{
long a, b;
clrscr();
printf("\n Nhap vao 2 so nguyen a, b:");
scanf("%ld%ld",&a,&b);
printf("\n Truoc khi goi ham hoan vi a=%ld ,b=%ld",a,b);
hoanvi(&a,&b); /* Phi l a ch ca a v b */
printf("\n Sau khi goi ham hoan vi a=%ld ,b=%ld",a,b);
getch();
107/199
return 0;
}
Kt qu thc hin chng trnh:
***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***
Gii thch:
- Nhp vo 2 s 5, 6 (a=5, b=6)
- Trc khi gi hm hoanvi th a=5, b=6
- Trong hm hoanvi (khi hon v) th a=6, b=5
- Khi ra khi hm hon v th a=6, b=6
Lu : Kiu con tr v cc php ton trn bin kiu con tr s ni trong phn sau.
HM QUY
nh ngha
Mt hm c gi l quy nu bn trong thn hm c lnh gi n chnh n.
V d: Ngi ta nh ngha giai tha ca mt s nguyn dng n nh sau:
n!=1* 2 * 3 ** (n-1) *n = (n-1)! *n (vi 0!=1)
Nh vy, tnh n! ta thy nu n=0 th n!=1 ngc li th n!=n * (n-1)!
Vi nh ngha trn th hm quy tnh n! c vit:
#include <stdio.h>
#include <conio.h>
/*Hm tnh n! bng quy*/
unsigned int giaithua_dequy(int n)
{
108/199
if (n==0)
return 1;
else
return n*giaithua_dequy(n-1);
}
/*Hm tnh n! khng quy*/
unsigned int giaithua_khongdequy(int n)
{
unsigned int kq,i;
kq=1;
for (i=2;i<=n;i++)
kq=kq*i;
return kq;
}
int main()
{
int n;
clrscr();
printf("\n Nhap so n can tinh giai thua ");
scanf("%d",&n);
printf("\nGoi ham de quy: %d != %u",n,giaithua_dequy(n));
printf("\nGoi ham khong de quy: %d != %u",
109/199
n,giaithua_khongdequy(n));
getch();
return 0;
}
c im cn lu khi vit hm quy
- Hm quy phi c 2 phn:
Phn dng hay phi c trng hp nguyn t. Trong v d trn th trng hp
n=0 l trng hp nguyn t.
Phn quy: l phn c gi li hm ang c nh ngha. Trong v d trn th
phn quy l n>0 th n! = n * (n-1)!
- S dng hm quy trong chng trnh s lm chng trnh d c, d hiu v vn
c nu bt r rng hn. Tuy nhin trong a s trng hp th hm quy tn b nh
nhiu hn v tc thc hin chng trnh chm hn khng quy.
- Ty tng bi c c th m ngi lp trnh quyt nh c nn dng quy hay khng
(c nhng trng hp khng dng quy th khng gii quyt c bi ton).
110/199
Bi tp
Mc ch yu cu
Mc ch ca vic s dng hm l lm cho chng trnh vit ra c sng sa, ngn
gn. V th sinh vin phi nm vng cch nh ngha cc hm v cch dng chng. Kt
hp cc phn hc trong cc chng trc vit cc chng trnh con.
Ni dung
1. Vit hm tm s ln nht trong hai s. p dng tm s ln nht trong ba s a, b, c vi
a, b, c nhp t bn phm.
2. Vit hm tm UCLN ca hai s a v b. p dng: nhp vo t v mu s ca mt phn
s, kim tra xem phn s ti gin hay cha.
3. Vit hm in n k t c trn mt dng. Vit chng trnh cho nhp 5 s nguyn cho
bit s lng hng bn c ca mt hng A 5 ca hng khc nhau. Dng hm trn v
biu so snh 5 gi tr , mi tr dng mt k t ring.
4. Vit mt hm tnh tng cc ch s ca mt s nguyn. Vit chng trnh nhp vo
mt s nguyn, dng hm trn kim tra xem s c chia ht cho 3 khng. Mt s chia
ht cho 3 khi tng cc ch s ca n chia ht cho 3.
5. Tam gic Pascal l mt bng s, trong hng th 0 bng 1, mi mt s hng ca
hng th n+1 l mt t hp chp k ca n ( Ckn = (n k!k)! )
Tam gic Pascal c dng sau:
1 ( hng 0 )
1 1 ( hng 1 )
1 2 1 ( hng 2 )
1331
14641
1 5 10 10 5 1
1 6 15 20 15 6 1 (hng 6)
111/199
......................................................
Vit chng trnh in ln mn hnh tan gic Pascal c n hng (n nhp vo khi chy
chng trnh) bng cch to hai hm tnh giai tha v tnh t hp.
6. Yu cu nh cu 5 nhng da vo tnh cht sau ca t hp: C k =C k 1 +C k
n
n1
n1
hnh
112/199
10. Vit chng trnh phn tch mt s nguyn dng ra tha s nguyn t.
113/199
114/199
MNG 1 CHIU
Nu xt di gc ton hc, mng 1 chiu ging nh mt vector. Mi phn t
ca mng mt chiu c gi tr khng phi l mt mng khc.
Khai bo
Khai bo mng vi s phn t xc nh (khai bo tng minh)
C php: < Kiu> <Tn mng ><[s phn t]>
ngha:
- Tn mng: y l mt ci tn t ng theo quy tc t tn ca danh biu. Tn ny
cng mang ngha l tn bin mng.
- S phn t: l mt hng s nguyn, cho bit s lng phn t ti a trong mng l bao
nhiu (hay ni khc i kch thc ca mng l g).
- Kiu: mi phn t ca mng c d liu thuc kiu g.
115/199
Tn phn t a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
Hnh nh mng a trong b nh
Khai bo mng vi s phn t khng xc nh (khai bo khng tng minh)
C php: <Kiu> <Tn mng> <[]>
Khi khai bo, khng cho bit r s phn t ca mng, kiu khai bo ny thng c p
dng trong cc trng hp: va khai bo va gn gi tr, khai bo mng l tham s hnh
thc ca hm.
a. Va khai bo va gn gi tr
C php:
<Kiu> <Tn mng> []= {Cc gi tr cch nhau bi du phy}
Nu va khai bo va gn gi tr th mc nhin C s hiu s phn t ca mng l s gi
tr m chng ta gn cho mng trong cp du {}. Chng ta c th s dng hm sizeof()
ly s phn t ca mng nh sau:
S phn t=sizeof(tn mng)/ sizeof(kiu)
b.Khai bo mng l tham s hnh thc ca hm, trong trng hp ny ta khng cn ch
nh s phn t ca mng l bao nhiu.
Truy xut tng phn t ca mng
116/199
Mi phn t ca mng c truy xut thng qua Tn bin mng theo sau l ch s nm
trong cp du ngoc vung [ ]. Chng hn a[0] l phn t u tin ca mng a c
khai bo trn. Ch s ca phn t mng l mt biu thc m gi tr l kiu s nguyn.
Vi cch truy xut theo kiu ny, Tn bin mng[Ch s] c th coi nh l mt bin c
kiu d liu l kiu c ch ra trong khai bo bin mng.
V d 1:
int a[10];
Trong khai bo ny, vic truy xut cc phn t c ch ra trong hnh 1. Chng hn phn
t th 2 (c v tr 1) l a[1]
V d 2: Va khai bo va gn tr cho 1 mng 1 chiu cc s nguyn. In mng s nguyn
ny ln mn hnh.
Gi s ta bit s phn t ca mng l n; vic hin th 1 gi tr s nguyn ln mn
hnh ta cn s dng hm printf() vi nh dng %d, tng qut ha ln nu mun hin th
ln mn hnh gi tr ca n s nguyn, ta cn gi hm printf() ng n ln. Nh vy trong
trng hp ny ta s dng 1 vng lp in ra gi tr cc phn t.
Ta c on chng trnh sau:
#include <stdio.h>
#include <conio.h>
int main()
{
int n,i,j,tam;
int dayso[]={66,65,69,68,67,70};
clrscr();
n=sizeof(dayso)/sizeof(int); /*Ly s phn t*/
printf("\n Noi dung cua mang ");
for (i=0;i<n;i++)
117/199
printf("%d ",dayso[i]);
return 0;
}
V d 3: i mt s nguyn dng thp phn thnh s nh phn. Vic chuyn i ny
c thc hin bng cch ly s chia lin tip cho 2 cho ti khi bng 0 v ly cc s
d theo chiu ngc li to thnh s nh phn. Ta s dng mng mt chiu lu li
cc s d . Chng trnh c th nh sau:
#include<conio.h>
#include<stdio.h>
int main()
{
unsigned int N;
unsigned int Du;
unsigned int NhiPhan[20],K=0,i;
printf("Nhap vao so nguyen N= ");scanf("%d",&N);
do
{
Du=N % 2;
NhiPhan[K]=Du; /* Lu s d vo mng v tr K*/
K++; /* Tng K ln ln k lu vo v tr k*/
N = N/2;
} while(N>0);
printf("Dang nhi phan la: ");
for(i=K-1;i>=0;i--)
118/199
printf("%d",NhiPhan[i]);
getch();
return 0;
}
V d 4: Nhp vo mt dy n s v sp xp cc s theo th t tng. y l mt bi ton
c ng dng rng ri trong nhiu lnh vc. C rt nhiu gii thut sp xp. Mt trong s
c m t nh sau:
u tin a phn t th nht so snh vi cc phn t cn li, nu n ln hn mt phn
t ang so snh th i ch hai phn t cho nhau. Sau tip tc so snh phn t th hai
vi cc phn t t th ba tr i ... c tip tc nh vy cho n phn t th n-1.
Chng trnh s c chia thnh cc hm Nhap (Nhp cc s), SapXep (Sp xp) v
InMang (In cc s); cc tham s hnh thc ca cc hm ny l 1 mng khng ch nh
r s phn t ti a, nhng ta cn c thm s phn t thc t c s dng ca mng l
bao nhiu, y l mt gi tr nguyn.
#include<conio.h>
#include<stdio.h>
void Nhap(int a[],int N)
{
int i;
for(i=0; i< N; i++)
{
printf("Phan tu thu %d: ",i);scanf("%d",&a[i]);
}
}
void InMang(int a[], int N)
{
119/199
int i;
for (i=0; i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
void SapXep(int a[], int N)
{
int t,i;
for(i=0;i<N-1;i++)
for(int j=i+1;j<N;j++)
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int main()
{
int b[20], N;
printf("So phan tu thuc te cua mang N= ");
scanf("%d",&N);
120/199
Nhap(b,N);
printf("Mang vua nhap: ");
InMang(b,N);
SapXep(b,N); /* Gi hm sp xp*/
printf("Mang sau khi sap xep: ");
InMang(b,N);
getch();
return 0;
}
Kt qu chy chng trnh c th l:
121/199
122/199
Vi cch truy xut theo cch ny, Tn mng[Ch s 1][Ch s 2] c th coi l 1 bin c
kiu c ch ra trong khai bo bin mng.
V d 1: Vit chng trnh cho php nhp 2 ma trn a, b c m dng n ct, thc hin
php ton cng hai ma trn a,b v in ma trn kt qu ln mn hnh.
Trong v d ny, ta s s dng hm lm ngn gn hn chng trnh ca ta. Ta s vit
cc hm: nhp 1 ma trn t bn phm, hin th ma trn ln mn hnh, cng 2 ma trn.
#include<conio.h>
#include<stdio.h>
void Nhap(int a[][10],int M,int N)
{
int i,j;
for(i=0;i<M;i++)
for(j=0; j<N; j++){
printf("Phan tu o dong %d cot %d: ",i,j);
scanf("%d",&a[i][j]);
}
}
void InMaTran(int a[][10], int M, int N)
{
int i,j;
for(i=0;i<M;i++){
for(j=0; j< N; j++)
printf("%d ",a[i][j]);
printf("\n");
123/199
}
}
/* Cong 2 ma tran A & B ket qua la ma tran C*/
void CongMaTran(int a[][10],int b[][10],int M,int N,int c[][10]){
int i,j;
for(i=0;i<M;i++)
for(j=0; j<N; j++)
c[i][j]=a[i][j]+b[i][j];
}
int main()
{
int a[10][10], b[10][10], M, N;
int c[10][10];/* Ma tran tong*/
printf("So dong M= "); scanf("%d",&M);
printf("So cot M= "); scanf("%d",&N);
printf("Nhap ma tran A\n");
Nhap(a,M,N);
printf("Nhap ma tran B\n");
Nhap(b,M,N);
printf("Ma tran A: \n");
InMaTran(a,M,N);
printf("Ma tran B: \n");
124/199
InMaTran(b,M,N);
CongMaTran(a,b,M,N,c);
printf("Ma tran tong C:\n");
InMaTran(c,M,N);
getch();
return 0;
}
V d 2: Nhp vo mt ma trn 2 chiu gm cc s thc, in ra tng ca cc phn t trn
ng cho chnh ca ma trn ny.
Ta nhn thy rng gi s ma trn a c M dng, N ct th cc phn t ca ng cho
chnh l cc phn t c dng: a[i][i] vi i [0min(M,N)-1].
#include<conio.h>
#include<stdio.h>
int main()
{
float a[10][10], T=0;
int M, N, i,j, Min;
clrscr();
printf("Ma tran co bao nhieu dong? ");scanf("%d",&M);
printf("Ma tran co bao nhieu cot? ");scanf("%d",&N);
for(i=0;i<M;i++)
for(j=0; j<N; j++)
{
125/199
126/199
Bi tp
Mc ch yu cu
Lm quen vi kiu d liu c cu trc trong C, kiu mng. Thc hin cc bi tp trong
phn ni dung bng cch kt hp kiu d liu mng, cc kiu d liu hc v cc phn
hc trong cc bi tp trc.
Ni dung
1. Vit chng trnh nhp vo mt dy n s thc a[0], a[1],..., a[n-1], sp xp dy s
theo th t t ln n nh. In dy s sau khi sp xp.
2. Vit chng trnh sp xp mt mng theo th t tng dn sau khi loi b cc phn
t trng nhau.
3. Vit chng trnh nhp vo mt mng, hy xut ra mn hnh:
- Phn t ln nht ca mng.
- Phn t nh nht ca mng.
- Tnh tng ca cc phn t trong mng .
4. Vit chng trnh nhp vo mt dy cc s theo th t tng, nu nhp sai quy cch
th yu cu nhp li. In dy s sau khi nhp xong. Nhp thm mt s mi v chn s
vo dy c sao cho dy vn m bo th t tng. In li dy s kim tra.
5. Vit chng trnh nhp vo mt ma trn (mng hai chiu) cc s nguyn, gm m
hng, n ct. In ma trn ln mn hnh. Nhp mt s nguyn khc vo v xt xem c
phn t no ca ma trn trng vi s ny khng ? v tr no ? C bao nhiu phn t ?
6. Vit chng trnh chuyn i v tr t dng thnh ct ca mt ma trn (ma trn
chuyn v) vung 4 hng 4 ct. Sau vit cho ma trn tng qut cp m*n.
V d:
12341291
25582545
94203528
127/199
15864806
7. Vit chng trnh nhp vo mt mng s t nhin. Hy xut ra mn hnh:
- Dng 1 : gm cc s l, tng cng c bao nhiu s l.
- Dng 2 : gm cc s chn, tng cng c bao nhiu s chn.
- Dng 3 : gm cc s nguyn t.
- Dng 4 : gm cc s khng phi l s nguyn t.
8. Vit chng trnh tnh tng bnh phng ca cc s m trong mt mng cc s
nguyn.
9. Vit chng trnh thc hin vic o mt mng mt chiu.
V d : 1 2 3 4 5 7 9 10 o thnh 10 9 7 5 4 3 2 1 .
10. Vit chng trnh nhp vo hai ma trn A v B c cp m, n. In hai ma trn ln mn
hnh. Tng hai ma trn A v B l ma trn C c tnh bi cng thc:
cij= aij +bij ( i=0,1,2,...m-1; j=0,1,2...n-1)
Tnh ma trn tng C v in kt qu ln mn hnh.
11. Vit chng trnh nhp vo hai ma trn A c cp m, k v B c cp k, n. In hai ma
trn ln mn hnh. Tch hai ma trn A v B l ma trn C c tnh bi cng thc:
cij= ai1*b1j + ai2 *b2j + ai3 *b3j + ... + aik *bkj (i=0,1,2,...m-1;j=0,1,2...n-1)
Tnh ma trn tch C v in kt qu ln mn hnh.
12. Xt ma trn A vung cp n, cc phn t a[i, i] ( i= 1 ... n ) c gi l ng cho
chnh ca ma trn vung A. Ma trn vung A c gi l ma trn tam gic nu tt c
cc phn t di ng cho chnh u bng 0. nh thc ca ma trn tam gic bng
tch cc phn t trn ng cho chnh.
Ta c th chuyn mt ma trn vung bt k v ma trn tam gic bng thut ton:
- Xt ct i (i =0,1...n-2)
- Trong ct i xt cc phn t a[k,i] ( k=i+1...n-1)
128/199
129/199
130/199
V d 1: Khai bo 2 bin a,b c kiu int v 2 bin pa, pb l 2 bin con tr kiu int.
int a, b, *pa, *pb;
V d 2: Khai bo bin f kiu float v bin pf l con tr float
float f, *pf;
Ghi ch: Nu cha mun khai bo kiu d liu m con tr ptr ang ch n, ta s dng:
void *ptr;
Sau , nu ta mun con tr ptr ch n kiu d liu g cng c. Tc dng ca khai
bo ny l ch dnh ra 2 bytes trong b nh cp pht cho bin con tr ptr.
Cc thao tc trn con tr
Gn a ch ca bin cho bin con tr
Ton t & dng nh v con tr n a ch ca mt bin ang lm vic.
C php: <Tn bin con tr>=&<Tn bin>
Gii thch: Ta gn a ch ca bin Tn bin cho con tr Tn bin con tr.
V d: Gn a ch ca bin a cho con tr pa, gn a ch ca bin b cho con tr pb.
pa=&a; pb=&b;
Lc ny, hnh nh ca cc bin trong b nh c m t:
a
B nh
pa pb 2 byte 2 byte
Lu :
Khi gn a ch ca bin tnh cho con tr cn phi lu kiu d liu ca chng. V d
sau y khng ng do khng tng thch kiu:
int Bien_Nguyen;
float *Con_Tro_Thuc;
132/199
...
Con_Tro_Thuc=&Bien_Nguyen;
Php gn y l sai v Con_Tro_Thuc l mt con tr kiu float (n ch c th cha
c a ch ca bin kiu float); trong khi , Bien_Nguyen c kiu int.
Ni dung ca nh con tr ch ti
truy cp n ni dung ca nh m con tr ch ti, ta s dng c php:
*<Tn bin con tr>
Vi cch truy cp ny th *<Tn bin con tr> c th coi l mt bin c kiu c m
t trong phn khai bo bin con tr.
V d: V d sau y cho php khai bo, gn a ch cng nh ly ni dung vng nh
ca bin con tr:
int x=100;
int *ptr;
ptr=&x;
int y= *ptr;
Lu : Khi gn a ch ca mt bin cho mt bin con tr, mi s thay i trn ni dung
nh con tr ch ti s lm gi tr ca bin thay i theo (thc cht ni dung nh v
bin ch l mt).
V d: on chng trnh sau thy r s thay i ny :
#include <stdio.h>
#include <conio.h>
int main()
{
int a,b,*pa,*pb;
a=2;
133/199
b=3;
clrscr();
printf("\nGia tri cua bien a=%d \nGia tri cua bien b=%d ",a,b);
pa=&a;
pb=&b;
printf("\nNoi dung cua o nho con tro pa tro toi=%d",*pa);
printf("\nNoi dung cua o nho con tro pb tro toi=%d ",*pb);
*pa=20; /* Thay i gi tr ca *pa*/
*pb=20; /* Thay i gi tr ca *pb*/
printf("\nGia tri moi cua bien a=%d \n
Gia tri moi cua bien b=%d ",a,b); /* a, b thay i theo*/
getch();
return 0;
}
Kt qu thc hin chng trnh:
pb
1 2 3 4 5 6 7 8 9
2 byte
135/199
136/199
3 4 5
pc
6 7 8 9
pb
CON TR V MNG
Con tr v mng 1 chiu
Gia mng v con tr c mt s lin h rt cht ch. Nhng phn t ca mng c th
c xc nh bng ch s trong mng, bn cnh chng cng c th c xc lp qua
bin con tr.
Truy cp cc phn t mng theo dng con tr
Ta c cc quy tc sau:
137/199
138/199
int main()
{
int a[20],N,i;
clrscr();
printf("So phan tu N= ");scanf("%d",&N);
NhapMang(a,N); /* NhapContro(a,N)*/
printf("Truy cap theo kieu mang: ");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\nTruy cap theo kieu con tro: ");
for(i=0;i<N;i++)
printf("%d ",*(a+i));
getch();
return 0;
}
Kt qu thc thi ca chng trnh:
Truy xut tng phn t ang c qun l bi con tr theo dng mng
<Tn bin>[<V tr>] tng ng vi *(<Tn bin> + <V tr>)
&<Tn bin> [ <V tr> ] tng ng vi (<Tn bin> + <V tr>)
139/199
Trong <Tn bin> l bin con tr, <V tr> l 1 biu thc s nguyn.
V d: Gi s c khai bo:
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
int main(){
int *a;
int i;
clrscr();
a=(int*)malloc(sizeof(int)*10);
for(i=0;i<10;i++)
a[i] = 2*i;
printf("Truy cap theo kieu mang: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\nTruy cap theo kieu con tro: ");
for(i=0;i<10;i++)
printf("%d ",*(a+i));
getch();
return 0;
}
Kt qu chng trnh:
140/199
1 2 3 4 5
2 4 6 8 10 12 14 16 18
2 byte
142/199
143/199
int main()
{
int i,j;
int mang_int[4][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,
15,16,17,18,19,20};
int *contro_int;
clrscr();
contro_int=(int*)mang_int;
printf("\nNoi dung cua mang_int ban dau=");
for (i=0;i<4;i++)
{
printf("\n");
for (j=0;j<5;j++)
printf("%d\t",mang_int[i][j]);
}
printf("\n---------------------------------");
printf("\nNoi dung cua contro_int ban dau \n");
for (i=0;i<20;i++)
printf("%d ",contro_int[i]);
for(i=0;i<20;i++)
contro_int[i]++ ;
printf("\n--------------------------------------------------------");
144/199
#include<conio.h>
void HoanVi(int *a, int *b)
{
int c=*a;
*a=*b;
*b=c;
}
int main()
{
int m=20,n=30;
clrscr();
printf("Truoc khi goi ham m= %d, n= %d\n",m,n);
HoanVi(&m,&n);
printf("Sau khi goi ham m= %d, n= %d",m,n);
getch();
return 0;
}
Kt qu thc thi chng trnh:
146/199
147/199
Bi tp
Mc tiu
Tip cn vi mt kiu d liu rt mnh trong C l kiu con tr. T , sinh vin c th
xy dng cc ng dng bng cch s dng cp pht ng thng qua bin con tr.
Ni dung
Thc hin cc bi tp chng trc (chng VI : Kiu mng) bng cch s dng con
tr.
148/199
149/199
KHAI BO
Khai bo theo mng
C php: char <Bin> [Chiu di ti a]
V d: Trong chng trnh, ta c khai bo:
char Ten[12];
Trong khai bo ny, b nh s cung cp 12+1 bytes lu tr ni dung ca chui k t
Ten; byte cui cng lu tr k t \0 chm dt chui.
Ghi ch:
- Chiu di ti a ca bin chui l mt hng nguyn nm trong khong t 1 n 255
bytes.
- Chiu di ti a khng nn khai bo tha trnh lng ph b nh, nhng cng khng
nn khai bo thiu.
Khai bo theo con tr
C php: char *<Bin>
V d: Trong chng trnh, ta c khai bo:
char *Ten;
Trong khai bo ny, b nh s dnh 2 byte lu tr a ch ca bin con tr Ten ang
ch n, cha cung cp ni lu tr d liu. Mun c ch lu tr d liu, ta phi
gi n hm malloc() hoc calloc() c trong alloc.h, sau mi gn d liu cho bin.
150/199
Va khai bo va gn gi tr
C php: char <Bin> []= < Hng chui>
V d:
#include<stdio.h>
#include<conio.h>
int main()
{
char Chuoi[]="Mau nang hay la mau mat em ;
printf("Vua khai bao vua gan tr : %s,Chuoi) ;
getch();
return 0;
}
* Ghi ch: Chui c khai bo l mt mng cc k t nn cc thao tc trn mng c
th p dng i vi chui k t.
151/199
152/199
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char HoLot[30], Ten[12];
printf("Nhap Ho Lot: ");gets(HoLot);
printf("Nhap Ten: ");gets(Ten);
strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
printf("Ho ten la: ");puts(HoLot);
getch();
return 0;
}
Xc nh di chui - Hm strlen()
C php: int strlen(const char* s)
V d: S dng hm strlen xc nh di mt chui nhp t bn phm.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main(){
char Chuoi[255];
int Dodai;
153/199
154/199
s=strupr(Chuoi) ;
printf(Chuoi chu hoa: );puts(s);
getch();
return 0;
}
i chui ch hoa thnh chui ch thng, hm strlwr()
Mun chuyn i chui ch hoa thnh chui ton ch thng, ta s dng hm strlwr(),
cc tham s ca hm tng t nh hm strupr()
C php: char *strlwr(char *s)
Sao chp chui, hm strcpy()
Hm ny c dng sao chp ton b ni dung ca chui ngun vo chui ch.
C php: char *strcpy(char *Des, const char *Source)
V d: Vit chng trnh cho php chp ton b chui ngun vo chui ch.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],s[255];
printf("Nhap chuoi: ");gets(Chuoi);
strcpy(s,Chuoi);
printf(Chuoi dich: );puts(s);
getch();
155/199
return 0;
}
Sao chp mt phn chui, hm strncpy()
Hm ny cho php chp n k t u tin ca chui ngun sang chui ch.
C php: char *strncpy(char *Des, const char *Source, size_t n)
Trch mt phn chui, hm strchr()
trch mt chui con ca mt chui k t bt u t mt k t c ch nh trong
chui cho n ht chui, ta s dng hm strchr().
C php : char *strchr(const char *str, int c)
Ghi ch:
- Nu k t ch nh khng c trong chui, kt qu tr v l NULL.
- Kt qu tr v ca hm l mt con tr, con tr ny ch n k t c c tm thy u
tin trong chui str.
Tm kim ni dung chui, hm strstr()
Hm strstr() c s dng tm kim s xut hin u tin ca chui s2 trong chui
s1.
C php: char *strstr(const char *s1, const char *s2)
Kt qu tr v ca hm l mt con tr ch n phn t u tin ca chui s1 c cha
chui s2 hoc gi tr NULL nu chui s2 khng c trong chui s1.
V d: Vit chng trnh s dng hm strstr() ly ra mt phn ca chui gc bt u
t chui hoc.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
156/199
{
char Chuoi[255],*s;
printf("Nhap chuoi: ");gets(Chuoi);
s=strstr(Chuoi,hoc);
printf(Chuoi trich ra: );puts(s);
getch();
return 0;
}
So snh chui, hm strcmp()
so snh hai chui theo tng k t trong bng m Ascii, ta c th s dng hm
strcmp().
C php: int strcmp(const char *s1, const char *s2)
Hai chui s1 v s2 c so snh vi nhau, kt qu tr v l mt s nguyn (s ny c
c bng cch ly k t ca s1 tr k t ca s2 ti v tr u tin xy ra s khc nhau).
- Nu kt qu l s m, chui s1 nh hn chui s2.
- Nu kt qu l 0, hai chui bng nhau.
- Nu kt qu l s dng, chui s1 ln hn chui s2.
So snh chui, hm stricmp()
Hm ny thc hin vic so snh trong n k t u tin ca 2 chui s1 v s2, gia ch
thng v ch hoa khng phn bit.
C php: int stricmp(const char *s1, const char *s2)
Kt qu tr v tng t nh kt qu tr v ca hm strcmp()
157/199
158/199
Bi tp
Mc ch yu cu
i su vo kiu d liu chui v cc php ton trn chui.
Ni dung
1. Vit chng trnh nhp mt chui k t t bn phm, xut ra mn hnh m Ascii ca
tng k t c trong chui.
2. Vit chng trnh nhp mt chui k t t bn phm, xut ra mn hnh chui o
ngc ca chui . V d o ca abcd egh l hge dcba.
3. Vit chng trnh nhp mt chui k t v kim tra xem chui c i xng khng.
V d : Chui ABCDEDCBA l chui i xng.
4. Nhp vo mt chui bt k, hy m s ln xut hin ca mi loi k t.
5. Vit chng trnh nhp vo mt chui.
- In ra mn hnh t bn tri nht v phn cn li ca chui. V d: Nguyn Vn Minh
in ra thnh:
Nguyn
Vn Minh
- In ra mn hnh t bn phi nht v phn cn li ca chui. V d: Nguyn Vn Minh
in ra thnh:
Minh
Nguyn Vn
6. Vit chng trnh nhp vo mt chui ri xut chui ra mn hnh di dng mi
t mt dng.
V d: Nguyn Vn Minh
In ra :
159/199
Nguyn
Vn
Minh
7. Vit chng trnh nhp vo mt chui, in ra chui o ngc ca n theo tng t.
V d : chui Nguyn Vn Minh o thnh Minh Vn Nguyn
8. Vit chng trnh i s tin t s thnh ch.
9. Vit chng trnh nhp vo h v tn ca mt ngi, ct b cc khong trng khng
cn thit (nu c), tch tn ra khi h v tn, in tn ln mn hnh. Ch n trng hp
c h v tn ch c mt t.
10. Vit chng trnh nhp vo h v tn ca mt ngi, ct b cc khong trng bn
phi, tri v cc khong trng khng c ngha trong chui. In ra mn hnh ton b h tn
ngi di dng ch hoa, ch thng.
11. Vit chng trnh nhp vo mt danh sch h v tn ca n ngi theo kiu ch
thng, i cc ch ci u ca h, tn v ch lt ca mi ngi thnh ch hoa. In kt
qu ln mn hnh.
12. Vit chng trnh nhp vo mt danh sch h v tn ca n ngi, tch tn tng ngi
ra khi h v tn ri sp xp danh sch tn theo th t t in. In danh sch h v tn
sau khi sp xp.
160/199
161/199
163/199
164/199
{
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
} NgayThang;
typedef struct
{
char MSSV[10];
char HoTen[40];
NgayThang NgaySinh;
int Phai;
char DiaChi[40];
} SinhVien;
/* Hm in ln mn hnh 1 mu tin SinhVien*/
void InSV(SinhVien s)
{
printf("MSSV: | Ho va ten | Ngay Sinh | Dia chi\n");
printf("%s | %s | %d-%d-%d | %s\n",s.MSSV,s.HoTen,
s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi);
}
int main()
{
166/199
SinhVien SV, s;
printf("Nhap MSSV: ");gets(SV.MSSV);
printf("Nhap Ho va ten: ");gets(SV.HoTen);
printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay);
printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang);
printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam);
printf("Gioi tinh (0: Nu), (1: Nam): ");scanf("%d",&SV.Phai);
flushall();
printf("Dia chi: ");gets(SV.DiaChi);
InSV(SV);
s=SV; /* Gn tr cho mu tin s*/
InSV(s);
getch();
return 0;
}
Lu :
- Cc bin cu trc c th gn cho nhau. Thc cht y l thao tc trn ton b cu trc
khng phi trn mt trng ring r no. Chng trnh trn dng s=SV l mt v d.
167/199
168/199
SoPhuc p1,p2,p;
clrscr();
printf("Nhap so phuc thu nhat:\n");
printf("Phan thuc: ");scanf("%f",&p1.Thuc);
printf("Phan ao: ");scanf("%f",&p1.Ao);
printf("Nhap so phuc thu hai:\n");
printf("Phan thuc: ");scanf("%f",&p2.Thuc);
printf("Phan ao: ");scanf("%f",&p2.Ao);
printf("So phuc thu nhat: ");
InSoPhuc(p1);
printf("So phuc thu hai: ");
InSoPhuc(p2);
p.Thuc = p1.Thuc+p2.Thuc;
p.Ao = p1.Ao + p2.Ao;
printf("Tong 2 so phuc: ");
InSoPhuc(p);
getch();
return 0;
}
Kt qu thc hin chng trnh:
169/199
Khi to cu trc
Vic khi to cu trc c th c thc hin trong lc khai bo bin cu trc. Cc trng
ca cu trc c khi to c t gia 2 du { v }, chng c phn cch nhau bi
du phy (,).
V d: Khi to bin cu trc NgaySinh:
struct NgayThang NgaySinh ={29, 8, 1986};
CON TR CU TRC
Khai bo
Vic khai bo mt bin con tr kiu cu trc cng tng t nh khi khai bo mt bin
con tr khc, ngha l t thm du * vo pha trc tn bin.
C php: struct <Tn cu trc> * <Tn bin con tr>;
V d: Ta c th khai bo mt con tr cu trc kiu NgayThang nh sau:
struct NgayThang *p;
/* NgayThang *p; // Nu c nh ngha kiu */
S dng cc con tr kiu cu trc
Khi khai bo bin con tr cu trc, bin con tr cha c a ch c th. Lc ny n ch
mi c cp pht 2 byte lu gi a ch v c ghi nhn l con tr ch n 1 cu
trc, nhng cha ch n 1 i tng c th. Mun thao tc trn con tr cu trc hp l,
cng tng t nh cc con tr khc, ta phi:
- Cp pht mt vng nh cho n (s dng hm malloc() hay calloc)
- Hoc, cho n qun l a ch ca mt bin cu trc no .
170/199
171/199
p=&Ng;
printf("Truy cap binh thuong %d-%d-%d\n",
Ng.Ngay,Ng.Thang,Ng.Nam);
printf("Truy cap qua con tro %d-%d-%d\n",
p->Ngay,p->Thang,p->Nam);
printf("Truy cap qua vung nho con tro %d-%d-%d\n",
(*p).Ngay,(*p).Thang,(*p).Nam);
getch();
return 0;
}
Kt qu:
172/199
Bi tp v kiu cu trc
Mc ch yu cu
Lm quen v bit cch s dng kiu d liu cu trc kt hp vi cc kiu d liu hc.
Phn bit kiu d liu mng v kiu cu trc. Thc hin cc bi tp trong phn ni dung.
Ni dung
1. Hy nh ngha kiu:
struct Hoso{
char HoTen[40];
float Diem;
char Loai[10];
};
Vit chng trnh nhp vo h tn, im ca n hc sinh. Xp loi vn ha theo cch sau:
im Xp loi
9, 10 Gii
7, 8 Kh
5, 6 Trung bnh
di 5 Khng t
In danh sch ln mn hnh theo dng sau:
XEP LOAI VAN HOA
HO VA TEN DIEM XEPLOAI
Nguyen Van A 7 Kha
Ho Thi B 5 Trung binh
173/199
174/199
175/199
176/199
Sau khi c/ghi xong d liu, con tr s chuyn dch thm mt phn t v pha cui tp
tin. Sau phn t d liu cui cng ca tp tin l du kt thc tp tin EOF (End Of File).
M tp tin vn bn c
To ra tp tin vn bn mi ghi
Ni vo tp tin vn bn
rb
M tp tin nh phn c
wb
ab
Ni vo tp tin nh phn
177/199
r+
M mt tp tin vn bn c/ghi
w+
To ra tp tin vn bn c ghi
a+
r+b
w+b
a+b
178/199
TRUY CP TP TIN VN BN
Ghi d liu ln tp tin vn bn
Hm putc()
Hm ny c dng ghi mt k t ln mt tp tin vn bn ang c m lm vic.
C php: int putc(int c, FILE *f)
Trong , tham s c cha m Ascii ca mt k t no . M ny c ghi ln tp tin
lin kt vi con tr f. Hm ny tr v EOF nu gp li.
Hm fputs()
Hm ny dng ghi mt chui k t cha trong vng m ln tp tin vn bn.
C php: int puts(const char *buffer, FILE *f)
179/199
ngha
%d
Ghi s nguyn
%o
%x
%c
Ghi mt k t
%s
Ghi chui k t
{
fputs("Em oi Ha Noi pho.\n",f);
fputs("Ta con em, mui hoang lan; ta con em, mui hoa sua.",f);
fclose(f);
}
getch();
return 0;
}
Ni dung tp tin Baihat.txt khi c m bng trnh son tho vn bn Notepad.
c d liu t tp tin vn bn
Hm getc()
Hm ny dng c d liu t tp tin vn bn ang c m lm vic.
C php: int getc(FILE *f)
Hm ny tr v m Ascii ca mt k t no (k c EOF) trong tp tin lin kt vi con
tr f.
Hm fgets()
C php: char *fgets(char *buffer, int n, FILE *f)
Hm ny c dng c mt chui k t t tp tin vn bn ang c m ra v lin
kt vi con tr f cho n khi c n k t hoc gp k t xung dng \n (k t ny
cng c a vo chui kt qu) hay gp k t kt thc EOF (k t ny khng c
a vo chui kt qu).
181/199
Trong :
- buffer (vng m): con tr c kiu char ch n cng nh ln cha cc k t nhn
c.
- n: gi tr nguyn ch di ln nht ca chui k t nhn c.
- f: con tr lin kt vi mt tp tin no .
- K t NULL (\0) t ng c thm vo cui chui kt qu lu trong vng m.
- Hm tr v a ch u tin ca vng m khi khng gp li v cha gp k t kt thc
EOF. Ngc li, hm tr v gi tr NULL.
Hm fscanf()
Hm ny dng c d liu t tp tin vn bn vo danh sch cc bin theo nh dng.
C php: fscanf(FILE *f, const char *format, varlist)
Trong : format: chui nh dng (ging hm scanf()); varlist: danh sch cc bin mi
bin cch nhau du phy (,).
V d: Vit chng trnh chp tp tin D:\Baihat.txt trn sang tp tin D:\Baica.txt.
#include<stdio.h>
#include<conio.h>
int main()
{
FILE *f1,*f2;
clrscr();
f1=fopen("D:\\Baihat.txt","rt");
f2=fopen("D:\\Baica.txt","wt");
if (f1!=NULL && f2!=NULL)
{
182/199
int ch=fgetc(f1);
while (! feof(f1))
{
fputc(ch,f2);
ch=fgetc(f1);
}
fcloseall();
}
getch();
return 0;
}
Trong :
- ptr: con tr ch n vng nh s nhn d liu t tp tin.
- n: s phn t c c t tp tin.
- size: kch thc ca mi phn t.
- f: con tr tp tin c m.
- Gi tr tr v ca hm ny l s phn t c c t tp tin. Gi tr ny bng n hay
nh hn n nu chm n cui tp tin hoc c li xut hin..
Di chuyn con tr tp tin - Hm fseek()
Vic ghi hay c d liu t tp tin s lm cho con tr tp tin dch chuyn mt s byte,
y chnh l kch thc ca kiu d liu ca mi phn t ca tp tin.
Khi ng tp tin ri m li n, con tr lun v tr ngay u tp tin. Nhng nu ta s
dng kiu m tp tin l a ghi ni d liu, con tr tp tin s di chuyn n v tr cui
cng ca tp tin ny.
Ta cng c th iu khin vic di chuyn con tr tp tin n v tr ch nh bng hm
fseek().
C php: int fseek(FILE *f, long offset, int whence)
Trong :
f: con tr tp tin ang thao tc.
offset: s byte cn dch chuyn con tr tp tin k t v tr trc . Phn t u
tin l v tr 0.
whence: v tr bt u tnh offset, ta c th chn im xut pht l:
0 SEEK_SET V tr u tp tin
1 SEEK_CUR V tr hin ti ca con tr tp tin
2 SEEK_END V tr cui tp tin
Kt qu tr v ca hm l 0 nu vic di chuyn thnh cng. Nu khng thnh
cng, 1 gi tr khc 0 ( l 1 m li) c tr v.
184/199
V d
V d 1: Vit chng trnh ghi ln tp tin CacSo.Dat 3 gi tr s (thc, nguyn, nguyn
di). Sau c cc s t tp tin va ghi v hin th ln mn hnh.
#include<stdio.h>
#include<conio.h>
int main()
{
FILE *f;
clrscr();
f=fopen("D:\\CacSo.txt","wb");
if (f!=NULL)
{
double d=3.14;
int i=101;
long l=54321;
fwrite(&d,sizeof(double),1,f);
fwrite(&i,sizeof(int),1,f);
fwrite(&l,sizeof(long),1,f);
/* Doc tu tap tin*/
rewind(f);
fread(&d,sizeof(double),1,f);
fread(&i,sizeof(int),1,f);
fread(&l,sizeof(long),1,f);
185/199
186/199
int n,i;
SinhVien sv;
f=fopen(FileName,"ab");
printf("Nhap bao nhieu sinh vien? ");scanf("%d",&n);
fflush(stdin);
for(i=1;i<=n;i++)
{
printf("Sinh vien thu %i\n",i);
printf(" - MSSV: ");gets(sv.Ma);
printf(" - Ho ten: ");gets(sv.HoTen);
fwrite(&sv,sizeof(sv),1,f);
fflush(stdin);
}
fclose(f);
printf("Bam phim bat ky de tiep tuc");
getch();
}
void ReadFile(char *FileName)
{
FILE *f;
SinhVien sv;
f=fopen(FileName,"rb");
187/199
188/199
fread(&sv,sizeof(sv),1,f);
if (strcmp(sv.Ma,MSSV)==0) Found=1;
}
fclose(f);
if (Found == 1)
printf("Tim thay SV co ma %s. Ho ten la: %s",sv.Ma,sv.HoTen);
else
printf("Tim khong thay sinh vien co ma %s",MSSV);
printf("\nBam phim bat ky de tiep tuc!!!");
getch();
}
int main()
{
int c;
for (;;)
{
clrscr();
printf("1. Nhap DSSV\n");
printf("2. In DSSV\n");
printf("3. Tim kiem\n");
printf("4. Thoat\n");
printf("Ban chon 1, 2, 3, 4: "); scanf("%d",&c);
189/199
if(c==1)
WriteFile("d:\\SinhVien.Dat");
else if (c==2)
ReadFile("d:\\SinhVien.Dat");
else if (c==3)
Search("d:\\SinhVien.Dat");
else break;
}
return 0;
}
Ngoi ra th vin stdio.h cn nh ngha mt s hm khc cho php thao tc vi tp tin,
sinh vin c th tham kho trong phn tr gip.
190/199
Bi tp
Mc ch yu cu
Nm vng cch s dng kiu d liu tp tin. Phn bit n vi tt c cc kiu d liu c
cu trc hc. Lm quen v bit cch thao tc trn tp tin. Vn dng cc kin thc
hc vit cc chng trnh trong phn ni dung.
Ni dung
1. Vit chng trnh qun l mt tp tin vn bn theo cc yu cu:
a- Nhp t bn phm ni dung mt vn bn sau ghi vo a.
b- c t a ni dung vn bn va nhp v in ln mn hnh.
c- c t a ni dung vn bn va nhp, in ni dung ln mn hnh v cho php ni
thm thng tin vo cui tp tin .
2. Vit chng trnh cho php thng k s ln xut hin ca cc k t l ch
(A..Z,a..z) trong mt tp tin vn bn.
3. Vit chng trnh m s t v s dng trong mt tp tin vn bn.
4. Vit chng trnh nhp t bn phm v ghi vo 1 tp tin tn l DMHH.DAT vi mi
phn t ca tp tin l 1 cu trc bao gm cc trng: Ma (m hng: char[5]), Ten (Tn
hng: char[20]).Kt thc vic nhp bng cch g ENTER vo Ma. Ta s dng tp tin
ny gii m hng ha cho tp tin DSHH.DAT s cp trong bi 5.
5. Vit chng trnh cho php nhp t bn phm v ghi vo 1 tp tin tn DSHH.Dat vi
mi phn t ca tp tin l mt cu trc bao gm cc trng : mh (m hng: char[5]), sl
(s lng : int), dg ( n gi: float), st (S tin: float) theo yu cu:
- Mi ln nhp mt cu trc
- Trc tin nhp m hng (mh), a mh so snh vi Ma trong tp tin DMHH.DAT
c to ra bi bi tp 1, nu mh=ma th in tn hng ngay bn cnh m hng.
- Nhp s lng (sl).
- Nhp n gi (dg).
191/199
192/199
Tham gia ng gp
Ti liu: Gio Trnh Lp Trnh Cn Bn
Bin tp bi: duongvanhieu
URL: http://voer.edu.vn/c/ab1e3116
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Tng quan
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/2b52435d
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/6cb00baf
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Cu trc d liu v gii thut
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/0b2a1d9c
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/54bb3843
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/54a70db7
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Tng quan v ngn ng lp trnh C
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/8c037c30
193/199
194/199
195/199
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/00bb1ba5
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu bi hc chng trnh con trong lp trnh C
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/78889014
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Hm v cch xy dng mt hm
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/c20ccc3f
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/c44c9b95
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/35a956c4
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mng 1 chiu v Mng nhiu chiu
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/8403024d
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/2e4b56f6
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu bi hc
Cc tc gi: unknown
196/199
URL: http://www.voer.edu.vn/m/4780ad23
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Kiu d liu con tr
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/f3f6bf0d
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/078a112e
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/c217a4e2
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Chui k t v cc thao tc trn chui k t
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/f72fc875
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Bi tp
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/a60b108d
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Mc tiu ca bi hc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/16253bc0
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Kiu cu trc v cc thao tc trn kiu cu trc
Cc tc gi: unknown
URL: http://www.voer.edu.vn/m/5d14167d
197/199
198/199
199/199