SlideShare a Scribd company logo
1 of 134
Download to read offline
KĂŒ thuËt lËp tr× nh 1
CHŠ„NG i §ÂčI CŠ„NG VÒ LËP TR×NH
I. Kh¾i niÖm thuËt to¾n:
I.1. Kh¾i niÖ m:
ThuË t tožn l” tË p hĂźp cžc quy tŸ c cĂŁ logic nh» m gi¶i mĂ©t lĂ­p b”i tožn n”o
Ÿã ¼Ó Ÿ­ßc mĂ©t kÕ t qu¶ xžc ¼Þnh.
I.2. Cžc tÝ nh chÊt ¼Æc tr­ng cña thuËt tožn :
I.2.1. TÝ nh téng qu¾t :
ThuËt tožn Ÿ­ßc lËp kh«ng ph¶i chØ ¼Ó gi¶i mĂ©t b”i tožn cĂŽ thÓ m” th«im”
cßn ph¶ i gi¶ i Ÿ­ßc mĂ©t lĂ­p cžc b” i tožn cĂŁ dÂč ng t­ng tĂč.
I.2.2. TÝ nh giĂ­i hÂčn :
ThuËt tožn gi¶i mĂ©t b”i tožn ph¶i Ÿ­ßc thĂčc hiÖn qua mĂ©t sĂš giĂ­i hÂčn cžc
thao tžc ¼Ó ÂźÂč t ¼Õ n kÕ t qu¶ .
I.2.3. TÝ nh duy nhÊt :
To”n bĂ© quž tr× nh biÕn ŸÊi, cĂČng nh­ trËt tĂč thĂčc hiÖn ph¶i Ÿ­ßc xžc ¼Þnh
v” l” duy nhÊ t. Nh­ vË y khi dĂŻng thuË t tožn cĂŻng mĂ©t dĂ· liÖu ban ¼Çu ph¶i cho
cĂŻng mĂ©t kÕ t qu¶ .
I.3. Ph©n loÂči:
Theo cÊ u trĂłc, ta cĂŁ thÓ ph© n th” nh ba loÂč i thuË t tožn cÂŹ b¶ n sau :
- ThuË t tožn kh«ng ph© n nhžnh.
- ThuË t tožn cĂŁ ph© n nhžnh.
- ThuË t tožn theo chu tr× nh cĂŁ b­íc lÆ p xžc ¼Þnh v” cĂŁ b­íc lÆ p kh«ng
x¾c ¼Þnh.
II. M« t¶ thuËt tožn b»ng l­u ŸÄ :
II.1. L­u ŸÄ :
L­u ŸÄ l” mĂ©t dÂčng ŸÄ thÞ dĂŻng ¼Ó m« t¶ quž tr× nh tÝ nh tožn mĂ©t cžch cĂŁ
hÖ thĂšng. Ng­ĂȘi ta th­ĂȘng thÓ hiÖ n thuË t tožn b» ng l­u ŸÄ.
II.2. Cžc kĂœ hiÖ u trÂȘ n l­u ŸÄ :
TÂȘ n khĂši KĂœ hiÖ u Ăœ nghÜ a
KhĂši mĂ« ¼Ç u hoÆ c kÕ t
thĂłc
DĂŻng mĂ« ¼Ç u hoÆ c kÕ t
thóc ch­¬ng tr× nh
KhĂši v” o ra §­a sĂš liÖ u v” o hoÆ c in
kÕ t qu¶
KĂŒ thuËt lËp tr× nh 2
KhĂši tÝ nh tožn BiÓ u diÔ n cžc c«ng thĂžc
tÝ nh tožn v” thay ŸÊi giž
trÞ cña cžc biÕ n
KhĂši ÂźiÒ u kiÖ n DĂŻng ¼Ó ph© n nhžnh
ch­¬ng tr× nh
Ch­ng tr× nh con DĂŻng ¼Ó gĂ€i ch­ng tr× nh
con
MĂČi tÂȘ n ChØ h­íng truyÒ n th«ng
tin, liÂȘ n hÖ cžc khĂši
II.3. MĂ©t sĂš vÝ dĂŽ biÓ u diÔ n thuËt tožn b»ng l­u ŸÄ
II.3.1. ThuËt tožn kh«ng ph©n nhžnh:
VÝ dî 1: TÝ nh A = x2
+ y2
Begin
NhaÀp (x,y)
A = x2
+ y2
XuaĂĄt (A)
End
VÝ dî 2 : TÝ nh
yx
CByAx
S
22
+
++
= ; biÕ t A,B,C,x,y
Begin
NhaÀp (A, B, C, x,y)
S = (Ax + By + C) / SQRT (x*x + y*y)
XuaĂĄt S
End
KĂŒ thuËt lËp tr× nh 3
II.3.2. ThuËt tožn cĂŁ ph©n nhžnh:
VÝ dĂŽ 1: T× m giž trÞ max cña ba sĂš thĂčc a,b,c
Begin
NhaÀp (a, b, c)
Max = a
XuaĂĄt (Max)
End
a > b
Max < c
Max = c
S
S
Max = b
Ñ
Ñ
VÝ dĂŽ 2: Gi¶ i ph­ng tr× nh bË c nhÊ t Ax+B =0 vĂ­i cžc nghiÖ m thĂčc.
Begin
NhaÀp (a, b)
Xuaát (‘PTVÑ’)
End
a = 0
S
S
XuaĂĄt (-b/a)
b = 0 Xuaát (‘PTVN’)
Ñ
Ñ
KĂŒ thuËt lËp tr× nh 4
VÝ dĂŽ 3 : Gi¶ i ph­ng tr× nh bË c hai Ax2
+Bx+C =0 vĂ­i cžc nghiÖ m thĂčc.
Begin
NhaÀp (a, b, c)
Xuaát (‘X1= ’,(-b + SQRT(Delta)) / (2*a))
Xuaát (‘X2= ’,(-b - SQRT(Delta)) / (2*a))
End
a = 0
Ñ
Ñ
PTB1 (b, c)
Delta < 0 Xuaát (‘PTVN’)
S
S
Delta = b*b - 4*a*c
Ñ
Delta = 0 XuaĂĄt (-b / (2*a))
S
II.3.3. ThuËt to¾n cã chu tr× nh:
ThuË t tožn cĂŁ chu tr× nh vĂ­i cžc b­íc lÆp xžc ¼Þnh th­ĂȘng Ÿ­ßc thÓ hiÖn
b» ng l­u ŸÄ sau :
i = giaĂč trĂČ ban ñaĂ u
LeÀnh S;
TaĂȘng i
i <= n
S
Ñ
vĂ­i n l” giž trÞ kÕ t thĂłc.
KĂŒ thuËt lËp tr× nh 5
VÝ dî 4:TÝ nhS= i
i
n
x=
∑
1
, vĂ­i cžc xi do ta nhË p v” o.
Begin
NhaÀp (n)
i = 1
S = 0
NhaÀp (xi)
End
i = i+1
S = S+xi
i <= n
XuaĂĄt (S)
S
Ñ
III. CžC NG«N NGĂ· LËP TR×NH & CH­NG TR×NH DÞCH:
III.1. Ng«n ngĂ· lËp tr× nh:
III.1.1. GiĂ­i thiÖu: Con ng­ĂȘi muĂšn giao tiÕp vĂ­i mžy tÝ nh ph¶i th«ng qua
ng«n ngĂ·. Con ng­ĂȘi muĂšn mžy tÝ nh thĂčc hiÖn c«ng viÖc, ph¶i viÕt cžc yÂȘu cÇu
Ÿ­a cho mžy b»ng ng«n ngĂ· mžy hiÓu Ÿ­ßc. ViÖc viÕt cžc yÂȘu cÇu ta gĂ€i l” lËp
tr× nh (programming). Ng«n ngĂ· dĂŻng¼Ó lËptr× nhŸ­ßcgĂ€il” ng«nngĂ· lËptr× nh.
NÕu ng«n ngĂ· lËp tr× nh gÇn vĂ­i vÊn ¼Ò cÇn gi¶i quyÕt, gÇn vĂ­i ng«n ngĂ· tĂč
nhiÂȘn th× viÖc lËp tr× nh sÏ Ÿn gi¶nhÂŹnnhiÒu.NhĂ·ngng«nngĂ· lËptr× nhcĂŁ tÝ nh
chÊt nh­ trÂȘn Ÿ­ßc gĂ€i l” ng«n ngĂ· cÊp cao.Nh­ngmžytÝ nhchØ hiÓuŸ­ßcng«n
ngĂ· riÂȘ ng cña m× nh, Ÿã l” cžc chuçi sĂš 0 vĂ­i 1 v” nh­ vË y rĂą r”ng l” khĂŁ khšn
cho lË p tr× nh viÂȘ n, v× nĂŁ kh«ng gÇ n gĂČi vĂ­i con ng­ĂȘi.
HiÖ n tÂč i, ng«n ngĂ· lË p tr× nh Ÿ­ßc chia ra l” m cžc loÂč i sau:
III.1.2. Ph©n loÂči ng«n ngĂ· lËp tr× nh:
- Ng«n ng÷ mžy (machine language)
KĂŒ thuËt lËp tr× nh 6
- HĂźp ngĂ· (assembly language)
- Ng«n ngĂ· cÊ p cao (higher-level language)
Do mžy tÝ nh chØ hiÓu Ÿ­ßc ng«n ngĂ· mžy, cho nÂȘn mĂ©t ch­ng tr× nh viÕt
trong ng«n ngĂ· cÊ p cao ph¶ i Ÿ­ßc biÂȘ n dÞch sang ng«n ngĂ· mžy. C«ng cĂŽ thĂčc
hiÖ n viÖ c biÂȘ n dÞch Ÿã Ÿ­ßc gĂ€i l” ch­ng tr× nh dÞch.
III.2. Ch­¬ng tr× nh dÞch:
Ch­ng tr× nh dÞch Ÿ­ßc chia ra l”m 2 loÂči : tr× nh biÂȘn dÞch (compiler) v” tr× nh
th«ng dÞch (interpreter)
III.2.1. Tr× nh biÂȘn dÞch: l” viÖc chuyÓn mĂ©t ch­ng tr× nh trong ng«n ngĂ·
cÊ p cao n” o Ÿã (ch­ng tr× nh nguĂ„n) sang ng«n ngĂ· mžy (ch­ng tr× nh ¼Ý ch).
- ThĂȘi gian chuyÓn mĂ©t ch­ng tr× nh nguĂ„n sang ch­ng tr× nh ¼Ý ch Ÿ­ßc
gĂ€i l” thĂȘi gian dÞch.
- ThĂȘi gian m” ch­ng tr× nh ¼Ý ch thĂčc thi Ÿ­ßc gĂ€i l” thĂȘi gian thĂčc thi.
Nh­ vËy, ch­ng tr× nh nguĂ„n v” dĂ· liÖu ¼Ó ch­ng tr× nh thĂčc thi Ÿ­ßc xö
lĂœ trong cžc thĂȘi ÂźiÓ m khžc nhau, Ÿ­ßc gĂ€i l” thĂȘi gian dÞch (compile time) v”
thĂȘi gian thĂčc thi (run-time)
ChöÎng trÏnh
nguoĂ n
TrĂŹnh bieĂąn
dĂČch
ChöÎng trÏnh
ñích
MaĂčy tĂ­nh
thöïc hieÀn Keåt quaû
DöÔ lieÀu
H× nh I.1. Ch­ng tr× nh thĂčc thi theo cÂŹ chÕ dÞch cña tr× nh biÂȘ n dÞch
III.2.2. Tr× nh th«ng dÞch: quž tr× nh dÞch v” thĂčc thi x¶ y ra cĂŻng 1 thĂȘi
gian, dÞch ¼Õ n Ÿ© u thi h” nh lÖ nh ¼Õ n Ÿã.
ChöÎng trÏnh
nguoĂ n
ChöÎng trÏnh
thoĂąng dĂČch
KeĂĄt quaĂ»
DöÔ lieÀu
H× nh I.2. Ch­ng tr× nh thĂčc thi theo cÂŹ chÕ dÞch cña tr× nh th«ng dÞch
KĂŒ thuËt lËp tr× nh 7
CH­NG 2 L”M QUEN VíI NG«N NG÷ C
* GiĂ­i thiÖu ng«n ngĂ· C
Ng«n ngĂ· C do Dennis Ritchie l” ng­ĂȘi ¼Çu tiÂȘn ¼Ò xuÊt, ¼∙ thiÕt kÕ v” c”i
¼Æ t C trong m«i tr­ĂȘng UNIX. NĂŁ cĂŁ nguĂ„n gĂšc tĂ” ng«n ngĂ· BCPL do Martin
Richards Ÿ­a ra v” o nš m 1967 v” ng«n ngĂ· B do Ken Thompson phžt triÓ n tĂ”
ng«n ngĂ· BCPL nš m 1970 khi viÕ t hÖ ÂźiÒ u h” nh Unix.
C l” ng«n ngĂ· lËp tr× nh Âźa dĂŽng, cÊp cao nh­ng lÂči cĂŁ kh¶ nšng thĂčc hiÖn
cžc thao tžc nh­ cña ng«n ngĂ· Assembly. V× thÕ ng«n ngĂ· C nhanh chĂŁng Ÿ­ßc
c”i ¼Æt, sö dĂŽng trÂȘnmžyvitÝ nhv” ¼∙ trĂ« th”nhmĂ©tc«ngcĂŽ lËptr× nhkhž mÂčnh,
hiÖn nay Âźang cĂŁ khuynh h­íng trĂ« th”nh mĂ©t ng«n ngĂ· lËp tr× nh chÝ nh cho mžy
vi tÝ nh trÂȘ n thÕ giĂ­i.
* §Æc ÂźiÓ m ng«n ngĂ· C
Ng«n ngĂ· C cĂŁ nhĂ·ng ¼Æ c ÂźiÓ m cÂŹ b¶ n sau :
- TÝ nh c« ŸÀng (compact) : Ng«n ngĂ· C chØ cĂŁ 32 tĂ” khož chuÈn, 40 tožn
tö chuÈ n m” hÇ u hÕ t Ÿ­ßc biÓ u diÓ n bĂ«i cžc d∙ y kĂœ tĂč ngŸ n gĂ€n.
- TÝ nh cÊu trĂłc (structured) : Ng«n ngĂ· C cĂŁ mĂ©t tËp hĂźp cžc phžt biÓu lËp
tr× nh cÊ u tróc nh­ ph¾t biÓ u quyÕ t ¼Þnh hoÆ c lÆ p. Do ¼ã, nã cho phÐp chóng ta
viÕ t ch­ng tr× nh cĂŁ tĂŠ chĂžc v” dÓ hiÓ u.
- TÝ nh t­ng thÝ ch (compactable) : Ng«n ngĂ· C cĂŁ bĂ© lÖ nh tiÒ n xö lĂœ v”
cžc th­ viÖn chuÈn l”m cho cžc ch­ng tr× nh viÕt b»ng ng«n ngĂ· C cĂŁ thÓ t­ng
thÝ ch khi chuyÓ n tĂ” mžy tÝ nh n” y sang mžy tÝ nh kiÓ u ho” n to” n khžc.
- TÝ nh linh Ÿéng (flexible) : Ng«n ngĂ· C l” mĂ©t ng«n ngĂ· rÊt linh Ÿéng vÒ
ngĂ· phžp, nĂŁ cĂŁ thÓ chÊp nhËn rÊt nhiÒu cžch thÓ hiÖn m” kh«ng cĂŁ Ă« ng«n ngĂ·
khžc nh­ Pascal, nĂŁ giĂłp cho kÝ ch th­íc m∙ lÖ nh cĂŁ thÓ thu gĂ€n lÂči ¼Ó ch­ng
tr× nh thĂčc thi nhanh chĂŁng hÂŹn.
- BiÂȘ n dÞch : Ng«n ngĂ· C Ÿ­ßc biÂȘ n dÞch b» ng nhiÒ u b­íc v” cho phÐp
biÂȘn dÞch nhiÒu tËp tin ch­ng tr× nh riÂȘng rÏ th”nh cžc tËp tin ŸÚi t­ßng (object)
v” nĂši cžc ŸÚi t­ßng Ÿã lÂči vĂ­i nhau (link) th”nh mĂ©t ch­ng tr× nh thĂčc thi thĂšng
nhÊ t.
I. CžC KHžI NIÖM CÂŹ B¶N
I.1. CÊu trĂłc cÂŹ b¶n cña mĂ©t ch­ng tr× nh C
[tiÒ n xö lĂœ]
[Cžc h” m]
main()
KĂŒ thuËt lËp tr× nh 8
{ [khai b¾o biÕ n;]
[nhË p dĂ· liÖ u ;]
[xö lĂœ ;]
[xuÊ t ;]
}
VÝ dĂŽ : Ch­ng tr× nh hiÖ n trÂȘ n m” n h× nh c© u “Chao cac ban”
void main()
{ printf(“Chao cac bann”);
}
MĂ©t v” i nhË n xÐt quan trĂ€ng :
- Ch­ng tr× nh C bao giĂȘ cĂČng cĂŁ mĂ©t hay nhiÒ u h” m, trong Ÿã cĂŁ mĂ©t
h” m chÝ nh bŸ t buĂ©c ph¶ i cĂŁ l” h” m main(). §© y chÝ nh l” h” m Ÿ­ßc thĂčc hiÖn
¼Ç u tiÂȘ n trong ch­ng tr× nh.
- CÆ p dÊ u “{ } “ ¼Ó xžc ¼Þnh mĂ©t khĂši lÖ nh.
- H” m printf(“ Chao cac ban n”) l” h” m chuÈ n cña C dĂŻng ¼Ó xuÊ t c© u
th«ng bžo “Chao cac ban” ra m” n h× nh. KĂœ tĂč “n“ l” kĂœ tĂč ¼Æ c biÖ t dĂŻng ¼Ó
xuùng dßng.
- DÊ u “;” ¼Ó chÊ m dĂžt mĂ©t lÖ nh.
- Ch­ng tr× nh C cĂŁ ph© n biÖ t chĂ· th­ĂȘng vĂ­i chĂ· hoa. §a sĂš cžc tĂ” khož
cña C Ÿ­ßc viÕ t b» ng chĂ· th­ĂȘng, cßn mĂ©t sĂš Ý t Ÿ­ßc viÕ t b» ng chĂ· hoa m” ta
ph¶ i tu© n thñ chÆ t chÏ , nÕ u kh«ng th× ch­ng tr× nh dÞch sÏ kh«ng hiÓ u.
* MĂ©t v”i vÝ dĂŽ
VÝ dĂŽ 1: In b¶ ng lĂČy thĂ”a 2 cña cžc sĂš nguyÂȘ n tĂ” 10 ¼Õ n 50
/* Ch­ng tr× nh in b× nh ph­ng cžc sĂš tĂ” 10 ¼Õ n 50*/
#include <stdio.h>
void main()
{int n; /*Khai bžo biÕ n n kiÓ u nguyÂȘ n */
n=10; /*Gžn n=10 */
while (n<=50) /*LÆ p tĂ” 10 ¼Õ n 50 b» ng while */
{ printf(“%3d t %5dn”,n,n*n); /*in dÂč ng 5d l” d” nh 5 vÞ trÝ ¼Ó in n v” n2
*/
n++; /* Tš ng n lÂȘ n 1 */
} /*HÕ t while*/
} /*HÕ t main*/
KĂŒ thuËt lËp tr× nh 9
VÝ dĂŽ 2 : T­ng tĂč nh­ vÝ dĂŽ 1 nh­ng viÕ t cžch khžc :
#include <stdio.h>
#define max 50 /*TiÒ n xö lĂœ, ¼Þnh nghÜ a max =50*/
void main()
{ int n; /*Khai bžo biÕ n n kiÓ u nguyÂȘ n*/
for (n=10; n<=max; n++) /*LÆ p tĂ” 10 ¼Õ n 50 b» ng for*/
printf(“%3d t %5dn”,n,n*n);/*in n v” n2
dÂč ng 5d l” nš m chĂ· sĂš*/
} /*HÕ t main*/
VÝ dĂŽ 3 : Ch­ng tr× nh in lĂČy thĂ”a 2, 3, 4, 5; cĂŁ dĂŻng h”m ¼Ó tÝ nh lĂČy thĂ”a :
#include <stdio.h>
#define max 50 /*TiÒ n xö lĂœ, ¼Þnh nghÜ a max =50*/
float luythua(int n, int m) /*H” m luythua víi 2 th«ng sÚ*/
{ float s=1; /*Khai bžo v” khĂ«i tÂč o biÕ n s*/
for ( ;m>0;m--) /*LÆ p gi¶ m dÇ n tĂ” m tĂ­i 1*/
s=s*n;
return s; /*Tr¶ kÕ t qu¶ vÒ */
}
void main()
{ int n,n2,n3,n4,n5; /*Khai bžo biÕ n kiÓ u nguyÂȘ n*/
for (n=10;n<=50;n++) /*LÆ p tĂ” 10 ¼Õ n 50 b» ng for*/
{ n2= luythua(n,2); /*GÀi h” m luythua*/
n3= luythua(n,3);
n4= luythua(n,4);
n5= luythua(n,5);
printf(“%3d t %5.2f t %5.2ft %5.2ft %5.2ft %5.2fn”,
n,n2,n3,n4,n5); /*in n v” nm
dÂč ng 5 chĂ· sĂš vĂ­i 2 sĂš lÎ */
}
} /*HÕ t main*/
* H”m xuÊt chuÈn printf()
Có phžp :
printf(“chuçi-¼ÞnhdÂč ng”,thamso1,thamso2,...)
Ăœ nghÜ a :
H” m printf() sÏ xem xÐt chuçi-¼ÞnhdÂčng, lÊy giž trÞ cžc tham sĂš (nÕu cÇn)
¼Ó ¼Æ t v” o theo yÂȘ u cÇ u cña chuçi-¼ÞnhdÂč ng v” gĂ«i ra thiÕ t bÞ chuÈ n.
Chuçi-¼ÞnhdÂč ng l” mĂ©t chuçi kĂœ tĂč, trong Ÿã cĂŁ nhĂ·ng kĂœ tĂč xuÊ t ra
nguyÂȘn vÑn hoÆc xuÊt Ă« dÂčng ¼Æc biÖt, v” cĂŁ thÓ cĂŁ nhĂ·ng chuçi ÂźiÒu khiÓn
cÇ n lÊ y giž trÞ cña cžc tham sĂš ¼Ó thay v” o Ÿã khi in ra.
KĂŒ thuËt lËp tr× nh 10
- NhĂ·ng kĂœ tĂč ¼Æc biÖ t :
KĂœ tĂč Tžc dĂŽng M· ASCII
n XuÚng h” ng míi 10
t Tab 9
b XĂŁa kĂœ tĂč bÂȘ n trži 8
r Con trĂĄ trĂ« vÒ ¼Ç u h” ng 13
f Sang trang 12
a Ph¾t tiÕ ng cßi 7
 XuÊ t dÊ u chÐo ng­üc 92
’ XuÊ t dÊ u nh¾y ¼¬n ‘ 39
’’ XuÊ t dÊ u nh¾y kÐp “ 34
xdd XuÊt kĂœ tĂč cĂŁ m∙ ASCII dÂčng Hex l” dd
ddd XuÊ t kĂœ tĂč cĂŁ m∙ ASCII dÂč ng Dec l”
ddd
0 KĂœ tĂč NULL 0
- Chuçi ¼Þnh dÂčng :
% [ flag][width][.prec][FïŁŠNïŁŠhïŁŠl] type
Type : ¼Þnh kiÓ u cña tham sĂš theo sau chuçi-¼ÞnhdÂč ng ¼Ó lÊ y giž trÞ ra
Type Ăœ nghÜ a
d,i SĂš nguyÂȘ n cÂŹ sĂš 10
u SĂš nguyÂȘ n cÂŹ sĂš 10 kh«ng dÊ u
o SĂš nguyÂȘ n cÂŹ sĂš 8
x SĂš nguyÂȘ n cÂŹ sĂš 16, chĂ· th­ĂȘng(a,b,...,f)
X SĂš nguyÂȘ n cÂŹ sĂš 16, chĂ· in (A,B,...,F)
f SĂš thĂčc dÂč ng [-]dddd.ddd...
e SĂš thĂčc dÂč ng [-]d.ddd e[+/-]ddd
E SĂš thĂčc dÂč ng [-]d.ddd E[+/-]ddd
g,G SĂš thĂčc dÂč ng e(E) hay f tĂŻy theo Ÿé chÝ nh xžc
c KĂœ tĂč
s Chuçi kĂœ tĂč tË n cĂŻng b» ng ‘0’
% DÊ u % cÇ n in
KĂŒ thuËt lËp tr× nh 11
Flag : DÂč ng ÂźiÒ u chØ nh
Flag Ăœ nghÜ a
nÕ u kh«ng cĂŁ in dĂ· liÖ u ra vĂ­i canh ph¶ i
- in dĂ· liÖ u ra vĂ­i canh trži
+ Lu«n bŸ t ¼Ç u sĂš b» ng + hay -
# in ra tïy theo type, nÕ u:
0 : ChÌ n thÂȘ m 0 ŸÞng tr­íc giž trÞ >0
x,X : ChÌ n thÂȘ m 0x hay 0X ŸÞng tr­íc sĂš n” y
e,E,f : Lu«n lu«n cĂŁ dÊ u chÊ m thË p ph© n
G,g : Nh­ trÂȘ n nh­ng kh«ng cĂŁ sĂš 0 Âźi sau
Width : ¼Þnh kÝ ch th­íc in ra
Width Ăœ nghÜ a
n D”nh Ý t nhÊt n kĂœ tĂč , ÂźiÒn kho¶ng trŸng cžc kĂœ tĂč cßn trĂšng
0n D” nh Ý t nhÊ t n kĂœ tĂč , ÂźiÒ n sĂš 0 cžc kĂœ tĂč cßn trĂšng
* SĂš kĂœ tĂč Ý t nhÊ t cÇ n in n» m Ă« tham sĂš t­ng Ăžng
Prec : ¼Þnh kÝ ch th­íc phÇ n lÏ in ra
Prec Ăœ nghÜ a
kh«ng cĂŁ Ÿé chÝ nh xžc nh­ b× nh th­ĂȘng
0 d,i,o,u,x Ÿé chÝ nh xžc nh­ cĂČ
e,E,f Kh«ng cĂŁ dÊ u chÊ m thË p ph© n
n nhiÒ u nhÊ t l” n kĂœ tĂč (sĂš)
* SĂš kĂœ tĂč Ý t nhÊ t cÇ n in n» m Ă« tham sĂš t­ng Ăžng
Cžc ch÷ bÊ sung :
F Tham sÚ l” con trå xa XXXX:YYYY
N Tham sĂš l” con trĂĄ gÇ n YYYY
h Tham sÚ l” short int
l Tham sÚ l” long int (d,i,o,u,x,X)
double (e,E,f,g,G)
VÝ dî 1: char c=‘A’;
char s[]=“Blue moon!” ;
KĂŒ thuËt lËp tr× nh 12
DÂčng Th«ng sĂš
t­ng Þng
XuÊt NhËn xÐt
%c c “A” Ÿé rĂ©ng 1
%2c c “ A” Ÿé rĂ©ng 2, canh ph¶ i
%-3c c “A “ Ÿé rĂ©ng 3, canh trži
%d c “65” M∙ ASCII cña ‘A’
%s s “Blue moon!” Ÿé rĂ©ng 10
%3s s “Blue moon!” NhiÒu kĂœ tĂč hÂŹn cÇn thiÕt
%.6s s “Blue m” ChÝ nh xžc 6 kĂœ tĂč
%-11.8s s “Blue moo “ ChÝ nh x¾c 8, canh tr¾i
VÝ dî 2: int i = 123;
float x = 0.123456789;
DÂčng Th«ng sĂš
t­ng Þng
XuÊt NhËn xÐt
%d i “123” Ÿé rĂ©ng 3
%05d i “00123” ThÂȘ m 2 sĂš 0
%7o” i “ 123” HÖ 8, canh ph¶ i
%-9x i “7b “ HÖ 16, canh tr¾i
%c i “{“ KĂœ tĂč cĂŁ m∙ ASCII 123
%-#9x i “0x7b “ HÖ 16, canh tr¾i
%10.5f x “ 0.12346” Ÿé rĂ©ng 10, cĂŁ 5 chĂ· sĂš thË p
ph© n
%-12.5e x “1.23457e-01 “ Canh trži, in ra d­íi dÂč ng
khoa hÀc
VÝ dĂŽ 3: ViÕ t ch­ng tr× nh in h× nh chĂ· nhË t kÐp b» ng cžc kĂœ tĂč ASCII
C9 CD BB
C8 CD BC
void main()
{ printf(“nxC9xCDxBB”);
printf(“nxC8xCDxBCn);
}
KĂŒ thuËt lËp tr× nh 13
I.2. KiÓ u dĂ· liÖ u cÂŹ b¶n
I.2.1. ¼Þnh nghÜ a:
KiÓ u dĂ· liÖ u cÂŹ b¶ n l” kiÓ u dĂ· liÖ u cĂŁ giž trÞ Ÿn, kh«ng ph©n chia Ÿ­ßc
nĂ·a nh­ sĂš, kĂœ tĂč
I.2.2. Ph©n loÂči:
TÂȘ n kiÓ u Ăœ nghÜ a KÝ ch
th­íc
PhÂčm vi
char KĂœ tĂč 1 byte -128→ 127
unsigned char KĂœ tĂč kh«ng dÊ u 1 byte 0→255
unsigned short SĂš nguyÂȘn ngŸn kh«ngdÊu 2 bytes 0→65535
enum SĂš nguyÂȘ n cĂŁ dÊ u 2 bytes -32768→32767
short int SĂš nguyÂȘ n cĂŁ dÊ u 2 bytes -32768→32767
int SĂš nguyÂȘ n cĂŁ dÊ u 2 bytes -32768→32767
unsigned int SĂš nguyÂȘ n kh«ng dÊ u 2 bytes 0 → 65535
long SĂš nguyÂȘ n d” i cĂŁ dÊ u 4 bytes -2147483648 →
2147483647
unsigned long SĂš nguyÂȘ n d” i kh«ng dÊ u 4 bytes 0→4294967295
float SĂš thĂčc Ÿé chÝ nh xžc Ÿn 4 bytes 3.4 E-38→3.4 E+38
double SĂš thĂčc Ÿé chÝ nh xžc kÐp 8 bytes 1.7 E-308 → 1.7
E+308
long double SĂš thĂčc Ÿé chÝ nh xžc hÂŹn
double
10 bytes 3.4 E-4932 → 1.1
E+4932
ChĂł Ăœ :
1. Ng«n ngĂ· C kh«ng cĂŁ kiÓ u logic (boolean nh­ Pascal) m” quan niÖ m
0 l” false ; Khžc 0 l” true
2. Ng«n ngĂ· C kh«ng cĂŁ kiÓ u chuçi nh­ kiÓ u string trong Pascal
3. Cžc kiÓ u ŸÄng nhÊ t:
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
KĂŒ thuËt lËp tr× nh 14
I.3. BiÕ n
I.3.1. TÂȘn biÕn : TÂȘn biÕn l” mĂ©t chuçi kĂœ tĂč bŸt ¼Çu b»ng kĂœ tĂč chĂ·, kĂœ tĂč
kÕ tiÕp l” kĂœ tĂč chĂ· (dÊu gÂčch d­íi “_” Ÿ­ßc xem l” kĂœ tĂč chĂ·) hoÆc sĂš v” kh«ng
Ÿ­ßc trïng víi cžc tÔ khãa cña C.
ChĂł Ăœ : - Ng«n ngĂ· C ph© n biÖ t chĂ· th­ĂȘng vĂ­i chĂ· hoa nÂȘ n biÕ n chĂ·
th­ĂȘng vĂ­i chĂ· hoa l” khžc nhau.
VÝ dĂŽ : Bien_1 _bien2 l” hĂźp lÖ
bi&en 2a a b l” kh«ng hĂźp lÖ
- Ng«n ngĂ· C chØ ph© n biÖ t hai tÂȘ n hĂźp lÖ vĂ­i nhau b» ng n kĂœ tĂč ¼Ç u tiÂȘ n
cña chĂłng. Th«ng th­ĂȘng n=8, nh­ng hiÖn nay nhiÒu ch­ng tr× nh dÞch cho phÐp
n=32, nh­ Turbo C cho phÐp thay ŸÊi sĂš kĂœ tĂč ph© n biÖ t tĂ” 8-32)
VÝ dĂŽ :Hai biÕ n sau bÞ xem l” cĂŻng tÂȘ n
bien_ten_dai_hon_32_ky_tu_dau_tien_1
bien_ten_dai_hon_32_ky_tu_dau_tien_2
I.3.2. Khai b¾o biÕ n
Cžc biÕ n ph¶ i Ÿ­ßc khai bžo tr­íc khi sö dĂŽng nh» m giĂłp cho ch­ng
tr× nh dÞch cĂŁ thÓ xö lĂœ chĂłng.
Khai bžo biÕ n cĂŁ dÂč ng :
KiÓ udĂ·liÖ u tÂȘ nbiÕ n1 [,tenbiÕ n2 ...] ;
VÝ dî: int a,b,c;
float x,y,delta;
char c;
* Khai bžo v” khĂ«i tÂč o biÕ n:
KiÓ u dĂ· liÖ u tÂȘ nbiÕ n = gižtrÞ ;
I.3.3. H”m nhËp dĂ· liÖ u chuÈn
a) H”m scanf()
CĂł phžp: scanf(“chuçi-¼ÞnhdÂčng“,ÂźiÂčchØ thamsĂš1, ÂźiÂčchØ thamsĂš2,...)
- Chuçi-¼ÞnhdÂč ng cña scanf() gĂ„m cĂŁ ba loÂč i kĂœ tĂč :
+ Chuçi ¼iÒ u khiÓ n
+ KĂœ tĂč trŸ ng
+ KĂœ tĂč khžc trŸ ng
! Chuçi ÂźiÒ u khiÓ n cĂŁ dÂč ng :
%[width][h/l] type
KĂŒ thuËt lËp tr× nh 15
VĂ­i type: xžc ¼Þnh kiÓ u cña biÕ n ¼Þa chØ tham sĂš sÏ nhË n giž trÞ nhË p v” o
Type Ăœ nghÜ a
d,i SĂš nguyÂȘ n cÂŹ sĂš 10 (int)
o SĂš nguyÂȘ n cÂŹ sĂš 8 (int)
u SĂš nguyÂȘ n cÂŹ sĂš 10 kh«ng dÊ u (unsigned)
x SĂš nguyÂȘ n cÂŹ sĂš 16 (int)
f,e SĂš thĂčc (float)
c KĂœ tĂč (char)
s Chuçi kĂœ tĂč
p Con trĂĄ (pointer)
lf SĂš thĂčc (double)
Lf SĂš thĂčc (long double)
Width : xžc ¼Þnh sĂš kĂœ tĂč tĂši Âźa sÏ nhË n v” o cho vĂŻng Ÿã.
H” m scanf() chØ nhË n cho Ÿñ width kĂœ tĂč hoÆc cho ¼Õn khi gÆp kĂœ tĂč trŸng
¼Çu tiÂȘn. NÕu chuçi nhËp v”o nhiÒu hÂŹn th× phÇn cßn lÂči sÏ d”nh lÂči cho lÇn gĂ€i
scanf() kÕ tiÕ p.
VÝ dî 1: scanf(“%3s”,str);
NÕ u nhË p chuçi ABCDEFG ↔
th× scanf() sÏ nhËn tĂši Âźa 3 kĂœ tĂč cÊt v”o m¶ng str, cßn DEFG sÏ Ÿ­ßc lÊy
nÕ u sau Ÿã cĂŁ lÇ n gĂ€i sanf(“%s”,str) khžc.
VÝ dî 2: unsigned long money;
scanf(“%lu”,&money);
L­u Ăœ : NÕ u scanf(“%ul”, &money) th× giž trÞ nhË p v” o sÏ kh«ng Ÿ­ßc l­u
trĂ· trong biÕ n money, nh­ng ch­ng tr× nh dÞch kh«ng bžo lçi.
VÝ dĂŽ 3: NhË p v” o tÂȘ n v” bÞ giĂ­i hÂč n trong kho¶ ng [A-Z,a-z]
char name[20];
printf(“Name : ”) ;
scanf(“%[A-Za-z]”,&name);
Trong tr­ĂȘng hĂźp n” y, nÕ u ta gĂą sai dÂč ng th× name =””
! KĂœ tĂč trŸng: nÕu cĂŁ trong chuçi-dÂčng sÏ yÂȘu cÇu scanf() bĂĄ qua mĂ©t hay
nhiÒ u kĂœ tĂč trŸ ng trong chuçi nhË p v” o. KĂœ tĂč trŸ ng l” kĂœ tĂč kho¶ ng trŸ ng (‘ ‘),
tab (‘t’), xuĂšng h” ng (‘n’). MĂ©t kĂœ tĂč trŸng trong chuçi-¼ÞnhdÂčng sÏ Ÿ­ßc hiÓu
l” chĂȘ nhË p ¼Õ n kĂœ tĂč khžc trŸ ng tiÕ p theo.
KĂŒ thuËt lËp tr× nh 16
VÝ dî 4: scanf(“%d “,&num);
H” m scanf() cho ta nhË p mĂ©t kĂœ tĂč khžc trŸng nĂ·a th× mĂ­i thožt ra. KĂœ tĂč
Ÿã sÏ n»m trong vĂŻng ¼Öm v” sÏ Ÿ­ßc lÊy bĂ«i h”m scanf() hoÆc gets() tiÕp theo.
! KĂœ tĂč khžc trŸng: nÕu cĂŁ trong chuçi-¼ÞnhdÂčng sÏ khiÕn cho scanf() nhËn
v” o Ÿóng kĂœ tĂč nh­ thÕ .
VÝ dî 5: scanf(%d/%d/%d”,&d,&m,&y);
H”m scanf() chĂȘ nhËn mĂ©t sĂš nguyÂȘn, cÊt v”o d, kÕ ¼Õn l” dÊu ‘/’, bĂĄ dÊu
n” y Âźi v” chĂȘ nhË n sĂš nguyÂȘ n kÕ tiÕ p ¼Ó cÊ t v” o m. NÕ u kh«ng gÆ p dÊ u ‘/’ kÕ
tiÕ p sĂš nguyÂȘ n th× scanf() chÊ m dĂžt.
ChĂł Ăœ : H” m scanf() ¼ßi hĂĄi cžc tham sĂš ph¶ i l” cžc ¼Þa chØ cña cžc biÕn
hoÆ c l” mĂ©t con trĂĄ.
* Tožn tö ¼Þa chØ & : LÊ y ¼Þa chØ cña mĂ©t biÕ n
VÝ dî 6: int n; → biÕ n n
&n; → ¼Þa chØ cña n
printf(“trÞ = %d, ¼Þa chØ = %d”,n,&n);
b) H”m getch():
H”m getch() dĂŻng ¼Ó nhËn mĂ©t kĂœ tĂč do ta nhËp trÂȘn b”n phÝ m m” kh«ng
cÇ n gñ Enter víi có ph¾p :
ch = getch(); Kh«ng hiÖ n kĂœ tĂč nhË p trÂȘ n m” n h× nh
ch = getche(); HiÖ n kĂœ tĂč nhË p trÂȘ n m” n h× nh
VĂ­i ch l” biÕ n kiÓ u char.
VÝ dî 7:
void main()
{ char ch;
printf(“Go vao ky tu bat ky : ‘);
ch = getche();
printf(“n Ban vua go %c”,ch);
getch();
}
VÝ dĂŽ 8: BÂč n nhË p v” o 1 chĂ· cži. NÕ u chĂ· cži nhË p v” o l” 'd' th× ch­ng
tr× nh sÏ kÕ t thĂłc, ng­ßc lÂč i ch­ng tr× nh sÏ bžo lçi v” bŸ t nhË p lÂč i.
#include <stdio.h>
#include <conio.h>
void main()
{ char ch;
KĂŒ thuËt lËp tr× nh 17
printf("nBan nhap vao 1 chu cai tu a den e: ");
while ((ch=getche()) != 'd')
{ printf("nXin loi, %c la sai roi",ch);
printf("n Thu lai lan nua. n");
}
}
L­u Ăœ: H” m getch() cßn cho phÐp ta nhË p v” o 1 kĂœ tĂč mĂ« rĂ©ng nh­ cžc
phÝ m F1, F2,.., cžc phÝ m di chuyÓ n cursor. Cžc phÝ m n” y lu«n cĂŁ 2 bytes: byte
thĂž nhÊ t b» ng 0, cßn byte 2 l” m∙ scancode cña phÝ m Ÿã. §Ó nhËn biÕt ta ¼∙ gĂą
phÝ m kĂœ tĂč hay phÝ m mĂ« rĂ©ng, ta cĂŁ ch­ng tr× nh sau:
void main()
{
int c;
int extended = 0;
c = getch();
if (!c)
extended = getch();
if (extended)
printf("The character is extendedn");
else
printf("The character isn't extendedn");
}
PhÝ m M· scancode
F1 59
F2 60
F3 61
F4 62
F5 63
F6 64
F7 65
F8 66
F9 67
F10 68
Home 71
" 72
# 80
$ 75
KĂŒ thuËt lËp tr× nh 18
% 77
PgUp 73
PgDn 81
End 79
Ins 82
Del 83
B¶ ng m∙ scancode cña cžc phÝ m mĂ« rĂ©ng
c. H”m kbhit(): H” m int kbhit() sÏ kiÓ m tra xem cĂŁ phÝ m n” o Ÿ­ßc gĂą
v”o hay kh«ng. NÕu cĂŁ, h”m kbhit sÏ tr¶ vÒ mĂ©t sĂš nguyÂȘn khžc 0, v” ng­ßc lÂči.
KĂœ tĂč m” ta nhË p v” o qua h” m kbhit() cĂŁ thÓ lÊ y Ÿ­ßc qua h” m getch()
hoÆ c 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 H»ng: H» ng l” cžc ÂźÂč i l­ßng m” giž trÞ cña nĂŁ kh«ng thay ŸÊi trong quž
tr× nh ch­ng tr× nh thĂčc hiÖ n.
I.4.1. Ph©n loÂči :
a. H»ng sĂš : l” cžc giž trÞ sĂš ¼∙ xžc ¼Þnh v” kh«ng ŸÊi.
int unsigned long hÖ 8 hÖ 16 float/double
DÂč ng nnnn
-nnnn
nnnnU/u nnnnL/l
-nnnnl/L
0nnnn 0xnnnn nnnn.nnnn
nnnn.nnnE/e±nnn
VÝ dî 4567
-12
123U
12uL
456789L
-1234L
0345 0x1AB 123.654
123.234E-4
ChĂł Ăœ :
- Cžc h» ng sĂš viÕ t kh«ng dÊ u hoÆ c kh«ng sĂš mĂČ ÂźÂ­Ăźc hiÓu l” sĂš nguyÂȘn,
ng­ßc lÂč i l” double.
- Cžc h» ng sĂš nguyÂȘ n lĂ­n hÂŹn int sÏ Ÿ­ßc l­u trĂ· theo kiÓ u long, cßn lĂ­n
hÂŹn long th× Ÿ­ßc l­u trĂ· theo kiÓ u double.
- Cžc h» ng sĂš nguyÂȘ n d­ng lĂ­n hÂŹn long sÏ Ÿ­ßc l­u trĂ· theo kiÓu double
- MĂ©t h» ng sĂš Ÿ­ßc l­u trĂ· theo dÂč ng long nÕ u theo sĂš Ÿã cĂŁ kĂœ tĂč l (L),
KĂŒ thuËt lËp tr× nh 19
dÂč ng unsigned nÕ u sau Ÿã cĂŁ chĂ· u (U), dÂčng thËp lĂŽc ph©n nÕu tr­íc sĂš
Ÿã cĂŁ 0x v” dÂč ng bžt ph© n nÕ u tr­íc sĂš Ÿã cĂŁ 0
VÝ dî: 50000; 10 L; → Long
5U, 100u → unsigned
0x10 → hÖ 16 = 1610
010 → hÖ 8 = 810
b. H»ng kĂœ tĂč : l” kĂœ tĂč riÂȘng biÖt Ÿ­ßc viÕt trong hai dÊu nhžy Ÿn : ‘A’
Giž trÞ cña h» ng kĂœ tĂč l” m∙ ASCII cña nĂŁ.
VÝ dĂŽ : printf(“%c cĂŁ giž trÞ l” %d”,’A’,’A’);
% ‘A’ cĂŁ giž trÞ l” 65
& H» ng kĂœ tĂč cĂŁ thÓ tham gia v” o cžc phÐp tožn nh­ mĂ€i sĂš nguyÂȘ n khžc.
VÝ dî :‘9’-’0’=57-48=9
& H» ng kĂœ tĂč cĂŁ thÓ l” cžc kĂœ tĂč ¼Æ c biÖ t dÂč ng ‘c1’ m” ta ¼∙ xÐt Ă« h” m
printf() nh­ ‘n’,’a’,’t’ ...
c. H»ng chuçi : L” mĂ©t chuçi kĂœ tĂč n» m trong hai dÊ u nhžy kÐp “ “.
VÝ dî : “Day la mot chuoi”
“Hang chuoi co ky tu ÂźÂč c biÖ t nh­  n 248”
“” → chuçi rçng.
ChĂł Ăœ :
- Ph© n biÖ t “A” ≠ ‘A’
H» ng: ChuçiKĂœ tĂč
DÂč ng l­u trĂ· :
A 0 A
- NhË n xÐt: Ă« dÂč ng l­u trĂ·, ta thÊ y tË n cĂŻng cña chuçi cĂŁ kĂœ tĂč NULL ‘0’
m” kh«ng cĂŁ Ă« dÂč ng kĂœ tĂč. ChÝ nh v× vË y m” kh«ng cĂŁ kĂœ tĂč rçng ‘’.
- MĂ©t chuçi cĂŁ thÓ Ÿ­ßc viÕt trÂȘn nhiÒu h”ng vĂ­i ÂźiÒu kiÖn h”ng trÂȘn ph¶i
cã dÊ u ‘’.
VÝ dî :“Day la mot chuoi duoc viet tren 
nhieu hang n”
d. H»ng biÓ u thĂžc : L” mĂ©t biÓ u thĂžc m” trong Ÿã cžc tožn hÂčng ¼Òu l”
cžc h»ng. Khi Ÿã ch­ng tr× nh dÞch sÏ tÝ nh tožn biÓuthĂžctr­íc,v” kÕtqu¶ Ÿ­ßc
l­u trĂ· thÂŒ ng b» ng mĂ©t h» ng sĂš t­ng Ÿ­ng.
VÝ dĂŽ : 8*20-13 → kÕ t qu¶ l­u trĂ· l” 173
KĂŒ thuËt lËp tr× nh 20
‘a -’A’ → “ l” 97-65 = 32
1<8 → “ l” 0 (sai)
I.4.2. Khai bžo h»ng:
CĂł phžp: const tÂȘ nh» ng = biÓ uthĂžc;
VÝ dî : const MAX = 50;
const PI = 3.141593;
ChĂł Ăœ : - Ta cĂŁ thÓ khai bžo h» ng b» ng cžch ¼Þnh nghÜ a 1 macro nh­ sau:
#define tÂȘ nh» ng gižtrÞ
- LÖnh #define ph¶i Ÿ­ßc khai bžo ngo”i h”m v” sau nĂŁ kh«ng cĂŁ
dÊ u ;
I.5. PhÐp tožn
I.5.1. PhÐp gžn:
Có ph¾p: biÕ n = biÓ u thþc;
ChĂł Ăœ : PhÐp gžn trong ng«n ngĂ· C tr¶ vÒ mĂ©t kÕ t qu¶ l” trÞ cña biÓ u thĂžc
VÝ dî 1 :c = 10;
a = b = c;
printf(“a=%d , b=%d”,a,b); → a=10,b=10
VÝ dî 2 :x = b + 2*c; ⇔ y= a + (x= b + 2*c)
y = a + x;
VÝ dĂŽ 3 :(n+3) = 4+z; (kh«ng hĂźp lÖ v× bÂȘ n trži l” biÓ u thĂžc)
‘ ‘= c +’o’; (kh«ng hĂźp lÖ v× bÂȘ n trži l” h» ng)
I.5.2. Cžc phÐp tožn sÚ hÀc :
a. PhÐp tožn hai tožn hÂčng : +, -, *, /, %
PhÐp tožn KiÓ u tožn hÂčng KiÓ u kÕ t qu¶
+, -, * char, int, long, float,
double
KiÓ u cña tožn hÂč ng cĂŁ kiÓ u cao nhÊ t
/ nguyÂȘ n/nguyÂȘ n KiÓ u nguyÂȘ n v” l” phÐp chia nguyÂȘ n
thĂčc(nguyÂȘ n)/thĂčc
(nguyÂȘ n)
KiÓ u thĂčc v” l” phÐp chia thĂčc
% nguyÂȘ n/nguyÂȘ n KiÓu nguyÂȘn v” l” phÐp chia lÊy phÇn d­
VÝ dî :
#include <stdio.h>
void main()
KĂŒ thuËt lËp tr× nh 21
{ char cv;
int iv = 121;
float fv1,fv2;
printf(“ ChuyÓ n kiÓ u :nn”);
cv = iv;
printf(“int ¼­üc g¾n cho char : %d → %d (%c)nn”,iv,cv,cv);
fv1 = iv/50;
printf(“ int : %d / 50 = %f nn”,iv,fv1);
fv1 = iv/50.0;
printf(“ float : %d / 50.0 = %f nn”,iv,fv1);
fv1 = 1028.75;
fv2 = fv1 +iv ;
printf(“ %f + %d = %f nn”,fv1,iv,fv2);
getch();
}
b. PhÐp tožn mĂ©t tožn hÂčng : phÐp tš ng ++, phÐp gi¶ m --
a++ hoÆ c ++a ⇔ a = a+1
a-- hoÆ c --a ⇔ a = a-1
ChĂł Ăœ : Tuy nhiÂȘ n a++ sÏ khžc ++a khi chĂłng ŸÞng trong biÓ u thĂžc (cĂŁ
phÐp gžn).
a++ : Tš ng a sau khi giž trÞ cña nĂŁ Ÿ­ßc sö dĂŽng.
++a : Tš ng a tr­íc khi giž trÞ cña nĂŁ Ÿ­ßc sö dĂŽng.
VÝ dî :
main() a b n
{ 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. PhÐp gžn phÞc hßp:
Có ph¾p: biÕ n op= <biÓ uthþc> ⇔ biÕ n = biÕ n op <biÓ uthþc>
Víi op l” phÐp tožn.
KĂŒ thuËt lËp tr× nh 22
Cžc phÐp gžn phÞc hßp : += , -= , *= , /= , %= , <<= , >>=
VÝ dî :n = n*(10+x) ⇔ n *= (10 +x)
n = n % 10 ⇔ n %= 10
I = I +3 ⇔ I += 3
<< : l” phÐp dÞch chuyÓ n bit qua trži .
>> : l” phÐp dÞch chuyÓ n bit qua ph¶ i .
I.5.4. PhÐp to¾n quan hÖ :
< : nhĂĄ hÂŹn
> : lĂ­n hÂŹn
>= : lĂ­n hÂŹn hoÆ c b» ng
<= : nhĂĄ hÂŹn hoÆ c b» ng
!= : khžc
== : b» ng
ChĂł Ăœ :
- Ph© n biÖ t tožn tö so sžnh == vĂ­i phÐp gžn =
- C kh«ng cĂŁ kiÓ u dĂ· liÖ u boolean m” qui ­íc : Giž trÞ 0 l” sai
Giž trÞ !=0 l” Ÿóng
VÝ dî:
a=10;
b= (a>6)*(a-6) → b = 4
c= (a< 5)*(a-5) → c = 0
VÝ dĂŽ: T× m sĂš lĂ­n nhÊ t trong 3 sĂš nguyÂȘ n a, b, c
#include <stdio.h>
#include <conio.h>
void main ()
{ int a, b, c, max;
printf(“Ch­¬ng tr× nh t× m sù lín nhÊ t trong 3 sù”);
printf(“NhË p a, b, c”);
scanf(“%d %d %d ”, &a, &b, &c);
max = a;
if (max<b) max = b;
if (max<c) max = c;
printf(“Sù lín nhÊ t = %d”, max);
getch();
}
KĂŒ thuËt lËp tr× nh 23
I.5.5.Tožn tö logic:
Tožn tö Ăœ nghÜ a
NOT ! Phñ ¼Þnh
AND && Giao, v”
OR || HĂ©i
ThĂž tĂč tÝ nh tožn tĂ” trÂȘ n xuĂšng.
B¶ ng ch© n trÞ:
x ! x x y x && y
true false true true true
false true true false false
false true false
false false false
x y x || y
true true true
false true true
false true true
false false false
VÝ dĂŽ 1: XÐt kĂœ tĂč c cĂŁ ph¶ i l” kĂœ sĂš hay kh«ng?
char c;
if (c >= ‘0’ && c <= ‘9’)
printf (“% c l” kÝ tĂč sĂš “, c);
VÝ dĂŽ 2: XÐt kĂœ tĂč ch l” chĂ· cži hay kh«ng?
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;
KĂŒ thuËt lËp tr× nh 24
int i=2, j=0;
(a>b) && (i<j) → 0
(a<b) | | (i>j) → 1
VÝ dî 5:
n=5;
while (n)
{ printf("nSĂš n = %d",n);
n--;
}
I.5.6. Tožn tö phÈy:
Có phžp:
T = (exp1, exp2, exp3 ); // T = kÕ t qu¶ cña 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. Tožn tö ÂźiÒ u kiÖ n:
Có phžp :
T = <¼iÒ u kiÖ n> ? <bt1> : <bt2>;
NÕ u <ÂźiÒ u kiÖ n> l” Ÿóng th× T = <bt1> , ng­ßc lÂč i 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;
I.5.8. Tožn tö trÂȘ n bit (bit wise) :
DÂčng KĂœ hiÖ u Ăœ nghÜ a
NOT bit ~ lÊ y bï 1
AND bit & giao
OR bit | héi
XOR bit ^ hĂ©i loÂč i trĂ”
dÞch trži << nh© n 2
dÞch ph¶ i >> chia 2
KĂŒ thuËt lËp tr× nh 25
B¶ ng ch© n trÞ:
Bit Bit Bit kÕ t qu¶
A B ~ A A & B A | B A ^ B
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0
VÝ dî:
a= 4564 0001 0001 1101 0100
b= 13667 0011 0101 0110 0011
a & b 0001 0001 0100 0000
a | b 0011 0101 1111 0111
a ^ b 0010 0100 1011 0111
Ăœ nghÜ a:
1. PhÐp AND bit th­ĂȘng Ÿ­ßc dĂŻng ¼Ó kiÓm tra mĂ©t bit cĂŽ thÓ n”o Ÿã trong
th” nh phÇ n dĂ· liÖ u x cĂŁ trÞ 0 hay 1. ViÖ c n” y thĂčc hiÖ n b» ng cžch sö dĂŽng mĂ©t
mÆ t nÂč (mask) vĂ­i bit cÇ n quan t© m b» ng 1 cßn cžc bit khžc b»ng 0. Ta lÊy mask
AND vĂ­i giž trÞ x. NÕ u kÕt qu¶ thu Ÿ­ßc b»ng mask th× l” bit cÇn quan t©m l” 1,
ng­ßc lÂč i 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 = % 02xn”, x1, x2, x1& x2);
}
VÝ dĂŽ 2: Ta muĂšn biÕ t bit thĂž 3 cña 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”);
}
KĂŒ thuËt lËp tr× nh 26
2. PhÐp OR dĂŻng ¼Ó bË t cžc bit cÇ n thiÕ t lÂȘ n cĂČng nhĂȘ v” o mĂ©t mÆ t nÂč .
ChÂŒ ng hÂč n nh­ ta muĂšn bË t bit thĂž 7 cña biÕ n ch (unsigned char ch) lÂȘ n 1:
ch = ch | 0x80;
VÝ dî 3:
void main()
{ unsigned char x1,x2;
printf (“n cho 2 sù hex (ff hay nhá h¬n) :”);
scanf (“%x %x”, &x1, &x2);
printf (“ %02x | %02x %02x n”, x1, x2, x1| x2);
}
3. PhÐp XOR dĂŻng ¼Ó “lËt” bit nghÜ a l” hožn chuyÓn 0→1
VÝ dî 4: §Ó lË t bit 3 ta cã ch­¬ng tr× nh:
void main()
{ unsigned char ch;
printf (“ nhË p 1 sù hex < = ff :”);
scanf (“%x”, &ch);
printf (“%02x ^ 0x08 = %02x n “, ch, ch ^ 0x08);
}
4. Tožn tö << , >>
<< dÞch sang trži (nh© n 2)
>> dÞch sang ph¶ i (chia 2)
VÝ dî 5: num = 201 (0x00c9)
num : 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1
num << 2 : 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0
KÕ t qu¶ = 0x0324 → 804 nghÜ a l” 201* 4
VÝ dî 6:
void main()
{ unsigned char x1, x2 ;
printf (“ nhË p 1 sĂš hex < = ff v” sĂš bit : “);
scanf ( %x %d “, &x1, &x2);
printf (“ %02x >> %d = %02x n”, x1, x2, x1>> x2);
}
ChĂł Ăœ : Trong phÐp dÞch ph¶ i C l” m theo 2 cžch khžc nhau tĂŻy thuĂ©c v” o
KĂŒ thuËt lËp tr× nh 27
kiÓ u dĂ· liÖ u cña tožn hÂč ng bÂȘ n trži.
- NÕu tožn hÂčng bÂȘn trži kiÓu unsigned th× phÐp dÞch sÏ ÂźiÒn 0 v”o cžc bit
bÂȘ n trži.
- NÕu tožn hÂčng bÂȘn trži kiÓu signed th× phÐp dÞch sÏ ÂźiÒn bit dÊu v”o cžc
bit bÂȘ n trži
VÝ dî 7: unsigned int num;
num = 39470; // 9A2E hexa
num =
num >> 2
=
0 →
1 0 0 1
9867 = 0x268B
0 0 1 0
1 0 1 0
0 1 1 0
0 0 1 0
1 0 0 0
1 1 1 0
1 0 1 1
VÝ dî 8 : int num; // 9A2E hexa
num = -26066
num =
num >> 2
=
1 →
1 0 0 1
-6517 = 0xE68B
1 1 1 0
1 0 1 0
0 1 1 0
0 0 1 0
1 0 0 0
1 1 1 0
1 0 1 1
VÝ dĂŽ 8: Ch­ng tr× nh ŸÊi sĂš hex ra sĂš nhÞ ph© n :
#include <stdio.h>
#include <conio.h>
void main()
{ int num;
unsigned int mask;
clrscr();
printf ("Chuong trinh doi so hexa sang nhi phann");
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();
}
KĂŒ thuËt lËp tr× nh 28
VÝ dî 9: Ch­¬ng tr× nh m¾y tÝ nh bitwise
§© y l” ch­ng tr× nh gi¶ lË p mĂ©t mžy tÝ nh thĂčc hiÖ n cžc tožn tö bitwise.
#define TRUE 1
main()
{ char op[10];
int x1, x2;
while (TRUE)
{ printf (“n n Cho biÓ u thþc ( vd ‘ ffoo & f11’) : “);
printf (“n”);
switch ( op[0])
{ case ‘&’:
pbin (x1); printf (“& (and) n “);
pbin (x2);
pline (); pbin (x1 & x2);
break;
case ‘|’:
pbin (x1); printf (“| n “);
pbin (x2);
pline (); pbin (x1 | x2);
break;
case ‘^’:
pbin (x1); printf (“^ n);
pbin (x2);
pline (); pbin (x1 ^ x2);
break;
case ’>‘:
pbin (x1); printf (“ >>“); printf (“%d n “,x2);
pline (); pbin (x1 >> x2);
break;
case ‘<‘:
pbin (x1); printf (“<<“); printf (“%d n”, x2);
pline (); pbin (x1 << x2);
break;
case ‘~’:
pbin (x1); printf (“~ n”);
pline (); pbin (~ x1);
break;
default : printf (“Tožn tö kh«ng hĂźp lÖ /n “);
}
}
KĂŒ thuËt lËp tr× nh 29
}
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Ăč chuyÓ n kiÓ u bŸt buĂ©c:
Trong C cĂŁ 2 tr­ĂȘng hĂźp chuyÓ n kiÓ u: chuyÓ n kiÓ u tĂč Ÿéng v” chuyÓ n
kiÓ u bŸ t buĂ©c.
ChuyÓn kiÓu bŸt buĂ©c: Ÿ­ßc žp dĂŽng khi chuyÓnkiÓutĂč Ÿéngkh«ngŸ­ßc.
Có ph¾p: (Type) biÓ u thþc
VÝ dî: d = (float) (f - 32)
int a= 100, b=6;
double f;
f =a/b // kÕ t qu¶ f=16
f= (double) a/ (double)b // kÕ t qu¶ f= 100.0 / 6.0= 16.666.
* MĂžc Ÿé ­u tiÂȘ n cña cžc phÐp tožn:
§é ­u tiÂȘ n PhÐp tožn ThĂž tĂč kÕ t hĂźp
1 () [ ] → →
2 ! ~ ++ - - (type) * & size of ←←←←
3 * / % →
4 + - →
5 << >> →
KĂŒ thuËt lËp tr× nh 30
6 < <= > >= →
7 = = != →
8 & →
9 ^ →
10 | →
11 && →
12 | | →
13 ? ←←←←
14 = + = - = .. ←←←←
VÝ dî 1: 3/4 * 6 # 3*6 /4
0 * 6 18 /4
0 4
VÝ dî 2: (float) 2 /4 # (float) (2/4)
2.0 /4 (float) 0
0.5 0.0
I.6. Chuçi
I.6.1. §Þnh nghÜ a :Chuçi l” mĂ©t m¶ng m” cžc phÇn tö cña nĂŁ cĂŁ kiÓu kĂœ tĂč.
Khai bžo mĂ©t chuçi kĂœ tĂč chĂža tĂši Âźa 49 kĂœ tĂč
char chuçi[50];
* L­u Ăœ: TÊt c¶ cžc chuçi ¼Òu Ÿ­ßc kÕt thĂłc b»ng kĂœ tĂč NULL (0). Do Ÿã,
nÕ u chuçi d” i 50 th× ta chØ cĂŁ thÓ chĂža tĂši Âźa 49 kĂœ tĂč.
I.6.2. KhĂ«i Ÿéng trÞ:
char chuçi[ ] = {‘A’, ‘N’, ‘H’, ‘ 0’};
char chuçi[ ] = "ANH";
I.6.3. NhËp / xuÊt chuçi:
a. NhËp chuçi:
gets (chuçi)
b. XuÊt chuçi:
puts (chuçi)
ChĂł Ăœ :
- Khi nhËp chuçi th× kh«ng Ÿ­ßc dĂŻng h”m scanf v× h”m scanf kh«ng chÊp
nhË n kho¶ ng trŸ ng.
VÝ dĂŽ: scanf(“%s”, chuçi);// ta nhË p v” o NguyÔ n Vš n ži th×
KĂŒ thuËt lËp tr× nh 31
// chuçi = “NguyÔ n” v× h” m scanf cŸ t kho¶ ng trŸ ng
- Khi dĂŻng h” m gets trong ch­ng tr× nh th× kh«ng nÂȘ n dĂŻng h” m scanf Ă«
bÊt k× Ÿ©u dĂŻ r»ng dĂŻng h”m scanf ¼Ó nhËp sĂš m” ta nÂȘn dĂŻng h”m gets v” h”m
atoi, atof ¼Ó nhË p sù.
V× :
scanf(“%d”, &n); // ta nhË p sĂš 5 ↔
gets (chuçi); // lĂłc n” y chuçi = ““ (chuçi rçng)
I.6.4. H”m chuyÓ n ŸÊi sĂš sang chuçi v” ng­ßc lÂči
sĂšint = atoi (chuçisĂš) // chuyÓ n chuçi sĂš sang sĂš nguyÂȘ n
sĂšf = atof (chuçisĂš) // chuyÓ n chuçi sĂš sang sĂš thĂčc
* Hai h” m n” y n» m trong < stdlib .h >
I.6.5. Cžc h”m vÒ chuçi: (# include < string. h> )
- int strlen(S) : tr¶ vÒ chiÒ u d” i chuçi S.
- int strcmp(S1, S2): so s¾nh chuçi S1 víi S2. NÕ u chuçi S1 giùng S2 kÕ t
qu¶ b» ng 0. NÕ u chuçi S1< S2 kÕ t qu¶ l” © m, nÕ u chuçi S1> S2 kÕ t qu¶ > 0.
- int stricmp(S1, S2): so sžnh chuçi S1, S2 kh«ng ph© n biÖ t chĂ· th­ĂȘng
hay chĂ· hoa
- int strncmp(S1, S2, n): chØ so sžnh n kĂœ tĂč ¼Ç u cña 2 chuçi S1, S2 vĂ­i
nhau.
- int strnicmp(S1, S2, n): chØ so sžnh n kĂœ tĂč ¼Ç u cña 2 chuçi S1, S2 vĂ­i
nhau, kh«ng ph© n biÖ t chĂ· th­ĂȘng, chĂ· hoa
- strcpy(dest, source): chÐp chuçi tĂ” nguĂ„n source sang ¼Ý ch dest
VÝ dî: char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
printf("%sn", string); // "abcdefghi"
- strncpy(dest, source, n): chÐp chuçi tĂ” nguĂ„n sang ¼Ý ch vĂ­i nhiÒ u nhÊ t
l” n kĂœ tĂč.
VÝ dî:
char string[10];
char *str1 = "abcdefghi";
strncpy(string, str1, 3); // string = "abcx1zwe12"
string[3] = '0'; // §Æ t kĂœ tĂč kÕ t thĂłc chuçi v” o cuĂši chuçi.
printf("%sn", string); // "abc"
- strcat(dest, src): nĂši chuçi src v” o sau chuçi dest. ChiÒ u d” i cña chuçi
kÕ t qu¶ b» ng strlen(dest) + strlen(src)
KĂŒ thuËt lËp tr× nh 32
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Ăši nhiÒ u nhÊ t l” n kĂœ tĂč cña src v” o cuĂši chuçi
dest, sau Ÿã thÂȘ m kĂœ tĂč null v” o cuĂši chuçi kÕ t qu¶ .
VÝ dî:
char destination[25];
char *source = " States";
strcpy(destination, "United");
strncat(destination, source, 6);
printf("%sn", destination); // destination = "United State"
- char * strchr(s, ch): tr¶ vÒ ¼Þa chØ cña kĂœ tĂč ch ¼Ç u tiÂȘ n cĂŁ trong chuçi
S; nÕ u kh«ng cĂŁ th× tr¶ vÒ NULL (th­ĂȘng dĂŻng ¼Ó lÊ y 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Ý : %dn", c, ptr-string);
else
printf("Kh«ng t× m thÊ y kĂœ tĂč %cn",c);
- char * strstr(S1, S2): tr¶ vÒ vÞ trÝ cña chuçi S2 trong chuçi S1; nÕ u S2
kh«ng cĂŁ trong S1 th× h” m strstr tr¶ vÒ trÞ NULL.
I.6.6. M¶ng cžc chuçi
*Khai bžo: Khai bžo biÕn ds chĂža tĂši Âźa 50 chuçi kĂœ tĂč, mçi chuçi kĂœ tĂč cĂŁ
tĂši Âźa 30 kĂœ tĂč.
char ds[50 ] [30];
ChĂł Ăœ :
- Kh«ng nÂȘ n gžn chuçi vĂ­i chuçi (s1= s2) m” ph¶ i dĂŻng h” m
strcpy(S1,S2)
- Kh«ng Ÿ­ßc so sžnh 2 chuçi b» ng cžc tožn tö quan hÖ (S1== S2,
S1>S2, S1>= S2), m” ph¶ i dïng h” m strcmp(S1,S2).
KĂŒ thuËt lËp tr× nh 33
VÝ dĂŽ: ViÕ t ch­ng tr× nh t× m kiÕ m 1 tĂ” trong 1 c© u
# include < string.h>
# include < stdio.h>
void main ()
{ char cau[80], tĂ”[7], *ptr;
printf(“NhË p c© u :”);
gets(c© u);
printf(“NhË p tĂ” :”);
gets(tĂ”);
ptr = strstr(c© u, tÔ);
if (ptr == NULL) printf(“Kh«ng cĂŁ tĂ”â€);
else printf(“cĂŁ tĂ”â€);
}
II. C¾c cÊu tróc ¼iÒu khiÓn trong C:
Ng«n ngĂ· C l” ng«n ngĂ· lËp tr× nh cÊp cao cĂŁ cÊu trĂłc, gĂ„m: cÊu trĂłc tuÇn tĂč,
chĂ€n, v” lÆ p.
II.1 CÊu trĂłc tuÇn tĂč (Sequence) :
Cžc lÖ nh trong ch­ng tr× nh Ÿ­ßc thĂčc hiÖ n tuÇ n tĂč tĂ” lÖnh n”y ¼Õn lÖnh
kh¾c cho ¼Õ n khi hÕ t ch­¬ng tr× nh.
VÝ du : ViÕt ch­ng tr× nh tÝ nh v” in ra diÖn tÝ ch cña hai Ÿ­ĂȘng trßnbžnkÝ nh
lÇ n l­ßt l” 3m v” 4.5m cĂŻng vĂ­i hiÖ u sĂš cña 2 diÖ n tÝ ch.
#define PI 3.14159
#include <stdio.h>
#include <conio.h>
void main()
{
float r1, r2, hieuso;
clrscr();
printf("nCHUONG TRINH TINH DIEN TICH 2 HINH TRON VA HIEU SOn");
printf("Ban kinh hinh tron thu nhat : ");
scanf("%f",&r1);
printf("Ban kinh hinh tron thu hai : ");
scanf("%f",&r2);
printf ("Dien tich hinh tron 1 = %.2fn",PI*r1*r1);
KĂŒ thuËt lËp tr× nh 34
printf ("Dien tich hinh tron 2 = %.2fn",PI*r2*r2);
hieuso = PI*r1*r1 - PI*r2*r2;
printf ("Hieu so dien tich 2 hinh tron = %.2fn",hieuso);
getch();
}
II.2. CÊu trĂłc chĂ€n
KĂœ hiÖ u : Âźk l” biÓ u thĂžc Logic
S1, S2 l” cžc phžt biÓ u hay 1 nhĂŁm cžc phžt biÓ u (lÖ nh)
II.2.1. LÖ nh if else:
Có phžp:
if (Âźk) S1;
ÑK
NO
YES
S1
if (Âźk) S1;
else S2;
ÑK S1
S2
NO
YES
ChĂł Ăœ : Cžc lÖ nh if else lĂ„ng nhau
if (Âźk1) S1;
else if (Âźk2) S2;
else if (Âźk3) S3;
else S4;
VÝ dî 1: T× m max(a,b,c)
KĂŒ thuËt lËp tr× nh 35
if (a>b)
if (a>c) max=a;
else max=c;
else if (b>c) max =b;
else max= c;
VÝ dĂŽ 2: TÝ nh h” m f(x) :
f(x) = x2
, nÕ u -2 < = x< 2
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. LÖ nh chĂ€n lĂča: switch_case
Có phžp:
switch (biÓ u thþc)
{ case h» ng 1: S1;
case h» ng 2: S2; break;
.
.
.
case h» ng 3: Sn; break;
default: S0;
}
Cžch hoÂčt Ÿéng:
- (biÓ uthĂžc) cĂŁ kÕ t qu¶ nguyÂȘ n
- H» ng: kĂœ tĂč, sĂš nguyÂȘ n, biÓ u thĂžc cĂŁ sĂš nguyÂȘ n
- NÕu kÕt qu¶ b»ng h»ng I n”o Ÿã th× nĂŁ sÏ l”m lÖnh Si v” tuÇn tĂč thĂčc hiÖn
hÕ t cžc lÖ nh Ă« d­íi cho ¼Õ n khi hÕ t lÖ nh switch.
- MuĂšn ngŸ t sĂč tuÇ n tĂč trÂȘ n th× ph¶ i dĂŻng lÖ nh break.
VÝ dĂŽ: NhË p 1 kĂœ tĂč sĂš dÂč ng hex ŸÊi ra sĂš thË p ph© n
#include <stdio.h>
#include <conio.h>
void main()
KĂŒ thuËt lËp tr× nh 36
{
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ĂŽ: ViÕ t ch­ng tr× nh tÂč o 1 mžy tÝ nh cĂŁ 4 phÐp tožn + , - , * , /
#include <stdio.h>
#include <conio.h>
void main()
{
KĂŒ thuËt lËp tr× nh 37
float num1, num2;
char op;
clrscr();
printf ("Go vao so, toan tu, so n");
scanf("%f %c %f", &num1, &op, &num2);
switch (op)
{
case '+': printf("= %f",num1+num2);
break;
case '-': printf("= %f",num1-num2);
break;
case '*': printf("= %f",num1*num2);
break;
case '/': printf("= %f",num1/num2);
break;
default : printf("Tožn tö lÂč , kh«ng biÕ t");
}
}
II.3. CÊu tróc lÆp
II.3.1. LÖ nh while:
Có phžp:
While (bt)
S;
ÑK
NO
YES
S
ChĂł Ăœ : Trong phÇ n th© n lÖ nh ph¶ i cĂŁ biÕ n ÂźiÒ u khiÓ n vßng lÆ p.
VÝ dĂŽ 1: ViÕ t ch­ng tr× nh in ra b¶ ng m∙ ASCII
void main ()
{ int n=0;
while (n <= 255)
KĂŒ thuËt lËp tr× nh 38
{ printf(“%c cĂŁ m∙ ASCII l” %d”, n, n);
n ++
}
}
VÝ dĂŽ 2: NhË p mĂ©t chuçi kĂœ tĂč, v” kÕ t thĂłc nhË p b» ng ESC
#define ESC ‘ 0x1b’
#include <stdio.h>
#include <conio.h>
void main()
{ char c;
while (1)
if ((c = getche() ) = ESC ) break;
}
VÝ dĂŽ 3: ViÕ t ch­ng tr× nh in b¶ ng cöu ch­ng
void main ()
{ int a, b;
b = 1;
while (b < = 9)
{ a = 2;
while (a < = 9)
{ printf(“%d * %d = %d t”, a, b, a*b);
a++;
}
b ++;
printf(“n”);
}
}
II.3.2. LÖ nh do while:
Có phžp:
do
S
while (bt);
S
ñk
No
Yes
VÝ dĂŽ 1: ViÕ t ch­ng tr× nh in b¶ ng m∙ ASCII
#include <stdio.h>
KĂŒ thuËt lËp tr× nh 39
main ()
{ int n=0;
do
{ printf(“%c cã m∙ ASCII %dn”, n, n);
n ++;
} while (n <= 255);
}
II.3.3. LÖ nh for:
Có phžp:
for ([bt_khĂ«i Ÿéng]; [bt_Âźk]; [bt_lÆ p])
S;
VÝ dĂŽ 1: LÆ p lÖ nh 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 s¾nh vßng lÆ p while - for:
bt_khëi Ÿéng;
while (BiÓ uThþc_¼K)
{ S;
BT_lÆ p;
}
for ( bt_khĂ«i Ÿéng; bt_Âźk; bt_lÆ p)
S;
VÝ dĂŽ 3: ViÕ t ch­ng tr× nh in ra b¶ ng cöu ch­ng b» ng vßng 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: ViÕ t ch­ng tr× nh tÝ nh n giai thĂ”a
KĂŒ thuËt lËp tr× nh 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: ViÕ t ch­¬ng tr× nh tÝ nh biÓ u thþc:
(1 + 1/12
) * (1 + 1/22
) *......... (1 + 1/ n2
)
void main ()
{ int i, n;
float S;
printf(“NhË p sù :”);
scanf(“%d”, &n);
S = 1;
for (i= 1;i<= n; i++)
S = S*(1+1.0 / (i*i));
printf(“nKet qua = %f”, S)
}
* Ph¾t biÓ u break, continue, goto:
1. Break:
LÖ nh break cho phÐp tho¾t ra sím khái vßng lÆ p ( whiledo , for, dowhile),
lÖ nh switch.
2. LÖ nh continue:
LÖ nh continue chØ dĂŻng trong vßng lÆ p l” m cho ch­ng tr× nh nh¶ y tŸ t vÒ
ÂźiÒ u kiÖ n kiÓ m tra cña vßng lÆ p ¼Ó bŸ t ¼Ç u mĂ©t vßng lÆ p mĂ­i.
VÝ dĂŽ: ViÕ t ch­ng tr× nh nhË p mĂ©t c© u chĂ· th­ĂȘng kÕ t thĂłc b» ng dÊ u
chÊ m, xuÊ t ra b» ng 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ĂŒ thuËt lËp tr× nh 41
}
3. LÖnh goto: dĂŻng ¼Ó chuyÓn ÂźiÒu khiÓnch­ngtr× nhvÒ mĂ©tvÞtrÝ n”oŸã.
Có ph¾p: Goto nh∙ n;
LÖ nh goto sÏ chuyÓ n ¼iÒ u khiÓ n ch­¬ng tr× nh ngay lË p tþc vÒ vÞ trÝ ¼Æ t
nh∙ n.
VÝ dî:
Again:
;
.
.
goto Again;
B”i tËp:
1. ViÕ t ch­¬ng tr× nh tÝ nh diÖ n tÝ ch
- H× nh vu«ng
- H× nh thang
- Tam gižc th­ĂȘng
- Tam gižc vu«ng
- H× nh trßn
2. TÝ nh kho¶ ng cžch mĂ©t ÂźiÓ m (X0, Y0) tĂ­i mĂ©t Ÿ­ĂȘng thÂŒ ng Ax + By + C = 0
BA
CByAx
S 22
00
+
++
= , nhË p A, B, C, X0, Y0
3. Cho 3 sĂš thĂčc x, y, z. T× m
a. Max(x+y+z, x*y*z)
b. Min2
((x+y+z) / 2, x*y*z) +1
4. ViÕ t ch­ng tr× nh t× m sĂš lĂ­n nhÊ t trong 3 sĂš nguyÂȘ n a,b, c
5. Gi¶ i ph­ng tr× nh bË c 2 Ax2
+Bx+C = 0 trÂȘ n tr­ĂȘng sĂš thĂčc.
6. ViÕ t ch­¬ng tr× nh tÝ nh diÖ n tÝ ch h× nh trßn, biÕt b¾n kÝ nh r d­¬ng; Ch­¬ng
tr× nh cĂŁ kiÓm tra sĂš liÖu nhËp v”o, nÕu r <=0 th× ch­ng tr× nh bžo lçi v” bŸt
nhË p lÂč i.
7. ViÕ t ch­ng tr× nh nhË p sĂš thË p lĂŽc ph© n in ra sĂš nhÞ ph© n, cĂž 4 sĂš th× cžch
mĂ©t kho¶ ng trŸ ng.
8. ViÕ t ch­ng tr× nh tÂč o 1 mžy tÝ nh gĂ„m cžc phÐp tožn sau : + , - , * , / , ^ (ax
vĂ­i x nguyÂȘ n d­ng), @ (ex
)
KĂŒ thuËt lËp tr× nh 42
9. ViÕ t ch­ng tr× nh kiÓ m tra 1 bit bÊ t k× cña sĂš b» ng 0 hay 1
10. ViÕ t ch­ng tr× nh tÝ nh kÕt qu¶ cña mĂ©t sĂš sau khi dÞch ph¶i hoÆc dÞch trži n
lÇ n.
11. §Õ m sĂš lÇ n xuÊ t hiÖ n cña tĂ” mĂ©t trong 1 c© u
12. Thay thÕ 1 tĂ” trong 1 c© u b» ng 1 tĂ” khžc.
13.NhË p hĂ€ tÂȘ n, tžch hoten ra l” m 2 phÇ n hĂ€ v” tÂȘ n riÂȘ ng.
14.ViÕ t ch­ng tr× nh ŸÊi cžc kĂœ tĂč ¼Çu cña cžc tĂ” ra chĂ· in, cžc kĂœ tĂč cßn lÂči ra
chĂ· th­ĂȘng.
15.ViÕ t ch­ng tr× nh cho phÐp ta kiÓ m tra mĂ©t password l” Ÿóng hay sai (nhË p
tùi ¼a password 3 lÇ n).
16.Cho chuçi s, viÕ t ch­ng tr× nh di chuyÓ n chĂ· tĂ” bÂȘ n trži qua bÂȘ n ph¶ i cña
m” n h× nh tÂč i dßng 5. Quž tr× nh di chuyÓ n dĂ”ng lÂč i khi ta Ê n phÝ m ESC.
17. BÂčn h∙y viÕt ch­ng tr× nh tÝ nh giž trÞ tĂŠng cĂ©ng cña mĂ©t s¶n phÈm cĂŁ kÓ c¶
thuÕ, biÕt r»ng tĂ» suÊt thuÕ l” 13.6% tÝ nh trÂȘn giž gĂšc. Giž gĂšc cña s¶n phÈm
Ÿ­ßc ŸÀc v” o, v” cÇ n in ra:
- TiÒ n thuÕ
- Gi¾ ¼∙ cã thuÕ
18. Trong mĂ©t kĂș thi cuĂši khĂŁa, cžc hĂ€c viÂȘ n ph¶ i thi 4 m«n : m«n I hÖ sĂš 2,
m«n II hÖ sĂš 4, m«n III hÖ sĂš 1, m«n IV hÖ sĂš 2, ÂźiÓ m cžc m«n cho tĂši Âźa l”
10 ÂźiÓ m. ViÕ t ch­ng tr× nh nhË p ÂźiÓ m cña 4 m«n v” tÝ nh ÂźiÓm trung b× nh.
19. MĂ©t ng­ĂȘi bžn r­ßu bžn N chai r­ßu cĂŁ Ÿn giž l” P. NÕu tĂŠng sĂš tiÒn v­ßt
quž 5000000 th× viÖ c chuyÂȘ n chĂ« l” miÓ n phÝ , nÕ u kh«ng phÝ chuyÂȘ n chĂ«
th­ĂȘng Ÿ­ßc tÝ nh b»ng 1%tĂŠng trÞ giž h”ng. ViÕt ch­ngtr× nhnhËpv”oN,P.
In ra cžc chi tiÕ t TĂŠng trÞ giž h” ng, tiÒ n chuyÂȘ n chĂ«, v” tĂŠng sĂš tiÒn ph¶i tr¶.
20. MĂ©t sinh viÂȘ n dĂč tuyÓ n cĂŁ cžc chi tiÕ t sau : hĂ€ tÂȘ n, ÂźiÓm L1 cña lÇn 1, ÂźiÓm
L2 cña lÇ n 2, ÂźiÓ m thi cuĂši kĂș CK. ViÕ t ch­ng tr× nh xžc ¼Þnh xem mĂ©t sinh
viÂȘn cĂŁ Ÿ­ßc tuyÓn hay bÞ loÂči, biÕt r»ng sÏ Ÿ­ßc tuyÓn nÕu ÂźiÓm Ÿ­ßc tÝ nh
theo c«ng thÞc sau lín hn hay b» ng 7 : Max( (L1+L2+CK)/3, CK).
21. ViÕt ch­ng tr× nh cho biÕt tiÒn l­ng h”ng ng”y cña mĂ©t ng­ĂȘi giĂ· trÎ. Cžch
tÝ nh l” 15000Âź/giĂȘ cho mçi giĂȘ tr­íc 14 giĂȘ v” 25000 Âź/giĂȘ cho mçi giĂȘ sau
14 giĂȘ. GiĂȘ bŸ t ¼Ç u v” giĂȘ kÕ t thĂłc c«ng viÖ c Ÿ­ßc nhË p tĂ” b” n phÝ m.
22. Cho 3 sĂš thĂčc x, y z
a. TĂ„n tÂč i hay kh«ng mĂ©t tam gižc cĂŁ 3 cÂč nh cĂŁ Ÿé d” i x, y, z ?
b. NÕ u l” tam gižc th× nĂŁ vu«ng, c© n, ¼Ò u hay th­ĂȘng
23. Gi¶ i hÖ ph­ng tr× nh bË c nhÊ t:
KĂŒ thuËt lËp tr× nh 43
ïŁČïŁČïŁČïŁČ
ax+by = c
a’x+b’y = c’
H­íng dÉ n:
D = a b
a’ b’
= ab’ - a’b
Dx= c b
c’ b’
= cb’ - c’b
Dy= a c
a’ c’
= ac’ - a’c
if D!= 0 x= Dx/D; y= Dy/ D
else if (( Dx != 0) | | ( Dy != 0)) pt v« nghiÖ m
else pt v« ¼Þnh
24. Gi¶ i hÖ ph­ng tr× nh 3 È n sĂš bË c nhÊ t
ïŁČ
a1 x + b1 y + c1 z = d1
a2 x + b2 y + c2 z = d2
a3 x + b3 y + c3 z = d3
25. ViÕ t ch­ng tr× nh gi¶ i ph­ng tr× nh trĂŻng ph­ng ax4
+ bx2
+ c = 0
26. Ng­ĂȘi ta muĂšn lËp hĂŁa Ÿn cho khžch h”ng cña C«ng ty ÂźiÖn lĂčc. ChØ sĂš ¼Çu
v” chØ sĂš cuĂši kĂș sÏ Ÿ­ßc cho biÕt. BiÕt r»ng biÓu giž Ÿ­ßc tÝ nh tĂŻytheoÂźiÖn
nš ng tiÂȘ u thĂŽ.
- NÕ u ÂźiÖ n nš ng tiÂȘ u thĂŽ nhĂĄ hÂŹn 100Kwh, giž mçi Kwh l” 500Âź.
- NÕu ÂźiÖn nšng tiÂȘu thĂŽ tĂ” 100Kwh trĂ« lÂȘn,th× mçiKwhd«irasÏ Ÿ­ßctÝ nh
giž l” 800Ÿ
- PhÝ khu vĂčc l” 5000Âź cho mçi khžch h” ng. ViÕ t ch­ng tr× nh tÝ nh tiÒ n
ph¶ i tr¶ tĂŠng cĂ©ng gĂ„m tiÒ n ÂźiÖ n, v” phÝ khu vĂčc
27. BiÕt 2 sĂš X, Y biÓu diÓn thĂȘi gian tÝ nh theo gi©y. Ng­ĂȘi ta muĂšn viÕt ch­ng
tr× nh :
- §Àc 2 sÚ n” y v” in ra tÊng cña chóng
- ChuyÓ n cžc sĂš n” y v” tĂŠng ra dÂč ng giĂȘ, phÜ t, gi© y cña chĂłng rĂ„i in ra.
KiÓ m xem kÕ t qu¶ cña 2 cžch tÝ nh cĂŁ nh­ nhau kh«ng?
28. ViÕ t ch­ng tr× nh in b¶ ng cöu ch­ng tĂ” 2 → 9 theo h” ng ngang
29. In tam gižc *, h× nh chĂ· nhË t *, rçng - ¼Æ c
30. VÏ l­u ŸÄ v” viÕ t ch­ng tr× nh tÝ nh :
a. 1+2+...+n
KĂŒ thuËt lËp tr× nh 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, xžc ¼Þnh cžc tĂŠng sau Ÿ© y sao cho sĂš hÂč ng cuĂši
cĂŻng cña tĂŠng l” kh«ng Ÿžng kÓ (sĂš hÂč ng cuĂši cĂŻng < epsilon )
a. 1/1+ 1/2+ 1/3+1/4+.....
b. 1+ 1/22
+ 1/32
+....+...
32. ViÕ t ch­ng tr× nh in ra b¶ ng m∙ ASCII, 16 kĂœ tĂč trÂȘ n 1 dßng.
33. VÏ l­u ŸÄ v” viÕ t ch­ng tr× nh :
a. XÐt mĂ©t sĂš cĂŁ ph¶ i l” sĂš nguyÂȘ n tĂš hay kh«ng ?
b. In trÂȘ n m” n h× nh 100 sĂš nguyÂȘ n tĂš ¼Ç u tiÂȘ n
34. ViÕ t ch­ng tr× nh cho phÐp mĂ©t kĂœ tĂč ngÉ u nhiÂȘ n rÂŹi trÂȘ n m” n h× nh. NÕ u
ng­ĂȘi sö dĂŽng kh«ng kÞp Ên phÝ m t­ng Ăžng v” ¼Ó chÂčm Ÿžy m”n h× nh th×
thua cuéc.
35. Cho h” m Fibonacci:
Fn =
{ 1 ; n=0,1
Fn-1 + Fn-2 ; n>=2
a. T× m Fn, víi n do ta nhË p
b. In ra N phÇ n tö ¼Ç u tiÂȘ n cña d∙ y Fibonacci
36. ViÕ t ch­ng tr× nh ŸÀc v”o sĂš nguyÂȘn N v” in ra 1*2*3*..*N cho ¼Õn khi N <=0.
37. Cho 1 d∙ y gĂ„m mĂ©t triÖ u tĂ” 32 bit, h∙ y ¼Õ m sĂš bit 1 trong mçi tĂ”.
38. ViÕ t ch­ng tr× nh Âźožn sĂš : ng­ĂȘi chÂŹi sÏ Âźožn 1 sĂš trong phÂčm vi tĂ” 0 ¼Õn
100, tĂši Âźa 5 lÇn. Ch­ng tr× nh kiÓm tra kÕt qu¶ v” xuÊt th«ng bžo h­íng dÉn:
- SĂš bÂč n Âźožn lĂ­n hÂŹn
- SĂš bÂč n Âźožn nhĂĄ hÂŹn
- BÂč n Âźožn Ÿóng
- Mžy thŸ ng cuĂ©c
KĂŒ thuËt lËp tr× nh 45
III. H”m - §Ö quy:
III.1. H”m:
III.1.1. MĂŽc ¼Ý ch: H”m l” mĂ©t ch­ng tr× nh con cña ch­ng tr× nh chÝ nh,
víi c¾c mîc ¼Ý ch sau:
* Tržnh viÖc lÆp Âźi lÆp lÂči cžc ÂźoÂčn ch­ng tr× nh giĂšng nhau, nhĂȘ Ÿã, ta sÏ
tiÕ t kiÖ m lóc lË p tr× nh.
* TĂŠ chĂžc ch­ng tr× nh: DĂŻng h” m ta sÏ ph© n m¶nh ch­ng tr× nh th”nh
nhĂ·ng khĂši nhĂĄ Ÿéc lË p, mçi khĂši l” mĂ©t h”m thĂčc hiÖn mĂ©t c«ng viÖc n”o Ÿã.
TĂ”ngh”msÏ Ÿ­ßclËptr× nh,kiÓmtraho”nchØ nh;SauŸã,takÕtlÂči¼Ó tÂčoch­ng
tr× nh ho” n chØ nh. NhĂȘ vË y, ch­ng tr× nh vÒ sau dÓ hiÓ u v” dÓ sĂ·a.
* TÝ nh Ÿéc lËp: cho phÐp h”m Ÿéc lËp vĂ­i ch­ng tr× nh chÝ nh. VÝ dĂŽ h”m
cĂŁ nhĂ·ng biÕn cĂŽc bĂ© m” ch­ng tr× nh chÝ nh v” cžc h”m khžc kh«ng thÓ ŸÎng
tĂ­i. Do Ÿã, nÕ u ta cĂŁ khai bžo cžc biÕ n trĂŻng tÂȘ n vĂ­i cžc h” m khžc th× cĂČng
kh«ng sĂź ¶ nh h­ëng tĂ­i cžc biÕ n trĂŻng tÂȘ n Ÿã.
ChĂł Ăœ :
- C kh«ng cho phÐp cžc h” m lĂ„ng nhau nghÜ a l” cžc h” m ¼Ò u ngang cÊ p
nhau (cĂŁ thÓ gĂ€i lÉ n nhau).
- C kh«ng ph© n biÖ t thñ tĂŽc hay h” m, m” chØ quan t© m ¼Õ n kÕ t qu¶ tr¶ vÒ
cña h” m. NÕ u h” m kh«ng tr¶ vÒ kÕ t qu¶ g× c¶ th× cĂŁ thÓ xem l” thñ tĂŽc.
VÝ dĂŽ: VÏ h× nh chĂ· nhË t ¼Æ c b» ng dÊ u ‘*’:
#include <stdio.h>
#include <conio.h>
void ve_hcn(int d,int r) // khai bžo void cho biÕ t h” m kh«ng tr¶ vÒ trÞ
n” o c¶
{ int i,j ; // i, j l” 2 biÕ n cĂŽc bĂ© trong h” m 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); // lĂȘi gĂ€i h” m
getch();
}
KĂŒ thuËt lËp tr× nh 46
III.1.2. CĂł phžp ¼Þnh nghÜ a h”m
Có phžp:
KiÓ u tÂȘ nh” m (ds ŸÚi sĂš)
{ Khai bžo biÕ n cĂŽc bĂ©;
lÖ nh;
[ return (expr);]
}
- KiÓu: L” kÕt qu¶ tr¶ vÒ cña h”m. NÕu kh«ng ghi kiÓu, C sÏ tĂč hiÓu l” kiÓu
int. NÕ u kh«ng muĂšn cĂŁ kÕ t qu¶ tr¶ vÒ th× ghi kiÓ u void.
- Danh sžch ŸÚi sĂš: LiÖt kÂȘ cžc ŸÚi sĂš v” kiÓu cña ŸÚi sĂš gĂ«i¼Õnh”m,cžch
nhau bĂ«i dÊ u ','. NÕ u kh«ng cĂŁ ŸÚi sĂš ta chØ cÇ n ghi()
- LÖ nh return: cĂŁ cžc dÂč ng sau:
return;
return (expr);
return expr;
VÝ dĂŽ: H” m chuyÓn chĂ· th­ĂȘng 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();
}
L­u Ăœ :
- HÂč n chÕ cña lÖ nh return l” chØ tr¶ vÒ mĂ©t kÕ t qu¶ .
- LÖ nh return kh«ng nhÊ t thiÕ t ph¶ i Ă« cuĂši h” m. NĂŁ cĂŁ thÓ xuÊ t hiÖ n Ă« bÊt
kĂș nÂŹi n” o trong h” m. Khi gÆ p lÖ nh return, quyÒ n ÂźiÒ u khiÓ n sÏ chuyÓ n
ngay vÒ ch­ng tr× nh gĂ€i.
III.1.3. Cžc loÂči truyÒ n ŸÚi sĂš
a. TruyÒ n theo trÞ
KĂŒ thuËt lËp tr× nh 47
#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 chÂč y ch­ng tr× nh trÂȘ n:
Nhap a b : 12 24
Gia tri lon nhat =24
Gia tri a =12
Gia tri b=24
NhË n xÐt:
- Ta nhË n thÊ y r» ng giž trÞ hai biÕ n a, b tr­íc v” sau khi v” o h” m max l”
kh«ng thay ŸÊi (mÆ c dĂŻ trong h” m max, c¶ hai biÕ n a v” b ¼Ò u thay ŸÊi); Ÿã l”
cÂŹ chÕ cña sĂč truyÒ n ŸÚi sĂš theo trÞ.
LĂȘi gĂ€i h”m: tÂȘ nh”m (ds ŸÚisĂšthĂčc);
- NÕu truyÒn ŸÚi sĂš theo trÞ th× ŸÚi sĂš thĂčc cĂŁ thÓ l” biÕn,hoÆccĂŁ thÓ l” biÓu
thĂžc.
VÝ dî: c = max(1000,b);
b. TruyÒ n theo ¼Þa chØ : ŸÚi sĂš thĂčc l” ¼Þa chØ cña biÕ n
#include <stdio.h>
#include <conio.h>
KĂŒ thuËt lËp tr× nh 48
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); // a l” tham sĂš thĂčc biÕ n
printf("nGia tri lon nhat =%d",c);
printf("nGia tri a =%d",a);
printf("nGia tri b =%d",b);
getch();
}
Gi¶ sö ta chÂč y ch­ng tr× nh trÂȘ n:
Nhap a b : 12 24
Gia tri lon nhat =24
Gia tri a =1200
Gia tri b=24
NhË n xÐt:
- Ta nhËn thÊy r»ng giž trÞ biÕn a tr­íc v” sau khi v”o h”m max ¼∙ thay ŸÊi;
Ÿã l” cÂŹ chÕ cña sĂč truyÒ n ŸÚi sĂš theo ¼Þa chØ .
LĂȘi gĂ€i h”m: tÂȘ nh”m (tÂȘ nbiÕ n);
- NÕu truyÒn ŸÚi sĂš theo ¼Þa chØ th× tham sĂš thĂčc bŸtbuĂ©cph¶il” mĂ©ttÂȘnbiÕn.
VÝ dĂŽ: c = max(1000,b); l” sai
VÝ dĂŽ: ViÕ t h” m giaohožn ¼Ó hožn ŸÊi giž trÞ cña 2 biÕ n nguyÂȘ n a,b.
void giaohoan (int &a, int &b)
{ int tam;
tam = a;
a = b;
b = tam;
}
KĂŒ thuËt lËp tr× nh 49
void main()
{ int a,b;
printf ("a, b = ");
scanf ("%d %d", &a, &b);
giaohoan(a, b);
}
* TruyÒ n ŸÚi sĂš l” m¶ ng gĂ€ih” m (mang)
h” m (kiÓ u mang[]) hoÆ c h” m(kiÓ u *mang)
VÝ dĂŽ: CĂ©ng thÂȘ m mĂ©t h» ng sĂš v” o m¶ ng tÂȘ n l” dayso.
#define SIZE 5 // d∙ y 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 bžo nguyÂȘ n mÉu cña h”m
- Khai bžo h”m theo nguyÂȘn mÉu ¼ßi hĂĄi ph¶i khai bžo kiÓu dĂ· liÖu cña ŸÚi
sĂš n» m trong ¼Þnh nghÜ a h” m chĂž kh«ng ¼Æ t chĂłng trÂȘ n cžc dßng riÂȘ ng.
- C kh«ng nhÊ t thiÕ t ph¶ i khai bžo h” m theo nguyÂȘ n mÉ u. Tuy nhiÂȘ n, nÂȘ n
cĂŁ v× nĂŁ cho phÐp ch­ng tr× nh dÞch phžt hiÖn cĂŁ lçi do kh«ng Ÿóng kiÓu dĂ· liÖu
giĂ·a trÞ truyÒ n ¼Õ n h” m v” trÞ m” h” m mong muĂšn.
VÝ dî:
float dinhthuc (float a, float b, float c, float d)
{ return (a*d- b*c);
}
void main()
KĂŒ thuËt lËp tr× nh 50
{ float a ,b, a1, b1;
printf(“Nhap a,b,a1,b1:”);
scanf(“%f %f %f %f,&a,&b,&a1,&b1);
printf(“Dinh thuc = %f”,dinhthuc(a,b,a1,b1);
getch();
}
III.1.5. PhÂčm vi tĂ„n tÂči cña biÕ n:
a. BiÕn to”n cĂŽc: l” biÕn Ÿ­ßc khai bžo ngo”i cžc h”m ( kÓ c¶ h”m main).
NĂŁ Ÿ­ßc phÐp truy nhËp ¼Õn tĂ” tÊt c¶ cžc h”m trong suĂšt thĂȘi gian ch­ng tr× nh
hoÂč t Ÿéng.
VÝ dĂŽ: Khai bžo ngo” i h” m main
KiÓ u tÂȘ n biÕ n; // biÕ n to” n cĂŽc
void main()
{
}
b. BiÕ n cĂŽc bĂ©: l” biÕ n Ÿ­ßc khai bžo trong cžc h” m, kÓ c¶ trong h” m
main. NĂŁ kh«ng cho phÐp cžc h” m khžc truy nhË p ¼Õ n nĂŁ. NĂŁ tĂ„n tÂč i
trong thĂȘi gian sĂšng cña h” m chĂža nĂŁ.
void main()
{ kiÓ u tÂȘ n biÕ n; → biÕ n cĂŽc bĂ© trong h” m main()
}
c. BiÕ n ngo”i : l” biÕ n m” cžc h” m cĂŁ thÓ truy xuÊ t tĂ­i m” kh«ng ph¶ i
ph© n phĂši bĂ© nhĂ­. NĂŁ Ÿ­ßc dĂŻng Ă« cžc h” m trÂȘ n cžc tË p tin khžc nhau
liÂȘ n kÕ t lÂč i.
External KiÓ u tÂȘ n biÕ n;
void main()
{
}
d. BiÕ n tÜ nh : l” mĂ©t biÕ n cĂŽc bĂ© cña mĂ©t h” m nh­ng vÉn giĂ· giž trÞ cña
lÇ n gĂ€i h” m Ÿã cuĂši cĂŻng
void main()
{ static KiÓ u tÂȘ nbiÕ n;
}
e. BiÕ n thanh ghi : l” mĂ©t biÕ n sö dĂŽng cžc thanh ghi cña CPU ¼Ó tš ng
tĂšc Ÿé truy xuÊ t
register KiÓ u tÂȘ nbiÕ n ;
KĂŒ thuËt lËp tr× nh 51
III.1.6. Cžc dÉn h­íng tiÒ n xö lĂœ
III.1.6.1. #define
a. ¼Þnh nghÜ a h»ng:
#define tÂȘ n h» ng giž trÞ
VÝ dî: #define PI 3.14
#define MAX 100
#define THONGBAO “HÕ t Gi¾"
#define khoangtrang ‘ ‘
b. ¼Þnh nghÜ a Macro:
#define tÂȘ nmacro (ŸÚi sĂš ) thao tžc
VÝ dî: #define sqr (x) x*x
#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 cžc thao tžc Macro nÂȘn sö dĂŽng cžc dÊu ngoÆc ¼Ó tržnh dÉn
ra mĂ©t kÕ t qu¶ sai
VÝ dî:#define max (a,b) ((a) > (b) ? (a) : (b))
#define hožnvÞ (a,b) { int tÂč m =a; a= b; b= tÂč m;}
#define error (n) printf (“ error %d”, n)
D­íi Ÿ© y mĂ©t sĂš Macro ph© n tÝ ch kĂœ tĂč, tÊ t c¶ ¼Ò u trong <ctype. h>. Cžc
macro n”y tr¶ vÒ trÞ khžc 0 nÕu th”nh c«ng. §Úi vĂ­i mçi macro, th”nh c«ng Ÿ­ßc
¼Þnh nghÜ a nh­ sau:
Macro KĂœ tĂč
isalpha (c) c l” kĂœ tĂč a→ z, A→ Z
isupper (c) c l” kĂœ tĂč A → Z
islower (c) c l” kĂœ tĂč a → z
isdigit (c) c l” kĂœ sĂš 0 → 9
isxdigit (c) 0 → 9, A → F, a → z
iscntrl(c) c l” kĂœ tĂč xĂŁa hoÆ c kĂœ tĂč ÂźiÒ u khiÓ n
(0x7F hoÆ c 0x00 ¼Õ n 0x1F)
ispace (c) c l” kĂœ tĂč space, tab, carriage return,
new line (0x09 ¼Õ n 0x0D, 0x20)
Khai bžo: char c;
KĂŒ thuËt lËp tr× nh 52
* Ph©n biÖ t Macro vĂ­i h”m:
- DĂŻng Macro: truy xuÊ t nhanh, tĂšn bĂ© nhĂ­.
- DĂŻng h” m: ng­ßc lÂč i
III.1.6.2. #include
L” tiÒ n xö lĂœ dĂŻng ¼Ó kÕ t nĂši tË p trung khai bžo trong include vĂ­i tË p tin
Âźang l” m viÖ c.
# include < tÂȘ n tË p tin.h>
# include “ tÂȘ n tË p tin.h”
DÂč ng < > : Âźi t× m tË p tin.h trong th­ mĂŽc ¼∙ Ÿ­ßc chØ ¼Þnh trong Include
Directories.
DÂč ng “ ”: t× m tË p tin.h trong th­ mĂŽc Source Directories, nÕ u kh«ng cĂŁ,
nã ¼i t× m trong th­ mîc ¼∙ ¼­üc chØ ¼Þnh trong Include Directories.
III.2. §Ö qui (Recursion):
III.2.1. Khži niÖ m: §Ö qui l” 1 c«ng cĂŽ rÊ t th­ĂȘng dĂŻng trong khoa hĂ€c
mžy tÝ nh v” trong tožn hĂ€c ¼Ó gi¶ i quyÕ t cžc vÊ n ¼Ò . Tr­íc hÕ t, chĂłng ta h∙ y
kh¶ o sžt thÕ n” o l” mĂ©t vÊ n ¼Ò cĂŁ ¼Ö qui qua vÝ dĂŽ sau:
TÝ nh S(n) = 1 +2 +3 +4+ ...+n
Ta nhË n thÊ y r» ng, c«ng thĂžc trÂȘ n cĂŁ thÓ diÔ n ÂźÂč t lÂč i nh­ sau:
S(n) = S(n-1) + n, v”
S(n-1) = S(n-2) + (n-1)
.....
S(2) = S(1) + 2
S(1) = 1
Nh­ vËy,mĂ©tvÊn¼Ò cĂŁ ¼Ö quil” vÊn¼Ò Ÿ­ßc¼ÞnhnghÜ alÂčib»ngchÝ nhnĂŁ.
§Ó tÝ nh S(n): ta cĂŁ kÕ t qu¶ cña S(1), thay nĂŁ v”o S(2), cĂŁ S(2) ta thay nĂŁ v”o
S(3) ...., cþ nh­ vË y cã S(n-1) ta sÏ tÝ nh ¼­üc S(n)
*MĂ©t sĂš vÝ dĂŽ
1. H”m giai thÔa:
n! =
{ 1*2*3*......*(n-1)*n , n>0
1 , n=0
=
{ n*(n-1)! , n>0
1 , n=0
KĂŒ thuËt lËp tr× nh 53
NhËn xÐt:
- Theo c«ng thĂžc trÂȘ n, ta nhË n thÊ y trong ¼Þnh nghÜ a cña n giai thĂ”a (n!)
cĂŁ ¼Þnh nghÜ a lÂč i chÝ nh nĂŁ nÂȘ n h” m giai thĂ”a cĂŁ ¼Ö qui.
- VĂ­i n >=0 , ÂźiÒ u kiÖ n dĂ”ng tÝ nh h” m giai thĂ”a l” n=1
2. H”m FIBONACCI:
Fn = ïŁČ
1 ; n =0,1
Fn-1 + Fn-2 ; n>1
- Theo ¼Þnh nghÜ a trÂȘ n, h” m Fibonacci cĂŁ lĂȘi gĂ€i ¼Ö qui.
- Quž tr× nh tÝ nh dĂ”ng lÂč i khi n= 1
III.2.2. H”m ¼Ö qui trong ng«n ngĂ· C:
Ng«n ngĂ· C cĂŁ trang bÞ cÂŹ chÕ gĂ€i h”m ¼Ö qui. H”m ¼Ö qui l” h”m gĂ€i ¼Õn
chÝ nh h” m Ÿã mĂ©t cžch trĂčc tiÕ p hay gižn tiÕ p.
VÝ dĂŽ 1: ViÕ t h” m ¼Ö qui tÝ nh S(n) = 1 + 2 + 3 +...+n
#include <stdio.h>
#include <conio.h>
int S(int n)
{ if (n==1) // ÂźiÒ u kiÖ n dĂ”ng
return 1;
else // b­íc ¼Ö qui
return (S(n-1) + n);
}
void main()
{ int n;
printf("n Nhap n = ");
scanf("%d",&n);
printf("Tong S = 1 + 2 + ...+ %d = %d",n, S(n));
getch();
}
VÝ dĂŽ 2 : ViÕ t h” m ¼Ö qui tÝ nh h” m giai thĂ”a n.
long giaithua(int n)
{ return ((n==0) ? 1 : n*giaithua(n-1));
}
III.2.3. H”m ¼Ö qui v” Stack:
MĂ©t ch­ng tr× nh C th­ĂȘng gĂ„m cĂŁ h”m main() v” cžc h”m khžc. Khi chÂčy
ch­ng tr× nh C th× h” m main() sÏ Ÿ­ßc gĂ€i chÂč y tr­íc, sau Ÿã h”m main() gĂ€i
cžc h” m khžc, cžc h” m n” y trong khi chÂč y cĂŁ thÓ gĂ€i cžc h” m khžc nĂ·a. Khi
KĂŒ thuËt lËp tr× nh 54
mĂ©t h” m Ÿ­ßc gĂ€i, th× mĂ©t khung kÝ ch hoÂč t cña nĂŁ Ÿ­ßc tÂč o ra trong bĂ© nhĂ­
stack. Khung kÝ ch hoÂčt n”y chĂža cžc biÕn cĂŽc bĂ© cña h”m v” mÉu tin hoÂčt Ÿéng
cña h” m. MÉ u tin hoÂč t Ÿéng chĂža ¼Þa chØ trĂ« vÒ cña h”m gĂ€i nĂŁ v” cžc tham sĂš
khžc.
BiÕ n cĂŽc bĂ©
§Þa chØ trĂ« vÒMÉ u tin
hoÂč t Ÿéng ïŁČ Th«ng sĂš khžc
Khung kÝ ch hoÂč t
Sau khi h” m Ÿ­ßc gĂ€i ¼∙ thi h” nh xong th× ch­ng tr× nh sÏ thĂčc hiÖn tiÕp
dßng lÖ nh Ă« ¼Þa chØ trĂ« vÒ cña h” m gĂ€i nĂŁ, ŸÄng thĂȘi xĂŁa khung kÝ ch hoÂč t cña
h” m Ÿã khåi bé nhí.
Gi¶ sö ta cĂŁ cÂŹ chÕ gĂ€i h” m trong mĂ©t ch­ng tr× nh C nh­ sau:
main()
{ ......
A();
.....;
B();
....;
}
A()
{.....;
C();
....;
D();
}
B()
{.....;
D();
}
C()
{......;
D();
.....;
}
D()
{........;
........;
}
H× nh sau Ÿ©y cho ta thÊy sĂč chiÕm dĂŽng bĂ© nhĂ­ stack khi chÂčy ch­ng tr× nh
C nh­ m« t¶ Ă« trÂȘ n.
bé nhí
Stack
D
C C C D D
A A A A A A A B B B
M M M M M M M M M M M M M
thĂȘi gian
T­ng tĂč vĂ­i tr­ĂȘng hĂźp h” m ¼Ö qui, khi gĂ€i ¼Ö qui lÉ n nhau th× mĂ©t loÂč t
cžc khung kÝ ch hoÂčt sÏ Ÿ­ßc tÂčo ra v” nÂčp v”o bĂ© nhĂ­ Stack. CÊp ¼Ö qui c”ngcao
th× sĂš khung kÝ ch hoÂčt trong Stack c”ng nhiÒu, do Ÿã, cĂŁ kh¶ nšng dÉn ¼Õn tr”n
Stack (Stack overflow). Trong nhiÒu tr­ĂȘng hĂźp khi lËp tr× nh, nÕu cĂŁ thÓ Ÿ­ßc ta
nÂȘ n gĂŹ ¼Ö qui cho cžc b” i tožn.
KĂŒ thuËt lËp tr× nh 55
IV. Structure:
Cžc kiÓu Ÿn gi¶n tÂči mĂ©t thĂȘi ÂźiÓm chØ l­u giĂ· Ÿ­ßc mĂ©t giž trÞ duy nhÊt.
Cßn mĂ©t biÕ n kiÓ u m¶ ng dĂŻng ¼Ó l­u trĂ· cžc giž trÞ cĂŻng kiÓu dĂ· liÖu vĂ­i nhau,
chÂœ ng hÂč n nh­ mĂ©t d∙ y sĂš, mĂ©t d∙ y cžc kĂœ tĂč,...Nh­ng trong thĂčc tÕ , ÂźiÒ u n” y
vÉ n ch­a Ÿñ v× cžc th” nh phÇ n m” ta l­u giĂ· th­ĂȘng l” khžc kiÓ u dĂ· liÖ u vĂ­i
nhau.
VÝ dĂŽ : Ta muĂšn l­u giĂ· cžc th«ng tin vÒ mĂ©t sinh viÂȘ n nh­ sau : MASO,
HO, TEN, NGAYSINH, NOISINH, PHAI, DIACHI, LOP . VĂ­i cžc th” nh phÇ n
nh­ vËy, th× rĂą r”ng cžc th”nh phÇn cña 1 sinh viÂȘn kh«ng thÓ cĂŻng kiÓu m” ph¶i
thuĂ©c cžc kiÓ u khžc nhau, cĂŽ thÓ l” :
- MASO, HO, TEN : m¶ ng ch÷
- NGAYSINH : int ng” y , thžng , nš m ;
- NOISINH : m¶ ng ch÷
- PHAI : unsigned int;
- LOP : m¶ ng ch÷;
Do Ÿã, ¼Ó l­u trĂ· Ÿ­ßc cžc th”nh phÇn khžc nhau cña mĂ©t ŸÚi t­ßng ta ph¶i
sö dĂŽng mĂ©t kiÓ u dĂ· liÖ u trong C l” Structure. (t­ng tĂč nh­ record trong
Pascal)
IV.1. §Þnh nghÜ a:
MĂ©t biÕ n cĂŁ kiÓ u structure Ÿ­ßc dĂŻng ¼Ó l­u trĂ· mĂ©t ŸÚi t­ßng cĂŁ nhiÒ u
th” nh phÇ n. Cžc th” nh phÇ n cĂŁ thÓ thuĂ©c cžc kiÓ u dĂ· liÖ u khžc nhau.
IV.2. Khai bžo: MuĂšn khai bžo kiÓ u hocvien dĂŻng ¼Ó l­u trĂ· hĂ€, tÂȘ n, ÂźiÓ m
m«n TOAN,LY,HOA, §TB, XÕ p loÂč i cña mĂ©t hĂ€c viÂȘ n, ta cĂŁ :
struct hocvien
{ char ho[30];
char ten[7];
float toan, ly, hoa , dtb;
char xeploai[10];
} ;
- §Ó khai b¾o biÕ n hv cã kiÓ u hocvien :
struct hocvien hv;
- §Ó truy xuÊ t tĂ­i mĂ©t th” nh phÇ n, ta dĂŻng dÊ u chÊ m, vÝ dĂŽ nh­: hv.ho ¼Ó
truy xuÊ t tĂ­i hĂ€ cña hĂ€c viÂȘ n.
* Khai bžo kÕ t hĂźp: vĂ”a khai bžo kiÓu structure vĂ”a khai bžo biÕn cĂŁ kiÓu Ÿã.
struct hocvien
KĂŒ thuËt lËp tr× nh 56
{ char ho[30];
char ten[7];
float toan, ly, hoa , dtb;
char xeploai[10];
} hv1, hv2; // khai b¾o 2 biÕ n hv1, hv2 cïng kiÓ u hocvien
- Khai bžo structure lÄng 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 tr­ĂȘng hĂźp n” y, ¼Ó truy xuÊ t tĂ­i thžng sinh cña hĂ€c viÂȘ n hv, ta viÕ t
nh­ sau: hv.ngsinh.thang.
V. FILE:
V.1. File všn b¶n:
- File vš n b¶ n l” file Ÿ­ßc l­u trĂ· d­íi dÂč ng kiÓ u kĂœ tĂč
CĂŁ 2 cžch truy xuÊ t theo kiÓ u kĂœ tĂč.
- Truy xuÊ t theo tĂ”ng kĂœ tĂč
- Truy xuÊ t theo tĂ”ng dßng
V.1.1. Khai b¾o tËp tin:
Khai b¾o biÕ n kiÓ u file:
FILE *fptr
V.1.2. MĂ« tËp tin:
fptr = fopen (“tÂȘ n file”, “kiÓ u”);
- Trong "tÂȘ nfile" , ta cĂŁ thÓ chØ ¼Þnh mĂ©t Ÿ­ĂȘng dÉ n ¼Ç y Ÿñ nh­ sau
KĂŒ thuËt lËp tr× nh 57
"C:THUKTLTVIDU.TXT". H” m fopen nÕ u mĂ« file th” nh c«ng sÏ tr¶ vÒ mĂ©t
con trĂĄ file cho tËp tin "tÂȘn file", v” con trĂĄ n”y Ÿ­ßc cÊt giĂ· trong biÕn fptr (biÕn
kiÓ u FILE).
NÕ u kh«ng cĂŁ file "tÂȘ n file" trÂȘ n dÜ a th× h” m fopen sÏ tr¶ vÒ trÞ NULL
( nÕ u fptr == NULL nghÜ a l” kh«ng cĂŁ file Ÿã )
- KiÓ u: gĂ„m cĂŁ:
“r“ : ŸÀc ( file ph¶ i cĂŁ sÂœ n, nÕ u kh«ng cĂŁ file, h” m fopen tr¶ vÒ trÞ
NULL)
“w“ : ghi ( nÕ u cĂŁ file sÏ xĂŁa file cĂČ )
“a” : nĂši v” o cuĂši tË p tin
“r +”: ŸÀc / ghi, tË p tin ph¶ i cĂŁ sÂœ n trÂȘ n dÜ a
“a+”: ŸÀc, ghi v”o cuĂši tËp tin, nÕu trÂȘn dÜ a ch­a cĂŁ tËp tin th× nĂŁ sÏ Ÿ­ßc
tÂč o ra.
VÝ dĂŽ: §Õ m sĂš kĂœ tĂč trong file VB.TXT.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ FILE *fptr;
int dem=0;
char ch;
if ((fptr = fopen("VB.txt", "r")) == NULL) // mĂ« file ¼Ó ŸÀc
{
printf("File nay khong the mon");
exit(0); // kÕ t thĂłc ch­ng tr× nh, h”m exit thuĂ©c vÒ stdlib.h
}
while (!feof(fptr))
{ ch=fgetc(fptr); // ŸÀc 1 kĂœ tĂč trong file fptr ra
dem++;
}
fclose(fptr);
printf("nSo ky tu trong file VB.TXT =%d",dem);
getch();
}
V.1.3. §ãng file:
fclose (fptr)
KĂŒ thuËt lËp tr× nh 58
V.1.4. §Àc / ghi kĂœ tĂč: Cho biÕ n kĂœ tĂč charch;
- §Àc kĂœ tĂč tĂ” tË p tin
ch = getc (fptr)
- Ghi kĂœ tĂč lÂȘ n tË p tin
putc (ch, fptr)
VÝ dĂŽ 1: TÂčo 1 file trĂčc tiÕp tĂ” b”n phÝ m. Quž tr× nh tÂčo sÏ dĂ”ng lÂči khi ta Ên
phÝ m 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) // mĂ« file mĂ­i ¼Ó ghi
{ printf("Viec tao file co loin");
exit(0);
}
while ((ch=getche()) !='r')
putc(ch,fptr);
fclose(fptr);
}
VÝ dĂŽ 2: In nĂ©i dung tË p tin ra m” n h× nh
#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)
KĂŒ thuËt lËp tr× nh 59
{ printf("Viec mo file co loin");
exit(0);
}
while ((ch=getc(fptr)) !=EOF)
printf("%c",ch);
fclose(fptr);
}
KĂŒ thuËt lËp tr× nh 60
VÝ dĂŽ 3: Ch­ng tr× nh ¼Õ m sĂš tĂ” trong file
#include <stdio.h>
#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 loin");
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 chuçi kĂœ tĂč:
* H” m fgets (chuçi, chiÒ ud” i, fptr);
H” m fgets ŸÀc 1 chuçi kĂœ tĂč tĂ” trong file fptr v” o biÕ n <chuçi> vĂ­i chiÒ u d” i
tĂši Âźa l” <chiÒ ud” i>. H” m n” y tr¶ vÒ NULL khi ¼∙ ŸÀc hÕ t file
* H” m fputs (chuçi, fptr): ghi 1 chuçi kĂœ tĂč trong <chuçi> v” o file fptr.
H” m n” y kh«ng tĂč Ÿéng thÂȘ m v” o m∙ kÕ t thĂłc ¼Ó chuyÓ n dßng mĂ­i, do Ÿã ta
ph¶ i ghi thÂȘ m m∙ n” y v” o tË p tin b» ng lÖ nh fputs ("n", fptr);
VÝ dĂŽ 1: Ch­ng tr× nh ghi chuçi lÂȘn file, cho ¼Õn khi chuçi nhËp v”o l” rçng
th× kÕ t thóc.
KĂŒ thuËt lËp tr× nh 61
#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) // tÂč o file mĂ­i
{ printf("Viec tao file co loin");
exit(0);
}
while (strlen(gets(chuoi)) > 0) // h” m strlen() trong <string.h>
{ fputs(chuoi,fptr);
fputs("n",fptr);
}
fclose(fptr);
}
VÝ dĂŽ 2: §Àc cžc chuçi kĂœ tĂč tĂ” tË p tin, v” in nĂŁ trÂȘ n m” n h× nh.
#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 loin");
exit(0);
}
while (fgets(chuoi,80,fptr)!= NULL)
printf("%s",chuoi);
fclose(fptr); getch();
}
KĂŒ thuËt lËp tr× nh 62
V.1.6. XĂŁa file: LÖ nh remove xož file Ÿ­ßc chØ ¼Þnh qua <tÂȘ nfile>
CĂł phžp: remove (tÂȘ n file)
H” m remove tr¶ vÒ 0 : xĂŁa th” nh c«ng
tr¶ vÒ -1 : cĂŁ lçi khi xĂŁa file, v” lĂłc n”y biÕn errno cĂŁ 1 trong
2 gi¾ trÞ sau:
ENOENT : kh«ng t× m thÊ y file muĂšn xĂŁa
EACCES : kh«ng cho phÐp xĂŁa file m” bÂč n chØ ¼Þnh
L­u Ăœ : File nÂȘ n Ÿãng tr­íc khi xĂŁa.
VÝ dî: Xãa file do ta chØ ¼Þnh.
#include <stdio.h>
void main()
{ char filename[80];
/* prompt for file name to delete */
printf("File muon xoa: ");
gets(filename);
/* delete the file */
if (remove(filename) == 0)
printf("Removed %s.n",filename);
else
perror("remove"); // in th«ng bžo lçi m” h” m remove g© y ra
}
V.2. File nhÞ ph©n (file cĂŁ cÊu trĂłc)
File nhÞ ph© n l” file dĂŻng ¼Ó l­u trĂ· cžc cÊ u trĂłc d­íi dÂč ng struct hoÆ c
union
V.2.1. Khai bžo:
FILE * fptr;
V.2.2. MĂ« file:
fptr = fopen (tÂȘ nfile, “kiÓ u”);
. rb ( b: binary): mĂ« chØ ¼Ó ŸÀc
. wb : ¼Ó ghi. NÕ u file ¼∙ cĂŁ th× xĂŁa tr­íc khi mĂ«.
. ab : nĂši thÂȘ m; mĂ« ¼Ó ghi thÂȘm v”o cuĂši file, nÕu file ch­a cĂŁ
th× tÂč o mĂ­i
. rb+ : mĂ« file ¼∙ cĂŁ ¼Ó cË p nhË t (ŸÀc/ghi)
. wb+ : tÂč o file mĂ­i cho phÐp ŸÀc/ghi
. ab+ : mĂ« ¼Ó nĂši thÂȘ m vÒ cuĂši file, cho phÐp ŸÀc/ghi
KĂŒ thuËt lËp tr× nh 63
V.2.3. §ãng file:
fclose (fptr)
V.2.4. §Àc/ghi file: H” m fread : ŸÀc sĂš mÉ u tin(cÊ u trĂłc) trong file fptr
v” o <biÕ n cÊ u trĂłc>.
fread (& biÕ n cÊu tróc, sizeof (biÕ n cÊu tróc) , sù cÊu tróc, fptr);
H” m fread tr¶ vÒ sĂš cÊ u trĂłc ŸÀc Ÿ­ßc
H” m fwrite ghi dĂ· liÖ u trong <biÕ n cÊ u trĂłc> v” o file fptr.
fwrite (&biÕ n cÊu tróc, sizeof (biÕ n cÊu tróc) , sù cÊu tróc, fptr);
H” m fwrite tr¶ vÒ sĂš cÊ u trĂłc ghi Ÿ­ßc lÂȘ n file
ChĂł Ăœ :
- §Ó kiÓm tra viÖc ŸÀc file ta kiÓm tra sĂš cÊu trĂłc Ÿ­ßc ŸÀc. NÕu sĂš cÊu trĂłc
tr¶ vÒ b» ng 0 m” ta cÇ n ŸÀc l” 1 cÊ u trĂłc th× ÂźiÒ u Ÿã chĂžng tĂĄ ¼∙ hÕ t file.
* Ghi mĂ©t m¶ng cÊu trĂłc lÂȘ n file
fwrite(tÂȘ nm¶ ng, sizeof (tÂȘ nm¶ ng), 1, fptr);
⇔ for (i= 0; i< n; i++)
fwrite (&tÂȘ nm¶ ng[i], sizeof (tÂȘ nm¶ ng[i] , 1, fptr);
VÝ dĂŽ 1: Ch­ng tr× nh ghi lÂȘ n file nhÞ ph© n
#include <stdio.h>
#include <stdlib.h>
#include <string.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,"wb")) == NULL) // mĂ« file nhÞ ph© n ¼Ó ghi
{ printf ("Khong the tao filen"); exit(0);
}
do
{ printf("Nhap ho ten hoc vien :");
KĂŒ thuËt lËp tr× nh 64
gets(hv.hoten);
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Ă· liÖ u m¶ ng v” o file nhÞ ph© n
#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 filen"); 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ĂŒ thuËt lËp tr× nh 65
}
while (i<3);
fwrite(table, sizeof(table), 1, fptr) ; // ghi noi dung toan bo hoc vien trong
// table vao file fptr
// hoÆ c for (i=0; i<3; i++)
// fwrite(&table[i], sizeof(table[i]), 1, fptr)
fclose (fptr);
}
VÝ dĂŽ 3: Ch­ng tr× nh ŸÀc file nhÞ ph© n, v” in danh sžch hĂ€c viÂȘ n ra m” n
h× nh.
// In danh sžch hĂ€c viÂȘ n ra m” n h× nh
#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 filen"); 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 xuÊt tËp tin ngÉu nhiÂȘ n: (ÂźiÒ u khiÓ n con trĂĄ tË p tin trÂȘ n file
nhÞ ph© n)
KĂŒ thuËt lËp tr× nh 66
* Con trĂĄ file: Mçi tË p tin ¼Ò u cĂŁ con trĂĄ file sau khi Ÿ­ßc mĂ«. Con trĂĄ file
l” con trĂĄ chØ ¼Õ n tĂ”ng byte trÂȘ n file. Khi ŸÀc hay ghi dĂ· liÖ u trÂȘ n tË p tin, ta ¼∙
l”m dÞch chuyÓn con trĂĄ file mĂ©t sĂš byte, Ÿ©y chÝ nh l” sĂš byte m” kiÓu dĂ· liÖu ¼∙
chiÕ m. Khi Ÿãng rĂ„i mĂ« tË p tin, con trĂĄ file lu«n Ă« ¼Ç u tËp tin ; ngoÂči trĂ” tr­ĂȘng
hĂźp ta mĂ« b» ng tĂŻy chĂ€n 'a' th× con trĂĄ file sÏ Ă« cuĂši tË p tin ¼Ó ghi thÂȘm dĂ· liÖu
v” o cuĂši tË p tin. H” m fseek cho phÐp ta di chuyÓ n con trĂĄ file ¼Õ n vÞ trÝ mong
muĂšn.
Có phžp:
int fseek (FILE * fptr, long nbytes, kiÓ u)
+ nbytes : sĂš bytes tÝ nh tĂ” vÞ trÝ kiÓ u cho ¼Õ n vÞ trÝ cÇ n tĂ­i
+ kiÓ u l” sĂš nguyÂȘ n :
kiÓ u = 0 (tÝ nh tĂ” ¼Ç u tË p tin)
kiÓ u = 1 (tÝ nh tĂ” vÞ trÝ hiÖ n tÂč i)
kiÓ u = 2 (tÝ nh tĂ” cuĂši tË p tin)
NÕ u fseek tr¶ vÒ 0 nghÜ a l” nĂŁ ¼∙ di chuyÓ n tĂ­i vÞ trÝ Ÿã.
L­u Ăœ: sĂš thĂž tĂč trÂȘ n tË p tin tÝ nh tĂ” 0.
VÝ dĂŽ: ViÕ t ch­ng tr× nh truy xuÊ t ngÉ u nhiÂȘ n mĂ©t mÉ u tin theo sĂš thĂž tĂč
cña nĂŁ trong file nhÞ ph© n
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{ struct hocvien
{ char hoten[30];
int tuoi;
} hv;
FILE *fptr;
char tenfile[67];
int stt, sobytes;
printf("Nhap ten file :");
gets(tenfile);
if ((fptr=fopen(tenfile,"rb")) == NULL)
{ printf ("Khong the mo filen"); exit(0);
}
clrscr();
KĂŒ thuËt lËp tr× nh 67
printf("Cho biet so thu tu mau tin can di chuyen den :");
scanf("%d",&stt);
sobytes = stt * sizeof(hv);
if (fseek(fptr,sobytes,0)!=0)
{ printf ("Khong the di chuyen con tro file toi vi tri ban chi dinh duoc");
exit(0);
}
fread(&hv,sizeof(hv),1,fptr) ;
printf("n%-20s",hv.hoten);
printf("%3d",hv.tuoi);
fclose (fptr);
getch();
}
V.3. Ph¾t hiÖ n lçi khi truy xuÊt tËp tin
PhÇ n lĂ­n nhĂ·ng h”m xuÊt, nhËp tËp tin chuÈn kh«ng th«ng bžo rĂą nĂ©i dung
cña lçi. ChÂŒ ng hÂč n nh­:
- putc () sÏ tr¶ vÒ EOF khi cĂŁ lçi hoÆ c cuĂši tË p tin
- fgets () sÏ tr¶ vÒ l” NULL khi ŸÀc hÕ t file hoÆ c khi cĂŁ lçi
Do ¼ã, ¼Ó ph¾t hiÖ n lçi khi truy xuÊ t tË p tin, ta dïng macro ferror (FILE *fptr)
int ferror (file * ptr)
Macro ferror tr¶ vÒ mĂ©t trÞ khžc 0 nÕ u phžt hiÖ n ra lçi trÂȘ n file fptr.
* §Ó xuÊ t c© u th«ng bžo lçi ta dĂŻng h” m perror ()
void perror (const char * str)
vĂ­i str : chuçi kĂœ tĂč chĂža c© u th«ng bžo
* Hai h” m n” y th­ĂȘng Ÿ­ßc sö dĂŽng ngay sau khi sö dĂŽng cžc h” m ŸÀc /
ghi file
VÝ dî: fwrite (&table, sizeof (table), 1, fptr);
if (ferror (fptr) != 0)
{ perror (“Loi ghi du lieu”);
exit (0);
}
VÝ dî :
#include <stdio.h>
void main()
{
FILE *fp;
KĂŒ thuËt lËp tr× nh 68
fp = fopen("perror.dat", "r");
if (!fp)
perror("Kh«ng thÓ mĂ« file ¼Ó ŸÀc");
}
Khi chÂč y ch­ng tr× nh n” y, nÕ u trÂȘ n dÜ a ch­a cĂŁ tË p tin perror.dat th× sÏ hiÖ n
th«ng bžo lçi: Kh«ng thÓ mĂ« file ¼Ó ŸÀc: No such file or directory.
B”i tËp
1. TÂč o tË p tin diÖ n tÝ ch.h
#define Pi 3.14
#define dthv (x) x*x
#define dtht (x) (Pi*x*x)
2. ViÕ t ch­ng tr× nh tÝ nh diÖ n tÝ ch dĂča v” o file dientich.h Ă« trÂȘ n
3. ViÕ t h” m ¼Ö qui tÝ nh tÝ ch P(n) = 1 * 2 * 3* ....* n , n>0
4. ViÕ t h” m ¼Ö qui tÝ nh h” m mĂČ xn
, vĂ­i n nguyÂȘ n.
5. ViÕ t h” m ¼Ö qui tÝ nh phÇ n tö thĂž n cña h” m Fibonacci.
6. ViÕ t h” m ¼Ö qui gi¶ i quyÕ t b” i tožn Thžp H” nĂ©i.
CĂŁ 3 cĂ©t A, B, C. CĂ©t A hiÖ n Âźang cĂŁ n dÜ a kÝ ch th­íc khžc nhau, dÜ a nhĂĄ Ă«
trÂȘ n dÜ a lĂ­n Ă« d­íi. H∙ y dĂȘi n dÜ a tĂ” cĂ©t A sang cĂ©t C (xem cĂ©t B l” cĂ©t trung
gian) vĂ­i ÂźiÒ u kiÖ n mçi lÇ n chØ Ÿ­ßc dĂȘi 1 dÜ a v” dÜ a ¼Æt trÂȘn bao giĂȘ cĂČng
nhá h¬n dÜ a ¼Æ t d­íi.
7. ViÕ t ch­ng tr× nh m∙ hĂŁa v” gi¶ i m∙ mĂ©t file všn b¶n sao cho nÕu ta ¼∙ m∙
hĂŁa rĂ„i th× ch­ng tr× nh kh«ng m∙ hĂŁa nĂ·a, v” nÕu file Ÿã ch­a m∙ hĂŁa th×
kh«ng Ÿ­ßc gi¶ i m∙ .
8. Cho biÕ t trong mĂ©t file vš n b¶ n do ta nhË p v” o cĂŁ bao nhiÂȘ u kĂœ tĂč, bao nhiÂȘu
tĂ”, v” bao nhiÂȘ u dßng; biÕ t r» ng cžc tĂ” cžch nhau kho¶ng trŸng, dÊu tab, dÊu
chÊ m.
9. ViÕ t ch­ng tr× nh tÂč o mĂ©t menu thĂčc hiÖ n cžc chĂžc nš ng sau trÂȘ n file vš n
b¶ n:
- TÂč o file mĂ­i
- §Àc file
- XĂŁa file
- Ghi nÚi Ÿu«i file
- Copy file
- Di chuyÓ n file tĂ” th­ mĂŽc n” y sang th­ mĂŽc khžc
- T× m mĂ©t tĂ” xuÊt hiÖn bao nhiÂȘu lÇn trong file (kh«ng ph©n biÖt chĂ· in, chĂ·
KĂŒ thuËt lËp tr× nh 69
th­ĂȘng)
- Thay thÕ tĂ” n” y b» ng tĂ” khžc
10. TÂč o menu thĂčc hiÖ n cžc c«ng viÖ c sau:
- NhË p danh sžch cĂŁ kiÓ u hĂ€c viÂȘ n v” o mĂ©t file tÂȘ n 'HOSO.TXT', mçi hĂ€c
viÂȘ n cĂŁ cžc th«ng tin sau: maso (int), hoten (chuçi tĂši Âźa 30 kĂœ tĂč), phži
(NAM/NU), tuĂŠi (int).
- LiÖ t kÂȘ danh sžch hĂ€c viÂȘ n ra m” n h× nh theo dÂč ng sau:
M∙ sĂš HĂ€ v” tÂȘ n Phži TuĂŠi
- Truy xuÊ t ngÉ u nhiÂȘ n theo thĂž tĂč mÉ u tin
- T× m kiÕ m mĂ©t ng­ĂȘi trong file theo m∙ sĂš
- CË p nhË t söa ŸÊi cžc mÉu tin theo m∙ sĂš (NhËp m∙ sĂš, sau Ÿã hiÖu chØ nh
lÂč i hoten, phai, v” tuĂŠi).
- XĂŁa mĂ©t ng­ĂȘi trong file theo m∙ sĂš.
KĂŒ thuËt lËp tr× nh 70
CH­NG 3 CžC THUËT TOžN TRÂŁN CÊU TRĂłC DĂ· LIÖU M¶NG
I. M¶ng kh«ng sŸp xÕp v” thuËt tožn t×m kiÕm trÂȘn
m¶ng ch­a cĂŁ thĂž tĂč
I.1. MĂ©t sĂš khži niÖ m vÒ m¶ng:
I.1.1. §Þnh nghÜ a:
M¶ ng l” 1 d∙ y cžc phÇ n tö cĂŁ cĂŻng kiÓ u dĂ· liÖ u Ÿ­ßc sŸ p xÕ p liÂȘ n tiÕ p
nhau trong bé nhí
0100
0102 1 int
0104 2 M¶ng n phÇn tö
n-1
BĂ© nhĂ­
!!!!Khai bžo:
CĂł phžp: Khai bžo m¶ ng 1 chiÒ u
KiÓ u_DL TÂȘ nm¶ ng [kÝ ch th­íc];
♩ KiÓ u_DL : l” 1 trong cžc kiÓu dĂ· liÖu cÂŹ b¶n, Ÿã l” kiÓu cña phÇn tö
cña m¶ ng
♩ TÂȘ nm¶ ng: l” tÂȘ n cña m¶ ng Ÿ­ßc ¼Æ t 1 cžch hĂźp lÖ
♩ KÝ ch th­íc: l” 1 h» ng nguyÂȘ n cho biÕ t sĂš phÇ n tö tĂši Âźa cña m¶ ng
VÝ dĂŽ 1: Khai bžo 1 m¶ ng sĂš nguyÂȘ n
‱ int n ;
int M[n] ; SAI
‱ int M[10] ; Ÿóng v× kÝ ch th­íc m¶ng ph¶i l” h»ng kh«ng ph¶i l”
biÕ n
‱ #define max 100
int M[max] ;
VÝ dĂŽ 2: Khai bžo 1 danh sžch hĂ€ tÂȘ n hĂ€c viÂȘ n cña 1 lĂ­p hĂ€c
char dshv[50][30]; // dshv cĂŁ thÓ chĂža tĂši Âźa hĂ€ tÂȘ n 50 hĂ€c viÂȘ n,
// chiÒ u d” i hĂ€ tÂȘ n mçi hĂ€c viÂȘ n tĂši Âźa l” 30 kĂœ tĂč
CĂł phžp: Khai bžo m¶ ng 2 chiÒ u
KĂŒ thuËt lËp tr× nh 71
KiÓ u_DL TÂȘ nm¶ ng [kÝ ch th­íc 1][kÝ ch th­íc 2]
ChĂł Ăœ : MĂ©t m¶ ng trong C, cžc phÇ n tö Ÿ­ßc Ÿžnh sĂš tĂ” 0 tĂ­i n-1
VÝ dî: Víi M[10]
th× th” nh phÇ n thĂž 1 l” M[0]
th” nh phÇ n cuĂši cĂŻng M[9]
* C kh«ng bŸ t bÎ , kh«ng kiÓ m tra xem biÕ n ¼Õ m cĂŁ v­ßt ra khĂĄi giĂ­i hÂč n
cho phÐp cña m¶ ng ch­a. Do Ÿã, chĂłng ta ph¶ i kiÓ m tra biÕ n ¼Õm trong ch­ng
tr× nh (ph¶ i nhĂĄ hÂŹn n)
I.1.2. KhĂ«i Ÿéng trÞ cho m¶ng:
Ta khĂ«i Ÿéng Ÿ­ßc trÞ cho m¶ ng trong 2 tr­ĂȘng hĂźp sau:
‱ M¶ ng Ÿ­ßc khai bžo l” biÕ n ngo” i (main) nghÜ a l” biÕ n to” n cĂŽc
‱ M¶ ng Ÿ­ßc khai bžo cĂŽc bĂ©
VÝ dî 1 : int M[3] = {10,11,12}
main()
{
}
VÝ dî 2:
main()
{ static int M[ ]={10,22,30};
............
}
‱ Ta cĂŁ thÓ gžn 1 h» ng cho c¶ m¶ ng nh­ sau:
memset (M,0,sizeof(int) *3) ; // gžn 0 cho m¶ ng M vĂ­i M cĂŁ 3 phÇ n tö
‱ TĂ” khĂŁa static dĂŻng ¼Ó khai bžo 1 biÕn cĂŽc bĂ© th­ĂȘng trĂčc cho phÐp duy
tr× giž trÞ riÂȘ ng cña nĂŁ Ă« nhĂ·ng lÇ n gĂ€i h” m sau n” y.
‱ KhĂ«i tÂč o m¶ ng 2 chiÒ u:
int M[2][3]= {{1,2,3},
{0,1,0}};
I.1.3.Truy xuÊt th”nh phÇn cña m¶ng: M[chØ sĂš]
‱ Truy xuÊ t th” nh phÇ n thĂž 2 cña m¶ ng 1 chiÒ u: M[1]
‱ Truy xuÊ t th” nh phÇ n thĂž i cña m¶ ng 1 chiÒ u: M[i-1]
‱ Truy xuÊ t th” nh phÇ n dßng 2, cĂ©t 3 cña m¶ ng 2 chiÒ u M[1][2]
I.1.4. §Àc (nhËp) dĂ· liÖ u cho m¶ng:
- §Ó nhË p dĂ· liÖ u cho m¶ ng ta ph¶ i nhË p dĂ· liÖ u cho tĂ”ng th” nh phÇ n cña
m¶ ng.
VÝ dî 1:
KĂŒ thuËt lËp tr× nh 72
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: NhË p v” o m¶ ng 2 chiÒ u.
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. XuÊt dĂ· liÖu kiÓu m¶ng: §Ó xuÊt dĂ· liÖu m¶ng ta cĂČng ph¶i xuÊt dĂ·
liÖ u cña tĂ”ng th” nh phÇ n m¶ ng
VÝ dî:
int i, n;
float M[10];
for(i = 0; i< n; i++)
printf(“a[%d] = %f”,i+1, M[i]);
I.2. ThuËt tožn t× m kiÕ m trÂȘ n m¶ng ch­a cĂŁ thĂž tĂč:
Do m¶ng ch­a cĂŁ thĂž tĂč nÂȘn ta žp dĂŽng ph­ng phžp t× m kiÕm tuyÕn tÝ nh t× m
tĂ” ¼Çu m¶ng cho ¼Õn cuĂši m¶ng. Trong ch­ng tr× nh sau Ÿ©y, h”m TimkiÕm sÏ
tr¶ vÒ trÞ -1 nÕ u kh«ng cĂŁ m∙ sinh viÂȘ n trong danh sžch ds, ng­ßc lÂči h”m sÏ tr¶
vÒ vÞ trÝ cña m∙ sĂš Ÿã trong danh sžch ds.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SOSV 100 // sĂš sinh viÂȘ n tĂši Âźa trong danh sžch
typedef struct sinhvien // ¼Þnh nghÜ a kiÓ u sinhvien
KĂŒ thuËt lËp tr× nh 73
{ char maso[6];
char hoten[30];
};
typedef struct danhsach_sv // ¼Þnh nghÜ a kiÓ u 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 %-sn", psv->sv[i].maso,psv->sv[i].hoten);
i++;
}
getch();
}
/* H”m Timkiem t× m maso trong danhsach *psv */
int Timkiem(danhsach_sv *psv, char maso[])
{ int i=0;
while ((i<psv->tssv) && (strcmp(psv->sv[i].maso, maso)!=0))
i++;
return (i==psv->tssv ? -1 : i) ;
KĂŒ thuËt lËp tr× nh 74
}
void main()
{ struct danhsach_sv ds;
char maso[6];
int vitri;
Nhap_ds(&ds); // GÀi h” m Nhap_ds víi 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. Cžc thuËt tožn sŸp xÕp:
Trong thĂčc tÕ cuĂ©c sĂšng cĂČng nh­ trong lÜ nh vĂčc lËp tr× nh, viÖc qu¶n lĂŒ dĂ· liÖu
th­ĂȘng ¼ßi hĂĄi sĂč t× m kiÕ m cžc dĂ· liÖ u cÇ n thiÕ t; §Ó thuË n tiÖ n cho viÖ c t× m
kiÕ m, dĂ· liÖ u th­ĂȘng Ÿ­ßc sÂœ p xÕ p theo mĂ©t thĂž tĂč n” o Ÿã.
CĂŁ rÊ t nhiÒ u ph­ng phžp sŸ p thĂž tĂč, trong b” i gi¶ ng n”y ta chØ kh¶o sžt hai
ph­ng phžp sŸ p xÕ p l” Bubble_Sort v” Quick_Sort.
§Ó thuËn tiÖn ta gi¶ sö m¶ng l” d∙y sĂš cĂŁ tĂši Âźa 100 sĂš, v” cžc thuËt tožn d­íi
Ÿ© y dĂŻng ¼Ó sŸ p xÕ p d∙ y sĂš theo thĂž tĂč tš ng dÇ n.
II.1. SŸp xÕ p theo ph­ng phžp Bubble_Sort (ph­ng phžp nĂŠi bĂ€t)
- NĂ©i dung : Ta cho i duyÖ t d∙ y a[0], .. ,a[n-1]; nÕ u a[i-1] lĂ­n hÂŹn a[i] th× ta
hožn ŸÊi (a[i-1],a[i]). LÆp lÂči quž tr× nh duyÖt d∙y n”y cho ¼Õn khi kh«ng cĂŁ x¶y
ra viÖ c ŸÊi chç cña hai phÇ n tö.
VÝ dĂŽ: Ta sŸ p thĂž tĂč d∙ y sĂš sau : 26 33 35 29 19 12 32
B­íc 0 1 2 3 4 5 6
26 12 12 12 12 12 12
33 26 19 19 19 19 19
35 33 26 26 26 26 26
29 35 33 29 29 29 29
19 29 35 33 32 32 32
KĂŒ thuËt lËp tr× nh 75
12 19 29 35 33 33 33
32 32 32 32 35 35 35
- Ch­¬ng tr× nh:
#include <stdio.h>
#include <conio.h>
int mang[100]; // biÕ n to” n cĂŽc
int size ;
void Bubble_Sort(int A[100], int n)
{ int i,j,temp;
for (i=1; i<n; i++)
for (j=n-1;j>=i; j--)
if (A[j-1] > A[j])
{ temp = A[j-1];
A[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()
{
size= Nhap_day_so(mang);
KĂŒ thuËt lËp tr× nh 76
Bubble_Sort(mang,size);
Liet_ke(mang,size);
}
Ta nhË n thÊ y ph­ng phžp n” y cĂŁ thÓ Ÿ­ßc c¶ i tiÕ n dÔ d” ng. NÕ u Ă« lÇ n
duyÖt d∙y n”o Ÿã m” kh«ng cĂŁ cĂŁ sĂč ŸÊi chç giĂ·a hai phÇn tö th× d∙y ¼∙ cĂŁ thĂž
tĂč v” gi¶ i thuË t kÕ t thĂłc. Trong tr­ĂȘng hĂźp n”y, ta dĂŻng mĂ©t cĂȘ hiÖu flag ¼Ó ghi
nhË n ÂźiÒ u n” y, v” gi¶ i thuË t Bubble Sort Ÿ­ßc c¶ i tiÕ n 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. SŸp xÕ p theo ph­ng phžp Quick_Sort
II.2.1. NĂ©i dung: ChĂ€n mĂ©t phÇn tö bÊt kĂș trong danh sžch l”m ÂźiÓm chĂšt
x, so sžnh v” ŸÊi chç nhĂ·ng phÇ n tö trong danh sžch n”y ¼Ó tÂčo ra 3 phÇn: phÇn
cĂŁ giž trÞ nhĂĄ hÂŹn x, phÇn cĂŁ giž trÞ b»ng x, v” phÇn cĂŁ giž trÞ lĂ­n hÂŹn x. LÂči tiÕp
tĂŽc chia 2 phÇ n cĂŁ giž trÞ nhĂĄ hÂŹn v” lĂ­n hÂŹn x theo nguyÂȘ n tÂœ c nh­ trÂȘ n; quž
tr× nh chia phÇn sÏ kÕt thĂłc khi mçi phÇn chØ cßn lÂči mĂ©t phÇn tö, lĂłc n”y ta ¼∙ cĂŁ
mĂ©t danh sžch cĂŁ thĂž tĂč.
VÝ dî: XÐt d∙ y 26 33 35 29 19 12 32
' LÇ n chia phÇ n thĂž nhÊ t : ChĂ€n phÇ n tö chĂšt cĂŁ khĂŁa l” 29, ¼Æ t l” x
26 33 35 29 19 12 32
i % $ j
DĂŻng hai biÕ n chØ sĂš i v” j ¼Ó duyÖ t tĂ” hai ¼Çu danh sžch ¼Õn x. NÕu i gÆp
KĂŒ thuËt lËp tr× nh 77
phÇ n tö lĂ­n hÂŹn hay b» ng x sÏ dĂ”ng lÂč i, j gÆ p phÇ n tö nhĂĄ hÂŹn hay b» ng x sÏ
dĂ”ng lÂč i, rĂ„i ŸÊi chç hai phÇ n tö n” y; sau Ÿã tiÕ p tĂŽc duyÖ t cho ¼Õ n khi i>j th×
ngĂ”ng lÂč i.
LĂłc n” y d∙ y sÏ cĂŁ 3 phÇ n khžc nhau nh­ h× nh vÏ sau :
26 33 35 29 19 12 32
i j
26 12 35 29 19 33 32
i j
26 12 19 29 35 33 32
ij
26 12 19 29 35 33 32
j i
' LÇ n chia phÇ n thĂž hai cho d∙ y con 26 12 19, chĂ€n chĂšt x=12
26 12 19 % 12 26 19
i j j i
KÕ t thóc ta sÏ cã hai phÇ n : 12 ; 26 19
' LÇ n chia phÇ n thĂž 3 cho d∙ y con 26 19, chĂ€n chĂšt x=26
26 19 % 19 26 KÕ t thóc qu¾ tr× nh chia nhá d∙ y con 26 12 19
i j j i
- LÇ n chia phÇ n thĂž 4 cho d∙ y con 35 33 32, chĂ€n chĂšt x= 33
35 33 32 % 32 33 35 % 32 33 35
i j ij j i
KÕ t thóc ta sÏ cã ba phÇ n : 32 ; 33 ; 35
§Õn Ÿ©y quž tr× nh chia phÇn kÕt thĂłc v× tÊtc¶ cžc phÇnchØ cĂŁ mĂ©tphÇntö,
lĂłc n” y ta sÏ cĂŁ mĂ©t danh sžch cĂŁ thĂž tĂč l” :
12 19 26 29 32 33 35
II.2.2. Gi¶i thuËt:
a. Gi¶i thuËt kh«ng ¼Ö quy:
- Ta tÂč o mĂ©t Stack , mçi phÇn tö cña Stack cĂŁ 2 th”nh phÇn l” q, r chĂža chØ
sĂš ¼Çu v” chØ sĂš cuĂši cña d∙y cÇn sŸp. Ban ¼Çu, Stack[0].q = 0 v” Stack[0].r =n-1
- TiÕn h”nh ph©n hoÂčch d∙y sĂš gĂ„m cžc sĂš bŸt ¼Çu tĂ” chØ sĂš q¼ÕnchØ sĂš r
- Sau mçi lÇ n chia phÇ n, ta kiÓ m tra xem phÇ n cĂŁ giž trÞ nhĂĄ hÂŹn chĂšt v”
phÇ n cĂŁ giž trÞ lĂ­n hÂŹn chĂšt nÕ u cĂŁ tĂ” 2 phÇ n tö trĂ« lÂȘ n th× Ÿ­a v” o Stack. Sau
mçi lÇ n ph© n hoÂč ch, ta lÂč i lÊ y d∙ y sĂš mĂ­i tĂ” Stack ra ph© n hoÂč ch tiÕ p.
KĂŒ thuËt lËp tr× nh 78
- Qu¾ tr× nh cþ nh­ thÕ cho tíi khi Stack rçng th× kÕ t thóc.
* Ch­¬ng tr× nh:
#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)
{ struct Element_Stack // kiÓ u phÇ n tö trong Stack
{
int q, r;
} ;
Element_Stack Stack[50]; // Stack cĂŁ tĂši Âźa 50 phÇ n tö
int sp=0; // con trĂĄ Stack, khĂ«i tÂč o sp=0
int i,j,x,q,r,temp;
Stack[0].q =0 ; // chØ sĂš ¼Ç u cña m¶ ng cÇ n sŸ p
Stack[0].r =n-1; // chØ sĂš cuĂši cña m¶ ng cÇ n sŸ p
do
{ // LÊ y mĂ©t ph© n hoÂč ch ra tĂ” Stack
q = Stack[sp].q ; r =Stack[sp].r ;
sp--; // XĂŁa 1 phÇ n tö khĂĄi Stack
do
{ // Ph© n ÂźoÂč n d∙ y con a[q] ,..., a[r]
i = q; j =r;
x = A[(q+r) / 2] ; // LÊ y phÇ n tö giĂ·a cña d∙ y cÇ n sŸ p thĂž tĂč l” m chĂšt
do
{ while (A[i] < x) i++; //T× m phÇn tö ¼Çu tiÂȘn cĂŁ trÞ lĂ­n hÂŹn hay b»ng x
while (A[j] > x) j--; //T× m phÇn tö ¼Çu tiÂȘn cĂŁ trÞ nhĂĄ hÂŹn hay b»ng x
if (i<=j) // §Êi chç A[i] víi A[j]
{ temp = A[i];
A[i] =A[j];
A[j] = temp;
i++ ; j--;
}
} while (i<=j);
KĂŒ thuËt lËp tr× nh 79
if (i<r) // phÇ n thĂž ba cĂŁ tĂ” 2 phÇ n tö trĂ« lÂȘ n
{ // §­a v” o Stack chØ sĂš ¼Ç u v” chØ sĂš cuĂši cña phÇ n thĂž ba
sp++;
Stack[sp].q=i;
Stack[sp].r=r;
}
r = j ; // ChuÈ n bÞ vÞ trÝ ¼Ó ph© n hoÂč ch phÇ n cĂŁ giž trÞ nhĂĄ hÂŹn chĂšt
} while (q< r);
} while (sp!=-1); // Ket thuc khi Stack rong
}
int Nhap_day_so (int A[])
/* TÂč o d∙ y n sĂš ngÉ u nhiÂȘ n tĂ” 0 ¼Õ n 9999 Ÿ­a v” o m¶ ng A */
{ int i,n;
printf("nSo phan tu cua mang :"); scanf("%d",&n);
randomize(); // dïng <time.h> v” <stdlib.h>
for (i=0; i<n; i++)
A[i]= rand() % 10000; // Phžt sinh cžc sĂš ngÉ u nhiÂȘ n tĂ” 0 ¼Õ n 9999
return n;
}
void Liet_ke (char str[],int A[], int n)
{ int i;
printf("n%sn",str);
for (i=0; i<n; i++)
printf ("%5d",A[i]);
getch();
}
void 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. Gi¶i thuËt Quick Sort ¼Ö qui: vÒ cÂŹ chÕ thĂčc hiÖ n th× cĂČng giĂšng nh­
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh
Ki thuat lap_trinh

More Related Content

What's hot

Chuong 14 16
Chuong 14   16Chuong 14   16
Chuong 14 16Vcoi Vit
 
Baigiang mtb chuong2
Baigiang mtb chuong2Baigiang mtb chuong2
Baigiang mtb chuong2luuguxd
 
10 chuyĂȘn đề hĂŹnh học tổ hợp
10 chuyĂȘn đề hĂŹnh học tổ hợp10 chuyĂȘn đề hĂŹnh học tổ hợp
10 chuyĂȘn đề hĂŹnh học tổ hợpTháșż Giới Tinh Hoa
 
Download here
Download hereDownload here
Download hereOFFSHORE VN
 
Download here
Download hereDownload here
Download hereOFFSHORE VN
 
Cac meo vat hay
Cac meo vat hayCac meo vat hay
Cac meo vat hayminhsangxd07
 
Chuong 3 he thong mang luoi cong trinh cong cong
Chuong 3   he thong mang luoi cong trinh cong congChuong 3   he thong mang luoi cong trinh cong cong
Chuong 3 he thong mang luoi cong trinh cong congHi House
 
đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo đinh máșĄnh cường[bookbooming.com]
đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo   đinh máșĄnh cường[bookbooming.com]đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo   đinh máșĄnh cường[bookbooming.com]
đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo đinh máșĄnh cường[bookbooming.com]bookbooming1
 
Noi dung on tap cohocdat
Noi dung on tap cohocdatNoi dung on tap cohocdat
Noi dung on tap cohocdatvudat11111
 

What's hot (14)

C8 trinh bay_ban_do
C8 trinh bay_ban_doC8 trinh bay_ban_do
C8 trinh bay_ban_do
 
Doi dieu ve pt-hpt
Doi dieu ve pt-hptDoi dieu ve pt-hpt
Doi dieu ve pt-hpt
 
Quy dinh ve datn 2482
Quy dinh ve datn 2482Quy dinh ve datn 2482
Quy dinh ve datn 2482
 
Chuong 14 16
Chuong 14   16Chuong 14   16
Chuong 14 16
 
Baigiang mtb chuong2
Baigiang mtb chuong2Baigiang mtb chuong2
Baigiang mtb chuong2
 
10 chuyĂȘn đề hĂŹnh học tổ hợp
10 chuyĂȘn đề hĂŹnh học tổ hợp10 chuyĂȘn đề hĂŹnh học tổ hợp
10 chuyĂȘn đề hĂŹnh học tổ hợp
 
Download here
Download hereDownload here
Download here
 
Download here
Download hereDownload here
Download here
 
Cac meo vat hay
Cac meo vat hayCac meo vat hay
Cac meo vat hay
 
Chuong 3 he thong mang luoi cong trinh cong cong
Chuong 3   he thong mang luoi cong trinh cong congChuong 3   he thong mang luoi cong trinh cong cong
Chuong 3 he thong mang luoi cong trinh cong cong
 
C13 tao ban_do_chu_de
C13 tao ban_do_chu_deC13 tao ban_do_chu_de
C13 tao ban_do_chu_de
 
đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo đinh máșĄnh cường[bookbooming.com]
đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo   đinh máșĄnh cường[bookbooming.com]đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo   đinh máșĄnh cường[bookbooming.com]
đHqg.giĂĄo trĂŹnh trĂ­ tuệ nhĂąn táșĄo đinh máșĄnh cường[bookbooming.com]
 
Noi dung on tap cohocdat
Noi dung on tap cohocdatNoi dung on tap cohocdat
Noi dung on tap cohocdat
 
Hdld sua
Hdld suaHdld sua
Hdld sua
 

Viewers also liked

BĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnh
BĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnhBĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnh
BĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnhChĂąu Tráș§n
 
BÀI 03: GIỚI THIỆU VỀ MÁY TÍNH
BÀI 03: GIỚI THIỆU VỀ MÁY TÍNHBÀI 03: GIỚI THIỆU VỀ MÁY TÍNH
BÀI 03: GIỚI THIỆU VỀ MÁY TÍNHTráș§n NhĂąn
 
Bai tap mon_lap_trinh_hop_ngu
Bai tap mon_lap_trinh_hop_nguBai tap mon_lap_trinh_hop_ngu
Bai tap mon_lap_trinh_hop_ngulakyos
 
BĂ i 3_Giới thiệu về mĂĄy tĂ­nh
BĂ i 3_Giới thiệu về mĂĄy tĂ­nhBĂ i 3_Giới thiệu về mĂĄy tĂ­nh
BĂ i 3_Giới thiệu về mĂĄy tĂ­nhlinhhuynhk37sptin
 
BĂ i 3: Giới thiệu về mĂĄy tĂ­nh
BĂ i 3: Giới thiệu về mĂĄy tĂ­nhBĂ i 3: Giới thiệu về mĂĄy tĂ­nh
BĂ i 3: Giới thiệu về mĂĄy tĂ­nhChĂąu Tráș§n
 
BĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnh
BĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnhBĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnh
BĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnhChĂąu Tráș§n
 

Viewers also liked (7)

BĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnh
BĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnhBĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnh
BĂ i 3: Cáș„u trĂșc chÆ°ÆĄng trĂŹnh
 
Chuong3 láș­p trĂŹnh hợp ngữ
Chuong3 láș­p trĂŹnh hợp ngữChuong3 láș­p trĂŹnh hợp ngữ
Chuong3 láș­p trĂŹnh hợp ngữ
 
BÀI 03: GIỚI THIỆU VỀ MÁY TÍNH
BÀI 03: GIỚI THIỆU VỀ MÁY TÍNHBÀI 03: GIỚI THIỆU VỀ MÁY TÍNH
BÀI 03: GIỚI THIỆU VỀ MÁY TÍNH
 
Bai tap mon_lap_trinh_hop_ngu
Bai tap mon_lap_trinh_hop_nguBai tap mon_lap_trinh_hop_ngu
Bai tap mon_lap_trinh_hop_ngu
 
BĂ i 3_Giới thiệu về mĂĄy tĂ­nh
BĂ i 3_Giới thiệu về mĂĄy tĂ­nhBĂ i 3_Giới thiệu về mĂĄy tĂ­nh
BĂ i 3_Giới thiệu về mĂĄy tĂ­nh
 
BĂ i 3: Giới thiệu về mĂĄy tĂ­nh
BĂ i 3: Giới thiệu về mĂĄy tĂ­nhBĂ i 3: Giới thiệu về mĂĄy tĂ­nh
BĂ i 3: Giới thiệu về mĂĄy tĂ­nh
 
BĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnh
BĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnhBĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnh
BĂ i 1: KhĂĄi niệm láș­p trĂŹnh vĂ  ngĂŽn ngữ láș­p trĂŹnh
 

Similar to Ki thuat lap_trinh

Ky thuat lap_trinh
Ky thuat lap_trinhKy thuat lap_trinh
Ky thuat lap_trinhtienhien110293
 
GiĂĄo trĂŹnh láș­p trĂŹnh C
GiĂĄo trĂŹnh láș­p trĂŹnh CGiĂĄo trĂŹnh láș­p trĂŹnh C
GiĂĄo trĂŹnh láș­p trĂŹnh CHitany Paly
 
XĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ng
XĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ngXĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ng
XĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ngTÀI LIỆU NGÀNH MAY
 
hệ thống cĂŽng thức trong cÆĄ học đáș„t
hệ thống cĂŽng thức trong cÆĄ học đáș„thệ thống cĂŽng thức trong cÆĄ học đáș„t
hệ thống cĂŽng thức trong cÆĄ học đáș„tAnh Anh
 
tĂłm táșŻt ccđ.pdf
tĂłm táșŻt ccđ.pdftĂłm táșŻt ccđ.pdf
tĂłm táșŻt ccđ.pdfAnhcNguyn43
 
Phan hai vl12
Phan hai vl12Phan hai vl12
Phan hai vl12hoangtv
 
Chuong 5 excel
Chuong 5 excelChuong 5 excel
Chuong 5 exceldxdd1
 
Chuong 1 khai niem ve nen mong
Chuong 1 khai niem ve nen mongChuong 1 khai niem ve nen mong
Chuong 1 khai niem ve nen mongHoĂ ng Gia
 
NguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnh
NguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnhNguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnh
NguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnhnataliej4
 
hoccokhi.vn CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Trang
hoccokhi.vn  CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Tranghoccokhi.vn  CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Trang
hoccokhi.vn CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 TrangHọc CÆĄ KhĂ­
 
Huong dan su dung billing 5.2
Huong dan su dung billing 5.2Huong dan su dung billing 5.2
Huong dan su dung billing 5.2thunguyet88
 
Hướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżt
Hướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżtHướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżt
Hướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżtKe Toan Ha Noi
 

Similar to Ki thuat lap_trinh (20)

Ky thuat lap_trinh
Ky thuat lap_trinhKy thuat lap_trinh
Ky thuat lap_trinh
 
Ká»č thuáș­t láș­p trĂŹnh.
Ká»č thuáș­t láș­p trĂŹnh.Ká»č thuáș­t láș­p trĂŹnh.
Ká»č thuáș­t láș­p trĂŹnh.
 
GiĂĄo trĂŹnh láș­p trĂŹnh C
GiĂĄo trĂŹnh láș­p trĂŹnh CGiĂĄo trĂŹnh láș­p trĂŹnh C
GiĂĄo trĂŹnh láș­p trĂŹnh C
 
Bt duc
Bt ducBt duc
Bt duc
 
Bai02@
Bai02@Bai02@
Bai02@
 
Hd btd-ccd
Hd btd-ccdHd btd-ccd
Hd btd-ccd
 
XĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ng
XĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ngXĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ng
XĂąy dá»±ng tĂ i liệu ká»č thuáș­t cho sáșŁn pháș©m ĂĄo jacket nam 2 lớp theo Ä‘ÆĄn hĂ ng
 
hệ thống cĂŽng thức trong cÆĄ học đáș„t
hệ thống cĂŽng thức trong cÆĄ học đáș„thệ thống cĂŽng thức trong cÆĄ học đáș„t
hệ thống cĂŽng thức trong cÆĄ học đáș„t
 
tĂłm táșŻt ccđ.pdf
tĂłm táșŻt ccđ.pdftĂłm táșŻt ccđ.pdf
tĂłm táșŻt ccđ.pdf
 
huy
huyhuy
huy
 
Phan hai vl12
Phan hai vl12Phan hai vl12
Phan hai vl12
 
Chuong 5 excel
Chuong 5 excelChuong 5 excel
Chuong 5 excel
 
Chuong 1 khai niem ve nen mong
Chuong 1 khai niem ve nen mongChuong 1 khai niem ve nen mong
Chuong 1 khai niem ve nen mong
 
Giao Trinh Thiet Ke Web
Giao Trinh Thiet Ke WebGiao Trinh Thiet Ke Web
Giao Trinh Thiet Ke Web
 
Bqt.ppt.0035
Bqt.ppt.0035Bqt.ppt.0035
Bqt.ppt.0035
 
NguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnh
NguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnhNguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnh
NguyĂȘn lĂœ thiáșżt káșż Kiáșżn trĂșc CĂŽng nghiệp Pháș§n 05 KTS. DÆ°ÆĄng Trọng BĂŹnh
 
hoccokhi.vn CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Trang
hoccokhi.vn  CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Tranghoccokhi.vn  CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Trang
hoccokhi.vn CĂŽng Nghệ Sá»­a Chữa MĂĄy CĂŽng CỄ - LĂȘ Văn Hiáșżu, 68 Trang
 
Huong dan su dung billing 5.2
Huong dan su dung billing 5.2Huong dan su dung billing 5.2
Huong dan su dung billing 5.2
 
Phu dao hs y k lĂ­p 5
Phu dao hs y k lĂ­p 5Phu dao hs y k lĂ­p 5
Phu dao hs y k lĂ­p 5
 
Hướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżt
Hướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżtHướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżt
Hướng dáș«n sá»­ dỄng tin học văn phĂČng ráș„t chi tiáșżt
 

Ki thuat lap_trinh

  • 1. KĂŒ thuËt lËp tr× nh 1 CHŠ„NG i §ÂčI CŠ„NG VÒ LËP TR×NH I. Khži niÖm thuËt tožn: I.1. Khži niÖ m: ThuË t tožn l” tË p hĂźp cžc quy tŸ c cĂŁ logic nh» m gi¶i mĂ©t lĂ­p b”i tožn n”o Ÿã ¼Ó Ÿ­ßc mĂ©t kÕ t qu¶ xžc ¼Þnh. I.2. Cžc tÝ nh chÊt ¼Æc tr­ng cña thuËt tožn : I.2.1. TÝ nh tĂŠng qužt : ThuËt tožn Ÿ­ßc lËp kh«ng ph¶i chØ ¼Ó gi¶i mĂ©t b”i tožn cĂŽ thÓ m” th«im” cßn ph¶ i gi¶ i Ÿ­ßc mĂ©t lĂ­p cžc b” i tožn cĂŁ dÂč ng t­ng tĂč. I.2.2. TÝ nh giĂ­i hÂčn : ThuËt tožn gi¶i mĂ©t b”i tožn ph¶i Ÿ­ßc thĂčc hiÖn qua mĂ©t sĂš giĂ­i hÂčn cžc thao tžc ¼Ó ÂźÂč t ¼Õ n kÕ t qu¶ . I.2.3. TÝ nh duy nhÊt : To”n bĂ© quž tr× nh biÕn ŸÊi, cĂČng nh­ trËt tĂč thĂčc hiÖn ph¶i Ÿ­ßc xžc ¼Þnh v” l” duy nhÊ t. Nh­ vË y khi dĂŻng thuË t tožn cĂŻng mĂ©t dĂ· liÖu ban ¼Çu ph¶i cho cĂŻng mĂ©t kÕ t qu¶ . I.3. Ph©n loÂči: Theo cÊ u trĂłc, ta cĂŁ thÓ ph© n th” nh ba loÂč i thuË t tožn cÂŹ b¶ n sau : - ThuË t tožn kh«ng ph© n nhžnh. - ThuË t tožn cĂŁ ph© n nhžnh. - ThuË t tožn theo chu tr× nh cĂŁ b­íc lÆ p xžc ¼Þnh v” cĂŁ b­íc lÆ p kh«ng xžc ¼Þnh. II. M« t¶ thuËt tožn b»ng l­u ŸÄ : II.1. L­u ŸÄ : L­u ŸÄ l” mĂ©t dÂčng ŸÄ thÞ dĂŻng ¼Ó m« t¶ quž tr× nh tÝ nh tožn mĂ©t cžch cĂŁ hÖ thĂšng. Ng­ĂȘi ta th­ĂȘng thÓ hiÖ n thuË t tožn b» ng l­u ŸÄ. II.2. Cžc kĂœ hiÖ u trÂȘ n l­u ŸÄ : TÂȘ n khĂši KĂœ hiÖ u Ăœ nghÜ a KhĂši mĂ« ¼Ç u hoÆ c kÕ t thĂłc DĂŻng mĂ« ¼Ç u hoÆ c kÕ t thĂłc ch­ng tr× nh KhĂši v” o ra §­a sĂš liÖ u v” o hoÆ c in kÕ t qu¶
  • 2. KĂŒ thuËt lËp tr× nh 2 KhĂši tÝ nh tožn BiÓ u diÔ n cžc c«ng thĂžc tÝ nh tožn v” thay ŸÊi giž trÞ cña cžc biÕ n KhĂši ÂźiÒ u kiÖ n DĂŻng ¼Ó ph© n nhžnh ch­ng tr× nh Ch­ng tr× nh con DĂŻng ¼Ó gĂ€i ch­ng tr× nh con MĂČi tÂȘ n ChØ h­íng truyÒ n th«ng tin, liÂȘ n hÖ cžc khĂši II.3. MĂ©t sĂš vÝ dĂŽ biÓ u diÔ n thuËt tožn b»ng l­u ŸÄ II.3.1. ThuËt tožn kh«ng ph©n nhžnh: VÝ dĂŽ 1: TÝ nh A = x2 + y2 Begin NhaĂ€p (x,y) A = x2 + y2 XuaĂĄt (A) End VÝ dĂŽ 2 : TÝ nh yx CByAx S 22 + ++ = ; biÕ t A,B,C,x,y Begin NhaĂ€p (A, B, C, x,y) S = (Ax + By + C) / SQRT (x*x + y*y) XuaĂĄt S End
  • 3. KĂŒ thuËt lËp tr× nh 3 II.3.2. ThuËt tožn cĂŁ ph©n nhžnh: VÝ dĂŽ 1: T× m giž trÞ max cña ba sĂš thĂčc a,b,c Begin NhaĂ€p (a, b, c) Max = a XuaĂĄt (Max) End a > b Max < c Max = c S S Max = b Ñ Ñ VÝ dĂŽ 2: Gi¶ i ph­ng tr× nh bË c nhÊ t Ax+B =0 vĂ­i cžc nghiÖ m thĂčc. Begin NhaĂ€p (a, b) XuaĂĄt (‘PTVÑ’) End a = 0 S S XuaĂĄt (-b/a) b = 0 XuaĂĄt (‘PTVN’) Ñ Ñ
  • 4. KĂŒ thuËt lËp tr× nh 4 VÝ dĂŽ 3 : Gi¶ i ph­ng tr× nh bË c hai Ax2 +Bx+C =0 vĂ­i cžc nghiÖ m thĂčc. Begin NhaĂ€p (a, b, c) XuaĂĄt (‘X1= ’,(-b + SQRT(Delta)) / (2*a)) XuaĂĄt (‘X2= ’,(-b - SQRT(Delta)) / (2*a)) End a = 0 Ñ Ñ PTB1 (b, c) Delta < 0 XuaĂĄt (‘PTVN’) S S Delta = b*b - 4*a*c Ñ Delta = 0 XuaĂĄt (-b / (2*a)) S II.3.3. ThuËt tožn cĂŁ chu tr× nh: ThuË t tožn cĂŁ chu tr× nh vĂ­i cžc b­íc lÆp xžc ¼Þnh th­ĂȘng Ÿ­ßc thÓ hiÖn b» ng l­u ŸÄ sau : i = giaĂč trĂČ ban ñaĂ u LeĂ€nh S; TaĂȘng i i <= n S Ñ vĂ­i n l” giž trÞ kÕ t thĂłc.
  • 5. KĂŒ thuËt lËp tr× nh 5 VÝ dĂŽ 4:TÝ nhS= i i n x= ∑ 1 , vĂ­i cžc xi do ta nhË p v” o. Begin NhaĂ€p (n) i = 1 S = 0 NhaĂ€p (xi) End i = i+1 S = S+xi i <= n XuaĂĄt (S) S Ñ III. CžC NG«N NGĂ· LËP TR×NH & CH­NG TR×NH DÞCH: III.1. Ng«n ngĂ· lËp tr× nh: III.1.1. GiĂ­i thiÖu: Con ng­ĂȘi muĂšn giao tiÕp vĂ­i mžy tÝ nh ph¶i th«ng qua ng«n ngĂ·. Con ng­ĂȘi muĂšn mžy tÝ nh thĂčc hiÖn c«ng viÖc, ph¶i viÕt cžc yÂȘu cÇu Ÿ­a cho mžy b»ng ng«n ngĂ· mžy hiÓu Ÿ­ßc. ViÖc viÕt cžc yÂȘu cÇu ta gĂ€i l” lËp tr× nh (programming). Ng«n ngĂ· dĂŻng¼Ó lËptr× nhŸ­ßcgĂ€il” ng«nngĂ· lËptr× nh. NÕu ng«n ngĂ· lËp tr× nh gÇn vĂ­i vÊn ¼Ò cÇn gi¶i quyÕt, gÇn vĂ­i ng«n ngĂ· tĂč nhiÂȘn th× viÖc lËp tr× nh sÏ Ÿn gi¶nhÂŹnnhiÒu.NhĂ·ngng«nngĂ· lËptr× nhcĂŁ tÝ nh chÊt nh­ trÂȘn Ÿ­ßc gĂ€i l” ng«n ngĂ· cÊp cao.Nh­ngmžytÝ nhchØ hiÓuŸ­ßcng«n ngĂ· riÂȘ ng cña m× nh, Ÿã l” cžc chuçi sĂš 0 vĂ­i 1 v” nh­ vË y rĂą r”ng l” khĂŁ khšn cho lË p tr× nh viÂȘ n, v× nĂŁ kh«ng gÇ n gĂČi vĂ­i con ng­ĂȘi. HiÖ n tÂč i, ng«n ngĂ· lË p tr× nh Ÿ­ßc chia ra l” m cžc loÂč i sau: III.1.2. Ph©n loÂči ng«n ngĂ· lËp tr× nh: - Ng«n ngĂ· mžy (machine language)
  • 6. KĂŒ thuËt lËp tr× nh 6 - HĂźp ngĂ· (assembly language) - Ng«n ngĂ· cÊ p cao (higher-level language) Do mžy tÝ nh chØ hiÓu Ÿ­ßc ng«n ngĂ· mžy, cho nÂȘn mĂ©t ch­ng tr× nh viÕt trong ng«n ngĂ· cÊ p cao ph¶ i Ÿ­ßc biÂȘ n dÞch sang ng«n ngĂ· mžy. C«ng cĂŽ thĂčc hiÖ n viÖ c biÂȘ n dÞch Ÿã Ÿ­ßc gĂ€i l” ch­ng tr× nh dÞch. III.2. Ch­ng tr× nh dÞch: Ch­ng tr× nh dÞch Ÿ­ßc chia ra l”m 2 loÂči : tr× nh biÂȘn dÞch (compiler) v” tr× nh th«ng dÞch (interpreter) III.2.1. Tr× nh biÂȘn dÞch: l” viÖc chuyÓn mĂ©t ch­ng tr× nh trong ng«n ngĂ· cÊ p cao n” o Ÿã (ch­ng tr× nh nguĂ„n) sang ng«n ngĂ· mžy (ch­ng tr× nh ¼Ý ch). - ThĂȘi gian chuyÓn mĂ©t ch­ng tr× nh nguĂ„n sang ch­ng tr× nh ¼Ý ch Ÿ­ßc gĂ€i l” thĂȘi gian dÞch. - ThĂȘi gian m” ch­ng tr× nh ¼Ý ch thĂčc thi Ÿ­ßc gĂ€i l” thĂȘi gian thĂčc thi. Nh­ vËy, ch­ng tr× nh nguĂ„n v” dĂ· liÖu ¼Ó ch­ng tr× nh thĂčc thi Ÿ­ßc xö lĂœ trong cžc thĂȘi ÂźiÓ m khžc nhau, Ÿ­ßc gĂ€i l” thĂȘi gian dÞch (compile time) v” thĂȘi gian thĂčc thi (run-time) ChöÎng trĂŹnh nguoĂ n TrĂŹnh bieĂąn dĂČch ChöÎng trĂŹnh ñích MaĂčy tĂ­nh thöïc hieĂ€n KeĂĄt quaĂ» DöÔ lieĂ€u H× nh I.1. Ch­ng tr× nh thĂčc thi theo cÂŹ chÕ dÞch cña tr× nh biÂȘ n dÞch III.2.2. Tr× nh th«ng dÞch: quž tr× nh dÞch v” thĂčc thi x¶ y ra cĂŻng 1 thĂȘi gian, dÞch ¼Õ n Ÿ© u thi h” nh lÖ nh ¼Õ n Ÿã. ChöÎng trĂŹnh nguoĂ n ChöÎng trĂŹnh thoĂąng dĂČch KeĂĄt quaĂ» DöÔ lieĂ€u H× nh I.2. Ch­ng tr× nh thĂčc thi theo cÂŹ chÕ dÞch cña tr× nh th«ng dÞch
  • 7. KĂŒ thuËt lËp tr× nh 7 CH­NG 2 L”M QUEN VĂ­I NG«N NGĂ· C * GiĂ­i thiÖu ng«n ngĂ· C Ng«n ngĂ· C do Dennis Ritchie l” ng­ĂȘi ¼Çu tiÂȘn ¼Ò xuÊt, ¼∙ thiÕt kÕ v” c”i ¼Æ t C trong m«i tr­ĂȘng UNIX. NĂŁ cĂŁ nguĂ„n gĂšc tĂ” ng«n ngĂ· BCPL do Martin Richards Ÿ­a ra v” o nš m 1967 v” ng«n ngĂ· B do Ken Thompson phžt triÓ n tĂ” ng«n ngĂ· BCPL nš m 1970 khi viÕ t hÖ ÂźiÒ u h” nh Unix. C l” ng«n ngĂ· lËp tr× nh Âźa dĂŽng, cÊp cao nh­ng lÂči cĂŁ kh¶ nšng thĂčc hiÖn cžc thao tžc nh­ cña ng«n ngĂ· Assembly. V× thÕ ng«n ngĂ· C nhanh chĂŁng Ÿ­ßc c”i ¼Æt, sö dĂŽng trÂȘnmžyvitÝ nhv” ¼∙ trĂ« th”nhmĂ©tc«ngcĂŽ lËptr× nhkhž mÂčnh, hiÖn nay Âźang cĂŁ khuynh h­íng trĂ« th”nh mĂ©t ng«n ngĂ· lËp tr× nh chÝ nh cho mžy vi tÝ nh trÂȘ n thÕ giĂ­i. * §Æc ÂźiÓ m ng«n ngĂ· C Ng«n ngĂ· C cĂŁ nhĂ·ng ¼Æ c ÂźiÓ m cÂŹ b¶ n sau : - TÝ nh c« ŸÀng (compact) : Ng«n ngĂ· C chØ cĂŁ 32 tĂ” khož chuÈn, 40 tožn tö chuÈ n m” hÇ u hÕ t Ÿ­ßc biÓ u diÓ n bĂ«i cžc d∙ y kĂœ tĂč ngŸ n gĂ€n. - TÝ nh cÊu trĂłc (structured) : Ng«n ngĂ· C cĂŁ mĂ©t tËp hĂźp cžc phžt biÓu lËp tr× nh cÊ u trĂłc nh­ phžt biÓ u quyÕ t ¼Þnh hoÆ c lÆ p. Do Ÿã, nĂŁ cho phÐp chĂłng ta viÕ t ch­ng tr× nh cĂŁ tĂŠ chĂžc v” dÓ hiÓ u. - TÝ nh t­ng thÝ ch (compactable) : Ng«n ngĂ· C cĂŁ bĂ© lÖ nh tiÒ n xö lĂœ v” cžc th­ viÖn chuÈn l”m cho cžc ch­ng tr× nh viÕt b»ng ng«n ngĂ· C cĂŁ thÓ t­ng thÝ ch khi chuyÓ n tĂ” mžy tÝ nh n” y sang mžy tÝ nh kiÓ u ho” n to” n khžc. - TÝ nh linh Ÿéng (flexible) : Ng«n ngĂ· C l” mĂ©t ng«n ngĂ· rÊt linh Ÿéng vÒ ngĂ· phžp, nĂŁ cĂŁ thÓ chÊp nhËn rÊt nhiÒu cžch thÓ hiÖn m” kh«ng cĂŁ Ă« ng«n ngĂ· khžc nh­ Pascal, nĂŁ giĂłp cho kÝ ch th­íc m∙ lÖ nh cĂŁ thÓ thu gĂ€n lÂči ¼Ó ch­ng tr× nh thĂčc thi nhanh chĂŁng hÂŹn. - BiÂȘ n dÞch : Ng«n ngĂ· C Ÿ­ßc biÂȘ n dÞch b» ng nhiÒ u b­íc v” cho phÐp biÂȘn dÞch nhiÒu tËp tin ch­ng tr× nh riÂȘng rÏ th”nh cžc tËp tin ŸÚi t­ßng (object) v” nĂši cžc ŸÚi t­ßng Ÿã lÂči vĂ­i nhau (link) th”nh mĂ©t ch­ng tr× nh thĂčc thi thĂšng nhÊ t. I. CžC KHžI NIÖM CÂŹ B¶N I.1. CÊu trĂłc cÂŹ b¶n cña mĂ©t ch­ng tr× nh C [tiÒ n xö lĂœ] [Cžc h” m] main()
  • 8. KĂŒ thuËt lËp tr× nh 8 { [khai bžo biÕ n;] [nhË p dĂ· liÖ u ;] [xö lĂœ ;] [xuÊ t ;] } VÝ dĂŽ : Ch­ng tr× nh hiÖ n trÂȘ n m” n h× nh c© u “Chao cac ban” void main() { printf(“Chao cac bann”); } MĂ©t v” i nhË n xÐt quan trĂ€ng : - Ch­ng tr× nh C bao giĂȘ cĂČng cĂŁ mĂ©t hay nhiÒ u h” m, trong Ÿã cĂŁ mĂ©t h” m chÝ nh bŸ t buĂ©c ph¶ i cĂŁ l” h” m main(). §© y chÝ nh l” h” m Ÿ­ßc thĂčc hiÖn ¼Ç u tiÂȘ n trong ch­ng tr× nh. - CÆ p dÊ u “{ } “ ¼Ó xžc ¼Þnh mĂ©t khĂši lÖ nh. - H” m printf(“ Chao cac ban n”) l” h” m chuÈ n cña C dĂŻng ¼Ó xuÊ t c© u th«ng bžo “Chao cac ban” ra m” n h× nh. KĂœ tĂč “n“ l” kĂœ tĂč ¼Æ c biÖ t dĂŻng ¼Ó xuĂšng dßng. - DÊ u “;” ¼Ó chÊ m dĂžt mĂ©t lÖ nh. - Ch­ng tr× nh C cĂŁ ph© n biÖ t chĂ· th­ĂȘng vĂ­i chĂ· hoa. §a sĂš cžc tĂ” khož cña C Ÿ­ßc viÕ t b» ng chĂ· th­ĂȘng, cßn mĂ©t sĂš Ý t Ÿ­ßc viÕ t b» ng chĂ· hoa m” ta ph¶ i tu© n thñ chÆ t chÏ , nÕ u kh«ng th× ch­ng tr× nh dÞch sÏ kh«ng hiÓ u. * MĂ©t v”i vÝ dĂŽ VÝ dĂŽ 1: In b¶ ng lĂČy thĂ”a 2 cña cžc sĂš nguyÂȘ n tĂ” 10 ¼Õ n 50 /* Ch­ng tr× nh in b× nh ph­ng cžc sĂš tĂ” 10 ¼Õ n 50*/ #include <stdio.h> void main() {int n; /*Khai bžo biÕ n n kiÓ u nguyÂȘ n */ n=10; /*Gžn n=10 */ while (n<=50) /*LÆ p tĂ” 10 ¼Õ n 50 b» ng while */ { printf(“%3d t %5dn”,n,n*n); /*in dÂč ng 5d l” d” nh 5 vÞ trÝ ¼Ó in n v” n2 */ n++; /* Tš ng n lÂȘ n 1 */ } /*HÕ t while*/ } /*HÕ t main*/
  • 9. KĂŒ thuËt lËp tr× nh 9 VÝ dĂŽ 2 : T­ng tĂč nh­ vÝ dĂŽ 1 nh­ng viÕ t cžch khžc : #include <stdio.h> #define max 50 /*TiÒ n xö lĂœ, ¼Þnh nghÜ a max =50*/ void main() { int n; /*Khai bžo biÕ n n kiÓ u nguyÂȘ n*/ for (n=10; n<=max; n++) /*LÆ p tĂ” 10 ¼Õ n 50 b» ng for*/ printf(“%3d t %5dn”,n,n*n);/*in n v” n2 dÂč ng 5d l” nš m chĂ· sĂš*/ } /*HÕ t main*/ VÝ dĂŽ 3 : Ch­ng tr× nh in lĂČy thĂ”a 2, 3, 4, 5; cĂŁ dĂŻng h”m ¼Ó tÝ nh lĂČy thĂ”a : #include <stdio.h> #define max 50 /*TiÒ n xö lĂœ, ¼Þnh nghÜ a max =50*/ float luythua(int n, int m) /*H” m luythua vĂ­i 2 th«ng sĂš*/ { float s=1; /*Khai bžo v” khĂ«i tÂč o biÕ n s*/ for ( ;m>0;m--) /*LÆ p gi¶ m dÇ n tĂ” m tĂ­i 1*/ s=s*n; return s; /*Tr¶ kÕ t qu¶ vÒ */ } void main() { int n,n2,n3,n4,n5; /*Khai bžo biÕ n kiÓ u nguyÂȘ n*/ for (n=10;n<=50;n++) /*LÆ p tĂ” 10 ¼Õ n 50 b» ng for*/ { n2= luythua(n,2); /*GĂ€i h” m luythua*/ n3= luythua(n,3); n4= luythua(n,4); n5= luythua(n,5); printf(“%3d t %5.2f t %5.2ft %5.2ft %5.2ft %5.2fn”, n,n2,n3,n4,n5); /*in n v” nm dÂč ng 5 chĂ· sĂš vĂ­i 2 sĂš lÎ */ } } /*HÕ t main*/ * H”m xuÊt chuÈn printf() CĂł phžp : printf(“chuçi-¼ÞnhdÂč ng”,thamso1,thamso2,...) Ăœ nghÜ a : H” m printf() sÏ xem xÐt chuçi-¼ÞnhdÂčng, lÊy giž trÞ cžc tham sĂš (nÕu cÇn) ¼Ó ¼Æ t v” o theo yÂȘ u cÇ u cña chuçi-¼ÞnhdÂč ng v” gĂ«i ra thiÕ t bÞ chuÈ n. Chuçi-¼ÞnhdÂč ng l” mĂ©t chuçi kĂœ tĂč, trong Ÿã cĂŁ nhĂ·ng kĂœ tĂč xuÊ t ra nguyÂȘn vÑn hoÆc xuÊt Ă« dÂčng ¼Æc biÖt, v” cĂŁ thÓ cĂŁ nhĂ·ng chuçi ÂźiÒu khiÓn cÇ n lÊ y giž trÞ cña cžc tham sĂš ¼Ó thay v” o Ÿã khi in ra.
  • 10. KĂŒ thuËt lËp tr× nh 10 - NhĂ·ng kĂœ tĂč ¼Æc biÖ t : KĂœ tĂč Tžc dĂŽng M· ASCII n XuĂšng h” ng mĂ­i 10 t Tab 9 b XĂŁa kĂœ tĂč bÂȘ n trži 8 r Con trĂĄ trĂ« vÒ ¼Ç u h” ng 13 f Sang trang 12 a Phžt tiÕ ng cßi 7 XuÊ t dÊ u chÐo ng­ßc 92 ’ XuÊ t dÊ u nhžy Ÿn ‘ 39 ’’ XuÊ t dÊ u nhžy kÐp “ 34 xdd XuÊt kĂœ tĂč cĂŁ m∙ ASCII dÂčng Hex l” dd ddd XuÊ t kĂœ tĂč cĂŁ m∙ ASCII dÂč ng Dec l” ddd 0 KĂœ tĂč NULL 0 - Chuçi ¼Þnh dÂčng : % [ flag][width][.prec][FïŁŠNïŁŠhïŁŠl] type Type : ¼Þnh kiÓ u cña tham sĂš theo sau chuçi-¼ÞnhdÂč ng ¼Ó lÊ y giž trÞ ra Type Ăœ nghÜ a d,i SĂš nguyÂȘ n cÂŹ sĂš 10 u SĂš nguyÂȘ n cÂŹ sĂš 10 kh«ng dÊ u o SĂš nguyÂȘ n cÂŹ sĂš 8 x SĂš nguyÂȘ n cÂŹ sĂš 16, chĂ· th­ĂȘng(a,b,...,f) X SĂš nguyÂȘ n cÂŹ sĂš 16, chĂ· in (A,B,...,F) f SĂš thĂčc dÂč ng [-]dddd.ddd... e SĂš thĂčc dÂč ng [-]d.ddd e[+/-]ddd E SĂš thĂčc dÂč ng [-]d.ddd E[+/-]ddd g,G SĂš thĂčc dÂč ng e(E) hay f tĂŻy theo Ÿé chÝ nh xžc c KĂœ tĂč s Chuçi kĂœ tĂč tË n cĂŻng b» ng ‘0’ % DÊ u % cÇ n in
  • 11. KĂŒ thuËt lËp tr× nh 11 Flag : DÂč ng ÂźiÒ u chØ nh Flag Ăœ nghÜ a nÕ u kh«ng cĂŁ in dĂ· liÖ u ra vĂ­i canh ph¶ i - in dĂ· liÖ u ra vĂ­i canh trži + Lu«n bŸ t ¼Ç u sĂš b» ng + hay - # in ra tĂŻy theo type, nÕ u: 0 : ChÌ n thÂȘ m 0 ŸÞng tr­íc giž trÞ >0 x,X : ChÌ n thÂȘ m 0x hay 0X ŸÞng tr­íc sĂš n” y e,E,f : Lu«n lu«n cĂŁ dÊ u chÊ m thË p ph© n G,g : Nh­ trÂȘ n nh­ng kh«ng cĂŁ sĂš 0 Âźi sau Width : ¼Þnh kÝ ch th­íc in ra Width Ăœ nghÜ a n D”nh Ý t nhÊt n kĂœ tĂč , ÂźiÒn kho¶ng trŸng cžc kĂœ tĂč cßn trĂšng 0n D” nh Ý t nhÊ t n kĂœ tĂč , ÂźiÒ n sĂš 0 cžc kĂœ tĂč cßn trĂšng * SĂš kĂœ tĂč Ý t nhÊ t cÇ n in n» m Ă« tham sĂš t­ng Ăžng Prec : ¼Þnh kÝ ch th­íc phÇ n lÏ in ra Prec Ăœ nghÜ a kh«ng cĂŁ Ÿé chÝ nh xžc nh­ b× nh th­ĂȘng 0 d,i,o,u,x Ÿé chÝ nh xžc nh­ cĂČ e,E,f Kh«ng cĂŁ dÊ u chÊ m thË p ph© n n nhiÒ u nhÊ t l” n kĂœ tĂč (sĂš) * SĂš kĂœ tĂč Ý t nhÊ t cÇ n in n» m Ă« tham sĂš t­ng Ăžng Cžc chĂ· bĂŠ sung : F Tham sĂš l” con trĂĄ xa XXXX:YYYY N Tham sĂš l” con trĂĄ gÇ n YYYY h Tham sĂš l” short int l Tham sĂš l” long int (d,i,o,u,x,X) double (e,E,f,g,G) VÝ dĂŽ 1: char c=‘A’; char s[]=“Blue moon!” ;
  • 12. KĂŒ thuËt lËp tr× nh 12 DÂčng Th«ng sĂš t­ng Ăžng XuÊt NhËn xÐt %c c “A” Ÿé rĂ©ng 1 %2c c “ A” Ÿé rĂ©ng 2, canh ph¶ i %-3c c “A “ Ÿé rĂ©ng 3, canh trži %d c “65” M∙ ASCII cña ‘A’ %s s “Blue moon!” Ÿé rĂ©ng 10 %3s s “Blue moon!” NhiÒu kĂœ tĂč hÂŹn cÇn thiÕt %.6s s “Blue m” ChÝ nh xžc 6 kĂœ tĂč %-11.8s s “Blue moo “ ChÝ nh xžc 8, canh trži VÝ dĂŽ 2: int i = 123; float x = 0.123456789; DÂčng Th«ng sĂš t­ng Ăžng XuÊt NhËn xÐt %d i “123” Ÿé rĂ©ng 3 %05d i “00123” ThÂȘ m 2 sĂš 0 %7o” i “ 123” HÖ 8, canh ph¶ i %-9x i “7b “ HÖ 16, canh trži %c i “{“ KĂœ tĂč cĂŁ m∙ ASCII 123 %-#9x i “0x7b “ HÖ 16, canh trži %10.5f x “ 0.12346” Ÿé rĂ©ng 10, cĂŁ 5 chĂ· sĂš thË p ph© n %-12.5e x “1.23457e-01 “ Canh trži, in ra d­íi dÂč ng khoa hĂ€c VÝ dĂŽ 3: ViÕ t ch­ng tr× nh in h× nh chĂ· nhË t kÐp b» ng cžc kĂœ tĂč ASCII C9 CD BB C8 CD BC void main() { printf(“nxC9xCDxBB”); printf(“nxC8xCDxBCn); }
  • 13. KĂŒ thuËt lËp tr× nh 13 I.2. KiÓ u dĂ· liÖ u cÂŹ b¶n I.2.1. ¼Þnh nghÜ a: KiÓ u dĂ· liÖ u cÂŹ b¶ n l” kiÓ u dĂ· liÖ u cĂŁ giž trÞ Ÿn, kh«ng ph©n chia Ÿ­ßc nĂ·a nh­ sĂš, kĂœ tĂč I.2.2. Ph©n loÂči: TÂȘ n kiÓ u Ăœ nghÜ a KÝ ch th­íc PhÂčm vi char KĂœ tĂč 1 byte -128→ 127 unsigned char KĂœ tĂč kh«ng dÊ u 1 byte 0→255 unsigned short SĂš nguyÂȘn ngŸn kh«ngdÊu 2 bytes 0→65535 enum SĂš nguyÂȘ n cĂŁ dÊ u 2 bytes -32768→32767 short int SĂš nguyÂȘ n cĂŁ dÊ u 2 bytes -32768→32767 int SĂš nguyÂȘ n cĂŁ dÊ u 2 bytes -32768→32767 unsigned int SĂš nguyÂȘ n kh«ng dÊ u 2 bytes 0 → 65535 long SĂš nguyÂȘ n d” i cĂŁ dÊ u 4 bytes -2147483648 → 2147483647 unsigned long SĂš nguyÂȘ n d” i kh«ng dÊ u 4 bytes 0→4294967295 float SĂš thĂčc Ÿé chÝ nh xžc Ÿn 4 bytes 3.4 E-38→3.4 E+38 double SĂš thĂčc Ÿé chÝ nh xžc kÐp 8 bytes 1.7 E-308 → 1.7 E+308 long double SĂš thĂčc Ÿé chÝ nh xžc hÂŹn double 10 bytes 3.4 E-4932 → 1.1 E+4932 ChĂł Ăœ : 1. Ng«n ngĂ· C kh«ng cĂŁ kiÓ u logic (boolean nh­ Pascal) m” quan niÖ m 0 l” false ; Khžc 0 l” true 2. Ng«n ngĂ· C kh«ng cĂŁ kiÓ u chuçi nh­ kiÓ u string trong Pascal 3. Cžc kiÓ u ŸÄng nhÊ t: 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ĂŒ thuËt lËp tr× nh 14 I.3. BiÕ n I.3.1. TÂȘn biÕn : TÂȘn biÕn l” mĂ©t chuçi kĂœ tĂč bŸt ¼Çu b»ng kĂœ tĂč chĂ·, kĂœ tĂč kÕ tiÕp l” kĂœ tĂč chĂ· (dÊu gÂčch d­íi “_” Ÿ­ßc xem l” kĂœ tĂč chĂ·) hoÆc sĂš v” kh«ng Ÿ­ßc trĂŻng vĂ­i cžc tĂ” khĂŁa cña C. ChĂł Ăœ : - Ng«n ngĂ· C ph© n biÖ t chĂ· th­ĂȘng vĂ­i chĂ· hoa nÂȘ n biÕ n chĂ· th­ĂȘng vĂ­i chĂ· hoa l” khžc nhau. VÝ dĂŽ : Bien_1 _bien2 l” hĂźp lÖ bi&en 2a a b l” kh«ng hĂźp lÖ - Ng«n ngĂ· C chØ ph© n biÖ t hai tÂȘ n hĂźp lÖ vĂ­i nhau b» ng n kĂœ tĂč ¼Ç u tiÂȘ n cña chĂłng. Th«ng th­ĂȘng n=8, nh­ng hiÖn nay nhiÒu ch­ng tr× nh dÞch cho phÐp n=32, nh­ Turbo C cho phÐp thay ŸÊi sĂš kĂœ tĂč ph© n biÖ t tĂ” 8-32) VÝ dĂŽ :Hai biÕ n sau bÞ xem l” cĂŻng tÂȘ n bien_ten_dai_hon_32_ky_tu_dau_tien_1 bien_ten_dai_hon_32_ky_tu_dau_tien_2 I.3.2. Khai bžo biÕ n Cžc biÕ n ph¶ i Ÿ­ßc khai bžo tr­íc khi sö dĂŽng nh» m giĂłp cho ch­ng tr× nh dÞch cĂŁ thÓ xö lĂœ chĂłng. Khai bžo biÕ n cĂŁ dÂč ng : KiÓ udĂ·liÖ u tÂȘ nbiÕ n1 [,tenbiÕ n2 ...] ; VÝ dĂŽ: int a,b,c; float x,y,delta; char c; * Khai bžo v” khĂ«i tÂč o biÕ n: KiÓ u dĂ· liÖ u tÂȘ nbiÕ n = gižtrÞ ; I.3.3. H”m nhËp dĂ· liÖ u chuÈn a) H”m scanf() CĂł phžp: scanf(“chuçi-¼ÞnhdÂčng“,ÂźiÂčchØ thamsĂš1, ÂźiÂčchØ thamsĂš2,...) - Chuçi-¼ÞnhdÂč ng cña scanf() gĂ„m cĂŁ ba loÂč i kĂœ tĂč : + Chuçi ÂźiÒ u khiÓ n + KĂœ tĂč trŸ ng + KĂœ tĂč khžc trŸ ng ! Chuçi ÂźiÒ u khiÓ n cĂŁ dÂč ng : %[width][h/l] type
  • 15. KĂŒ thuËt lËp tr× nh 15 VĂ­i type: xžc ¼Þnh kiÓ u cña biÕ n ¼Þa chØ tham sĂš sÏ nhË n giž trÞ nhË p v” o Type Ăœ nghÜ a d,i SĂš nguyÂȘ n cÂŹ sĂš 10 (int) o SĂš nguyÂȘ n cÂŹ sĂš 8 (int) u SĂš nguyÂȘ n cÂŹ sĂš 10 kh«ng dÊ u (unsigned) x SĂš nguyÂȘ n cÂŹ sĂš 16 (int) f,e SĂš thĂčc (float) c KĂœ tĂč (char) s Chuçi kĂœ tĂč p Con trĂĄ (pointer) lf SĂš thĂčc (double) Lf SĂš thĂčc (long double) Width : xžc ¼Þnh sĂš kĂœ tĂč tĂši Âźa sÏ nhË n v” o cho vĂŻng Ÿã. H” m scanf() chØ nhË n cho Ÿñ width kĂœ tĂč hoÆc cho ¼Õn khi gÆp kĂœ tĂč trŸng ¼Çu tiÂȘn. NÕu chuçi nhËp v”o nhiÒu hÂŹn th× phÇn cßn lÂči sÏ d”nh lÂči cho lÇn gĂ€i scanf() kÕ tiÕ p. VÝ dĂŽ 1: scanf(“%3s”,str); NÕ u nhË p chuçi ABCDEFG ↔ th× scanf() sÏ nhËn tĂši Âźa 3 kĂœ tĂč cÊt v”o m¶ng str, cßn DEFG sÏ Ÿ­ßc lÊy nÕ u sau Ÿã cĂŁ lÇ n gĂ€i sanf(“%s”,str) khžc. VÝ dĂŽ 2: unsigned long money; scanf(“%lu”,&money); L­u Ăœ : NÕ u scanf(“%ul”, &money) th× giž trÞ nhË p v” o sÏ kh«ng Ÿ­ßc l­u trĂ· trong biÕ n money, nh­ng ch­ng tr× nh dÞch kh«ng bžo lçi. VÝ dĂŽ 3: NhË p v” o tÂȘ n v” bÞ giĂ­i hÂč n trong kho¶ ng [A-Z,a-z] char name[20]; printf(“Name : ”) ; scanf(“%[A-Za-z]”,&name); Trong tr­ĂȘng hĂźp n” y, nÕ u ta gĂą sai dÂč ng th× name =”” ! KĂœ tĂč trŸng: nÕu cĂŁ trong chuçi-dÂčng sÏ yÂȘu cÇu scanf() bĂĄ qua mĂ©t hay nhiÒ u kĂœ tĂč trŸ ng trong chuçi nhË p v” o. KĂœ tĂč trŸ ng l” kĂœ tĂč kho¶ ng trŸ ng (‘ ‘), tab (‘t’), xuĂšng h” ng (‘n’). MĂ©t kĂœ tĂč trŸng trong chuçi-¼ÞnhdÂčng sÏ Ÿ­ßc hiÓu l” chĂȘ nhË p ¼Õ n kĂœ tĂč khžc trŸ ng tiÕ p theo.
  • 16. KĂŒ thuËt lËp tr× nh 16 VÝ dĂŽ 4: scanf(“%d “,&num); H” m scanf() cho ta nhË p mĂ©t kĂœ tĂč khžc trŸng nĂ·a th× mĂ­i thožt ra. KĂœ tĂč Ÿã sÏ n»m trong vĂŻng ¼Öm v” sÏ Ÿ­ßc lÊy bĂ«i h”m scanf() hoÆc gets() tiÕp theo. ! KĂœ tĂč khžc trŸng: nÕu cĂŁ trong chuçi-¼ÞnhdÂčng sÏ khiÕn cho scanf() nhËn v” o Ÿóng kĂœ tĂč nh­ thÕ . VÝ dĂŽ 5: scanf(%d/%d/%d”,&d,&m,&y); H”m scanf() chĂȘ nhËn mĂ©t sĂš nguyÂȘn, cÊt v”o d, kÕ ¼Õn l” dÊu ‘/’, bĂĄ dÊu n” y Âźi v” chĂȘ nhË n sĂš nguyÂȘ n kÕ tiÕ p ¼Ó cÊ t v” o m. NÕ u kh«ng gÆ p dÊ u ‘/’ kÕ tiÕ p sĂš nguyÂȘ n th× scanf() chÊ m dĂžt. ChĂł Ăœ : H” m scanf() ¼ßi hĂĄi cžc tham sĂš ph¶ i l” cžc ¼Þa chØ cña cžc biÕn hoÆ c l” mĂ©t con trĂĄ. * Tožn tö ¼Þa chØ & : LÊ y ¼Þa chØ cña mĂ©t biÕ n VÝ dĂŽ 6: int n; → biÕ n n &n; → ¼Þa chØ cña n printf(“trÞ = %d, ¼Þa chØ = %d”,n,&n); b) H”m getch(): H”m getch() dĂŻng ¼Ó nhËn mĂ©t kĂœ tĂč do ta nhËp trÂȘn b”n phÝ m m” kh«ng cÇ n gĂą Enter vĂ­i cĂł phžp : ch = getch(); Kh«ng hiÖ n kĂœ tĂč nhË p trÂȘ n m” n h× nh ch = getche(); HiÖ n kĂœ tĂč nhË p trÂȘ n m” n h× nh VĂ­i ch l” biÕ n kiÓ u char. VÝ dĂŽ 7: void main() { char ch; printf(“Go vao ky tu bat ky : ‘); ch = getche(); printf(“n Ban vua go %c”,ch); getch(); } VÝ dĂŽ 8: BÂč n nhË p v” o 1 chĂ· cži. NÕ u chĂ· cži nhË p v” o l” 'd' th× ch­ng tr× nh sÏ kÕ t thĂłc, ng­ßc lÂč i ch­ng tr× nh sÏ bžo lçi v” bŸ t nhË p lÂč i. #include <stdio.h> #include <conio.h> void main() { char ch;
  • 17. KĂŒ thuËt lËp tr× nh 17 printf("nBan nhap vao 1 chu cai tu a den e: "); while ((ch=getche()) != 'd') { printf("nXin loi, %c la sai roi",ch); printf("n Thu lai lan nua. n"); } } L­u Ăœ: H” m getch() cßn cho phÐp ta nhË p v” o 1 kĂœ tĂč mĂ« rĂ©ng nh­ cžc phÝ m F1, F2,.., cžc phÝ m di chuyÓ n cursor. Cžc phÝ m n” y lu«n cĂŁ 2 bytes: byte thĂž nhÊ t b» ng 0, cßn byte 2 l” m∙ scancode cña phÝ m Ÿã. §Ó nhËn biÕt ta ¼∙ gĂą phÝ m kĂœ tĂč hay phÝ m mĂ« rĂ©ng, ta cĂŁ ch­ng tr× nh sau: void main() { int c; int extended = 0; c = getch(); if (!c) extended = getch(); if (extended) printf("The character is extendedn"); else printf("The character isn't extendedn"); } PhÝ m M· scancode F1 59 F2 60 F3 61 F4 62 F5 63 F6 64 F7 65 F8 66 F9 67 F10 68 Home 71 " 72 # 80 $ 75
  • 18. KĂŒ thuËt lËp tr× nh 18 % 77 PgUp 73 PgDn 81 End 79 Ins 82 Del 83 B¶ ng m∙ scancode cña cžc phÝ m mĂ« rĂ©ng c. H”m kbhit(): H” m int kbhit() sÏ kiÓ m tra xem cĂŁ phÝ m n” o Ÿ­ßc gĂą v”o hay kh«ng. NÕu cĂŁ, h”m kbhit sÏ tr¶ vÒ mĂ©t sĂš nguyÂȘn khžc 0, v” ng­ßc lÂči. KĂœ tĂč m” ta nhË p v” o qua h” m kbhit() cĂŁ thÓ lÊ y Ÿ­ßc qua h” m getch() hoÆ c 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 H»ng: H» ng l” cžc ÂźÂč i l­ßng m” giž trÞ cña nĂŁ kh«ng thay ŸÊi trong quž tr× nh ch­ng tr× nh thĂčc hiÖ n. I.4.1. Ph©n loÂči : a. H»ng sĂš : l” cžc giž trÞ sĂš ¼∙ xžc ¼Þnh v” kh«ng ŸÊi. int unsigned long hÖ 8 hÖ 16 float/double DÂč ng nnnn -nnnn nnnnU/u nnnnL/l -nnnnl/L 0nnnn 0xnnnn nnnn.nnnn nnnn.nnnE/e±nnn VÝ dĂŽ 4567 -12 123U 12uL 456789L -1234L 0345 0x1AB 123.654 123.234E-4 ChĂł Ăœ : - Cžc h» ng sĂš viÕ t kh«ng dÊ u hoÆ c kh«ng sĂš mĂČ ÂźÂ­Ăźc hiÓu l” sĂš nguyÂȘn, ng­ßc lÂč i l” double. - Cžc h» ng sĂš nguyÂȘ n lĂ­n hÂŹn int sÏ Ÿ­ßc l­u trĂ· theo kiÓ u long, cßn lĂ­n hÂŹn long th× Ÿ­ßc l­u trĂ· theo kiÓ u double. - Cžc h» ng sĂš nguyÂȘ n d­ng lĂ­n hÂŹn long sÏ Ÿ­ßc l­u trĂ· theo kiÓu double - MĂ©t h» ng sĂš Ÿ­ßc l­u trĂ· theo dÂč ng long nÕ u theo sĂš Ÿã cĂŁ kĂœ tĂč l (L),
  • 19. KĂŒ thuËt lËp tr× nh 19 dÂč ng unsigned nÕ u sau Ÿã cĂŁ chĂ· u (U), dÂčng thËp lĂŽc ph©n nÕu tr­íc sĂš Ÿã cĂŁ 0x v” dÂč ng bžt ph© n nÕ u tr­íc sĂš Ÿã cĂŁ 0 VÝ dĂŽ: 50000; 10 L; → Long 5U, 100u → unsigned 0x10 → hÖ 16 = 1610 010 → hÖ 8 = 810 b. H»ng kĂœ tĂč : l” kĂœ tĂč riÂȘng biÖt Ÿ­ßc viÕt trong hai dÊu nhžy Ÿn : ‘A’ Giž trÞ cña h» ng kĂœ tĂč l” m∙ ASCII cña nĂŁ. VÝ dĂŽ : printf(“%c cĂŁ giž trÞ l” %d”,’A’,’A’); % ‘A’ cĂŁ giž trÞ l” 65 & H» ng kĂœ tĂč cĂŁ thÓ tham gia v” o cžc phÐp tožn nh­ mĂ€i sĂš nguyÂȘ n khžc. VÝ dĂŽ :‘9’-’0’=57-48=9 & H» ng kĂœ tĂč cĂŁ thÓ l” cžc kĂœ tĂč ¼Æ c biÖ t dÂč ng ‘c1’ m” ta ¼∙ xÐt Ă« h” m printf() nh­ ‘n’,’a’,’t’ ... c. H»ng chuçi : L” mĂ©t chuçi kĂœ tĂč n» m trong hai dÊ u nhžy kÐp “ “. VÝ dĂŽ : “Day la mot chuoi” “Hang chuoi co ky tu ÂźÂč c biÖ t nh­ n 248” “” → chuçi rçng. ChĂł Ăœ : - Ph© n biÖ t “A” ≠ ‘A’ H» ng: ChuçiKĂœ tĂč DÂč ng l­u trĂ· : A 0 A - NhË n xÐt: Ă« dÂč ng l­u trĂ·, ta thÊ y tË n cĂŻng cña chuçi cĂŁ kĂœ tĂč NULL ‘0’ m” kh«ng cĂŁ Ă« dÂč ng kĂœ tĂč. ChÝ nh v× vË y m” kh«ng cĂŁ kĂœ tĂč rçng ‘’. - MĂ©t chuçi cĂŁ thÓ Ÿ­ßc viÕt trÂȘn nhiÒu h”ng vĂ­i ÂźiÒu kiÖn h”ng trÂȘn ph¶i cĂŁ dÊ u ‘’. VÝ dĂŽ :“Day la mot chuoi duoc viet tren nhieu hang n” d. H»ng biÓ u thĂžc : L” mĂ©t biÓ u thĂžc m” trong Ÿã cžc tožn hÂčng ¼Òu l” cžc h»ng. Khi Ÿã ch­ng tr× nh dÞch sÏ tÝ nh tožn biÓuthĂžctr­íc,v” kÕtqu¶ Ÿ­ßc l­u trĂ· thÂŒ ng b» ng mĂ©t h» ng sĂš t­ng Ÿ­ng. VÝ dĂŽ : 8*20-13 → kÕ t qu¶ l­u trĂ· l” 173
  • 20. KĂŒ thuËt lËp tr× nh 20 ‘a -’A’ → “ l” 97-65 = 32 1<8 → “ l” 0 (sai) I.4.2. Khai bžo h»ng: CĂł phžp: const tÂȘ nh» ng = biÓ uthĂžc; VÝ dĂŽ : const MAX = 50; const PI = 3.141593; ChĂł Ăœ : - Ta cĂŁ thÓ khai bžo h» ng b» ng cžch ¼Þnh nghÜ a 1 macro nh­ sau: #define tÂȘ nh» ng gižtrÞ - LÖnh #define ph¶i Ÿ­ßc khai bžo ngo”i h”m v” sau nĂŁ kh«ng cĂŁ dÊ u ; I.5. PhÐp tožn I.5.1. PhÐp gžn: CĂł phžp: biÕ n = biÓ u thĂžc; ChĂł Ăœ : PhÐp gžn trong ng«n ngĂ· C tr¶ vÒ mĂ©t kÕ t qu¶ l” trÞ cña biÓ u thĂžc VÝ dĂŽ 1 :c = 10; a = b = c; printf(“a=%d , b=%d”,a,b); → a=10,b=10 VÝ dĂŽ 2 :x = b + 2*c; ⇔ y= a + (x= b + 2*c) y = a + x; VÝ dĂŽ 3 :(n+3) = 4+z; (kh«ng hĂźp lÖ v× bÂȘ n trži l” biÓ u thĂžc) ‘ ‘= c +’o’; (kh«ng hĂźp lÖ v× bÂȘ n trži l” h» ng) I.5.2. Cžc phÐp tožn sĂš hĂ€c : a. PhÐp tožn hai tožn hÂčng : +, -, *, /, % PhÐp tožn KiÓ u tožn hÂčng KiÓ u kÕ t qu¶ +, -, * char, int, long, float, double KiÓ u cña tožn hÂč ng cĂŁ kiÓ u cao nhÊ t / nguyÂȘ n/nguyÂȘ n KiÓ u nguyÂȘ n v” l” phÐp chia nguyÂȘ n thĂčc(nguyÂȘ n)/thĂčc (nguyÂȘ n) KiÓ u thĂčc v” l” phÐp chia thĂčc % nguyÂȘ n/nguyÂȘ n KiÓu nguyÂȘn v” l” phÐp chia lÊy phÇn d­ VÝ dĂŽ : #include <stdio.h> void main()
  • 21. KĂŒ thuËt lËp tr× nh 21 { char cv; int iv = 121; float fv1,fv2; printf(“ ChuyÓ n kiÓ u :nn”); cv = iv; printf(“int Ÿ­ßc gžn cho char : %d → %d (%c)nn”,iv,cv,cv); fv1 = iv/50; printf(“ int : %d / 50 = %f nn”,iv,fv1); fv1 = iv/50.0; printf(“ float : %d / 50.0 = %f nn”,iv,fv1); fv1 = 1028.75; fv2 = fv1 +iv ; printf(“ %f + %d = %f nn”,fv1,iv,fv2); getch(); } b. PhÐp tožn mĂ©t tožn hÂčng : phÐp tš ng ++, phÐp gi¶ m -- a++ hoÆ c ++a ⇔ a = a+1 a-- hoÆ c --a ⇔ a = a-1 ChĂł Ăœ : Tuy nhiÂȘ n a++ sÏ khžc ++a khi chĂłng ŸÞng trong biÓ u thĂžc (cĂŁ phÐp gžn). a++ : Tš ng a sau khi giž trÞ cña nĂŁ Ÿ­ßc sö dĂŽng. ++a : Tš ng a tr­íc khi giž trÞ cña nĂŁ Ÿ­ßc sö dĂŽng. VÝ dĂŽ : main() a b n { 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. PhÐp gžn phĂžc hĂźp: CĂł phžp: biÕ n op= <biÓ uthĂžc> ⇔ biÕ n = biÕ n op <biÓ uthĂžc> VĂ­i op l” phÐp tožn.
  • 22. KĂŒ thuËt lËp tr× nh 22 Cžc phÐp gžn phĂžc hĂźp : += , -= , *= , /= , %= , <<= , >>= VÝ dĂŽ :n = n*(10+x) ⇔ n *= (10 +x) n = n % 10 ⇔ n %= 10 I = I +3 ⇔ I += 3 << : l” phÐp dÞch chuyÓ n bit qua trži . >> : l” phÐp dÞch chuyÓ n bit qua ph¶ i . I.5.4. PhÐp tožn quan hÖ : < : nhĂĄ hÂŹn > : lĂ­n hÂŹn >= : lĂ­n hÂŹn hoÆ c b» ng <= : nhĂĄ hÂŹn hoÆ c b» ng != : khžc == : b» ng ChĂł Ăœ : - Ph© n biÖ t tožn tö so sžnh == vĂ­i phÐp gžn = - C kh«ng cĂŁ kiÓ u dĂ· liÖ u boolean m” qui ­íc : Giž trÞ 0 l” sai Giž trÞ !=0 l” Ÿóng VÝ dĂŽ: a=10; b= (a>6)*(a-6) → b = 4 c= (a< 5)*(a-5) → c = 0 VÝ dĂŽ: T× m sĂš lĂ­n nhÊ t trong 3 sĂš nguyÂȘ n a, b, c #include <stdio.h> #include <conio.h> void main () { int a, b, c, max; printf(“Ch­ng tr× nh t× m sĂš lĂ­n nhÊ t trong 3 sù”); printf(“NhË p a, b, c”); scanf(“%d %d %d ”, &a, &b, &c); max = a; if (max<b) max = b; if (max<c) max = c; printf(“SĂš lĂ­n nhÊ t = %d”, max); getch(); }
  • 23. KĂŒ thuËt lËp tr× nh 23 I.5.5.Tožn tö logic: Tožn tö Ăœ nghÜ a NOT ! Phñ ¼Þnh AND && Giao, v” OR || HĂ©i ThĂž tĂč tÝ nh tožn tĂ” trÂȘ n xuĂšng. B¶ ng ch© n trÞ: x ! x x y x && y true false true true true false true true false false false true false false false false x y x || y true true true false true true false true true false false false VÝ dĂŽ 1: XÐt kĂœ tĂč c cĂŁ ph¶ i l” kĂœ sĂš hay kh«ng? char c; if (c >= ‘0’ && c <= ‘9’) printf (“% c l” kÝ tĂč sĂš “, c); VÝ dĂŽ 2: XÐt kĂœ tĂč ch l” chĂ· cži hay kh«ng? 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ĂŒ thuËt lËp tr× nh 24 int i=2, j=0; (a>b) && (i<j) → 0 (a<b) | | (i>j) → 1 VÝ dĂŽ 5: n=5; while (n) { printf("nSĂš n = %d",n); n--; } I.5.6. Tožn tö phÈy: CĂł phžp: T = (exp1, exp2, exp3 ); // T = kÕ t qu¶ cña 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. Tožn tö ÂźiÒ u kiÖ n: CĂł phžp : T = <ÂźiÒ u kiÖ n> ? <bt1> : <bt2>; NÕ u <ÂźiÒ u kiÖ n> l” Ÿóng th× T = <bt1> , ng­ßc lÂč i 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; I.5.8. Tožn tö trÂȘ n bit (bit wise) : DÂčng KĂœ hiÖ u Ăœ nghÜ a NOT bit ~ lÊ y bĂŻ 1 AND bit & giao OR bit | hĂ©i XOR bit ^ hĂ©i loÂč i trĂ” dÞch trži << nh© n 2 dÞch ph¶ i >> chia 2
  • 25. KĂŒ thuËt lËp tr× nh 25 B¶ ng ch© n trÞ: Bit Bit Bit kÕ t qu¶ A B ~ A A & B A | B A ^ B 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 VÝ dĂŽ: a= 4564 0001 0001 1101 0100 b= 13667 0011 0101 0110 0011 a & b 0001 0001 0100 0000 a | b 0011 0101 1111 0111 a ^ b 0010 0100 1011 0111 Ăœ nghÜ a: 1. PhÐp AND bit th­ĂȘng Ÿ­ßc dĂŻng ¼Ó kiÓm tra mĂ©t bit cĂŽ thÓ n”o Ÿã trong th” nh phÇ n dĂ· liÖ u x cĂŁ trÞ 0 hay 1. ViÖ c n” y thĂčc hiÖ n b» ng cžch sö dĂŽng mĂ©t mÆ t nÂč (mask) vĂ­i bit cÇ n quan t© m b» ng 1 cßn cžc bit khžc b»ng 0. Ta lÊy mask AND vĂ­i giž trÞ x. NÕ u kÕt qu¶ thu Ÿ­ßc b»ng mask th× l” bit cÇn quan t©m l” 1, ng­ßc lÂč i 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 = % 02xn”, x1, x2, x1& x2); } VÝ dĂŽ 2: Ta muĂšn biÕ t bit thĂž 3 cña 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ĂŒ thuËt lËp tr× nh 26 2. PhÐp OR dĂŻng ¼Ó bË t cžc bit cÇ n thiÕ t lÂȘ n cĂČng nhĂȘ v” o mĂ©t mÆ t nÂč . ChÂŒ ng hÂč n nh­ ta muĂšn bË t bit thĂž 7 cña biÕ n ch (unsigned char ch) lÂȘ n 1: ch = ch | 0x80; VÝ dĂŽ 3: void main() { unsigned char x1,x2; printf (“n cho 2 sĂš hex (ff hay nhĂĄ hÂŹn) :”); scanf (“%x %x”, &x1, &x2); printf (“ %02x | %02x %02x n”, x1, x2, x1| x2); } 3. PhÐp XOR dĂŻng ¼Ó “lËt” bit nghÜ a l” hožn chuyÓn 0→1 VÝ dĂŽ 4: §Ó lË t bit 3 ta cĂŁ ch­ng tr× nh: void main() { unsigned char ch; printf (“ nhË p 1 sĂš hex < = ff :”); scanf (“%x”, &ch); printf (“%02x ^ 0x08 = %02x n “, ch, ch ^ 0x08); } 4. Tožn tö << , >> << dÞch sang trži (nh© n 2) >> dÞch sang ph¶ i (chia 2) VÝ dĂŽ 5: num = 201 (0x00c9) num : 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 num << 2 : 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 KÕ t qu¶ = 0x0324 → 804 nghÜ a l” 201* 4 VÝ dĂŽ 6: void main() { unsigned char x1, x2 ; printf (“ nhË p 1 sĂš hex < = ff v” sĂš bit : “); scanf ( %x %d “, &x1, &x2); printf (“ %02x >> %d = %02x n”, x1, x2, x1>> x2); } ChĂł Ăœ : Trong phÐp dÞch ph¶ i C l” m theo 2 cžch khžc nhau tĂŻy thuĂ©c v” o
  • 27. KĂŒ thuËt lËp tr× nh 27 kiÓ u dĂ· liÖ u cña tožn hÂč ng bÂȘ n trži. - NÕu tožn hÂčng bÂȘn trži kiÓu unsigned th× phÐp dÞch sÏ ÂźiÒn 0 v”o cžc bit bÂȘ n trži. - NÕu tožn hÂčng bÂȘn trži kiÓu signed th× phÐp dÞch sÏ ÂźiÒn bit dÊu v”o cžc bit bÂȘ n trži VÝ dĂŽ 7: unsigned int num; num = 39470; // 9A2E hexa num = num >> 2 = 0 → 1 0 0 1 9867 = 0x268B 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1 1 0 1 0 1 1 VÝ dĂŽ 8 : int num; // 9A2E hexa num = -26066 num = num >> 2 = 1 → 1 0 0 1 -6517 = 0xE68B 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1 1 0 1 0 1 1 VÝ dĂŽ 8: Ch­ng tr× nh ŸÊi sĂš hex ra sĂš nhÞ ph© n : #include <stdio.h> #include <conio.h> void main() { int num; unsigned int mask; clrscr(); printf ("Chuong trinh doi so hexa sang nhi phann"); 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(); }
  • 28. KĂŒ thuËt lËp tr× nh 28 VÝ dĂŽ 9: Ch­ng tr× nh mžy tÝ nh bitwise §© y l” ch­ng tr× nh gi¶ lË p mĂ©t mžy tÝ nh thĂčc hiÖ n cžc tožn tö bitwise. #define TRUE 1 main() { char op[10]; int x1, x2; while (TRUE) { printf (“n n Cho biÓ u thĂžc ( vd ‘ ffoo & f11’) : “); printf (“n”); switch ( op[0]) { case ‘&’: pbin (x1); printf (“& (and) n “); pbin (x2); pline (); pbin (x1 & x2); break; case ‘|’: pbin (x1); printf (“| n “); pbin (x2); pline (); pbin (x1 | x2); break; case ‘^’: pbin (x1); printf (“^ n); pbin (x2); pline (); pbin (x1 ^ x2); break; case ’>‘: pbin (x1); printf (“ >>“); printf (“%d n “,x2); pline (); pbin (x1 >> x2); break; case ‘<‘: pbin (x1); printf (“<<“); printf (“%d n”, x2); pline (); pbin (x1 << x2); break; case ‘~’: pbin (x1); printf (“~ n”); pline (); pbin (~ x1); break; default : printf (“Tožn tö kh«ng hĂźp lÖ /n “); } }
  • 29. KĂŒ thuËt lËp tr× nh 29 } 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Ăč chuyÓ n kiÓ u bŸt buĂ©c: Trong C cĂŁ 2 tr­ĂȘng hĂźp chuyÓ n kiÓ u: chuyÓ n kiÓ u tĂč Ÿéng v” chuyÓ n kiÓ u bŸ t buĂ©c. ChuyÓn kiÓu bŸt buĂ©c: Ÿ­ßc žp dĂŽng khi chuyÓnkiÓutĂč Ÿéngkh«ngŸ­ßc. CĂł phžp: (Type) biÓ u thĂžc VÝ dĂŽ: d = (float) (f - 32) int a= 100, b=6; double f; f =a/b // kÕ t qu¶ f=16 f= (double) a/ (double)b // kÕ t qu¶ f= 100.0 / 6.0= 16.666. * MĂžc Ÿé ­u tiÂȘ n cña cžc phÐp tožn: §é ­u tiÂȘ n PhÐp tožn ThĂž tĂč kÕ t hĂźp 1 () [ ] → → 2 ! ~ ++ - - (type) * & size of ←←←← 3 * / % → 4 + - → 5 << >> →
  • 30. KĂŒ thuËt lËp tr× nh 30 6 < <= > >= → 7 = = != → 8 & → 9 ^ → 10 | → 11 && → 12 | | → 13 ? ←←←← 14 = + = - = .. ←←←← VÝ dĂŽ 1: 3/4 * 6 # 3*6 /4 0 * 6 18 /4 0 4 VÝ dĂŽ 2: (float) 2 /4 # (float) (2/4) 2.0 /4 (float) 0 0.5 0.0 I.6. Chuçi I.6.1. §Þnh nghÜ a :Chuçi l” mĂ©t m¶ng m” cžc phÇn tö cña nĂŁ cĂŁ kiÓu kĂœ tĂč. Khai bžo mĂ©t chuçi kĂœ tĂč chĂža tĂši Âźa 49 kĂœ tĂč char chuçi[50]; * L­u Ăœ: TÊt c¶ cžc chuçi ¼Òu Ÿ­ßc kÕt thĂłc b»ng kĂœ tĂč NULL (0). Do Ÿã, nÕ u chuçi d” i 50 th× ta chØ cĂŁ thÓ chĂža tĂši Âźa 49 kĂœ tĂč. I.6.2. KhĂ«i Ÿéng trÞ: char chuçi[ ] = {‘A’, ‘N’, ‘H’, ‘ 0’}; char chuçi[ ] = "ANH"; I.6.3. NhËp / xuÊt chuçi: a. NhËp chuçi: gets (chuçi) b. XuÊt chuçi: puts (chuçi) ChĂł Ăœ : - Khi nhËp chuçi th× kh«ng Ÿ­ßc dĂŻng h”m scanf v× h”m scanf kh«ng chÊp nhË n kho¶ ng trŸ ng. VÝ dĂŽ: scanf(“%s”, chuçi);// ta nhË p v” o NguyÔ n Vš n ži th×
  • 31. KĂŒ thuËt lËp tr× nh 31 // chuçi = “NguyÔ n” v× h” m scanf cŸ t kho¶ ng trŸ ng - Khi dĂŻng h” m gets trong ch­ng tr× nh th× kh«ng nÂȘ n dĂŻng h” m scanf Ă« bÊt k× Ÿ©u dĂŻ r»ng dĂŻng h”m scanf ¼Ó nhËp sĂš m” ta nÂȘn dĂŻng h”m gets v” h”m atoi, atof ¼Ó nhË p sĂš. V× : scanf(“%d”, &n); // ta nhË p sĂš 5 ↔ gets (chuçi); // lĂłc n” y chuçi = ““ (chuçi rçng) I.6.4. H”m chuyÓ n ŸÊi sĂš sang chuçi v” ng­ßc lÂči sĂšint = atoi (chuçisĂš) // chuyÓ n chuçi sĂš sang sĂš nguyÂȘ n sĂšf = atof (chuçisĂš) // chuyÓ n chuçi sĂš sang sĂš thĂčc * Hai h” m n” y n» m trong < stdlib .h > I.6.5. Cžc h”m vÒ chuçi: (# include < string. h> ) - int strlen(S) : tr¶ vÒ chiÒ u d” i chuçi S. - int strcmp(S1, S2): so sžnh chuçi S1 vĂ­i S2. NÕ u chuçi S1 giĂšng S2 kÕ t qu¶ b» ng 0. NÕ u chuçi S1< S2 kÕ t qu¶ l” © m, nÕ u chuçi S1> S2 kÕ t qu¶ > 0. - int stricmp(S1, S2): so sžnh chuçi S1, S2 kh«ng ph© n biÖ t chĂ· th­ĂȘng hay chĂ· hoa - int strncmp(S1, S2, n): chØ so sžnh n kĂœ tĂč ¼Ç u cña 2 chuçi S1, S2 vĂ­i nhau. - int strnicmp(S1, S2, n): chØ so sžnh n kĂœ tĂč ¼Ç u cña 2 chuçi S1, S2 vĂ­i nhau, kh«ng ph© n biÖ t chĂ· th­ĂȘng, chĂ· hoa - strcpy(dest, source): chÐp chuçi tĂ” nguĂ„n source sang ¼Ý ch dest VÝ dĂŽ: char string[10]; char *str1 = "abcdefghi"; strcpy(string, str1); printf("%sn", string); // "abcdefghi" - strncpy(dest, source, n): chÐp chuçi tĂ” nguĂ„n sang ¼Ý ch vĂ­i nhiÒ u nhÊ t l” n kĂœ tĂč. VÝ dĂŽ: char string[10]; char *str1 = "abcdefghi"; strncpy(string, str1, 3); // string = "abcx1zwe12" string[3] = '0'; // §Æ t kĂœ tĂč kÕ t thĂłc chuçi v” o cuĂši chuçi. printf("%sn", string); // "abc" - strcat(dest, src): nĂši chuçi src v” o sau chuçi dest. ChiÒ u d” i cña chuçi kÕ t qu¶ b» ng strlen(dest) + strlen(src)
  • 32. KĂŒ thuËt lËp tr× nh 32 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Ăši nhiÒ u nhÊ t l” n kĂœ tĂč cña src v” o cuĂši chuçi dest, sau Ÿã thÂȘ m kĂœ tĂč null v” o cuĂši chuçi kÕ t qu¶ . VÝ dĂŽ: char destination[25]; char *source = " States"; strcpy(destination, "United"); strncat(destination, source, 6); printf("%sn", destination); // destination = "United State" - char * strchr(s, ch): tr¶ vÒ ¼Þa chØ cña kĂœ tĂč ch ¼Ç u tiÂȘ n cĂŁ trong chuçi S; nÕ u kh«ng cĂŁ th× tr¶ vÒ NULL (th­ĂȘng dĂŻng ¼Ó lÊ y 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Ý : %dn", c, ptr-string); else printf("Kh«ng t× m thÊ y kĂœ tĂč %cn",c); - char * strstr(S1, S2): tr¶ vÒ vÞ trÝ cña chuçi S2 trong chuçi S1; nÕ u S2 kh«ng cĂŁ trong S1 th× h” m strstr tr¶ vÒ trÞ NULL. I.6.6. M¶ng cžc chuçi *Khai bžo: Khai bžo biÕn ds chĂža tĂši Âźa 50 chuçi kĂœ tĂč, mçi chuçi kĂœ tĂč cĂŁ tĂši Âźa 30 kĂœ tĂč. char ds[50 ] [30]; ChĂł Ăœ : - Kh«ng nÂȘ n gžn chuçi vĂ­i chuçi (s1= s2) m” ph¶ i dĂŻng h” m strcpy(S1,S2) - Kh«ng Ÿ­ßc so sžnh 2 chuçi b» ng cžc tožn tö quan hÖ (S1== S2, S1>S2, S1>= S2), m” ph¶ i dĂŻng h” m strcmp(S1,S2).
  • 33. KĂŒ thuËt lËp tr× nh 33 VÝ dĂŽ: ViÕ t ch­ng tr× nh t× m kiÕ m 1 tĂ” trong 1 c© u # include < string.h> # include < stdio.h> void main () { char cau[80], tĂ”[7], *ptr; printf(“NhË p c© u :”); gets(c© u); printf(“NhË p tĂ” :”); gets(tĂ”); ptr = strstr(c© u, tĂ”); if (ptr == NULL) printf(“Kh«ng cĂŁ tĂ”â€); else printf(“cĂŁ tĂ”â€); } II. Cžc cÊu trĂłc ÂźiÒu khiÓn trong C: Ng«n ngĂ· C l” ng«n ngĂ· lËp tr× nh cÊp cao cĂŁ cÊu trĂłc, gĂ„m: cÊu trĂłc tuÇn tĂč, chĂ€n, v” lÆ p. II.1 CÊu trĂłc tuÇn tĂč (Sequence) : Cžc lÖ nh trong ch­ng tr× nh Ÿ­ßc thĂčc hiÖ n tuÇ n tĂč tĂ” lÖnh n”y ¼Õn lÖnh khžc cho ¼Õ n khi hÕ t ch­ng tr× nh. VÝ du : ViÕt ch­ng tr× nh tÝ nh v” in ra diÖn tÝ ch cña hai Ÿ­ĂȘng trßnbžnkÝ nh lÇ n l­ßt l” 3m v” 4.5m cĂŻng vĂ­i hiÖ u sĂš cña 2 diÖ n tÝ ch. #define PI 3.14159 #include <stdio.h> #include <conio.h> void main() { float r1, r2, hieuso; clrscr(); printf("nCHUONG TRINH TINH DIEN TICH 2 HINH TRON VA HIEU SOn"); printf("Ban kinh hinh tron thu nhat : "); scanf("%f",&r1); printf("Ban kinh hinh tron thu hai : "); scanf("%f",&r2); printf ("Dien tich hinh tron 1 = %.2fn",PI*r1*r1);
  • 34. KĂŒ thuËt lËp tr× nh 34 printf ("Dien tich hinh tron 2 = %.2fn",PI*r2*r2); hieuso = PI*r1*r1 - PI*r2*r2; printf ("Hieu so dien tich 2 hinh tron = %.2fn",hieuso); getch(); } II.2. CÊu trĂłc chĂ€n KĂœ hiÖ u : Âźk l” biÓ u thĂžc Logic S1, S2 l” cžc phžt biÓ u hay 1 nhĂŁm cžc phžt biÓ u (lÖ nh) II.2.1. LÖ nh if else: CĂł phžp: if (Âźk) S1; ÑK NO YES S1 if (Âźk) S1; else S2; ÑK S1 S2 NO YES ChĂł Ăœ : Cžc lÖ nh if else lĂ„ng nhau if (Âźk1) S1; else if (Âźk2) S2; else if (Âźk3) S3; else S4; VÝ dĂŽ 1: T× m max(a,b,c)
  • 35. KĂŒ thuËt lËp tr× nh 35 if (a>b) if (a>c) max=a; else max=c; else if (b>c) max =b; else max= c; VÝ dĂŽ 2: TÝ nh h” m f(x) : f(x) = x2 , nÕ u -2 < = x< 2 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. LÖ nh chĂ€n lĂča: switch_case CĂł phžp: switch (biÓ u thĂžc) { case h» ng 1: S1; case h» ng 2: S2; break; . . . case h» ng 3: Sn; break; default: S0; } Cžch hoÂčt Ÿéng: - (biÓ uthĂžc) cĂŁ kÕ t qu¶ nguyÂȘ n - H» ng: kĂœ tĂč, sĂš nguyÂȘ n, biÓ u thĂžc cĂŁ sĂš nguyÂȘ n - NÕu kÕt qu¶ b»ng h»ng I n”o Ÿã th× nĂŁ sÏ l”m lÖnh Si v” tuÇn tĂč thĂčc hiÖn hÕ t cžc lÖ nh Ă« d­íi cho ¼Õ n khi hÕ t lÖ nh switch. - MuĂšn ngŸ t sĂč tuÇ n tĂč trÂȘ n th× ph¶ i dĂŻng lÖ nh break. VÝ dĂŽ: NhË p 1 kĂœ tĂč sĂš dÂč ng hex ŸÊi ra sĂš thË p ph© n #include <stdio.h> #include <conio.h> void main()
  • 36. KĂŒ thuËt lËp tr× nh 36 { 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ĂŽ: ViÕ t ch­ng tr× nh tÂč o 1 mžy tÝ nh cĂŁ 4 phÐp tožn + , - , * , / #include <stdio.h> #include <conio.h> void main() {
  • 37. KĂŒ thuËt lËp tr× nh 37 float num1, num2; char op; clrscr(); printf ("Go vao so, toan tu, so n"); scanf("%f %c %f", &num1, &op, &num2); switch (op) { case '+': printf("= %f",num1+num2); break; case '-': printf("= %f",num1-num2); break; case '*': printf("= %f",num1*num2); break; case '/': printf("= %f",num1/num2); break; default : printf("Tožn tö lÂč , kh«ng biÕ t"); } } II.3. CÊu trĂłc lÆp II.3.1. LÖ nh while: CĂł phžp: While (bt) S; ÑK NO YES S ChĂł Ăœ : Trong phÇ n th© n lÖ nh ph¶ i cĂŁ biÕ n ÂźiÒ u khiÓ n vßng lÆ p. VÝ dĂŽ 1: ViÕ t ch­ng tr× nh in ra b¶ ng m∙ ASCII void main () { int n=0; while (n <= 255)
  • 38. KĂŒ thuËt lËp tr× nh 38 { printf(“%c cĂŁ m∙ ASCII l” %d”, n, n); n ++ } } VÝ dĂŽ 2: NhË p mĂ©t chuçi kĂœ tĂč, v” kÕ t thĂłc nhË p b» ng ESC #define ESC ‘ 0x1b’ #include <stdio.h> #include <conio.h> void main() { char c; while (1) if ((c = getche() ) = ESC ) break; } VÝ dĂŽ 3: ViÕ t ch­ng tr× nh in b¶ ng cöu ch­ng void main () { int a, b; b = 1; while (b < = 9) { a = 2; while (a < = 9) { printf(“%d * %d = %d t”, a, b, a*b); a++; } b ++; printf(“n”); } } II.3.2. LÖ nh do while: CĂł phžp: do S while (bt); S ñk No Yes VÝ dĂŽ 1: ViÕ t ch­ng tr× nh in b¶ ng m∙ ASCII #include <stdio.h>
  • 39. KĂŒ thuËt lËp tr× nh 39 main () { int n=0; do { printf(“%c cĂŁ m∙ ASCII %dn”, n, n); n ++; } while (n <= 255); } II.3.3. LÖ nh for: CĂł phžp: for ([bt_khĂ«i Ÿéng]; [bt_Âźk]; [bt_lÆ p]) S; VÝ dĂŽ 1: LÆ p lÖ nh 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 sžnh vßng lÆ p while - for: bt_khĂ«i Ÿéng; while (BiÓ uThĂžc_ÂźK) { S; BT_lÆ p; } for ( bt_khĂ«i Ÿéng; bt_Âźk; bt_lÆ p) S; VÝ dĂŽ 3: ViÕ t ch­ng tr× nh in ra b¶ ng cöu ch­ng b» ng vßng 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: ViÕ t ch­ng tr× nh tÝ nh n giai thĂ”a
  • 40. KĂŒ thuËt lËp tr× nh 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: ViÕ t ch­ng tr× nh tÝ nh biÓ u thĂžc: (1 + 1/12 ) * (1 + 1/22 ) *......... (1 + 1/ n2 ) void main () { int i, n; float S; printf(“NhË p sĂš :”); scanf(“%d”, &n); S = 1; for (i= 1;i<= n; i++) S = S*(1+1.0 / (i*i)); printf(“nKet qua = %f”, S) } * Phžt biÓ u break, continue, goto: 1. Break: LÖ nh break cho phÐp thožt ra sĂ­m khĂĄi vßng lÆ p ( whiledo , for, dowhile), lÖ nh switch. 2. LÖ nh continue: LÖ nh continue chØ dĂŻng trong vßng lÆ p l” m cho ch­ng tr× nh nh¶ y tŸ t vÒ ÂźiÒ u kiÖ n kiÓ m tra cña vßng lÆ p ¼Ó bŸ t ¼Ç u mĂ©t vßng lÆ p mĂ­i. VÝ dĂŽ: ViÕ t ch­ng tr× nh nhË p mĂ©t c© u chĂ· th­ĂȘng kÕ t thĂłc b» ng dÊ u chÊ m, xuÊ t ra b» ng 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; }
  • 41. KĂŒ thuËt lËp tr× nh 41 } 3. LÖnh goto: dĂŻng ¼Ó chuyÓn ÂźiÒu khiÓnch­ngtr× nhvÒ mĂ©tvÞtrÝ n”oŸã. CĂł phžp: Goto nh∙ n; LÖ nh goto sÏ chuyÓ n ÂźiÒ u khiÓ n ch­ng tr× nh ngay lË p tĂžc vÒ vÞ trÝ ¼Æ t nh∙ n. VÝ dĂŽ: Again: ; . . goto Again; B”i tËp: 1. ViÕ t ch­ng tr× nh tÝ nh diÖ n tÝ ch - H× nh vu«ng - H× nh thang - Tam gižc th­ĂȘng - Tam gižc vu«ng - H× nh trßn 2. TÝ nh kho¶ ng cžch mĂ©t ÂźiÓ m (X0, Y0) tĂ­i mĂ©t Ÿ­ĂȘng thÂŒ ng Ax + By + C = 0 BA CByAx S 22 00 + ++ = , nhË p A, B, C, X0, Y0 3. Cho 3 sĂš thĂčc x, y, z. T× m a. Max(x+y+z, x*y*z) b. Min2 ((x+y+z) / 2, x*y*z) +1 4. ViÕ t ch­ng tr× nh t× m sĂš lĂ­n nhÊ t trong 3 sĂš nguyÂȘ n a,b, c 5. Gi¶ i ph­ng tr× nh bË c 2 Ax2 +Bx+C = 0 trÂȘ n tr­ĂȘng sĂš thĂčc. 6. ViÕ t ch­ng tr× nh tÝ nh diÖ n tÝ ch h× nh trßn, biÕt bžn kÝ nh r d­ng; Ch­ng tr× nh cĂŁ kiÓm tra sĂš liÖu nhËp v”o, nÕu r <=0 th× ch­ng tr× nh bžo lçi v” bŸt nhË p lÂč i. 7. ViÕ t ch­ng tr× nh nhË p sĂš thË p lĂŽc ph© n in ra sĂš nhÞ ph© n, cĂž 4 sĂš th× cžch mĂ©t kho¶ ng trŸ ng. 8. ViÕ t ch­ng tr× nh tÂč o 1 mžy tÝ nh gĂ„m cžc phÐp tožn sau : + , - , * , / , ^ (ax vĂ­i x nguyÂȘ n d­ng), @ (ex )
  • 42. KĂŒ thuËt lËp tr× nh 42 9. ViÕ t ch­ng tr× nh kiÓ m tra 1 bit bÊ t k× cña sĂš b» ng 0 hay 1 10. ViÕ t ch­ng tr× nh tÝ nh kÕt qu¶ cña mĂ©t sĂš sau khi dÞch ph¶i hoÆc dÞch trži n lÇ n. 11. §Õ m sĂš lÇ n xuÊ t hiÖ n cña tĂ” mĂ©t trong 1 c© u 12. Thay thÕ 1 tĂ” trong 1 c© u b» ng 1 tĂ” khžc. 13.NhË p hĂ€ tÂȘ n, tžch hoten ra l” m 2 phÇ n hĂ€ v” tÂȘ n riÂȘ ng. 14.ViÕ t ch­ng tr× nh ŸÊi cžc kĂœ tĂč ¼Çu cña cžc tĂ” ra chĂ· in, cžc kĂœ tĂč cßn lÂči ra chĂ· th­ĂȘng. 15.ViÕ t ch­ng tr× nh cho phÐp ta kiÓ m tra mĂ©t password l” Ÿóng hay sai (nhË p tĂši Âźa password 3 lÇ n). 16.Cho chuçi s, viÕ t ch­ng tr× nh di chuyÓ n chĂ· tĂ” bÂȘ n trži qua bÂȘ n ph¶ i cña m” n h× nh tÂč i dßng 5. Quž tr× nh di chuyÓ n dĂ”ng lÂč i khi ta Ê n phÝ m ESC. 17. BÂčn h∙y viÕt ch­ng tr× nh tÝ nh giž trÞ tĂŠng cĂ©ng cña mĂ©t s¶n phÈm cĂŁ kÓ c¶ thuÕ, biÕt r»ng tĂ» suÊt thuÕ l” 13.6% tÝ nh trÂȘn giž gĂšc. Giž gĂšc cña s¶n phÈm Ÿ­ßc ŸÀc v” o, v” cÇ n in ra: - TiÒ n thuÕ - Giž ¼∙ cĂŁ thuÕ 18. Trong mĂ©t kĂș thi cuĂši khĂŁa, cžc hĂ€c viÂȘ n ph¶ i thi 4 m«n : m«n I hÖ sĂš 2, m«n II hÖ sĂš 4, m«n III hÖ sĂš 1, m«n IV hÖ sĂš 2, ÂźiÓ m cžc m«n cho tĂši Âźa l” 10 ÂźiÓ m. ViÕ t ch­ng tr× nh nhË p ÂźiÓ m cña 4 m«n v” tÝ nh ÂźiÓm trung b× nh. 19. MĂ©t ng­ĂȘi bžn r­ßu bžn N chai r­ßu cĂŁ Ÿn giž l” P. NÕu tĂŠng sĂš tiÒn v­ßt quž 5000000 th× viÖ c chuyÂȘ n chĂ« l” miÓ n phÝ , nÕ u kh«ng phÝ chuyÂȘ n chĂ« th­ĂȘng Ÿ­ßc tÝ nh b»ng 1%tĂŠng trÞ giž h”ng. ViÕt ch­ngtr× nhnhËpv”oN,P. In ra cžc chi tiÕ t TĂŠng trÞ giž h” ng, tiÒ n chuyÂȘ n chĂ«, v” tĂŠng sĂš tiÒn ph¶i tr¶. 20. MĂ©t sinh viÂȘ n dĂč tuyÓ n cĂŁ cžc chi tiÕ t sau : hĂ€ tÂȘ n, ÂźiÓm L1 cña lÇn 1, ÂźiÓm L2 cña lÇ n 2, ÂźiÓ m thi cuĂši kĂș CK. ViÕ t ch­ng tr× nh xžc ¼Þnh xem mĂ©t sinh viÂȘn cĂŁ Ÿ­ßc tuyÓn hay bÞ loÂči, biÕt r»ng sÏ Ÿ­ßc tuyÓn nÕu ÂźiÓm Ÿ­ßc tÝ nh theo c«ng thĂžc sau lĂ­n hÂŹn hay b» ng 7 : Max( (L1+L2+CK)/3, CK). 21. ViÕt ch­ng tr× nh cho biÕt tiÒn l­ng h”ng ng”y cña mĂ©t ng­ĂȘi giĂ· trÎ. Cžch tÝ nh l” 15000Âź/giĂȘ cho mçi giĂȘ tr­íc 14 giĂȘ v” 25000 Âź/giĂȘ cho mçi giĂȘ sau 14 giĂȘ. GiĂȘ bŸ t ¼Ç u v” giĂȘ kÕ t thĂłc c«ng viÖ c Ÿ­ßc nhË p tĂ” b” n phÝ m. 22. Cho 3 sĂš thĂčc x, y z a. TĂ„n tÂč i hay kh«ng mĂ©t tam gižc cĂŁ 3 cÂč nh cĂŁ Ÿé d” i x, y, z ? b. NÕ u l” tam gižc th× nĂŁ vu«ng, c© n, ¼Ò u hay th­ĂȘng 23. Gi¶ i hÖ ph­ng tr× nh bË c nhÊ t:
  • 43. KĂŒ thuËt lËp tr× nh 43 ïŁČïŁČïŁČïŁČ ax+by = c a’x+b’y = c’ H­íng dÉ n: D = a b a’ b’ = ab’ - a’b Dx= c b c’ b’ = cb’ - c’b Dy= a c a’ c’ = ac’ - a’c if D!= 0 x= Dx/D; y= Dy/ D else if (( Dx != 0) | | ( Dy != 0)) pt v« nghiÖ m else pt v« ¼Þnh 24. Gi¶ i hÖ ph­ng tr× nh 3 È n sĂš bË c nhÊ t ïŁČ a1 x + b1 y + c1 z = d1 a2 x + b2 y + c2 z = d2 a3 x + b3 y + c3 z = d3 25. ViÕ t ch­ng tr× nh gi¶ i ph­ng tr× nh trĂŻng ph­ng ax4 + bx2 + c = 0 26. Ng­ĂȘi ta muĂšn lËp hĂŁa Ÿn cho khžch h”ng cña C«ng ty ÂźiÖn lĂčc. ChØ sĂš ¼Çu v” chØ sĂš cuĂši kĂș sÏ Ÿ­ßc cho biÕt. BiÕt r»ng biÓu giž Ÿ­ßc tÝ nh tĂŻytheoÂźiÖn nš ng tiÂȘ u thĂŽ. - NÕ u ÂźiÖ n nš ng tiÂȘ u thĂŽ nhĂĄ hÂŹn 100Kwh, giž mçi Kwh l” 500Âź. - NÕu ÂźiÖn nšng tiÂȘu thĂŽ tĂ” 100Kwh trĂ« lÂȘn,th× mçiKwhd«irasÏ Ÿ­ßctÝ nh giž l” 800Âź - PhÝ khu vĂčc l” 5000Âź cho mçi khžch h” ng. ViÕ t ch­ng tr× nh tÝ nh tiÒ n ph¶ i tr¶ tĂŠng cĂ©ng gĂ„m tiÒ n ÂźiÖ n, v” phÝ khu vĂčc 27. BiÕt 2 sĂš X, Y biÓu diÓn thĂȘi gian tÝ nh theo gi©y. Ng­ĂȘi ta muĂšn viÕt ch­ng tr× nh : - §Àc 2 sĂš n” y v” in ra tĂŠng cña chĂłng - ChuyÓ n cžc sĂš n” y v” tĂŠng ra dÂč ng giĂȘ, phÜ t, gi© y cña chĂłng rĂ„i in ra. KiÓ m xem kÕ t qu¶ cña 2 cžch tÝ nh cĂŁ nh­ nhau kh«ng? 28. ViÕ t ch­ng tr× nh in b¶ ng cöu ch­ng tĂ” 2 → 9 theo h” ng ngang 29. In tam gižc *, h× nh chĂ· nhË t *, rçng - ¼Æ c 30. VÏ l­u ŸÄ v” viÕ t ch­ng tr× nh tÝ nh : a. 1+2+...+n
  • 44. KĂŒ thuËt lËp tr× nh 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, xžc ¼Þnh cžc tĂŠng sau Ÿ© y sao cho sĂš hÂč ng cuĂši cĂŻng cña tĂŠng l” kh«ng Ÿžng kÓ (sĂš hÂč ng cuĂši cĂŻng < epsilon ) a. 1/1+ 1/2+ 1/3+1/4+..... b. 1+ 1/22 + 1/32 +....+... 32. ViÕ t ch­ng tr× nh in ra b¶ ng m∙ ASCII, 16 kĂœ tĂč trÂȘ n 1 dßng. 33. VÏ l­u ŸÄ v” viÕ t ch­ng tr× nh : a. XÐt mĂ©t sĂš cĂŁ ph¶ i l” sĂš nguyÂȘ n tĂš hay kh«ng ? b. In trÂȘ n m” n h× nh 100 sĂš nguyÂȘ n tĂš ¼Ç u tiÂȘ n 34. ViÕ t ch­ng tr× nh cho phÐp mĂ©t kĂœ tĂč ngÉ u nhiÂȘ n rÂŹi trÂȘ n m” n h× nh. NÕ u ng­ĂȘi sö dĂŽng kh«ng kÞp Ên phÝ m t­ng Ăžng v” ¼Ó chÂčm Ÿžy m”n h× nh th× thua cuĂ©c. 35. Cho h” m Fibonacci: Fn = { 1 ; n=0,1 Fn-1 + Fn-2 ; n>=2 a. T× m Fn, vĂ­i n do ta nhË p b. In ra N phÇ n tö ¼Ç u tiÂȘ n cña d∙ y Fibonacci 36. ViÕ t ch­ng tr× nh ŸÀc v”o sĂš nguyÂȘn N v” in ra 1*2*3*..*N cho ¼Õn khi N <=0. 37. Cho 1 d∙ y gĂ„m mĂ©t triÖ u tĂ” 32 bit, h∙ y ¼Õ m sĂš bit 1 trong mçi tĂ”. 38. ViÕ t ch­ng tr× nh Âźožn sĂš : ng­ĂȘi chÂŹi sÏ Âźožn 1 sĂš trong phÂčm vi tĂ” 0 ¼Õn 100, tĂši Âźa 5 lÇn. Ch­ng tr× nh kiÓm tra kÕt qu¶ v” xuÊt th«ng bžo h­íng dÉn: - SĂš bÂč n Âźožn lĂ­n hÂŹn - SĂš bÂč n Âźožn nhĂĄ hÂŹn - BÂč n Âźožn Ÿóng - Mžy thŸ ng cuĂ©c
  • 45. KĂŒ thuËt lËp tr× nh 45 III. H”m - §Ö quy: III.1. H”m: III.1.1. MĂŽc ¼Ý ch: H”m l” mĂ©t ch­ng tr× nh con cña ch­ng tr× nh chÝ nh, vĂ­i cžc mĂŽc ¼Ý ch sau: * Tržnh viÖc lÆp Âźi lÆp lÂči cžc ÂźoÂčn ch­ng tr× nh giĂšng nhau, nhĂȘ Ÿã, ta sÏ tiÕ t kiÖ m lĂłc lË p tr× nh. * TĂŠ chĂžc ch­ng tr× nh: DĂŻng h” m ta sÏ ph© n m¶nh ch­ng tr× nh th”nh nhĂ·ng khĂši nhĂĄ Ÿéc lË p, mçi khĂši l” mĂ©t h”m thĂčc hiÖn mĂ©t c«ng viÖc n”o Ÿã. TĂ”ngh”msÏ Ÿ­ßclËptr× nh,kiÓmtraho”nchØ nh;SauŸã,takÕtlÂči¼Ó tÂčoch­ng tr× nh ho” n chØ nh. NhĂȘ vË y, ch­ng tr× nh vÒ sau dÓ hiÓ u v” dÓ sĂ·a. * TÝ nh Ÿéc lËp: cho phÐp h”m Ÿéc lËp vĂ­i ch­ng tr× nh chÝ nh. VÝ dĂŽ h”m cĂŁ nhĂ·ng biÕn cĂŽc bĂ© m” ch­ng tr× nh chÝ nh v” cžc h”m khžc kh«ng thÓ ŸÎng tĂ­i. Do Ÿã, nÕ u ta cĂŁ khai bžo cžc biÕ n trĂŻng tÂȘ n vĂ­i cžc h” m khžc th× cĂČng kh«ng sĂź ¶ nh h­ëng tĂ­i cžc biÕ n trĂŻng tÂȘ n Ÿã. ChĂł Ăœ : - C kh«ng cho phÐp cžc h” m lĂ„ng nhau nghÜ a l” cžc h” m ¼Ò u ngang cÊ p nhau (cĂŁ thÓ gĂ€i lÉ n nhau). - C kh«ng ph© n biÖ t thñ tĂŽc hay h” m, m” chØ quan t© m ¼Õ n kÕ t qu¶ tr¶ vÒ cña h” m. NÕ u h” m kh«ng tr¶ vÒ kÕ t qu¶ g× c¶ th× cĂŁ thÓ xem l” thñ tĂŽc. VÝ dĂŽ: VÏ h× nh chĂ· nhË t ¼Æ c b» ng dÊ u ‘*’: #include <stdio.h> #include <conio.h> void ve_hcn(int d,int r) // khai bžo void cho biÕ t h” m kh«ng tr¶ vÒ trÞ n” o c¶ { int i,j ; // i, j l” 2 biÕ n cĂŽc bĂ© trong h” m 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); // lĂȘi gĂ€i h” m getch(); }
  • 46. KĂŒ thuËt lËp tr× nh 46 III.1.2. CĂł phžp ¼Þnh nghÜ a h”m CĂł phžp: KiÓ u tÂȘ nh” m (ds ŸÚi sĂš) { Khai bžo biÕ n cĂŽc bĂ©; lÖ nh; [ return (expr);] } - KiÓu: L” kÕt qu¶ tr¶ vÒ cña h”m. NÕu kh«ng ghi kiÓu, C sÏ tĂč hiÓu l” kiÓu int. NÕ u kh«ng muĂšn cĂŁ kÕ t qu¶ tr¶ vÒ th× ghi kiÓ u void. - Danh sžch ŸÚi sĂš: LiÖt kÂȘ cžc ŸÚi sĂš v” kiÓu cña ŸÚi sĂš gĂ«i¼Õnh”m,cžch nhau bĂ«i dÊ u ','. NÕ u kh«ng cĂŁ ŸÚi sĂš ta chØ cÇ n ghi() - LÖ nh return: cĂŁ cžc dÂč ng sau: return; return (expr); return expr; VÝ dĂŽ: H” m chuyÓn chĂ· th­ĂȘng 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(); } L­u Ăœ : - HÂč n chÕ cña lÖ nh return l” chØ tr¶ vÒ mĂ©t kÕ t qu¶ . - LÖ nh return kh«ng nhÊ t thiÕ t ph¶ i Ă« cuĂši h” m. NĂŁ cĂŁ thÓ xuÊ t hiÖ n Ă« bÊt kĂș nÂŹi n” o trong h” m. Khi gÆ p lÖ nh return, quyÒ n ÂźiÒ u khiÓ n sÏ chuyÓ n ngay vÒ ch­ng tr× nh gĂ€i. III.1.3. Cžc loÂči truyÒ n ŸÚi sĂš a. TruyÒ n theo trÞ
  • 47. KĂŒ thuËt lËp tr× nh 47 #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 chÂč y ch­ng tr× nh trÂȘ n: Nhap a b : 12 24 Gia tri lon nhat =24 Gia tri a =12 Gia tri b=24 NhË n xÐt: - Ta nhË n thÊ y r» ng giž trÞ hai biÕ n a, b tr­íc v” sau khi v” o h” m max l” kh«ng thay ŸÊi (mÆ c dĂŻ trong h” m max, c¶ hai biÕ n a v” b ¼Ò u thay ŸÊi); Ÿã l” cÂŹ chÕ cña sĂč truyÒ n ŸÚi sĂš theo trÞ. LĂȘi gĂ€i h”m: tÂȘ nh”m (ds ŸÚisĂšthĂčc); - NÕu truyÒn ŸÚi sĂš theo trÞ th× ŸÚi sĂš thĂčc cĂŁ thÓ l” biÕn,hoÆccĂŁ thÓ l” biÓu thĂžc. VÝ dĂŽ: c = max(1000,b); b. TruyÒ n theo ¼Þa chØ : ŸÚi sĂš thĂčc l” ¼Þa chØ cña biÕ n #include <stdio.h> #include <conio.h>
  • 48. KĂŒ thuËt lËp tr× nh 48 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); // a l” tham sĂš thĂčc biÕ n printf("nGia tri lon nhat =%d",c); printf("nGia tri a =%d",a); printf("nGia tri b =%d",b); getch(); } Gi¶ sö ta chÂč y ch­ng tr× nh trÂȘ n: Nhap a b : 12 24 Gia tri lon nhat =24 Gia tri a =1200 Gia tri b=24 NhË n xÐt: - Ta nhËn thÊy r»ng giž trÞ biÕn a tr­íc v” sau khi v”o h”m max ¼∙ thay ŸÊi; Ÿã l” cÂŹ chÕ cña sĂč truyÒ n ŸÚi sĂš theo ¼Þa chØ . LĂȘi gĂ€i h”m: tÂȘ nh”m (tÂȘ nbiÕ n); - NÕu truyÒn ŸÚi sĂš theo ¼Þa chØ th× tham sĂš thĂčc bŸtbuĂ©cph¶il” mĂ©ttÂȘnbiÕn. VÝ dĂŽ: c = max(1000,b); l” sai VÝ dĂŽ: ViÕ t h” m giaohožn ¼Ó hožn ŸÊi giž trÞ cña 2 biÕ n nguyÂȘ n a,b. void giaohoan (int &a, int &b) { int tam; tam = a; a = b; b = tam; }
  • 49. KĂŒ thuËt lËp tr× nh 49 void main() { int a,b; printf ("a, b = "); scanf ("%d %d", &a, &b); giaohoan(a, b); } * TruyÒ n ŸÚi sĂš l” m¶ ng gĂ€ih” m (mang) h” m (kiÓ u mang[]) hoÆ c h” m(kiÓ u *mang) VÝ dĂŽ: CĂ©ng thÂȘ m mĂ©t h» ng sĂš v” o m¶ ng tÂȘ n l” dayso. #define SIZE 5 // d∙ y 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 bžo nguyÂȘ n mÉu cña h”m - Khai bžo h”m theo nguyÂȘn mÉu ¼ßi hĂĄi ph¶i khai bžo kiÓu dĂ· liÖu cña ŸÚi sĂš n» m trong ¼Þnh nghÜ a h” m chĂž kh«ng ¼Æ t chĂłng trÂȘ n cžc dßng riÂȘ ng. - C kh«ng nhÊ t thiÕ t ph¶ i khai bžo h” m theo nguyÂȘ n mÉ u. Tuy nhiÂȘ n, nÂȘ n cĂŁ v× nĂŁ cho phÐp ch­ng tr× nh dÞch phžt hiÖn cĂŁ lçi do kh«ng Ÿóng kiÓu dĂ· liÖu giĂ·a trÞ truyÒ n ¼Õ n h” m v” trÞ m” h” m mong muĂšn. VÝ dĂŽ: float dinhthuc (float a, float b, float c, float d) { return (a*d- b*c); } void main()
  • 50. KĂŒ thuËt lËp tr× nh 50 { float a ,b, a1, b1; printf(“Nhap a,b,a1,b1:”); scanf(“%f %f %f %f,&a,&b,&a1,&b1); printf(“Dinh thuc = %f”,dinhthuc(a,b,a1,b1); getch(); } III.1.5. PhÂčm vi tĂ„n tÂči cña biÕ n: a. BiÕn to”n cĂŽc: l” biÕn Ÿ­ßc khai bžo ngo”i cžc h”m ( kÓ c¶ h”m main). NĂŁ Ÿ­ßc phÐp truy nhËp ¼Õn tĂ” tÊt c¶ cžc h”m trong suĂšt thĂȘi gian ch­ng tr× nh hoÂč t Ÿéng. VÝ dĂŽ: Khai bžo ngo” i h” m main KiÓ u tÂȘ n biÕ n; // biÕ n to” n cĂŽc void main() { } b. BiÕ n cĂŽc bĂ©: l” biÕ n Ÿ­ßc khai bžo trong cžc h” m, kÓ c¶ trong h” m main. NĂŁ kh«ng cho phÐp cžc h” m khžc truy nhË p ¼Õ n nĂŁ. NĂŁ tĂ„n tÂč i trong thĂȘi gian sĂšng cña h” m chĂža nĂŁ. void main() { kiÓ u tÂȘ n biÕ n; → biÕ n cĂŽc bĂ© trong h” m main() } c. BiÕ n ngo”i : l” biÕ n m” cžc h” m cĂŁ thÓ truy xuÊ t tĂ­i m” kh«ng ph¶ i ph© n phĂši bĂ© nhĂ­. NĂŁ Ÿ­ßc dĂŻng Ă« cžc h” m trÂȘ n cžc tË p tin khžc nhau liÂȘ n kÕ t lÂč i. External KiÓ u tÂȘ n biÕ n; void main() { } d. BiÕ n tÜ nh : l” mĂ©t biÕ n cĂŽc bĂ© cña mĂ©t h” m nh­ng vÉn giĂ· giž trÞ cña lÇ n gĂ€i h” m Ÿã cuĂši cĂŻng void main() { static KiÓ u tÂȘ nbiÕ n; } e. BiÕ n thanh ghi : l” mĂ©t biÕ n sö dĂŽng cžc thanh ghi cña CPU ¼Ó tš ng tĂšc Ÿé truy xuÊ t register KiÓ u tÂȘ nbiÕ n ;
  • 51. KĂŒ thuËt lËp tr× nh 51 III.1.6. Cžc dÉn h­íng tiÒ n xö lĂœ III.1.6.1. #define a. ¼Þnh nghÜ a h»ng: #define tÂȘ n h» ng giž trÞ VÝ dĂŽ: #define PI 3.14 #define MAX 100 #define THONGBAO “HÕ t Giž" #define khoangtrang ‘ ‘ b. ¼Þnh nghÜ a Macro: #define tÂȘ nmacro (ŸÚi sĂš ) thao tžc VÝ dĂŽ: #define sqr (x) x*x #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 cžc thao tžc Macro nÂȘn sö dĂŽng cžc dÊu ngoÆc ¼Ó tržnh dÉn ra mĂ©t kÕ t qu¶ sai VÝ dĂŽ:#define max (a,b) ((a) > (b) ? (a) : (b)) #define hožnvÞ (a,b) { int tÂč m =a; a= b; b= tÂč m;} #define error (n) printf (“ error %d”, n) D­íi Ÿ© y mĂ©t sĂš Macro ph© n tÝ ch kĂœ tĂč, tÊ t c¶ ¼Ò u trong <ctype. h>. Cžc macro n”y tr¶ vÒ trÞ khžc 0 nÕu th”nh c«ng. §Úi vĂ­i mçi macro, th”nh c«ng Ÿ­ßc ¼Þnh nghÜ a nh­ sau: Macro KĂœ tĂč isalpha (c) c l” kĂœ tĂč a→ z, A→ Z isupper (c) c l” kĂœ tĂč A → Z islower (c) c l” kĂœ tĂč a → z isdigit (c) c l” kĂœ sĂš 0 → 9 isxdigit (c) 0 → 9, A → F, a → z iscntrl(c) c l” kĂœ tĂč xĂŁa hoÆ c kĂœ tĂč ÂźiÒ u khiÓ n (0x7F hoÆ c 0x00 ¼Õ n 0x1F) ispace (c) c l” kĂœ tĂč space, tab, carriage return, new line (0x09 ¼Õ n 0x0D, 0x20) Khai bžo: char c;
  • 52. KĂŒ thuËt lËp tr× nh 52 * Ph©n biÖ t Macro vĂ­i h”m: - DĂŻng Macro: truy xuÊ t nhanh, tĂšn bĂ© nhĂ­. - DĂŻng h” m: ng­ßc lÂč i III.1.6.2. #include L” tiÒ n xö lĂœ dĂŻng ¼Ó kÕ t nĂši tË p trung khai bžo trong include vĂ­i tË p tin Âźang l” m viÖ c. # include < tÂȘ n tË p tin.h> # include “ tÂȘ n tË p tin.h” DÂč ng < > : Âźi t× m tË p tin.h trong th­ mĂŽc ¼∙ Ÿ­ßc chØ ¼Þnh trong Include Directories. DÂč ng “ ”: t× m tË p tin.h trong th­ mĂŽc Source Directories, nÕ u kh«ng cĂŁ, nĂŁ Âźi t× m trong th­ mĂŽc ¼∙ Ÿ­ßc chØ ¼Þnh trong Include Directories. III.2. §Ö qui (Recursion): III.2.1. Khži niÖ m: §Ö qui l” 1 c«ng cĂŽ rÊ t th­ĂȘng dĂŻng trong khoa hĂ€c mžy tÝ nh v” trong tožn hĂ€c ¼Ó gi¶ i quyÕ t cžc vÊ n ¼Ò . Tr­íc hÕ t, chĂłng ta h∙ y kh¶ o sžt thÕ n” o l” mĂ©t vÊ n ¼Ò cĂŁ ¼Ö qui qua vÝ dĂŽ sau: TÝ nh S(n) = 1 +2 +3 +4+ ...+n Ta nhË n thÊ y r» ng, c«ng thĂžc trÂȘ n cĂŁ thÓ diÔ n ÂźÂč t lÂč i nh­ sau: S(n) = S(n-1) + n, v” S(n-1) = S(n-2) + (n-1) ..... S(2) = S(1) + 2 S(1) = 1 Nh­ vËy,mĂ©tvÊn¼Ò cĂŁ ¼Ö quil” vÊn¼Ò Ÿ­ßc¼ÞnhnghÜ alÂčib»ngchÝ nhnĂŁ. §Ó tÝ nh S(n): ta cĂŁ kÕ t qu¶ cña S(1), thay nĂŁ v”o S(2), cĂŁ S(2) ta thay nĂŁ v”o S(3) ...., cĂž nh­ vË y cĂŁ S(n-1) ta sÏ tÝ nh Ÿ­ßc S(n) *MĂ©t sĂš vÝ dĂŽ 1. H”m giai thĂ”a: n! = { 1*2*3*......*(n-1)*n , n>0 1 , n=0 = { n*(n-1)! , n>0 1 , n=0
  • 53. KĂŒ thuËt lËp tr× nh 53 NhËn xÐt: - Theo c«ng thĂžc trÂȘ n, ta nhË n thÊ y trong ¼Þnh nghÜ a cña n giai thĂ”a (n!) cĂŁ ¼Þnh nghÜ a lÂč i chÝ nh nĂŁ nÂȘ n h” m giai thĂ”a cĂŁ ¼Ö qui. - VĂ­i n >=0 , ÂźiÒ u kiÖ n dĂ”ng tÝ nh h” m giai thĂ”a l” n=1 2. H”m FIBONACCI: Fn = ïŁČ 1 ; n =0,1 Fn-1 + Fn-2 ; n>1 - Theo ¼Þnh nghÜ a trÂȘ n, h” m Fibonacci cĂŁ lĂȘi gĂ€i ¼Ö qui. - Quž tr× nh tÝ nh dĂ”ng lÂč i khi n= 1 III.2.2. H”m ¼Ö qui trong ng«n ngĂ· C: Ng«n ngĂ· C cĂŁ trang bÞ cÂŹ chÕ gĂ€i h”m ¼Ö qui. H”m ¼Ö qui l” h”m gĂ€i ¼Õn chÝ nh h” m Ÿã mĂ©t cžch trĂčc tiÕ p hay gižn tiÕ p. VÝ dĂŽ 1: ViÕ t h” m ¼Ö qui tÝ nh S(n) = 1 + 2 + 3 +...+n #include <stdio.h> #include <conio.h> int S(int n) { if (n==1) // ÂźiÒ u kiÖ n dĂ”ng return 1; else // b­íc ¼Ö qui return (S(n-1) + n); } void main() { int n; printf("n Nhap n = "); scanf("%d",&n); printf("Tong S = 1 + 2 + ...+ %d = %d",n, S(n)); getch(); } VÝ dĂŽ 2 : ViÕ t h” m ¼Ö qui tÝ nh h” m giai thĂ”a n. long giaithua(int n) { return ((n==0) ? 1 : n*giaithua(n-1)); } III.2.3. H”m ¼Ö qui v” Stack: MĂ©t ch­ng tr× nh C th­ĂȘng gĂ„m cĂŁ h”m main() v” cžc h”m khžc. Khi chÂčy ch­ng tr× nh C th× h” m main() sÏ Ÿ­ßc gĂ€i chÂč y tr­íc, sau Ÿã h”m main() gĂ€i cžc h” m khžc, cžc h” m n” y trong khi chÂč y cĂŁ thÓ gĂ€i cžc h” m khžc nĂ·a. Khi
  • 54. KĂŒ thuËt lËp tr× nh 54 mĂ©t h” m Ÿ­ßc gĂ€i, th× mĂ©t khung kÝ ch hoÂč t cña nĂŁ Ÿ­ßc tÂč o ra trong bĂ© nhĂ­ stack. Khung kÝ ch hoÂčt n”y chĂža cžc biÕn cĂŽc bĂ© cña h”m v” mÉu tin hoÂčt Ÿéng cña h” m. MÉ u tin hoÂč t Ÿéng chĂža ¼Þa chØ trĂ« vÒ cña h”m gĂ€i nĂŁ v” cžc tham sĂš khžc. BiÕ n cĂŽc bĂ© §Þa chØ trĂ« vÒMÉ u tin hoÂč t Ÿéng ïŁČ Th«ng sĂš khžc Khung kÝ ch hoÂč t Sau khi h” m Ÿ­ßc gĂ€i ¼∙ thi h” nh xong th× ch­ng tr× nh sÏ thĂčc hiÖn tiÕp dßng lÖ nh Ă« ¼Þa chØ trĂ« vÒ cña h” m gĂ€i nĂŁ, ŸÄng thĂȘi xĂŁa khung kÝ ch hoÂč t cña h” m Ÿã khĂĄi bĂ© nhĂ­. Gi¶ sö ta cĂŁ cÂŹ chÕ gĂ€i h” m trong mĂ©t ch­ng tr× nh C nh­ sau: main() { ...... A(); .....; B(); ....; } A() {.....; C(); ....; D(); } B() {.....; D(); } C() {......; D(); .....; } D() {........; ........; } H× nh sau Ÿ©y cho ta thÊy sĂč chiÕm dĂŽng bĂ© nhĂ­ stack khi chÂčy ch­ng tr× nh C nh­ m« t¶ Ă« trÂȘ n. bĂ© nhĂ­ Stack D C C C D D A A A A A A A B B B M M M M M M M M M M M M M thĂȘi gian T­ng tĂč vĂ­i tr­ĂȘng hĂźp h” m ¼Ö qui, khi gĂ€i ¼Ö qui lÉ n nhau th× mĂ©t loÂč t cžc khung kÝ ch hoÂčt sÏ Ÿ­ßc tÂčo ra v” nÂčp v”o bĂ© nhĂ­ Stack. CÊp ¼Ö qui c”ngcao th× sĂš khung kÝ ch hoÂčt trong Stack c”ng nhiÒu, do Ÿã, cĂŁ kh¶ nšng dÉn ¼Õn tr”n Stack (Stack overflow). Trong nhiÒu tr­ĂȘng hĂźp khi lËp tr× nh, nÕu cĂŁ thÓ Ÿ­ßc ta nÂȘ n gĂŹ ¼Ö qui cho cžc b” i tožn.
  • 55. KĂŒ thuËt lËp tr× nh 55 IV. Structure: Cžc kiÓu Ÿn gi¶n tÂči mĂ©t thĂȘi ÂźiÓm chØ l­u giĂ· Ÿ­ßc mĂ©t giž trÞ duy nhÊt. Cßn mĂ©t biÕ n kiÓ u m¶ ng dĂŻng ¼Ó l­u trĂ· cžc giž trÞ cĂŻng kiÓu dĂ· liÖu vĂ­i nhau, chÂœ ng hÂč n nh­ mĂ©t d∙ y sĂš, mĂ©t d∙ y cžc kĂœ tĂč,...Nh­ng trong thĂčc tÕ , ÂźiÒ u n” y vÉ n ch­a Ÿñ v× cžc th” nh phÇ n m” ta l­u giĂ· th­ĂȘng l” khžc kiÓ u dĂ· liÖ u vĂ­i nhau. VÝ dĂŽ : Ta muĂšn l­u giĂ· cžc th«ng tin vÒ mĂ©t sinh viÂȘ n nh­ sau : MASO, HO, TEN, NGAYSINH, NOISINH, PHAI, DIACHI, LOP . VĂ­i cžc th” nh phÇ n nh­ vËy, th× rĂą r”ng cžc th”nh phÇn cña 1 sinh viÂȘn kh«ng thÓ cĂŻng kiÓu m” ph¶i thuĂ©c cžc kiÓ u khžc nhau, cĂŽ thÓ l” : - MASO, HO, TEN : m¶ ng chĂ· - NGAYSINH : int ng” y , thžng , nš m ; - NOISINH : m¶ ng chĂ· - PHAI : unsigned int; - LOP : m¶ ng chĂ·; Do Ÿã, ¼Ó l­u trĂ· Ÿ­ßc cžc th”nh phÇn khžc nhau cña mĂ©t ŸÚi t­ßng ta ph¶i sö dĂŽng mĂ©t kiÓ u dĂ· liÖ u trong C l” Structure. (t­ng tĂč nh­ record trong Pascal) IV.1. §Þnh nghÜ a: MĂ©t biÕ n cĂŁ kiÓ u structure Ÿ­ßc dĂŻng ¼Ó l­u trĂ· mĂ©t ŸÚi t­ßng cĂŁ nhiÒ u th” nh phÇ n. Cžc th” nh phÇ n cĂŁ thÓ thuĂ©c cžc kiÓ u dĂ· liÖ u khžc nhau. IV.2. Khai bžo: MuĂšn khai bžo kiÓ u hocvien dĂŻng ¼Ó l­u trĂ· hĂ€, tÂȘ n, ÂźiÓ m m«n TOAN,LY,HOA, §TB, XÕ p loÂč i cña mĂ©t hĂ€c viÂȘ n, ta cĂŁ : struct hocvien { char ho[30]; char ten[7]; float toan, ly, hoa , dtb; char xeploai[10]; } ; - §Ó khai bžo biÕ n hv cĂŁ kiÓ u hocvien : struct hocvien hv; - §Ó truy xuÊ t tĂ­i mĂ©t th” nh phÇ n, ta dĂŻng dÊ u chÊ m, vÝ dĂŽ nh­: hv.ho ¼Ó truy xuÊ t tĂ­i hĂ€ cña hĂ€c viÂȘ n. * Khai bžo kÕ t hĂźp: vĂ”a khai bžo kiÓu structure vĂ”a khai bžo biÕn cĂŁ kiÓu Ÿã. struct hocvien
  • 56. KĂŒ thuËt lËp tr× nh 56 { char ho[30]; char ten[7]; float toan, ly, hoa , dtb; char xeploai[10]; } hv1, hv2; // khai bžo 2 biÕ n hv1, hv2 cĂŻng kiÓ u hocvien - Khai bžo structure lĂ„ng 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 tr­ĂȘng hĂźp n” y, ¼Ó truy xuÊ t tĂ­i thžng sinh cña hĂ€c viÂȘ n hv, ta viÕ t nh­ sau: hv.ngsinh.thang. V. FILE: V.1. File všn b¶n: - File vš n b¶ n l” file Ÿ­ßc l­u trĂ· d­íi dÂč ng kiÓ u kĂœ tĂč CĂŁ 2 cžch truy xuÊ t theo kiÓ u kĂœ tĂč. - Truy xuÊ t theo tĂ”ng kĂœ tĂč - Truy xuÊ t theo tĂ”ng dßng V.1.1. Khai bžo tËp tin: Khai bžo biÕ n kiÓ u file: FILE *fptr V.1.2. MĂ« tËp tin: fptr = fopen (“tÂȘ n file”, “kiÓ u”); - Trong "tÂȘ nfile" , ta cĂŁ thÓ chØ ¼Þnh mĂ©t Ÿ­ĂȘng dÉ n ¼Ç y Ÿñ nh­ sau
  • 57. KĂŒ thuËt lËp tr× nh 57 "C:THUKTLTVIDU.TXT". H” m fopen nÕ u mĂ« file th” nh c«ng sÏ tr¶ vÒ mĂ©t con trĂĄ file cho tËp tin "tÂȘn file", v” con trĂĄ n”y Ÿ­ßc cÊt giĂ· trong biÕn fptr (biÕn kiÓ u FILE). NÕ u kh«ng cĂŁ file "tÂȘ n file" trÂȘ n dÜ a th× h” m fopen sÏ tr¶ vÒ trÞ NULL ( nÕ u fptr == NULL nghÜ a l” kh«ng cĂŁ file Ÿã ) - KiÓ u: gĂ„m cĂŁ: “r“ : ŸÀc ( file ph¶ i cĂŁ sÂœ n, nÕ u kh«ng cĂŁ file, h” m fopen tr¶ vÒ trÞ NULL) “w“ : ghi ( nÕ u cĂŁ file sÏ xĂŁa file cĂČ ) “a” : nĂši v” o cuĂši tË p tin “r +”: ŸÀc / ghi, tË p tin ph¶ i cĂŁ sÂœ n trÂȘ n dÜ a “a+”: ŸÀc, ghi v”o cuĂši tËp tin, nÕu trÂȘn dÜ a ch­a cĂŁ tËp tin th× nĂŁ sÏ Ÿ­ßc tÂč o ra. VÝ dĂŽ: §Õ m sĂš kĂœ tĂč trong file VB.TXT. #include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *fptr; int dem=0; char ch; if ((fptr = fopen("VB.txt", "r")) == NULL) // mĂ« file ¼Ó ŸÀc { printf("File nay khong the mon"); exit(0); // kÕ t thĂłc ch­ng tr× nh, h”m exit thuĂ©c vÒ stdlib.h } while (!feof(fptr)) { ch=fgetc(fptr); // ŸÀc 1 kĂœ tĂč trong file fptr ra dem++; } fclose(fptr); printf("nSo ky tu trong file VB.TXT =%d",dem); getch(); } V.1.3. §ãng file: fclose (fptr)
  • 58. KĂŒ thuËt lËp tr× nh 58 V.1.4. §Àc / ghi kĂœ tĂč: Cho biÕ n kĂœ tĂč charch; - §Àc kĂœ tĂč tĂ” tË p tin ch = getc (fptr) - Ghi kĂœ tĂč lÂȘ n tË p tin putc (ch, fptr) VÝ dĂŽ 1: TÂčo 1 file trĂčc tiÕp tĂ” b”n phÝ m. Quž tr× nh tÂčo sÏ dĂ”ng lÂči khi ta Ên phÝ m 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) // mĂ« file mĂ­i ¼Ó ghi { printf("Viec tao file co loin"); exit(0); } while ((ch=getche()) !='r') putc(ch,fptr); fclose(fptr); } VÝ dĂŽ 2: In nĂ©i dung tË p tin ra m” n h× nh #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)
  • 59. KĂŒ thuËt lËp tr× nh 59 { printf("Viec mo file co loin"); exit(0); } while ((ch=getc(fptr)) !=EOF) printf("%c",ch); fclose(fptr); }
  • 60. KĂŒ thuËt lËp tr× nh 60 VÝ dĂŽ 3: Ch­ng tr× nh ¼Õ m sĂš tĂ” trong file #include <stdio.h> #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 loin"); 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 chuçi kĂœ tĂč: * H” m fgets (chuçi, chiÒ ud” i, fptr); H” m fgets ŸÀc 1 chuçi kĂœ tĂč tĂ” trong file fptr v” o biÕ n <chuçi> vĂ­i chiÒ u d” i tĂši Âźa l” <chiÒ ud” i>. H” m n” y tr¶ vÒ NULL khi ¼∙ ŸÀc hÕ t file * H” m fputs (chuçi, fptr): ghi 1 chuçi kĂœ tĂč trong <chuçi> v” o file fptr. H” m n” y kh«ng tĂč Ÿéng thÂȘ m v” o m∙ kÕ t thĂłc ¼Ó chuyÓ n dßng mĂ­i, do Ÿã ta ph¶ i ghi thÂȘ m m∙ n” y v” o tË p tin b» ng lÖ nh fputs ("n", fptr); VÝ dĂŽ 1: Ch­ng tr× nh ghi chuçi lÂȘn file, cho ¼Õn khi chuçi nhËp v”o l” rçng th× kÕ t thĂłc.
  • 61. KĂŒ thuËt lËp tr× nh 61 #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) // tÂč o file mĂ­i { printf("Viec tao file co loin"); exit(0); } while (strlen(gets(chuoi)) > 0) // h” m strlen() trong <string.h> { fputs(chuoi,fptr); fputs("n",fptr); } fclose(fptr); } VÝ dĂŽ 2: §Àc cžc chuçi kĂœ tĂč tĂ” tË p tin, v” in nĂŁ trÂȘ n m” n h× nh. #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 loin"); exit(0); } while (fgets(chuoi,80,fptr)!= NULL) printf("%s",chuoi); fclose(fptr); getch(); }
  • 62. KĂŒ thuËt lËp tr× nh 62 V.1.6. XĂŁa file: LÖ nh remove xož file Ÿ­ßc chØ ¼Þnh qua <tÂȘ nfile> CĂł phžp: remove (tÂȘ n file) H” m remove tr¶ vÒ 0 : xĂŁa th” nh c«ng tr¶ vÒ -1 : cĂŁ lçi khi xĂŁa file, v” lĂłc n”y biÕn errno cĂŁ 1 trong 2 giž trÞ sau: ENOENT : kh«ng t× m thÊ y file muĂšn xĂŁa EACCES : kh«ng cho phÐp xĂŁa file m” bÂč n chØ ¼Þnh L­u Ăœ : File nÂȘ n Ÿãng tr­íc khi xĂŁa. VÝ dĂŽ: XĂŁa file do ta chØ ¼Þnh. #include <stdio.h> void main() { char filename[80]; /* prompt for file name to delete */ printf("File muon xoa: "); gets(filename); /* delete the file */ if (remove(filename) == 0) printf("Removed %s.n",filename); else perror("remove"); // in th«ng bžo lçi m” h” m remove g© y ra } V.2. File nhÞ ph©n (file cĂŁ cÊu trĂłc) File nhÞ ph© n l” file dĂŻng ¼Ó l­u trĂ· cžc cÊ u trĂłc d­íi dÂč ng struct hoÆ c union V.2.1. Khai bžo: FILE * fptr; V.2.2. MĂ« file: fptr = fopen (tÂȘ nfile, “kiÓ u”); . rb ( b: binary): mĂ« chØ ¼Ó ŸÀc . wb : ¼Ó ghi. NÕ u file ¼∙ cĂŁ th× xĂŁa tr­íc khi mĂ«. . ab : nĂši thÂȘ m; mĂ« ¼Ó ghi thÂȘm v”o cuĂši file, nÕu file ch­a cĂŁ th× tÂč o mĂ­i . rb+ : mĂ« file ¼∙ cĂŁ ¼Ó cË p nhË t (ŸÀc/ghi) . wb+ : tÂč o file mĂ­i cho phÐp ŸÀc/ghi . ab+ : mĂ« ¼Ó nĂši thÂȘ m vÒ cuĂši file, cho phÐp ŸÀc/ghi
  • 63. KĂŒ thuËt lËp tr× nh 63 V.2.3. §ãng file: fclose (fptr) V.2.4. §Àc/ghi file: H” m fread : ŸÀc sĂš mÉ u tin(cÊ u trĂłc) trong file fptr v” o <biÕ n cÊ u trĂłc>. fread (& biÕ n cÊu trĂłc, sizeof (biÕ n cÊu trĂłc) , sĂš cÊu trĂłc, fptr); H” m fread tr¶ vÒ sĂš cÊ u trĂłc ŸÀc Ÿ­ßc H” m fwrite ghi dĂ· liÖ u trong <biÕ n cÊ u trĂłc> v” o file fptr. fwrite (&biÕ n cÊu trĂłc, sizeof (biÕ n cÊu trĂłc) , sĂš cÊu trĂłc, fptr); H” m fwrite tr¶ vÒ sĂš cÊ u trĂłc ghi Ÿ­ßc lÂȘ n file ChĂł Ăœ : - §Ó kiÓm tra viÖc ŸÀc file ta kiÓm tra sĂš cÊu trĂłc Ÿ­ßc ŸÀc. NÕu sĂš cÊu trĂłc tr¶ vÒ b» ng 0 m” ta cÇ n ŸÀc l” 1 cÊ u trĂłc th× ÂźiÒ u Ÿã chĂžng tĂĄ ¼∙ hÕ t file. * Ghi mĂ©t m¶ng cÊu trĂłc lÂȘ n file fwrite(tÂȘ nm¶ ng, sizeof (tÂȘ nm¶ ng), 1, fptr); ⇔ for (i= 0; i< n; i++) fwrite (&tÂȘ nm¶ ng[i], sizeof (tÂȘ nm¶ ng[i] , 1, fptr); VÝ dĂŽ 1: Ch­ng tr× nh ghi lÂȘ n file nhÞ ph© n #include <stdio.h> #include <stdlib.h> #include <string.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,"wb")) == NULL) // mĂ« file nhÞ ph© n ¼Ó ghi { printf ("Khong the tao filen"); exit(0); } do { printf("Nhap ho ten hoc vien :");
  • 64. KĂŒ thuËt lËp tr× nh 64 gets(hv.hoten); 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Ă· liÖ u m¶ ng v” o file nhÞ ph© n #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 filen"); 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;
  • 65. KĂŒ thuËt lËp tr× nh 65 } while (i<3); fwrite(table, sizeof(table), 1, fptr) ; // ghi noi dung toan bo hoc vien trong // table vao file fptr // hoÆ c for (i=0; i<3; i++) // fwrite(&table[i], sizeof(table[i]), 1, fptr) fclose (fptr); } VÝ dĂŽ 3: Ch­ng tr× nh ŸÀc file nhÞ ph© n, v” in danh sžch hĂ€c viÂȘ n ra m” n h× nh. // In danh sžch hĂ€c viÂȘ n ra m” n h× nh #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 filen"); 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 xuÊt tËp tin ngÉu nhiÂȘ n: (ÂźiÒ u khiÓ n con trĂĄ tË p tin trÂȘ n file nhÞ ph© n)
  • 66. KĂŒ thuËt lËp tr× nh 66 * Con trĂĄ file: Mçi tË p tin ¼Ò u cĂŁ con trĂĄ file sau khi Ÿ­ßc mĂ«. Con trĂĄ file l” con trĂĄ chØ ¼Õ n tĂ”ng byte trÂȘ n file. Khi ŸÀc hay ghi dĂ· liÖ u trÂȘ n tË p tin, ta ¼∙ l”m dÞch chuyÓn con trĂĄ file mĂ©t sĂš byte, Ÿ©y chÝ nh l” sĂš byte m” kiÓu dĂ· liÖu ¼∙ chiÕ m. Khi Ÿãng rĂ„i mĂ« tË p tin, con trĂĄ file lu«n Ă« ¼Ç u tËp tin ; ngoÂči trĂ” tr­ĂȘng hĂźp ta mĂ« b» ng tĂŻy chĂ€n 'a' th× con trĂĄ file sÏ Ă« cuĂši tË p tin ¼Ó ghi thÂȘm dĂ· liÖu v” o cuĂši tË p tin. H” m fseek cho phÐp ta di chuyÓ n con trĂĄ file ¼Õ n vÞ trÝ mong muĂšn. CĂł phžp: int fseek (FILE * fptr, long nbytes, kiÓ u) + nbytes : sĂš bytes tÝ nh tĂ” vÞ trÝ kiÓ u cho ¼Õ n vÞ trÝ cÇ n tĂ­i + kiÓ u l” sĂš nguyÂȘ n : kiÓ u = 0 (tÝ nh tĂ” ¼Ç u tË p tin) kiÓ u = 1 (tÝ nh tĂ” vÞ trÝ hiÖ n tÂč i) kiÓ u = 2 (tÝ nh tĂ” cuĂši tË p tin) NÕ u fseek tr¶ vÒ 0 nghÜ a l” nĂŁ ¼∙ di chuyÓ n tĂ­i vÞ trÝ Ÿã. L­u Ăœ: sĂš thĂž tĂč trÂȘ n tË p tin tÝ nh tĂ” 0. VÝ dĂŽ: ViÕ t ch­ng tr× nh truy xuÊ t ngÉ u nhiÂȘ n mĂ©t mÉ u tin theo sĂš thĂž tĂč cña nĂŁ trong file nhÞ ph© n #include <stdio.h> #include <stdlib.h> #include <conio.h> void main() { struct hocvien { char hoten[30]; int tuoi; } hv; FILE *fptr; char tenfile[67]; int stt, sobytes; printf("Nhap ten file :"); gets(tenfile); if ((fptr=fopen(tenfile,"rb")) == NULL) { printf ("Khong the mo filen"); exit(0); } clrscr();
  • 67. KĂŒ thuËt lËp tr× nh 67 printf("Cho biet so thu tu mau tin can di chuyen den :"); scanf("%d",&stt); sobytes = stt * sizeof(hv); if (fseek(fptr,sobytes,0)!=0) { printf ("Khong the di chuyen con tro file toi vi tri ban chi dinh duoc"); exit(0); } fread(&hv,sizeof(hv),1,fptr) ; printf("n%-20s",hv.hoten); printf("%3d",hv.tuoi); fclose (fptr); getch(); } V.3. Phžt hiÖ n lçi khi truy xuÊt tËp tin PhÇ n lĂ­n nhĂ·ng h”m xuÊt, nhËp tËp tin chuÈn kh«ng th«ng bžo rĂą nĂ©i dung cña lçi. ChÂŒ ng hÂč n nh­: - putc () sÏ tr¶ vÒ EOF khi cĂŁ lçi hoÆ c cuĂši tË p tin - fgets () sÏ tr¶ vÒ l” NULL khi ŸÀc hÕ t file hoÆ c khi cĂŁ lçi Do Ÿã, ¼Ó phžt hiÖ n lçi khi truy xuÊ t tË p tin, ta dĂŻng macro ferror (FILE *fptr) int ferror (file * ptr) Macro ferror tr¶ vÒ mĂ©t trÞ khžc 0 nÕ u phžt hiÖ n ra lçi trÂȘ n file fptr. * §Ó xuÊ t c© u th«ng bžo lçi ta dĂŻng h” m perror () void perror (const char * str) vĂ­i str : chuçi kĂœ tĂč chĂža c© u th«ng bžo * Hai h” m n” y th­ĂȘng Ÿ­ßc sö dĂŽng ngay sau khi sö dĂŽng cžc h” m ŸÀc / ghi file VÝ dĂŽ: fwrite (&table, sizeof (table), 1, fptr); if (ferror (fptr) != 0) { perror (“Loi ghi du lieu”); exit (0); } VÝ dĂŽ : #include <stdio.h> void main() { FILE *fp;
  • 68. KĂŒ thuËt lËp tr× nh 68 fp = fopen("perror.dat", "r"); if (!fp) perror("Kh«ng thÓ mĂ« file ¼Ó ŸÀc"); } Khi chÂč y ch­ng tr× nh n” y, nÕ u trÂȘ n dÜ a ch­a cĂŁ tË p tin perror.dat th× sÏ hiÖ n th«ng bžo lçi: Kh«ng thÓ mĂ« file ¼Ó ŸÀc: No such file or directory. B”i tËp 1. TÂč o tË p tin diÖ n tÝ ch.h #define Pi 3.14 #define dthv (x) x*x #define dtht (x) (Pi*x*x) 2. ViÕ t ch­ng tr× nh tÝ nh diÖ n tÝ ch dĂča v” o file dientich.h Ă« trÂȘ n 3. ViÕ t h” m ¼Ö qui tÝ nh tÝ ch P(n) = 1 * 2 * 3* ....* n , n>0 4. ViÕ t h” m ¼Ö qui tÝ nh h” m mĂČ xn , vĂ­i n nguyÂȘ n. 5. ViÕ t h” m ¼Ö qui tÝ nh phÇ n tö thĂž n cña h” m Fibonacci. 6. ViÕ t h” m ¼Ö qui gi¶ i quyÕ t b” i tožn Thžp H” nĂ©i. CĂŁ 3 cĂ©t A, B, C. CĂ©t A hiÖ n Âźang cĂŁ n dÜ a kÝ ch th­íc khžc nhau, dÜ a nhĂĄ Ă« trÂȘ n dÜ a lĂ­n Ă« d­íi. H∙ y dĂȘi n dÜ a tĂ” cĂ©t A sang cĂ©t C (xem cĂ©t B l” cĂ©t trung gian) vĂ­i ÂźiÒ u kiÖ n mçi lÇ n chØ Ÿ­ßc dĂȘi 1 dÜ a v” dÜ a ¼Æt trÂȘn bao giĂȘ cĂČng nhĂĄ hÂŹn dÜ a ¼Æ t d­íi. 7. ViÕ t ch­ng tr× nh m∙ hĂŁa v” gi¶ i m∙ mĂ©t file všn b¶n sao cho nÕu ta ¼∙ m∙ hĂŁa rĂ„i th× ch­ng tr× nh kh«ng m∙ hĂŁa nĂ·a, v” nÕu file Ÿã ch­a m∙ hĂŁa th× kh«ng Ÿ­ßc gi¶ i m∙ . 8. Cho biÕ t trong mĂ©t file vš n b¶ n do ta nhË p v” o cĂŁ bao nhiÂȘ u kĂœ tĂč, bao nhiÂȘu tĂ”, v” bao nhiÂȘ u dßng; biÕ t r» ng cžc tĂ” cžch nhau kho¶ng trŸng, dÊu tab, dÊu chÊ m. 9. ViÕ t ch­ng tr× nh tÂč o mĂ©t menu thĂčc hiÖ n cžc chĂžc nš ng sau trÂȘ n file vš n b¶ n: - TÂč o file mĂ­i - §Àc file - XĂŁa file - Ghi nĂši Âźu«i file - Copy file - Di chuyÓ n file tĂ” th­ mĂŽc n” y sang th­ mĂŽc khžc - T× m mĂ©t tĂ” xuÊt hiÖn bao nhiÂȘu lÇn trong file (kh«ng ph©n biÖt chĂ· in, chĂ·
  • 69. KĂŒ thuËt lËp tr× nh 69 th­ĂȘng) - Thay thÕ tĂ” n” y b» ng tĂ” khžc 10. TÂč o menu thĂčc hiÖ n cžc c«ng viÖ c sau: - NhË p danh sžch cĂŁ kiÓ u hĂ€c viÂȘ n v” o mĂ©t file tÂȘ n 'HOSO.TXT', mçi hĂ€c viÂȘ n cĂŁ cžc th«ng tin sau: maso (int), hoten (chuçi tĂši Âźa 30 kĂœ tĂč), phži (NAM/NU), tuĂŠi (int). - LiÖ t kÂȘ danh sžch hĂ€c viÂȘ n ra m” n h× nh theo dÂč ng sau: M∙ sĂš HĂ€ v” tÂȘ n Phži TuĂŠi - Truy xuÊ t ngÉ u nhiÂȘ n theo thĂž tĂč mÉ u tin - T× m kiÕ m mĂ©t ng­ĂȘi trong file theo m∙ sĂš - CË p nhË t söa ŸÊi cžc mÉu tin theo m∙ sĂš (NhËp m∙ sĂš, sau Ÿã hiÖu chØ nh lÂč i hoten, phai, v” tuĂŠi). - XĂŁa mĂ©t ng­ĂȘi trong file theo m∙ sĂš.
  • 70. KĂŒ thuËt lËp tr× nh 70 CH­NG 3 CžC THUËT TOžN TRÂŁN CÊU TRĂłC DĂ· LIÖU M¶NG I. M¶ng kh«ng sŸp xÕp v” thuËt tožn t×m kiÕm trÂȘn m¶ng ch­a cĂŁ thĂž tĂč I.1. MĂ©t sĂš khži niÖ m vÒ m¶ng: I.1.1. §Þnh nghÜ a: M¶ ng l” 1 d∙ y cžc phÇ n tö cĂŁ cĂŻng kiÓ u dĂ· liÖ u Ÿ­ßc sŸ p xÕ p liÂȘ n tiÕ p nhau trong bĂ© nhĂ­ 0100 0102 1 int 0104 2 M¶ng n phÇn tö n-1 BĂ© nhĂ­ !!!!Khai bžo: CĂł phžp: Khai bžo m¶ ng 1 chiÒ u KiÓ u_DL TÂȘ nm¶ ng [kÝ ch th­íc]; ♩ KiÓ u_DL : l” 1 trong cžc kiÓu dĂ· liÖu cÂŹ b¶n, Ÿã l” kiÓu cña phÇn tö cña m¶ ng ♩ TÂȘ nm¶ ng: l” tÂȘ n cña m¶ ng Ÿ­ßc ¼Æ t 1 cžch hĂźp lÖ ♩ KÝ ch th­íc: l” 1 h» ng nguyÂȘ n cho biÕ t sĂš phÇ n tö tĂši Âźa cña m¶ ng VÝ dĂŽ 1: Khai bžo 1 m¶ ng sĂš nguyÂȘ n ‱ int n ; int M[n] ; SAI ‱ int M[10] ; Ÿóng v× kÝ ch th­íc m¶ng ph¶i l” h»ng kh«ng ph¶i l” biÕ n ‱ #define max 100 int M[max] ; VÝ dĂŽ 2: Khai bžo 1 danh sžch hĂ€ tÂȘ n hĂ€c viÂȘ n cña 1 lĂ­p hĂ€c char dshv[50][30]; // dshv cĂŁ thÓ chĂža tĂši Âźa hĂ€ tÂȘ n 50 hĂ€c viÂȘ n, // chiÒ u d” i hĂ€ tÂȘ n mçi hĂ€c viÂȘ n tĂši Âźa l” 30 kĂœ tĂč CĂł phžp: Khai bžo m¶ ng 2 chiÒ u
  • 71. KĂŒ thuËt lËp tr× nh 71 KiÓ u_DL TÂȘ nm¶ ng [kÝ ch th­íc 1][kÝ ch th­íc 2] ChĂł Ăœ : MĂ©t m¶ ng trong C, cžc phÇ n tö Ÿ­ßc Ÿžnh sĂš tĂ” 0 tĂ­i n-1 VÝ dĂŽ: VĂ­i M[10] th× th” nh phÇ n thĂž 1 l” M[0] th” nh phÇ n cuĂši cĂŻng M[9] * C kh«ng bŸ t bÎ , kh«ng kiÓ m tra xem biÕ n ¼Õ m cĂŁ v­ßt ra khĂĄi giĂ­i hÂč n cho phÐp cña m¶ ng ch­a. Do Ÿã, chĂłng ta ph¶ i kiÓ m tra biÕ n ¼Õm trong ch­ng tr× nh (ph¶ i nhĂĄ hÂŹn n) I.1.2. KhĂ«i Ÿéng trÞ cho m¶ng: Ta khĂ«i Ÿéng Ÿ­ßc trÞ cho m¶ ng trong 2 tr­ĂȘng hĂźp sau: ‱ M¶ ng Ÿ­ßc khai bžo l” biÕ n ngo” i (main) nghÜ a l” biÕ n to” n cĂŽc ‱ M¶ ng Ÿ­ßc khai bžo cĂŽc bĂ© VÝ dĂŽ 1 : int M[3] = {10,11,12} main() { } VÝ dĂŽ 2: main() { static int M[ ]={10,22,30}; ............ } ‱ Ta cĂŁ thÓ gžn 1 h» ng cho c¶ m¶ ng nh­ sau: memset (M,0,sizeof(int) *3) ; // gžn 0 cho m¶ ng M vĂ­i M cĂŁ 3 phÇ n tö ‱ TĂ” khĂŁa static dĂŻng ¼Ó khai bžo 1 biÕn cĂŽc bĂ© th­ĂȘng trĂčc cho phÐp duy tr× giž trÞ riÂȘ ng cña nĂŁ Ă« nhĂ·ng lÇ n gĂ€i h” m sau n” y. ‱ KhĂ«i tÂč o m¶ ng 2 chiÒ u: int M[2][3]= {{1,2,3}, {0,1,0}}; I.1.3.Truy xuÊt th”nh phÇn cña m¶ng: M[chØ sĂš] ‱ Truy xuÊ t th” nh phÇ n thĂž 2 cña m¶ ng 1 chiÒ u: M[1] ‱ Truy xuÊ t th” nh phÇ n thĂž i cña m¶ ng 1 chiÒ u: M[i-1] ‱ Truy xuÊ t th” nh phÇ n dßng 2, cĂ©t 3 cña m¶ ng 2 chiÒ u M[1][2] I.1.4. §Àc (nhËp) dĂ· liÖ u cho m¶ng: - §Ó nhË p dĂ· liÖ u cho m¶ ng ta ph¶ i nhË p dĂ· liÖ u cho tĂ”ng th” nh phÇ n cña m¶ ng. VÝ dĂŽ 1:
  • 72. KĂŒ thuËt lËp tr× nh 72 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: NhË p v” o m¶ ng 2 chiÒ u. 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. XuÊt dĂ· liÖu kiÓu m¶ng: §Ó xuÊt dĂ· liÖu m¶ng ta cĂČng ph¶i xuÊt dĂ· liÖ u cña tĂ”ng th” nh phÇ n m¶ ng VÝ dĂŽ: int i, n; float M[10]; for(i = 0; i< n; i++) printf(“a[%d] = %f”,i+1, M[i]); I.2. ThuËt tožn t× m kiÕ m trÂȘ n m¶ng ch­a cĂŁ thĂž tĂč: Do m¶ng ch­a cĂŁ thĂž tĂč nÂȘn ta žp dĂŽng ph­ng phžp t× m kiÕm tuyÕn tÝ nh t× m tĂ” ¼Çu m¶ng cho ¼Õn cuĂši m¶ng. Trong ch­ng tr× nh sau Ÿ©y, h”m TimkiÕm sÏ tr¶ vÒ trÞ -1 nÕ u kh«ng cĂŁ m∙ sinh viÂȘ n trong danh sžch ds, ng­ßc lÂči h”m sÏ tr¶ vÒ vÞ trÝ cña m∙ sĂš Ÿã trong danh sžch ds. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX_SOSV 100 // sĂš sinh viÂȘ n tĂši Âźa trong danh sžch typedef struct sinhvien // ¼Þnh nghÜ a kiÓ u sinhvien
  • 73. KĂŒ thuËt lËp tr× nh 73 { char maso[6]; char hoten[30]; }; typedef struct danhsach_sv // ¼Þnh nghÜ a kiÓ u 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 %-sn", psv->sv[i].maso,psv->sv[i].hoten); i++; } getch(); } /* H”m Timkiem t× m maso trong danhsach *psv */ int Timkiem(danhsach_sv *psv, char maso[]) { int i=0; while ((i<psv->tssv) && (strcmp(psv->sv[i].maso, maso)!=0)) i++; return (i==psv->tssv ? -1 : i) ;
  • 74. KĂŒ thuËt lËp tr× nh 74 } void main() { struct danhsach_sv ds; char maso[6]; int vitri; Nhap_ds(&ds); // GĂ€i h” m Nhap_ds vĂ­i 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. Cžc thuËt tožn sŸp xÕp: Trong thĂčc tÕ cuĂ©c sĂšng cĂČng nh­ trong lÜ nh vĂčc lËp tr× nh, viÖc qu¶n lĂŒ dĂ· liÖu th­ĂȘng ¼ßi hĂĄi sĂč t× m kiÕ m cžc dĂ· liÖ u cÇ n thiÕ t; §Ó thuË n tiÖ n cho viÖ c t× m kiÕ m, dĂ· liÖ u th­ĂȘng Ÿ­ßc sÂœ p xÕ p theo mĂ©t thĂž tĂč n” o Ÿã. CĂŁ rÊ t nhiÒ u ph­ng phžp sŸ p thĂž tĂč, trong b” i gi¶ ng n”y ta chØ kh¶o sžt hai ph­ng phžp sŸ p xÕ p l” Bubble_Sort v” Quick_Sort. §Ó thuËn tiÖn ta gi¶ sö m¶ng l” d∙y sĂš cĂŁ tĂši Âźa 100 sĂš, v” cžc thuËt tožn d­íi Ÿ© y dĂŻng ¼Ó sŸ p xÕ p d∙ y sĂš theo thĂž tĂč tš ng dÇ n. II.1. SŸp xÕ p theo ph­ng phžp Bubble_Sort (ph­ng phžp nĂŠi bĂ€t) - NĂ©i dung : Ta cho i duyÖ t d∙ y a[0], .. ,a[n-1]; nÕ u a[i-1] lĂ­n hÂŹn a[i] th× ta hožn ŸÊi (a[i-1],a[i]). LÆp lÂči quž tr× nh duyÖt d∙y n”y cho ¼Õn khi kh«ng cĂŁ x¶y ra viÖ c ŸÊi chç cña hai phÇ n tö. VÝ dĂŽ: Ta sŸ p thĂž tĂč d∙ y sĂš sau : 26 33 35 29 19 12 32 B­íc 0 1 2 3 4 5 6 26 12 12 12 12 12 12 33 26 19 19 19 19 19 35 33 26 26 26 26 26 29 35 33 29 29 29 29 19 29 35 33 32 32 32
  • 75. KĂŒ thuËt lËp tr× nh 75 12 19 29 35 33 33 33 32 32 32 32 35 35 35 - Ch­ng tr× nh: #include <stdio.h> #include <conio.h> int mang[100]; // biÕ n to” n cĂŽc int size ; void Bubble_Sort(int A[100], int n) { int i,j,temp; for (i=1; i<n; i++) for (j=n-1;j>=i; j--) if (A[j-1] > A[j]) { temp = A[j-1]; A[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() { size= Nhap_day_so(mang);
  • 76. KĂŒ thuËt lËp tr× nh 76 Bubble_Sort(mang,size); Liet_ke(mang,size); } Ta nhË n thÊ y ph­ng phžp n” y cĂŁ thÓ Ÿ­ßc c¶ i tiÕ n dÔ d” ng. NÕ u Ă« lÇ n duyÖt d∙y n”o Ÿã m” kh«ng cĂŁ cĂŁ sĂč ŸÊi chç giĂ·a hai phÇn tö th× d∙y ¼∙ cĂŁ thĂž tĂč v” gi¶ i thuË t kÕ t thĂłc. Trong tr­ĂȘng hĂźp n”y, ta dĂŻng mĂ©t cĂȘ hiÖu flag ¼Ó ghi nhË n ÂźiÒ u n” y, v” gi¶ i thuË t Bubble Sort Ÿ­ßc c¶ i tiÕ n 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. SŸp xÕ p theo ph­ng phžp Quick_Sort II.2.1. NĂ©i dung: ChĂ€n mĂ©t phÇn tö bÊt kĂș trong danh sžch l”m ÂźiÓm chĂšt x, so sžnh v” ŸÊi chç nhĂ·ng phÇ n tö trong danh sžch n”y ¼Ó tÂčo ra 3 phÇn: phÇn cĂŁ giž trÞ nhĂĄ hÂŹn x, phÇn cĂŁ giž trÞ b»ng x, v” phÇn cĂŁ giž trÞ lĂ­n hÂŹn x. LÂči tiÕp tĂŽc chia 2 phÇ n cĂŁ giž trÞ nhĂĄ hÂŹn v” lĂ­n hÂŹn x theo nguyÂȘ n tÂœ c nh­ trÂȘ n; quž tr× nh chia phÇn sÏ kÕt thĂłc khi mçi phÇn chØ cßn lÂči mĂ©t phÇn tö, lĂłc n”y ta ¼∙ cĂŁ mĂ©t danh sžch cĂŁ thĂž tĂč. VÝ dĂŽ: XÐt d∙ y 26 33 35 29 19 12 32 ' LÇ n chia phÇ n thĂž nhÊ t : ChĂ€n phÇ n tö chĂšt cĂŁ khĂŁa l” 29, ¼Æ t l” x 26 33 35 29 19 12 32 i % $ j DĂŻng hai biÕ n chØ sĂš i v” j ¼Ó duyÖ t tĂ” hai ¼Çu danh sžch ¼Õn x. NÕu i gÆp
  • 77. KĂŒ thuËt lËp tr× nh 77 phÇ n tö lĂ­n hÂŹn hay b» ng x sÏ dĂ”ng lÂč i, j gÆ p phÇ n tö nhĂĄ hÂŹn hay b» ng x sÏ dĂ”ng lÂč i, rĂ„i ŸÊi chç hai phÇ n tö n” y; sau Ÿã tiÕ p tĂŽc duyÖ t cho ¼Õ n khi i>j th× ngĂ”ng lÂč i. LĂłc n” y d∙ y sÏ cĂŁ 3 phÇ n khžc nhau nh­ h× nh vÏ sau : 26 33 35 29 19 12 32 i j 26 12 35 29 19 33 32 i j 26 12 19 29 35 33 32 ij 26 12 19 29 35 33 32 j i ' LÇ n chia phÇ n thĂž hai cho d∙ y con 26 12 19, chĂ€n chĂšt x=12 26 12 19 % 12 26 19 i j j i KÕ t thĂłc ta sÏ cĂŁ hai phÇ n : 12 ; 26 19 ' LÇ n chia phÇ n thĂž 3 cho d∙ y con 26 19, chĂ€n chĂšt x=26 26 19 % 19 26 KÕ t thĂłc quž tr× nh chia nhĂĄ d∙ y con 26 12 19 i j j i - LÇ n chia phÇ n thĂž 4 cho d∙ y con 35 33 32, chĂ€n chĂšt x= 33 35 33 32 % 32 33 35 % 32 33 35 i j ij j i KÕ t thĂłc ta sÏ cĂŁ ba phÇ n : 32 ; 33 ; 35 §Õn Ÿ©y quž tr× nh chia phÇn kÕt thĂłc v× tÊtc¶ cžc phÇnchØ cĂŁ mĂ©tphÇntö, lĂłc n” y ta sÏ cĂŁ mĂ©t danh sžch cĂŁ thĂž tĂč l” : 12 19 26 29 32 33 35 II.2.2. Gi¶i thuËt: a. Gi¶i thuËt kh«ng ¼Ö quy: - Ta tÂč o mĂ©t Stack , mçi phÇn tö cña Stack cĂŁ 2 th”nh phÇn l” q, r chĂža chØ sĂš ¼Çu v” chØ sĂš cuĂši cña d∙y cÇn sŸp. Ban ¼Çu, Stack[0].q = 0 v” Stack[0].r =n-1 - TiÕn h”nh ph©n hoÂčch d∙y sĂš gĂ„m cžc sĂš bŸt ¼Çu tĂ” chØ sĂš q¼ÕnchØ sĂš r - Sau mçi lÇ n chia phÇ n, ta kiÓ m tra xem phÇ n cĂŁ giž trÞ nhĂĄ hÂŹn chĂšt v” phÇ n cĂŁ giž trÞ lĂ­n hÂŹn chĂšt nÕ u cĂŁ tĂ” 2 phÇ n tö trĂ« lÂȘ n th× Ÿ­a v” o Stack. Sau mçi lÇ n ph© n hoÂč ch, ta lÂč i lÊ y d∙ y sĂš mĂ­i tĂ” Stack ra ph© n hoÂč ch tiÕ p.
  • 78. KĂŒ thuËt lËp tr× nh 78 - Quž tr× nh cĂž nh­ thÕ cho tĂ­i khi Stack rçng th× kÕ t thĂłc. * Ch­ng tr× nh: #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) { struct Element_Stack // kiÓ u phÇ n tö trong Stack { int q, r; } ; Element_Stack Stack[50]; // Stack cĂŁ tĂši Âźa 50 phÇ n tö int sp=0; // con trĂĄ Stack, khĂ«i tÂč o sp=0 int i,j,x,q,r,temp; Stack[0].q =0 ; // chØ sĂš ¼Ç u cña m¶ ng cÇ n sŸ p Stack[0].r =n-1; // chØ sĂš cuĂši cña m¶ ng cÇ n sŸ p do { // LÊ y mĂ©t ph© n hoÂč ch ra tĂ” Stack q = Stack[sp].q ; r =Stack[sp].r ; sp--; // XĂŁa 1 phÇ n tö khĂĄi Stack do { // Ph© n ÂźoÂč n d∙ y con a[q] ,..., a[r] i = q; j =r; x = A[(q+r) / 2] ; // LÊ y phÇ n tö giĂ·a cña d∙ y cÇ n sŸ p thĂž tĂč l” m chĂšt do { while (A[i] < x) i++; //T× m phÇn tö ¼Çu tiÂȘn cĂŁ trÞ lĂ­n hÂŹn hay b»ng x while (A[j] > x) j--; //T× m phÇn tö ¼Çu tiÂȘn cĂŁ trÞ nhĂĄ hÂŹn hay b»ng x if (i<=j) // §Êi chç A[i] vĂ­i A[j] { temp = A[i]; A[i] =A[j]; A[j] = temp; i++ ; j--; } } while (i<=j);
  • 79. KĂŒ thuËt lËp tr× nh 79 if (i<r) // phÇ n thĂž ba cĂŁ tĂ” 2 phÇ n tö trĂ« lÂȘ n { // §­a v” o Stack chØ sĂš ¼Ç u v” chØ sĂš cuĂši cña phÇ n thĂž ba sp++; Stack[sp].q=i; Stack[sp].r=r; } r = j ; // ChuÈ n bÞ vÞ trÝ ¼Ó ph© n hoÂč ch phÇ n cĂŁ giž trÞ nhĂĄ hÂŹn chĂšt } while (q< r); } while (sp!=-1); // Ket thuc khi Stack rong } int Nhap_day_so (int A[]) /* TÂč o d∙ y n sĂš ngÉ u nhiÂȘ n tĂ” 0 ¼Õ n 9999 Ÿ­a v” o m¶ ng A */ { int i,n; printf("nSo phan tu cua mang :"); scanf("%d",&n); randomize(); // dĂŻng <time.h> v” <stdlib.h> for (i=0; i<n; i++) A[i]= rand() % 10000; // Phžt sinh cžc sĂš ngÉ u nhiÂȘ n tĂ” 0 ¼Õ n 9999 return n; } void Liet_ke (char str[],int A[], int n) { int i; printf("n%sn",str); for (i=0; i<n; i++) printf ("%5d",A[i]); getch(); } void 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. Gi¶i thuËt Quick Sort ¼Ö qui: vÒ cÂŹ chÕ thĂčc hiÖ n th× cĂČng giĂšng nh­