Documente Academic
Documente Profesional
Documente Cultură
K thut lp trnh
CHNG i
I CNG V LP TRNH
K hiu
ngha
Dng m u hoc kt
thc chng trnh
a s liu vo hoc in
kt qu
K thut lp trnh
Khi iu kin
Chng trnh con
Mi tn
II.3.
II.3. Mt s v d biu din thut ton bng lu
II.3.1. Thut ton khng phn nhnh:
V d 1: Tnh A = x2 + y2
Begin
Nhap (x,y)
A = x2 + y2
Xuat (A)
End
V d 2 : Tnh S =
Ax + By + C
x +y
2
K thut lp trnh
a>b
Max = b
Max = a
S
Max < c
Max = c
Xua t (Max)
End
a=0
Xua t (-b/a)
b=0
Xuat (PTV)
End
Xua t (PTVN)
K thut lp trnh
a=0
PTB1 (b, c)
S
Delta = b*b - 4*a*c
Delta < 0
Xuat (PTVN)
S
Delta = 0
S
Xuat (X1= ,(-b + SQRT(Delta)) / (2*a))
Xuat (X2= ,(-b - SQRT(Delta)) / (2*a))
End
i <= n
S
vi n l gi tr kt thc.
K thut lp trnh
n
Begin
Nhap (n)
i=1
S=0
Nhap (xi)
i = i+1
S = S+xi
i <= n
S
Xuat (S)
End
K thut lp trnh
- Hp ng (assembly language)
- Ngn ng cp cao (higher-level language)
Do my tnh ch hiu c ngn ng my, cho nn mt chng trnh vit
trong ngn ng cp cao phi c bin dch sang ngn ng my. Cng c thc
hin vic bin dch c gi l chng trnh dch.
III.2. Chng trnh dch:
Chng trnh dch c chia ra lm 2 loi : trnh bin dch (compiler) v trnh
thng dch (interpreter)
III.2.1. Trnh bin dch: l vic chuyn mt chng trnh trong ngn ng
cp cao no (chng trnh ngun) sang ngn ng my (chng trnh ch).
- Thi gian chuyn mt chng trnh ngun sang chng trnh ch c
gi l thi gian dch.
- Thi gian m chng trnh ch thc thi c gi l thi gian thc thi.
Nh vy, chng trnh ngun v d liu chng trnh thc thi c x
l trong cc thi im khc nhau, c gi l thi gian dch (compile time) v
thi gian thc thi (run-time)
D lieu
Chng trnh
nguon
Trnh bien
dch
Chng trnh
ch
May tnh
thc hien
Ket qua
Hnh I.1. Chng trnh thc thi theo c ch dch ca trnh bin dch
III.2.2. Trnh thng dch: qu trnh dch v thc thi xy ra cng 1 thi
gian, dch n u thi hnh lnh n .
Chng trnh
nguon
Chng trnh
tho ng dch
Ket qua
D lieu
Hnh I.2. Chng trnh thc thi theo c ch dch ca trnh thng dch
K thut lp trnh
CHNG 2
LM QUEN VI NGN NG C
K thut lp trnh
[khai bo bin;]
[nhp d liu ;]
[x l ;]
[xut ;]
}
V d : Chng trnh hin trn mn hnh cu Chao cac ban
void main()
{ printf(Chao cac ban\n);
}
Mt vi nhn xt quan trng :
- Chng trnh C bao gi cng c mt hay nhiu hm, trong c mt
hm chnh bt buc phi c l hm main().
main y chnh l hm c thc hin u
tin trong chng trnh.
- Cp du { } xc nh mt khi lnh.
- Hm printf( Chao cac ban \n) l hm chun ca C dng xut cu
thng bo Chao cac ban ra mn hnh. K t \n l k t c bit dng
xung dng.
- Du ; chm dt mt lnh.
- Chng trnh C c phn bit ch thng vi ch hoa. a s cc t kho
ca C c vit bng ch thng, cn mt s t c vit bng ch hoa m ta
phi tun th cht ch, nu khng th chng trnh dch s khng hiu.
* Mt vi v d
V d 1: In bng ly tha 2 ca cc s nguyn t 10 n 50
/* Chng trnh in bnh phng cc s t 10 n 50*/
#include <stdio.h>
void main()
{int n;
/*Khai bo bin n kiu nguyn */
n=10;
/*Gn n=10 */
while (n<=50)
/*Lp t 10 n 50 bng while */
{ printf(%3d \t %5d\n,n,n*n); /*in dng 5d l dnh 5 v tr in n v n2 */
n++;
/* Tng n ln 1 */
}
/*Ht while*/
}
/*Ht main*/
K thut lp trnh
C php :
printf(chui-nhdng,thamso1,thamso2,...)
printf
ngha :
Hm printf() s xem xt chui-nhdng, ly gi tr cc tham s (nu cn)
t vo theo yu cu ca chui-nhdng v gi ra thit b chun.
Chui-nhdng l mt chui k t, trong c nhng k t xut ra
nguyn vn hoc xut dng c bit, v c th c nhng chui iu khin
cn ly gi tr ca cc tham s thay vo khi in ra.
10
K thut lp trnh
- Nhng k t c bit :
K t
Tc dng
\n
\t
\b
\r
\f
\a
\\
\
\
\xdd
\ddd
M ASCII
Xung hng mi
Tab
Xa k t bn tri
Con tr tr v u hng
Sang trang
Pht ting ci
Xut du cho ngc
Xut du nhy n
Xut du nhy kp
Xut k t c m ASCII dng Hex l dd
Xut k t c m ASCII dng Dec l
ddd
K t NULL
\0
10
9
8
13
12
7
92
39
34
- Chui nh dng :
% [ flag][width][.prec][FNhl] type
Type : nh kiu ca tham s theo sau chui-nhdng ly gi tr ra
Type
ngha
d,i
u
o
x
X
f
e
E
g,G
c
s
%
S nguyn c s 10
S nguyn c s 10 khng du
S nguyn c s 8
S nguyn c s 16, ch thng(a,b,...,f)
S nguyn c s 16, ch in (A,B,...,F)
S thc dng [-]dddd.ddd...
S thc dng [-]d.ddd e[+/-]ddd
S thc dng [-]d.ddd E[+/-]ddd
S thc dng e(E) hay f ty theo chnh xc
K t
Chui k t tn cng bng \0
Du % cn in
11
K thut lp trnh
Flag
nu khng c
+
#
ngha
n
0n
*
Prec
khng c
0
n
*
Cc ch b sung :
F
N
h
l
V d 1: char
12
K thut lp trnh
Dng
%c
%2c
%-3c
%d
%s
%3s
%.6s
%-11.8s
V d 2:
Thng s
tng ng
Xut
c
c
c
c
s
s
s
s
A
A
A
65
Blue moon!
Blue moon!
Blue m
Blue moo
int
i = 123;
float
x = 0.123456789;
Xut
Dng
Thng s
tng ng
%d
%05d
%7o
%-9x
%c
%-#9x
%10.5f
i
i
i
i
i
i
x
123
00123
123
7b
{
0x7b
0.12346
%-12.5e
1.23457e-01
Nhn xt
rng 1
rng 2, canh phi
rng 3, canh tri
M ASCII ca A
rng 10
Nhiu k t hn cn thit
Chnh xc 6 k t
Chnh xc 8, canh tri
Nhn xt
rng 3
Thm 2 s 0
H 8, canh phi
H 16, canh tri
K t c m ASCII 123
H 16, canh tri
rng 10, c 5 ch s thp
phn
Canh tri, in ra di dng
khoa hc
C8
CD
BC
void main()
{
printf(\n\xC9\xCD\xBB);
printf(\n\xC8\xCD\xBC\n);
}
13
K thut lp trnh
Tn kiu
Kch
thc
Phm vi
char
K t
1 byte
-128 127
unsigned char
K t khng du
1 byte
0255
unsigned short
2 bytes
065535
enum
S nguyn c du
2 bytes
-3276832767
short int
S nguyn c du
2 bytes
-3276832767
int
S nguyn c du
2 bytes
-3276832767
unsigned int
S nguyn khng du
2 bytes
0 65535
long
S nguyn di c du
4 bytes
-2147483648
2147483647
unsigned long
S nguyn di khng du
4 bytes
04294967295
float
S thc chnh xc n
4 bytes
double
S thc chnh xc kp
8 bytes
long double
S thc chnh xc hn
double
Ch :
1. Ngn ng C khng c kiu logic (boolean nh Pascal) m quan nim
0 l false
;
Khc 0 l true
2. Ngn ng C khng c kiu chui nh kiu string trong Pascal
3. Cc kiu ng nht:
int = short int = short = signed int = signed short int
long int = long
signed long int = long
unsigned int = unsigned = unsigned short = unsigned short int
unsigned long int = unsigned long
14
K thut lp trnh
I.3. Bin
I.3.1. Tn bin : Tn bin l mt chui k t bt u bng k t ch, k t
k tip l k t ch (du gch di _ c xem l k t ch) hoc s v khng
c trng vi cc t kha ca C.
V d: int
a,b,c;
float x,y,delta;
char c;
* Khai bo v khi to bin:
Kiu d liu
tnbin = gitr ;
a) Hm scanf()
php:: scanf(chui-nhdng,ichthams1, ichthams2,...)
C php
- Chui-nhdng ca scanf() gm c ba loi k t :
+ Chui iu khin
+ K t trng
+ K t khc trng
Chui iu khin c dng :
%[width][h/l] type
15
K thut lp trnh
Vi type:
type xc nh kiu ca bin a ch tham s s nhn gi tr nhp vo
Type
ngha
d,i
S nguyn c s 10 (int)
o
S nguyn c s 8 (int)
u
S nguyn c s 10 khng du (unsigned)
x
S nguyn c s 16 (int)
f,e
S thc (float)
c
K t (char)
s
Chui k t
p
Con tr (pointer)
lf
S thc (double)
Lf
S thc (long double)
Width : xc nh s k t ti a s nhn vo cho vng .
Hm scanf() ch nhn cho width k t hoc cho n khi gp k t trng
u tin. Nu chui nhp vo nhiu hn th phn cn li s dnh li cho ln gi
scanf() k tip.
V d 1: scanf(%3s,str);
Nu nhp chui ABCDEFG
th scanf() s nhn ti a 3 k t ct vo mng str, cn DEFG s c ly
nu sau c ln gi sanf(%s,str) khc.
V d 2: unsigned long money;
scanf(%lu,&money);
16
K thut lp trnh
V d 4: scanf(%d ,&num);
Hm scanf() cho ta nhp mt k t khc trng na th mi thot ra. K t
s nm trong vng m v s c ly bi hm scanf() hoc gets() tip theo.
K t khc trng: nu c trong chui-nhdng s khin cho scanf() nhn
vo ng k t nh th.
V d 5: scanf(%d/%d/%d,&d,&m,&y);
Hm scanf() ch nhn mt s nguyn, ct vo d, k n l du /, b du
ny i v ch nhn s nguyn k tip ct vo m. Nu khng gp du / k
tip s nguyn th scanf() chm dt.
int n; bin n
&n; a ch ca n
printf(tr = %d, a ch = %d,n,&n);
b) Hm getch():
Hm getch() dng nhn mt k t do ta nhp trn bn phm m khng
cn g Enter vi c php :
ch = getch();
ch = getche();
17
K thut lp trnh
M scancode
59
60
61
62
63
64
65
66
67
68
71
72
80
75
18
K thut lp trnh
77
PgUp
73
PgDn
81
End
79
Ins
82
Del
83
Bng m scancode ca cc phm m rng
c. Hm kbhit(): Hm int kbhit() s kim tra xem c phm no c g
vo hay khng. Nu c, hm kbhit s tr v mt s nguyn khc 0, v ngc li.
K t m ta nhp vo qua hm kbhit() c th ly c qua hm getch()
hoc getche().
V d:
void main()
{
printf("Press any key to continue:");
while (!kbhit()) /* do nothing */ ;
char kytu=getch();
printf("\nKy tu vua an : %c",kytu);
}
I.4 Hng: Hng l cc i lng m gi tr ca n khng thay i trong qu
trnh chng trnh thc hin.
I.4.1. Phn loi :
a. Hng s : l cc gi tr s xc nh v khng i.
Dng
V d
int
unsigned
long
h 8
h 16
float/double
nnnn
-nnnn
nnnnU/u
nnnnL/l
-nnnnl/L
0nnnn
0xnnnn
nnnn.nnnn
nnnn.nnnE/ennn
123.654
123.234E-4
4567
123U
456789L 0345
0x1AB
-12
12uL
-1234L
Ch :
- Cc hng s vit khng du hoc khng s m c hiu l s nguyn,
ngc li l double.
- Cc hng s nguyn ln hn int s c lu tr theo kiu long, cn ln
hn long th c lu tr theo kiu double.
19
K thut lp trnh
V d:
Gi tr ca hng k t l m ASCII ca n.
V d : printf(%c c gi tr l %d,A,A);
A c gi tr l 65
Hng k t c th tham gia vo cc php ton nh mi s nguyn khc.
V d : 9-0=57-48=9
Hng k t c th l cc k t c bit dng \c1 m ta xt hm
printf() nh \n,\a,\t ...
c. Hng chui : L mt chui k t nm trong hai du nhy kp .
V d :
Ch :
- Phn bit
A A
Hng:
Chui K t
Dng lu tr :
A \0
20
K thut lp trnh
l 97-65 = 32
l 0 (sai)
I.4.2. Khai bo hng:
php:: const tnhng = biuthc;
C php
a -A
1<8
V d 2 : x = b + 2*c;
y = a + x;
V d 3 : (n+3) = 4+z;
= c +o;
%
V d :
#include <stdio.h>
void main()
Kiu kt qu
Kiu ca ton hng c kiu cao nht
Kiu nguyn v l php chia nguyn
Kiu thc v l php chia thc
Kiu nguyn v l php chia ly phn d
21
K thut lp trnh
{ char cv;
int iv = 121;
float fv1,fv2;
printf( Chuyn kiu :\n\n);
cv = iv;
printf(int c gn cho char : %d %d (%c)\n\n,iv,cv,cv);
fv1 = iv/50;
printf( int : %d / 50 = %f \n\n,iv,fv1);
fv1 = iv/50.0;
printf( float : %d / 50.0 = %f \n\n,iv,fv1);
fv1 = 1028.75;
fv2 = fv1 +iv ;
printf( %f + %d = %f \n\n,fv1,iv,fv2);
getch();
}
b. Php ton mt ton hng : php tng ++, php gim -
a = a+1
a++ hoc ++a
a-- hoc --a
a = a-1
Ch : Tuy nhin a++ s khc ++a khi chng ng trong biu thc (c
php gn).
a++ : Tng a sau khi gi tr ca n c s dng.
++a : Tng a trc khi gi tr ca n c s dng.
V d :
main()
{
int
a=4 , b=6, n;
n = a + b;
n = a++ + b;
n = ++a + b;
n = --a + b;
n = a-- + b;
n = a+ b;
4
4
5
6
5
4
4
6
6
6
6
6
6
6
10
10
12
11
11
10
}
I.5.3. Php gn phc hp:
22
K thut lp trnh
Cc php gn phc hp :
+= , -= , *= , /= , %= , <<= , >>=
V d : n = n*(10+x)
n *= (10 +x)
n %= 10
n = n % 10
I += 3
I = I +3
<< : l php dch chuyn bit qua tri .
>> : l php dch chuyn bit qua phi .
I.5.4. Php ton quan h:
<
>
>=
<=
!=
==
:
:
:
:
:
:
nh hn
ln hn
ln hn hoc bng
nh hn hoc bng
khc
bng
Ch :
- Phn bit ton t so snh == vi php gn =
- C khng c kiu d liu boolean m qui c : Gi tr 0 l sai
Gi tr !=0 l ng
V d:
a=10;
b=4
b= (a>6)*(a-6)
c= (a< 5)*(a-5)
c=0
V d: Tm s ln nht trong 3 s nguyn a, b, c
#include <stdio.h>
#include <conio.h>
void main ()
{ int a, b, c, max;
printf(Chng trnh tm s ln nht trong 3 s);
printf(Nhp a, b, c);
scanf(%d %d %d , &a, &b, &c);
max = a;
if (max<b) max = b;
if (max<c) max = c;
printf(S ln nht = %d, max);
getch();
}
23
K thut lp trnh
I.5.5.Ton t logic:
ngha
Ton t
NOT
AND
OR
!
&&
||
Ph nh
Giao, v
Hi
!x
x && y
true
false
false
true
true
true
false
false
true
false
true
false
true
false
false
false
x || y
true
true
true
false
true
true
false
true
true
false
false
false
V d 1: Xt k t c c phi l k s hay khng?
char c;
if (c >= 0 && c <= 9)
printf (% c l k t s , c);
V d 2: Xt k t ch l ch ci hay khng?
if ((ch> =a) and (ch< =z)) or ((ch> =A) and (ch< =Z))
printf(%c l chu cai \n,ch);
V d 3:
int a=10, b=5, c=0;
a && b 1
a && c 0
a||c 1
V d 4:
int a=10, b=5;
24
K thut lp trnh
php::
C php
T = (exp1, exp2, exp3 );
// T = kt qu ca exp3
V d: m= (t=2, t*t+3)
m=7; t=2
c= (a=10,b=5,a+b); a=10, b=5, c=15
I.5.7. Ton t iu kin:
C php :
T = <iu kin> ? <bt1> : <bt2>;
Nu <iu kin> l ng th T = <bt1> , ngc li T = <bt2>
V d:
A = i>= MAX ? 1: 0;
printf ( max (a,b) = %d , (a>b) ? a:b);
lower = (c > = A && c< = Z) ? c - A + a :c;
K hiu
~
&
|
^
<<
>>
ngha
ly b 1
giao
hi
hi loi tr
nhn 2
chia 2
25
K thut lp trnh
Bit
Bit kt qu
~A
A&B
A|B
A^B
0
0
1
1
0
1
0
1
1
1
0
0
0
0
0
1
0
1
1
1
0
1
1
0
V d:
a= 4564
b= 13667
a&b
a|b
a^b
0001
0011
0001
0011
0010
0001
0101
0001
0101
0100
1101
0110
0100
1111
1011
0100
0011
0000
0111
0111
ngha:
1. Php AND bit thng c dng kim tra mt bit c th no trong
thnh phn d liu x c tr 0 hay 1. Vic ny thc hin bng cch s dng mt
mt n (mask) vi bit cn quan tm bng 1 cn cc bit khc bng 0. Ta ly mask
AND vi gi tr x. Nu kt qu thu c bng mask th l bit cn quan tm l 1,
ngc li l 0.
V d 1:
void main()
{ unsigned x1; x2;
printf (\n cho 2 s hex(2 s) );
scanf (%x %x , &x1, &x2);
printf (% 02x & % 02x = % 02x\n, x1, x2, x1& x2);
}
V d 2: Ta mun bit bit th 3 ca s hexa ch l 1 hay 0 :
void main()
{ unsigned char ch, kq;
printf ( \n cho 1 s hex 2 s :);
scanf ( %x, &ch);
kq= ch & 0x08;
if (kq== 0x08) printf (bit 3 = 1);
else printf (bit 3 = 0);
}
26
K thut lp trnh
num << 2 : 0
27
K thut lp trnh
1 0 1 0
0 0 1 0
1 1 1 0
0 1 1 0
1 0 0 0
1 0 1 1
// 9A2E hexa
1 0 1 0 0 0 1 0
1 0 0 1
num =
num >> 2 -6517 = 0xE68B
=
0 1 1 0 1 0 0 0
1 1 1 0
1
V d 8: Chng trnh i s hex ra s nh phn :
#include <stdio.h>
#include <conio.h>
void main()
{ int num;
unsigned int mask;
clrscr();
printf ("Chuong trinh doi so hexa sang nhi phan\n");
printf ("Nhap vao so hexa :");
scanf("%x",&num);
mask = 0x8000;
printf("\n Dang nhi phan cua so %x la ",num);
for (int j=1; j<=16; j++)
{ printf("%d",mask & num?1:0);
if (j==4 || j==8 || j==12) printf("-");
mask >>=1;
}
getch();
}
1 1 1 0
1 0 1 1
K thut lp trnh
28
29
K thut lp trnh
}
pbin (num)
int num;
{ unsigned int mask;
int j, bit;
mask = 0x8000;
printf (%04x, num);
for(j=0; j<16; j++)
{ bit = ( mask & num ) ? 1:0;
printf (%d, bit);
if (j= = 7) printf (- -);
mask >> = 1;
}
printf (- -);
mask >> 1;
}
pline ()
{ printf (- - - - - - - - \n);
}
* S chuyn kiu bt buc:
Trong C c 2 trng hp chuyn kiu: chuyn kiu t ng v chuyn
kiu bt buc.
Chuyn kiu bt buc: c p dng khi chuyn kiu t ng khng c.
C php:
V d: d = (float) (f - 32)
int a= 100, b=6;
double f;
f =a/b
// kt qu f=16
f= (double) a/ (double)b // kt qu f= 100.0 / 6.0= 16.666.
* Mc u tin ca cc php ton:
u tin
Php ton
Th t kt hp
()
[]
! ~ ++ - - (type) * & size of
2
3
4
5
/
+
<<
>>
30
K thut lp trnh
6
7
<
<=
>
==
>=
!=
&
10
11
&&
12
||
13
14
=
+=
-=
..
V d 1: 3/4 * 6
#
3*6 /4
0 *6
18 /4
0
4
#
(float) (2/4)
V d 2: (float) 2 /4
2.0 /4
(float) 0
0.5
0.0
I.6.
I.6. Chui
I.6.1. nh ngha :Chui l mt mng m cc phn t ca n c kiu k t.
Khai bo mt chui k t cha ti a 49 k t
char chui[50];
* Lu : Tt c cc chui u c kt thc bng k t NULL (\0). Do ,
nu chui di 50 th ta ch c th cha ti a 49 k t.
I.6.2. Khi ng tr:
char chui[ ] = {A, N, H, \0};
char chui[ ] = "ANH";
I.6.3. Nhp / xut chui:
a. Nhp chui:
gets (chui)
b. Xut chui:
puts (chui)
Ch ::
- Khi nhp chui th khng c dng hm scanf v hm scanf khng chp
nhn khong trng.
V d: scanf(%s, chui); // ta nhp vo Nguyn Vn i th
K thut lp trnh
31
32
K thut lp trnh
V d:
char destination[25];
char *blank = " ", *c = "C++", *turbo = "Turbo";
strcpy(destination, turbo); // destination = "Turbo"
strcat(destination, blank); // destination = "Turbo "
strcat(destination, c);
// destination = "Turbo C++"
- strncat(dest, src, n):
n) ni nhiu nht l n k t ca src vo cui chui dest,
sau thm k t null vo cui chui kt qu.
V d:
char destination[25];
char *source = " States";
strcpy(destination, "United");
strncat(destination, source, 6);
printf("%s\n", destination); // destination = "United State"
- char * strchr(s, ch):
ch) tr v a ch ca k t ch u tin c trong chui S;
nu khng c th tr v NULL (thng dng ly h)
V d:
char string[15];
char *ptr, c = 'r';
strcpy(string, "This is a string");
ptr = strchr(string, c);
if (ptr)
printf("K t %c v tr: %d\n", c, ptr-string);
else
printf("Khng tm thy k t %c\n",c);
- char * strstr(S1, S2):
S2) tr v v tr ca chui S2 trong chui S1; nu S2
khng c trong S1 th hm strstr tr v tr NULL.
I.6.6. Mng cc chui
Ch :
- Khng nn gn chui vi chui (s1= s2) m phi dng hm
strcpy(S1,S2)
- Khng c so snh 2 chui bng cc ton t quan h (S1== S2,
S1>S2, S1>= S2), m phi dng hm strcmp(S1,S2).
K thut lp trnh
33
34
K thut lp trnh
php::
C php
if (k) S1;
K
NO
YES
S1
if (k) S1;
else S2;
K
NO
S2
YES
S1
K thut lp trnh
35
if (a>b)
if (a>c) max=a;
else max=c;
else if (b>c) max =b;
else max= c;
V d 2: Tnh hm f(x) :
, nu -2 < = x< 2
f(x) = x2
4
,
x>=2
if (x>=-2 && x<2)
fx= x*x;
else if (x>=2)
fx= 4;
else { printf("\n Khong xac dinh") ; exit(0) ;}
II.2.2. Lnh chn la: switch_case
php::
C php
switch (biu thc)
{ case hng 1: S1;
case hng 2: S2; break;
.
.
.
case hng 3: Sn; break;
default: S0;
}
K thut lp trnh
{
unsignedchar ch;
int k;
clrscr();
printf("Nhap 1 ky tu so hex : ");
ch=getche();
switch (ch)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': k=ch-'0'; break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':k=ch-'A'+10; break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f': k= ch-'a'+10; break;
default: k=0;
}
printf ("\nSo thap phan cua ky tu hexa %c la %d ",ch,k);
getch();
}
V d: Vit chng trnh to 1 my tnh c 4 php ton + , - , * , /
#include <stdio.h>
#include <conio.h>
void main()
{
36
37
K thut lp trnh
php::
C php
While (bt)
S;
NO
YES
38
K thut lp trnh
C php:
do
S
S
while (bt);
Yes
k
No
K thut lp trnh
main ()
{ int n=0;
do
{ printf(%c c m ASCII %d\n, n, n);
n ++;
} while (n <= 255);
}
II.3.3. Lnh for:
php::
C php
for ([bt_khi ng]; [bt_k]; [bt_lp])
S;
V d 1: Lp lnh S t 1 n 10
for (int I=1; I== 10; I++) sai
S;
for (int I=1; I<= 10; I++) ng
S;.
V d 2: for (; ;)
{ c = getch()
if (c == ESC) break;
}
So snh vng lp while - for:
for ( bt_khi ng; bt_k; bt_lp)
bt_khi ng;
S;
while (BiuThc_K)
{
S;
BT_lp;
}
V d 3: Vit chng trnh in ra bng cu chng bng vng for
void main ()
{ int a;
for (a=2; a<= 9; a++)
{ for (b =1; b <= 9; b++)
printf(%d* %d = %d \t, a, b, a*b);
printf(\n);
}
}
V d 4: Vit chng trnh tnh n giai tha
39
K thut lp trnh
40
void main ()
{ long gt = 1;
for (int i =1; i<= n; i++)
gt = gt * i;
printf(%d! = %u \n, n, gt);
}
V d 5: Vit chng trnh tnh biu thc:
(1 + 1/12 ) * (1 + 1/22 ) *......... (1 + 1/ n2 )
void main ()
{ int i, n;
float S;
printf(Nhp s :);
scanf(%d, &n);
S = 1;
for (i= 1;i<= n; i++)
S = S*(1+1.0 / (i*i));
printf(\nKet qua = %f, S)
}
* Pht biu break, continue, goto:
1. Break:
Lnh break cho php thot ra sm khi vng lp ( whiledo , for, dowhile),
lnh switch.
2. Lnh continue:
Lnh continue ch dng trong vng lp lm cho chng trnh nhy tt v
iu kin kim tra ca vng lp bt u mt vng lp mi.
V d: Vit chng trnh nhp mt cu ch thng kt thc bng du
chm, xut ra bng ch hoa
void main ()
{ char ch;
while (1)
{ ch = getch ();
if ((ch> = a) && (ch< = z))
printf(%c, ch - a + A);
if (ch == ) continue;
if (ch == .) break;
}
K thut lp trnh
41
Bi tp:
tp:
1. Vit chng trnh tnh din tch
- Hnh vung
- Hnh thang
- Tam gic thng
- Tam gic vung
- Hnh trn
2. Tnh khong cch mt im (X0, Y0) ti mt ng thng Ax + By + C = 0
S=
Ax 0 + By 0 + C
, nhp A, B, C, X0, Y0
2
2
A +B
3. Cho 3 s thc x, y, z. Tm
a. Max(x+y+z, x*y*z)
b. Min2 ((x+y+z) / 2, x*y*z) +1
4. Vit chng trnh tm s ln nht trong 3 s nguyn a,b, c
5. Gii phng trnh bc 2 Ax2+Bx+C = 0 trn trng s thc.
6. Vit chng trnh tnh din tch hnh trn, bit bn knh r dng; Chng
trnh c kim tra s liu nhp vo, nu r <=0 th chng trnh bo li v bt
nhp li.
7. Vit chng trnh nhp s thp lc phn in ra s nh phn, c 4 s th cch
mt khong trng.
8. Vit chng trnh to 1 my tnh gm cc php ton sau : + , - , * , / , ^ (ax
vi x nguyn dng), @ (ex )
K thut lp trnh
42
ch thng.
15. Vit chng trnh cho php ta kim tra mt password l ng hay sai (nhp
ti a password 3 ln).
16. Cho chui s, vit chng trnh di chuyn ch t bn tri qua bn phi ca
K thut lp trnh
43
ax+by = c
ax+by = c
Hng dn:
D=
a
b
= ab - ab
a
b
Dx= c
b
= cb - cb
c
b
Dy= a
c
= ac - ac
a
c
if D!= 0
x= Dx/D; y= Dy/ D
else if (( Dx != 0) | | ( Dy != 0))
pt v nghim
else pt v nh
24. Gii h phng trnh 3 n s bc nht
a1 x + b1 y + c1 z = d1
a2 x + b2 y + c2 z = d2
a3 x + b3 y + c3 z = d3
25. Vit chng trnh gii phng trnh trng phng ax4 + bx2 + c = 0
26. Ngi ta mun lp ha n cho khch hng ca Cng ty in lc. Ch s u
v ch s cui k s c cho bit. Bit rng biu gi c tnh ty theo in
nng tiu th.
- Nu in nng tiu th nh hn 100Kwh, gi mi Kwh l 500.
- Nu in nng tiu th t 100Kwh tr ln, th mi Kwh di ra s c tnh
gi l 800
- Ph khu vc l 5000 cho mi khch hng. Vit chng trnh tnh tin
phi tr tng cng gm tin in, v ph khu vc
27. Bit 2 s X, Y biu din thi gian tnh theo giy. Ngi ta mun vit chng
trnh :
- c 2 s ny v in ra tng ca chng
- Chuyn cc s ny v tng ra dng gi, pht, giy ca chng ri in ra.
Kim xem kt qu ca 2 cch tnh c nh nhau khng?
28. Vit chng trnh in bng cu chng t 2 9 theo hng ngang
29. In tam gic *, hnh ch nht *, rng - c
30. V lu v vit chng trnh tnh :
a. 1+2+...+n
K thut lp trnh
44
b. 1+3+5+...+2n-1
c. 2+4+6+...+2n
d. 12+ 22+ 32+...+n2
e. 1/1+ 1/2+ 1/3+...+ 1/n
f. 2+4+8+...+2n
g. 1+ 1/22 + 1/32 +....+ 1/n2
31. Cho epsilon = 0.000001, xc nh cc tng sau y sao cho s hng cui
cng ca tng l khng ng k (s hng cui cng < epsilon )
a. 1/1+ 1/2+ 1/3+1/4+.....
b. 1+ 1/22 + 1/32 +....+...
32. Vit chng trnh in ra bng m ASCII, 16 k t trn 1 dng.
33. V lu v vit chng trnh :
a. Xt mt s c phi l s nguyn t hay khng ?
b. In trn mn hnh 100 s nguyn t u tin
34. Vit chng trnh cho php mt k t ngu nhin ri trn mn hnh. Nu
ngi s dng khng kp n phm tng ng v chm y mn hnh th
thua cuc.
35. Cho hm Fibonacci:
Fn =
1 ; n=0,1
Fn-1 + Fn-2 ; n>=2
a. Tm Fn, vi n do ta nhp
b. In ra N phn t u tin ca dy Fibonacci
36. Vit chng trnh c vo s nguyn N v in ra 1*2*3*..*N cho n khi N <=0.
37. Cho 1 dy gm mt triu t 32 bit, hy m s bit 1 trong mi t.
38. Vit chng trnh on s : ngi chi s on 1 s trong phm vi t 0 n
100, ti a 5 ln. Chng trnh kim tra kt qu v xut thng bo hng dn:
- S bn on ln hn
- S bn on nh hn
- Bn on ng
- My thng cuc
K thut lp trnh
45
III. Hm - quy:
quy:
III.1. Hm:
III.1.1. Mc ch: Hm l mt chng trnh con ca chng trnh chnh,
vi cc mc ch sau:
* Trnh vic lp i lp li cc on chng trnh ging nhau, nh , ta s
tit kim lc lp trnh.
* T chc chng trnh: Dng hm ta s phn mnh chng trnh thnh
nhng khi nh c lp, mi khi l mt hm thc hin mt cng vic no .
Tng hm s c lp trnh, kim tra hon chnh; Sau , ta kt li to chng
trnh hon chnh. Nh vy, chng trnh v sau d hiu v d sa.
* Tnh c lp: cho php hm c lp vi chng trnh chnh. V d hm
c nhng bin cc b m chng trnh chnh v cc hm khc khng th ng
ti. Do , nu ta c khai bo cc bin trng tn vi cc hm khc th cng
khng s nh hng ti cc bin trng tn .
Ch :
- C khng cho php cc hm lng nhau ngha l cc hm u ngang cp
nhau (c th gi ln nhau).
- C khng phn bit th tc hay hm, m ch quan tm n kt qu tr v
ca hm. Nu hm khng tr v kt qu g c th c th xem l th tc.
V d: V hnh ch nht c bng du *:
#include <stdio.h>
#include <conio.h>
void ve_hcn(int d,int r)
// khai bo void cho bit hm khng tr v tr
no c
{ int i,j ;
// i, j l 2 bin cc b trong hm ve_hcn
for (i=1;i<=r;i++)
{
for (j=1;j<=d; ++j)
printf("*");
printf("\n");
}
}
void main()
{ int d=20, r=5;
clrscr();
ve_hcn(d,r); // li gi hm
getch();
}
K thut lp trnh
46
C php:
Kiu tnhm (ds i s)
{ Khai bo bin cc b;
lnh;
[ return (expr);]
}
- Kiu:
Kiu L kt qu tr v ca hm. Nu khng ghi kiu, C s t hiu l kiu
int. Nu khng mun c kt qu tr v th ghi kiu void.
void
- Danh sch i s:
s Lit k cc i s v kiu ca i s gi n hm, cch
nhau bi du ','. Nu khng c i s ta ch cn ghi()
- Lnh return: c cc dng sau:
return;
return (expr);
return expr;
V d: Hm chuyn ch thng sang ch hoa
#include <stdio.h>
#include <conio.h>
Get_upper(char ch)
{ return (ch >='a' && ch <='z')? ch-'a'+'A':ch;
}
void main()
{ char ch;
printf("\nNhap vao ky tu bat ky ");
ch=getche();
printf("\nKy tu %c qua ham Get_upper tro thanh %c",ch,Get_upper(ch));
getch();
}
Lu :
- Hn ch ca lnh return l ch tr v mt kt qu.
- Lnh return khng nht thit phi cui hm. N c th xut hin bt
k ni no trong hm. Khi gp lnh return, quyn iu khin s chuyn
ngay v chng trnh gi.
III.1.3. Cc loi truyn i s
a. Truyn theo tr
47
K thut lp trnh
#include <stdio.h>
#include <conio.h>
int max (int a,int b)
{ int m= a>b?a:b;
a=a*100;
b=b*100;
return m;
}
void main()
{ int a,b,c;
clrscr();
printf("\nChuong trinh tim Max(a,b)\n");
printf("Nhap a b : ");
scanf("%d %d",&a,&b);
c=max(a,b);
printf("\nGia tri lon nhat =%d",c);
printf("\nGia tri a =%d",a);
printf("\nGia tri b =%d",b);
getch();
}
Gi s ta chy chng trnh trn:
Nhap a b : 12 24
Gia tri lon nhat =24
Gia tri a =12
Gia tri b=24
Nhn xt:
- Ta nhn thy rng gi tr hai bin a, b trc v sau khi vo hm max l
khng thay i (mc d trong hm max, c hai bin a v b u thay i); l
c ch ca s truyn i s theo tr.
Li gi hm:
hm
48
K thut lp trnh
max (int
int &a,int
b)
&a
{ int m= a>b? a : b;
a=a *100;
b=b*100;
return m;
}
void main()
{ int a,b,c;
clrscr();
printf("\nChuong trinh tim Max(a,b)\n");
printf("Nhap a b : ");
scanf("%d %d",&a,&b);
c=max(a,b);
// a l tham s thc bin
printf("\nGia tri lon nhat =%d",c);
printf("\nGia tri a =%d",a);
printf("\nGia tri b =%d",b);
getch();
}
Gi s ta chy chng trnh trn:
Nhap a b : 12 24
Gia tri lon nhat =24
Gia tri a =1200
Gia tri b=24
Nhn xt:
- Ta nhn thy rng gi tr bin a trc v sau khi vo hm max thay i;
l c ch ca s truyn i s theo a ch.
Li gi hm:
hm
tnhm (tnbin);
49
K thut lp trnh
void main()
{ int a,b;
printf ("a, b = ");
scanf ("%d %d", &a, &b);
giaohoan(a, b);
}
gihm (mang)
* Truyn i s l mng
hm (kiu mang[]) hoc hm(kiu *mang)
V d: Cng thm mt hng s vo mng tn l dayso.
#define SIZE 5
// dy s c 5 s
#include <stdio.h>
#include <conio.h>
void add_const(int *a, int n, int con) // int *a int a[]
{ for (int i=0; i<n; i++)
*a = *(a++) + con;
}
void main()
{ int dayso [SIZE] = {3,5,7,9,11};
int konst = 10;
add_const(dayso, SIZE, konst);
printf("\nDay so sau khi cong them hang so :");
for (int i=0; i<SIZE; i++)
printf("%d ", *(dayso+i)); // *(dayso+i) dayso[i]
getch();
}
III.1.4. Khai bo nguyn mu ca hm
- Khai bo hm theo nguyn mu i hi phi khai bo kiu d liu ca i
s nm trong nh ngha hm ch khng t chng trn cc dng ring.
- C khng nht thit phi khai bo hm theo nguyn mu. Tuy nhin, nn
c v n cho php chng trnh dch pht hin c li do khng ng kiu d liu
gia tr truyn n hm v tr m hm mong mun.
V d:
float dinhthuc (float a, float b, float c, float d)
{ return (a*d- b*c);
}
void main()
50
K thut lp trnh
Kiu tnbin ;
51
K thut lp trnh
tn hng
gi tr
PI
MAX
THONGBAO
khoangtrang
3.14
100
Ht Gi"
b. nh ngha Macro:
#define
tnmacro (i s ) thao tc
sqr (x)
x*x
V d: #define
#define
sum (x,y) x+y
a = b * sum (x,y); // a = b * x+y;
#define
sum (x,y) (x+y)
a = b * sum (x,y); // a = b * (x+y);
*Ch : Trong cc thao tc Macro nn s dng cc du ngoc trnh dn
ra mt kt qu sai
max (a,b) ((a) > (b) ? (a) : (b))
V d: #define
#define
honv (a,b) { int tm =a; a= b; b= tm;}
#define
error (n)
printf ( error %d, n)
Di y mt s Macro phn tch k t, tt c u trong <ctype. h>. Cc
macro ny tr v tr khc 0 nu thnh cng. i vi mi macro, thnh cng c
nh ngha nh sau:
Macro
Isalpha (c)
Isupper (c)
Islower (c)
isdigit (c)
Isxdigit (c)
Iscntrl(c)
Ispace (c)
Khai bo: char c;
K t
c l k t a z, A Z
c l k t A Z
c l k t a z
c l k s 0 9
0 9, A F, a z
c l k t xa hoc k t iu khin
(0x7F hoc 0x00 n 0x1F)
c l k t space, tab, carriage return,
new line (0x09 n 0x0D, 0x20)
52
K thut lp trnh
=
=
1*2*3*......*(n-1)*n , n>0
{1
{ 1n*(n-1)!
, n=0
, n>0
, n=0
53
K thut lp trnh
Nhn xt:
- Theo cng thc trn, ta nhn thy trong nh ngha ca n giai tha (n!)
c nh ngha li chnh n nn hm giai tha c qui.
- Vi n >=0 , iu kin dng tnh hm giai tha l n=1
2. Hm FIBONACCI:
FIBONACCI:
Fn =
1
Fn-1 + Fn-2
; n =0,1
; n>1
54
K thut lp trnh
A
M
C
A
M
D
C
A
M
C
A
M
A
M
D
A
M
A
M
B
M
D
B
M
B
M
M
thi gian
Tng t vi trng hp hm qui, khi gi qui ln nhau th mt lot
cc khung kch hot s c to ra v np vo b nh Stack. Cp qui cng cao
th s khung kch hot trong Stack cng nhiu, do , c kh nng dn n trn
Stack (Stack overflow). Trong nhiu trng hp khi lp trnh, nu c th c ta
nn g qui cho cc bi ton.
K thut lp trnh
55
IV. Structure:
Structure:
Cc kiu n gin ti mt thi im ch lu gi c mt gi tr duy nht.
Cn mt bin kiu mng dng lu tr cc gi tr cng kiu d liu vi nhau,
chng hn nh mt dy s, mt dy cc k t,...Nhng trong thc t, iu ny
vn cha v cc thnh phn m ta lu gi thng l khc kiu d liu vi
nhau.
V d : Ta mun lu gi cc thng tin v mt sinh vin nh sau : MASO,
HO, TEN, NGAYSINH, NOISINH, PHAI, DIACHI, LOP . Vi cc thnh phn
nh vy, th r rng cc thnh phn ca 1 sinh vin khng th cng kiu m phi
thuc cc kiu khc nhau, c th l:
- MASO, HO, TEN : mng ch
- NGAYSINH : int ngy , thng , nm ;
- NOISINH : mng ch
- PHAI
: unsigned int;
- LOP
: mng ch;
Do , lu tr c cc thnh phn khc nhau ca mt i tng ta phi
s dng mt kiu d liu trong C l Structure. (tng t nh record trong Pascal)
IV.1. nh ngha:
Mt bin c kiu structure c dng lu tr mt i tng c nhiu
thnh phn. Cc thnh phn c th thuc cc kiu d liu khc nhau.
IV.2. Khai bo: Mun khai bo kiu hocvien dng lu tr h, tn, im
mn TOAN,LY,HOA, TB, Xp loi ca mt hc vin, ta c :
struct hocvien
{
char ho[30];
char ten[7];
float toan, ly, hoa , dtb;
char xeploai[10];
};
- khai bo bin hv c kiu hocvien :
struct hocvien hv;
- truy xut ti mt thnh phn, ta dng du chm, v d nh: hv.ho
truy xut ti h ca hc vin.
* Khai bo kt hp: va khai bo kiu structure va khai bo bin c kiu .
struct hocvien
{
char ho[30];
K thut lp trnh
56
char ten[7];
float toan, ly, hoa , dtb;
char xeploai[10];
} hv1, hv2;
// khai bo 2 bin hv1, hv2 cng kiu hocvien
hv2
- Khai bo structure lng nhau:
V d:
void main()
{ struct ngaysinh
{ unsigned int ngay, thang, nam;
};
struct hocvien
{ char ho[30];
char ten[7];
struct ngaysinh ngsinh;
float toan, ly, hoa, dtb;
char xeploai[10];
};
struct hocvien hv;
}
Trong trng hp ny, truy xut ti thng sinh ca hc vin hv, ta vit
nh sau: hv.ngsinh.thang.
V. FILE
FILE:
V.1. File vn bn:
- File vn bn l file c lu tr di dng kiu k t
C 2 cch truy xut theo kiu k t.
- Truy xut theo tng k t
- Truy xut theo tng dng
V.1.1. Khai bo tp tin:
Khai bo bin kiu file:
FILE *fptr
V.1.2. M tp tin:
fptr = fopen (tn file, kiu);
- Trong "tnfile" , ta c th ch nh mt ng dn y nh sau
"C:\THU\KTLT\VIDU.TXT". Hm fopen nu m file thnh cng s tr v mt
con tr file cho tp tin "tn file", v con tr ny c ct gi trong bin fptr (bin
K thut lp trnh
57
kiu FILE).
Nu khng c file "tn file" trn da th hm fopen s tr v tr NULL
( nu fptr == NULL ngha l khng c file )
- Kiu: gm c:
r
58
K thut lp trnh
ch = getc (fptr)
- Ghi k t ln tp tin
putc (ch, fptr)
V d 1: To 1 file trc tip t bn phm. Qu trnh to s dng li khi ta n
phm Enter.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ FILE *fptr;
char tenfile[67];
char ch;
clrscr();
printf("Cho biet ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"w"))==NULL)
{ printf("Viec tao file co loi\n");
exit(0);
}
while ((ch=getche()) !='\r')
putc(ch,fptr);
fclose(fptr);
}
V d 2: In ni dung tp tin ra mn hnh
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ FILE *fptr;
char tenfile[67];
char ch;
clrscr();
printf("Cho biet ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"r"))==NULL)
{ printf("Viec mo file co loi\n");
exit(0);
// m file mi ghi
K thut lp trnh
}
while ((ch=getc(fptr)) !=EOF)
printf("%c",ch);
fclose(fptr);
}
59
K thut lp trnh
60
#include <conio.h>
#include <stdlib.h>
void main()
{ FILE *fptr;
char tenfile[67];
int ch;
int dem=0, tu=0;
clrscr();
printf("Cho biet ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"r"))==NULL) // m file c
{ printf("Viec mo file co loi\n");
exit(0);
}
while ((ch=getc(fptr)) !=EOF)
{ if ((ch>='a' && ch <='z') || (ch>='A' && ch<='Z'))
tu=1;
if ((ch==' ' || ch=='\n' || ch=='\t') && tu)
{ dem++;
tu=0;
}
}
printf("So tu trong file =%d",dem);
fclose(fptr);
}
V.1.5. c / ghi chui k t:
K thut lp trnh
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void main()
{ FILE *fptr;
char tenfile[67];
char chuoi[80];
clrscr();
printf("Cho biet ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"w"))==NULL)
// to file mi
{ printf("Viec tao file co loi\n");
exit(0);
}
while (strlen(gets(chuoi)) > 0)
// hm strlen() trong <string.h>
{ fputs(chuoi,fptr);
fputs("\n",fptr);
}
fclose(fptr);
}
V d 2: c cc chui k t t tp tin, v in n trn mn hnh.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ FILE *fptr;
char tenfile[67];
char chuoi[81];
clrscr();
printf("Cho biet ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"r"))==NULL)
{ printf("Viec tao file co loi\n");
exit(0);
}
while (fgets(chuoi,80,fptr)!= NULL)
printf("%s",chuoi);
fclose(fptr); getch();
}
61
K thut lp trnh
62
63
K thut lp trnh
V.2.3. ng fi
file:
le:
fclose (fptr)
V.2.4. c/ghi file: Hm fread : c s mu tin(cu trc) trong file fptr
vo <bin cu trc>.
fread (& bin cu trc, sizeof (bin cu trc) , s cu trc, fptr);
Hm fread tr v s cu trc c c
Hm fwrite ghi d liu trong <bin cu trc> vo file fptr.
fwrite (&bin cu trc, sizeof (bin cu trc) , s cu trc, fptr);
Hm fwrite tr v s cu trc ghi c ln file
Ch ::
- kim tra vic c file ta kim tra s cu trc c c. Nu s cu trc
tr v bng 0 m ta cn c l 1 cu trc th iu chng t ht file.
K thut lp trnh
64
if (strlen(hv.hoten) !=0)
{ printf("Nhap tuoi :");
gets(tuoi);
hv.tuoi = atoi(tuoi);
// macro doi chuoi qua so nguyen
fwrite(&hv, sizeof(hv), 1, fptr) ; // ghi noi dung 1 mau tin trong bien hv
// vao file fptr
}
}
while (strlen(hv.hoten)!=0);
fclose (fptr);
}
V d 2: Ghi d liu mng vo file nh phn
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{ struct hocvien
{ char hoten[30];
int tuoi;
} hv;
struct hocvien table[3];
FILE *fptr;
char tenfile[67];
char tuoi[3];
int i=0;
printf("Nhap ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"wb")) == NULL)
{ printf ("Khong the tao file\n"); exit(0);
}
do
{ printf("Nhap ho ten hoc vien :");
gets(hv.hoten);
printf("Nhap tuoi :");
gets(tuoi);
hv.tuoi = atoi(tuoi);
// macro doi chuoi qua so nguyen
table[i++]=hv;
}
K thut lp trnh
65
while (i<3);
fwrite(table, sizeof(table), 1, fptr) ; // ghi noi dung toan bo hoc vien trong
// table vao file fptr
// hoc for (i=0; i<3; i++)
// fwrite(&table[i], sizeof(table[i]), 1, fptr)
fclose (fptr);
}
V d 3: Chng trnh c file nh phn, v in danh sch hc vin ra mn
hnh.
// In danh sch hc vin ra mn hnh
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{ struct hocvien
{ char hoten[30];
int tuoi;
} hv;
FILE *fptr;
char tenfile[67];
char tuoi[3];
printf("Nhap ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"rb")) == NULL) // M file c
{ printf ("Khong the mo file\n"); exit(0);
}
clrscr();
printf(" Ho va ten
Tuoi");
while (fread(&hv,sizeof(hv),1,fptr) ==1)
{
printf("\n%-20s",hv.hoten);
printf("%3d",hv.tuoi);
}
fclose (fptr);
}
V.2.5. Truy xut tp tin ngu nhin: (iu khin con tr tp tin trn file nh
phn)
K thut lp trnh
66
67
K thut lp trnh
K thut lp trnh
68
fp = fopen("perror.dat", "r");
if (!fp)
perror("Khng th m file c");
}
Khi chy chng trnh ny, nu trn da cha c tp tin perror.dat th s hin
thng bo li: Khng th m file c: No such file or directory.
Bi tp
1. To tp tin din tch.h
#define
Pi
3.14
#define
dthv (x)
x*x
#define
dtht (x)
(Pi*x*x)
2. Vit chng trnh tnh din tch da vo file dientich.h trn
3. Vit hm qui tnh tch P(n) = 1 * 2 * 3* ....* n , n>0
4. Vit hm qui tnh hm m xn, vi n nguyn.
5. Vit hm qui tnh phn t th n ca hm Fibonacci.
6. Vit hm qui gii quyt bi ton Thp H ni.
C 3 ct A, B, C. Ct A hin ang c n da kch thc khc nhau, da nh
trn da ln di. Hy di n da t ct A sang ct C (xem ct B l ct trung
gian) vi iu kin mi ln ch c di 1 da v da t trn bao gi cng
nh hn da t di.
7. Vit chng trnh m ha v gii m mt file vn bn sao cho nu ta m
ha ri th chng trnh khng m ha na, v nu file cha m ha th
khng c gii m.
8. Cho bit trong mt file vn bn do ta nhp vo c bao nhiu k t, bao nhiu
t, v bao nhiu dng; bit rng cc t cch nhau khong trng, du tab, du
chm.
9. Vit chng trnh to mt menu thc hin cc chc nng sau trn file vn
bn:
- To file mi
- c file
- Xa file
- Ghi ni ui file
- Copy file
- Di chuyn file t th mc ny sang th mc khc
- Tm mt t xut hin bao nhiu ln trong file (khng phn bit ch in, ch
K thut lp trnh
69
thng)
- Thay th t ny bng t khc
10. To menu thc hin cc cng vic sau:
- Nhp danh sch c kiu hc vin vo mt file tn 'HOSO.TXT', mi hc
vin c cc thng tin sau: maso (int), hoten (chui ti a 30 k t), phi
(NAM/NU), tui (int).
- Lit k danh sch hc vin ra mn hnh theo dng sau:
M s
H v tn
Phi
Tui
- Truy xut ngu nhin theo th t mu tin
- Tm kim mt ngi trong file theo m s
- Cp nht sa i cc mu tin theo m s (Nhp m s, sau hiu chnh
li hoten, phai, v tui).
- Xa mt ngi trong file theo m s.
70
K thut lp trnh
1
2
int
Mng n phn t
n-1
B nh
Khai bo:
php:: Khai bo mng 1 chiu
C php
Kiu_DL Tnmng [kch thc];
Kiu_DL : l 1 trong cc kiu d liu c bn, l kiu ca phn t
ca mng
Tnmng: l tn ca mng c t 1 cch hp l
Kch thc: l 1 hng nguyn cho bit s phn t ti a ca mng
V d 1: Khai bo 1 mng s nguyn
int
int
int
bin
n;
M[n] ;
SAI
M[10] ; ng v kch thc mng phi l hng khng phi l
71
K thut lp trnh
Kiu_DL
M[2][3]= {{1,2,3},,
{0,1,0}};
72
K thut lp trnh
int
n,i;
float M[10];
printf("\nCho biet so phan tu cua mang:")
scanf (%d,&n);
for ( i=0; i< n; i++)
{ printf(a[%d]= ,i+1);
scanf (%f,&M[i]);
}
V d 2: Nhp vo mng 2 chiu.
int m, n, i, j;
float M[10] [10];
printf("So dong ="); scanf("%d",&n);
printf("So cot ="); scanf("%d",&m);
for(i= 0; i< n; i++)
for(j= 0; j<m; j++)
{ printf(M[%d] [%d] = ,i,j);
scanf(%f, &M[i][j]);
}
I.1.5. Xut d liu kiu mng: xut d liu mng ta cng phi xut d
liu ca tng thnh phn mng
V d:
int i, n;
float M[10];
for(i = 0; i< n; i++)
printf(a[%d] = %f,i+1, M[i]);
I.2. Thut ton tm kim trn mng cha c th t:
Do mng cha c th t nn ta p dng phng php tm kim tuyn tnh tm
t u mng cho n cui mng. Trong chng trnh sau y, hm Timkim s
tr v tr -1 nu khng c m sinh vin trong danh sch ds, ngc li hm s tr
v v tr ca m s trong danh sch ds.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SOSV 100
typedef struct sinhvien
73
K thut lp trnh
{ char maso[6];
char hoten[30];
};
typedef struct danhsach_sv // nh ngha kiu danhsach_sv
{ int tssv;
sinhvien sv[MAX_SOSV];
} ;
void Nhap_ds (struct danhsach_sv *psv)
{ char sosv[4];
printf("So sinh vien muon nhap :");
gets(sosv);
psv->tssv=atoi(sosv);
for (int i=0; i<psv->tssv; i++)
{ printf("Ma so :");
gets(psv->sv[i].maso);
printf("Ho ten :");
gets(psv->sv[i].hoten);
}
}
void Lietke_ds (struct danhsach_sv *psv)
{ int i=0;
clrscr();
printf (" Ma so Ho & ten \n");
while (i < psv->tssv)
{ printf ("%8s
%-s\n", psv->sv[i].maso,psv->sv[i].hoten);
i++;
}
getch();
}
*/
74
K thut lp trnh
}
void main()
main
{ struct danhsach_sv ds;
char maso[6];
int vitri;
Nhap_ds(&ds);
// Gi hm Nhap_ds vi tham s l ds
Lietke_ds(&ds);
printf("Ma so sinh vien ban can tim :");
gets(maso);
vitri = Timkiem(&ds, maso);
if (vitri !=-1)
printf("Ho ten cua sinh vien la %s",ds.sv[vitri].hoten);
else printf(" Khong co sinh vien voi ma ban nhap vao");
getch();
}
II. Cc thut ton sp xp:
xp:
Trong thc t cuc sng cng nh trong lnh vc lp trnh, vic qun l d liu
thng i hi s tm kim cc d liu cn thit; thun tin cho vic tm
kim, d liu thng c sp xp theo mt th t no .
C rt nhiu phng php sp th t, trong bi ging ny ta ch kho st hai
phng php sp xp l Bubble_Sort v Quick_Sort.
thun tin ta gi s mng l dy s c ti a 100 s, v cc thut ton di
y dng sp xp dy s theo th t tng dn.
II.1. Sp xp theo phng php Bubble_Sort (phng php ni bt)
- Ni dung : Ta cho i duyt dy a[0], .. ,a[n-1]; nu a[i-1] ln hn a[i] th ta
hon i (a[i-1],a[i]). Lp li qu trnh duyt dy ny cho n khi khng c xy
ra vic i ch ca hai phn t.
V d: Ta sp th t dy s sau : 26 33 35 29 19 12 32
Bc 0
26
33
35
29
19
12
26
33
35
29
12
19
26
33
35
12
19
26
29
33
12
19
26
29
32
12
19
26
29
32
12
19
26
29
32
75
K thut lp trnh
12
19
29
35
33
33
32
32
32
32
35
35
- Chng trnh:
#include <stdio.h>
#include <conio.h>
int mang[100];
// bin ton cc
int size ;
void Bubble_Sort(int A[100], int n)
{ int i,j,temp;
for (i=1; i<n; i++)
for (j=n(j=n-1;j>=i; j-j--)
--)
if (A[j(A[j-1] > A[j])
{ temp = A[jA[j-1];
A[jA[j-1] = A[j];
A[j] = temp;
}
}
int Nhap_day_so (int A[])
{ int i,n;
printf("\nSo phan tu cua mang :"); scanf("%d",&n);
for (i=0; i<n; i++)
{ printf ("A[%d] = ",i+1);
scanf("%d",&A[i]);
}
return n;
}
void Liet_ke (int A[], int n)
{ int i;
printf("\n Gia tri mang da duoc sap : \n");
for (i=0; i<n; i++)
printf ("%5d",A[i]);
getch();
}
void main()
main
{
size= Nhap_day_so(mang);
Bubble_Sort(mang,size);
33
35
76
K thut lp trnh
Liet_ke(mang,size);
}
Ta nhn thy phng php ny c th c ci tin d dng. Nu ln
duyt dy no m khng c c s i ch gia hai phn t th dy c th
t v gii thut kt thc. Trong trng hp ny, ta dng mt c hiu flag ghi
nhn iu ny, v gii thut Bubble Sort c ci tin nh sau:
#define FALSE 0
#define TRUE 1
void Bubble_Sort_Ad(int A[], int n)
{ int i,temp;
unsigned char flag=TRUE;
while (flag)
{ flag = FALSE ;
for (i=0; i<n-1; i++)
if (A[i] > A[i+1])
{ temp = A[i];
A[i] = A[i+1];
A[i+1] = temp;
flag=TRUE;
}
}
}
II.2. Sp xp theo phng php Quick_Sort
II.2.1. Ni dung: Chn mt phn t bt k trong danh sch lm im cht
x, so snh v i ch nhng phn t trong danh sch ny to ra 3 phn: phn
c gi tr nh hn x, phn c gi tr bng x, v phn c gi tr ln hn x. Li tip
tc chia 2 phn c gi tr nh hn v ln hn x theo nguyn tc nh trn; qu
trnh chia phn s kt thc khi mi phn ch cn li mt phn t, lc ny ta c
mt danh sch c th t.
V d: Xt dy 26 33 35 29 19 12 32
Ln chia phn th nht : Chn phn t cht c kha l 29, t l x
26
i
33
35
29
19
12
32
j
K thut lp trnh
77
ngng li.
Lc ny dy s c 3 phn khc nhau nh hnh v sau :
26
33
35
29
19
12
32
i
j
19
33
32
26
12
35
29
i
j
26
12
19
29
35
33
32
ij
26
12
19
29
35
33
32
j
i
Ln chia phn th hai cho dy con 26 12 19, chn cht x=12
26
12
19
12
26
19
i
j
j
i
Kt thc ta s c hai phn : 12 ; 26 19
Ln chia phn th 3 cho dy con 26 19, chn cht x=26
26 19
19 26 Kt thc qu trnh chia nh dy con 26 12 19
i
j
j
i
- Ln chia phn th 4 cho dy con 35 33 32, chn cht x= 33
32
33
35
32
33
35
35 33 32
i
j
ij
j
i
Kt thc ta s c ba phn : 32 ; 33 ; 35
n y qu trnh chia phn kt thc v tt c cc phn ch c mt phn t,
lc ny ta s c mt danh sch c th t l :
12 19 26 29 32 33 35
II.2.2. Gii thut:
a. Gii thut khng quy:
- Ta to mt Stack , mi phn t ca Stack c 2 thnh phn l q, r cha ch
s u v ch s cui ca dy cn sp. Ban u, Stack[0].q = 0 v Stack[0].r =n-1
- Tin hnh phn hoch dy s gm cc s bt u t ch s q n ch s r
- Sau mi ln chia phn, ta kim tra xem phn c gi tr nh hn cht v
phn c gi tr ln hn cht nu c t 2 phn t tr ln th a vo Stack. Sau
mi ln phn hoch, ta li ly dy s mi t Stack ra phn hoch tip.
- Qu trnh c nh th cho ti khi Stack rng th kt thc.
* Chng trnh:
K thut lp trnh
78
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
int mang[100];
int size ;
void Quick_Sort(int
A[100], int n)
Quick_Sort
{ struct Element_Stack
// kiu phn t trong Stack
{
int q, r;
};
Element_Stack Stack[50]; // Stack c ti a 50 phn t
int sp=0;
// con tr Stack, khi to sp=0
int i,j,x,q,r,temp;
Stack[0].q =0 ;
// ch s u ca mng cn sp
Stack[0].r =n-1;
// ch s cui ca mng cn sp
do
{ // Ly mt phn hoch ra t Stack
q = Stack[sp].q ; r =Stack[sp].r ;
sp--;
// Xa 1 phn t khi Stack
do
{ // Phn on dy con a[q] ,..., a[r]
i = q; j =r;
x = A[(q+r) / 2] ; // Ly phn t gia ca dy cn sp th t lm cht
do
{ while (A[i] < x) i++; //Tm phn t u tin c tr ln hn hay bng x
while (A[j] > x) j--; //Tm phn t u tin c tr nh hn hay bng x
if (i<=j)
// i ch A[i] vi A[j]
{ temp = A[i];
A[i] =A[j];
A[j] = temp;
i++ ; j--;
}
} while (i<=j);
if (i<r)
// phn th ba c t 2 phn t tr ln
{ // a vo Stack ch s u v ch s cui ca phn th ba
K thut lp trnh
79
sp++;
Stack[sp].q=i;
Stack[sp].r=r;
}
r = j ; // Chun b v tr phn hoch phn c gi tr nh hn cht
} while (q< r);
} while (sp!=-1); // Ket thuc khi Stack rong
}
int Nhap_day_so (int A[])
/* To dy n s ngu nhin t 0 n 9999 a vo mng A */
{ int i,n;
printf("\nSo phan tu cua mang :"); scanf("%d",&n);
randomize();
// dng <time.h> v <stdlib.h>
for (i=0; i<n; i++)
A[i]= rand() % 10000; // Pht sinh cc s ngu nhin t 0 n 9999
return n;
}
void Liet_ke (char str[],int A[], int n)
{ int i;
printf("\n%s\n",str);
for (i=0; i<n; i++)
printf ("%5d",A[i]);
getch();
}
void main()
main
{
size= Nhap_day_so(mang);
Liet_ke("Day so ngau nhien :",mang,size);
Quick_Sort(mang,size);
Liet_ke("Gia tri mang da duoc sap :",mang,size);
}
b. Gii thut Quick Sort qui: v c ch thc hin th cng ging nh
gii thut khng qui, nhng ta khng kim sot Stack m cho qu trnh gi
qui t to ra Stack.
* Chng trnh:
K thut lp trnh
80
void Sort(int
A[], int q,int r)
Sort
{ int temp;
int i=q;
int j=r;
int x = A[(q+r) / 2] ; // Ly phn t gia ca dy cn sp th t lm cht
do
{ // Phn on dy con a[q] ,..., a[r]
while (A[i] < x) i++; //Tm phn t u tin c tr ln hn hay bng x
while (A[j] > x) j--; //Tm phn t u tin c tr nh hn hay bng x
if (i<=j) // Doi cho A[i] voi A[j]
{ temp = A[i];
A[i] =A[j];
A[j] = temp;
i++ ; j--;
}
} while (i<=j);
if (q<j)
// phn th nht c t 2 phn t tr ln
Sort(A,q,j);
if (i<r)
// phn th ba c t 2 phn t tr ln
Sort (A,i,r);
}
void Quick_Sort(int
A[], int n)
Quick_Sort
{ Sort( A,0,n-1);
// Gi hm Sort vi phn t u c ch s 0 n
// phn t cui cng c ch s n-1
}
III. Tm kim trn mng c th t:
t:
Gi s dy s ca ta l dy s c th t tng dn, v x l gi tr cn tm.
Cc hm tm kim s tr v tr -1 nu khng c x trong dy, ngc li cc hm
tm kim s tr v ch s ca x trong dy.
III.1. Tm kim nhanh bng phng php lp:
- Ni dung: Do dy s c th t tng dn, nn nu ta tm c phn t
u tin c tr va ln hn x th ta c th kt lun dy s khng cha tr x. V
vy, ta s rt ngn thi gian tm kim.
- Gii thut:
int Search(int A[], int n, int x)
K thut lp trnh
81
{ int i=0;
while (i<n && A[i] < x)
i++;
return (i<n && A[i]==x ? i : -1) ;
}
void main()
{ int so,vitri;
size= Nhap_day_so(mang);
Quick_Sort(mang,size);
Liet_ke("Gia tri mang da duoc sap :",mang,size);
printf("\nGia tri muon tim :");
scanf("%d",&so);
vitri = Search(mang,size, so);
if (vitri !=-1)
printf("Vi tri cua so %d trong day = %d",so,vitri);
else printf(" Khong co so %d trong day",so);
getch();
}
III.2. Php tm kim nh phn:
- Ni dung:
Bc 1: Phm vi tm kim ban u l ton b danh sch.
Bc 2: Ly phn t chnh gia ca phm vi tm kim (gi l y) so snh
vi x.
Nu x=y th ta tm thy, tr v ch s. Gii thut kt thc
Nu x < y th phm vi tm kim mi l cc phn t nm pha trc
ca y.
Nu x > y th phm vi tm kim mi l cc phn t nm pha sau ca y.
Bc 3: Nu cn tn ti phm vi tm kim th lp li bc 2, ngc li
gii thut kt thc vi kt qu l khng c x trong dy s.
- Gii thut:
int Binary_Search(int A[], int n, int x)
{ unsigned char found=FALSE; // Gi s ban u ta cha tm thy x trong dy
// Phm vi ban u tm kim l t k=0 m = n-1
int k=0;
int m=n-1;
int j;
while (k<=m && !found)
K thut lp trnh
82
{ j=(k+m) /2;
//ch s phn t gia
if (A[j]==x)
found=TRUE;
else if (x>A[j]) k=j+1;
// Phm vi tm mi l (j+1, m)
else m=j-1;
// Phm vi tm mi l (k, j-1)
}
return (found ? j : -1) ;
}
III.3. Php tm kim nh phn qui:
- Ni dung: tng t nh trn
Bc 1: Phm vi tm kim ban u l ton b danh sch (k=0 m=n-1).
Bc 2: Ly phn t chnh gia ca phm vi tm kim (gi l y) so snh
vi x.
Nu x=y th ta tm thy, tr v ch s. Gii thut kt thc
Nu x < y th phm vi tm kim mi l cc phn t nm pha trc
ca y, nn ta gi qui vi phm vi mi l (k,j-1)
Nu x > y th phm vi tm kim mi l cc phn t nm pha sau ca y,
nn ta gi qui vi phm vi mi l (j+1,m )
iu kin dng: x=y hoc k > m.
- Gii thut:
int Binary_Search2(int A[], int k,int m, int x)
{ int j=(k+m) /2;
if (k>m) return -1 ;
else if (A[j]==x) return j ;
else Binary_Search2(A, (A[j]<x ? j+1:k), (A[j] > x ?j-1:m),x);
}
83
K thut lp trnh
Bi tp:
tp:
1. Cho mt dy n s thc A :
a) Tm phn t nh nht ca dy s A
b) Tm phn t ln nht ca dy s A
c) Tnh gi tr trung bnh ca dy s A.
2. Hin ang lu hnh cc t giy bc 50000, 20000, 10000, 5000, 2000,
1000, 500, 200, 100. Nu c x ng, hi rng nn chn cc t giy bc no
s lng cc t giy bc l t nht.
3. Vit chng trnh nhp mt ma trn s nguyn c kch thc M x N. In ra:
- Tng cc phn t ca ma trn
- S cc phn t dng, phn t m, phn t 0 ca ma trn
- Phn t ln nht, nh nht ca ma trn
- Cc phn t trn ng cho chnh ca ma trn (vi M = N )
- Tng cc phn t trn ng cho chnh ca ma trn (vi M = N )
4. Cho 2 ma trn vung A(n,n) v B (n,n) :
- Tnh ma trn tng C = A+ B,
bit C[i,j] = A[i,j] + B[i,j] , i,j [1,m]
- Tnh ma trn tch D = A * B,
n
; i, j = 1..n
84
K thut lp trnh
H & Tn
TB HK1
TB HK2
TB ton
nm
Hng
1
2
3
85
K thut lp trnh
CHNG 4
CON TR (POINTER)
I. NH NGHA
Con tr l mt kiu d liu dng cha a ch. Bin con tr l mt bin
cha a ch ca mt thc th no , thc th l bin hoc l hm.
Con tr thng c dng :
- Tr v nhiu tr t hm qua c ch truyn theo tham s theo a ch trong
hm (tham s hnh thc bin).
- To cc cu trc d liu phc tp nh danh sch lin kt v cy nh phn.
- Truyn mng v chui gia cc hm kh thun li.
I.1. Khai bo: Khai bo bin pi l con tr tr n mt s nguyn.
int *pi;
Lc ny, pi chim 2 bytes cha a ch ca s nguyn m n ang ch
n, ng thi trnh bin dch ca C cng bit pi ang ch n mt s nguyn
(do khai bo). a mt gi tr nguyn vo vng nh m pi ang tr n, ta
dng lnh: *pi = 1;
V d:
void main()
{ int x=4, y=10;
int *px, *py ;
px = &x ;
py = &y;
*px = *px + *py;
}
Minh ha chng trnh trn trong b nh:
Bin
int x=4, y=10;
px=&x;
int *px, *py;
py=&y;
x
950
4
4
951
y
952
10
10
953
px
950
950
py
952
952
86
K thut lp trnh
Kiu *bin;
87
K thut lp trnh
Ch :
:
- Php cng con tr vi mt s nguyn ch c p dng trn mt dy bin
cng kiu
- Khng c cng 2 pointer vi nhau
- Khng c nhn, chia, ly d bin con tr vi bt k s no
V d: Gi s ta c mng nums[]= {10,20,30,40,50}. Vic tham kho ti
nums[i] thc cht l dng dng k hiu con tr, v khi bin dch, trnh bin dch
s chuyn i k hiu mng thnh k hiu con tr.
void main()
{ static int nums [] = {10,20,30,40,50};
for (int i =0; i<5; i++)
printf (%d\n, *(nums + i));
}
Lu : *(nums+i) tng ng vi nums[i]
II.4. Php gn v php so snh:
( Kiu)
*tnbin
88
K thut lp trnh
*p = 97;
// num =97
n = *p;
// n=97
c = (char) *p; // c = a
Ch :: a ch ca mt bin c xem nh mt con tr hng, do n
khng c php gn, tng hoc gim.
V d: int num, *p, n;
p = & num;
p ++; // ng
( & num) ++;
// sai
con tr hng
II.6. Khai bo mt con tr hng v con tr ch n i tng hng:
a. Con tr hng:
Kiu * const p = gi tr;
b. Con tr ch n i tng hng:
Kiu const *p = gi tr hng;
hoc Const kiu *p = gi tr hng;
V d: char *const p2 = ABCD
const char *p1= ABCD
p2 + + ;
// sai
p1 + + ;
// ng;
*p1= B
; p1 = "BCD"
K thut lp trnh
xt::
Nhn xt
a = &a[0][0] = &a[0]
a[i] = &a[i][0]
89
90
K thut lp trnh
0
1
2
3
4
1
2
3
4
5
2
3
4
5
6
3
4
5
6
7
4
5
6
7
8
Ch :
1. S khc nhau gia con tr v mng:
- Bin con tr th c th tng, gim hoc gn cn bin mng l mt con tr
hng do khng th tng, gim hoc gn.
- Ta c th ly a ch ca con tr nhng khng th ly a ch ca mng v
bn thn mng l a ch.
- Khi ta khai bo mt mng th chng trnh dch s cp pht mt vng nh
cho n.
Kiu a[50]
V d 1:
91
K thut lp trnh
Trong b nh :
0
1
49
a
- Bin con tr khi c khai bo th ch c cp mt nh m ni dung
ca n chng bit ch n u
V d 2: a[1]xc nh thnh phn th 2
p+1 : ni dung khng xc nh
phi c p = a p ch ti a
- Nu ta mun to mt mng bng con tr th ta phi xin cp pht mt vng
nh bng hm malloc ()
V d:
int *p;
p = (int) maloc ( 10* sizeof(int));
Trong b nh:
0
1
2
9
p
V d: int *p;
p = malloc (10* sizeof (int));
for(i=0; i< 10; i++)
scanf (%d, p+i)
- loi b vng nh c cp cho con tr ta dng hm free (p)
2. S khc nhau gia tham s ca hm l mng v i s l pointer:
Hm (kiu a[])
Hm (kiu *p)
Ch :
Nu: Kiu a[50][30], *p;
p= a;
th
Hm (Kiu a[][30])
Hm (Kiu *p)
3. Hm tr v kiu con tr:
Kiu *hm (is)
V d:
char *strcat (char s1[], char s2[])
{ int i=0,j=0;
while ( s1[i]!='\0' ) i++;
while ( (s1[i++] = s2[j++]) !='\0' ) ;
92
K thut lp trnh
return s1 ;
}
IV. Con tr v chui
IV.1. Khai bo: khai bo s l 1 chui k t v p l con tr tr n 1 chui
k t, ta vit nh sau:
char s [50];
char *p;
khi to 1 chui trong c 2 trng hp:
static char s[] = ABCD;
char *p = ABCD;
Lc ny, nu ta:
puts (p) ;
// ABCD
puts (++p) ;
// BCD
IV.2. Xt mt s v d v cc hm x l chui
a. Hm Strcpy: Sao chp chui k t t source qua dest.
0
source A
1
B
2
C
3
D
4
E
5
F
\0
dest
#include <stdio.h>
#include <conio.h>
void strcpy (char dest[], char source[])
{
int i=0;
while ((dest[i++] = source[i]) !='\0');
}
void main()
{
char src_str[]="Hoang Van";
char dst_str[20];
strcpy(dst_str,src_str);
printf("\n%s", dst_str);
}
Vit li hm strcpy bng con tr:
void strcpy (char *dest, const char *source)
{ while (( *dest = *source) !=\0)
{ dest ++;
K thut lp trnh
source ++;
}
}
b. Hm Strcmp () : dng so snh 2 chui s1, s2 vi nhau.
int strcmp (char s1[] , char s2 []);
{ int i= 0;
while (s1[i] == s2[i])
{ if (s1[i] == \0)
return 0;
i++;
}
return (s1[i]- s2[i]);
}
Ci t li bng con tr:
int strcmp (char *s1, const char *s2);
{ while (*s1 == *s2)
{ if (*s1 == \0)
return 0;
*s1++;
*s2++;
}
return (*s1 - *s2)
}
c. Hm strcat: ni chui s2 sau chui s1
char *strcat (char s1[],char s2[])
{ int i=0,j=0;
while ( s1[i]!='\0' ) i++;
while ( (s1[i++] = s2[j++]) !='\0' ) ;
return s1 ;
}
Ci t li bng con tr:
char *strcat (char *s1, const char *s2)
{ char *p;
p=s1;
while ( *s1!='\0' )
s1 ++;
while ( (*s1=*s2) !='\0' )
{ s1 ++; s2 ++;
}
93
94
K thut lp trnh
return p ;
}
95
K thut lp trnh
H o
a
n
g
\0
V a
n
\0
C h
i
\0
N g
o
c
\0
N g
u
y
e
t
Hnh 3.2. Mng con tr tr n chui
ds[0]
ds[1]
ds[2]
ds[3]
ds[4]
H o
a
n
g
\0
V a
n
\0
C h
i
\0
N g
o
c
\0
N g
u
y
e
t
Hnh 3.3. Mng cc chui
\0
\0
K thut lp trnh
96
Bi tp:
1. Sp xp li danh sch hc vin theo th t h tng dn bng con tr.
2. Sp xp li danh sch hc vin theo th t tn tng dn, nu trng tn th
sp theo h bng con tr.
3. Sp xp li danh sch hc vin theo th t tn tng dn, nu trng tn th
sp theo h bng mng chui.
97
K thut lp trnh
CHNG 5
I. Khi nim:
nim:
Cu trc danh sch lin kt l cu trc ng, vic cp pht nt v gii
phng nt trn danh sch xy ra khi chng trnh ang chy. Ta thng cp pht
nt cho danh sch lin kt bng bin ng.
Cc phn t s c cp pht vng nh trong qu trnh thc thi chng
trnh, do chng c th nm ri rc nhiu ni khc nhau trong b nh (khng
lin tc) .
First
First
Nil
K thut lp trnh
98
K thut lp trnh
99
First = NULL;
}
b. Cp pht vng nh (New_Node): cp pht mt nt cho danh sch lin
kt. Hm New_Node ny tr v a ch ca nt va cp pht.
Trong chng trnh c s dng hm malloc (trong <alloc.h>) , hm ny cp
pht mt khi nh tnh theo byte t b nh heap. Nu cp pht thnh cng, hm
malloc tr v a ch ca vng nh va cp pht, ngc li n s tr v NULL.
NODEPTR New_Node()
{
NODEPTR p;
p = (NODEPTR)malloc(sizeof(struct node));
return (p);
}
c. Thm vo u danh sch (Insert_First): thm mt nt c ni dung x vo
u danh sch lin kt.
void Insert_First (NODEPTR &First, int x)
{
NODEPTR p;
p = New_Node();
p->info = x;
p->next = First;
First = p;
}
d. Thm nt mi vo sau nt c a ch p (Insert_After): thm mt nt c
ni dung x vo sau nt c a ch p trong danh sch lin kt First.
void Insert_After(NODEPTR p, int x)
{
NODEPTR q;
if(p == NULL)
printf("khong them nut moi vao danh sach duoc");
else
{
q = New_Node();
q->info = x;
q->next = p->next;
p->next = q;
}
}
K thut lp trnh
100
K thut lp trnh
101
if (p->next==NULL) Last=p;
}
e. Xa ton b danh sch (Delete_All): ta c th s dng lnh *First =
NULL xa ton b danh sch, nhng trong b nh, cc vng nh cp pht
cho cc nt khng gii phng v li cho memory heap, nn s lng ph vng nh.
Do , ta s dng gii thut sau:
void Delete_All (NODEPTR &First)
{ NODEPTR p;
while (First != NULL)
{ p=First;
First = First->next;
// hoc First = p->next
Free_Node(p);
}
}
II.3. Duyt danh sch: Thng thng ta hay duyt danh sch lin kt thc
hin mt cng vic g , nh lit k d liu trong danh sch hay m s nt
trong danh sch...
void Traverse(NODEPTR First)
{ NODEPTR p;
int stt = 0;
p = First;
if(p == NULL)
printf("\n (Khong co sinh vien trong danh sach)");
while(p != NULL)
{
printf("\n %5d%8d", stt++, p->info);
p = p->next;
}
}
II.4. Tm kim (Search): Tm nt u tin trong danh sch c info bng vi x.
Do y l danh sch lin kt nn ta phi tm t u danh sch.
Hm Search nu tm thy x trong danh sch th tr v a ch ca nt c tr
bng x trong danh sch, nu khng c th tr v tr NULL.
NODEPTR Search(NODEPTR First, int x)
{
NODEPTR p;
p = First;
K thut lp trnh
102
K thut lp trnh
103
Bi tp:
tp:
1. Vit chng trnh to mt menu thc hin cc cng vic sau:
a. Nhp danh sch lin kt theo gii thut thm v u danh sch, mi phn t
gm c cc thng tin sau: mssv (int), v hoten ( char hoten[30] ).
b. Lit k danh sch ra mn hnh
c. Cho bit tng s nt trong danh sch lin kt, t tn hm l Reccount
( int Reccount(NODEPTR First) )
d. Thm 1 phn t c ni dung info (mssv, hoten) vo sau phn t c th t
th i trong danh sch.
Ghi ch: - Th t theo qui c bt u l 1
- Nu (i <= 0) thm vo u danh sch
Nu i > Reccount(&First) th thm vo cui danh sch.
e. In ra h tn ca sinh vin c m do ta nhp vo.
f. Loi b nt c m do ta nhp vo, trc khi xa hi li "Bn tht s mun
xa (Y/N) ? "
g. Sp xp li danh sch theo th t m s gim dn.
h.Ghi ton b danh sch vo file tn 'DSSV.DAT'
i. Np danh sch t file 'DSSV.DAT' vo danh sch lin kt. Nu trong danh
sch lin kt c nt th xa tt c d liu hin c trong danh sch lin kt
trc khi a d liu t file vo.
2. Vit chng trnh to mt danh sch lin kt theo gii thut thm vo cui
danh sch, mi nt cha mt s nguyn.
3. -Vit hm tn Delete_Node xa nt c a ch p.
- Vit mt hm loi b tt c cc nt c ni dung x trong danh sch lin kt
First.
4. Vit hm Copy_List trn danh sch lin kt to ra mt danh sch lin kt
mi ging danh sch lin kt c.
5. Ghp mt danh sch lin kt c a ch u l First2 vo mt danh sch lin
kt c a ch u l First1 ngay sau phn t th i trong danh sch lin kt
First1.
6. Vit hm lc danh sch lin kt trnh trng hp cc nt trong danh sch
lin kt b trng info.
7. o ngc vng lin kt ca mt danh sch lin kt sao cho:
- First s ch n phn t cui
- Phn t u c lin kt l NULL.
K thut lp trnh
104
105
K thut lp trnh
CHNG 6
(Tree)
Cy l mt cu trc d liu rt thng dng v quan trng trong nhiu phm
vi khc nhau ca k thut my tnh.
V d : T chc cc quan h h hng trong mt gia ph, mc lc ca mt
cun sch, xy dng cu trc v c php trong cc trnh bin dch.
Trong chng trnh ny, chng ta kho st cc khi nim c bn v cy, cc
php ton trn cy nh phn, cng nh cc php ton trn cy nh phn cn bng
( AVL tree) v ng dng ca hai loi cy nh phn tm kim (BST), cy nh phn
cn bng ( AVL tree).
I. Phn loi cy:
cy:
I.1. Mt s khi nim c bn:
1. Cy:
Cy Cy l tp hp cc phn t gi l nt, mt nt (tng t nh mt
phn t ca dy) c th c kiu bt k. Cc nt c biu din bi 1 k t ch,
mt chui, mt s ghi trong mt vng trn.
- A l nt gc vi 3 cy con ln
lt c 3 nt gc ring l B, C, D
- Nt cha (ancestor)
Nt con (descendent)
A l nt cha ca B, C, D
G, H l nt con ca C
G, H khng quan h cha con
vi A
Hnh 5.1. Cy vi nt gc l A
V d 2 : Vi cng mt mn hc T, ta c th biu din dng cy nh
sau :
106
K thut lp trnh
T
CHNG I
I.1
I.2
CHNG II
II.1
II.1.1
II.2
CHNG III
II.3
II.1.2
CHNG I
I.1
I.2
CHNG II
II.1
II.1.1
II.1.2
II.2
II.3
Hnh 5.2
CHNG III
2. Nt cha (Ancestor) : Nt ng trn ca mt nt c gi l nt cha
C l nt cha ca G, H
Nt con (descendent) : Nt ng sau mt nt khc c gi l nt con ca
nt .
Nt I, J, K l nt con ca nt E
3. Bc (degree) :
- Bc ca nt l s cy con ca nt .
C c bc l 2, E c bc l 3 (Hnh 5.1)
- Bc ca cy l bc ln nht ca cc nt trong cy.
Cy trong hnh 5.1 c bc l 3.
Cy bc n c gi l cy n phn nh cy nh phn, cy tam phn.
4. Nt l v nt trung gian:
gian
- Nt l l nt c bc bng 0 (tc l khng c cy con no) :
- Nt trung gian: l mt nt c bc khc 0 v khng phi l nt gc.
V d: Trong hnh 5.1, B, G, H, I, J, K, F l nt l
C, D, E l nt trung gian.
5. Mc ca nt (level) : Nt gc c mc l 1
Mc ca nt con = mc ca nt cha + 1
V d: trong hnh 5.1,
A
c mc l 1
107
K thut lp trnh
B, C, D
c mc l 2
G, H, E, F c mc l 3
I, J, K
c mc l 4
6. Chiu cao ca cy (height) : l mc ln nht ca cc nt l trong cy.
V d: Cy trong hnh 5.1 c chiu cao l 4
7. Th t ca cc nt (order of nodes) : Nu cy c gi l c th t th
phi m bo v tr ca cc nt con t tri qua phi, tc l nu thay i v tr ca
mt nt con bt k th ta c mt cy mi.
V d :
A
cay khac
P i = ( n i .i ) / n
i
108
K thut lp trnh
R oot
ROOT
3
4
6
1 2 3 4 5 6 7 8 9
5
7
A
B
D
C
E
X
Y
F
H
109
K thut lp trnh
. N phi l cy nh phn ng v
. Tt c cc nt l u c mc l d.
Hnh 5.5 khng phi l cy nh phn y
A
B
C
E
D
I
F
K
k1 <k1 <k1
8
7
3
2
1
11
5
10
12
110
K thut lp trnh
A
C
D
E
G
B
E
C
D
E
H
K thut lp trnh
111
- Khai bo:
bo: t chc d liu theo cy nh phn, ta c th dng mt ni
dung ca d liu lm kha sp xp v t chc cy theo nhiu cch khc nhau.
Nhng thng thng thun tin cho vic tm kim v thc hin cc php ton
khc trn cy, ngi ta to thm mt kha ring trong cc phn t v to ra cy
nh phn tm kim.
khai bo bin tree qun l mt cy nh phn, vi ni dung info cha s
nguyn, ta khai bo nh sau:
struct nodetype
{
int key;
int info;
struct nodetype *left;
struct nodetype *right;
};
typedef struct nodetype *NODEPTR;
NODEPTR tree;
tree
1. To cy:
a. Khi to cy(Initialize): dng khi ng cy nh phn, cho chng
trnh hiu l hin ti cy nh phn rng.
void Initialize(NODEPTR &root)
{
root = NULL;
}
Li gi hm: Initialize(tree);
b. Cp pht vng nh (New_Node): cp pht mt nt cho cy nh phn.
Hm New_Node ny tr v a ch ca nt va cp pht.
NODEPTR New_Node(void)
{
NODEPTR p;
p = (NODEPTR)malloc(sizeof(struct nodetype));
return(p);
}
Li gi hm: p= New_Node();
c. To cy BST (Create_Tree): Trong gii thut to cy BST, ta c dng
hm Insert.
Hm Insert: dng phng php qui thm nt c kha x, ni dung a vo
cy c nt gc root . Cy nh phn to c qua gii thut Create_Tree l cy
nh phn tm kim (BST).
K thut lp trnh
112
K thut lp trnh
113
114
K thut lp trnh
p1
p1
p1
p
rp
5
3
10
xoa nut p
15
12
20
15
20
12
10
xoa nut p
5
15
20
rp
3
2
18
18
20
25
25
115
K thut lp trnh
10
10
20
15
12
25
5
15
30
18
25
r
35
12
30
18
28
35
28
K thut lp trnh
116
{
rp = p;
if (rp->right == NULL) p = rp->left;
// p l nt l hoac la nut chi co cay con ben trai
else if (rp->left == NULL)
p = rp->right; // p l nut co cay con ben phai
else remove_case_3 (rp->right);
free (rp);
}
}
Li gi hm: Remove(x, tree); // x l kha ca nt mun xa
d. Tm kim (Search): Tm nt c kha bng x trn cy nh phn BST c
gc l root. Nu tm thy x trong cy th tr v a ch ca nt c tr bng x trong
cy, nu khng c th tr v tr NULL.
Do cy nh phn l BST nn ta c th tm kim nhanh bng phng php
tm kim nh phn.
NODEPTR Search(NODEPTR root, int x)
{
NODEPTR p;
p = root;
while(p != NULL && x!=p->key)
if(x < p->key)
p = p->left;
else
p = p->right;
return(p);
}
Li gi hm: p=Search(tree, x);
3. Cc php duyt
duyt cy: C 3 cch duyt c bn l NLR, LNR, LRN v mt
cch c bit l duyt cy theo mc. y, ta ch xt 3 phng php duyt
NLR, LNR v LRN. Xt cy sau :
117
K thut lp trnh
4
2
1
5
3
118
K thut lp trnh
III.1. nh ngha:
- Cy nh phn tm kim cn bng (AVL) l cy nh phn tm kim m ti
tt c cc nt ca n chiu cao ca cy con bn tri ca n v chiu cao ca cy
con bn tri chnh lch nhau khng qu mt.
10
20
8
30
15
12
18
25
40
nt p cn bng
nt p b lch v tri
nt p b lch v phi
-1
A
0
0
0
0
U1
0
U2
U3
B
B
U4
U5
0
U6
U7
B
U8
-1
0
BB
B
U9
0
U10 U11
U12
K thut lp trnh
119
120
K thut lp trnh
* Cn bn
bngg li cy: Gi ya l nt trc gn nht b mt cn bng khi thm
nt x vo cy AVL. Do c 2 trng hp b mt cn bng khi thm nt x l tng
t nhau nn ta ch xt trng hp bfya=1 v nt l thm vo l nt sau bn tri
ca nt ya.
1 ya
S 0
T1
chieu
cao
n
T2
chieu
cao
n
T3
chieu
cao
n
2 ya
S 1
T1
chieu
sa u
n
T2
chie u
sa u
n
T3 xoay phai
chieu quanh nu t ya
sau
n
T1
chieu
sau
n
x
0
0 ya
T2
chieu
sau
n
T3
chie u
sa u
n
121
K thut lp trnh
T3
chieu
sau
n
xoay trai
S 0
quanh nu t S
T1
chie u
sau
n
T2-1
chieu
sau
n-1
x
2
2
T2-2
chieu
sau
n-1
ya
T3
chieu
sau
n
122
K thut lp trnh
S 0
xoay phai
quanh nut ya
T1
chieu
sau
n
-1
T2-1 T2-2
chieu chie u
sau
sau
n-1
n-1
ya
T3
chieu
sau
n
Hnh 5.18. Xoay kp (xoay tri quanh nt s, xoay phi quanh nt ya) cn
bng li cy.
Bng sau y phn bit cc trng hp cy b mt cn bng khi thm nt v
cc php xoay cy tng ng cn bng li cy:
Trng hp
1.a
1.b
2.a
2.b
bfya = 1
bfs = 0
bfya = 1
bfs = 0
bfya = 2
bfs = 1
bfya = 2
bfs = -1
bfya = -1
bfs = 0
bfya = -1
bfs = 0
bfya = -2
bfs = -1
bfya = -2
bfs = 1
Cc php xoay cy v ch
s cn bng mi
Xoay kp
1. Xoay tri quanh nt s
2. Xoay phi quanh nt ya
bfs=0, bf ya = -1
Xoay kp
1. Xoay phi quanh nt s
2. Xoay tri quanh nt ya
bfs=0, bf ya = 1
- Gii thut:
Php xoay tri (Rotate_Left): xoay tri cy nh phn tm kim c nt
gc l root, yu cu root phi c nt con bn phi (gi l nt p). Sau khi xoay
tri th nt p tr thnh nt gc, nt gc c tr thnh nt con bn tri ca nt gc
mi.
Php xoay tri tr v con tr ch nt gc mi.
K thut lp trnh
123
K thut lp trnh
124
K thut lp trnh
125
q->right = NULL;
if(x < fp->info)
fp->left = q;
else
fp->right = q;
/* Hieu chinh chi so can bang cua tat ca cac nut giua ya va q, neu bi lech
ve phia trai thi chi so can bang cua tat ca cac nut giua ya va q deu la
1, neu bi lech ve phia phai thi chi so can bang cua tat ca cac nut giua
ya va q deu la -1 */
if(x < ya->info)
p = ya->left;
else
p = ya->right;
s = p; // s la con nut ya
while(p != q)
{
if(x < p->info)
{
p->bf = 1;
p = p->left;
}
else
{
p->bf = -1;
p = p->right;
}
}
// xac dinh huong lech
if(x < ya->info)
imbal = 1;
else
imbal = -1;
if(ya->bf == 0)
{
ya->bf = imbal;
return;
}
if(ya->bf != imbal)
{
K thut lp trnh
ya->bf = 0;
return;
}
if(s->bf == imbal) // Truong hop xoay don
{
if(imbal == 1) // xoay phai
p = Rotate_Right(ya);
else
// xoay trai
p = Rotate_Left(ya);
ya->bf = 0;
s->bf = 0;
}
else
// Truong hop xoay kep
{
if(imbal == 1) // xoay kep trai-phai
{
ya->left = Rotate_Left(s);
p = Rotate_Right(ya);
}
else
// xoay kep phai-trai {
ya->right = Rotate_Right(s);
p = Rotate_Left(ya);
}
if(p->bf == 0) // truong hop p la nut moi them vao
{
ya->bf = 0;
s->bf = 0;
}
else
if(p->bf == imbal)
{
ya->bf = -imbal;
s->bf = 0;
}
else
{
ya->bf = 0;
s->bf = imbal;
}
126
K thut lp trnh
p->bf = 0;
}
if(fya == NULL)
pavltree = p;
else
if(ya == fya->right)
fya->right = p;
else
fya->left = p;
}
* to cy nh phn tm kim cn bng, ta s dng gii thut sau:
void Create_AVLTree(NODEPTR &root)
{ int khoa, noidung;
char so[10];
NODEPTR p;
do
{ printf("Nhap khoa :");
gets(so) ;
khoa = atoi(so);
if (khoa !=0)
{ printf("Nhap noi dung :");
gets(so) ;
noidung = atoi(so);
if (root==NULL)
{ p = New_Node();
p->key = khoa;
p->info = noidung;
p->bf = 0 ;
p->left = NULL;
p->right = NULL;
root =p;
}
else Insert(root,khoa,noidung);
}
} while (khoa!=0);
// kha =0 th dng nhp
}
Ghi ch : to cy nh phn do bin tree qun l, ta gi:
Create_AVLTree(tree);
127
K thut lp trnh
128
K thut lp trnh
129
130
K thut lp trnh
Bi tp:
1. Vit li cc chng trnh duyt cy nh phn theo phng php khng qui.
2. Vit chng trnh to mt menu thc hin cc mc sau:
a. To cy nh phn tm kim vi ni dung l s nguyn (khng trng nhau).
b. Lit k cy nh phn ra mn hnh theo th t NLR
c. m tng s nt, s nt l, v s nt trung gian ca cy.
d. Tnh cao ca cy.
e. Loi b nt c ni dung l x trong cy nh phn BST.
f. Thm nt c ni dung x vo cy nh phn BST sao cho sau khi thm th cy
vn l BST.
3. Cho mt cy nh phn tree, hy vit chng trnh sao chp n thnh mt
cy mi tree2, vi kha, ni dung, v lin kt ging nh cy tree.
4. Vit cc hm kim tra xem cy nh phn:
a. C phi l cy nh phn ng khng.
b. C phi l cy nh phn y khng.
5. Vit hm kim tra nt x v y c trn cy hay khng, nu c c x ln y trn
cy th xc nh nt gc ca cy con nh nht c cha x v y.
6. Cho mt cy biu thc, hy vit hm Calculate (NODEPTR root) tnh gi
tr ca cy biu thc , bit rng cc ton t c dng trong biu thc l:
+ - * / ^ % !
7. V li hnh nh cy nh phn tm kim, cy nh phn tm kim cn bng nu
cc nt thm vo cy theo th t nh sau:
8
20
11
30
18
131
K thut lp trnh
MC LC
CHNG i I CNG V LP TRNH --------------------------------------------------- 1
I. Khi nim thut ton --------------------------------------------------------------------------- 1
I.1. Khi nim --------------------------------------------------------------------------------------------------- 1
I.2. Cc tnh cht c trng ca thut ton ----------------------------------------------------- 1
I.3. Phn loi ----------------------------------------------------------------------------------------------------- 1
II. M t thut ton bng lu ---------------------------------------------------- 1
II.1. Lu ------------------------------------------------------------------------------------------------------- 1
II.2. Cc k hiu trn lu ---------------------------------------------------------------------------- 1
II.3. Mt s v d biu din thut ton bng lu ---------------------------------------- 2
III. CC NGN NG LP TRNH & CHNG TRNH DCH -------------------- 5
III.1. Ngn ng lp trnh----------------------------------------------------------------------------------- 5
III.2. Chng trnh dch ------------------------------------------------------------------------------------ 6
CHNG 2 LM QUEN VI NGN NG C -------------------------------------------- 7
* Gii thiu ngn ng C-------------------------------------------------------------------------- 7
I. CC KHI NIM C BN ---------------------------------------------------------------------------- 7
I.1. Cu trc c bn ca mt chng trnh C -------------------------------------------------- 7
I.2. Kiu d liu c bn ---------------------------------------------------------------------------------- 13
I.3. Bin ----------------------------------------------------------------------------------------------------------- 14
I.4 Hng ----------------------------------------------------------------------------------------------------------- 18
I.5. Php ton -------------------------------------------------------------------------------------------------- 20
* S chuyn kiu ----------------------------------------------------------------------------------------- 29
* Mc u tin ca cc php ton ---------------------------------------------------------- 29
I.6. Chui --------------------------------------------------------------------------------------------------------- 30
II. Cc cu trc iu khin trong C----------------------------------------------- 33
II.1 Cu trc tun t (Sequence) ------------------------------------------------------------------ 33
II.2. Cu trc chn ------------------------------------------------------------------------------------------ 34
II.2.1. Lnh if else -------------------------------------------------------------------------------------- 34
II.2.2. Lnh switch_case----------------------------------------------------------------------------- 35
II.3. Cu trc lp --------------------------------------------------------------------------------------------- 37
II.3.1. Lnh while --------------------------------------------------------------------------------------- 37
II.3.2. Lnh do while ---------------------------------------------------------------------------------- 38
II.3.3. Lnh for -------------------------------------------------------------------------------------------- 39
* Pht biu break, continue, goto -------------------------------------------------------------- 40
Bi tp ---------------------------------------------------------------------------------------------------------------- 41
K thut lp trnh
132
III. Hm - quy------------------------------------------------------------------------------------------- 45
III.1. Hm -------------------------------------------------------------------------------------------------------- 45
III.2. qui (Recursion) -------------------------------------------------------------------------------- 52
IV. Structure ----------------------------------------------------------------------------------------------- 54
IV.1. nh ngha ------------------------------------------------------------------------------------ 55
IV.2. Khai bo---------------------------------------------------------------------------------------- 55
V. FILE ---------------------------------------------------------------------------------------------------------------- 56
V.1. File vn bn --------------------------------------------------------------------------------------------- 56
V.2. File nh phn (file c cu trc)--------------------------------------------------------------- 61
V.3. Pht hin li khi truy xut tp tin ---------------------------------------------------------- 66
Bi tp ---------------------------------------------------------------------------------------------------------------- 67
CHNG 3. CC THUT TON TRN CU TRC D LIU MNG 69
I. Mng khng sp xp v thut ton tm kim ------------------ 69
trn mng cha c th t
I.1. Mt s khi nim v mng ---------------------------------------------------------------------- 69
I.2. Thut ton tm kim trn mng cha c th t--------------------------------------- 71
II. Cc thut ton sp xp ------------------------------------------------------------------- 73
II.1. Sp xp theo phng php Bubble_Sort ------------------------------------------------ 73
II.2. Sp xp theo phng php Quick_Sort -------------------------------------------------- 75
III. Tm kim trn mng c th t --------------------------------------------- 79
III.1. Tm kim nhanh bng phng php lp ----------------------------------------------- 79
III.2. Php tm kim nh phn------------------------------------------------------------------------- 80
III.3. Php tm kim nh phn qui ------------------------------------------------------------- 81
Bi tp ---------------------------------------------------------------------------------------------------------------- 82
CHNG 4
CON TR (POINTER) ---------------------------------------------------------- 84
I. NH NGHA ------------------------------------------------------------------------------------------------- 84
I.1. Khai bo ---------------------------------------------------------------------------------------------------- 84
I.2. Truyn a ch cho hm --------------------------------------------------------------------------- 85
II Cc php ton trn bin con tr------------------------------------------------ 85
II.1. Ton t a ch & ----------------------------------------------------------------------------------- 85
II.2. Ton t ni dung * --------------------------------------------------------------------------------- 85
II.3. Php cng tr bin con tr vi mt s nguyn -------------------------------------- 86
II.4. Php gn v php so snh ----------------------------------------------------------------------- 86
II.5. S chuyn kiu ---------------------------------------------------------------------------------------- 86
II.6. Khai bo mt con tr hng v con tr ch n i tng hng ------------ 87
III. S tng quan gia con tr v mng ----------------------------------- 87
K thut lp trnh
133
1992
1999
JohnBentley