Giáo trình môn Ngôn ngữ lập trình C

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  
Nguyn Hu Tun  
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  
break  
const  
double  
far  
case  
continue  
else  
cdecl  
default  
enum  
for  
char  
do  
extern  
goto  
float  
if  
huge  
long  
int  
interrupt  
register  
near  
short  
pascal  
signed  
return  
2
sizeof  
static  
union  
while  
struct  
switch  
void  
tipedef  
volatile  
unsigned  
ý 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  
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.  
3
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ù :  
Cã thÓ chia 256 ký tù lµm ba nhãm :  
4
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 :  
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ù.  
5
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Þ  
VÝ dô :  
#define MAX 1000  
6
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  
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.  
7
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ô :  
'9'-'0'=57-48=9  
VÝ dô :  
#define kt 'a'  
§Þnh nghi· h»ng ký tù kt cã gi¸ trÞ lµ 97  
8
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"  
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ó ý :  
9
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;  
int d; /* VÞ trÝ cña khai b¸o sai */  
.....  
}
Khëi ®Çu cho biÕn :  
10  
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 :  
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  
11  
KÝch th-íc  
C¸c phÇn tö  
1
2
A
B
Int  
Int  
1
2
10  
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]  
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..  
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]  
12  
*
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}  
{
....  
main()  
{
....  
}
13  
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ô :  
....  
float z[][3]={  
{31.5},  
{12,13},  
{-45.76}  
};  
int z[13][2]={  
14  
{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"  
15  
Ch-¬ng 2  
C¸c lÖnh vµo ra  
Ch-¬ng nµy giíi thiÖu th- viÖn vµo/ra chuÈn lµ mét tËp c¸c hµm ®-îc thiÕt kÕ ®Ó cung cÊp  
hÖ thèng vµo/ra chuÈn cho c¸c ch-¬ng tr×nh C. Chóng ta sÏ kh«ng m« t¶ toµn bé th- viÖn vµo ra ë  
®©y mµ chØ quan t©m nhiÒu h¬n ®Õn viÖc nªu ra nh÷ng ®iÒu c¬ b¶n nhÊt ®Ó viÕt ch-¬ng tr×nh C  
t-¬ng t¸c víi m«i tr-êng vµ hÖ ®iÒu hµnh.  
2.1. Th©m nhËp vµo th- viÖn chuÈn :  
Mçi tÖp gèc cã tham trá tíi hµm th- viÖn chuÈn ®Òu ph¶i chøa dßng :  
#include <conio.h> cho c¸c hµm getch(), putch(), clrscr(), gotoxy() ...  
#include <stdio.h> cho c¸c hµm kh¸c nh- gets(), fflus(), fwrite(), scanf()...  
ë gÇn chç b¾t ®Çu ch-¬ng tr×nh. TÖp stdio.h ®Þnh nghÜa c¸c macro vµ biÕn cïng c¸c hµm dïng  
trong th- viÖn vµo/ra. Dïng dÊu ngoÆc < vµ > thay cho c¸c dÊu nh¸y th«ng th-êng ®Ó chØ thÞ cho  
tr×nh biªn dÞch t×m kiÕm tÖp trong danh môc chøa th«ng tin tiªu ®Ò chuÈn.  
2.2. C¸c hµm vµo ra chuÈn - getchar() vµ putchar() - getch() vµ putch() :  
2.2.1. Hµm getchar () :  
C¬ chÕ vµo ®¬n gi¶n nhÊt lµ ®äc tõng ký tù tõ thiÕt bÞ vµo chuÈn, nãi chung lµ bµn phÝm  
vµ mµn h×nh cña ng-êi sö dông, b»ng hµm getchar().  
C¸ch dïng :  
Dïng c©u lÖnh sau :  
biÕn = getchar();  
C«ng dông :  
NhËn mét ký tù vµo tõ bµn phÝm vµ kh«ng ®-a ra mµn h×nh. Hµm sÏ tr¶ vÒ ký tù nhËn  
®-îc l-u vµo biÕn.  
VÝ dô :  
int c;  
c = getchar()  
16  
2.2.2. Hµm putchar () :  
§Ó ®-a mét ký tù ra thiÕt bÞ ra chuÈn, nãi chung lµ mµn h×nh, ta sö dông hµm putchar()  
C¸ch dïng :  
Dïng c©u lÖnh sau :  
putchar(ch);  
C«ng dông :  
§-a ký tù ch lªn mµn h×nh t¹i vÞ trÝ hiÖn t¹i cña con trá. Ký tù sÏ ®-îc hiÓn thÞ víi mµu  
tr¾ng.  
VÝ dô :  
int c;  
c = getchar();  
putchar(c);  
2.2.3. Hµm getch() :  
Hµm nhËn mét ký tù tõ bé ®Öm bµn phÝm, kh«ng cho hiÖn lªn mµn h×nh.  
C¸ch dïng :  
Dïng c©u lÖnh sau :  
getch();  
C«ng dông :  
NÕu cã s½n ký tù trong bé ®Öm bµn phÝm th× hµm sÏ nhËn mét ký tù trong ®ã.  
NÕu bé ®Öm rçng, m¸y sÏ t¹m dõng. Khi gâ mét ký tù th× hµm nhËn ngay ký tù ®ã (  
kh«ng cÇn bÊm thªm phÝm Enter nh- trong c¸c hµm nhËp kh¸c ). Ký tù võa gâ kh«ng hiÖn lªn  
mµn h×nh.  
NÕu dïng :  
biÕn=getch();  
Th× biÕn sÏ chøa ký tù ®äc vµo.  
17  
VÝ dô :  
c = getch();  
2..2.4. Hµm putch() :  
C¸ch dïng :  
Dïng c©u lÖnh sau :  
putch(ch);  
C«ng dông :  
§-a ký tù ch lªn mµn h×nh t¹i vÞ trÝ hiÖn t¹i cña con trá. Ký tù sÏ ®-îc hiÓn thÞ theo mµu  
x¸c ®Þnh trong hµm textcolor.  
Hµm còng tr¶ vÒ ký tù ®-îc hiÓn thÞ.  
2.3. §-a kÕt qu¶ lªn mµn h×nh - hµm printf :  
C¸ch dïng :  
prinf(®iÒu khiÓn, ®èi sè 1, ®èi sè 2, ...);  
Hµm printf chuyÓn, t¹o khu«n d¹ng vµ in c¸c ®èi cña nã ra thiÕt bÞ ra chuÈn d-íi sù ®iÒu  
khiÓn cña x©u ®iÒu khiÓn. X©u ®iÒu khiÓn chøa hai kiÓu ®èi t-îng : c¸c ký tù th«ng th-êng, chóng  
®-îc ®-a ra trùc tiÕp thiÕt bÞ ra, vµ c¸c ®Æc t¶ chuyÓn d¹ng, mçi ®Æc t¶ sÏ t¹o ra viÖc ®æi d¹ng  
vµ in ®èi tiÕp sau cña printf.  
Chuçi ®iÒu khiÓn cã thÓ cã c¸c ký tù ®iÒu khiÓn :  
\n  
\f  
sang dßng míi  
sang trang míi  
lïi l¹i mét b-íc  
dÊu tab  
\b  
\t  
D¹ng tæng qu¸t cña ®Æc t¶ :  
%[-][fw][.pp]ký tù chuyÓn d¹ng  
Mçi ®Æc t¶ chuyÓn d¹ng ®Òu ®-îc ®-a vµo b»ng ký tù % vµ kÕt thóc bëi mét ký tù chuyÓn  
d¹ng. Gi÷a % vµ ký tù chuyÓn d¹ng cã thÓ cã :  
18  
DÊu trõ :  
Khi kh«ng cã dÊu trõ th× kÕt qu¶ ra ®-îc dån vÒ bªn ph¶i nÕu ®é dµi thùc tÕ cña kÕt qu¶  
ra nhá h¬n ®é réng tèi thiÓu fw dµnh cho nã. C¸c vÞ trÝ d- thõa sÏ ®-îc lÊp ®Çy b»ng c¸c  
kho¶ng trèng. Riªng ®èi víi c¸c tr-êng sè, nÕu d·y sè fw b¾t ®Çu b»ng sè 0 th× c¸c vÞ trÝ d- thõa  
bªn tr¸i sÏ ®-îc lÊp ®Çy b»ng c¸c sè 0.  
Khi cã dÊu trõ th× kÕt qu¶ ®-îc dån vÒ bªn tr¸i vµ c¸c vÞ trÝ d- thõa vÒ bªn ph¶i ( nÕu cã  
) lu«n ®-îc lÊp ®Çy b»ng c¸c kho¶ng trèng.  
fw :  
Khi fw lín h¬n ®é dµi thùc tÕ cña kÕt qu¶ ra th× c¸c vÞ trÝ d- thõa sÏ ®-îc lÊp ®Çy  
bëi c¸c kho¶ng trèng hoÆc sè 0 vµ néi dung cña kÕt qu¶ ra sÏ ®-îc ®Èy vÒ  
bªn ph¶i hoÆc  
bªn tr¸i.  
Khi kh«ng cã fw hoÆc fw nhá h¬n hay b»ng ®é dµi thùc tÕ cña kÕt qu¶ ra th× ®é  
réng trªn thiÕt bÞ ra dµnh cho kÕt qu¶ sÏ b»ng chÝnh ®é dµi cña nã.  
T¹i vÞ trÝ cña fw ta cã thÓ ®Æt dÊu *, khi ®ã fw ®-îc x¸c ®Þnh bëi gi¸ trÞ nguyªn  
cña ®èi t-¬ng øng.  
VÝ dô :  
KÕt qu¶ ra  
-2503  
fw  
8
DÊu -  
cã  
KÕt qu¶ ®-a ra  
-2503  
-2503  
-2503  
08  
8
cã  
-2503  
kh«ng  
kh«ng  
kh«ng  
cã  
-2503  
-2503  
08  
8
000-2503  
abcdef  
"abcdef"  
"abcdef"  
"abcdef"  
08  
08  
abcdef  
kh«ng  
abcdef  
pp :  
Tham sè pp chØ ®-îc sö dông khi ®èi t-¬ng øng lµ mét x©u ký tù hoÆc mét  
gi¸ trÞ kiÓu float hay double.  
Trong tr-êng hîp ®èi t-¬ng øng cã gi¸ trÞ kiÓu float hay double th× pp lµ ®é  
chÝnh x¸c cña tr-êng ra. Nãi mét c¸ch cô thÓ h¬n gi¸ trÞ in ra sÏ cã pp ch÷ sè  
sau sè thËp  
ph©n.  
Khi v¾ng mÆt pp th× ®é chÝnh x¸c sÏ ®-îc xem lµ 6.  
Khi ®èi lµ x©u ký tù :  
19  
NÕu pp nhá h¬n ®é dµi cña x©u th× chØ pp ký tù ®Çu tiªn cña x©u ®-îc in ra. NÕu  
kh«ng cã pp hoÆc nÕu pp lín h¬n hay b»ng ®é dµi cña x©u th× c¶ x©u ký tù  
®-îc in ra.  
VÝ dô :  
KÕt qu¶ ra  
fw  
pp  
DÊu -  
KÕt qu¶ ®-a  
ra  
§é dµi  
tr-êng ra  
-435.645  
-435.645  
-435.645  
"alphabeta"  
"alphabeta"  
"alpha"  
10  
10  
8
2
0
cã  
cã  
-435.65  
-436  
7
4
v¾ng  
3
cã  
-435.645000  
alp  
11  
3
8
v¾ng  
v¾ng  
cã  
v¾ng  
8
v¾ng  
6
alphabeta  
alpha  
9
5
C¸c ký tù chuyÓn d¹ng vµ ý nghÜa cña nã :  
Ký tù chuyÓn d¹ng lµ mét hoÆc mét d·y ký hiÖu x¸c ®Þnh quy t¾c chuyÓn d¹ng vµ d¹ng in  
ra cña ®èi t-¬ng øng. Nh- vËy sÏ cã t×nh tr¹ng cïng mét sè sÏ ®-îc in ra theo c¸c d¹ng kh¸c  
nhau. CÇn ph¶i sö dông c¸c ký tù chuyÓn d¹ng theo ®óng qui t¾c ®Þnh s½n. B¶ng sau cho c¸c th«ng  
tin vÒ c¸c ký tù chuyÓn d¹ng.  
Ký tù chuyÓn d¹ng  
ý nghÜa  
d
o
x
§èi ®-îc chuyÓn sang sè nguyªn hÖ thËp ph©n  
§èi ®-îc chuyÓn sang hÖ t¸m kh«ng dÊu ( kh«ng cã sè 0 ®øng tr-íc )  
§èi ®-îc chuyÓn sang hÖ m-íi s¸u kh«ng dÊu ( kh«ng cã 0x ®øng  
tr-íc )  
u
c
s
§èi ®-îc chuyÓn sang hÖ thËp ph©n kh«ng dÊu  
§èi ®-îc coi lµ mét ký tù riªng biÖt  
§èi lµ x©u ký tù, c¸c ký tù trong x©u ®-îc in cho tíi khi gÆp ký tù  
kh«ng hoÆc cho tíi khi ®ñ sè l-îng ký tù ®-îc x¸c ®Þnh bëi c¸c ®Æc t¶  
vÒ ®é chÝnh x¸c pp.  
e
f
§èi ®-îc xem lµ float hoÆc double vµ ®-îc chuyÓn sang d¹ng thËp  
ph©n cã d¹ng [-]m.n..nE[+ hoÆc -] víi ®é dµi cña x©u chøa n lµ pp.  
§èi ®-îc xem lµ float hoÆc double vµ ®-îc chuyÓn sang d¹ng thËp  
ph©n cã d¹ng [-]m..m.n..n víi ®é dµi cña x©u chøa n lµ pp. §é chÝnh  
x¸c mÆc ®Þnh lµ 6. L-u ý r»ng ®é chÝnh x¸c kh«ng x¸c ®Þnh ra sè c¸c  
ch÷ sè cã nghÜa ph¶i in theo khu«n d¹ng f.  
20  
Tải về để xem bản đầy đủ
doc 142 trang Thùy Anh 27/04/2022 4100
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình môn Ngôn ngữ lập trình C", để 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:

  • docgiao_trinh_mon_ngon_ngu_lap_trinh_c.doc