Professional Documents
Culture Documents
Book C Master
Book C Master
LP TRNH C/C++
Bi Tin Ln
01/01/2015
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
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
iii
Mc lc
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
iv
Mc lc
8.2 BI TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.3 TM TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12 LP TRNH N TH 130
12.1 L THUYT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
13 MT S THI MU 131
v
Chng 1 CC KHI NIM C BN V LP TRNH
1
CC KHI NIM C BN V LP TRNH
1
Chng 1 CC KHI NIM C BN V LP TRNH
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
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
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
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.
5
Chng 1 CC KHI NIM C BN V LP TRNH
Ci t chng trnh
Th nghim chng trnh
V d 1.2
6
Chng 1 CC KHI NIM C BN V LP TRNH
V d 1.3
7
Chng 2 LU THUT TON
2
LU THUT TON
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
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
V t trn xung
Chy bt u t Begin v kt thc ti End
i theo hng mi tn
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
9
Chng 2 LU THUT TON
Cu trc r nhnh
V d 2.2
Cu trc lp
10
Chng 2 LU THUT TON
V d 2.3
Cc v d thc hnh
2.2 BI TP
Bi tp c bn
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?
12
Chng 2 LU THUT TON
Bi 3: Tnh
1 1 1
S(n) = 1 + + + .... +
2! 3! n!
vi n > 0
Bi 4: Tnh
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
Dennis M. Ritchie
3.1 L THUYT
Khai bo th vin
Khai bo bin ton cc
Chng trnh chnh (main)
V d 3.1
// 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
Kiu s nguyn
Kiu s thc
Kiu k t
Kiu lun l
15
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
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 C V d
Ln hn > a>b
Nh hn < a<b
Bng == a==b
Khc != a!=b
Php ton C V d
ph nh ! !a
v && a&&b
hay || a||b
Php ton C V d
NOT ~ ~a
OR | a|b
XOR ^ a^b
16
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
Php ton C V d
Tng bin mt n v ++ a++ hoc ++a
Gim bin mt n v -- a-- hoc --a
Php ton C V d
Gn bin mt gi tr = 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
Tn hm ngha V d
printf(...); xut d liu ra mn hnh printf("%d %d", a, b);
18
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
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
<lnh 1>
<lnh 2>
...
<lnh n>
V d 3.2
#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
Cu lnh if
C php
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
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
V d 3.4
#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
21
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
break.
V d 3.5
#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
22
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
V d 3.6
#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
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
#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
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();
}
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();
}
<nhn>:
25
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
...
goto <nhn>
...
V d 3.11
#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();
}
V d 3.12
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
27
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
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
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);
29
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
Cu trc lp
30
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
i++;
} while(i<=a);
* * * *
* * * *
* * * *
* * * *
31
Chng 3 KIU D LIU C BN V CU TRC IU KHIN
* * * *
* * * *
* *
* *
* *
* * * *
*
* *
* * *
* * * *
*
* *
* *
* * * *
*
* * *
* * * * *
* * * * * * *
*
* *
* *
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 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
* * * * *
* * * * *
* * * * *
* * * * * * *
* * * * *
* * * * *
* * * * *
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
4.1 L THUYT
V d 4.1
// 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;
}
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
Cc hm
Khai bo hm
C php
36
Chng 4 HM
Ci t hm
C php
C php
37
Chng 4 HM
Xc nh kiu d liu tr v ca hm
38
Chng 4 HM
S dng
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
Xc nh tn hm
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
V d 4.3
40
Chng 4 HM
S+=i;
i++;
}
return S;
}
4.2 BI TP
Bi tp c bn
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))
2s 2s 2s
ha = , hb = , hc =
a b c
42
Chng 4 HM
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
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.
C php
V d 5.1
int a[100];
float b[50];
45
Chng 5 KIU D LIU MNG MT CHIU
C php
V d 5.2
#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
#include <conio.h>
#include <stdio.h>
#define MAX 100
46
Chng 5 KIU D LIU MNG MT CHIU
void main()
{
int a[MAX], n;
NhapMang(a,n);
XuatMang(a,n);
getch();
}
K thut t c hiu
47
Chng 5 KIU D LIU MNG MT CHIU
V d 5.4
V d 5.5
V d 5.6
48
Chng 5 KIU D LIU MNG MT CHIU
V d 5.7
49
Chng 5 KIU D LIU MNG MT CHIU
V d 5.8
50
Chng 5 KIU D LIU MNG MT CHIU
V d 5.9
V d 5.10
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
52
Chng 5 KIU D LIU MNG MT CHIU
K thut xo phn t
V d 5.12
V d 5.13
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
V d 5.15
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
V d 5.18
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
56
Chng 5 KIU D LIU MNG MT CHIU
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
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'.
V d 6.1
char chuoi[25];
Hm nhp chui
scanf(...)
char *gets(char *s);
60
Chng 6 KIU D LIU CHUI K T
V d 6.2
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
void main()
{
char chuoi[] = "Vi du xuat chuoi\n";
puts(string);
}
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
V d 6.4
#include<stdio.h>
#include<conio.h>
#include<string.h>
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
62
Chng 6 KIU D LIU CHUI K T
printf("%s\n",p);
p = strtok(NULL, " ");
}
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
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
C php
V d 7.1
int A[20][10];
float b[10][10];
C php
66
Chng 7 KIU D LIU MNG HAI CHIU
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
7.2 BI TP
Bi tp c bn
V d 7.3
67
Chng 7 KIU D LIU MNG HAI CHIU
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
K thut t c hiu
V d 7.4
68
Chng 7 KIU D LIU MNG HAI CHIU
}
return flag;
}
V d 7.5
V d 7.6
69
Chng 7 KIU D LIU MNG HAI CHIU
K thut tm kim
K thut m
V d 7.7
70
Chng 7 KIU D LIU MNG HAI CHIU
K thut sp xp
V d 7.8
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
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
nh ngha 7.2. Mng vung l mng hai chiu c s dng v s ct bng nhau.
72
Chng 7 KIU D LIU MNG HAI CHIU
V d 7.9
V d 7.10
73
Chng 7 KIU D LIU MNG HAI CHIU
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
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
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
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
2 7 6
9 5 1
4 3 8
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
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
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.
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
struct SDATE {
char thu[5];
unsigned char ngay;
unsigned char thang;
int nam;
};
hoc
V d 8.2
81
Chng 8 KIU D LIU CU TRC
struct SDATE x;
DATE x;
V d 8.3
C php
V d 8.4
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 Xuat(DIEM d)
{
printf("\nToa do diem: (%d, %d)",d.x,d.y);
}
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
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
#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
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 XuatNamSinh(DATE d)
{
printf("%02u / %02u / %4d", d.ngay, d.thang, d.nam);
}
85
Chng 8 KIU D LIU CU TRC
86
Chng 8 KIU D LIU CU TRC
87
Chng 8 KIU D LIU CU TRC
V d 8.7
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();
}
89
Chng 8 KIU D LIU CU TRC
90
Chng 8 KIU D LIU CU TRC
kq.mau=ps.tu;
return kq;
}
91
Chng 8 KIU D LIU CU TRC
92
Chng 8 KIU D LIU CU TRC
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
94
Chng 8 KIU D LIU CU TRC
95
Chng 8 KIU D LIU CU TRC
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
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
9.1 L THUYT
Khai bo
100
Chng 9 KIU D LIU TP TIN
S dng
V d 9.1
FILE *f;
M tp tin
S dng
V d 9.2
M tp tin vn bn tn DATA.TXT c
c tp tin nh phn
fread(&ptr, size, len, FILE *);
101
Chng 9 KIU D LIU TP TIN
ng 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>);
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
102
Chng 9 KIU D LIU TP TIN
9.1.3 Cc v d minh ho
V d 9.5
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
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 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
V d 9.7
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
9.2 BI TP
Bi tp c bn
106
Chng 9 KIU D LIU TP TIN
107
Chng 9 KIU D LIU TP TIN
108
Chng 9 KIU D LIU TP TIN
109
Chng 9 KIU D LIU 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
10.1 L THUYT
Khi nim
Khai bo con tr
C php
V d 10.1
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
char c;
int n;
char *p1;
int *p2;
p1 = &c;
p2 = &n;
C php
V d 10.3
int n;
int *p;
p = &n;
*p = 5;
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
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
int a;
int *p;
int **q;
a = 12;
p = &a;
q = &p;
Con tr v tham s
V d 10.5
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
C php
S dng
int a[100];
int *p,*q;
p = a;
q = &a[100];
p = p+2;
q = q+5;
Ton t tr s nguyn
C php
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;
Ton t tr con tr
C php
S dng
int a[100];
int *p,*q;
p = &a[50];
q = &a[100];
d = q - p;
Gi tr ca d = 50*4 = 200
int a[100];
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
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
int (*pf1)(int);
int (*pf2)(double, double);
117
Chng 10 KIU D LIU CON TR
V d 10.6
void main()
{
int s;
int (*f)(int, int);
f = Cong;
s = f(5, 3);
}
Cp pht b nh trong C
C php
C php
118
Chng 10 KIU D LIU CON TR
V d 10.7
C php
V d 10.8
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.
121
Chng 11 K THUT QUI
S dng
V d 11.1
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
V d 11.3
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.
S dng
124
Chng 11 K THUT QUI
V d 11.5
x0 = 1
xn = n2 x0 + (n 1)2 x1 + ... + 12 xn
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
V d 11.6
125
Chng 11 K THUT QUI
x0 = 1
y0 = 1
xn = xn1 + yn1
yn = n2 xn1 + yn1
11.1.2 Cc v d
V d 11.7
V d 11.8
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
11.2 BI TP
Bi tp c bn
127
Chng 11 K THUT QUI
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
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
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.
Bi 4: Hy khai bo kiu d liu biu din khi nim im trong mt phng Oxy
(DIEM).
a) Vit hm nhp ta im.
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.
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
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
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:
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:
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:
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:
S in ra mn hnh:
a) abcdefHellHellopqrstuvwxyz
b) ghijklmnHellotuvwxyz
c) abcdefghijklmnopqrstuvwxyz
d) abcdefHellolmnopqrstuvwxyz
139
Chng 13 MT S THI MU
140
Ti liu tham kho
141