More Related Content Similar to Ki thuat lap_trinh Similar to Ki thuat lap_trinh (20) Ki thuat lap_trinh1. 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Â