Download as pdf or txt
Download as pdf or txt
You are on page 1of 147

LP TRNH C/C++

LP TRNH C/C++

Bi Tin Ln

01/01/2015

Khoa Cng ngh Thng tin


GII THIU

GII THIU

Gio trnh c bin son hon ton da trn nhiu ti liu ca cc ng nghip.
Gio trnh nn dng vi nhng cun sch gio khoa hon chnh v ngn ng lp
trnh C/C++. Gio trnh c chia thnh 10 chng theo tng ni dung kin thc,
km theo Cc thi mu. Mi chng gm 2 phn: Phn l thuyt: c tm tt
ngn gn vi y v d minh ho km theo. Phn bi tp: vi nhiu bi tp
c chia lm hai mc c bn v luyn tp nng cao, bi tp c nh du * l
bi tp kh dnh cho sinh vin luyn tp thm. Phn tm tt: tm tt ni dung
tm v cc thao tc m sinh vin cn nm hay nhng lu ca chng .

ii
Mc lc

Mc lc

GII THIU ii

1 CC KHI NIM C BN V LP TRNH 1


1.1 KHI NIM LP TRNH . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 CNG NGH LP TRNH TRUYN THNG . . . . . . . . . . . 4
1.3 CNG NGH LP TRNH HIN I . . . . . . . . . . . . . . . 4
1.3.1 Cng c v mi trng lp trnh . . . . . . . . . . . . . . . 5
1.4 THUT TON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 LU THUT TON 8
2.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Khi nim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 Phn mm cng c . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.3 Cc k hiu . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.4 Phng php v v thc thi . . . . . . . . . . . . . . . . . . 9
2.1.5 Cc cu trc iu khin c bn . . . . . . . . . . . . . . . . 9
2.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3 KIU D LIU C BN V CU TRC IU KHIN 14


3.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.1 Cu trc mt chng trnh C n gin . . . . . . . . . . . . 14
3.1.2 Cc kiu d liu c bn trong C . . . . . . . . . . . . . . . . 15

iii
Mc lc

3.1.3 Cc php ton . . . . . . . . . . . . . . . . . . . . . . . . . 16


3.1.4 Cc hm th vin c bn . . . . . . . . . . . . . . . . . . . 18
3.1.5 Cu trc tun t . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.6 Cu trc r nhnh . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.7 Cu trc lp . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.8 Cu trc nhy . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.9 Thc thi chng trnh . . . . . . . . . . . . . . . . . . . . . 26
3.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 HM 35
4.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.1 Khi nim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.2 Cu trc mt chng trnh C . . . . . . . . . . . . . . . . . 36
4.1.3 Cch xy dng mt hm con . . . . . . . . . . . . . . . . . 36
4.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5 KIU D LIU MNG MT CHIU 45


5.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

6 KIU D LIU CHUI K T 60


6.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

7 KIU D LIU MNG HAI CHIU 66


7.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

8 KIU D LIU CU TRC 80


8.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

iv
Mc lc

8.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

9 KIU D LIU TP TIN 100


9.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.1.1 Khi nim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.1.2 Thao tc vi tp tin . . . . . . . . . . . . . . . . . . . . . . 100
9.1.3 Cc v d minh ho . . . . . . . . . . . . . . . . . . . . . . 103
9.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

10 KIU D LIU CON TR 112


10.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
10.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

11 K THUT QUI 121


11.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.1.1 Cc loi qui . . . . . . . . . . . . . . . . . . . . . . . . . 122
11.1.2 Cc v d . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
11.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
11.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

12 LP TRNH N TH 130
12.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

13 MT S THI MU 131

Ti liu tham kho 141

v
Chng 1 CC KHI NIM C BN V LP TRNH

1
CC KHI NIM C BN V LP TRNH

An algorithm must be seen to be


believed.

Donald Ervin Knuth

1.1 KHI NIM LP TRNH


nh ngha.
CPU ca my tnh c thit k c th thc hin c cc chng trnh
m my (machine code program) c h iu hnh (HH) np vo RAM
ca my tnh.
Chng trnh m my thng phi tng thch vi tng h my c th, bao
gm tp hp cc ch th c vit bng cc lnh CPU ca h my , c
lu trn a di dng mt tp tin m thc thi (executable program le) ca
HH c th

Quy trnh thc hin


Bc 1: Ngi s dng (end user) ra lnh thc hin chy chng trnh.
Bc 2: HH nhn c lnh s thc hin:
Tm v np tp tin m thc thi ca chng trnh (nm trn a) vo
RAM ca my tnh.
B m lnh ca CPU (CPU program counter) c tr n lnh u
tin ca chng trnh hay cn gi l ng vo chng trnh (program
entry point)

1
Chng 1 CC KHI NIM C BN V LP TRNH

Bc 3: CPU thc hin tng ch th mt trong RAM cho n khi gp lnh


kt thc:
Chp lnh m my hin hnh vo thanh ghi lnh.
Tng b m lnh ( tr n lnh k tip).
Thi hnh lnh m my.
Bc 4: Kt thc thc hin chng trnh, HH ch nhn lnh mi.

c im
Mi ch th ca chng trnh l mt lnh m my (mt dy cc byte ch ph
hp vi qui c tp lnh ca mt loi CPU no )
c cu trc ha theo qui c ca HH.
c chy trn mt h CPU v HH c th.
Ni dung rt kh hiu i vi ngi dng my tnh, ch c CPU thch hp
vi hiu r v thi hnh c.

Nhn xt
Kh c th sn xut ra phn mm bng cch vit trc tip cc chng trnh
m my.
Nu c lm c theo cch ny th
Gi c s rt t do qu kh, tn qu nhiu thi gian v cng sc.
Kh nng dng li rt gii hn do khng th bn chongi dng trn
h my tnh khc hay ngi dng s dng h iu hnh khc.

nh ngha.
Ngn ng lp trnh - NNLT (programming language) l ngn ng c lp
trnh vin s dng vit chng trnh cho my tnh.
Khi mt chng trnh c vit bng mt NNLT no th cc ch th, cu
lnh trong chng trnh phi tun theo cc qui tc, cc lut do NNLT
qui nh.
Chng trnh vit bng ngn ng lp trnh c gi l chng trnh ngun
(source code program) hay m ngun (source code). Chng trnh ngun
c dch sang chng trnh m my bng cch chng trnh dch:
Trnh hp dch (assembler) dch cc chng trnh hp ng.

2
Chng 1 CC KHI NIM C BN V LP TRNH

Trnh thng dch (interpreter) v trnh bin dch (compiler) dch cc


chng trnh cp cao.

V d. Mt s ngn ng lp trnh thng dng


Ngn ng cp thp: Hp ng (assembly language)
Ngn ng cp cao: C/C++, Java, C#, Pascal, Python, PHP, Ruby, Perl,
Lisp

nh ngha.
Chng trnh (program) l mt dy cc ch th (instruction) iu khin s
hot ng ca my tnh nhm gii quyt mt cng vic no .
Ngi vit chng trnh hay cn gi l lp trnh vin hay tho chng vin
(programmer) l nhng ngi to lp ra nhng chng trnh my tnh.

V d 1.1

Mt s chng trnh
Ngn ng assembly

.model tiny
.code
org 100h
main proc
mov ah,9
mov dx,offset hello_message
int 21h
retn
hello_message db 'Hello, world!$\$$'
main endp
end main

Ngn ng C/C++

#include <stdio.h>
void main(void)
{
pritnf("Hello world!");
}

Ngn ng Java

3
Chng 1 CC KHI NIM C BN V LP TRNH

public class Hello {


public static void main(String argv[])
{
System.out.print("Hello everybody!");
}
}

c im ngn ng lp trnh cp thp


L NNLT ph thuc vo tng h my c th, v vy khng c tnh tng
thch.
D vit, c, sa hn chng trnh m my.
u im l tn dng v khai thc c tnh nng ca mi h my c th,
nh vy chng trnh c th chy nhanh hn.

c im ngn ng lp trnh cp cao


c xut khc phc cc hn ch ca NNLT cp thp.
D dng v d din t c cc tng tru tng.
C tnh tng thch cao (khi thay i dng my tnh th ch cn sa chng
trnh rt t hoc thm ch khng cn sa m vn m bo chy ng).

1.2 CNG NGH LP TRNH TRUYN THNG


i vi cc NNLT cp cao truyn thng (trc th h ca Java v C#), qu trnh
vit, dch v chy chng trnh gm cc cng on nh sau:
B1. Son chng trnh ngun v lu ln a.
B2. Dch chng trnh ngun nh trnh bin dch.
B3. Ni kt cc tp tin m trung gian to ra B2.
B4. Chy chng trnh ngn ng my to ra B3.

1.3 CNG NGH LP TRNH HIN I


Hn ch ca cc chng trnh cp cao truyn thng l trnh bin dch ca
chng pht sinh trc tip m thc thi ph thuc vo m my tnh ca mt
h my tnh v h iu hnh c th nn khng th mang i s dng cc
h iu hnh khc.

4
Chng 1 CC KHI NIM C BN V LP TRNH

NNLT hin i nh Java hay C# trnh bin dch khng dch trc tip m
ngun thnh m thc thi m c thit k c th dch thnh m thc thi
tru tng (abstract executable code) c lp my v h iu hnh.
Do my tnh tht khng th hiu c m tru tng nn nhng chng
trnh dng m thc thi tru tng ch chy c khi c sn my o h tr
cho vic thi hnh loi m thc thi .
Trong cc nm gn y, cc ng dng chy trn web pht trin rt mnh.
Chy trn internet thng qua mt trnh duyt web.
c vit bng cc ngn ng nh Python, PHP, ASP.NET, JSP, Java
Script, VB Script c tnh tng thch cao, hot ng trn bt k my
tnh no c internet

1.3.1 Cng c v mi trng lp trnh

Ton b qui trnh bin dch c thc mt cch d dng v thun tin nh vo
cng c gi l mi trng pht trin phn mm - IDE (integrated development
environment)
Son tho chng trnh.
Qun l h thng tp tin m ngun.
Qun l h thng cc phin bn ca m ngun.
Kim tra li c php (syntax error), bin dch (compile), lin kt chng
trnh (link).
Chy tng dng lnh (debug) tm li.

V d. Mt s IDE thng dng


Eclipse: h tr nhiu ngn ng lp trnh.
Visual Studio: h tr nghiu ngn ng lp trnh

1.4 THUT TON


Cc bc thit k chng trnh
Xc nh bi ton
Phn tch bi ton
Thit k thut ton

5
Chng 1 CC KHI NIM C BN V LP TRNH

Ci t chng trnh
Th nghim chng trnh

nh ngha. Thut ton (algorithm) l tp hp hu hn cc ch th c nh


ngha r rng nhm gii quyt mt vn c th no .

Tnh cht. Mt thut ton phi c cc tnh cht sau


Tnh chnh xc: qu trnh tnh ton hay cc thao tc my tnh thc hin l
chnh xc.
Tnh r rng: cc cu lnh minh bch c sp xp theo th t nht nh.
Tnh khch quan: c vit bi nhiu ngi trn my tnh nhng kt qu
phi nh nhau.
Tnh ph dng: c th p dng cho mt lp cc bi ton c u vo tng
t nhau.
Tnh kt thc: hu hn cc bc tnh ton

Trnh by thut ton nh th no?


Trnh by bng ngn ng t nhin
Trnh by bng m gi
Trnh by bng lu

V d 1.2

Hy trnh by cch lm mn sa du bng ngn ng t nhin


Cch 1
Ly mt t sa.
nc p du vo.
Trn hn hp ny v lm lnh.
Cch 2
Rt mt ly sa vo my xay
thm vo mt t nc du p
ng nm my xay
M in v bt u trn
Dng my trn li
Nu trn u th tt my, ngc li th trn tip

6
Chng 1 CC KHI NIM C BN V LP TRNH

Khi trn xong, rt hn hp vo t v t vo t lnh


lnh mt lc ri ly ra dng

V d 1.3

Hy trnh by cch sp xp mt dy s L theo th t tng dn bng ngn ng


m gi
MergeSort(L)
if Size(L)>1
Split(L, L1 , L2 ) (tch dy L thnh L1 v L2 )
MergeSort(L1 ) (sp xp dy L1 )
MergeSort(L2 ) (sp xp dy L2 )
Merge(L1 , L2 , L) (trn dy L1 v L2 thnh L)

7
Chng 2 LU THUT TON

2
LU THUT TON

A picture is worth a thousand


words

thnh ng

Chng ny s trnh by cc k hiu biu din lu thut ton, cch biu din
cc cu trc iu khin r nhnh, cu trc lp v cc k thut lin quan n lu
thut ton.

2.1 L THUYT

2.1.1 Khi nim

Lu thut ton l cng c th dng biu din thut ton, vic m t


nhp d liu v xut d liu v x l d liu thng qua cc k hiu hnh hc.

2.1.2 Phn mm cng c

Gio trnh s dng phn mm Flowgorithm v v thc thi lu

8
Chng 2 LU THUT TON

2.1.3 Cc k hiu
Lnh K hiu Lnh K hiu

Assignment For

Call If

Comment Input

Declare Output

Do While

2.1.4 Phng php v v thc thi

V t trn xung
Chy bt u t Begin v kt thc ti End
i theo hng mi tn

2.1.5 Cc cu trc iu khin c bn

Cu trc tun t

Tun t thc thi tin trnh. Mi lnh c thc thi theo mt chui t trn xung,
xong lnh ny ri chuyn xung lnh k tip.

V d 2.1

Nhp vo mt s nguyn a v xut ra mn hnh vi gi tr tng ln 1

9
Chng 2 LU THUT TON

Cu trc r nhnh

im quyt nh cho php chn mt trong hai trng hp ng hay sai

V d 2.2

Nhp vo s nguyn n. Kim tra nu n > 0 tng n ln 1 n v

Cu trc lp

Thc hin lin tc 1 lnh hay tp lnh vi s ln lp da vo iu kin. Lp s


kt thc khi iu kin c tha.

10
Chng 2 LU THUT TON

V d 2.3

Nhp vo s nguyn n. Xut ra mn hnh t 1 n n.

Cc v d thc hnh

Bi 1: Gii v bin lun phng trnh: ax + b = 0.


Bi 2: Tnh tng: S(n) = 1 + 2 + 3 + . . . + n vi n > 0
Bi 3: Tnh tng: S(n) = 1
2
+ 23 + 34 + . . . + 2n+1
2n+2
vi n > 0
Bi 4: Tnh tng: S(n) = 1 2 + 3 . . . + (1)n+1 n vi n > 0

2.2 BI TP
Bi tp c bn

Bi 1: Nhp vo hai s x, y. Xut ra mn hnh tng, hiu, tch, thng ca hai s


trn.
Bi 2: Nhp vo s nguyn n, kim tra xem n chn hay l v xut ra mn hnh.
Bi 3: Nhp vo ba cnh a, b, c ca tam gic. Xut ra mn hnh tam gic thuc
loi tam gic g? (thng, cn, vung, u hay vung cn).
Bi 4: Nhp vo s nguyn n. Xut n ra mn hnh (nu n chn th gp i gi tr).
Bi 5: Nhp vo s nguyn n. Nu n > 5 th tng n ln 2 n v v tr v gi tr

11
Chng 2 LU THUT TON

n, ngc li tr v gi tr 0.
Bi 6: Tnh n!, vi n 0
Bi 7: Tnh P (n) = 1.3.5...(2n + 1), vi n 0
Bi 8: Tnh S(n) = 1 + 3 + 5 + ... + (2n + 1), vi n 0
Bi 9: Tnh S(n) = 1 2 + 3 4 + ... + (1)n+1 n, vi n > 0
Bi 10: Tnh S(n) = 1 + 1.2 + 1.2.3 + ... + 1.2.3...n, vi n > 0
Bi 11: Tnh S(n) = 12 + 22 + 32 + ... + n2 , vi n > 0
Bi 12: Tnh
1 1 1
S(n) = 1 + + + ... +
2 3 n
vi n > 0
Bi 13: (*) Tnh

1 1 1
S(n) = 1 + + + ... +
1+2 1+2+3 1 + 2 + 3 + ... + n

vi n > 0
Bi 14: Tnh P (x, y) = xy
Bi 15: Tnh S(n) = 1 + (1 + 2) + (1 + 2 + 3) + ... + (1 + 2 + 3 + ... + n) vi n > 0
Bi 16: Cho s nguyn n. Tnh tr tuyt i ca n.
Bi 17: Cho s nguyn dng n gm k ch s. Tm ch s c gi tr ln nht.
Bi 18: m s lng c s chn ca s nguyn dng n.
Bi 19: In ra ch s u tin ca s nguyn dng n gm k ch s.
Bi 20: Cho 2 s nguyn dng a, b. Tm USCLN ca a v b.
Bi 21: Cho 2 s nguyn dng a, b. Tm BSCNN ca a v b.
Bi 22: Cho s nguyn dng x. Kim tra xem x c phi l s nguyn t khng?
Bi 23: Cho s nguyn dng x. Kim tra x c phi l s chnh phng khng?
Bi 24: Cho s nguyn dng x. Kim tra xem x c phi l s hon thin khng?

Bi tp luyn tp v nng cao

Bi 1: Tnh S(n) = 1 + 22 + 33 + ... + nn , vi n > 0


Bi 2: Tnh
1 2 n
S(n) = + + ... +
2 3 n+1
vi n > 0

12
Chng 2 LU THUT TON

Bi 3: Tnh
1 1 1
S(n) = 1 + + + .... +
2! 3! n!
vi n > 0
Bi 4: Tnh

1+2 1+2+3 1 + 2 + 3 + ... + n


S(n) = 1 + + + .... +
2! 3! n!

vi n > 0
Bi 5: Gii v bin lun phng trnh bc hai ax2 + bx + c = 0
Bi 6: Gii v bin lunr
phng trnh trng phng bc bn ax4 + bx2 + c = 0

q
Bi 7: (*) Tnh S(n) = n + n 1 + n 2 + ... + 1 vi n > 0
p
r

q
Bi 8: (**) Tnh S(n) = 1 + 2 + 3 + ... + n vi n > 0
p

2.3 TM TT
Lu thut ton rt l mt cng c hu ch trong vic m t cch gii quyt
ca mt bi ton. Vic m t ny rt trc quan thng qua cc k hiu hnh hc,
y l giai on u tin trc khi bt tay vo lp trnh trn mt ngn ng lp
trnh c th. Khi xy dng lu thut ton, chng ta cn ch mt vi im
sau: Mt lu phi c im bt u v im kt thc. Phi c d liu vo, d
liu ra sau khi x l tnh ton. Ti mi v tr quyt nh la chn r nhnh phi
ghi r iu kin ng hoc sai th i theo nhnh no.

13
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

3
KIU D LIU C BN V CU TRC IU
KHIN

C is quirky, awed, and an


enormous success.

Dennis M. Ritchie

Chng ny trnh by cc kiu d liu c bn v cc php ton tng ng trong


ngn ng C, cc cu trc r nhnh, lp. M t cch hot ng v hng dn chy
tng bc chng trnh.

3.1 L THUYT

3.1.1 Cu trc mt chng trnh C n gin

Khai bo th vin
Khai bo bin ton cc
Chng trnh chnh (main)

V d 3.1

Mt chng trnh n gin

// Khai bo th vin
#include <stdio.h>
#include <conio.h>
// Khai bo bin ton cc
int a, b;

14
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

// Chng trnh chnh


void main()
{
printf("Hello world!");
getch();
}

3.1.2 Cc kiu d liu c bn trong C

Kiu s nguyn

Tn kiu kch thc (byte)


char 1
unsigned char 1
int 4
unsigned int 4
long 8
unsigned long 8

Kiu s thc

Tn kiu kch thc (byte)


float 4
double 8

Kiu k t

Tn kiu kch thc (byte)


char 1
unsigned char 1

Kiu lun l

Tn kiu kch thc (byte)


bool 1

15
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

3.1.3 Cc php ton

Php ton s hc

Php ton C V d
Cng + a+b

Tr - a-b

Nhn * a*b

Chia / a/b

D % a%b

php ton so snh

Php ton C V d
Ln hn > a>b

Nh hn < a<b

Bng == a==b

Khc != a!=b

Ln hn hoc bng >= a>=b

Nh hn hoc bng <= a<=b

php ton logic

Php ton C V d
ph nh ! !a

v && a&&b

hay || a||b

php ton thao tc trn bit

Php ton C V d
NOT ~ ~a

AND & a&b

OR | a|b

XOR ^ a^b

SHIFT LEFT << a<<b

SHIFT RIGHT >> a>>b

16
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

php ton tng gim

Php ton C V d
Tng bin mt n v ++ a++ hoc ++a
Gim bin mt n v -- a-- hoc --a

php ton gn v gn m rng

Php ton C V d
Gn bin mt gi tr = a=b

Php ton gn m rng V d ngha


+= a+=b a=a+b

-= a-=b a=a-b

*= a*=b a=a*b

/= a/=b a=a/b

%= a%=b a=a%b

>>= a>>=b a=a>>b

<<= a<<=b a=a<<b

&= a&=b a=a&b

^= a^=b a=a^b

|= a|=b a=a|b

ton t iu kin

Php ton C V d
iu kin ?: a?b:c

17
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

u tin v kt hp ca cc ton t

Loi Ton t Kt hp
Postx () [] ->. ++ -- tri sang phi
Unary + - ! ~ ++ -- (type)* & sizeof phi sang tri
Multiplicative * / % tri sang phi
Additive + - tri sang phi
Shift << >> tri sang phi
Relational < <= > >= tri sang phi
Equality == != tri sang phi
Bitwise AND & tri sang phi
Bitwise XOR ^ tri sang phi
Bitwise OR | tri sang phi
Logical AND && tri sang phi
Logical OR || tri sang phi
Conditional ?: phi sang tri
Assignment = += -= *= /= %= >>= <<= &= ^= |= phi sang tri
Comma , tri sang phi

3.1.4 Cc hm th vin c bn

Th vin xut nhp chun stdio.h

Tn hm ngha V d
printf(...); xut d liu ra mn hnh printf("%d %d", a, b);

scanf(...); nhp d liu t bn phm scanf("%d%d", &a, &b);

18
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

Th vin ton hc math.h

Tn hm ngha
abs(x); |a|
sin(x); sin(x)
cos(x); cos(x)
pow(x,y); xy

sqrt(x); x
log(x); log(x)
exp(x); ex

3.1.5 Cu trc tun t


C php

<lnh 1>
<lnh 2>
...
<lnh n>

Cc cu lnh c thc hin t trn xung, bt u t <lnh 1>, <lnh 2> v


cui cng l <lnh n>

V d 3.2

Tnh tng hai s nguyn

#include <stdio.h>
#include <conio.h>
void main()
{
int a, b, s;
printf("Nhap a va b = ");
s = a + b;
printf("tong l = %d ", s);
getch();
}

19
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

3.1.6 Cu trc r nhnh

Cu lnh if
C php

if(<biu thc iu kin>)


{
<khi lnh>
}

Nu <biu thc iu kin> ng th thc hin <khi lnh>. Lu , <biu thc


iu kin> phi c t trong cp ngoc

V d 3.3

Kim tra mt s c ln hn 6

#include <stdio.h>
#include <conio.h>
void main()
{
float number;
printf("Nhap mot so trong khoang tu 1 den 10 = ");
scanf("%f", &number);
if(number>6)
printf("So ban nhap lon hon 6. \n");
printf("%f la so ban nhap. ", number);
getch();
}

Cu lnh if else
C php

if(<biu thc iu kin>)


{
<khi lnh 1>
}
else
{
<khi lnh 2>
}

Nu <biu thc iu kin> cho kt qu ng th thc hin <khi lnh 1>, ngc

20
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

li th cho thc hin <khi lnh 2>.

V d 3.4

Gii v bin lun phng trnh ax + b = 0

#include <stdio.h>
#include <conio.h>
void main()
{
float a, b;
printf("Nhap vao a:");
scanf("%f", &a);
printf("Nhap vao b:");
scanf("%f", &b);
if(a==0)
if(b==0) printf("Phuong trinh vo so nghiem");
else printf("Phuong trinh vo nghiem");
else printf("Nghiem phuong trinh x=%f", -b/a);
getch();
}

Cu lnh switch
C php

switch (<biu thc s>)


{
case n1 : <cc cu lnh 1> break;
case n2 : <cc cu lnh 2> break;
...
case nk : <cc cu lnh k> break;
[default: <cc cu lnh k+1>]
}

Khi gi tr biu thc bng ni th thc hin cu lnh sau case ni .


Khi gi tr biu thc khng tha tt c cc ni th thc hin cu lnh sau
default nu c, hoc thot khi cu lnh switch.
Khi chng trnh thc hin xong cu lnh ca case ni no th n
s thc hin lun cc lnh thuc case bn di n m khng xt li iu
kin (do cc ni c xem nh cc nhn) V vy, chng trnh thot
khi lnh switch sau khi thc hin xong mt trng hp, ta dng lnh

21
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

break.

V d 3.5

To thc n v cho php chn thc n bng s nhp t bn phm.

#include<stdio.h>
#include<conio.h>
void main()
{
int chon;
printf("Thuc Don");
printf("\n1. Lau thai!");
printf("\n2. Nuoc ngot!");
printf("\n3. Ca loc hap bau!");
printf("\n4. Chuot dong!");
printf("\n Xin moi ban chon mon an!");
scanf("%d",&chon);
switch(chon)
{
case 1: printf("\nBan chon lau thai!"); break;
case 2: printf("\nBan chon nuoc ngot!"); break;
case 3: printf("\nBan chon ca loc hap bau!"); break;
case 4: printf("\Ban chon chuot dong!"); break;
default: printf("\nBan chon khong dung!"); break;
}
getch();
}

3.1.7 Cu trc lp

Cu lnh for
C php

for(<biu thc 1>; <biu thc 2>; <biu thc 3>)


{
<cc cu lnh>
}

Hot ng ca cu lnh for nh sau:


Bc 1: Khi gn cho <biu thc 1>
Bc 2: Kim tra iu kin ca <biu thc 2>

22
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

Nu <biu thc 2> ng th cho thc hin <cc cu lnh> v thc


hin <biu thc 3> ri quay tr li bc 2.
Ngc li th thot khi lp.
Bt k biu thc no trong 3 biu thc ni trn u c th vng nhng
phi gi du chm phy (;)

V d 3.6

In ra mn hnh bng m ASCII t k t s 32 n 255.

#include<conio.h>
#include<stdio.h>
void main()
{
for(int i=32;i<=255;i++)
printf("Ma ASCII cua %c: %d\t", i, i);
getch();
}

Cu lnh while
C php

while(<biu thc iu kin>)


{
<cc cu lnh>
}

Nu <biu thc iu kin> ng th thc hin <cc cu lnh> v lp iu ny


cho n khi no <biu thc iu kin> sai th kt thc

V d 3.7

In ra cc ch s ca s nguyn n

#include<stdio.h>
#include<conio.h>
void main()
{
int n, chuso;
printf("Nhap vao n = ");

23
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

scanf("%d",&n);
while(n>0)
{
chuso = n%10;
printf("%d ", chuso);
n = n/10;
}
getch();
}

Cu lnh do while
C php

do {
<cc cu lnh>
} while(<biu thc iu kin>);

Thc hin khi lnh cho n khi <biu thc iu kin> c gi tr sai.

V d 3.8

Nhp k t t bn phm hin th ln mn hnh m ASCII ca k t , thc


hin n khi nhn phm ESC (M ASCII ca phm ESC l 27).

#include<stdio.h>
#include<conio.h>
void main()
{
int ma;
do{
ma=getch();
if(ma !=27)
printf("Ma ASCII %c:%d\t", ma, ma);
} while(ma!=27);
getch();
}

Lu . Lnh lp while kim tra iu kin trc khi thc hin lp, cn lnh
lp do...while thc hin lnh lp ri mi kim tra iu kin. Do vng lp
do...while thc hin <cc cu lnh> t nht mt ln.

24
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

Cu lnh break v continue

Lnh break dng kt thc vng lp trc tip cha n

V d 3.9

Cho php ngi dng nhp lin tc gi tr n cho n khi nhp s m th dng
li

#include<stdio.h>
#include<conio.h>
void main()
{
while(1)
{
printf("Nhap n = ");
scanf("%d", &n);
if(n<0) break;
}
getch();
}

Lnh continue dng b qua mt ln lp.

V d 3.10

In ra mn hnh gi tr t 1 n 25 tr i s 14 v s 18.

#include<stdio.h>
#include<conio.h>
void main()
{
for(int i=1; i<=25; i++)
{
if(i==14||i==18) continue;
printf("%d\t", i);
}
getch();
}

3.1.8 Cu trc nhy


C php

<nhn>:

25
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

...
goto <nhn>
...

con tr lnh s c nhy n v tr ca <nhn>

V d 3.11

Kim tra mt s nguyn l s dng, m hay khng?

#include<stdio.h>
#include<conio.h>
void main()
{
int n;
printf("Nhap vao so nguyen = ");
scanf("%d", &n);
if(n>0) goto nhan1;
if(n<0) goto nhan2;
if(n==0) goto nhan2;
nhan1:
printf("so duong");
goto nhan;
nhan2:
printf("so am");
goto nhan;
nhan3:
printf("so khong");
nhan:
getch();
}

3.1.9 Thc thi chng trnh

Xc nh cc bin trong chng trnh.


Gi tr ban u ca mi bin.
Thc hin chy chng trnh theo ng trnh t c vit

V d 3.12

Cho bit kt qu ca on chng trnh sau:

void main()

26
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

{
int i, a = 4;
for(i = 0; i<a; i++)
printf("%d\n", i);
}

3.2 BI TP
Bi tp c bn

Bin, biu thc v ton t

Bi 1: Chui k t no sau y khng th l tn bin c?

BASICSALARY _basic basic-hra


#MEAN group. 422
population in 2006 over time mindovermatter
FLOAT hELLO queue.
teamsvictory Plot # 3 2015_DDay
nhit van_toc lai suat

Bi 2: Ch ra biu thc C/C++ li (nu c)


a) int = 314.562 * 150;
b) name = 'Ajay';
c) varchar = '3';
d) 3.14 * r * r * h = vol_of_cyl;
e) k = ( a * b ) ( c + ( 2.5a + b ) ( d + e );
f) m_inst = rate of interest * amount in rs;
g) si = principal * rateofinterest * numberofyears / 100;
h) area = 3.14 * r ** 2;
i) volume = 3.14 * r ^ 2 * h;
j) k = ( (a * b ) + c ) ( 2.5 * a + b );
k) a = b = 3 = 4;
l) count = count + 1;
m) date = '2 Mar 04';
Bi 3: Xc nh th t thc hin cc php ton v tnh gi tr ca biu thc

27
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

a) g = big / 2 + big * 4 / big - big + abc / 3; (abc = 2.5, big = 2,


gi s g c kiu float)
b) on = ink * act / 2 + 3 / 2 * act + 2 + tig; (ink = 4, act = 1, tig
= 3.2, gi s on c kiu int)
c) s = qui * add / 4 - 6 / 2 + 2 / 3 * 6 / god; (qui = 4, add = 2, god
= 2, gi s s c kiu int)
d) s = 1 / 3 * a / 4 - 6 / 2 + 2 / 3 * 6 / g; (a = 4, g = 3, gi s s
c kiu int)
Bi 4: Xc nh ton hng cho cc php ton trong biu thc
a) g = 10 / 5 / 2 / 1;
b) b = 3 / 2 + 5 * 4 / 3;
c) a = b = c = 3 + 4;
Bi 5: Chuyn cc biu thc ton sau sang ngn ng C/C++

8.8(a+b)2 2a
c
0.5 + q+r
A= a+b
m

b + b2 + 2.4ac
B=
2a

2v + 6.22(c + d)
C=
g+v

7.7b(xy+a)
c
0.8 + 2b
D= x+a
y

Cu trc r nhnh

Bi 1: Cho bit kt qu ca on chng trnh sau:


int a=9, b=6;
a++;
a=a+b--;
a=a+(--b);
if(a%2==0) printf("Gia tri cua a la chan");
printf("Tong cua a va b la: %d", a+b);

Bi 2: Cho bit kt qu ca on chng trnh sau:


int a=7, b=8;
a++;

28
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

a=a+(b--);
--b;
a--;
a=(--a)+(--b);
if(a%2!=0)
printf("\n a la so le");
else
printf("\n a la so chan");
printf("\na = %d",a);

Bi 3: Cho bit kt qu ca on chng trnh sau:


int x=5, y;
y=x++ + 5;
printf("x=%d, y=%d\n", x, y);
y*=6;
x=y%7;
printf("x=%d,y=%d,y/x=%d", x, y, y/x);

Bi 4: Nhp vo hai s nguyn a, b. In ra mn hnh gi tr ln nht.


Bi 5: Cho ba s a, b, c c vo t bn phm. Hy tm gi tr ln nht ca ba s
trn v in ra kt qu.
Bi 6: Cho ba s a, b, c c vo t bn phm. Hy in ra mn hnh theo th t tng
dn cc s. (Ch c dng thm hai bin ph).
Bi 7: Vit chng trnh nhp vo mt s nguyn n gm ba ch s. Xut ra mn
hnh ch s ln nht v tr no? V d: n=291. Ch s ln nht nm
hng chc l 9.
Bi 8: Vit chng trnh nhp vo s nguyn n gm ba ch s. Xut ra mn hnh
theo th t tng dn ca cc ch s. V d: n=291. Xut ra 129.
Bi 9: Nhp vo ngy, thng, nm. Kim tra xem ngy, thng, nm c hp l
hay khng? In kt qu ra mn hnh.
Bi 10: Nhp vo gi, pht, giy. Kim tra xem gi, pht, giy c hp l hay
khng? In kt qu ra mn hnh.
Bi 11: Vit chng trnh nhp vo ngy, thng, nm hp l. Cho bit nm ny c
phi l nm nhun hay khng? In kt qu ra mn hnh.
Bi 12: Vit chng trnh tnh din tch v chu vi cc hnh: tam gic, hnh vung,
hnh ch nht v hnh trn vi nhng thng tin cn c nhp t bn phm.
Bi 13: Vit chng trnh tnh tin cc TAXI. Bit rng:
a) km u tin gi l 5000

29
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

b) 200m tip theo l 1000.


c) Nu ln hn 30km th mi km thm s l 3000
Hy nhp s km sau in ra s tin phi tr.
Bi 14: Nhp vo 3 s nguyn dng a, b, c. Kim tra xem 3 s c lp thnh tam
gic khng? Nu c hy cho bit tam gic thuc loi no? (cn, vung,
u, ).
Bi 15: Vit chng trnh nhp vo s nguyn dng n. Kim tra xem n c phi l
s chnh phng hay khng? (s chnh phng l s khi ly cn bc 2 c kt
qu l nguyn).

Cu trc lp

Bi 1: Cho bit kt qu ca an chng trnh sau:


int a=18;
for(int i=1; i<=a; i++)
if(a%i==0) printf("\t %d", i);

Bi 2: Cho bit kt qu ca an chng trnh sau:


for(int i=0; i<5; i++)
{
for(int j=0; j<=i; j++)
printf("%d\t", j);
printf("\n");
}

Bi 3: Cho bit kt qu ca an chng trnh sau:


int i=10, s=0;
while(i>0)
{
if(i%2==0)
s+=i;
else
if(i>5)
s+=2*i;
i--;
}
printf("s = %d",s);

Bi 4: Cho bit kt qu ca an chng trnh sau:


int a=18, i=1;
do{
if(a%i==0)
printf("\t %d",i);

30
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

i++;
} while(i<=a);

Bi 5: Cho bit kt qu ca an chng trnh sau:


int a=11, b=16, i=a;
while(i<b)
{
if(i%2==0)
{
printf("\t %d", i);
break;
}
i++;
}

Bi 6: Cho bit kt qu ca an chng trnh sau:


int a=10, s=0, i=0;
while(i<a)
{
i++;
if(i%2==0)
continue;
else
s=s+i;
}
printf("s=%d",s);

Bi 7: Cho bit kt qu ca an chng trnh sau:


int i=1,s=0;
while(1)
{
s=s+i++;
if(i%2)
i=i+2;
else
i=i+1;
if(i>20) break;
}
printf("%d",s);

Bi 8: Vit chng trnh in ra mn hnh hnh ch nht c kch thc m n. V


d: Nhp m = 5, n = 4

* * * *
* * * *
* * * *
* * * *

31
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

* * * *

Bi 9: Vit chng trnh in ra mn hnh hnh ch nht rng kch thc m n. V


d: Nhp m = 5, n = 4

* * * *
* *
* *
* *
* * * *

Bi 10: Vit chng trnh in ra mn hnh tam gic vung cn c c cao h. V


d: Nhp h = 4

*
* *
* * *
* * * *

Bi 11: Vit chng trnh in ra mn hnh tam gic cn rng c cao h. V d:


Nhp h = 4

*
* *
* *
* * * *

Bi 12: Vit chng trnh in ra mn hnh tam gic cn c c cao h. V d: Nhp


h=4

*
* * *
* * * * *
* * * * * * *

Bi 13: Vit chng trnh in ra mn hnh tam gic cn rng c cao h. V d:


Nhp h = 4

*
* *
* *

32
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

* * * * * * *

Bi 14: Vit chng trnh nhp s nguyn dng n. Lit k n s nguyn t u tin.
Bi 15: Vit chng trnh nhp vo hai s nguyn dng a v b. Tm c s chung
ln nht v bi s chung nh nht ca a v b.
Bi 16: Vit chng trnh nhp vo mt s nguyn n gm ti a 10 ch s (4 bytes).
In ra mn hnh gi tr nh phn ca s trn.
Bi 17: Vit chng trnh m s c s ca s nguyn dng n. V d: n = 12 s
c s ca 12 l 6
Bi 18: Mt s hon thin l mt s c tng cc c s ca n (khng k n) bng
chnh n. Hy lit k cc s hon thin nh hn 5000. V d: s 6 l s han
thin v tng cc c s l 1+2+3=6.
Bi 19: Nhp vo ngy, thng, nm. Cho bit l ngy th my trong nm.
Bi 20: In ra dy s Fibo fn




1 n=1


fn = 1 n=2




fn1 + fn2

n>2

Bi tp luyn tp v nng cao

Bi 1: Ci t tt c cc lu v chng 1.
Bi 2: Nhp vo ngy, thng, nm. Kim tra xem ngy, thng, nm c hp
l hay khng, nu hp l cho bit ngy sau l bao nhiu. V d: Nhp
31/12/2003 Ngy sau 01/01/2004
Bi 3: Nhp vo ngy, thng, nm. Kim tra xem ngy, thng, nm c hp l
hay khng, nu hp l cho bit ngy trc l bao nhiu. V d: Nhp
01/01/2003 Ngy trc 31/12/2002
Bi 4: (*) Nhp vo ngy, thng, nm ca nm 2003. Hy kim tra xem d liu c
hp l hay khng? Nu hp l hy cho bit l ngy th my trong tun.
(hai, ba, t, , CN).(Hng dn: ly ngy 01 thng 01 nm 2003 l ngy
th t lm mc).
Bi 5: Nhp vo gi, pht, giy. Kim tra xem gi, pht, giy c hp l hay
khng, nu hp l cho bit gi sau 1 giy l bao nhiu. V d: Nhp

33
Chng 3 KIU D LIU C BN V CU TRC IU KHIN

01:59:59 Gi sau 1 giy 02:00:00


Bi 6: Nhp vo gi, pht, giy. Kim tra xem gi, pht, giy c hp l hay
khng, nu hp l cho bit gi trc 1 giy l bao nhiu. V d: Nhp
02:00:00 Gi trc 1 giy 01:59:59
Bi 7: Vit chng trnh in ra bng cu chng t 2 n 9.
Bi 8: (*) V hnh cnh qut sau vi h l chiu di cnh qut. V d h = 4

* * * * *
* * * * *
* * * * *
* * * * * * *
* * * * *
* * * * *
* * * * *

3.3 TM TT
Cu tun t, trc lp v r nhnh (la chn) l ba cu trc chnh hnh thnh nn
chng trnh. Da vo nhng cu trc iu khin ny ta c th xy dng thnh
nhng chng trnh phc tp hn. V vy phi nm r cch hot ng ca nhng
cu trc iu khin ny ci t ng yu cu bi ton. Khi s dng phi lu
iu kin thc hin hay kt thc ca mt thao tc no . Bn trong mt pht
biu iu khin phi l mt lnh hay mt khi lnh (khi lnh c t bn trong
cp du ngoc {}). Nhng bin khng ph thuc vo vng lp nn t bn ngoi
vng lp. Khi s dng cu trc iu khin lng nhau phi lu v tr m ngoc
hay ng ngoc cho hp l.

34
Chng 4 HM

4
HM

Chng ny trnh by cu trc ca mt chng trnh, cc bc xy dng ci t


chng trnh theo phng php th tc hm v mt s k thut lin quan.

4.1 L THUYT

4.1.1 Khi nim

Hm l mt on chng trnh c lp thc hin trn vn mt cng vic nht


nh sau tr v gi tr cho chng trnh gi n, hay ni cch khc hm l s
chia nh ca chng trnh. Hm c s dng khi
C mt cng vic ging nhau cn thc hin nhiu lc khc nhau.
Khi cn chia mt chng trnh ln phc tp thnh cc chng trnh nh
d qun l vic tnh ton v gii quyt vn cng nh d hiu.

V d 4.1

Mt chng trnh c s dng hm n gin

// Khai bo th vin
#include <stdio.h>
#include <conio.h>
// Khai bo bin ton cc
float x,y;
int n;
// Khai bo hm
float LuyThua(float x, int n);
// Hm chnh
void main()

35
Chng 4 HM

{
printf("Nhap x va n =");
scanf("%f%d", &x, &n);
y = LuyThua(x, n);
}
// Ci t hm
float LuyThua(float x, int n)
{
float y = 1;
for(int i=1; i<=n; i++)
y = y*x;
return y;
}

4.1.2 Cu trc mt chng trnh C

Phn khai bo

Bao gm cc
Khai bo th vin s dng
Khai bo hng s
Khai bo kiu d liu t nh ngha
Khai bo cc bin ton cc
Khai bo cc hm hay nguyn mu hm

Hm chnh main

Thc hin cc cng vic v cc li gi hm cn thit.

Cc hm

Thc hin cc cng vic xc nh.

4.1.3 Cch xy dng mt hm con

Khai bo hm
C php

<Kiu d liu tr v ca hm> <Tn hm>([danh sch cc tham s]);

Lu tham s trong nguyn mu hm c th b phn tn.

36
Chng 4 HM

Ci t hm
C php

<Kiu d liu tr v ca hm> <Tn hm>([danh sch cc tham s])


{
<cc cu lnh>
}

Gi hay thc thi hm

C php

<Tn hm>([danh sch cc tham s c truyn]);

C 3 cch truyn tham s:


Truyn bng gi tr (pass by value)
Tham s gi l tham tr
Truyn i s cho hm dng gi tr.
C th truyn hng, bin, biu thc.
c s dng khi khng c nhu cu thay i gi tr ca tham s sau
khi thc hin hm.
void Ham(int x)
{
...
y = x;
...
}
void main()
{
int a, b;
...
Ham(3);
Ham(a);
Ham(a+b);
...
}

Truyn bng a ch (pass by address)


Tham s gi l tham tr
Truyn i s cho hm dng a ch (con tr).
Ch truyn i s l bin.

37
Chng 4 HM

c s dng khi c nhu cu thay i hoc nhn gi tr ca i s sau


khi thc hin hm.
void Ham(int *x)
{
...
y = *x;
...
}
void main()
{
int a;
...
Ham(&a);
...
}

Truyn bng tham chiu (pass by reference)


Tham s gi l tham bin
Truyn i s cho hm dng tham chiu.
Ch truyn i s l bin.
c s dng khi c nhu cu thay i hoc nhn gi tr ca i s sau
khi thc hin hm.
void Ham(int &x)
{
...
y = x;
...
}
void main()
{
int a;
...
Ham(a);
...
}

Xc nh kiu d liu tr v ca hm

Xc nh da vo u ra (output) ca hm. Gm 2 loi:


Hm khng tr v gi tr: Nhng hm loi ny thng ri vo nhng nhm
chc nng: nhp/xut d liu, thng k, sp xp, lit k.

38
Chng 4 HM

S dng

void <Tn hm>([danh sch cc tham s])


{
<Khai bo cc bin cc b>
<Cc cu lnh hay li gi hm>
}

Hm tr v kiu d liu c bn hay kiu d liu c cu trc: Kiu d liu


ty theo mc ch ca hm cn tr v gi tr g thng qua vic phn tch
bi ton. Nhng hm loi ny thng c s dng trong cc trng hp:
m, kim tra, tm kim, tnh trung bnh, tng, tch,
S dng

<Kiu d liu> <Tn hm>([danh sch cc tham s])


{
<Kiu d liu> kq;
<Khai bo cc bin cc b>
<Cc cu lnh hay li gi hm>
return kq;
}

i vi nhng hm tr v nhiu loi gi tr cho tng trng hp c th (chng


hn nh kim tra: ng hay sai, so snh: bng, ln hn hay nh hn, ) th cn
ghi ch r gi tr tr v l g cho tng trng hp .

Xc nh tham s

Xc nh da vo u vo (output) ca hm. Lu
Tham s dng tham tr: Khng thay i hoc khng cn ly gi tr mi ca
tham s sau li gi hm. Tham s dng ny ch mang ngha l d liu u
vo.
Tham s dng tham tr v tham bin: C s thay i gi tr ca tham s
trong qu trnh thc hin v cn ly li gi tr sau khi ra khi hm. ng
dng ca tham s loi ny c th l d liu u ra (kt qu) hoc cng c
th va l d liu u vo va l d liu u ra.

39
Chng 4 HM

Xc nh bin cc b

L cc i lng trung gian c s dng trong hm

Xc nh tn hm

t tn theo quy c t tn trong C sao cho tn gi ng vi chc nng hay mc


ch thc hin ca hm v gi nh.

Cc v d

V d 4.2

Vit hm in ra mn hnh cc c s ca n
Phn tch hm:
Input: n l s nguyn dng
Output: khng c
Cng vic: In ra cc c s ca s ca n

void LietKeUocSo(unsigned int n)


{
for(int i=1; i<=n; i++)
if(n%i == 0)
printf("%u\t", i);
}

V d 4.3

Vit hm tnh tng S(n) = 1 + 2 + 3 + . . . + n, vi n l s nguyn dng


Phn tch bi ton:
Input: n l s nguyn dng
Output: S l tng ca 1 + 2 + 3 + ... + n
Cng vic: Tnh tng S

unsigned int TongS(unsigned int n)


{
unsigned int S=0;
int i=1;
while(i<=n)
{

40
Chng 4 HM

S+=i;
i++;
}
return S;
}

4.2 BI TP
Bi tp c bn

Bi 1: Ci t li tt c cc bi tp chng 2 theo phng php hm.


Bi 2: Vit chng trnh tnh din tch v chu vi ca hnh ch nht vi chiu di
v chiu rng c nhp t bn phm.
Bi 3: Vit chng trnh tnh din tch v chu vi hnh trn vi bn knh c nhp
t bn phm.
Bi 4: Nhp s nguyn dng n. Lit k tt c cc s nguyn t nh hn n.
Bi 5: Nhp s nguyn dng n. Lit k n s chnh phng u tin.
Bi 6: Nhp s nguyn dng n. m xem c bao nhiu s hon thin nh hn n.
Bi 7: Nhp s nguyn dng n (0 < n < 1000) v in ra cch c ca n. V d:
Nhp n = 105. In ra mn hnh: mot tram le nam.
Bi 8: Vit chng trnh tnh tin thu my dch v Internet v in ra mn hnh
kt qu. Vi d liu nhp vo l gi bt u thu (GBD), gi kt thc thu
(GKT), s my thu (SoMay).
a) iu kin cho d liu nhp: 6GBD<GKT21. Gi l s nguyn.
b) n gi: 2500 cho mi gi my trc 17:30 v 3000 cho mi gi my
sau 17:30.
Bi 9: Vit chng trnh tnh tin lng ngy cho cng nhn, cho bit trc gi vo
ca, gi ra ca ca mi ngi. Gi s rng:
a) Tin tr cho mi gi trc 12 gi l 6000 v sau 12 gi l 7500.
b) Gi vo ca sm nht l 6 gi sng v gi ra ca tr nht l 18 gi (Gi
s gi nhp vo nguyn).
Bi 10: Nhp vo 2 s nguyn p, q v tnh biu thc sau:

 12 ! 13  12 ! 13
p3 q 2 p3 q 2
 
q q
+ + + +
2 27 4 2 27 4

41
Chng 4 HM

Bi 11: Nhp vo 3 s thc a, b, c v kim tra xem chng c thnh lp thnh 3 cnh
ca mt tam gic hay khng? Nu c hy tnh din tch, chiu di mi ng
cao ca tam gic v in kt qu ra mn hnh.
a) Cng thc tnh din tch

p
s= (p (p a) (p b) (p c))

vi p l na chu vi ca tam gic


b) Cng thc tnh cc ng cao:

2s 2s 2s
ha = , hb = , hc =
a b c

Bi 12: Nhp vo 6 s thc a, b, c, d, e, f . Gii h phng trnh sau:



ax + by = c
dx + ey = f

Bi 13: Vit chng trnh nhp 2 s nguyn dng a, b. Tm USCLN v BSCNN ca


hai s nguyn .
Bi 14: Vit chng trnh tnh tng nghch o ca n giai tha.
Bi 15: Cho 2 s nguyn a, b. Vit hm hon v gi tr 2 s trn.
Bi 16: (*) Vit chng trnh nhp s nguyn dng n gm 5 ch s, kim tra xem
cc ch s n c phi l s i xng hay khng. V d: i xng: 13531
Khng i xng: 13921
Bi 17: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, m xem
n c bao nhiu ch s chn v bao nhiu ch s l.
Bi 18: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, m xem
n c bao nhiu ch s l s nguyn t.
Bi 19: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, tnh tng
cc c s dng ca n. V d, nhp n=6 Tng cc c s t 1 n n:
1+2+3+6=12.
Bi 20: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, tm c s
l ln nht ca n. V d: c s l ln nht ca 27 l 9.
Bi 21: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, kim tra

42
Chng 4 HM

xem cc ch s ca n c ton l hay ton chn khng.


Bi 22: (*) Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, sp xp
cc ch s ca n theo th t tng dn. V d: Nhp n=1536 Kt qu sau
khi sp xp: 1356.

Bi tp luyn tp v nng cao

Bi 1: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, sau


nhp mt s nguyn x, tm v tr xut hin ca ch s c gi tr x trong n.
V d: Nhp n=1526, x=2 Kt qu: Chu so 2 o vi tri thu 3.
Bi 2: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, kim tra
xem cc ch s ca n c c sp th t khng. V d, nhp n=1569 hoc
n=8521 th kt qu l c th t.
Bi 3: Vit chng trnh nhp 2 s a, b sao cho: s ln nht trong 2 s phi l mt
s dng v chia ht cho 7. Nu nhp sai phi yu cu nhp li cho n khi
ng.
Bi 4: Vit chng trnh nhp s nguyn dng n gm k ch s, k 5, tnh gi tr
trung bnh cc ch s chn trong n.
Bi 5: (*) Vit chng trnh in ra mn hnh ngy/thng/nm ca ngy hin ti,
cho php s dng cc phm mi tn ln, xung tng hoc gim mt ngy.
Bi 6: (*) Vit chng trnh in ra mn hnh gi:pht:giy hin ti, cho php s
dng cc phm mi tn ln, xung tng hoc gim mt giy.

4.3 TM TT
Trc khi xy dng mt hm ta phi xc nh mc ch ca hm l dng lm
g, trn c s , ta mi xc nh c cc thnh phn ca hm v xy dng
nguyn mu hm. Mi hm phi thc hin mt chc nng c lp v tch bit
vi cc hm khc (khng c lng nhau). i vi hm c gi tr tr v phi lu
kiu d liu phi tng ng kiu d liu c gi tr tr v v kiu d liu ca bin
c gn khi gi hm. Trng hp hm tr v t hai loi gi tr tr ln th phi
c dng ch thch cho trng hp tng ng khi gi hm bit c kt qu
(chng hn nh tm kim, kim tra, so snh,.v.v gi tr tr v c 2 trng hp: c

43
Chng 4 HM

hoc khng c phn t cn tm, tha iu kin kim tra hay khng? Do vy ta
phi quy c gi tr cho tng trng hp). Nn t tn hm sao cho gi nh c
chc nng, t tn theo quy tc nht nh trnh vic gi sai tn hm do ln
ln gia k t hoa v thng, c du gch ni gia cc t trong hm hay khng?
Khi gi hm phi truyn tham s, ng kiu d liu v ng th t ca tham
s.

44
Chng 5 KIU D LIU MNG MT CHIU

5
KIU D LIU MNG MT CHIU

Chng ny trnh by trnh by d liu kiu mng, cc thao tc nhp xut, cc k


thut thao tc trn mng. ng dng cc k thut ny trong vic ci t cc hm
tm kim, kim tra, xy dng mng, tch v ghp mng.

5.1 L THUYT
nh ngha 5.1. mng mt chiu l tp hp cc phn t c lu tr lin tc
v cc phn t ca mng phi cng kiu d liu.

Khai bo bin mng

C php

<Kiu d liu> <Tn mng> [<S phn t ti a ca mng>];

V d 5.1

Khai bo mng a c 100 s nguyn v mng b c 50 s thc

int a[100];
float b[50];

Truy xut phn t ca mng

Vi khi nim v cch khai bo nh trn ta c hnh dng ca mng mt chiu nh


sau:

45
Chng 5 KIU D LIU MNG MT CHIU

C php

<Tn mng>[<Ch s>]

V d 5.2

Khi to v xut mng mt chiu

#include <conio.h>
#include <stdio.h>
void main()
{
int a[4] = {5,9,3,8};
for(int i = 0; i < 4; i++)
printf(" a [ %d ] = %d \t", i, a[i]);
getch();
}

5.2 BI TP
K thut nhp xut mng mt chiu

V d 5.3

Vit chng trnh nhp xut mng mt chiu cc s nguyn.

#include <conio.h>
#include <stdio.h>
#define MAX 100

void NhapMang(int a[], int &n)


{
printf("Nhap so phan tu: ");
scanf(" %d ", &n);
for(int i = 0; i < n; i ++)
{
printf(" a [%d] = ", i);
scanf(" %d ", &a[i]);
}
}

void XuatMang(int a[], int n)


{
printf("\nNoi dung mang: ");

46
Chng 5 KIU D LIU MNG MT CHIU

for(int i = 0; i < n; i ++)


printf(" %d \t ", a[i]);
}

void main()
{
int a[MAX], n;
NhapMang(a,n);
XuatMang(a,n);
getch();
}

Bi 1: Vit chng trnh nhp xut mng mt chiu cc s thc.


Bi 2: Vit chng trnh khi to gi tr cc phn t l 0 cho mng mt chiu cc
s nguyn gm n phn t.
Bi 3: Vit chng trnh pht sinh ngu nhin mng mt chiu cc s nguyn m.
Bi 4: Vit chng trnh pht sinh ngu nhin mng mt chiu cc s nguyn sao
cho mng c th t tng dn (khng sp xp).
Bi 5: Vit chng trnh nhp mng cc s thc v xut cc phn t m trong
mng.
Bi 6: Vit chng trnh nhp mng cc s nguyn v xut cc phn t l c trong
mng.
Bi 7: Vit chng trnh nhp vo mng mt chiu cc s nguyn v xut ra cc
phn t chn nh hn 20.
Bi 8: Vit chng trnh nhp vo mng mt chiu cc s nguyn v xut ra mn
hnh cc phn t l s nguyn t.
Bi 9: Vit chng trnh nhp vo s nguyn n v lit k cc s nguyn t nh hn
n, nu mng khng tn ti s nguyn t no nh hn n th phi xut ra mt
cu thng bo.
Bi 10: Vit chng trnh nhp vo mng mt chiu cc s nguyn v xut ra mn
hnh cc phn t l s chnh phng nm ti nhng v tr l trong mng.

K thut t c hiu

K thut ny thng c p dng cho nhng bi ton kim tra hay nh


du.

47
Chng 5 KIU D LIU MNG MT CHIU

V d 5.4

Vit hm kim tra xem mng cc s nguyn c th t tng dn khng? (Tr


v 1: Nu mng tng dn, ngc li tr v 0).

int KiemTraTang(int a[], int n)


{
int flag = 1;
for(int i = 0; i < n-1; i ++)
if(a[i] > a[i+1]) // vi phm iu kin tng dn
{
flag = 0;
break;
}
return flag;
}

V d 5.5

Vit hm kim tra xem trong mng cc s nguyn c tn ti s nguyn l ln


hn 100 hay khng? (Tr v 1: Nu c tn ti s l v ln hn 100, ngc li
tr v 0).

int KiemTraLe(int a[], int n)


{
int flag = 0;
for(int i = 0; i < n; i ++)
if(a[i] % 2 != 0 && a[i][j] > 100) // @Gp phn t tho@
{
flag = 1;
break;
}
return flag;
}

K thut t lnh canh

K thut ny thng c p dng cho nhng bi tp v tm kim, lit k


theo mt iu kin nht nh no .

V d 5.6

48
Chng 5 KIU D LIU MNG MT CHIU

Vit hm tm v tr v gi tr ln nht trong mng mt chiu cc s nguyn.

int TimMax(int a[], int n)


{
int max, i = 1;
max = a[0];
while(i < n)
{
if(a[i] > max) max = a[i];
i++;
}
return max;
}

K thut tm kim trn mng mt chiu

V d 5.7

Vit hm tm phn t c gi tr x xut hin u tin trong mng mt chiu.


(Nu tm thy tr v v tr xut hin x, ngc li tr v -1)

int TimX(int a[], int n, int x)


{
for(int i = 0; i < n; i ++)
if(x==a[i])
return i;
return -1;
}

Bi 1: Vit hm tm v tr phn t c gi tr x xut hin cui cng trong mng.


Bi 2: Vit hm tm v tr ca phn t nh nht trong mng cc s nguyn.
Bi 3: Vit hm tm v tr ca phn t ln nht trong mng cc s nguyn.
Bi 4: Vit hm in v tr cc phn t nguyn t trong mng cc s nguyn.
Bi 5: Vit hm in v tr cc phn t nguyn t ln hn 23.
Bi 6: Vit hm tm v tr phn t m u tin trong mng. Nu khng c phn
t m tr v -1.
Bi 7: Vit hm tm v tr phn t m ln nht trong mng.
Bi 8: Vit hm tm v tr phn t dng u tin trong mng. Nu khng c phn
t m tr v -1.
Bi 9: Vit hm tm v tr phn t dng b nht trong mng.

49
Chng 5 KIU D LIU MNG MT CHIU

Bi 10: Vit hm in cc phn t l bi ca 3 v 5.


Bi 11: Vit hm tm s chn cui cng c trong mng, nu khng tn ti s chn
hm tr v -1.
Bi 12: Vit hm tm s l ln nht c trong mng, n u khng tn ti s l hm tr
v -1.
Bi 13: Vit hm tm v i ch phn t ln nht vi phn t nh nht trong mng.
Bi 14: Nhp vo x. Vit hm in ra mn hnh nhng phn t c gi tr t 1 n x
c trong mng.
Bi 15: Vit chng trnh nhp vo mt dy s a gm n s thc v dy s b gm m
s thc (m, n 100).
a) In ra nhng phn t ch xut hin trong dy a m khng xut hin
trong dy b.
b) In ra nhng phn t xut hin c hai dy.

K thut m phn t - tn sut

V d 5.8

Vit hm m cc phn t chia ht cho 5 trong mng cc s nguyn.

int Dem(int a[], int n)


{
int dem = 0;
for(int i = 0; i < n; i++)
if(a[i] % 5 == 0)
dem++;
return dem;
}

Bi 1: Vit hm m cc phn t m, dng trong mng.


Bi 2: Vit hm m cc phn t chn, l trong mng.
Bi 3: Vit hm m s ln xut hin ca phn t x trong mng.
Bi 4: Vit hm m cc phn t nh hn x trong mng.
Bi 5: Vit hm m cc phn t l s nguyn t trong mng.
Bi 6: Vit hm m cc phn t l s hon thin trong mng.
Bi 7: Vit hm m cc phn t l bi ca 3 v 5 trong mng cc s nguyn.

50
Chng 5 KIU D LIU MNG MT CHIU

K thut tnh tng - trung bnh

V d 5.9

Vit hm tnh tng cc phn t trong mng.

int TinhTong(int a[], int n)


{
int tong = 0;
for(int i = 0; i < n; i++)
tong = tong + a[i];
return tong;
}

V d 5.10

Vit hm tnh gi tr trung bnh cc phn t c gi tr m trong mng. i


vi hm tnh trung bnh c iu kin phi lu khi chia gi tr (c th mng
khng c phn t no tho iu kin, nu ta chia tc l chia cho 0).

float TinhTrungBinhAm(int a[], int n)


{
int tong = 0;
int spt=0;
for(int i = 0; i < n; i++)
if(a[i]<0)
{
tong = tong + a[i];
spt++;
}
if(spt==0) return 0;
return 1.0*tong/spt;
}

Bi 1: Vit hm tnh tng cc phn t chn trong mng.


Bi 2: Vit hm tnh tng cc phn t l trong mng cc s nguyn.
Bi 3: Vit hm tnh tng cc phn t nguyn t trong mng.
Bi 4: Vit hm tnh tng cc phn t nm v tr chn trong mng cc s nguyn.
Bi 5: Vit hm tnh tng cc phn t nm v tr nguyn t trong mng.
Bi 6: Vit hm tnh tng cc phn t chia ht cho 5 c trong mng.
Bi 7: Vit hm tnh tng cc phn t cc i trong mng cc s nguyn (phn t
cc i l phn t ln hn cc phn t xung quanh n). V d: 1 5 2 6 3 5

51
Chng 5 KIU D LIU MNG MT CHIU

186
Bi 8: Vit hm tnh tng cc phn t cc tiu trong mng cc s nguyn (phn
t cc tiu l phn t nh hn cc phn t xung quanh n). V d: 6 4 2 9
537158
Bi 9: Vit hm tnh tng cc phn t l bi ca 3 v 5 trong mng cc s nguyn.
Bi 10: Vit hm tnh tng cc phn t l s hon thin trong mng cc s nguyn.
Bi 11: Vit hm tnh gi tr trung bnh ca cc s hon thin trong mng cc s
nguyn.

K thut sp xp

V d 5.11

Vit hm sp xp mng theo th t tng dn.

void HoanVi(int &a, int &b)


{
int tam = a;
a = b;
b = tam;
}

void SapTang(int a[], int n)


{
for(int i = 0; i < n-1; i++)
for(int j = i+1; j < n; j++)
if(a[i] > a [j])
HoanVi(a[i], a[j]);
}

Bi 1: Vit hm sp xp mng theo th t gim dn.


Bi 2: Vit hm sp xp mng theo th t tng dn ca cc phn t l s nguyn
t.
Bi 3: Vit hm sp xp cc phn t l tng dn.
Bi 4: Vit hm sp xp cc phn t chn gim dn.
Bi 5: Vit hm sp xp cc phn t chn nm bn tri theo th t tng dn cn
cc phn t l bn phi theo th t gim dn.
Bi 6: Vit hm sp xp cc phn t m gim dn t tri sang phi, phn t dng
tng dn t phi sang tri.

52
Chng 5 KIU D LIU MNG MT CHIU

K thut xo phn t

Duyt mng t tri sang phi. Xut pht t v tr cn xo tin hnh di ln lt


cc phn t v pha trc cho n khi kt thc mng, sau gim kch thc
mng. Vn t ra l tm v tr cn xa theo iu kin bi ton ri thc hin
xa.

V d 5.12

Vit hm xo phn t u tin ca mng.

void XoaDau(int a[], int &n)


{
for(int i = 0; i < n-1; i++)
a[i] = a[i+1];
n--;
}

V d 5.13

Vit hm xo phn t ti v tr vitri cho trc trong mng.

void XoaTaiViTri(int a[], int &n, int vitri)


{
for(int i = vitri; i < n-1; i++)
a[i] = a[i+1];
n--;
}

Bi 1: Vit hm xo phn t ti v tr l trong mng.


Bi 2: Vit hm xo phn t c gi tr ln nht trong mng.
Bi 3: Nhp vo gi tr x. Vit hm xo tt c cc phn t c gi tr nh hn x.
Bi 4: Nhp vo gi tr x. Vit hm xo phn t c gi tr gn x nht.

K thut thm/chn phn t

Duyt mng t phi sang tri. Xut pht t cui mng tin hnh y ln lt
cc phn t v pha sau cho n v tr cn chn, chn phn t cn chn vo v tr
chn v tng kch thc mng. Trc khi chn ta phi xc nh v tr cn chn
theo iu kin bi ton.

53
Chng 5 KIU D LIU MNG MT CHIU

V d 5.14

Thm phn t c gi tr x vo cui mng.

void ChenCuoi(int a[], int &n, int x)


{
a[n]=x;
n++;
}

V d 5.15

Chn phn t c gi tr x vo mng ti v tr (vitri) cho trc

void ChenTaiViTri(int a[], int &n, int x, int vitri)


{
for(int i = n; i >vitri; i--)
a[i] = a[i-1];
a[vitri] = x;
n++;
}

Bi 1: Vit hm chn phn t c gi tr x vo v tr u tin ca mng.


Bi 2: Vit hm chn phn t c gi tr x vo pha sau phn t c gi tr ln nht
trong mng.
Bi 3: Vit hm chn phn t c gi tr x vo trc phn t c gi tr l s nguyn
t u tin trong mng.
Bi 4: Vit hm chn phn t c gi tr x vo pha sau tt c cc phn t c gi
tr chn trong mng.

K thut tch v ghp mng

V d 5.16

Cho mng a kch thc n (n chn). Tch mng a thnh 2 mng b v c sao
cho: b c mt na s phn t u ca mng a, mt na s phn t cn li
a vo mng c.

void TachMang(int a[], int n, int b[], int &m, int c[], int &l)
{

54
Chng 5 KIU D LIU MNG MT CHIU

int k=n/2;
m=l=0;
for(int i=0; i<k; i++)
{
b[m++]=a[i];
c[l++]=a[k+i]
}
}

V d 5.17

Cho 2 mng s nguyn a v b kch thc ln lt l n v m. Vit chng trnh


ni mng b vo cui mng a.

void GhepMang(int a[], int &n, int b[], int m)


{
for(int i=0; i<m; i++)
a[n+i]=b[i];
n=n+m;
}

V d 5.18

Cho 2 mng s nguyn a v b kch thc ln lt l n v m. Vit chng trnh


ni xen k (an xen) ln lt cc phn t mng a v b vo mng c.
a ln lt tng phn t ca mng a v mng b vo mng c, tng ch s
tng ng. Nu mt trong hai mng ht trc th chp tt c cc phn t cn
li ca mng cha ht vo mng c. t i l ch s ca mng a; j: ch s ca
mng b v k l ch s ca mng c.

void GhepMang(int a[], int &n, int b[], int m, int c[], int &k)
{
int i=0, j=0;
k=0;
while(i<n && j<m)
{
c[k++]=a[i++];
c[k++]=b[j++];
}
while(i<n)
c[k++]=a[i++];
while(j<m)

55
Chng 5 KIU D LIU MNG MT CHIU

c[k++]=b[j++];
}

Bi 1: Vit chng trnh tch 1 mng cc s nguyn thnh 2 mng a v b, sao cho
mng a cha ton s l v mng b cha ton s chn. V d: mng ban u:
1 3 8 2 7 5 9 0 10 th mng a: 1 3 7 5 9 v mng b: 8 2 10
Bi 2: Cho 2 mng s nguyn a v b kch thc ln lt l n v m. Vit chng
trnh ni 2 mng trn thnh mng c theo nguyn tc chn u mng v l
cui mng. V d: mng a: 3 2 7 5 9 v mng b: 1 8 10 4 12 6 th mng
c: 6 12 4 10 2 8 3 1 7 5 9

Bi tp luyn tp v nng cao

Bi 1: Vit chng trnh nhp vo mng A gm n phn t, trong qu trnh nhp


kim tra cc phn t nhp vo khng c trng, nu trng thng bo v
yu cu nhp li.
Bi 2: Vit hm tnh tng ca tng dy con gim c trong mng.
Bi 3: (*) Cho mng cc s nguyn a gm n phn t (n 30000) v s dng
k n. Hy ch ra s hng ln th k ca mng. V d: mng a: 6 3 1 10 11
18 v k = 2 th kt qu l 10
Bi 4: (*) Cho 2 dy A, B cc s nguyn (kch thc dy A nh hn dy B). Hy
kim tra xem A c phi l con ca B hay khng?
Bi 5: Vit hm lit k cc b 4 s a, b, c, d trong mng cc s nguyn (c t nht
4 phn t v i mt khc nhau) sao cho a + b = c + d.
Bi 6: (*) Vit chng trnh tnh trung bnh cng ca cc tng cc dy tng dn
c trong mng cc s nguyn. V d: 1 2 3 4 2 3 4 5 6 4 5 6 th trung bnh
= 15.
Bi 7: Vit chng trnh tnh tng tt c cc phn t xung quanh trn mng cc
s nguyn (phn t xung quanh l hai phn t bn cnh cng lai bng chnh
n, v d: 1 3 2 th 1, 2 l hai phn t xung quanh ca 3). V d: 1 3 2 5 3
9 6 tng 17
Bi 8: (**) Vit chng trnh nhp vo hai s ln a, b nguyn (a, b c t 20 ch s
tr ln). Tnh tng, hiu, tch, thng ca hai s trn.
Bi 9: Vit hm tnh tng cc phn t l s Amstrong (s Amstrong l s c c

56
Chng 5 KIU D LIU MNG MT CHIU

im nh sau: s c k ch s, tng ca cc lu tha bc k ca cc k s


bng chnh s . V d: 153 l s c cc k s 13 + 53 + 33 = 153 l mt s
Amstrong).
Bi 10: Vit hm tm v xa tt c cc phn t trng vi x trong mng mt chiu
cc s nguyn, nu khng tn ti phn t x trong mng th tr v -1.
Bi 11: Vit hm xo tt c nhng phn t trng nhau trong dy ch gi li mt
phn t trong . V d: 1 6 2 3 2 4 2 6 5 th k tqu 1 6 2 3 4 5
Bi 12: (**) Vit hm xo nhng phn t sao cho mng kt qu c th t tng dn
v s ln xo l t nht.
Bi 13: Cho dy a gm n s nguyn c th t tng dn. Nhp vo mt phn t
nguyn x, vit hm chn x vo dy sao cho dy vn c th t tng dn
(khng sp xp).
Bi 14: Vit chng trnh tm s l nh nht ln hn mi s chn c trong mng.
Bi 15: Vit hm tm gi tr chn nh nht nh hn mi gi tr l trong mng cc
s nguyn.
Bi 16: Vit hm tm phn t xut hin nhiu nht trong mng cc s nguyn.
Bi 17: Vit chng trnh m v lit k cc mng con tng dn trong mng mt
chiu cc s nguyn. V d: 6 5 3 2 3 4 2 7 cc dy con tng dn l 2 3 4 v
27
Bi 18: Vit chng trnh tm mng con tng dn c tng ln nht trong mng mt
chiu.
Bi 19: (*) Vit chng trnh nhp vo mt dy s a gm n s nguyn (n 100).
Tm v in ra dy con tng di nht. V d: Nhp dy a: 1 2 3 6 4 7 8 3 4 5
6 7 8 9 4 5 th dy con tng di nht: 3 4 5 6 7 8 9
Bi 20: (**) Vit chng trnh tch 1 mng cc s nguyn thnh 2 mng a v b, sao
cho kt qu thu c l:
a) Mng a cha ton s l tng dn.
b) Mng b cha ton s chn gim dn
c) Khng dng thut ton sp xp
Hng dn: Tm v tr chn thch hp khi trch phn t t mng ban u.
V d: mng ban u: 9 3 8 2 7 5 1 0 10 th Mng a: 1 3 5 7 9 Mng b: 10
82

57
Chng 5 KIU D LIU MNG MT CHIU

Bi 21: (**) Vit chng trnh in ra tam gic Pascal (dng mng mt chiu).
Bi 22: Vit chng trnh nhp vo dy s a gm n s thc (n 100) v dy s b
gm m s thc (m 100).
a) Hy sp xp hai dy theo th t tng dn.
b) (*) Trn 2 dy trn thnh dy c sao cho dy c vn c th t tng.
c) Xut dy a, b, c ra mn hnh.
Bi 23: (*) Cho mng c c n phn t (n < 200), cc phn t l cc ch s trong
h m c s 16 (Hexa). Hy tch mng c ra cc mng con theo iu kin
sau: cc mng con c gii hn bi hai ln xut hin th hai ca con s
trong dy. V d: 123A4518B23 c cc dy con l 123A451, 23A4518B2,
23A4518B23
Bi 24: (**) Cho hai s nguyn dng A, B. Hy xc nh hai s C, D to thnh t
hai s A, B sao cho C l s ln nht, D l s nh nht. Khi gch i mt
s ch s trong C (D), th cc s cn li gi nguyn to thnh A, cc ch
s b i gi nguyn to thnh B. V d: A = 52568, B = 462384 th C =
54625682384, D = 45256236884.
Bi 25: Vit chng trnh nhp vo dy s a gm n s nguyn (n 100).
a) Hy o ngc dy . V d: Nhp a: 3 4 5 2 0 4 1 th dy sau khi
o: 1 4 0 2 5 4 3
b) (*) Hy kim tra xem dy cho c th t cha (dy c gi l th
t khi l dy tng hoc dy gim).
Bi 26: Cho mng a c n phn t hy cho bit mng ny c i xng hay khng.
Bi 27: (**) Hy vit chng trnh pht sinh ngu nhin mng cc s nguyn gm
10000 phn t, mi phn t c gi tr t 0 n 32000 v xy dng hm
thng k s ln xut hin cc phn t trong mng, sau cho bit phn
t no xut hin nhiu ln nht. V d: mng: 5 6 11 4 4 5 4 th 5 xuat
hien 2 lan, 6 xuat hien 1 lan, 11 xuat hien 1 lan, 4 xuat hien 3 lan v
4 xuat hien nhieu lan nhat
Bi 28: Cho mng a c n phn t. Nhp vo s nguyn dng k, dch phi xoay
vng mng a k ln. V d: mng a: 5 7 2 3 1 9 v k = 2 th dch phi xoay
vng mng a: 1 9 5 7 2 3

58
Chng 5 KIU D LIU MNG MT CHIU

5.3 TM TT
D liu kiu mng dng cho vic biu din nhng thng tin c cng kiu d liu
lin tip nhau. Khi ci t bi tp mng mt chiu nn xy dng thnh nhng
hm chun dng li cho cc bi tp khc. Cc thao tc trn mng u theo
quy tc nht nh, chng ta c th ng dng mng trong vic biu din s ln,
dng bng tra, kh qui,.v.v

59
Chng 6 KIU D LIU CHUI K T

6
KIU D LIU CHUI K T

Chui k t l trng hp c bit ca mng mt chiu. Chng ny m t mt


s hm th vin thao tc trn chui v cc k thut ci t x l trn chui.

6.1 L THUYT
nh ngha 6.1. Chui k t
L mt dy cc phn t, mi phn t c kiu k t.
c kt thc bng k t '\0'. Do khi khai bo di ca chui lun
lun khai bo d 1 phn t cha k t '\0'.

Khai bo bin chui


C php

char <Tn chui> [<S k t ti a ca chui + 1>];

V d 6.1

Khai bo 1 chui k t chuoi c ti a 24 k t

char chuoi[25];

Hm nhp chui
scanf(...)
char *gets(char *s);

60
Chng 6 KIU D LIU CHUI K T

V d 6.2

Nhn cc k t nhp t phm cho n khi nhn phm ENTER v a vo s

void main()
{
char chuoi[80];
printf("Nhap vao chuoi:");
gets(chuoi);
printf("Chuoi vua nhap la: %s\n", chuoi);
}

Hm xut chui
printf(...)
int puts(const char *s);

V d 6.3

Xut chui ra mn hnh.

void main()
{
char chuoi[] = "Vi du xuat chuoi\n";
puts(string);
}

Cc hm v chui trong th vin string.h

Hm Chc nng
int strlen(char s[]); tr v chiu di ca chui
strcpy(char dest[], char src[]); sao chp chui src vo chui dest
strncpy(char dest[], char src[], int n); chp n k t u tin t chui src
vo chui dest
strcat(char s1[],char s2[]); ni chui s2 vo sau chui s1
strncat(char s1[],char s2[],int n); ni n k t u tin ca chui s2
vo sau chui s1
int strcmp(char s1[],char s2[]); so snh th t chui s1 v s2
int strncmp(char s1[],char s2[], int n); so snh n k t u tin ca s1 v s2

61
Chng 6 KIU D LIU CHUI K T

int strcmpi(char s1[],char s2[], int n); so snh khng phn bit ch hoa v
ch thng
char *strchr(char s[], char c); tm xut hin u tin ca c trong s
char *strstr(char s1[], char s2[]); tm xut hin u tin ca s2 trong
s1

char *strtok(char s1[], char s2[]); tch s1 thnh cc token da vo s2

V d 6.4

Nhp vo mt chui k t, xut ra mn hnh chui b o ngc th t cc


k t. V d, nhp vo: Le Hoang thai v xut ra mn hnh: iahT gnaoH eL

#include<stdio.h>
#include<conio.h>
#include<string.h>

void DaoChuoi(char *s1, char *s2)


{
int l=strlen(s1);
for(int i=0; i<l; i++)
s2[i]=s1[l-i-1];
s2[i]='\0';
}

void main()
{
char s1[100], s2[100];
printf("Nhap vao chuoi ky tu: ");
gets(s1);
DaoChuoi(s1, s2);
printf("Ket qua sau khi dao nguoc chuoi: %s", s2);
}

6.2 BI TP
Bi tp c bn

Bi 1: Cho bit kt qu ca on chng trnh sau:


char s[20]="Truong DHKHTN TPHCM", *p;
p = strtok(s, " ");
while(p != NULL)
{

62
Chng 6 KIU D LIU CHUI K T

printf("%s\n",p);
p = strtok(NULL, " ");
}

Bi 2: Cho bit kt qu ca on chng trnh sau:


char s1[30]="Truong DHKHTN", s1[30]="Tp. HCM", s3[30], s[30];
strcpy(s, s1);
strcpy(s3,"aeiou");
strcat(s, s2);
int n=strlen(s), k=0;
printf("Chuoi: %s",s);
for(int i=0; i<n; i++)
{
if(strchr(s3, s[i]))
k++;
}
printf("\nKet qua: %d", k);

Bi 3: Vit chng trnh nhp vo mt chui k t, m s k t c trong chui.


Bi 4: Vit chng trnh m c bao nhiu khong trng trong chui.
Bi 5: Vit chng trnh nhp vo mt chui, hy loi b nhng khong trng tha
trong chui.
Bi 6: Vit chng trnh nhp vo hai chui s1 v s2 , ni chui s2 vo s1 . Xut
chui s1 ra mn hnh.
Bi 7: i tt c cc k t c trong chui thnh ch thng (khng dng hm
strlwr).
Bi 8: i tt c cc k t trong chui sang ch in hoa (khng dng hm struppr).
Bi 9: Vit chng trnh i nhng k t u tin ca mi t thnh ch in hoa.
Bi 10: Vit chng trnh i ch xen k 1 ch hoa v 1 ch thng. V d: nhp
ABCDEfgh i thnh AbCdEfGh
Bi 11: Vit chng trnh o ngc cc k t trong chui. V d: nhp ABCDE, xut
ra mn hnh l EDCBA
Bi 12: Vit chng trnh tm kim 1 k t xem c trong chui hay khng, nu c
xut ra v tr ca t .
Bi 13: Vit 1 chng trnh m mt k t xut hin bao nhiu ln trong chui.
Bi 14: Vit chng trnh tm kim tn trong chui h tn. Nu c th xut ra l
tn ny nhp ng, ngc li thng bo l nhp sai.
Bi 15: Vit chng o v tr ca t u v t cui. V d: nhp bo an co xuat ra

63
Chng 6 KIU D LIU CHUI K T

co an bo
Bi 16: Vit hm ct chui h tn thnh chui h lt v chui tn. V d: chui h
tn l: Le Hoang Thai ct ra 2 chui l chui h lt Le Hoang v chui tn l
Thai
Bi 17: Nhp mt chui bt k, sau hi ngi dng cn tch bt u t u
trong chui tr v sau. V d: Nhp chui TRUONG DAI HOC KHOA HOC TU
NHIEN. Ngi nhp mun tch bt u t ch KHOA th s xut ra chui
KHOA HOC TU NHIEN ra mn hnh.
Bi 18: Vit hm kim tra xem chui c i xng hay khng?.
Bi 19: Vit hm tra xem trong chui c k t s hay khng nu c tch ra thnh
mt mng s ring.
Bi 20: Nhp mt chui bt k, yu cu nhp 1 k t mun xa. Thc hin xa tt
c nhng k t trong chui.
Bi 21: Vit chng trnh tm kim xem k t no xut nhin nhiu nht trong
chui.
Bi 22: Vit 1 chng trnh xo mt t no trong chui. V d: Chui ban
u KHOA CONG NGHE THONG TIN v t THONG, v kt qu xut ra: KHOA CONG
NGHE TIN

Bi tp luyn tp v nng cao

Bi 1: i cc t u cu sang ch hoa v nhng t khng phi u cu sang


ch thng. V d: nGuYen vAN a i thnh: Nguyen Van A
Bi 2: (*) Vit chng trnh o ngc th t cc t c trong chui V d: Nhp
Truong DHKHTN TpHCM Xut ra mn hnh l: TpHCM DHKHTN Truong
Bi 3: Nhp 1 chui bt k, lit k xem mi k t xut hin my ln.
Bi 4: Vit hm kim tra xem trong 2 chui c bao nhiu k t ging nhau.
Bi 5: Vit chng trn mnh chy t tri qua phi mn hnh.
Bi 6: Vit 1 chng trnh chn 1 t bt c v tr no m ngi dng yu cu.
Bi 7: (*) Vit chng trnh nhp vo mt chui m xem chui c bao nhiu t.
Cc t cch nhau bng khong trng, du chm cu: du chm (.), du phy
(,), du chm phy (;), du hi (?) v du chm than (!).
Bi 8: (**) Vit chng trnh hin th mt chui k t. Chng trnh cho php di

64
Chng 6 KIU D LIU CHUI K T

chuyn d u nhy sang tri, sang phi, ln dng hay xung dng bng phm
mi tn, chn hay xo k t ti v tr du nhy.

6.3 TM TT
Cng ging nh kiu mng mt chiu, thao tc truy xut cc phn t trn chui
hon ton tng t. Bn cnh , kiu d liu ny cn c ci t sn mt s
hm th vin rt hu ch nn trong qu trnh thao tc trn chui nn khi ci t
ta c gng tn dng ti a nhng hm lin quan. Khng nn s dng hm scanf
nhp chui trong trng hp chui d liu nhp vo c cha khong trng.
Nu nhp chui pha sau hm scanf nn chn hm fflush hoc hm flushall gia
scanf v gets xa vng m, trnh trng hp chng trnh b qua hm gets
do trong vng m cn lu k t xung dng ca phm ENTER. Khi thao tc
trn chui lu phi m bo chui c kt thc bng k t kt thc \0.

65
Chng 7 KIU D LIU MNG HAI CHIU

7
KIU D LIU MNG HAI CHIU

y l kiu d liu dng biu din d liu kiu bng, kiu d liu ny rt thch
hp cho cc bi ton lin quan n ma trn, th hoc nh v video s

7.1 L THUYT
nh ngha 7.1. Mng hai chiu l tp hp cc phn t c t chc theo dng
v ct

Khai bo bin mng

C php

<Kiu d liu phn t> <Tn mng>[<S dng>][<S ct>];

V d 7.1

Khai bo mng hai chiu A v b

int A[20][10];
float b[10][10];

Truy xut phn t ca mng

C php

<tn mng>[<ch s dng>][<ch s ct>]

66
Chng 7 KIU D LIU MNG HAI CHIU

Khai bo kiu mng

C php

typedef <Kiu d liu phn t> <Tn kiu mng>[<S dng>][<S ct>];

V d 7.2

Khai bo kiu mng hai chiu MANG2D cha cc s nguyn int c ti a 100
dng v 100 ct

#define MAX 100


typedef int MANG2D[100][100];

7.2 BI TP
Bi tp c bn

K thut nhp/xut mng hai chiu

V d 7.3

Nhp v xut mng hai chiu

void Nhap(MANG2D a, int &d, int &c)


{
printf("\nNhap so dong: ");
scanf(" %d", &d);
printf("\nNhap so cot: ");
scanf("%d", &c);
for(int i = 0; i < d; i ++)
for(int j = 0; j < c; j ++)
{
printf(" a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}

void Xuat(MANG2D a, int d, int c)


{
printf("\nNoi dung ma tran:\n");
for(int i = 0; i < d; i++)
{

67
Chng 7 KIU D LIU MNG HAI CHIU

for(int j = 0; j < c; j++)


printf(" \t %d ", a[i][j]);
printf("\n");
}
}

Bi 1: Vit hm nhp ma trn cc s nguyn dng (nhp sai bo li v khng cho


nhp).
Bi 2: Vit hm nhp/xut ma trn cc s thc.
Bi 3: Vit hm in ra nhng phn t c k s tn cng l 5.
Bi 4: Vit chng trnh khi to gi tr cc phn t l ngu nhin cho ma trn
cc s nguyn kch thc m n.
Bi 5: Vit hm to ma trn a cc s nguyn gm 9 dng 14 ct. Trong phn
t a[i][j] = i j
Bi 6: Vit hm in tam gic Pascal vi chiu cao h. V d: h = 5

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

K thut t c hiu

V d 7.4

Vit hm kim tra xem trong ma trn cc s nguyn c tn ti cc s nguyn


l ln hn 100 khng?

int KiemTraLe(MANG2D a, int d, int c)


{
int flag = 0; // tra ve 1 neu co nguoc lai tra ve 0
for(int i = 0; i < d; i ++)
for(int j = 0; j < c; j++)
if(a[i][j] % 2 != 0 && a[i][j] > 100)
{
flag = 1;
break;

68
Chng 7 KIU D LIU MNG HAI CHIU

}
return flag;
}

K thut t lnh canh

V d 7.5

Vit hm tm phn t nh nht trong ma trn.

int TimMin(MANG2D a, int d, int c)


{
int min = a[0][0];
for(int i = 0; i < d; i ++)
for(int j = 0; j < c; j ++)
if(a[i][j] < min)
min = a[i][j];
return min;
}

K thut tnh tng

V d 7.6

Vit hm tnh tng cc phn t trong ma trn.

int TinhTong(MANG2D a, int d, int c)


{
int tong = 0;
for(int i = 0; i < d; i ++)
for(int j = 0; j < c; j ++)
tong + = a[i][j];
return tong;
}

Bi 1: Vit hm tnh tng cc phn t trn cng mt dng.


Bi 2: Vit hm tnh tng cc phn t trn cng mt ct.
Bi 3: Vit hm tnh tng cc phn t chn c trong ma trn.
Bi 4: Vit hm tnh tng cc phn t l s nguyn t c trong ma trn.
Bi 5: Vit hm tnh tng cc s hon thin trong ma trn cc s nguyn.
Bi 6: Vit hm tnh tng cc gi tr ln nht trn mi dng.
Bi 7: Vit hm tnh gi tr trung bnh ca cc phn t nh nht trn mi ct.

69
Chng 7 KIU D LIU MNG HAI CHIU

K thut tm kim

Bi 1: Vit hm tm v tr phn t ln nht trong ma trn cc s nguyn.


Bi 2: Vit hm tm v tr phn t nh nht trong ma trn cc s nguyn.
Bi 3: Vit hm tm v tr phn t chn cui cng trong ma trn cc s nguyn.
Bi 4: Vit hm tm phn t m l ln nht trong ma trn.
Bi 5: Vit hm tm phn t chn dng v nh nht trong ma trn.
Bi 6: Vit hm tm s hon thin u tin trong ma trn cc s nguyn.
Bi 7: Vit hm tm s hon thin ln nht trong ma trn cc s nguyn.
Bi 8: Vit hm tm v tr phn t nguyn t cui cng trong ma trn cc s nguyn.
Bi 9: Vit hm tm trong 2 ma trn cc s nguyn, nhng phn t ging nhau.
Bi 10: Vit hm tm v lit k nhng phn t cc i trong ma trn (mt phn t
c coi l cc i khi n ln hn cc phn t xung quanh n).
Bi 11: Vit hm tm dng c tng ln nht trong ma trn cc s thc.
Bi 12: Vit hm tm ct c tng nh nht trong ma trn cc s nguyn.

K thut m

V d 7.7

Vit hm m cc phn t chn trong ma trn.

int DemChan(MANG2D a, int d, int c)


{
int dem = 0;
for(int i = 0; i < d; i ++)
for(int j = 0; j < c; j ++)
if(a[i][j] % 2 == 0)
dem ++;
return dem;
}

Bi 1: Vit hm m cc gi tr m, dng trong ma trn cc s thc.


Bi 2: Vit hm m cc gi tr chn, l trong ma trn cc s nguyn.
Bi 3: Vit hm m s ln xut hin ca phn t x trong ma trn cc s thc.
Bi 4: Vit hm m cc gi tr nh hn x trong ma trn cc s thc.
Bi 5: Vit hm m cc phn t nguyn t trong ma trn cc s nguyn.
Bi 6: Vit hm m cc gi tr cc i trong ma trn cc s nguyn.

70
Chng 7 KIU D LIU MNG HAI CHIU

Bi 7: Vit hm m cc gi tr cc tiu trong ma trn cc s nguyn.


Bi 8: Vit hm m cc cc tr trong ma trn cc s nguyn (mt phn t c
coi l cc tr khi n l gi tr cc i hay cc tiu).
Bi 9: Vit hm m cc gi tr l s hon thin trong ma trn cc s nguyn.

K thut sp xp

V d 7.8

Vit hm sp xp ma trn tng dn t trn xung di v t tri sang phi


khng dng mng ph.

void SapTang(MANG2D a, int d, int c)


{
for(int i = 0; i <= d*c-2; i ++)
for(int j = 0; j <= d*c-1; j ++)
if(a[i/c][i%c] < a[j/c][j%c])
{
int tmp = a[i/c][i%c];
a[i/c][i%c] = a[j/c][j%c];
a[j/c][j%c] = tmp;
}
}

Bi 1: Vit hm sp xp ma trn theo th t tng dn t trn xung di v t


tri qua phi theo phng php dng mng ph.
Hng dn: ma trn sang mng mt chiu, sp xp trn mng mt chiu
theo th t tng dn, sau chuyn ngc mng mt chiu thnh ma trn
kt qu.
Bi 2: Vit hm sp xp ma trn theo th t gim dn t trn xung di v t
tri sang phi.
Bi 3: Vit hm sp xp cc dng trn ma trn theo th t tng dn.
Bi 4: Vit hm sp xp cc ct trn ma trn theo th t gim dn.
Bi 5: Vit hm sp xp ma trn theo ng zig zag ngang. V d:

5 6 3 1 2 3
1 8 7 6 5 4
2 4 9 7 8 9

71
Chng 7 KIU D LIU MNG HAI CHIU

Bi 6: Vit hm sp xp ma trn theo ng zig zag cho. V du:

1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

Bi 7: Vit hm sp xp ma trn theo ng xon c t ngoi vo trong theo chiu


kim ng h. V d:

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

K thut thm - xo - thay th

Bi 1: Vit hm xo mt dng i trn ma trn.


Bi 2: Vit hm xo mt ct j trn ma trn.
Bi 3: Vit hm xo dng c tng ln nht trn ma trn.
Bi 4: Vit hm hon v dng c tng ln nht vi dng c tng nh nht.
Bi 5: Vit hm tm v thay th cc phn t chn trong ma trn bng c s nh
nht ca n.
Bi 6: Vit hm thay th nhng phn t c gi tr x thnh phn t c gi tr y
trong ma trn (x, y nhp t bn phm)

Mng vung v cc k thut x l

nh ngha 7.2. Mng vung l mng hai chiu c s dng v s ct bng nhau.

nh ngha 7.3. Cho mt mng vung


ng cho chnh (loi 1): ch s dng = ch s ct
ng cho song song vi ng cho chnh (loi 1): ch s dng - ch s ct
= hng s
ng cho ph (loi 2): ch s dng + ch s ct = s dng (hoc s ct)

72
Chng 7 KIU D LIU MNG HAI CHIU

ng cho song song vi ng cho ph (loi 2): ch s dng + ch s ct


= hng s

V d 7.9

Cho mng vung A, in ra cc phn t nm trn ng cho song song vi


ng cho chnh v xut pht t (io, jo)

for(i = io, j = jo; i < n; i ++, j ++)


printf("%4d",A[i][j]);

V d 7.10

Cho mng vung A, in ra cc phn t nm trn ng cho song song vi


ng cho ph v xut pht t (io, jo)

for(i = io, j = jo; i < n && j > = 0; i ++, j --)


printf("%4d",A[i]][j]);

Bi 1: Vit chng trnh in ra cc phn t nm trn 2 ng cho chnh v ph.


Bi 2: Vit hm in ra cc phn t nm pha trn ng cho ph ca ma trn
vung cc s nguyn.
Bi 3: Vit hm in ra cc phn t nm pha di ng cho ph ca ma trn
vung cc s nguyn.
Bi 4: Vit hm in ra cc phn t nm pha trn ng cho chnh ca ma trn
vung cc s nguyn.
Bi 5: Vit hm in ra cc phn t nm pha di ng cho chnh ca ma trn
vung cc s nguyn.
Bi 6: Vit hm tm phn t ln nht nm trn ng cho chnh ca ma trn
vung.
Bi 7: Vit hm in cc s nguyn t nm trn ng cho ph ca ma trn vung.
Bi 8: Vit hm tm phn t nh nht trn mi ng cho loi 2 ca ma trn.
Bi 9: Vit hm tnh tng cc phn t nm trn ng cho chnh ca ma trn
vung.
Bi 10: Vit hm tm ng cho c tng ln nht trong cc ng cho loi 1.
Bi 11: Vit hm tnh tng cc gi tr nh nht nm trn tng ng cho loi 2.

73
Chng 7 KIU D LIU MNG HAI CHIU

Bi 12: Vit hm n cc phn t nguyn t trn ng cho chnh ca ma trn


vung cc s nguyn.
Bi 13: Vit hm m cc gi tr chn trn ng cho chnh ca ma trn vung cc
s nguyn.
Bi 14: Vit hm m cc gi tr l bi ca 3 v 5 trn ng cho chnh ca ma
trn cc s nguyn.
Bi 15: Vit hm m cc gi tr nguyn t trn 2 ng cho (chnh, ph) ca ma
trn vung cc s nguyn.
Bi 16: Cho ma trn vung, vit hm sp xp tng dn cc phn t nm trn cc
ng cho song song vi ng cho chnh.
Bi 17: Vit chng trnh nhp mt ma trn vung cc s nguyn, v thc hin
nhng cng vic sau:
a) Sp xp cc phn t nm trn cc ng cho loi 1 tng dn
b) Sp xp cc phn t nm trn cc ng cho loi 2 gim dn.
c) Sp xp vi iu kin: cc phn t trn ng cho chnh tng, cc
phn t trn cc ng cho song song vi ng cho chnh gim.

Bi tp luyn tp v nng cao

Bi 1: Vit chng trnh tnh tng, tch ca hai ma trn cc s nguyn.


Bi 2: Vit hm kim tra xem ma trn vung cc s nguyn c i xng qua ng
cho chnh hay khng.
Bi 3: Vit hm kim tra xem trong ma trn vung cp n c hng no trng nhau
hay khng, nu c th ch r nhng hng no. (trng gi tr v v tr).
Bi 4: Vit chng trnh nhp vo ma trn vung kch thc n n. Hy vit hm
thc hin nhng cng vic sau:
a) In ra cc phn t trn 4 ng bin ca ma trn.
b) Tnh tng cc phn t trn bin.
Bi 5: (*) Vit chng trnh xoay ma trn cc s thc 90o ngc chiu kim ng
h. V d:

74
Chng 7 KIU D LIU MNG HAI CHIU

1 2 3 4 4 8 12 16
5 6 7 8 3 7 11 15

9 10 11 12 2 6 10 14
13 14 15 16 1 5 9 13

Bi 6: Vit chng trnh dch phi xoay vng mt ct trong ma trn cc s thc.
Bi 7: Vit chng trnh dch xung xoay vng mt dng trong ma trn cc s thc.
Bi 8: (*) Cho ma trn Amn cc s nguyn hy pht sinh ma trn B sao cho B l
ma trn lt ngc ca ma trn A. V d:

1 2 3 4 4 3 2 1
5 6 7 8 8 7 6 5

9 10 11 12 12 11 10 9
13 14 15 16 16 15 14 13

Bi 9: (**) Cho ma trn Amn hy pht sinh ma trn B sao cho phn t B(i, j) l
trung bnh cng ca cc phn t trong hnh vung 3 3 tm ti (i, j). V
d

1 5 2 6 3 2 4 4
4 2 3 6 4 4 4 4

8 7 9 1 5 6 6 7
10 2 12 13 6 8 7 8

Bi 10: (**) Cho ma trn cc s nguyn dng Amn . Hy xy dng ma trn Bmn .
Sao cho phn t B(i, j) l s ln nht trong vung 3 3 tm ti (i, j) ca
A. V d:

1 5 2 6 5 5 6 6
4 2 3 6 8 9 9 9

8 7 9 1 10 12 13 13
10 2 12 13 10 12 13 13

Bi 11: (**) Cho ma trn Amn . Hy xy dng ma trn Bmn vi phn t B(i, j)
c xc nh theo qui tc sau: ti v tr (i, j) trn mng A k hai tia vung

75
Chng 7 KIU D LIU MNG HAI CHIU

gc vi nhau, to thnh vi trc honh mt gc 45o t trn xung di;


B(i, j) l tng ca tt c cc s ca vng mt phng to bi hai tia ny v
cc cnh ca bng. V d:

1 3 2 25 30 23
6 4 3 13 18 15
2 5 7 2 5 7

Bi 12: (**) Cho ma trn vung Amn . Hy xy dng mng Bmn bng cch: phn
t B(i, j) l s ln nht trong tam gic vung v t A(i, j) ti ng cho
chnh. V d:

1 3 2 1 4 7
6 4 3 6 4 7
2 5 7 7 7 7

Bi 13: (*) Vit chng trnh hin th ng h in t (gm gi pht), vi gi ly


t h thng v ng h c cp nht theo pht.
Hng dn: To 1 ma trn gi tr gm 0 hoc 1, v tr no cn hin th th
gn gi tr l 1, ngc li c gi tr l 0. Sau mi pht cp nht li ma trn
v hin th ln mn hnh. V d: 01 gi 25 pht

1111 11 11111111 11111111


11 11 11 11 11 11
11 11 11 11111111 11111111
11 11 11 11 11 11
1111 11 11111111 11111111

Bi 14: Nhp vo mng hai chiu gm n dng v m ct cc s nguyn. Hy tm


phn t ln nht trn mi dng v ng thi nh nht trn mi ct, hoc
ln nht trn mi ct v ng thi nh nht trn mi dng. C bao nhiu
phn t nh th? V d:

3 6 2 1
4 7 6 9
5 15 8 7

Bi 15: Vit chng trnh to ngu nhin mt ma trn cc s nguyn trong khong

76
Chng 7 KIU D LIU MNG HAI CHIU

[0, ..., 50], tm nhng phn t cc i (l phn t ln hn cc phn t xung


quanh). V d:

2 6 8 4
9 7 5 3
6 2 8 1

Bi 16: (**) Cho ma trn cc s nguyn Amn (m, n 3). Hy tm ma trn con
(3 3) c tng ln nht. V d:

1 2 3 4
6 7 8
5 6 7 8
10 11 11
9 10 11 11
14 15 16
13 14 15 16

Bi 17: Nhp ma trn vung cp n n (n < 10). In ra cc phn t ca ma trn ny


theo hng ca ng cho chnh:
Bi 18: (**) Hy in cc s t 1 n n2 vo ma trn cp n (n > 2), ch xt trng
hp n l s l vi tnh cht P l tng cc s bng nhau.
Hng dn: Ma phng ca mt bng vung cp n, trong mi nhn mt
gi tr sao cho, mi hng, mi ct v mi ng cho u tho mn mt tnh
cht P no cho trc. V d:

2 7 6
9 5 1
4 3 8

Bi 19: (*) Vit hm in ma trn cc s nguyn dng theo qui lut c m t nh


sau: cc phn t pha trn ng cho ph l gi tr bnh phng, cc gi
tr t ng cho ph tr xung l cc s nguyn t. V d:

1 9 36 100 31
4 25 81 37 17
16 64 41 19 7
49 43 23 11 3
47 29 13 5 2

77
Chng 7 KIU D LIU MNG HAI CHIU

Bi 20: Cho ma trn vung a cp n (n l v 3 n 15), mi phn t u c gi tr


nguyn dng. Hy xy dng hm kim tra xem ma trn a c phi l ma
phng hay khng?
Bi 21: (**) Vit chng trnh gii bi ton 8 hu. Hy t 8 con hu trn bn c
8 8 sao cho chng khng n nhau (2 hu n nhau khi cng hng, cng ct
v cng nm trn ng cho).
Hng dn: Dng ma trn 8 8 lu bn c. Mi c 3 trng thi:
a) C hu 1
b) trng 0
c) khng dc i -1
Bi 22: (**) Vit chng trnh gii bi ton m i tun. Hy i con m 64 lt i
trn bn c 8 8 sao cho mi ch i qua mt ln (xut pht t mt bt
k)
Hng dn: ng ti mt trn bn c con m c th i c 1 trong 8
hng sau. Khai bo 8 hng i ca m nh sau:
typedef struct DIEM
{
int x, y;
};
DIEM huongdi[8]={{-2,-1},{-2,1},{-1,2},{1,2},
{2,1},{2,-1},{1,-2},{-1,-2}};

Trong mi thnh phn ca huongdi l lch ca dng v ct so vi v


tr ca con m. V d: huongdi[0] c lch 2 dng v 1 ct. (Gi tr m
biu th lch v bn tri ct hay hng ln ca dng). Chn v tr i k
tip sao cho v tr phi gn vi bin hay gc nht (tc s ng i c th
i l t nht).
Bi 23: Vit chng trnh gii bi ton 8-puzzle. Cho ma trn vung 3 3 gm cc
s nguyn t 0 n 8 trong 0 l trng. Bi ton t ra l hy a ma
trn mt trng thi u v trng thi ch, mi ln ch dch chuyn c
1 . V d:

2 1 0 1 2 3
Trng thi u 3 8 7 Trng thi ch 4 5 6
6 4 5 7 8 0

78
Chng 7 KIU D LIU MNG HAI CHIU

7.3 TM TT
Kiu d liu mng hai chiu c ng dng rng ri trong cc bi ton v tm
ng i trong th, x l nh, x l nhng d liu dng bng.

79
Chng 8 KIU D LIU CU TRC

8
KIU D LIU CU TRC

Cung cp c ch cho php khai bo cc kiu d liu mi gii quyt theo yu cu


ca bi ton da vo nhng kiu d liu c bn c ci t sn trong ngn ng
lp trnh.

8.1 L THUYT
nh ngha 8.1. Kiu d liu cu trc (struct) l gom nhm cc phn t c th
khng cng kiu d liu.

Khi bo kiu d liu cu trc


C php

struct <Tn cu trc> {


<Cc d liu thnh phn>
};

Ngoi ra, ta c th dng t kho typedef nh ngha mt tn mi cho kiu d


liu c.
C php

typedef struct {
<Cc d liu thnh phn>
} <Tn kiu d liu cu trc>;

V d 8.1

80
Chng 8 KIU D LIU CU TRC

Kiu d liu v ngy DATE gm cc thnh phn


Th (thu): chui c ti a 4 k t.
Ngy (ngay): s nguyn 1 byte.
Thng (thang): s nguyn 1 byte.
Nm (nam): s nguyn 2 bytes.
Ta nh ngha cu trc SDATE

struct SDATE {
char thu[5];
unsigned char ngay;
unsigned char thang;
int nam;
};

hoc kiu d liu cu trc DATE

typedef struct SDATE {


char thu[5];
unsigned char ngay;
unsigned char thang;
int nam;
} DATE;

Khai bo bin cu trc

Khi ta nh ngha kiu d liu tc l ta c mt kiu d liu mi, mun s dng


ta phi khai bo bin. C php khai bo kiu d liu cng ging nh cch khai
bo ca cc kiu d liu chun.
C php

struct <tn cu trc> <tn bin>;

hoc

<tn kiu d liu cu trc> <tn bin>;

V d 8.2

Khai bo bin x c kiu cu trc SDATE

81
Chng 8 KIU D LIU CU TRC

struct SDATE x;

Khai bo bin x c kiu DATE

DATE x;

Lu kiu cc thnh phn ca mt cu trc cng c th l kiu d cu trc.

V d 8.3

nh ngha kiu d liu ca hc sinh HOCSINH gm:


M s hc sinh (MSHS): chui c ti a 5 k t.
H tn (hoten): chui c ti a 30 k t.
Ngy thng nm sinh (ngaysinh): kiu DATE.
a ch (diachi): chui c ti a 50 k t.
Gii tnh (phai): chui c ti a 3 k t.
im trung bnh (diemtb): s thc.
Ta nh ngha kiu HOCSINH nh sau:

typedef struct HOCSINH {


char MSHS[6];
char hoten[31];
DATE ngaysinh;
char diachi[51];
unsigned char phai[4];
float diemtb;
};

Truy xut thnh phn

C php

<Tn bin cu trc>.<Tn thnh phn>

V d 8.4

Truy xut thnh phn ngay ca bin x

DATE x; // khai bo bin x kieu DATE


x.ngay = 5; // gn ngay bng 5

82
Chng 8 KIU D LIU CU TRC

V d 8.5

Vit chng trnh nhp vo to hai im trong mt phng v tnh tng hai
to ny.

#include <conio.h>
#include <stdio.h>
//khai bo mt kiu d liu DIEM gm ta x v y
typedef struct {
int x;
int y;
} DIEM;

void Nhap (DIEM &d)


{
printf("\nNhap vao tao do diem\n");
printf("Hoanh do: ");
scanf("%d", &d.x);
printf("Tung do: ");
scanf("%d", &d.y);
}

void Xuat(DIEM d)
{
printf("\nToa do diem: (%d, %d)",d.x,d.y);
}

DIEM Tong(DIEM d1,DIEM d2)


{
DIEM temp;
temp.x = d1.x + d2.x;
temp.y = d1.y + d2.y;
return Temp;
}

void main()
{
DIEM A, B, AB; // khai bao 3 diem A, B, AB;
Nhap (A);
Xuat (A);
Nhap (B);
Xuat (B);
printf("\n Tong cua hai diem vua nhap la: ");
AB = Tong(A, B);
Xuat(AB);
getch();
}

83
Chng 8 KIU D LIU CU TRC

Mng cu trc

Cch khai bo tng t nh mng mt chiu hay ma trn (Kiu d liu by


gi l kiu d liu c cu trc).
Cch truy cp phn t trong mng cng nh truy cp trn mng mt chiu
hay ma trn. Nhng do tng phn t c kiu cu trc nn phi ch nh r
cn ly thnh phn no, tc l phi truy cp n thnh phn cui cng c
kiu l d liu c bn (xem li bng cc kiu d liu c bn).

K thut vit chng trnh c mng cu trc

Do kiu d liu c cu trc thng cha rt nhiu thnh phn nn khi vit chng
trnh loi ny ta cn lu :
Xy dng hm x l cho mt kiu cu trc.
Mun x l cho mng cu trc, ta gi li hm x l cho mt kiu cu trc
c xy dng bng cch dng vng lp.

V d 8.6

Cho mt lp hc gm n hc sinh (n 50). Thng tin ca mt hc sinh c


m t trong v d trc. Hy vit chng trnh nhp v xut danh sch hc
sinh sau m xem c bao nhiu hc sinh c ln lp (iu kin c ln
lp l im trung bnh 5.0). Cch lm:
Trc ht ta phi xy dng hm nhp v xut cho 1 hc sinh.
Xy dng hm nhp v xut ngy thng nm (Kiu d liu DATE).
Sau mi xy dng hm nhp v xut cho danh sch hc sinh.

#define MAX 50
typedef struct {
char thu[5];
unsigned char ngay;
unsigned char thang;
int nam;
} DATE;
typedef struct {
char MSHS[6];
char hoten[31];
struct DATE ngaysinh;
char diachi[51];

84
Chng 8 KIU D LIU CU TRC

unsigned char phai[4];


float diemtb;
} HOCSINH;
void NhapNamSinh(DATE &d);
void XuatNamSinh(DATE d);
void Nhap1HS(HOCSINH &hs);
void Xuat1HS(HOCSINH hs);
void NhapDSHS(HOCSINH lh[], int &n);
void XuatDSHS(HOCSINH lh[], int n);
int DemHSLenLop(HOCSINH lh[], int n);

void main()
{
HOCSINH lh[MAX]; // Khai bo mng c ti a 50 hc sinh
int n, sohsdau;
NhapDSHS(lh, n);
XuatDSHS(lh, n);
sohsdau = DemHSLenLop(lh, n);
printf("\nSo luong hoc sinh duoc len lop la: %d", sohsdau);
getch();
}

void NhapNamSinh(DATE &d)


{
printf("\nNhap vao ngay: ");
scanf("%u", &d.ngay);
printf("\nNhap vao thang: ");
scanf("%u", &d.thang);
printf("\nNhap vao nam: ");
scanf("%d", &d.nam);
}

void XuatNamSinh(DATE d)
{
printf("%02u / %02u / %4d", d.ngay, d.thang, d.nam);
}

void Nhap1HS(HOCSINH &hs)


{
flushall(); // Xoa vung dem
printf("\nNhap ma so hoc sinh: ");
gets(hs.MSHS);
printf("\nNhap ho ten hoc sinh: ");
gets(hs.hoten);
printf("\nNhap ngay thang nam sinh: ");
flushall(); // Xoa vung dem
NhapNamSinh(hs.ngaysinh);
printf("\nNhap vao dia chi: ");

85
Chng 8 KIU D LIU CU TRC

flushall(); // Xoa vung dem


gets(hs.diachi);
printf("\nPhai: ");
gets(hs.phai);
printf("\nNhap vao diem trung binh: ");
flushall();
scanf("%f", &hs.diemtb);
}

void NhapDSHS(HOCSINH lh[], int &n)


{
printf("\nNhap vao so luong hoc sinh: ");
scanf("%d", &n);
for(int i=0; i<n; i++)
{
printf("\nNhap vao thong tin cua hoc sinh thu %d:\n", i+1);
Nhap1HS(lh[i]); //Goi ham nhap thong tin 1 hoc sinh
}
}

void Xuat1HS(HOCSINH hs)


{
printf("\nMa so hoc sinh: %s", hs.MSHS);
printf("\nHo ten hoc sinh: %s", hs.hoten);
printf("\nNgay thang nam sinh: ");
XuatNamSinh(hs.ngaysinh);
printf("\nDia chi: %s", hs.diachi);
printf("\nPhai: %s", hs.phai);
printf("\nDiem trung binh: %2.2f", hs.diemtb);
}

void XuatDSHS(HOCSINH lh[], int n)


{
for(int i=0; i<n; i++)
{
printf("\n\nThong tin hoc sinh thu %d:", i+1);
Xuat1HS(lh[i]); //Goi ham xuat thong tin 1 hoc sinh
}
}

int DemHSLenLop(HOCSINH lh[], int n)


{
int d=0;
for(int i=0; i<n; i++)
if(lh[i].diemtb>=5.0)
d++;
return d;
}

86
Chng 8 KIU D LIU CU TRC

Kt qu v d khi chy chng trnh:

Nhap vao thong tin cua hoc sinh thu 1:


Nhap ma so hoc sinh: 02313
Nhap ho ten hoc sinh: Nguyen Van A
Nhap ngay thang nam sinh:
Nhap vao ngay: 12
Nhap vao thang : 03
Nhap vao nam: 1980
Nhap vao dia chi: 60 Phan Dang Luu Q.Phu Nhuan
Phai: Nam Nhap vao diem trung binh: 6.5

Nhap vao thong tin cua hoc sinh thu 2:


Nhap ma so hoc sinh: 03852
Nhap ho ten hoc sinh: Ly Thi B
Nhap ngay thang nam sinh:
Nhap vao ngay: 05
Nhap vao thang : 12
Nhap vao nam: 1981
Nhap vao dia chi: 24 Ly Tu Trong Q.1
Phai: Nu Nhap vao diem trung binh: 3.5

Thong tin hoc sinh thu 1:


Ma so hoc sinh: 02313
Ho ten hoc sinh: Nguyen Van A
Ngay thang nam sinh: 12 / 03 / 1980
Dia chi: 60 Phan Dang Luu Q.Phu Nhuan
Phai: Nam
Diem trung binh: 6.50

Thong tin hoc sinh thu 2:


Ma so hoc sinh: 03852
Ho ten hoc sinh: Ly Thi B
Ngay thang nam sinh: 05 / 12 / 1981

87
Chng 8 KIU D LIU CU TRC

Dia chi: 24 Ly Tu Trong Q.1


Phai: Nu Diem trung binh: 3.50
So luong hoc sinh duoc len lop la: 1

V d 8.7

Cho mt mng cc phn s (PHANSO) gm n phn t (n 50). Hy vit chng


trnh nhp v xut danh sch cc phn s sau tm phn s c gi tr ln
nht, tng v tch cc phn s v nghch o gi tr cc phn s trong mng.
Cch lm:
Trc ht ta phi xy dng hm nhp v xut cho 1 phn s.
Xy dng hm tnh tng, hiu, tch, thng, rt gn, so snh v nghch
o cho 2 phn s.
Sau mi xy dng hm nhp, xut, tnh tng, tch cho mng cc phn
s.

#define MAX 100


typedef struct {
int tu, mau;
} PHANSO;
void NhapPS(PHANSO &ps);
void XuatPS(PHANSO ps);
void NhapMangPS(PHANSO dsps[], int &n);
void XuatMangPS(PHANSO dsps[], int n);
PHANSO TimMax(PHANSO dsps[], int n);
int KiemTra(PHANSO ps);
//Tra ve 0: Neu khong hop le
//Tra ve 1: Neu hop le
int USCLN(int a, int b); PHANSO RutGon(PHANSO ps);
PHANSO NghichDao(PHANSO ps);
PHANSO Nhan(PHANSO ps1, PHANSO ps2);
PHANSO Chia(PHANSO ps1, PHANSO ps2);
PHANSO Tru(PHANSO ps1, PHANSO ps2);
PHANSO Cong(PHANSO ps1, PHANSO ps2);
int SoSanh(PHANSO ps1, PHANSO ps2);
//Tra ve 0: ps1=ps2
//Tra ve 1: ps1>ps2
//Tra ve -1: ps1<ps2
PHANSO TongCacPS(PHANSO dsps[], int n);
PHANSO TichCacPS(PHANSO dsps[], int n);
void NghichDaoCacPS(PHANSO dsps[], int n);

88
Chng 8 KIU D LIU CU TRC

void main()
{
int n;
PHANSO a[MAX], max, s, p;
NhapMangPS(a, n);
printf("\nMang cac phan so vua nhap: ");
XuatMangPS(a, n);
max=TimMax(a, n);
printf("\nPhan so co gia tri lon nhat: ");
XuatPS(max);
s=TongCacPS(a, n);
printf("\nTong gia tri cac phan so co trong mang: ");
XuatPS(s);
p=TichCacPS(a, n);
printf("\nTich gia tri cac phan so co trong mang: ");
XuatPS(p);
NghichDaoCacPS(a, n);
printf("\nMang phan so sau khi nghich dao cac phan tu: ");
XuatMangPS(a, n);
getch();
}

void NhapPS(PHANSO &ps)


{
do {
printf("\nNhap tu so: ");
scanf("%d", &ps.tu);
printf("\nNhap mau so: ");
scanf("%d", &ps.mau);
if(!KiemTra(ps))
printf("\nMau so khong duoc bang 0, nhap lai phan so\n");
else
break;
} while(1);
ps=RutGon(ps);
}

void XuatPS(PHANSO ps)


{
printf("%d", ps.tu);
if(ps.tu&&ps.mau!=1)
printf("/%d", ps.mau);
}

void NhapMangPS(PHANSO dsps[], int &n)


{
printf("\nNhap so luong phan so: ");
scanf("%d", &n);

89
Chng 8 KIU D LIU CU TRC

for(int i=0; i<n; i++)


{
printf("\nNhap vao phan so thu %d: ", i+1);
NhapPS(dsps[i]);
}
}

void XuatMangPS(PHANSO dsps[], int n)


{
for(int i=0; i<n; i++)
{
XuatPS(dsps[i]);
printf("\t");
}
}

int KiemTra(PHANSO ps)


{
if(ps.mau==0) return 0;
return 1;
}

int USCLN(int a, int b)


{
a=abs(a);
b=abs(b);
while(a!=b)
{
if(a>b) a=a-b;
else b=b-a;
}
return a;
}

PHANSO RutGon(PHANSO ps)


{
int us;
if(ps.tu==0) return ps;
us=USCLN(ps.tu, ps.mau);
ps.tu=ps.tu/us;
ps.mau=ps.mau/us;
return ps;
}

PHANSO NghichDao(PHANSO ps)


{
PHANSO kq;
kq.tu=ps.mau;

90
Chng 8 KIU D LIU CU TRC

kq.mau=ps.tu;
return kq;
}

PHANSO Nhan(PHANSO ps1, PHANSO ps2)


{
PHANSO kq;
kq.tu=ps1.tu*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
return kq;
}

PHANSO Chia(PHANSO ps1, PHANSO ps2)


{
PHANSO kq;
kq=Nhan(ps1, NghichDao(ps2));
return kq;
}

PHANSO Tru(PHANSO ps1, PHANSO ps2)


{
PHANSO kq;
kq.tu=ps1.tu*ps2.mau-ps1.mau*ps2.tu;
kq.mau=ps1.mau*ps2.mau; kq=RutGon(kq);
r return kq;
}

PHANSO Cong(PHANSO ps1, PHANSO ps2)


{
PHANSO kq;
kq.tu=ps1.tu*ps2.mau+ps1.mau*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
return kq;
}

int SoSanh(PHANSO ps1, PHANSO ps2)


{
ps1=RutGon(ps1);
ps2=RutGon(ps2);
if(ps1.tu==ps2.tu&&ps1.mau==ps2.mau)
return 0;
if(ps1.tu*ps2.mau>ps2.tu*ps1.mau)
return 1;
return -1;
}

91
Chng 8 KIU D LIU CU TRC

PHANSO TimMax(PHANSO dsps[], int n)


{
PHANSO max;
max=dsps[0];
for(int i=1; i<n; i++)
if(SoSanh(dsps[i], max)==1)
max=dsps[i];
return max;
}

PHANSO TongCacPS(PHANSO dsps[], int n)


{
PHANSO s=dsps[0];
for(int i=1; i<n; i++)
{
s=Cong(s, dsps[i]);
}
return s;
}

PHANSO TichCacPS(PHANSO dsps[], int n)


{
PHANSO p=dsps[0];
for(int i=1; i<n; i++)
{
p=Nhan(p, dsps[i]);
}
return p;
}

void NghichDaoCacPS(PHANSO dsps[], int n)


{
for(int i=0; i<n; i++)
{
dsps[i]=NghichDao(dsps[i]);
}
}

Kt qu v d khi chy chng trnh:

Nhap so luong phan so: 5


Nhap vao phan so thu 1:
Nhap tu so: 1
Nhap mau so: 3

92
Chng 8 KIU D LIU CU TRC

Nhap vao phan so thu 2:


Nhap tu so: 7
Nhap mau so: 4

Nhap vao phan so thu 3:


Nhap tu so: 9
Nhap mau so: 7

Nhap vao phan so thu 4:


Nhap tu so: 5
Nhap mau so: 6

Nhap vao phan so thu 5:


Nhap tu so: 4
Nhap mau so: 7

Mang cac phan so vua nhap: 1/3 7/4 9/7 5/6 4/7
Phan so co gia tri lon nhat: 7/4
Tong gia tri cac phan so co trong mang: 401/84
Tich gia tri cac phan so co trong mang: 5/14
Mang phan so sau khi nghich dao cac phan tu: 3 4/7 7/9 6/5
7/4

8.2 BI TP
Bi tp c bn

Bi 1: Vit chng trnh s dng con tr cu trc hin th gi, pht, giy ra
mn hnh, v tnh khong cch gia 2 mc thi gian.
Bi 2: Vit chng trnh s dng con tr cu trc th hin ngy, thng, nm ra
mn hnh, v tnh khong cch gia 2 ngy.
Bi 3: Vit chng trnh khai bo kiu d liu th hin mt s phc. S dng kiu
ny vit hm tnh t ng, hiu, tch ca hai s phc.
Bi 4: Vit chng trnh khai bo kiu d liu biu din mt phn s. Hy vit

93
Chng 8 KIU D LIU CU TRC

hm thc hin nhng cng vic sau:


a) Tnh tng, hiu, tch, thng hai phn s.
b) Rt gn phn s.
c) Qui ng hai phn s.
d) So snh hai phn s.
Bi 5: Vit chng trnh khai bo kiu d liu biu din mt hn s. Hy vit
hm thc hin nhng cng vic sau:
a) i hn s sang phn s
b) Tnh tng, tch hai hn s
Bi 6: Vit chng trnh khai bo kiu d liu biu din mt im trong h ta
0xy. Hy vit hm thc hin cc cng vic sau:
a) Tm nhng im i xng ca n qua tung , honh , to tm.
b) Hy tnh tng, hiu, tch ca hai im trong mt phng to 0xy.
c) Tnh khong cch gia hai im.
Bi 7: Cho mt hnh tr c cc thng tin sau: BanKinh (bn knh hnh tr kiu s
thc), ChieuCao (chiu cao hnh tr kiu s thc). Hy thc hin cc cng
vic sau.
a) Nhp d liu cho hnh tr trn.
b) Tnh din tch xung quanh, din tch ton phn, th tch hnh tr.

Bi tp luyn tp v nng cao

Bi 1: Vit chng trnh to mt mng cc s phc. Hy vit hm tnh tng, tch


cc s phc c trong mng.
Bi 2: Vit chng trnh to mt mng cc phn s. Hy vit hm thc hin cc
cng vic sau:
a) Tnh tng tt c cc phn s (kt qu di dng phn s ti gin)
b) Tm phn s ln nht, phn s nh nht.
c) Sp xp mng tng dn.
Bi 3: Vit chng trnh khai bo kiu d liu STACK (c ch LIFO). Vit hm
lm nhng cng vic sau:
a) Kim tra STACK rng
b) Kim tra STACK y

94
Chng 8 KIU D LIU CU TRC

c) Thm phn t vo STACK


d) Ly phn t ra khi STACK
Bi 4: T chc d liu qun l sinh vin bng cu trc mu tin trong mt mng
N phn t, mi phn t c cu trc nh sau:
M sinh vin.
Tn.
Nm sinh.
im ton, l, ho, im trung bnh.
Vit chng trnh thc hin nhng cng vic sau:
a) Nhp danh sch cc sinh vin cho mt lp hc.
b) Xut danh sch sinh vin ra mn hnh.
c) Tm sinh vin c im trung bnh cao nht.
d) Sp xp danh sch lp theo th t tng dn ca im trung bnh.
e) Sp xp danh sch lp theo th t gim dn ca im ton.
f) Tm kim v in ra cc sinh vin c im trung bnh ln hn 5 v khng
c mn no di 3.
g) Tm sinh vin c tui ln nht.
h) Nhp vo tn ca mt sinh vin. Tm v in ra cc thng tin lin quan
n sinh vin (nu c).
Bi 5: T chc d liu qun l danh mc cc b phim VIDEO, cc thng tin lin
quan n b phim ny nh sau:
Tn phim (ta phim).
Th loi (3 loi: hnh s, tnh cm, hi).
Tn o din.
Tn in vin nam chnh.
Tn din vin n chnh.
Nm sn xut.
Hng sn xut
Vit chng trnh thc hin nhng cng vic sau:
a) Nhp vo b phim mi cng vi cc thng tin lin quan n b phim
ny.
b) Nhp mt th loi: In ra danh sch cc b phim thuc th loi ny.

95
Chng 8 KIU D LIU CU TRC

c) Nhp mt tn nam din vin. In ra cc b phim c din vin ny ng.


d) Nhp tn o din. In ra danh sch cc b phim do o din ny dn
dng.
Bi 6: Mt th vin cn qun l thng tin v cc u sch. Mi u sch bao gm
cc thng tin sau: MaSSach (m s sch), TenSach (tn sch), TacGia (tc
gi), SL (s lng cc cun sch ca u sch). Vit chng trnh thc hin
cc chc nng sau:
a) Nhp vo mt danh sch cc u sch (ti a l 100 u sch)
b) Nhp vo tn ca quyn sch. In ra thng tin y v cc sch c
tn , nu khng c th tn ca quyn sch th bo l: Khng Tm
Thy.
c) Tnh tng s sch c trong th vin.
Bi 7: Vit chng trnh to mt mng danh sch cc my tnh ca mt ca hng,
thng tin ca mt my tnh bao gm:
Loi my
Ni sn xut
Thi gian bo hnh
a) Vit hm nhp mt dy cc loi my tnh c thng tin nh trn.
b) Hy vit hm thng k xem c bao nhiu my c thi gian bo hnh l
1 nm.
c) In ra danh sch cc my tnh c xut x t M.
Bi 8: lp rp mt my vi tnh hon chnh cn phi c ti thiu 10 linh kin
loi A v c th lp b sung thm vo khong ti a 8 linh kin loi B. Ti
mt ca hng vi tnh cn qun l bn hng cc loi linh kin t i ca hng.
Thng tin v mt loi linh kin gm c: Tn linh kin, quy cch, loi, n
gi loi 1 (cht lng tt - s nguyn), n gi loi 2 (cht lng thng -
s nguyn). Vit chng trnh thc hin nhng cng vic sau:
a) Nhp vo thng tin v cc linh kin c ca hng.
b) Xut danh sch cc linh kin nhp theo th t tng dn ca loi
linh kin v tn linh kin.
c) Cho bit c 10 linh kin loi A cn thit lp rp my hay cha?
Bi 9: Mt ca hng cn qun l cc mt hng, thng tin mt mt hng bao gm:

96
Chng 8 KIU D LIU CU TRC

M hng.
Tn mt hng.
S lng.
n gi.
S lng tn.
Thi gian bo hnh (tnh theo n v thng).
a) Hy nhp vo mt danh sch cc mt hng.
b) Tm mt hng c s lng tn nhiu nht.
c) Tm mt hng c s lng tn t nht.
d) Tm mt hng c gi tin cao nht.
e) In ra nhng mt hng c thi gian bo hnh ln hn 12 thng.
f) Sp xp cc mt hng theo th t tng dn ca s lng tn.
Bi 10: Vit chng trnh qun l h s nhn vin trong mt cng ty, chng trnh
thc hin nhng cng vic sau:
H v tn.
Phi.
Ngy sinh.
a ch.
Lng c bn.
Bo him x hi.
Thng.
Pht.
Lng thc lnh = Lng c bn + Thng - Bo him x hi - Pht.
a) Nhp vo h s ca cc nhn vin trong cng ty.
b) Xut danh sch cc nhn vin theo lng thc lnh gim dn bng 2
cch sau:
i. Cp pht vng nh tnh.
ii. Cp pht vng nh ng.
Bi 11: (*) Vit chng trnh qun l lp hc ca mt trng. Cc thng tin ca
mt lp hc nh sau:
Tn lp.
S s.

97
Chng 8 KIU D LIU CU TRC

Danh sch cc sinh vin trong lp.


a) Nhp vo danh sach cc lp vi thng tin yu cu nh trn.
b) In danh sch cc lp c trn 5 sinh vin c im trung bnh loi gii.
c) Tm lp c nhiu sinh vin nht.
d) Tm lp c t sinh vin nht.
e) Tm sinh vin c im trung bnh cao nht.
f) Tm lp c s lng sinh vin t im trung bnh loi gii nhiu nht.
Bi 12: Vit chng trnh qun l v tu, thng tin mt v tu nh sau:
Ngy gi khi hnh, ngy gi n.
Ga i, ga n.
Loi tu, loi ch ngi (ngi, nm, cng, mm).
S toa, s gh.
a) Vit hm nhp vo danh sch cc v tu.
b) In danh sch cc v tu c ga n l Hu.
c) In danh sch cc v tu c ga n l H Ni v i ngy 8/6/2005.
d) m xem c bao nhiu khch i tu loi ch ngi l nm cng.
Bi 13: Vit chng trnh tnh tin in hng thng ca cc h gia nh, thng tin
cc khch hng nh sau:
K thu, t ngy... n ngy...
Tn khch hng, m khch hng.
a ch.
in nng tiu th (Kwh).
a) Nhp vo danh sch cc khch hng.
b) Xut danh sch ho n theo th t tng dn ca in nng tiu th.
c) Tnh tin in ca cc khch hng theo quy nh sau.
i. 100 kw u tin l 550 / kw - 50 kw tip theo l 900 / kw
ii. 50 kw tip theo l 1210 / kw
iii. Thu 10% trn tng s tin phi tr
d) Tnh tng s tin thu c ca cc khch hng.

98
Chng 8 KIU D LIU CU TRC

8.3 TM TT
Kiu d liu c cu trc cho php ta nh ngha nhng kiu d liu bt k trn
c s l nhng kiu d liu c bn c sn trong ngn ng lp trnh. Khi xy dng
xong kiu d liu mi ta phi nh ngha nhng thao tc cho kiu d liu .
Nhng kiu d liu t nh ngha ny thng thng c r t nhiu thnh phn, mi
thnh phn cng c th l mt kiu d liu t nh ngha, vn l ta chn kiu
d liu c bn no xy dng nn chng sao cho ph hp v mt kiu d liu
v ph hp v kch thc lu tr (va ). Cch s dng nhng kiu d liu t
nh ngha cng ging nh cc kiu d liu c bn. Mun s dng phi khai bo
bin, khi truy cp cc thnh phn phi truy cp theo quy c. Nu thnh phn
cu trc c kiu d liu l s thc th khi s dng hm scanf() phi thng qua
bin trung gian ri gn li cho thnh phn cu trc . i vi mng cc kiu
d liu c cu trc ta nn x l cho tng thnh phn cu trc ri mi x l cho
mng cu trc bng cch dng vng lp.

99
Chng 9 KIU D LIU TP TIN

9
KIU D LIU TP TIN

Chng ny s trnh by cu trc tp tin, ci t cc thao tc, mt s hm th


vin v ng dng trong vic t chc d liu trn tp tin.

9.1 L THUYT

9.1.1 Khi nim

Trong cc chng trnh trc th cc d liu a vo chng trnh ch c tn


ti trong RAM, khi thot chng trnh th tt c d liu u b mt. khc
phc tnh trng ny C/C++ cung cp cho ta cc hm th vin lu tr v truy
xut tp tin, l kiu FILE. V y ta ch cp n 2 loi tp tin:
Tp tin vn bn: l tp tin lu tr di dng k t.
Tp tin nh phn: l tp tin dng lu tr di dng nh phn.

9.1.2 Thao tc vi tp tin

Qu trnh thao tc trn tp tin thng qua 4 bc:


Khai bo con tr cho tp tin.
M tp tin.
X l tp tin.
ng tp tin.

Khai bo

100
Chng 9 KIU D LIU TP TIN

S dng

FILE *<tn bin>;

V d 9.1

Khai bo bin con tr le f

FILE *f;

M tp tin

S dng

fopen(<ng dn tn tp tin>, <kiu truy nhp>);

Cc kiu truy nhp tp tin thng dng:


t l kiu truy nhp tp tin i vi dng tp tin vn bn.
b l kiu truy nhp tp tin i vi dng tp tin nh phn.
r m ra c (ready only).
w m ra ghi (create / write).
a m ra thm vo (append).
r+ m ra c v ghi (modify).

V d 9.2

M tp tin vn bn tn DATA.TXT c

// Khai bo bin con tr f


FILE *f;
// M tp tin vn bn v f qun l tp tin ny
f = fopen("C:\\DATA.TXT", "rt");

c tp tin nh phn
fread(&ptr, size, len, FILE *);

Ghi tp tin nh phn


fwrite(&prt, size, len, FILE *);

101
Chng 9 KIU D LIU TP TIN

ng tp tin

Sau khi khng cn lm vic vi tp tin, m bo an ton cho d liu th nht


thit ta phi ng tp tin li.
ng mt tp tin
fclose(<bin con tr tp tin>);

ng tt c tp tin
fcloseall();

V d 9.3

ng tp tin f v tp tin g

fclose(f);
fclose(g);

Xo tp tin
remove(<ng dn + tn tp tin>);

i tn tp tin
rename(<tn tp tin c>, <tn tp tin mi>);

Di chuyn con tr tp tin:


fseek(FILE *, < di>, <mc>);

mc:
SEEK_SET di dn u tp tin (gi tr 0).
SEEK_CUR di v tr hin hnh (gi tr 1).
SEEK_END di n cui tp tin (gi tr 2).

V d 9.4

Di chuyn v tr con tr v sau 5 bytes, sau di chuyn v trc 4 bytes

fseek(f, +5, SEEK_CUR);


fseek(f, -4, SEEK_CUR);

102
Chng 9 KIU D LIU TP TIN

Cho bit v tr con tr le


ftell(FILE *);

9.1.3 Cc v d minh ho

V d 9.5

Kim tra tp tin mt tp tin c th m c khng?

void KiemTra(char *tenfile)


{
FILE *f = fopen(tenfile, "rt");
if(f == NULL)
{
printf("Khong mo duoc tap tin %s", tenfile);
return;
}
printf("Tap tin %s da duoc mo", tenfile);
fclose(f);
}

Tp tin vn bn

V d 9.6

Vit chng trnh pht sinh ngu nhin ma trn a kch thc 5 6, lu ma
trn ny vo le data.txt. c li le data.txt a d liu vo ma trn b v
xut ra mn hnh xem kt qu lu ng khng? Cu trc ca le data.txt
nh sau:
Dng u lu 2 s nguyn: m, n th hin s dng v s ct ca ma trn.
m dng tip theo, mi dng gm n phn t l gi tr cc phn t trn
mt dng ca ma trn.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 100

void LuuFile(char *tenfile, int a[MAX][MAX], int m, int n)


{
FILE *f;

103
Chng 9 KIU D LIU TP TIN

f=fopen(tenfile, "wt");
if(f==NULL)
{
printf("\nKhong tao duoc file.");
getch();
exit(0);
}
fprintf(f, "%d %d\n", m, n);
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
fprintf(f, "%d\t", a[i][j]);
fprintf(f, "\n"); }
fclose(f);
}

void DocFile(char *tenfile, int a[MAX][MAX], int &m, int &n)


{
FILE *f;
f=fopen(tenfile, "rt");
if(f==NULL)
{
printf("\nKhong doc duoc file.");
getch();
exit(0);
}
fscanf(f, "%d%d", &m, &n);
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
fscanf(f, "%d", &a[i][j]);
}
fclose(f);
}

void main()
{
int i, j;
int a[MAX][MAX], m=5, n=6;
int b[MAX][MAX], x, y;
randomize();
for(i=0; i<m; i++)
for(j=0; j<n; j++)
a[i][j]=random(1000);
LuuFile("data.txt", a, m, n);
DocFile("data.txt", b, x, y);
for(i=0; i<x; i++)
{

104
Chng 9 KIU D LIU TP TIN

for(j=0; j<y; j++)


printf("%d\t", b[i][j]);
printf("\n");
}
}

V d 9.7

Vit chng trnh to tp tin vn bn OUT.TXT gm n s nguyn, cc s ca


dy c to ngu nhin c gi tr tuyt i khng vt qu M (n, M c t
tp tin IN.TXT). Kt qu chng trnh l 1 tp tin vn bn c dng th nht
ghi s n; n dng tip theo ghi cc s to c, mi s trn mt dng.

void NhapFile(char *tenfile, int &n, int &M)


{
FILE *fi;
fi = fopen(tenfile, "rt");
fscanf(fi, "%d%d", &n, &M);
fclose(fi);
}

void XuatFile(char *tenfile, int n, int M)


{
FILE *fo;
fo = fopen(tenfile, "wt");
fprintf(fo, " %d\n", n);
randomize ();
for(; n > 0; n --)
fprintf(fo, "%d\n", random((2 * M + 1) - M));
fclose(fo);
}

void main()
{
int n, M;
Nhap("IN.TXT", n, M);
Xuat("OUT.TXT", n, M);
}

Tp tin nh phn

V d 9.8

105
Chng 9 KIU D LIU TP TIN

Vit hm c/ghi mt danh sch sinh vin ca mt lp vo tp tin

void Doc(char *tenfile, SINHVIEN ds[], int &siso)


{
FILE *fi;
fi = fopen("SV.DAT", " rb");
fseek(fi, 0, SEEK_END);
siso = (ftell(fi) + 1) / sizeof(SINHVIEN);
fseek(fi, 0, SEEK_SET);
fread(ds, sizeof(SINHVIEN), siso, fi);
fclose(fi);
}

void Ghi(char *tenfile, SINHVIEN ds[], int siso)


{
FILE *fo;
fo = fopen(tenfile, " wb");
fwrite(ds, sizeof(SINHVIEN), siso, fo);
fclose(fo);
}

9.2 BI TP
Bi tp c bn

Bi 1: Vit chng trnh to tp tin vn bn cha 1 dy s nguyn bt k.


Bi 2: Vit chng trnh to tp tin nh phn cha 10000 s nguyn bt k ghi
vo le SONGUYEN.INP. Mi dng 10 s, sau vit chng trnh c
le SONGUYEN.INP, sp xp theo th t tng dn v lu kt qu vo le
SONGUYEN.OUT.
Bi 3: Vit chng trnh to mt le cha 10000 s nguyn ngu nhin i mt
khc nhau trong phm vi t 1 n 32767 v t tn l SONGUYEN.INP.
Bi 4: Vit chng trnh to mt le cha cc s nguyn c tn SONGUYEN.INP.
Sau c le SONGUYEN.INP v ghi cc s chn vo le SOCHAN.OUT
v nhng s l vo le SOLE.OUT.
Bi 5: Vit chng trnh ghi vo tp tin SOCHAN.DAT cc s nguyn chn t 0
n 100.
Bi 6: Vit chng trnh c tp tin SOCHAN.DAT v xut ra mn hnh, mi dng
30 s.

106
Chng 9 KIU D LIU TP TIN

Bi 7: Vit chng trnh gi lp lnh COPY CON to tp tin v n bn. Khi kt


thc tp tin nhn phm F6 lu
Bi 8: Vit chng trnh gi lp lnh TYPE in ni dung ca tp tin vn bn ra
mn hnh.
Bi 9: Vit chng trnh kim tra mt tp tin no c trong mt th mc c
ch nh hay khng?
Bi 10: Vit chng trnh gi lp lnh DEL xo tp tin. Yu cu nhp ng
dn v tn tp tin, kim tra s tn ti ca tp tin, nu c th xo tp tin
c ch nh.
Bi 11: Vit chng trnh gi lp lnh RENAME i tn mt tp tin.
Bi 12: Vit chng trnh to le vn bn c tn l MATRIX.INP c cu trc nh
sau:
a) Dng u ghi hai s m, n.
b) Trong m dng tip theo mi dng ghi n s v cc s cc nhau mt
khong cch.
Hy kim tra xem trong le c bao nhiu s nguyn t. Kt qu cn ghi
vo le MATRIX.OUT c ni dung l mt s nguyn l s lng cc
s nguyn t trong le MATRIX.INP.
Bi 13: Cho s nguyn n, hy in tam gic PASCAL gm n dng
D liu vo: tp tin vn bn PAS.INP gm 1 dng cha gi tr n.
Kt qu: a ra tp tin vn bn PAS.OUT th hin mt tam gic
PASCAL n dng.
Bi 14: Cho mng cc s nguyn, hy sp xp mng theo th t tng dn.
D liu vo: tp tin vn bn ARRAY.INP gm 2 dng
a) Dng 1 cha s nguyn n (n 100).
b) Dng 2 cha n s nguyn.
Kt qu: a ra tp tin vn bn ARRAY.OUT gm hai dng
a) Dng 1 cha n phn t ca mng cc s nguyn.
b) Dng 2 cha n s nguyn c xp tng dn.
Bi 15: Cho mng cc s nguyn, tm phn t ln nht ca mng.
D liu vo: tp tin vn bn ARRAY.INP gm hai dng:
a) Dng 1 cha s nguyn n (n 100).

107
Chng 9 KIU D LIU TP TIN

b) Dng 2 cha n s nguyn.


Kt qu: a ra tp tin vn bn ARRAY.OUT gm 1 dng ghi 2 gi tr x, y
trong x l gi tr ln nht, y l v tr ca x trong mng.

Bi tp luyn tp v nng cao

Bi 1: Cho mng cc s nguyn, tnh tng cc phn t ca mng.


D liu vo: tp tin vn bn ARRAY.INP gm hai dng
a) Dng 1 cha s nguyn n (n 10)
b) Dng 2 cha n s nguyn
Kt qu: a ra tp tin vn bn ARRAY.OUT gm mt dng ghi tng cc
phn t trong mng.
Bi 2: Cho mng cc s nguyn, hy lit k cc phn t l s nguyn t
D liu vo: tp tin vn bn NT.INP gm hai dng
a) Dng 1 cha s nguyn n (n 100)
b) Dng 2 cha n s nguyn
Kt qu: a ra tp tin vn bn NT.OUT gm hai dng:
a) Dng 1 cha s lng cc phn t nguyn t trong mng.
b) Dng 2 lit k cc s nguyn t .
Bi 3: (*) To le vn bn c tn l INPUT.TXT c cu trc nh sau:
Dng u tin ghi N (N l s nguyn dng nhp t bn phm).
Trong cc dng tip theo ghi N s nguyn ngu nhin trong phm vi
t 0 n 100, mi dng 10 s (cc s cch nhau t nht mt khong
trng).
Hy c d liu ca le INPUT.TXT v lu vo mng mt chiu A. Thc
hin cc cng vic sau:
a) Tm gi tr ln nht ca mng A.
b) m s lng s chn, s lng s l ca mng A.
c) Hy sp xp cc phn t theo th t tng d n.
Hy ghi cc kt qu vo le vn bn c tn OUTPUT.TXT
Bi 4: (*) Vit chng trnh nhp v lu h s ca sinh vin vo mt le c tn l
DSSV.TXT. Sau c le DSSV.TXT v ct vo mng, hy sp xp
cc h s sinh vin theo th t gim dn theo im trung bnh mn hc ri

108
Chng 9 KIU D LIU TP TIN

in ra mn hnh h s cc sinh vin theo th t ra mn hnh c thng tin


nh sau:
a) M s sinh vin.
b) H v tn sinh vin.
c) im trung bnh kim tra.
d) im thi ht mn.
e) im trung bnh mn hc tnh bng (im trung bnh kim tra + im
thi ht mn)/2.
Bi 5: (*) To mt le text c tn l INPUT.TXT c cu trc nh sau:
Dng u tin ghi hai s M v N (M, N l hai s nguyn dng nhp
t bn phm).
Trong M dng tip theo mi dng ghi N s nguyn ngu nhin trong
phm vi t 0 n 100 (cc s ny cch nhau t nht mt khong trng).
Hy c d liu t le trn v lu vo mng hai chiu. Ri thc hin cc
cng vic sau:
a) Tm gi tr ln nht ca ma trn.
b) m s lng s chn, l, nguyn t c trong ma trn.
c) Hy tnh tng cc phn t trn mi dng ca ma trn.
Hy ghi kt qu ny vo le vn bn c tn l OUTPUT.TXT
Bi 6: (**) Xt dy s {a1 , a2 , ..., aN } . Mt on con ca dy l dy cc phn t
lin tip nhau c xc nh bi ch s ca s bt u (L) v ch s ca s
cui cng (R). Tng cc s trn on c gi l tng on. Yu cu: Cho
dy {a1 , a2 , ..., aN } , hy tm on con c tng on ln nht (T ).
D liu c cho trong tp tin vn bn SUMMAX.INP
a) Dng th nht ch s nguyn N (0 < N 30000)
b) N dng tip theo, mi dng cha mt s l cc s ca dy cho theo
ng th t. Gi tr tuyt i ca mi s khng vt qu 30000 Kt
qu tm c ghi vo tp tin vn bn SUMMAX.OUT
Bi 7: (*) Cho dy {a1 , a2 , ..., aN } , hy tm on con tng dn c tng ln nht.
D liu: c cho trong tp tin AMAX.INP
a) Dng 1 cha s nguyn N (0 < N 30000).
b) N dng tip theo, mi dng cha mt s l cc s ca dy y cho theo

109
Chng 9 KIU D LIU TP TIN

ng th t. Gi tr tuyt i ca mi s khng vc qu 30000.


Kt qu tm c ghi vp tin vn bn AMAX.OUT gm hai dng:
a) Dng 1 ghi tng ca dy con.
b) Dng 2 ghi mng con tng dn c tng ln nht.
Bi 8: Vit chng trnh nhp l lch mt nhn vin vo danh sch cc nhn vin.
Khi khng nhp na bm phm ESC v ghi vo tp tin NHANVIEN.DAT
sau :
a) c t tp tin NHANVIEN.DAT va to v in danh sch cc nhn vin
ln mn hnh.
b) Tm v in l lch mt nhn vin bng cc nhp v h tn hoc m s
nhn vin.
Bi 9: (**) lp rp mt my vi tnh hon chnh cn phi c ti thiu 10 linh
kin loi A v c th lp b sung thm vo kho ng ti a 8 linh kin loi
B. Ti mt ca hng vi tnh cn qun l bn hng cc loi linh kin ti ca
hng. Thng tin v mt loi linh kin gm c: Tn linh kin, quy cch, loi,
n gi loi 1 (cht lng tt - s nguyn), n gi loi 2 (cht lng thng
- s nguyn). Vit chng trnh thc hin nhng cng vic sau:
a) Nhp vo thng tin ca cc loi linh kin c ca hng. Xut danh
sch cc linh kin nhp theo th t tng dn ca loi linh kin v
tn linh kin. Cho bit c 10 linh kin loi A cn thit lp rp
my tnh hay cha?
b) Vi gi nh l ca hng c 10 linh kin loi A lp rp my.
Nhp vo mt s tin lp rp mt my tnh. C th lp c mt
my tnh hon chnh vi cc linh kin ton b theo n gi loi 1 hay
n gi loi 2 hay khng? Nu s tin trong khong gia th hy tm
mt phng n gm nhng linh kin theo n gi 1 v linh kin theo
n gi 2 lp?
c) Tt c d liu phi lu tp tin.

110
Chng 9 KIU D LIU TP TIN

9.3 TM TT
Mc ch ca kiu d liu tp tin cho php chng ta lu li nhng thng tin cn
thit tng i ln: nhng d liu u vo, nhng kt qu ca chng trnh hoc
nhng d liu dng kim tra chng trnh. Khi thao tc trn tp tin phi thng
qua 4 bc: Khai bo con tr tr n tp tin, M tp tin, X l trn tp tin v
cui cng l ng tp tin. Lu khi m tp tin ghi th phi cn thn vi thao
tc to mi hay chnh sa ni dung tp tin, di chuyn con tr hp l trnh mt
thng tin. S dng hm thao tc trn tp tin phi dng ng loi hm cho tp
tin kiu nh phn hay kiu vn bn.

111
Chng 10 KIU D LIU CON TR

10
KIU D LIU CON TR

Chng ny cung cp mt kiu d liu mi dng qun l a ch ca cc bin.

10.1 L THUYT
Khi nim

B nh my tnh bao gm cc nh, mi nh c kch thc 1 byte


Mi nh c a ch duy nht l mt s nguyn khng m
Mi bin s c gn vi mt s nh lin tc
a ch ca bin l a ch ca nh u tin
a ch NULL l a ch 0

nh ngha 10.1. Bin lu a ch l bin con tr

Khai bo con tr
C php

<kiu d liu> *<tn bin con tr>

V d 10.1

Khai bo bin con tr v gn a ch

char *p1;
int *p2;
float *p3;
p1 = 0x0010;

112
Chng 10 KIU D LIU CON TR

p2 = 0x0030;
p3 = NULL;

Ton t ly a ch

C php

&<tn bin>

V d 10.2

Ly a ch ca mt bin v lu li a ch ny vo bin con tr

char c;
int n;
char *p1;
int *p2;
p1 = &c;
p2 = &n;

Ton t truy xut n nh con tr qun l

C php

*<tn bin con tr>

V d 10.3

Truy xut n bin do bin con tr qun l

int n;
int *p;
p = &n;
*p = 5;

Thao tc vi bin con tr

int a;
int *pa;
a = 5;
pa = &a;
printf("%d\n", a);
printf("%d\n", pa);

113
Chng 10 KIU D LIU CON TR

printf("%d\n", *pa);
printf("%d\n", &pa);

Con tr nhiu cp

Bin con tr cng c a ch

nh ngha 10.2.
Bin con tr cp 1 l con tr qun l a ch ca bin thng thng
Bin con tr cp k qun l a ch ca con tr cp k 1

S dng

Con tr cp 1 p

int *p;

Con tr cp 2 q

int **q;

Con tr cp 3 r

int ***r;

V d 10.4

Thao tc vi bin con tr nhiu cp

int a;
int *p;
int **q;
a = 12;
p = &a;
q = &p;

Con tr v tham s

V d 10.5

Hm hoanvi s dng hai tham s x,y l con tr

void hoanvi(int *x, int *y)

114
Chng 10 KIU D LIU CON TR

{
int t = *x;
*x = *y;
*y = t;
}

void main()
{
int a = 4, b = 7;
hoanvi(&a, &b);
printf("a = %d, b = %d", a, b);
}

Din gii. hai bin a,b s hon i gi tr sau khi hm hoanvi thc hin

Ton t cng s nguyn

C php

<con tr> + <s nguyn>

c hiu l thc hin php tnh s hc <a ch>+<s nguyn>*<kch thc


kiu d liu> v kt qu tr v cng l <kiu d liu>

S dng

int a[100];
int *p,*q;
p = a;
q = &a[100];
p = p+2;
q = q+5;

p s cha a ch ca phn t a[2], q s cha a ch ca phn t a[105]

Ton t tr s nguyn

C php

<con tr> - <s nguyn>

c hiu l thc hin php tnh s hc <a ch> - <s nguyn>*<kch thc
kiu d liu> v kt qu tr v cng l <kiu d liu>

115
Chng 10 KIU D LIU CON TR

S dng

int a[100];
int *p,*q;
p = &a[50];
q = &a[100];
p = p-2;
q = q-6;

p s cha a ch ca phn t a[48], q s cha a ch ca phn t a[94]

Ton t tr con tr
C php

<con tr 1> - <con tr 2>

<con tr 1> v <con tr 2> phi cng kiu gi tr tr v l mt s nguyn cho


bit s chnh lch a ch gia hai con tr

S dng

int a[100];
int *p,*q;
p = &a[50];
q = &a[100];
d = q - p;

Gi tr ca d = 50*4 = 200

Con tr v mng 1 chiu tnh

Tn ca mng chnh l a ch ca phn t u tin, cc phn t cn li ca mng


c sp lin tc v tng dn
S dng

Khai bo bin mng a

int a[100];

Khai bo bin con tr p,q

116
Chng 10 KIU D LIU CON TR

int *p,*q;

Gn a ch cho p,q

p = a;
q = &a[0];

p v q s c cng gi tr a ch

Con tr v cu trc
C php

Truy xut thnh phn ca bin cu trc qua bin con tr

(*<bin con tr>).<tn thnh phn>


<bin con tr>-><tn thnh phn>

typedef struct {
int tu, mau;
} PhanSo;
PhanSo a;
PhanSo *p;
p = &a;
p->tu = 3;
(*p).mau = 4;

Con tr hm

Lu .
Con tr hm dng qun l a ch ca hm
C th gi hm thc thi thng qua con tr hm

C php

Khai bo con tr hm

<kiu tr v> (*<bin con tr hm>)(<danh sch tham s>)

int (*pf1)(int);
int (*pf2)(double, double);

pf1 qun l a ch ca hm c mt tham s int v kiu tr v int, pf2 qun


l a ch ca hm c hai tham s double v kiu tr v int

117
Chng 10 KIU D LIU CON TR

Gi thc thi con tr hm

<bin con tr hm>(<danh sch tham s>)

V d 10.6

Cc thao tc trn con tr hm

int Cong(int a, int b)


{
return a+b;
}

void main()
{
int s;
int (*f)(int, int);
f = Cong;
s = f(5, 3);
}

Cp pht b nh trong C

C php

S dng cc hm trong th vin malloc.h


Xin cp pht vng nh
<a ch> malloc(<kch thc vng nh>)

<kch thc vng nh> c tnh theo n v byte


int *p = (int *)malloc(8);
PhanSo *q = (PhanSo *)malloc(2*sizeof(PhanSo));

Xin cp pht vng nh theo khi


<a ch> calloc(<s khi>, <kch thc 1 khi>)
int *p = (int *)calloc(2, sizeof(int));
PhanSo *q = (PhanSo *)calloc(2, sizeof(PhanSo));

Thu hi b nh cp pht trong C

C php

Ngn ng C/C++ khng t ng thu hi vng nh c cp pht ng. Ngi

118
Chng 10 KIU D LIU CON TR

lp trnh phi lm cng vic thu hi b nh ng cp pht.


S dng hm trong th vin malloc

free(<bin con tr>)

float *p = (float *)calloc(2, sizeof(float));


free(p);

Cp pht b nh trong C++

C++ b sung thm cc ton t qun l b nh


C php

new <kiu d liu>


new <kiu d liu>[<s phn t>]

V d 10.7

Bin q cha a ch ca mt vng nh cho mt s nguyn int, bin q cha a


ch ca mt vng nh cho mt dy 10 s nguyn int

int *p = new int;


int *q = new int[10];

Thu hi b nh cp pht trong C++

C php

delete <bin con tr>


delete []<bin con tr>

V d 10.8

Thu hi vng nh cp pht ang c p,q qun l

int *p = new int;


int *q = new int[10];
delete p;
delete [] q;

119
Chng 10 KIU D LIU CON TR

10.2 BI TP

10.3 TM TT

120
Chng 11 K THUT QUI

11
K THUT QUI

Chng ny gii thiu phng php lp trnh theo k thut quy, phn loi, cch
hot ng v cch ci t cc hm quy.

11.1 L THUYT
nh ngha 11.1.
Mt khi nim l khi nim qui nu trong nh ngha ca n c s dng
li chnh n
Mt hm l hm qui nu trong thn ca hm c nhng lnh gi li
chnh n mt cch tng minh hay tim n.

V d. Nhng hnh t ng dng

121
Chng 11 K THUT QUI

11.1.1 Cc loi qui

qui tuyn tnh

S dng

Trong mi ln thc hin, hm gi li chnh n khng qu mt ln

<Kiu d liu hm> <Tn hm>(<danh sch tham s>)


{
if(<iu kin dng>)
{
...
}
else
{
...
<Tn hm>(<danh sch tham s>);
...
}
}

V d 11.1

Tnh tng Sn = 1 + 2 + ... + n


Phn tch bi ton
Phn dng: S0 = 0
Phn qui: Sn = Sn1 + n vi n > 0

int TinhTong(int n)
{
if(n==0)
return 0;
else
return (TinhTong(n-1) + n);
}

V d 11.2

Tnh Pn = n!
Phn tch bi ton
Phn dng: P0 = 1
Phn qui: Pn = Pn1 .n vi n > 0

122
Chng 11 K THUT QUI

int TinhGiaiThua(int n)
{
if(n==0)
return 1;
else
return (TinhGiaiThua(n-1) * n);
}

qui nh phn

S dng

Trong mi ln thc hin, hm gi li chnh n khng qu hai ln

<Kiu d liu hm> <Tn hm>(<danh sch tham s>)


{
if(<iu kin dng>)
{
...
}
else
{
...
<Tn hm>(<danh sch tham s>);
...
<Tn hm>(<danh sch tham s>);
...
}
}

V d 11.3

Tnh s fn ca dy Fibonacci {1, 1, 2, 3, 5, . . .}


Phn dng: f0 = 1 v f1 = 1.
Phn qui: fn = fn1 + fn2 vi n > 1

int Fibo(int n)
{
if(n==0 || n==1)
return 1;
else
return Fibo(n-1) + Fibo(n-2);
}

123
Chng 11 K THUT QUI

V d 11.4

Bi ton thp H Ni
Phn dng: n = 1 th A C
Phn qui:
Bc 1: Di chuyn n 1 a trn cng t cc A sang cc B.
Bc 2: A C.
Bc 3: Di chuyn n 1 a trn cng t cc B sang cc C.

void ThapHaNoi(int n, char A, char B, char C)


{
if(n==1)
printf("Di chuyen dia tren cung tu %d den %d\n", A, C);
else
{
ThapHaNoi(n-1, A, C, B);
printf("Di chuyen dia tren cung tu %d den %d\n", A, C);
ThapHaNoi(n-1, B, A, C);
}
}

qui phi tuyn

S dng

Trong mi ln thc hin hm, c th gi li chnh n hn hai ln

<Kiu d liu hm> <Tn hm>(<danh sch tham s>)


{
if(<iu kin dng>)
{
...
}
else
for (int i = 1; i<=n; i++)
{
...
<Tn hm>(<danh sch tham s>);
...
}
}

124
Chng 11 K THUT QUI

V d 11.5

Tnh s hng th n ca dy xn c nh ngha nh sau:

x0 = 1
xn = n2 x0 + (n 1)2 x1 + ... + 12 xn

Phn dng: da trn nh ngha


Phn qui: da trn nh ngha

int TinhXn(int n)
{
if(n==0) return 1;
int s = 0;
for (int i=1; i<=n; i++)
s = s + i * i * TinhXn(n-i);
return s;
}

qui h tng

S dng

Hm th nht v hm th hai gi qua li ln nhau.

<Kiu d liu hm> <Tn hm 1>(<danh sch tham s>);


<Kiu d liu hm> <Tn hm 2>(<danh sch tham s>);
...
<Kiu d liu hm> <Tn hm 1>(<danh sch tham s>)
{
...
<Tn hm 2>(<danh sch tham s>);
...
}
<Kiu d liu hm> <Tn hm 2>(<danh sch tham s>)
{
...
<Tn hm 1>(<danh sch tham s>);
...
}

V d 11.6

125
Chng 11 K THUT QUI

Tnh s hng th n ca hai dy xn v yn c nh ngha nh sau:

x0 = 1
y0 = 1
xn = xn1 + yn1
yn = n2 xn1 + yn1

Phn dng: da trn nh ngha


Phn qui: da trn nh ngha

int TinhXn(int n);


int TinhYn(int n);
int TinhXn(int n)
{
if(n==0) return 1;
return TinhXn(n-1) + TinhYn(n-1);
}
int TinhYn(int n)
{
if(n==0) return 1;
return n*n*TinhXn(n-1) + TinhYn(n-1);
}

11.1.2 Cc v d

V d 11.7

Vit hm tnh ly tha xn bng k thut qui

float TinhLuyThua(float x, int n)


{
if(n==0) return 1;
else return x*TinhLuyThua(x,n-1);
}

V d 11.8

Vit hm tnh tng cc phn t c gi tr chn ca mt dy s k thut


qui.

int TongChan(int a[], int n)


{

126
Chng 11 K THUT QUI

if(n==0) return 0;
int s = TongChan(a, n-1);
if(a[n-1]%2==0) s+=a[n-1];
return s;
}

V d 11.9

Cho dy s nguyn a gm n phn t c th t tng dn. Tm phn t c gi


tr x c xut hin trong mng khng bng k thut qui.

int TimNhiPhan(int a[], int l, int r, int x)


{
int m = (l+r)/2;
if(l>r) return -1; // Khng c phn t x
if(a[m]==x)
return m; // Tr v v tr tm thy
if(a[m]>x)
return TimNhiPhan(a, l, m-1, x);
if(a[m]<x)
return TimNhiPhan(a, m+1, r, x);
}

11.2 BI TP
Bi tp c bn

Bi 1: Ci t bng qui li nhng bi tp chng mng mt chiu.


Bi 2: Tm ch s c gi tr ln nht ca s nguyn dng n.
Bi 3: Hy xy dng mt dy gm N s c gi tr t 1 n K cho trc, sao cho
khng c hai dy con lin tip ng k nhau. V d, N = 6 v K = 3 th
kt qu: 121312
Bi 4: Tm c s chung ln nht ca hai s nguyn dng a v b.
Bi 5: Tm ch s u tin ca s nguyn dng n.
Bi 6: Tm dy nh phn di nht sao cho trn dy ny khng c hai b k bt k
trng nhau. B k l dy con c k s lin tip nhau trn dy tm c. V
d, k = 3 th kt qu l 0001011100
Bi 7: Tnh P (n) = 1.3.5...(2n + 1) vi n > 0
Bi 8: Tnh P (n) = 1 + 3 + 5 + ... + (2n + 1) vi n > 0

127
Chng 11 K THUT QUI

Bi 9: Tnh P (n) = 1 2 + 3 ... + (1)n+1 n vi n > 0


Bi 10: Tnh P (n) = 1 + 1.2 + 1.2.3 + ... + 1.2.3...n vi n > 0
Bi 11: Tnh P (n) = 1 + (1 + 2) + (1 + 2 + 3) + ... + (1 + 2 + 3 + ... + n) vi n > 0
Bi 12: Tnh P (n) = 12 + 22 + 32 + ... + n2 vi n > 0
Bi 13: Tnh
1 1 1
P (n) = 1 + + + ...
2 3 n
vi n > 0
Bi 14: Tnh
1 1 1
P (n) = 1 + + + ... +
1+2 1+2+3 1 + 2 + 3 + ... + n
vi n > 0
Bi 15: Tnh P (x, n) = xn vi n l s nguyn khng m

Bi tp luyn tp v nng cao

Bi 1: Cho s nguyn dng n. In ra biu din nh phn ca n.


Bi 2: (*) Tnh s r

q
S(n) = n+ n 1 + n 2 + ... + 1

vi n > 0
Bi 3: (*) Tnh s r

q
S(n) = 1+ 2 + 3 + ... + n

vi n > 0
Bi 4: (*) Tnh
1
1
1+ 1+ 1
1+...+ 1
1+ 1
1

vi n > 0
Bi 5: (**) Ci t bi ton m i tun.
Bi 6: (**) Ci t bi ton tm hu.
Bi 7: (*) Ci t hm tnh x.y vi x, y l cc s nguyn khng m m ch c

128
Chng 11 K THUT QUI

dng cc tnh cng v shift left v shift right thng qua cng thc sau

nu x = 0



0


x.y = (x  1) . (y  1)
nu x l s chn


nu x l s l

(x  1) . (y  1) + y

Bi 8: Ci t hm in ra tt c cc chnh hp chp k ca n phn t, vi k [0, ..., n].


Bi 9: Ci t hm in ra tt c cc hon v ca n phn t.
Bi 10: Ci t hm in ra tt c cc t hp chp k ca n phn t, vi k [0, ..., n].

11.3 TM TT
qui cung cp cho ta c ch gii quyt cc bi ton phc tp mt cch n gin
hn. Xy dng hm qui thng qua vic xc nh iu kin dng v bc thc
hin tip theo. Ch nn ci t bng phng php qui khi khng cn cch gii
quyt bng cch lp thng thng.

129
Chng 12 LP TRNH N TH

12
LP TRNH N TH

12.1 L THUYT
Khi nim

Lp trnh n th l mt phng php thit k phn mm m tp trung vo


vic phn tch cc chc nng ca mt chng trnh thnh thnh cc n
th c lp
Chia mt chng trnh ln thnh cc tp tin nh hn, mi tp tin cha cc
khai bo nguyn mu hm, ci t cc hm v d liu thc hin mt s chc
nng nht nh. Vic phn chia ny gip qu trnh lp trnh: D kim sot
cc lnh v kim li. Trnh c gii hn kch thc tp tin qu ln ca
ngn ng lp trnh.
Lp trnh n th lin quan cht ch n lp trnh cu trc v lp trnh
hng i tng, tt c u c cng mt mc tiu to thun li cho xy
dng cc chng trnh phn mm ln v h thng bng cch phn r thnh
nhng mnh nh

Phng php

130
Chng 13 MT S THI MU

13
MT S THI MU

S 01
Thi gian: 120 pht
Bi 1: Vit chng trnh tnh tng: S(n) = 1! + 2! + . . . + n!
Bi 2: Vit chng trnh thc hin cc yu cu sau:
a) Nhp mng mt chiu cc s nguyn.
b) m s lng gi tr chn m trong mng.
c) Tm s l cui cng trong mng.
Bi 3: Cho ma trn cc s thc. Vit hm tm gi tr trong ma trn xa gi tr x
nht.

float xanhat ( float a[][100] , int m, int n, float x);

Bi 4: Hy khai bo kiu d liu biu din khi nim im trong mt phng Oxy
(DIEM).
a) Vit hm nhp ta im.

void nhap(DIEM &P);

a) Vit hm xut ta im.

void xuat(DIEM P);

a) Vit hm tnh khong cc gia 2 im.

float khoangcach (DIEM P, DIEM Q);

131
Chng 13 MT S THI MU

S 02
Thi gian: 120 pht
Bi 1: Vit chng trnh tnh tng: S(n) = x + x2 + ... + xn
Bi 2: Vit chng trnh thc hin cc yu cu sau:
a) Nhp mng mt chiu cc s nguyn.
b) m s lng gi tr l dng trong mng.
c) Tm s chn cui cng trong mng.
Bi 3: Cho ma trn cc s thc. Vit hm tm gi tr trong ma trn gn gi tr x
nht.

float gannhat ( float a[][100] , int m, int n, float x);

Bi 4: Hy khai bo kiu d liu biu din khi nim phn s (PHANSO)


a) Vit hm nhp phn s.

void nhap( PHANSO &x);

b) Vit hm xut phn s.

void xuat( PHANSO x);

c) Vit hm tnh tng hai phn s.

PHANSO tong( PHANSO x, PHANSO y);

132
Chng 13 MT S THI MU

S 03
Thi gian: 120 pht
Bi 1: Cho Sn = 1
2
+ 34 + ... + 2n+1
2n+2
(n > 0)
a) V lu thut ton tnh tng trn.
b) Vit hm tnh tng trn bng phng php quy.
Bi 2: Cho mng mt chiu cc s thc A kch thc n 100. Hy xy dng hm
thc hin cc yu cu sau:
a) Nhp gi tr cc phn t vo mng.
b) Tm v tr v v tr ca phn t c gi tr m u tin trong mng.
Nu khng c gi tr m th tr v -1.
c) Tm v tr v gi tr phn t m ln nht trong mng A. Nu mng
khng c phn t ch A gi tr m th tr v 0.
Bi 3: Cho ma trn vung cc s nguyn A kch thc n n (5 < n < 10). Hy
xy dng cc hm cho php thc hin cc yu cu sau:
a) Nhp gi tr cc phn t vo ma trn.
b) m v tr v s lng cc phn t l s nguyn t trong ma trn.
c) Tnh trung bnh cng cc phn t trn ng cho chnh.
Bi 4: Hy khai bo kiu d liu biu din thng tin ca mt nhn vin (NHANVIEN).
Bit mt nhn vin gm:
M nhn vin (MaNV): Chui ti a 5 k t.
Tn nhn vin (TenNV): Chui ti a 30 k t.
Chc v (ChucVu): Chui ti a 20 k t (gm cc chc v: Truong
phong, Nhan vien, Giam doc, Pho giam doc, ).
S nm lm vic (SoNam): S nguyn 1 byte.
H s lng (HeSo): Kiu s thc.
Cho danh sch gm n (n > 0) nhn vin. Vit cc hm sau:
a) Lit k cc nhn vin c s nm lm vic t 3 nm tr ln.
b) m s nhn vin c chc v l Truong phong. Sp xp danh sch
nhn vin tng dn theo h s lng nhn vin.

133
Chng 13 MT S THI MU

S 04
Thi gian: 120 pht
Bi 1: Sn = 1 2 + 3 ... + (1)n+1 n vi n > 0
a) V lu thut ton tnh tng trn.
b) Vit hm tnh tng trn bng phng php quy.
Bi 2: Cho mng mt chiu cc s nguyn A kch thc n 100. Hy xy dng
hm thc hin cc yu cu sau:
a) Nhp gi tr cc phn t vo mng.
b) Tm v tr v v tr ca phn t c gi tr l s nguyn t u tin
trong mng. Nu khng c gi tr l s nguyn t th tr v -1.
c) Tm v tr v gi tr phn t l s nguyn t ln nht trong mng A.
Nu mng khng c phn t l s nguyn t th tr v 0.
Bi 3: Cho ma trn vung cc s thc A kch thc n n (5 < n < 10). Hy xy
dng cc hm cho php thc hin cc yu cu sau:
a) Nhp gi tr cc phn t vo ma trn.
b) Lit k nhng phn t ti nhng dng l trong ma trn.
c) Tnh v tr v gi tr trung bnh cng ca nhng phn t m trong ma
trn.
Bi 4: Hy khai bo kiu d liu biu din thng tin ca mt mt hng (MATHANG).
Bit mt mt hng gm:
M hng (MaHang): Chui ti a 5 k t.
Tn hng (TenHang): Chui ti a 30 k t.
S lng (SoLuong): S nguyn 2 byte.
n v tnh (DonViTinh): Chui ti a 5 k t.
n gi (DonGia): Kiu s thc.
Cho danh sch gm n (n > 0) mt hng. Vit cc hm sau:
a) Lit k cc mt hng c s lng ln hn 100.
b) Tm v tr v mt hng c thnh tin ln nht (thnh tin=s lng*n
gi). Sp xp danh sch cc mt hng theo th t gim dn cu n
gi.

134
Chng 13 MT S THI MU

S 05
Thi gian: 120 pht
Bi 1: Nhp s nguyn n (0 < n 20). Vit chng trnh xut n phn t u tin
ca hai mng A v B, cho bit cc gi tr c xc nh nh sau:

A1 = 1
B1 = 1
p
Ai = A2i1 + Bi1
2

Bi1
Bi = 2Ai1 + 2

Bi 2: Vit chng trnh nhp vo ma trn vung cp n vi n nhp t bn phm.


Hy kim tra ma trn ny c phi l ma trn tam gic di hoc tam gic
trn theo ng cho ph khng?
Bi 3: Mi h s nhn vin gm:
h tn
nm sinh
lng c bn
Vit chng trnh thc hin cc cng vic sau:
a) Nhp n h s vi n nhp t bn phm.
b) In ra h tn v lng c bn ca nhn vin c lng c bn thp nht
v nhn vin c lng c bn cao nht.
c) Ghi xung le vn bn (vi tn le l hoso.txt) danh sch gm h tn,
lng c bn, ph cp v thc lnh ca cc nhn vin (mi nhn vin
mt dng) bit rng: Ph cp = 30% lng c bn v Thc lnh =
lng c bn + ph cp

135
Chng 13 MT S THI MU

S 06
Thi gian: 120 pht
Bi 1: Nhp vo mt dy s thc kt thc bi 0 hoc 20 phn t
a) Sp xp dy theo th t tng dn.
b) Cho bit dy c hi t khng? (Dy c gi l hi t khi c na phn
t tr ln nh hn trung bnh cng ca dy).
Bi 2: Nhp vo ma trn m n vi m v n nhp t bn phm. Hy kim tra xem
ma trn c cn bng theo ct hay khng? (Ma trn cn bng theo ct khi
tng cc gi tr ca cc ct bn tri bng tng cc gi tr ca cc ct bn
phi, nu s ct l th khng tnh ct gia). V d: 8 4 5 8 9 3 5 7 4 6 4 9
7 5 1 Tng bn tri = 33 Tng bn phi = 33 Kt lun: Ma trn cn bng
theo ct.
Bi 3: Mt Album ca nhc MP3 gm ti a 150 ca khc. Thng tin mi ca khc
gm:
Tn ca khc
Tn nhc s
Tn ca s
Thi gian (tnh bng giy)
Vit chng trnh thc hin cc cng vic sau:
a) Nhp n ca khc vi n nhp t bn phm.
b) Xut tng thi gian ca cc ca khc (hin th theo dng hh:mm:ss) v
cho bit tn ca khc no c thi gian di nht. Ghi xung le vn bn
(vi tn le l mp3.txt) danh sch gm tn ca khc, tn nhc s, tn ca
s v thi gian (hin th theo dng hh:mm:ss), mi ca khc chim mt
dng.

136
Chng 13 MT S THI MU

S 07
Thi gian: 120 pht
Bi 1: Tnh s hng th n ca h thc truy hi nh sau




1 n=1


fn = 2 n=2




3fn1 + 2fn2

n>2

bng hai cch


a) Dng qui
b) Kh qui, dng vng lp
Bi 2: Xy dng mt cu trc c cc thnh phn sau
M s hc sinh
H v tn hc sinh
im Ton
im Vn
im trung bnh=(im Ton+im Vn)/2
Vit chng trnh nhp d liu ca n hc sinh v lu vo mt tp tin c tn
l HOSOHS.DOC (hay mng 1 chiu c cu trc). Sau c d liu t
tp tin HOSOHS.DOC (hay mng 1 chiu c cu trc), sp xp theo th t
im trung bnh gim dn v xut d liu ca tng hc sinh ra mn hnh
Bi 3: Cho n l mt s nguyn dng, tnh gi tr biu thc sau bng cch vit
chng trnh s dng vng lp v ti u vng lp.

1 1 1
Sn = 1 + + + ... +
2! 3! n!

vi n l s nguyn dng

137
Chng 13 MT S THI MU

S 08
Thi gian: 120 pht
PHN I: (Trc nghim) Chn cu tr li ng nht
Bi 1: on chng trnh sau s cho gi tr ca t:

for(t=i=0; (i <10) && (t <100) ; i++, t += 2*i);

a) 90
b) 100
c) 110
d) 120
Bi 2: Cho dy gm 12 phn t a nh sau: {-9 -9 -5 -2 0 3 7 7 10 15}. Dng thut
ton tm nh phn tm v tr phn t x = -9, v tr tm c s l:
a) -1
b) 0
c) 1
d) 2
Bi 3: Chng trnh sau:

#include < conio .h>


#include < stdio .h>
int a=1, b=2, c=3;
int A(int &a, int b)
{
a += c + 2;
b return a;
}
void main ()
{
printf (" %d %d", A(b, c), a+c);
}

s in ra:
a) 7 5
b) 7 4
c) 7 3

138
Chng 13 MT S THI MU

d) 7 2
Bi 4: Chng trnh sau:

# include <conio .h>


# include <stdio .h>
int A(int a, int &b)
{
a += b + 2;
b -= a;
return a;
}
void main ()
{
int x = 5;
printf (" %d %d", A(A(3, x), x), x);
}

S in ra:
a) 5 5
b) 5 7
c) 7 7
d) 7 5
Bi 5: on chng trnh di y khi thc thi s:

char buf1 [100] , buf2 [100] , *strptr1 , * strptr2 ;


strcpy (buf1 , " abcdefghijklmnopqrstuvwxyz ");
strcpy (buf2 , "Hello ");
strptr1 = buf1 + 6;
strcpy (strptr1 , buf2); strptr2 = ( strptr1 + 4);
strncpy (strptr2 , buf2 , 4);
printf ("%s\n", buf1);

S in ra mn hnh:
a) abcdefHellHellopqrstuvwxyz
b) ghijklmnHellotuvwxyz
c) abcdefghijklmnopqrstuvwxyz
d) abcdefHellolmnopqrstuvwxyz

139
Chng 13 MT S THI MU

PHN II: (T lun) Lp trnh


Bi 1: Hy vit hm kim tra mt s nguyn khng n c phi l s nguyn t hay
khng, hm thc hin s tr v: 1 nu n l s nguyn t, 0 nu n khng l
s nguyn t

int LaSNT ( unsigned int n);

Bi 2: Hy vit hm tm tng cc s nguyn t nm trong mng mt chiu a c n


phn t
Bi 3: Hy vit hm xc nh v tr ca s nguyn t ln nht trn mng a c n
phn t

140
Ti liu tham kho

Ti liu tham kho

[1] JOHN R. HUBBARD. 455 Bi tp cu trc d liu ci t bng C++. Nh


Xut Bn Thng K.

[2] TN DNG HUNH and C HI HONG. Bi tp ngn ng C t A n


Z. Nh Xut Bn Lao ng - X Hi.

[3] HOI BC L, HONG THI L, TN TRN MINH KHANG NGUYN,


and PHNG THO NGUYN. Gio trnh ngn ng C. Nh Xut Bn i
Hc Quc Gia Tp. H Ch Minh, 2003.

[4] NH T NGUYN and C HI HONG. Gio trnh l thuyt & Bi tp


ngn ng C. Nh Xut Bn Mi C Mau.

[5] THANH SN NGUYN. Tp bi ging K thut lp trnh. 2004.

[6] TN TRN MINH KHANG NGUYN. Bi tp K thut lp trnh - Tp 1.


Nh Xut Bn i Hc Quc Gia Tp. H Ch Minh, 2004.

[7] SANFORD LEESTMA LARRY NYHOFF. Pascal Programming and Solving.


Macmillan Publishing Company, 1990.

[8] VN T PHM. K thut lp trnh C: c s v nng cao. Nh Xut Bn


Khoa Hc K Thut, 1996.

[9] MINH THI TRN. Tp bi ging K thut lp trnh. 2005.

141

You might also like