Giáo trình Kỹ thuật lập trình
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«i mµ
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
Khèi më ®Ç u hoÆ c kÕ t
thóc
Ký hiÖ u
ý nghÜ a
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
Ax + By + C
VÝ dô 2 : TÝ nhS =
; biÕ t A,B,C,x,y
2
x2
+
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)
S
a > b
Ñ
Max = b
Max = a
S
Max < c
Ñ
Max = c
Xuaát (Max)
End
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)
S
Xuaát (-b/a)
a = 0
Ñ
S
b = 0
Ñ
Xuaát (‘PTVN’)
Xuaát (‘PTVÑ’)
End
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)
Ñ
PTB1 (b, c)
a = 0
S
Delta = b*b - 4*a*c
Ñ
Delta < 0
Xuaát (‘PTVN’)
Xuaát (-b / (2*a))
S
Ñ
Delta = 0
S
Xuaát (‘X1= ’,(-b + SQRT(Delta)) / (2*a))
Xuaát (‘X2= ’,(-b - SQRT(Delta)) / (2*a))
End
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
n
VÝ dô 4: TÝ nhS= ∑ , víi c¸c x do ta nhË p vµ o.
xi
i
i=1
Begin
Nhaäp (n)
i = 1
S = 0
Nhaäp (xi)
i = i+1
S = S+xi
Ñ
i <= n
S
Xuaát (S)
End
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Ëp tr× nh ®-îc gäi lµ ng«n ng÷ lËp tr× 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¶ n h¬n nhiÒ u. Nh÷ng ng«n ng÷ lËp tr× nh cã tÝ nh
chÊ t nh- trª n ®-îc gäi lµ ng«n ng÷ cÊ p cao. Nh-ng m¸y tÝ nh chØ hiÓ u ®-îc ng«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)
Döõ lieäu
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û
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ª n m¸y vi tÝ nh vµ ®∙ trë thµ nh mét c«ng cô lËp tr× nh kh¸ 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 ban\n”);
}
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 */
/*G¸n n=10 */
n=10;
while (n<=50)
/*LÆ p tõ 10 ®Õ n 50 b» ng while */
{ printf(“%3d \t %5d\n”,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
void main()
/*TiÒ n xö lý, ®Þnh nghÜ a max =50*/
{ 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 %5d\n”,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;
for ( ;m>0;m--)
s=s*n;
/*Khai b¸o vµ khëi t¹ o biÕ n s*/
/*LÆ p gi¶ m dÇ n tõ m tíi 1*/
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.2f\t %5.2f\t %5.2f\t %5.2f\n”,
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
Xuèng hµ ng míi
Tab
M· ASCII
\n
\t
10
9
\b
Xãa ký tù bª n tr¸i
8
\r
\f
\a
Con trá trë vÒ ®Ç u hµ ng
Sang trang
Ph¸t tiÕ ng cßi
13
12
7
\\
\’
\’’
\xdd
\ddd
XuÊ t dÊ u chÐo ng-îc
XuÊ t dÊ u nh¸y ®¬n ‘
XuÊ t dÊ u nh¸y kÐp “
XuÊ t ký tù cã m∙ ASCII d¹ ng Hex lµ dd
XuÊ t ký tù cã m∙ ASCII d¹ ng Dec lµ
ddd
92
39
34
\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
Sè nguyª n c¬ sè 10
Sè nguyª n c¬ sè 10 kh«ng dÊ u
Sè nguyª n c¬ sè 8
d,i
u
o
x
X
f
Sè nguyª n c¬ sè 16, ch÷ th-êng(a,b,...,f)
Sè nguyª n c¬ sè 16, ch÷ in (A,B,...,F)
Sè thùc d¹ ng [-]dddd.ddd...
Sè thùc d¹ ng [-]d.ddd e[+/-]ddd
Sè thùc d¹ ng [-]d.ddd E[+/-]ddd
Sè thùc d¹ ng e(E) hay f tïy theo ®é chÝ nh x¸c
Ký tù
e
E
g,G
c
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
0n
*
Dµ nh Ý t nhÊ t n ký tù , ®iÒ n kho¶ ng tr¾ng c¸c ký tù cßn trèng
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ã
0
®é chÝ nh x¸c nh- b× nh th-êng
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
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
n
*
C¸c ch÷ bæ sung :
F
N
h
l
Tham sè lµ con trá xa XXXX:YYYY
Tham sè lµ con trá gÇ n YYYY
Tham sè lµ short int
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è
XuÊt
NhËn xÐt
®é réng 1
®é réng 2, canh ph¶ i
®é réng 3, canh tr¸i
M∙ ASCII cña ‘A’
®é réng 10
NhiÒ u ký tù h¬n cÇn thiÕ t
ChÝ nh x¸c 6 ký tù
ChÝ nh x¸c 8, canh tr¸i
t-¬ng øng
%c
%2c
%-3c
%d
%s
%3s
c
c
c
c
s
s
s
s
“A”
“ A”
“A “
“65”
“Blue moon!”
“Blue moon!”
“Blue m”
“Blue moo “
%.6s
%-11.8s
VÝ dô 2: int
i = 123;
float x = 0.123456789;
D¹ng
Th«ng sè
XuÊt
“123”
“00123”
“ 123”
NhËn xÐt
t-¬ng øng
%d
%05d
%7o”
%-9x
%c
i
i
i
i
i
®é réng 3
Thª m 2 sè 0
HÖ 8, canh ph¶ i
HÖ 16, canh tr¸i
Ký tù cã m∙ ASCII 123
HÖ 16, canh tr¸i
“7b
“
“{“
“0x7b “
“ 0.12346”
%-#9x
%10.5f
i
x
®é 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(“\n\xC9\xCD\xBB”);
printf(“\n\xC8\xCD\xBC\n);
}
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
KÝ ch
Ph¹m vi
-128→ 127
ý nghÜ a
th-íc
char
Ký tù
1 byte
1 byte
unsigned char Ký tù kh«ng dÊ u
0→255
unsigned short Sè nguyªn ng¾ n kh«ng dÊu 2 bytes
0→65535
enum
Sè nguyª n cã dÊ u
Sè nguyª n cã dÊ u
Sè nguyª n cã dÊ u
Sè nguyª n kh«ng dÊ u
Sè nguyª n dµ i cã dÊ u
2 bytes
2 bytes
2 bytes
2 bytes
4 bytes
-32768→32767
-32768→32767
-32768→32767
0 → 65535
short int
int
unsigned int
long
-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
Sè thùc ®é chÝ nh x¸c kÐp 8 bytes
3.4 E-38→3.4 E+38
double
1.7 E-308 → 1.7
E+308
long double
Sè thùc ®é chÝ nh x¸c h¬n 10 bytes
double
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
a,b,c;
tª nbiÕ n1 [,tenbiÕ n2 ...] ;
VÝ dô: int
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
o
u
x
f,e
c
Sè nguyª n c¬ sè 10 (int)
Sè nguyª n c¬ sè 8 (int)
Sè nguyª n c¬ sè 10 kh«ng dÊ u (unsigned)
Sè nguyª n c¬ sè 16 (int)
Sè thùc (float)
Ký tù (char)
s
Chuçi ký tù
p
Con trá (pointer)
lf
Lf
Sè thùc (double)
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();
ch = getche();
Kh«ng hiÖ n ký tù nhË p trª n mµ n h× nh
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 extended\n");
else
printf("The character isn't extended\n");
}
PhÝ m
F1
M· scancode
59
60
61
62
63
64
65
66
67
68
71
72
80
75
F2
F3
F4
F5
F6
F7
F8
F9
F10
Home
"
#
$
Kü thuËt lËp tr× nh
18
%
PgUp
PgDn
End
Ins
77
73
81
79
82
83
Del
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 0nnnn
-nnnnl/L
0xnnnn
nnnn.nnnn
nnnn.nnnE/e±nnn
123.654
VÝ dô
4567
-12
123U
12uL
456789L 0345
-1234L
0x1AB
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
0x10
010
→ unsigned
→ hÖ 16 = 1610
→ 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
H» ng:
“A” ≠ ‘A’
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Óu thøc tr-íc, vµ kÕ t qu¶ ®-î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’
1<8
→
→
“
“
lµ 97-65 = 32
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;
y= a + (x= b + 2*c)
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
thùc(nguyª n)/thùc
(nguyª n)
KiÓ u nguyª n vµ lµ phÐp chia 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()
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kỹ thuật lập trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
giao_trinh_ky_thuat_lap_trinh.pdf

