Giáo trình Lập trình C trong Window - Nguyễn Hữu Tuấn
Giíi thiÖu
Tin häc lµ mét ngµnh khoa häc mòi nhän ph¸t triÓn hÕt søc nhanh chãng trong vµi
chôc n¨m l¹i ®©y vµ ngµy cµng më réng lÜnh vùc nghiªn cøu, øng dông trong mäi mÆt cña ®êi
sèng x· héi.
Ng«n ng÷ lËp tr×nh lµ mét lo¹i c«ng cô gióp con ng-êi thÓ hiÖn c¸c vÊn ®Ò cña thùc tÕ
lªn m¸y tÝnh mét c¸ch h÷u hiÖu. Víi sù ph¸t triÓn cña tin häc, c¸c ng«n ng÷ lËp tr×nh còng
dÇn tiÕn ho¸ ®Ó ®¸p øng c¸c th¸ch thøc míi cña thùc tÕ.
Kho¶ng cuèi nh÷ng n¨m 1960 ®Çu 1970 xuÊt hiÖn nhu cÇu cÇn cã c¸c ng«n ng÷ bËc
cao ®Ó hç trî cho nh÷ng nhµ tin häc trong viÖc x©y dùng c¸c phÇn mÒm hÖ thèng, hÖ ®iÒu
hµnh. Ng«n ng÷ C ra ®êi tõ ®ã, nã ®· ®-îc ph¸t triÓn t¹i phßng thÝ nghiÖm Bell. §Õn n¨m
1978, gi¸o tr×nh " Ng«n ng÷ lËp tr×nh C " do chÝnh c¸c t¸c gi¶ cña ng«n ng÷ lµ Dennish
Ritchie vµ B.W. Kernighan viÕt, ®· ®-îc xuÊt b¶n vµ phæ biÕn réng r·i.
C lµ ng«n ng÷ lËp tr×nh v¹n n¨ng. Ngoµi viÖc C ®-îc dïng ®Ó viÕt hÖ ®iÒu hµnh UNIX,
ng-êi ta nhanh chãng nhËn ra søc m¹nh cña C trong viÖc xö lý cho c¸c vÊn ®Ò hiÖn ®¹i cña
tin häc. C kh«ng g¾n víi bÊt kú mét hÖ ®iÒu hµnh hay m¸y nµo, vµ mÆc dÇu nã ®· ®-îc gäi lµ
" ng«n ng÷ lËp tr×nh hÖ thèng" v× nã ®-îc dïng cho viÖc viÕt hÖ ®iÒu hµnh, nã còng tiÖn lîi
cho c¶ viÖc viÕt c¸c ch-¬ng tr×nh xö lý sè, xö lý v¨n b¶n vµ c¬ së d÷ liÖu.
Vµ b©y giê chóng ta ®i t×m hiÓu thÕ giíi cña ng«n ng÷ C tõ nh÷ng kh¸i niÖm ban ®Çu
c¬ b¶n nhÊt.
Hµ néi th¸ng 11 n¨m 1997
Nguyễn Hữu Tuấn
Môc lôc
Giíi thiÖu
Ch-¬ng 1
C¸c kh¸i niÖm c¬ b¶n
1.1. TËp ký tù dïng trong ng«n ng÷ C
1.2. Tõ kho¸
1.3. Tªn
1.4. KiÓu d÷ liÖu
1.4.1. KiÓu ký tù (char)
1.4.2. KiÓu nguyªn
1.4.3. KiÓu dÊu ph¶y ®éng
1.5. §Þnh nghÜa kiÓu b»ng TYPEDEF
1.5.1. C«ng dông
1.5.2. C¸ch viÕt
1.6. H»ng
1.6.1. Tªn h»ng
1.6.2. C¸c lo¹i h»ng
1.6.2.1. H»ng int
1.6.2.2. H»ng long
1.6.2.3. H»ng int hÖ 8
1.6.2.4. H»ng int hÖ 16
1.6.2.5. H»ng ký tù
1.6.2.5. H»ng x©u ký tù
1.7. BiÕn
1.8. M¶ng
Ch-¬ng 2
C¸c lÖnh vµo ra
2.1. Th©m nhËp vµo th- viÖn chuÈn
2.2. C¸c hµm vµo ra chuÈn - getchar() vµ putchar()
2.2.1. Hµm getchar()
2.2.2. Hµm putchar()
2.2.3. Hµm getch()
2
2.2.4. Hµm putch()
2.3. §-a kÕt qu¶ lªn mµn h×nh - hµm printf
2.4. Vµo sè liÖu tõ bµn phÝm - hµm scanf
2.5. §-a kÕt qu¶ ra m¸y in
Ch-¬ng 3
BiÓu thøc
3.1. BiÓu thøc
3.2. LÖnh g¸n vµ biÓu thøc
3.3. C¸c phÐp to¸n sè häc
3.4. C¸c phÐp to¸n quan hÖ vµ logic
3.5. PhÐp to¸n t¨ng gi¶m
3.6. Thø tù -u tiªn c¸c phÐp to¸n
3.7. ChuyÓn ®æi kiÓu gi¸ trÞ
Ch-¬ng 4
CÊu tróc c¬ b¶n cña ch-¬ng tr×nh
4.1. Lêi chó thÝch
4.2. LÖnh vµ khèi lÖnh
4.2.1. LÖnh
4.2.2. Khèi lÖnh
4.3. CÊu tróc c¬ b¶n cña ch-¬ng tr×nh
4.4. Mét sè qui t¾c cÇn nhí khi viÕt ch-¬ng tr×nh
Ch-¬ng 5
CÊu tróc ®iÒu khiÓn
5.1. CÊu tróc cã ®iÒu kiÖn
5.1.1. LÖnh if-else
5.1.2. LÖnh else-if
5.2. LÖnh nh¶y kh«ng ®iÒu kiÖn - to¸n tö goto
5.3. CÊu tróc rÏ nh¸nh - to¸n tö switch
5.4. CÊu tróc lÆp
5.4.1. CÊu tróc lÆp víi to¸n tö while vµ for
5.4.1.1. CÊu tróc lÆp víi to¸n tö while
3
5.4.1.2. CÊu tróc lÆp víi to¸n tö for :
5.4.2. Chu tr×nh do-while
5.5. C©u lÖnh break
5.6. C©u lÖnh continue
Ch-¬ng 6
Hµm
6.1. C¬ së
6.2. Hµm kh«ng cho c¸c gi¸ trÞ
6.3. Hµm ®Ö qui
6.3.3. Më ®Çu
6.3.2. C¸c bµi to¸n cã thÓ dïng ®Ö qui
6.3.3. C¸ch x©y dùng hµm ®Ö qui
6.3.4. C¸c vÝ dô vÒ dïng hµm ®Ö qui
6.4. Bé tiÒn sö lý C
Ch-¬ng 7
Con trá
7.1. Con trá vµ ®Þa chØ
7.2. Con trá vµ m¶ng mét chiÒu
7.2.1.PhÐp to¸n lÊy ®Þa chØ
7.2.2. Tªn m¶ng lµ mét h»ng ®Þa chØ
7.2.3. Con trá trá tíi c¸c phÇn tö cña m¶ng mét chiÒu
7.2.4. M¶ng, con trá vµ x©u ký tù
7.3. Con trá vµ m¶ng nhiÒu chiÒu
7.3.1.PhÐp lÊy ®Þa chØ
7.3.2. PhÐp céng ®Þa chØ trong m¶ng hai chiÒu
7.3.3. Con trá vµ m¶ng hai chiÒu
7.4. KiÓu con trá kiÓu ®Þa chØ, c¸c phÐp to¸n trªn con trá
7.4.1. KiÓu con trá vµ kiÓu ®Þa chØ
7.4.2. C¸c phÐp to¸n trªn con trá
7.4.3. Con trá kiÓu void
7.5. M¶ng con trá
7.6. Con trá tíi hµm
4
7.6.1. C¸ch khai b¸o con trá hµm vµ m¶ng con trá hµm
7.6.2. T¸c dông cña con trá hµm
7.6.3. §èi cña con trá hµm
Ch-¬ng 8
CÊu tróc
8.1. KiÓu cÊu tróc
8.2. Khai b¸o theo mét kiÓu cÊu tróc ®· ®Þnh nghÜa
8.3. Truy nhËp ®Õn c¸c thµnh phÇn cÊu tróc
8.4. M¶ng cÊu tróc
8.5. Khëi ®Çu mét cÊu tróc
8.6. PhÐp g¸n cÊu tróc
8.7. Con trá cÊu tróc vµ ®Þa chØ cÊu tróc
8.7.1. Con trá vµ ®Þa chØ
8.7.2. Truy nhËp qua con trá
8.7.3. PhÐp g¸n qua con trá
8.7.4. PhÐp céng ®Þa chØ
8.7.5. Con trá vµ m¶ng
8.8. CÊu tróc tù trá vµ danh s¸ch liªn kÕt
Ch-¬ng 9
TËp tin - file
9.1. Kh¸i niÖm vÒ tÖp tin
9.2. Khai b¸o sö dông tÖp - mét sè hµm th-êng dïng khi thao t¸c trªn tÖp
9.2.1. Khai b¸o sö dông tÖp
9.2.2. Më tÖp - hµm fopen
9.2.3. §ãng tÖp - hµm fclose
9.2.4. §ãng tÊt c¶ c¸c tÖp ®ang më- hµm fcloseall
9.2.5. Lµm s¹ch vïng ®Öm - hµm fflush
9.2.6. Lµm s¹ch vïng ®Öm cña c¸c tÖp ®ang më - hµm fflushall
9.2.7. KiÓm tra lçi file - hµm ferror
9.2.8. KiÓmtra cuèi tÖp - hµm feof
9.2.9. Truy nhËp ngÉu nhiªn - c¸c hµm di chuyªn con trá chØ vÞ
9.2.9.1. ChuyÓn con trá chØ vÞ vÒ ®Çu tÖp - Hµm rewind
5
9.2.9.2. ChuyÓn con trá chØ vÞ trÝ cÇn thiÕt - Hµm fseek
9.2.9.3. VÞ trÝ hiÖn t¹i cuÈ con trá chØ vÞ - Hµm ftell
9.2.10. Ghi c¸c mÉu tin lªn tÖp - hµm fwrite
9.2.11. §äc c¸c mÉu tin tõ tÖp - hµm fread
9.2.12. NhËp xuÊt ký tù
9.2.12.1. C¸c hµm putc vµ fputc
9.2.12.2. C¸c hµm getc vµ fgettc
9.2.13. Xo¸ tÖp - hµm unlink
Ch-¬ng 10
§å ho¹
10.1. Khëi ®éng ®å ho¹
10.2. C¸c hµm ®å ho¹
10.2.1. MÉu vµ mµu
10.2.2. VÏ vµ t« mµu
10.2.3. VÏ ®-êng gÊp khóc vµ ®a gi¸c
10.2.4. VÏ ®iÓm, miÒn
10.2.5. H×nh ch÷ nhËt
10.2.6. Cöa sæ (Viewport)
10.3. Sö lý v¨n b¶n trªn mµn h×nh ®å ho¹
6
Ch-¬ng 1
c¸c kh¸i niÖm c¬ b¶n
1.1. TËp ký tù dïng trong ng«n ng÷ C :
Mäi ng«n ng÷ lËp tr×nh ®Òu ®-îc x©y dùng tõ mét bé ký tù nµo ®ã. C¸c ký tù ®-îc nhãm
l¹i theo nhiÒu c¸ch kh¸c nhau ®Ó t¹o nªn c¸c tõ. C¸c tõ l¹i ®-îc liªn kÕt víi nhau theo mét qui t¾c
nµo ®ã ®Ó t¹o nªn c¸c c©u lÖnh. Mét ch-¬ng tr×nh bao gåm nhiÒu c©u lÖnh vµ thÓ hiÖn mét thuËt
to¸n ®Ó gi¶i mét bµi to¸n nµo ®ã. Ng«n ng÷ C ®-îc x©y dùng trªn bé ký tù sau :
26 ch÷ c¸i hoa : A B C .. Z
26 ch÷ c¸i th-êng : a b c .. z
10 ch÷ sè : 0 1 2 .. 9
C¸c ký hiÖu to¸n häc : + - * / = ( )
Ký tù g¹ch nèi : _
C¸c ký tù kh¸c : . , : ; [ ] {} ! \ & % # $ ...
DÊu c¸ch (space) dïng ®Ó t¸ch c¸c tõ. VÝ dô ch÷ VIET NAM cã 8 ký tù, cßn VIETNAM
chØ cã 7 ký tù.
Chó ý :
Khi viÕt ch-¬ng tr×nh, ta kh«ng ®-îc sö dông bÊt kú ký tù nµo kh¸c ngoµi c¸c ký tù trªn.
VÝ dô nh- khi lËp ch-¬ng tr×nh gi¶i ph-¬ng tr×nh bËc hai ax2 +bx+c=0 , ta cÇn tÝnh biÖt
thøc Delta = b2 - 4ac, trong ng«n ng÷ C kh«ng cho phÐp dïng ký tù , v× vËy ta ph¶i dïng ký
hiÖu kh¸c ®Ó thay thÕ.
1.2. Tõ kho¸ :
Tõ kho¸ lµ nh÷ng tõ ®-îc sö dông ®Ó khai b¸o c¸c kiÓu d÷ liÖu, ®Ó viÕt c¸c to¸n tö vµ c¸c
c©u lÖnh. B¶ng d-íi ®©y liÖt kª c¸c tõ kho¸ cña TURBO C :
asm
char
do
break
const
double
far
case
continue
else
cdecl
default
enum
for
extern
goto
float
if
huge
int
7
interrupt
register
sizeof
long
near
pascal
signed
switch
void
return
static
union
while
short
struct
unsigned
tipedef
volatile
ý nghÜa vµ c¸ch sö dông cña mçi tõ kho¸ sÏ ®-îc ®Ò cËp sau nµy, ë ®©y ta cÇn chó ý :
- Kh«ng ®-îc dïng c¸c tõ kho¸ ®Ó ®Æt tªn cho c¸c h»ng, biÕn, m¶ng, hµm ...
- Tõ kho¸ ph¶i ®-îc viÕt b»ng ch÷ th-êng, vÝ dô : viÕt tõ kho¸ khai b¸o kiÓu nguyªn lµ int
chø kh«ng ph¶i lµ INT.
1.3. Tªn :
Tªn lµ mét kh¸i niÖm rÊt quan träng, nã dïng ®Ó x¸c ®Þnh c¸c ®¹i l-îng kh¸c nhau trong
mét ch-¬ng tr×nh. Chóng ta cã tªn h»ng, tªn biÕn, tªn m¶ng, tªn hµm, tªn con trá, tªn tÖp, tªn cÊu
tróc, tªn nh·n,...
Tªn ®-îc ®Æt theo qui t¾c sau :
Tªn lµ mét d·y c¸c ký tù bao gåm ch÷ c¸i, sè vµ g¹ch nèi. Ký tù ®Çu tiªn cña tªn ph¶i lµ
ch÷ hoÆc g¹ch nèi. Tªn kh«ng ®-îc trïng víi kho¸. §é dµi cùc ®¹i cña tªn theo mÆc ®Þnh lµ 32 vµ
cã thÓ ®-îc ®Æt l¹i lµ mét trong c¸c gi¸ trÞ tõ 1 tíi 32 nhê chøc n¨ng : Option-Compiler-Source-
Identifier length khi dïng TURBO C.
VÝ dô :
C¸c tªn ®óng :
a_1
delta x1
_step GAMA
C¸c tªn sai :
3MN
m#2
f(x)
do
Ký tù ®Çu tiªn lµ sè
Sö dông ký tù #
Sö dông c¸c dÊu ( )
Trïng víi tõ kho¸
Sö dông dÊu tr¾ng
Sö dông dÊu -
te ta
Y-3
Chó ý :
Trong TURBO C, tªn b»ng ch÷ th-êng vµ ch÷ hoa lµ kh¸c nhau vÝ dô tªn AB kh¸c víi ab.
trong C, ta th-êng dïng ch÷ hoa ®Ó ®Æt tªn cho c¸c h»ng vµ dïng ch÷ th-êng ®Ó ®Æt tªn cho hÇu
8
hÕt cho c¸c ®¹i l-îng kh¸c nh- biÕn, biÕn m¶ng, hµm, cÊu tróc. Tuy nhiªn ®©y kh«ng ph¶i lµ ®iÒu
b¾t buéc.
1.4. KiÓu d÷ liÖu :
Trong C sö dông c¸c c¸c kiÓu d÷ liÖu sau :
1.4.1. KiÓu ký tù (char) :
Mét gi¸ trÞ kiÓu char chiÕm 1 byte ( 8 bit ) vµ biÓu diÔn ®-îc mét ký tù th«ng qua b¶ng
m· ASCII. VÝ dô :
Ký tù
M· ASCII
048
0
1
049
2
050
A
B
a
065
066
097
b
098
Cã hai kiÓu d÷ liÖu char : kiÓu signed char vµ unsigned char.
KiÓu
Ph¹m vi biÓu diÔn
Sè ký tù
KÝch
th-íc
1 byte
1 byte
Char ( Signed char )
Unsigned char
-128 ®Õn 127
0 ®Õn 255
256
256
VÝ dô sau minh ho¹ sù kh¸c nhau gi÷a hai kiÓu d÷ liÖu trªn : XÐt ®o¹n ch-¬ng tr×nh sau :
char ch1;
unsigned char ch2;
......
ch1=200; ch2=200;
Khi ®ã thùc chÊt :
ch1=-56;
ch2=200;
Nh-ng c¶ ch1 vµ ch2 ®Òu biÓu diÔn cïng mét ký tù cã m· 200.
Ph©n lo¹i ký tù :
9
Cã thÓ chia 256 ký tù lµm ba nhãm :
Nhãm 1: Nhãm c¸c ký tù ®iÒu khiÓn cã m· tõ 0 ®Õn 31. Ch¼ng h¹n ký tù m· 13 dïng ®Ó
chuyÓn con trá vÒ ®Çu dßng, ký tù 10 chuyÓn con trá xuèng dßng d-íi ( trªn cïng mét cét ). C¸c
ký tù nhãm nµy nãi chung kh«ng hiÓn thÞ ra mµn h×nh.
Nhãm 2 : Nhãm c¸c ký tù v¨n b¶n cã m· tõ 32 ®Õn 126. C¸c ký tù nµy cã thÓ ®-îc ®-a ra
mµn h×nh hoÆc m¸y in.
Nhãm 3 : Nhãm c¸c ký tù ®å ho¹ cã m· sè tõ 127 ®Õn 255. C¸c ký tù nµy cã thÓ ®-a ra
mµn h×nh nh-ng kh«ng in ra ®-îc ( b»ng c¸c lÖnh DOS ).
1.4.2. KiÓu nguyªn :
Trong C cho phÐp sö dông sè nguyªn kiÓu int, sè nguyªn dµi kiÓu long vµ sè nguyªn
kh«ng dÊu kiÓu unsigned. KÝch cì vµ ph¹m vi biÓu diÔn cña chóng ®-îc chØ ra trong b¶ng d-íi
®©y :
KiÓu
Ph¹m vi biÓu diÔn
-32768 ®Õn 32767
KÝch th-íc
2 byte
int
unsigned int
long
0 ®Õn 65535
2 byte
-2147483648 ®Õn 2147483647
0 ®Õn 4294967295
4 byte
unsigned long
4 byte
Chó ý :
KiÓu ký tù còng cã thÓ xem lµ mét d¹ng cña kiÓu nguyªn.
1.4.3. KiÓu dÊu ph¶y ®éng :
Trong C cho phÐp sö dông ba lo¹i d÷ liÖu dÊu ph¶y ®éng, ®ã lµ float, double vµ long
double. KÝch cì vµ ph¹m vi biÓu diÔn cña chóng ®-îc chØ ra trong b¶ng d-íi ®©y :
KiÓu
Ph¹m vi biÓu diÔn
Sè ch÷ sè
cã nghÜa
7 ®Õn 8
KÝch th-íc
Float
3.4E-38 ®Õn 3.4E+38
1.7E-308 ®Õn 1.7E+308
3.4E-4932 ®Õn 1.1E4932
4 byte
8 byte
Double
15 ®Õn 16
17 ®Õn 18
long double
10 byte
Gi¶i thÝch :
10
M¸y tÝnh cã thÓ l-u tr÷ ®-îc c¸c sè kiÓu float cã gi¸ trÞ tuyÖt ®èi tõ 3.4E-38 ®Õn 3.4E+38.
C¸c sè cã gi¸ trÞ tuyÖt ®èi nhá h¬n3.4E-38 ®-îc xem b»ng 0. Ph¹m vi biÓu diÔn cña sè double
®-îc hiÓu theo nghÜa t-¬ng tù.
1.5. §Þnh nghÜa kiÓu b»ng TYPEDEF :
1.5.1. C«ng dông :
Tõ kho¸ typedef dïng ®Ó ®Æt tªn cho mét kiÓu d÷ liÖu. Tªn kiÓu sÏ ®-îc dïng ®Ó khai b¸o
d÷ liÖu sau nµy. Nªn chän tªn kiÓu ng¾n vµ gän ®Ó dÔ nhí. ChØ cÇn thªm tõ kho¸ typedef vµo tr-íc
mét khai b¸o ta sÏ nhËn ®-îc mét tªn kiÓu d÷ liÖu vµ cã thÓ dïng tªn nµy ®Ó khai b¸o c¸c biÕn,
m¶ng, cÊu tróc, vv...
1.5.2. C¸ch viÕt :
ViÕt tõ kho¸ typedef, sau ®ã kiÓu d÷ liÖu ( mét trong c¸c kiÓu trªn ), råi ®Õn tªn cña kiÓu.
VÝ dô c©u lÖnh :
typedef int nguyen;
sÏ ®Æt tªn mét kiÓu int lµ nguyen. Sau nµy ta cã thÓ dïng kiÓu nguyen ®Ó khai b¸o c¸c biÕn, c¸c
m¶ng int nh- vÝ dô sau ;
nguyen x,y,a[10],b[20][30];
T-¬ng tù cho c¸c c©u lÖnh :
typedef float mt50[50];
§Æt tªn mét kiÓu m¶ng thùc mét chiÒu cã 50 phÇn tö tªn lµ mt50.
typedef int m_20_30[20][30];
§Æt tªn mét kiÓu m¶ng thùc hai chiÒu cã 20x30 phÇn tö tªn lµ m_20_30.
Sau nµy ta sÏ dïng c¸c kiÓu trªn khai b¸o :
mt50 a,b;
m_20_30 x,y;
1.6. H»ng :
H»ng lµ c¸c ®¹i l-îng mµ gi¸ trÞ cña nã kh«ng thay ®æi trong qu¸ tr×nh tÝnh to¸n.
1.6.1. Tªn h»ng :
Nguyªn t¾c ®Æt tªn h»ng ta ®· xem xÐt trong môc 1.3.
§Ó ®Æt tªn mét h»ng, ta dïng dßng lÖnh sau :
#define tªn h»ng gi¸ trÞ
11
VÝ dô :
#define MAX 1000
Lóc nµy, tÊt c¶ c¸c tªn MAX trong ch-¬ng tr×nh xuÊt hiÖn sau nµy ®Òu ®-îc thay b»ng
1000. V× vËy, ta th-êng gäi MAX lµ tªn h»ng, nã biÓu diÔn sè 1000.
Mét vÝ dô kh¸c :
#define pi 3.141593
§Æt tªn cho mét h»ng float lµ pi cã gi¸ trÞ lµ 3.141593.
1.6.2. C¸c lo¹i h»ng :
1.6.2.1. H»ng int :
H»ng int lµ sè nguyªn cã gi¸ trÞ trong kho¶ng tõ -32768 ®Õn 32767.
VÝ dô :
#define number1 -50
#define sodem 2732
§Þnh nghi· h»ng int number1 cã gi¸ trÞ lµ -50
§Þnh nghi· h»ng int sodem cã gi¸ trÞ lµ 2732
Chó ý :
CÇn ph©n biÖt hai h»ng 5056 vµ 5056.0 : ë ®©y 5056 lµ sè nguyªn cßn 5056.0 lµ h»ng
thùc.
1.6.2.2. H»ng long :
H»ng long lµ sè nguyªn cã gi¸ trÞ trong kho¶ng tõ -2147483648 ®Õn 2147483647.
H»ng long ®-îc viÕt theo c¸ch :
1234L hoÆc 1234l
( thªm L hoÆc l vµo ®u«i )
Mét sè nguyªn v-ît ra ngoµi miÒn x¸c ®Þnh cña int còng ®-îc xem lµ long.
VÝ dô :
#define sl 8865056L
#define sl 8865056
§Þnh nghi· h»ng long sl cã gi¸ trÞ lµ 8865056
§Þnh nghi· h»ng long sl cã gi¸ trÞ lµ 8865056
12
1.6.2.3. H»ng int hÖ 8 :
H»ng int hÖ 8 ®-îc viÕt theo c¸ch 0c1c2c3....ë ®©y ci lµ mét sè nguyªn d-¬ng trong
kho¶ng tõ 1 ®Õn 7. H»ng int hÖ 8 lu«n lu«n nhËn gi¸ trÞ d-¬ng.
VÝ dô :
#define h8 0345
§Þnh nghi· h»ng int hÖ 8 cã gi¸ trÞ lµ
3*8*8+4*8+5=229
1.6.2.4. H»ng int hÖ 16 :
Trong hÖ nµy ta sö dông 16 ký tù : 0,1..,9,A,B,C,D,E,F.
C¸ch viÕt
a hoÆc A
b hoÆc B
c hoÆc C
d hoÆc D
e hoÆc E
f hoÆc F
Gi¸ trÞ
10
11
12
13
14
15
H»ng sè hÖ 16 cã d¹ng 0xc1c2c3... hÆc 0Xc1c2c3... ë ®©y ci lµ mét sè trong hÖ 16.
VÝ dô :
#define h16 0xa5
#define h16 0xA5
#define h16 0Xa5
#define h16 0XA5
Cho ta c¸c h¾ng sè h16 trong hÖ 16 cã gi¸ trÞ nh- nhau. Gi¸ trÞ cña chóng trong hÖ 10 lµ :
10*16+5=165.
1.6.2.5. H»ng ký tù :
H»ng ký tù lµ mét ký tù riªng biÖt ®-îc viÕt trong hai dÊu nh¸y ®¬n, vÝ dô 'a'.
Gi¸ trÞ cña 'a' chÝnh lµ m· ASCII cña ch÷ a. Nh- vËy gi¸ trÞ cña 'a' lµ 97. 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ô :
13
'9'-'0'=57-48=9
VÝ dô :
#define kt 'a'
§Þnh nghi· h»ng ký tù kt cã gi¸ trÞ lµ 97
H»ng ký tù cßn cã thÓ ®-îc viÕt theo c¸ch sau :
' \c1c2c3'
trong ®ã c1c2c3 lµ mét sè hÖ 8 mµ gi¸ trÞ cña nã b»ng m· ASCII cña ký tù cÇn biÓu diÔn.
VÝ dô : ch÷ a cã m· hÖ 10 lµ 97, ®æi ra hÖ 8 lµ 0141. VËy h»ng ký tù 'a' cã thÓ viÕt d-íi d¹ng
'\141'. §èi víi mét vµi h»ng ký tù ®Æc biÖt ta cÇn sö dông c¸ch viÕt sau ( thªm dÊu \ ) :
C¸ch viÕt
'\''
Ký tù
'
'\"'
"
\
'\\'
'\n'
\n (chuyÓn dßng )
'\0'
\0 ( null )
'\t'
Tab
'\b'
Backspace
'\r'
CR ( vÒ ®Çu dßng )
LF ( sang trang )
'\f'
Chó ý :
CÇn ph©n biÖt h»ng ký tù '0' vµ '\0'. H»ng '0' øng víi ch÷ sè 0 cã m· ASCII lµ 48,
cßn h»ng '\0' øng víi kýtù \0 ( th-êng gäi lµ ký tù null ) cã m· ASCII lµ 0.
H»ng ký tù thùc sù lµ mét sè nguyªn, v× vËy cã thÓ dïng c¸c sè nguyªn hÖ 10 ®Ó biÓu diÔn
c¸c ký tù, vÝ dô lÖnh printf("%c%c",65,66) sÏ in ra AB.
1.6.2.5. H»ng x©u ký tù :
H»ng x©u ký tù lµ mét d·y ký tù bÊt kú ®Æt trong hai dÊu nh¸y kÐp.
VÝ dô :
#define xau1 "Ha noi"
#define xau2 "My name is Giang"
14
X©u ký tù ®-îc l-u tr÷ trong m¸y d-íi d¹ng mét b¶ng cã c¸c phÇn tö lµ c¸c ký tù riªng
biÖt. Tr×nh biªn dÞch tù ®éng thªm ký tù null \0 vµo cuèi mçi x©u ( ký tù \0 ®-îc xem lµ dÊu hiÖu
kÕt thóc cña mét x©u ký tù ).
Chó ý :
CÇn ph©n biÖt hai h»ng 'a' vµ "a". 'a' lµ h»ng ký tù ®-îc l-u tr÷ trong 1 byte, cßn "a" lµ
h»ng x©u ký tù ®-îc l-u tr÷ trong 1 m¶ng hai phÇn tö : phÇn tö thø nhÊt chøa ch÷ a cßn phÇn tö
thø hai chøa \0.
1.7. BiÕn :
Mçi biÕn cÇn ph¶i ®-îc khai b¸o tr-íc khi ®-a vµo sö dông. ViÖc khai b¸o biÕn ®-îc thùc
hiÖn theo mÉu sau :
KiÓu d÷ liÖu cña biÕn tªn biÕn ;
VÝ dô :
int a,b,c;
Khai b¸o ba biÕn int lµ a,b,c
long dai,mn;
char kt1,kt2;
float x,y
Khai b¸o hai biÕn long lµ dai vµ mn
Khai b¸o hai biÕn ký tù lµ kt1 vµ kt2
Khai b¸o hai biÕn float lµ x vµ y
Khai b¸o hai biÕn double lµ canh1 vµ canh2
double canh1, canh2;
BiÕn kiÓu int chØ nhËn ®-îc c¸c gi¸ trÞ kiÓu int. C¸c biÕn kh¸c còng cã ý nghÜa t-¬ng tù.
C¸c biÕn kiÓu char chØ chøa ®-îc mét ký tù. §Ó l-u tr÷ ®-îc mét x©u ký tù cÇn sö dông mét m¶ng
kiÓu char.
VÞ trÝ cña khai b¸o biÕn :
C¸c khai b¸o cÇn ph¶i ®-îc ®Æt ngay sau dÊu { ®Çu tiªn cña th©n hµm vµ cÇn ®øng tr-íc
mäi c©u lÖnh kh¸c. Sau ®©y lµ mét vÝ dô vÒ khai b¸o biÕn sai :
( Kh¸i niÖm vÒ hµm vµ cÊu tróc ch-¬ng tr×nh sÏ nghiªn cøu sau nµy)
main()
{
int a,b,c;
a=2;
15
int d; /* VÞ trÝ cña khai b¸o sai */
.....
}
Khëi ®Çu cho biÕn :
NÕu trong khai b¸o ngay sau tªn biÕn ta ®Æt dÊu = vµ mét gi¸ trÞ nµo ®ã th× ®©y chÝnh lµ
c¸ch võa khai b¸o võa khëi ®Çu cho biÕn.
VÝ dô :
int a,b=20,c,d=40;
float e=-55.2,x=27.23,y,z,t=18.98;
ViÖc khëi ®Çu vµ viÖc khai b¸o biÕn råi g¸n gi¸ trÞ cho nã sau nµy lµ hoµn toµn t-¬ng ®-¬ng.
LÊy ®Þa chØ cña biÕn :
Mçi biÕn ®-îc cÊp ph¸t mét vïng nhí gåm mét sè byte liªn tiÕp. Sè hiÖu cña byte ®Çu
chÝnh lµ ®Þa chØ cña biÕn. §Þa chØ cña biÕn sÏ ®-îc sö dông trong mét sè hµm ta sÏ nghiªn cøu sau
nµy ( vÝ dô nh- hµm scanf ).
§Ó lÊy ®Þa chØ cña mét biÕn ta sö dông phÐp to¸n :
& tªn biÕn
1.8 M¶ng :
Mçi biÕn chØ cã thÓ biÓu diÔn mét gi¸ trÞ. §Ó biÓu diÔn mét d·y sè hay mét b¶ng sè ta cã
thÓ dïng nhiÒu biÕn nh-ng c¸ch nµy kh«ng thuËn lîi. Trong tr-êng hîp nµy ta cã kh¸i niÖm vÒ
m¶ng. Kh¸i niÖm vÒ m¶ng trong ng«n ng÷ C còng gièng nh- kh¸i niÖm vÒ ma trËn trong ®¹i sè
tuyÕn tÝnh.
M¶ng cã thÓ ®-îc hiÓu lµ mét tËp hîp nhiÒu phÇn tö cã cïng mét kiÓu gi¸ trÞ vµ chung
mét tªn. Mçi phÇn tö m¶ng biÓu diÔn ®-îc mét gi¸ trÞ. Cã bao nhiªu kiÓu biÕn th× cã bÊy nhiªu
kiÓu m¶ng. M¶ng cÇn ®-îc khai b¸o ®Ó ®Þnh râ :
Lo¹i m¶ng : int, float, double...
Tªn m¶ng.
Sè chiÒu vµ kÝch th-íc mçi chiÒu.
Kh¸i niÖm vÒ kiÓu m¶ng vµ tªn m¶ng còng gièng nh- kh¸i niÖm vÒ kiÓu biÕn vµ tªn biÕn. Ta sÏ
gi¶i thÝch kh¸i niÖm vÒ sè chiÒu vµ kÝch th-íc mçi chiÒu th«ng qua c¸c vÝ dô cô thÓ d-íi ®©y.
C¸c khai b¸o :
16
int a[10],b[4][2];
float x[5],y[3][3];
sÏ x¸c ®Þnh 4 m¶ng vµ ý nghÜa cña chóng nh- sau :
Thø tù
Tªn m¶ng
KiÓu m¶ng
Sè chiÒu
KÝch th-íc
C¸c phÇn tö
a[0],a[1],a[2]...a[9]
b[0][0], b[0][1]
b[1][0], b[1][1]
b[2][0], b[2][1]
b[3][0], b[3][1]
1
2
A
B
Int
Int
1
2
10
4x2
3
4
X
Y
Float
Float
1
2
5
x[0],x[1],x[2]...x[4]
y[0][0], y[0][1], y[0][2]
y[1][0], y[1][1], y[1][2]
y[2][0], y[2][1], y[1][2]
3x3
Chó ý :
C¸c phÇn tö cña m¶ng ®-îc cÊp ph¸t c¸c kho¶ng nhí liªn tiÕp nhau trong bé nhí. Nãi
c¸ch kh¸c, c¸c phÇn tö cña m¶ng cã ®Þa chØ liªn tiÕp nhau.
Trong bé nhí, c¸c phÇn tö cña m¶ng hai chiÒu ®-îc s¾p xÕp theo hµng.
ChØ sè m¶ng :
Mét phÇn tö cô thÓ cña m¶ng ®-îc x¸c ®Þnh nhê c¸c chØ sè cña nã. ChØ sè cña m¶ng ph¶i
cã gi¸ trÞ int kh«ng v-ît qu¸ kÝch th-íc t-¬ng øng. Sè chØ sè ph¶i b»ng sè chiÒu cña m¶ng.
Gi¶ sö z,b,x,y ®· ®-îc khai b¸o nh- trªn, vµ gi¶ sö i,j lµ c¸c biÕn nguyªn trong ®ã i=2,
j=1. Khi ®ã :
a[j+i-1]
b[j+i][2-i]
y[i][j]
lµ
lµ
lµ
a[2]
b[3][0]
y[2][1]
Chó ý :
M¶ng cã bao nhiªu chiÒu th× ta ph¶i viÕt nã cã bÊy nhiªu chØ sè. V× thÕ nÕu ta viÕt nh- sau
sÏ lµ sai : y[i] ( V× y lµ m¶ng 2 chiÒu ) vv..
17
BiÓu thøc dïng lµm chØ sè cã thÓ thùc. Khi ®ã phÇn nguyªn cña biÓu thøc thùc sÏ lµ chØ sè
m¶ng.
VÝ dô :
a[2.5] lµ a[2]
b[1.9] lµ a[1]
*
Khi chØ sè v-ît ra ngoµi kÝch th-íc m¶ng, m¸y sÏ vÉn kh«ng b¸o lçi, nh-ng nã sÏ truy
cËp ®Õn mét vïng nhí bªn ngoµi m¶ng vµ cã thÓ lµm rèi lo¹n ch-¬ng tr×nh.
LÊy ®Þa chØ mét phÇn tö cña m¶ng :
Cã mét vµi h¹n chÕ trªn c¸c m¶ng hai chiÒu. Ch¼ng h¹n cã thÓ lÊy ®Þa chØ cña c¸c phÇn tö
cña m¶ng mét chiÒu, nh-ng nãi chung kh«ng cho phÐp lÊy ®Þa chØ cña phÇn tö cña m¶ng hai
chiÒu. Nh- vËy m¸y sÏ chÊp nhËn phÐp tÝnh : &a[i] nh-ng kh«ng chÊp nhËn phÐp tÝnh &y[i][j].
§Þa chØ ®Çu cña mét m¶ng :
Tªn m¶ng biÓu thÞ ®Þa chØ ®Çu cña m¶ng. Nh- vËy ta cã thÓ dïng a thay cho &a[0].
Khëi ®Çu cho biÕn m¶ng :
C¸c biÕn m¶ng khai b¸o bªn trong th©n cña mét hµm ( kÓ c¶ hµm main() ) gäi lµ biÕn
m¶ng côc bé.
Muèn khëi ®Çu cho mét m¶ng côc bé ta sö dông to¸n tö g¸n trong th©n hµm.
C¸c biÕn m¶ng khai b¸o bªn ngoµi th©n cña mét hµm gäi lµ biÕn m¶ng ngoµi.
§Ó khëi ®Çu cho biÕn m¶ng ngoµi ta ¸p dông c¸c qui t¾c sau :
C¸c biÕn m¶ng ngoµi cã thÓ khëi ®Çu ( mét lÇn ) vµo lóc dÞch ch-¬ng tr×nh b»ng c¸ch sö
dông c¸c biÓu thøc h»ng. NÕu kh«ng ®-îc khëi ®Çu m¸y sÏ g¸n cho chóng gi¸ trÞ 0.
VÝ dô :
....
float y[6]={3.2,0,5.1,23,0,42};
int z[3][2]={
{25,31},
{12,13},
{45,15}
18
{
....
main()
{
....
}
Khi khëi ®Çu m¶ng ngoµi cã thÓ kh«ng cÇn chØ ra kÝch th-íc ( sè phÇn tö ) cña nã. Khi
®ã, m¸y sÏ dµnh cho m¶ng mét kho¶ng nhí ®ñ ®Ó thu nhËn danh s¸ch gi¸ trÞ khëi ®Çu.
VÝ dô :
....
float a[]={0,5.1,23,0,42};
int m[][3]={
{25,31,4},
{12,13,89},
{45,15,22}
};
Khi chØ ra kÝch th-íc cña m¶ng, th× kÝch th-íc nµy cÇn kh«ng nhá h¬n kÝch th-íc cña bé
khëi ®Çu.
VÝ dô :
....
float m[6]={0,5.1,23,0};
int z[6][3]={
{25,31,3},
{12,13,22},
{45,15,11}
};
....
§èi víi m¶ng hai chiÒu, cã thÓ khëi ®Çu víi sè gi¸ trÞ khëi ®Çu cña mçi hµng cã thÓ kh¸c
nhau :
VÝ dô :
....
19
float z[][3]={
{31.5},
{12,13},
{-45.76}
};
int z[13][2]={
{31.11},
{12},
{45.14,15.09}
};
Khëi ®Çu cña mét m¶ng char cã thÓ lµ
Mét danh s¸ch c¸c h»ng ký tù.
Mét h»ng x©u ký tù.
VÝ dô :
char ten[]={'h','a','g'}
char ho[]='tran'
char dem[10] ="van"
20
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 Lập trình C trong Window - Nguyễn Hữu Tuấn", để 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_lap_trinh_c_trong_window_nguyen_huu_tuan.doc

