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 gii 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 phi chØ ®Ó gii 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 phi ®-î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 phi 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¬ bn  
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 phi  
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 đủ
pdf 134 trang Thùy Anh 22780 Free
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:

  • pdfgiao_trinh_ky_thuat_lap_trinh.pdf