HTD (TH0003) C Programming (Se) Page: 1
«n tËp C¸C KIÕN THøC CB VÒ LËP TR×NH C
[]
A.C¸C PHÇN Tö C¬ B¶N:
C¸c phÐp tÝnh:
PhÐp to¸n c¬ b¶n: + , - , * , / , %(lÊy phÇn d).
PhÐp to¸n t¨ng gi¶m: x++ hay ++x ( x--,--x): t¨ng (gi¶m) x xuèng 1 ®¬n
vÞ.
PhÐp to¸n trªn Bit: & (and), | (or), ^ (XOR), << (dÞch tr¸i), >> (dÞch
ph¶i).
BiÓu thøc ®iÓu kiÖn: có ph¸p: BT1? BT2: BT3 (BT: BiÓu thøc). NÕu
BT1 ®óng(<>0) th× BT ®iÒu kiÖn trªn = gi¸ trÞ cña BT2 ngîc l¹i = gi¸ trÞ cña
BT3 nÕu BT1 sai (=0). VD: printf(“Min of a & b: %d”,a<b?
a:b);
KiÓu d÷ liÖu:
int (-32768 ... 32767) (2 hoÆc 4 Byte); unsigned int (0 ... 65535).
char (-128 ... 127) (1 Byte); unsigned char (0 ... 255).
long (-2147483648 ... 2147483647) (4 Byte). unsigned long (0 ...
4294967297).
float (3.4 E-38 ... 3.4E+38) (4 Byte).
double (1.7E-308 ... 1.7E+308) (8 Byte). long double (3.4E-4932 ...
1.1E4932).
§Þnh nghÜa kiÓu víi typedef: typedef khaib¸o.... VD: t¹o mét kiÓu ma
trËn kÝch thíc [20][20] víi tªn lμ matrix : typedef float
matrix[20][20];
BiÕn, h»ng sè:
Khai b¸o biÕn: kiÓud÷liÖu tªnbiÕn; hay kiÓud÷liÖu tªnbiÕn =
gi¸trÞkhëi®Çu;
Khai b¸o h»ng sè: const type NAME=gi¸trÞ; hay #define tªnh»ngsè
gÝatrÞ;
VD: const float Pi=3.14; #define Pi 3.14;
HTD (TH0003) C Programming (Se) Page: 2
C¸c hμm c¬ b¶n : (C¸c hμm kiÓm tra ®ù¬c khai b¸o trong <ctype.h>).
fabs(x): lÊy gi¸ trÞ tuyÖt ®èi.
sin(x), cos(x), tan(x): lÊy sin, cos, tang
cña x.
floor(x): LÊy phÇn nguyªn cña sè x.
exp(x): tÝnh e mò x (ex).
flushall(): xo¸ bé ®Öm bμn phÝm.
log(x): tÝnh ln(x).
log10(x): tÝnh lg(x).
pow(x,n): tÝnh x mò n (xn).
M_PI: H»ng sè Pi.
void calloc(unsigned n, unsigned size): cÊp ph¸t vïng nhí n*size byte,
nÕu thμnh c«ng hμm tr¶ vÒ ®Þa ®Çu vïng nhí ®îc cÊp, ngîc l¹i tr¶ vÒ
NULL. §Ó gi¶i phãng vïng nhí ®îc cÊp ph¸t bëi malloc hay calloc do pt
trá tíi ta dïng : void free(void *pt); <alloc.h>
int getchar(void): nhËn mét ký tù tõ bμn phÝm (stdin), tr¶ vÒ ký tù nhËn
®îc.
int random(int n): cho mét gi¸ trÞ ngÉu nhiªn tõ 0 ... n-1. <stdlib.h>
int tolower(int c): ®æi ký tù ch÷ hoa sang ch÷ thõ¬ng. <ctype.h>
int toupper(int c): ®æi ký tù ch÷ thêng sang ch÷ hoa.<ctype.h>
int isalnum(int c): kiÓm tra c cã ph¶i lμ ký tù alphanumeric? (ch÷ c¸i hay
sè).
int isalpha(intc): kiÓm tra c cã ph¶i lμ ch÷ c¸i kh«ng?
int isdigit(int c): kiÓm tra c cã ph¶i lμ ch÷ sè kh«ng?
Int ispunct(int c): kiÓm tra c cã ph¶i lμ ký tù chÊm c©u kh«ng?
int isxdigit(int c): kiÓm tra c cã ph¶i lμ ch÷ sè hÖ 16 kh«ng?
int isupper(int c): kiÓm tra c cã ph¶i lμ ch÷ hoa (tõ A ®Õn Z) kh«ng.
Chi chó: C¸c hμm kiÓm tra nÕu tho¶ th× tr¶ vÒ gi¸ trÞ <>0, ngîc l¹i tr¶ vÒ 0.
PhÐp g¸n: Tªn biÕn = BiÓuthøc / biÕn;
XuÊt nhËp d÷ liÖu:
XuÊt: printf(“ký tù ®iÒu khiÓn”,bt1,bt2,...);
Trong ®ã danh s¸ch biÓu thøc cã thÓ bao gåm biÓu thøc, sè, hay “v¨n b¶n”,
c¸c ®èi tîng ph¶i c¸ch nhau bëi dÊu phÈy.
Vd: printf( “Nam %d la the ky %d: ”, 1999+2, 40/
2);
HTD (TH0003) C Programming (Se) Page: 3
Ö Nam 2001 la the ky 20
NhËp: scanf(“c¸c ký tù ®Þnh d¹ng”,biÕn1, biÕn2,...).
scanf(“%d%d”,&a,&b);
b.CÊu tróc ®iÒu kiÖn, rÏ nh¸nh vμ vßng lÆp:
if (bieuthuc) lÖnh1;
hay if (bieuthuc) lÖnh1;
else lÖnh2;
Trong cÊu tróc thø 1, nÕu bieuthuc cho gi¸ trÞ kh¸c 0 th× thùc hiÖn lÖnh1 vμ =0 th×
th«i, cßn trong cÊu tróc thø 2 nÕu bieuthuc cho gi¸ trÞ kh¸c 0 th× thùc hiÖn lÖnh1 vμ =0
th× thùc hiÖn lÖnh2. Chó ý lμ trong th©n if vμ else chØ lμ 1 c©u lÖnh ®¬n, nÕu cã nhiÒu
lÖnh th× ph¶i lång vμo {...};
switch (biÓu thøc)
{
case x: lÖnh; break;
..........
case n: lÖnh; break;
default :lÖnh; break;
}
ý nghÜa: c©u lÖnh rÏ nh¸nh switch sÏ tÝnh gi¸ trÞ cña biÓu thøc vμ thùc hiÖn lÖnh
t¬ng øng trong case nμo cã gi¸ trÞ nμy. NÕu kh«ng cã gi¸ trÞ trong case nμo = gi¸
trÞ cña biÓu thøc th× thùc hiÖn lÖnh sau default.
for (biÕn®kh[= gi¸ trÞ ®Çu]; ®iÒu kiÖn ; phÐp to¸n thay ®æi gi¸ trÞ biÕn ®kh ) lÖnh
;
NÕu cã nhiÒu lÖnh th× ph¶i lång vμo {... };
while (biÓu thøc) lÖnh; NÕu cã nhiÒu lÖnh th× lång vμo{... };
ý nghÜa: Trong khi biÓu thøc <>0 th× thùc hiÖn lÖnh.
do lÖnh while(biÓu thøc) ; NÕu cã nhiÒu lÖnh th× lång vμo {}.
ý nghÜa: Thùc hiÖn lÖnh nhiÒu lÇn trong biÓu thøc <>0 .
goto vμ nh·n: (Nh·n (handle) cã d¹ng nh tªn biÕn, ®øng tríc dÊu 2 chÊm :)
HTD (TH0003) C Programming (Se) Page: 4
Có ph¸p: goto nh·n; Khi gÆp dßng nμy m¸y sÏ nh·y ®Õn c©u lÖnh cã nh·n viÕt
sau tõ kho¸ goto.
CONTINUE, BREAK Vμ SIZEOF:
o C©u lÖnh continue dïng ®Ó b¾t ®Çu mét vßng lÆp míi cña chu tr×nh bªn trong
nhÊt chøa nã. Trong th©n for m¸y sÏ chuyÓn ®Õn bíc khëi ®Çu kÕ tiÕp. Cßn
trong while vμ do while m¸y sÏ chuyÓn ®Õn x¸c ®Þnh gi¸ trÞ biÓu thøc sau while
vμ tiÕn hμnh kiÓm tra ®iÒu kiÖn kÕt thóc vßng lÆp, (continue kh«ng dïng cho
switch).
o C©u lÖnh break cho phÐp ta tho¸t khái for, while, do while vμ switch. Khi cã
nhiÒu vßng lÆp lång nhau, break sÏ ®a ra khái vßng lÆp hay switch bªn trong
nhÊt.
o To¸n tö sizeof cho kÝch thíc (byte) cña mét kiÓu hay mét ®èi tîng d÷ liÖu,
có ph¸p:
sizeof(kiÓud÷liÖu) hay sizeof(®èitîngd÷liÖu). C¸c kiÓu d÷ liÖu nh int, char,
float, kiÓu tù ®Þnh nghÜa,... C¸c ®èi tîng d÷ liÖu nh m¶ng, cÊu tróc, biÕn,...
Thêng dïng ®Ó x¸c ®Þnh sè phÇn tö cña m¶ng khi ®îc khëi ®Çu:
int a[]={1,2,3,4,5,6};
int spt=sizeof(a)/sizeof(int);
C. Hμm (FUNCTION):
§Þnh nghÜa Hμm:
<KiÒud÷liÖu / void> TªnHμm (Danhs¸chthamsè)
<Khai b¸o kiÓu cho c¸c tham sè>;
{Khai b¸o biÕn côc bé vμ th©n hμm};
Sö dông Hμm:
Tªn hμm (Danhs¸chc¸cthamsèthùcnÕucã);
TruyÒn tham sè:
+ TruyÒn b»ng trÞ: ®©y lμ chÕ ®é truyÒn tham sè mÆc ®Þnh cña C. Víi c¸ch truyÒn
nμy gi¸ trÞ cña tham sè thùc sÏ kh«ng bÞ thay ®æi sau khi hμm thùc hiÖn.
+TruyÒn b»ng biÕn: tøc muèn truyÒn c¶ néi dung lÉn ®Þa chØ cña biÕn. Khi ®ã ta
ph¶i sö dông biÕn con trá.
HTD (TH0003) C Programming (Se) Page: 5
D. M¶ng (Array):
M¶ng 1 chiÒu:
Khai b¸o têng minh: KiÓu tenmang[sè phÇn tö] ;
Khai b¸o kh«ng têng minh: KiÓu tenmang []; C¸ch khai b¸o nμy ®îc sö
dông trong c¸c trêng hîp: võa khai b¸o võa g¸n trÞ (vd: int a[]={1,2,3,7};
), m¶ng lμ tham sè hμm (vd: int nhapmang(int a[],int n, int m) ;).
XuÊt/ nhËp m¶ng: ta dïng vßng lÆp for(vd for (i=1; i<n; i++) ....;), hay ta
cã thÓ t¹o mét hμm ®Ó nhËp m¶ng víi sè phÇn tö kh«ng biÕt tríc, kÕt thóc
khi nhËp sè 0.
void nhap(int a[], int*n)
{
for (*n=0;*n<20,(*n)++)
{
printf(“A[%d]:”,*n);
scanf(“%d”,&a[*n]);
if (a[*n]==0) break;
}
}
S¾p xÕp m¶ng gi¶m dÇn (Buble sort).
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (A[i]<A[j])
{
tam=A[i];
A[i]=A[j];
A[j]=tam;
}
M¶ng 2 chiÒu:
Khai b¸o têng minh: KiÓu tenmang[sècét][sèdßng] ; Vd: a[20][10];
Khai b¸o kh«ng têng minh: KiÓu tenmang [ ][sècét] ; sö dông c¸ch nμy
trong c¸c trêng hîp: võa khai b¸o võa g¸n trÞ(Vd: int a[][3]={{1,2,3},{-1,-
2,-3}};), m¶ng lμ tham sè hμm( Vd: void nhap(a[][max], int n);).