Giáo trình 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 baolam 09/05/2022 3580
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình 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_ngon_ngu_lap_trinh_c.doc