You are on page 1of 98

1

NGN NG LP TRNH
C/C++
Nguyn nh Thun
Khoa Cng Ngh Thng Tin
i hc Nha Trang
Nha Trang, 7-2007
2
Ni dung mn hc
Chng 1: Tng quan
Chng 2: Cc ton t
Chng 3: Cc cu trc iu khin
Chng 4: D liu c cu trc
Chng 5: Cc hm trong C
Chng 6: Cc cu trc d liu khc
Chng 7: ha trong C
3
Chng 1: Tng quan
1.1 Gii thiu
c nhiu sch trn th gii vit v C/C++ v hu
ht l ca ngi, nht l cc lp trnh vin lun xem
C/C++ l cng c mnh v uyn chuyn.
C l kt qu ca qu trnh pht trin khi u t ngn
ng BCPL (do Martin Richards a ra vo nm 1967)
l sn phm ca d n Combine Programming
Language gia 2 trng i hc London v
Cambridge. Ngn ng B (do Ken Thompson pht trin
t ngn ng BCPL vo nm 1970 khi vit h iu
hnh UNIX u tin trn my PDP-7) v ngn ng B
l tin thn ca ngn ng C.
4
1.1 Gii thiu (tip)
Nm 1978, hai tc gi Brian Kernighan v Dennish
Ritchie v cho xut bn quyn The C Programming
Language (Prentice-Hall) v c ph bin rng ri
n nay. V vy ngn ng C thng c gn cho
Tiu chun K&R.
Hin nay c gn 30 trnh bin dch C ang ph bin
trn th trng v chng khng nht qun nhau.
ci thin tnh trng ny, chun ANSI C cng c ra
i vo nm 1978, nhm chm lo vic pht trin cc
mi trng v cc hm th vin ca C.
5
Cc c im ca ngn ng C:
o Tnh c ng (compact): C ch c 32 t kha chun v 40 ton t chun,
nhng hu ht u c biu din bng nhng chui k t ngn gn.
o Tnh cu trc (structured): C c mt tp hp nhng ch th ca lp trnh
nh cu trc la chn, lp T cc chng trnh vit bng C c
t chc r rng, d hiu.
o Tnh tng thch (compatible): C c b tin x l v mt th vin chun v
cng phong ph nn khi chuyn t my tnh ny sang my tnh khc cc
chng trnh vit bng C vn hon ton tng thch.
o Tnh linh ng (flexible): C l mt ngn ng rt uyn chuyn v c php,
chp nhn nhiu cch th hin, c th thu gn kch thc ca cc m
lnh lm chng trnh chy nhanh hn.
o Bin dch (compile): C cho php bin dch nhiu tp tin chng trnh ring
r thnh cc tp tin i tng (object) v lin kt (link) cc i tng
li vi nhau thnh mt chng trnh c th thc thi c (executable)
thng nht.
6
1.2 Mi trng lm vic Turbo C
1. Gi Turbo C
2. Son tho chng trnh mi
3. Ghi chng trnh ang son tho vo a
4. Thc hin chng trnh
5. M mt chng trnh c trn a
6. Thot khi Turbo C v tr v DOS (hay Windows)
7. S dng mt s lnh trn thanh menu
7
1.3 Cc thnh phn trong chng trnh C
- B k t
- Cc t kho trong C
- Li ch thch t trong cp du /* v */
hoc sau //
8
V d 1:
/*VIDU.CPP*/
#include <stdio.h>
int main()
{
printf(Day la vi du \n");
printf(don gian Lap trinh C\n");
return 0;
}
/*VIDU.CPP*/
#include <stdio.h>
int main()
{
printf(Day la vi du \n");
printf(don gian Lap trinh C\n");
return 0;
}
Th Th vin nhp xut chun vin nhp xut chun
Ghi ch Ghi ch
Hm main Hm main
Bo CT kt thc cho HH Bo CT kt thc cho HH
9
V d 2
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a, b;
printf(Nhap 2 so ngguyen: ");
scanf("%d %d", &a, &b);
printf("%d - %d = %d\n", a, b, a - b);
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a, b;
printf(Nhap 2 so ngguyen: ");
scanf("%d %d", &a, &b);
printf("%d - %d = %d\n", a, b, a - b);
getch();
return 0;
}
Khai bo 2 bin s
nguyn, a v b
Nhp 2 s nguyn
vo a v b
Vit cc biu thc a,
b v a-b theo nh
dng %d
Nhap 2 so nguyen: 21 17
21 - 17 = 4
Nhap 2 so nguyen: 21 17
21 - 17 = 4
10
Ghi ch:
Phn ch thch c trnh bin dch b qua
Cc t c phn bit ch hoa v ch thng
Cu lnh lun c kt thc bng du ;
Chui k t phi ghi gia cp nhy kp
In xung dng dng k t \n
Chng trnh C gm 1 hoc nhiu hm, hm
c gi thc hin u tin l hm main.
11
1.4 Cc bc c bn khi vit
chng trnh
1. Phn tch, c t bi ton
2. Tm li gii (thut ton) v kiu d liu.
3. Vit chng trnh bng ngn ng lp trnh
4. Chy th sa li.
5. Tng kt chng trnh
12
1.5 Cc kiu d liu c bn
trong C
void Khng gi tr
8 bytes double S thc chnh
xc kp
4 bytes float S thc
2 bytes int S nguyn
1 byte char K t
Kch thc T kha Kiu
13
Kiu logic trong C
Trong C khng c kiu d liu logic
(nhn cc gi tr NG SAI), thay vo
cc biu thc so snh s cho kt qu
l S
Biuthc c gi tr 0 (0.0) ng vi kt
qu SAI (FALSE)
Biu thc c gi tr khc khng nh : 1,
3.5, -7, 10.4, u c xem l NG
(TRUE)
14
1.5 Cc kiu d liu c bn (tip)
B chuyn kiu (modifiers)
signed (c du)
unsigned (khng du)
short (s nguyn ngn)
long (s nguyn di gp i)
15
DataType
3.4 * (10**-4932) to 1.1 * (10**+4932) 80 bits long double
1.7 * (10**-308) to 1.7 * (10**+308) 64 bits double
3.4 * (10**-38) to 3.4 * (10**+38) 32 bits float
-2,147,483,648 to 2,147,483,647 32 bits long
0 to 4,294,967,295 32 bits unsigned long
-32,768 to 32,767 16 bits int
-32,768 to 32,767 16 bits short int
0 to 65,535 16 bits unsigned int
-32,768 to 32,767 16 bits enum
-128 to 127 8 bits char
0 to 255 8 bits unsigned char
Range Length Type
16
1.6 Khai bo trong C
- Tt c cc yu t trong chng trnh do ngi lp trnh
t ra phi c khai bo trc khi s dng, khai bo
trc ht phi t tn cho yu t .
- Tn hay cn gi l danh hiu(identifier) dng t cho
bin, hng, kiu, hm, ... Tn c t theo qui nh:
Gm ch ci, ch s, du gch chn.
Khng bt u bng ch s
Khng trng vi t kha.
Tn chun l mt s tn do C t sn nh: sin, cos...
di ti a ca tn l khng gii hn, tuy nhin ch
c 31 k t u tin l c ngha.
17
1. Khai bo bin
Khai bo:
Bin l i lng c ngi lp trnh nh
ngha v c t tn thng qua vic khai bo
bin. Bin dng cha d liu trong qu
trnh thc hin chng trnh v gi tr ca bin
c th thay i trong qu trnh ny.
Mi bin thuc v mt kiu d liu xc nh v
c gi tr thuc kiu .
<kiu> <tn bin>;
18
1. Khai bo bin (tip)
V d:
int a, b, c; /*Ba bin a, b,c c kiu int*/
long int chu_vi; /*Bin chu_vi c kiu long*/
float nua_chu_vi; /*Bin nua_chu_vi c kiu float*/
double dien_tich; /*Bin dien_tich c kiu double*/
a) Khai bo bin ngoi (bin ton cc): Cc bin c t
bn ngoi tt c cc hm(k c hm main) v phm vi
s dng trong ton b chng trnh.
b) Khai bo bin trong(bin cc b): Cc bin c t
bn trong hm hay khi lnh. Cc bin ny ch c tc
dng trong hm hoc khi lnh tng ng
19
1. Khai bo bin (tip)
V d 1:
#include <stdio.h>
#include<conio.h>
int a; //khai bao bien ngoai
int main ()
{
int I,j; //khai bao bien ben trong hm main
clrscr();
i=1; j=2;
a=3;
printf("\n Gia tri cua i la %d",i);
printf("\n Gia tri cua j la %d",j);
printf("\n Gia tri cua bienngoai a la %d",a);
getch();
return 0;
}
20
2. Khai bo hng
Khai bo
Hoc c khai bo thng qua gn gi tr u
Hng (Constant) l i lng khng i trong qu trnh thc thi
ca chng trnh.
Hng bao gm hng s nguyn, hng s thc, hng k t, hng
chui k t.
a) Hng s:
Hng s nguyn: 10, -167
Hng s thc: 1.234, -0.34E3
- Ngm nh, trnh bin dch ghp hng vo kiu d liu tng ng
nh nht
V d: hng s 10 c kiu int
hng s 60000 c kiu unsigned
hng s 100000 c kiu long
- C qui c cc hng s thc c kiu double
const [kiu] <tn hng> = <gi tr>;
21
2. Khai bo hng (tip)
- Trng hp mun ch r kiu ca hng, dng tip v
ng(suffix): U(unsigned), L (long), F(float)
- V d:
- 1,123,31000,-234 c kiu int
- -34L, 20000L c kiu long
- 34U, 40000 c kiu unsigned
- 23.45F, 34,4-3F c kiu float
- 12.23, 4522,78 c kiu double
- Hng bt u 0X l hng thuc h c s 16
- Hng bt u 0 l hng thuc h c s 8
- V d:
- int i=0x20, j=20, k=020; // i=32 v k=16 trong h c s 10
-
22
V d v hng
Cc hng pi, t, heso c to vi t kha const
#include <stdio.h>
int main(void)
{
const long double pi = 3.141592653590L;
const t = 7;
const heso = 9.123;
days_in_week = 5;
return 0;
}
#include <stdio.h>
int main(void)
{
const long double pi = 3.141592653590L;
const t = 7;
const heso = 9.123;
days_in_week = 5;
return 0;
}
Li Li
23
b) Hng k t
- Hng k t l mt k t ring bit c vit trong
cp du nhy n ( ). Mi mt k t tng ng
vi mt gi tr trong bng m ASCII. Hng k t
cng c xem nh tr s nguyn.
V d: a, A, 0, 9
- C th thc hin cc php ton s hc trn 2 k
t (thc cht l thc hin php ton trn gi tr
ASCII ca chng)
24
b) Hng k t(tip)
Mt s k t khng tin c (c tr ASCII t 0 n 31) trnh
bin dch C nhn bit iu ny bng cp k t bt u
bng \:
\n newline
\t tab
\b backspace
\r carriage return
\f form feed
\a alert
\
\
\\ \
25
Hng chui k t
Hng chui k t l mt chui hay mt xu k t
c t trong cp du nhy kp ( ).
- Cc chui c lu tr trong b nh nh l mt
dy cc k t lin tip v kt thc bng k t
rng (NULL) c m ASCII l 0.
V d: Ngon ngu lap trinh C
Khoa CNTT-DHNT
- Phn bit: A v A
26
Hng x l trc bin dch
Cc hng c th c xc lp trc khi bin
dch
Bn cht l tm kim v thay th
Thng c t tn vi cc ch ci in hoa
#include <stdio.h>
#define PI 3.141592653590L
#define DAYS_IN_WEEK 7
#define SUNDAY 0
int day = SUNDAY;
#include <stdio.h>
#define PI 3.141592653590L
#define DAYS_IN_WEEK 7
#define SUNDAY 0
int day = SUNDAY;
Tm t PI, thay bng 3.1415....
Lu : khng
c = v ;
27
3. Biu thc
Biu thc l s kt hp gia cc ton t (operator) v
cc ton hng (operand) theo ng mt trt t nht nh.
Mi ton hng c th l mt hng, mt bin hoc mt
biu thc khc.
Trong trng hp, biu thc c nhiu ton t, ta dng
cp du ngoc n () ch nh ton t no c thc
hin trc.
V d: Biu thc nghim ca phng trnh bc hai:
(-b + sqrt(Delta))/(2*a)
Trong 2 l hng; a, b, Delta l bin.
28
Chng 2: Cc ton t
1. Ton t gn
2. Ton t s hc
3.Ton t quan h
4. Ton t logic
5. Ton t thao tc bit
6. Ton t sizeof
7. Ton t chn theo iu kin
8, Ton t con tr
9. Ton t du phy
10.Th t u tin ca cc php ton
11. Hm xut d liu
12. Hm nhp d liu
29
1. Ton t gn:
C php
C th s dng lin tip nhiu php gn
Gi tr c gn s sn sng cho lnh k tip
int i, j, k, l, m, n;
i = j = k = l = m = n = 22;
printf("%i\n", j = 93);
int i, j, k, l, m, n;
i = j = k = l = m = n = 22;
printf("%i\n", j = 93);
n = 22 gn trc, li
gn n cho m, m
cho l, i, j, k, l, m,
n u nhn gi tr 22.
j c gn 93, gi tr 93 s
c in ra mn hnh
<bin> = <biu thc>
30
Ton t gn (tip)
C th s dng lin tip nhiu php gn
int i, j, k, l, m, n;
i = j = k = l = m = n = 11;
printf("%i\n", j = 91);
int i, j, k, l, m, n;
i = j = k = l = m = n = 11;
printf("%i\n", j = 91);
n = 11 gn trc, li
gn n cho m, m
cho l, i, j, k, l, m,
n u nhn gi tr 11.
j c gn 91, gi tr 91 s
c in ra mn hnh
31
Mt s php gn c bit
Cc php gn kt hp ton t khc:
+= -= *= /= %=
&= |= ^=
<<= >>=
Tng qut:
<bin> <ton t>= <biu thc>
tng ng:
<bin> = <bin> <ton t> <biu thc>
a += 27;
a += 27;
a = a + 27;
a = a + 27;
f /= 9.2;
f /= 9.2;
f = f / 9.2;
f = f / 9.2;
i *= j + 2;
i *= j + 2;
i = i * (j + 2);
i = i * (j + 2);
32
2. Cc cc php ton s hc
+ cng
- tr
* nhn
/ chia
% chia ly d
Luu :
/ cho kt qu ph thuc vo kiu ca cc ton hng
% khng thc hin c vi cc s thc
33
V d v ton t chia /
Trnh bin dch da vo kiu ca cc ton
hng quyt nh php chia tng ng
int main(void)
{
int i = 5, j = 4, k;
double f = 5.0, g = 4.0, h;
k = i / j;
h = f / g;
h = i / j;
return 0;
}
int main(void)
{
int i = 5, j = 4, k;
double f = 5.0, g = 4.0, h;
k = i / j;
h = f / g;
h = i / j;
return 0;
}
i, j kiu int, / l
php chia ly nguyn
k nhn gi tr 1
f, g kiu double, /
l php chia s thc
h nhn gi tr 1.25
Php chia nguyn, bt
k h c kiu double.
Kt qu l 1.00000
34
Php tng (gim) 1
NNLT C c 2 ton t c bit h tr vic tng (gim)
gi tr ca mt bin thay i 1 n v
++ tng 1
-- gim 1
Cc ton t ny c th t trc hoc sau bin.
int i = 5, j = 4;
i ++;
-- j;
++ i;
int i = 5, j = 4;
i ++;
-- j;
++ i;
i 6
j 3
i 7
35
Trc hay sau ?
Th t thc hin cc ton t ++ v -- ph thuc
vo v tr ca chng (trc hay sau) so vi bin:
#include <stdio.h>
int main(void)
{
int i, j = 5;
i = ++j;
printf("i=%d, j=%d\n", i, j);
j = 5;
i = j++;
printf("i=%d, j=%d\n", i, j);
return 0;
}
#include <stdio.h>
int main(void)
{
int i, j = 5;
i = ++j;
printf("i=%d, j=%d\n", i, j);
j = 5;
i = j++;
printf("i=%d, j=%d\n", i, j);
return 0;
}
i=6, j=6
i=5, j=6
i=6, j=6
i=5, j=6
Tng ng:
1. j++;
2. i = j;
Tng ng:
1. i = j;
2. j++;
36
Chuyn kiu/p kiu (Type Casting)
Chuynkiu lm thay i tam thi kiu ca mt
bin trong mt biu thc.
int main(void)
{
int i = 5, j = 4;
double f;
f = (double)i / j;
f = i / (double)j;
f = (double)i / (double)j;
f = (double)(i / j);
return 0;
}
int main(void)
{
int i = 5, j = 4;
double f;
f = (double)i / j;
f = i / (double)j;
f = (double)i / (double)j;
f = (double)(i / j);
return 0;
}
Php chia s nguyn
c thc hin, kt
qu, 1, c i sang
kiu double, 1.00000
37
3. Cc ton t quan h (Relational Operators)
NNLT C h tr cc ton t quan h:
< b hn
<= b hn hay bng
> ln hn
>= ln hn hay bng
== bng
!= khc
Tt c u cho kt qu 1 khi so snh ng
v 0 trong trng hp ngc li.
38
4. Ton t logic
NNLT C h tr cc ton t logic:
&& v (and)
|| hoc (or)
! ph nh (not)
Tt c u cho kt qu 1 hoc 0 tng ng
cc trng hp NG hoc SAI
int i, j = 10, k = 28;
i = ((j > 5) && (k < 100)) || (k > 24);
int i, j = 10, k = 28;
i = ((j > 5) && (k < 100)) || (k > 24);
39
5. Ton t thao tc bit (Bitwise Operators)
Cc ton t trn bit ch c tc dng trn cc kiu s
nguyn:
& And
| Or
^ Xor
~ Not
<< Shift Left
>> Shift Right
40
6. Ton t sizeof
sizeof(Obj)
Cho bit kch thc ca i tng theo s byte
#include <stdio.h>
int main(void)
{
long big;
printf("\"big\" is %u bytes\n", sizeof(big));
printf("a short is %u bytes\n", sizeof(short));
printf("a double is %u bytes\n", sizeof (double));
return 0;
}
#include <stdio.h>
int main(void)
{
long big;
printf("\"big\" is %u bytes\n", sizeof(big));
printf("a short is %u bytes\n", sizeof(short));
printf("a double is %u bytes\n", sizeof (double));
return 0;
}
"big" is 4 bytes
a short is 2 bytes
a double is 8 bytes
"big" is 4 bytes
a short is 2 bytes
a double is 8 bytes
41
7. Ton t chn theo iu kin
(iu kin) ? BT1 : BT2
Biu thc nhn gi tr BT1 nu iu kin khc 0
(NG), cc trng hp khc nhn gi tr BT2
int i, j = 100, k = -1;
i = (j > k) ? j : k;
int i, j = 100, k = -1;
i = (j > k) ? j : k;
int i, j = 100, k = -1;
i = (j < k) ? j : k;
int i, j = 100, k = -1;
i = (j < k) ? j : k;
Nu (j > k)
i = j;
Ngc li
i = k;
Nu (j > k)
i = j;
Ngc li
i = k;
Nu (j < k)
i = j;
Ngc li
i = k;
Nu (j < k)
i = j;
Ngc li
i = k;
42
8. Ton t con tr
+ Mt con tr l a ch trong b nh ca mt bin. Mt bin
con tr l mt bin c khai bo ring cha mt con
tr n mt i tng ca kiu ch ra n.
+ C hai ton t c s dng thao tc vi cc con tr.
- Ton t th nht l &, l mt ton t quy c tr v a
ch b nh ca h s ca n.
V d: p = &n
t vo bin m a ch b nh ca bin count.
Chng hn, bin n v tr b nh 2000, gi s n c gi tr
l 100. Sau cu lnh trn p s nhn gi tr 2000.
- Ton t th hai l *, l mt b sung cho &; y l mt
ton t quy c tr v gi tr ca bin c cp pht ti
a ch theo sau .
V d: m = *p
S t gi tr ca n vo m. By gi m s c gi tr l 100 v
100 c lu tr ti a ch 2000.
43
9. Ton t du phy ,
Ton t du , c s dng kt hp cc
biu thc li vi nhau. Bn tri ca ton t
du , lun c xem l kiu void. iu
c ngha l biu thc bn phi tr thnh gi
tr ca tng cc biu thc c phn cch
bi du phy.
V d: x = (y=3,y+1);
Trc ht gn 3 cho y ri gn 4 cho x. Cp
du ngoc n l cn thit v ton t du ,
c u tin thp hn ton t gn.
44
10. u tin ca ton t
Th t thc hin cc ton t trong mt biu thc ph
thuc vo u tin ca chng.
C 15 mc u tin.
Thng thng, ton t mt ngi c u tin cao hn
ton t hai ngi.
Cc cp du ngoc n () thng c dng ch r
th t cc ton t.
#include <stdio.h>
int main(void)
{
int j = 3 * 4 + 48 / 7;
printf("j = %i\n", j);
return 0;
}
#include <stdio.h>
int main(void)
{
int j = 3 * 4 + 48 / 7;
printf("j = %i\n", j);
return 0;
} j = 18
j = 18
45
Bng th t thc hin cc ton t
Ton t Th t (nu cng T)
() [] -> .
! ++ -- - + (cast) * & sizeof
* / %
+ -
<< >>
< <= >= >
== !=
&
|
^
&&
||
?:
= += -= *= /= %=
46
V d
#include <stdio.h>
int main(void)
{
int i = 0, j, k = 7, m = 5, n;
j = m += 2;
printf("j = %d\n", j);
j = k++ > 7;
printf("j = %d\n", j);
j = i == 0 & k;
printf("j = %d\n", j);
n = !i > k >> 2;
printf("n = %d\n", n);
return 0;
}
#include <stdio.h>
int main(void)
{
int i = 0, j, k = 7, m = 5, n;
j = m += 2;
printf("j = %d\n", j);
j = k++ > 7;
printf("j = %d\n", j);
j = i == 0 & k;
printf("j = %d\n", j);
n = !i > k >> 2;
printf("n = %d\n", n);
return 0;
}
47
11. Hm xut - printf
Xut d liu ra mn hnh:
printf("%d - %d=%d\n",a,b, a - b);
Cc k t hng c in nguyn vn
Cc k t nh dng c thay bng gi tr ca biu thc tng
ng:
%d: k t nh dng s nguyn kiu int
Cc k t iu khin: \n xung dng; \t du tab;
\\ du \; \ du
Th vin: stdio.h
printf(Chui nh dng , Cc biu thc);
48
11. Hm xut printf (tip)
In s thc c 3 s l, nu s cn in c nhiu hn 3 s l th lm trn. %.3f
In s thc ti a 6 k s (tnh lun du chm), nu s cn in nhiu hn 6
k s th in ht
%6f
In s thc %f
In s nguyn ti a 4 k s, nu s cn in nhiu hn 4 k s th in ht %4d
In ra s nguyn %d
V d
Xut s nguyn dng khoa hc (nhn 10 m x) %e hoc %E hoc %g hoc
%G
Xut chui k t %s
Xut mt k t %c
Xut s nguyn h thp lc phn %x
Xut s nguyn h bt phn %o
Xut s thc c <s ch s thp phn> theo quy tc lm trn s. %[.s ch s thp phn] f
Xut s nguyn %d
49
12. Hm nhp - scanf
Nhp d liu t bn phm
scanf("%d %d", &a, &b);
Trong chui nh dng ch c k t nh dng v khong
trng.
D liu phi c nhp vo cc bin.
Trc tn bin phi ghi du & - ton t a ch. Nu
khng c ton t a ch, gi tr ca bin s khng c
cp nht
Th vin: stdio.h
scanf(Chui nh dng, a ch ca cc bin);
50
12. Hm nhp scanf(tip)
Nhp s thc ti a 6 k s (tnh lun du chm), nu nhp nhiu hn 6 k s th ch
nhn c 6 k s u tin (hoc 5 k s vi du chm)
%6f
Nhp s thc %f
Nhp s nguyn ti a 4 k s, nu nhp nhiu hn 4 k s th ch nhn c 4 k s
u tin
%4d
Nhp s nguyn %d
V d:
Nhp mt k t %c
Nhp s thc c ti a <s k s> tnh c du chm %[s k s] f
Nhp s nguyn c ti a <s k s> %[s k s]d
ngha nh dng
51
Chng 3: Cc cu trc iu khin
1. Lnh if
2. Lnh switch
3. Lnh for
4. Lnh while
5. Lnh do .. While
52
1. Lnh if
Dng thc hin hay khng mt
pht biu theo mt iu kin.
Dng 1:
if (<Bthc K>) <Lnh S>;
V d
if (delta > 0)
{
x1 = (-b + sqrt(delta))/2/a;
x2 = (-b - sqrt(delta))/2/a;
}
Bthc K
Lnh S
T
Ch c 1
pht biu
trong thn
ca if
F
53
Dng 2 ca lnh if
Dng chn la pht biu no s c thc hin
gia 2 pht biu.
C php:if (< Bthc K >) <Lnh S1> ; else <Lnh S2> ;
#include <stdio.h>
#include <conio.h>
int main ()
{
float a;
printf("Nhap a = "); scanf("%f",&a);
if (a !=0 )
printf("Nghich dao cua %f la %f",a,1/a);
else
printf(Khong the tim nghich dao cua a);
getch();
return 0;
}
Bthc K
Lnh S1
T
F
Lnh S2
54
Trng hp c bit
Xt pht biu sau:
if (<K1>) if (<K2>) <S1>; else <S2>;
else s thuc v if no gn 1 cha c else
else else
?
K2
S1
Yes
No
S2
K2
Yes
No
55
2. Lnh switch
Dng chn mt
trong s nhng
pht biu thc
hin ty theo gi tr
ca biu thc chn.
Cc gi tr case: ch
ra cc trng hp
phn nhnh.
Cc gi tr case l
mt hay nhiu gi
tr ri rc theo sau
l du : v mt pht
biu tng ng, kt
thc l break.
C php:
switch (<Biu thc>)
{
case <gi tr 1>: <LnhS1>; break;

case <gi tr n>: <Lnh Sn>; break;
[default : <lnh mc nh Sn+1>;]
}
BiuThc
S1 S2 Sn+1 Sn
Gtr1 Gtr2 GtrN
default
56
V d 1
Nhp vo mt s nguyn, chia s nguyn ny cho 2 ly phn d. Kim tra
nu phn d bng 0 th in ra thng bo s chn, nu s d bng 1 th
in thng bo s l.
#include <stdio.h>
#include<conio.h>
int main ()
{ int songuyen, phandu;
clrscr();
printf("\n Nhap vao so nguyen ");
scanf("%d",&songuyen); phandu=(songuyen % 2);
switch(phandu)
{
case 0: printf("%d la so chan ",songuyen); break;
case 1: printf("%d la so le ",songuyen); break;
}
getch();
return 0;
}
57
V d 2
V d 2: Nhp vo 2 s nguyn v 1 php ton.
- Nu php ton l +, -, * th in ra kt qua l tng, hiu, tch ca 2 s.
- Nu php ton l / th kim tra xem s th 2 c khc khng hay khng? Nu khc khng th in ra
thng ca chng, ngc li th in ra thng bo khong chia cho 0.
#include <stdio.h>
#include<conio.h>
int main ()
{ int so1, so2; float thuong; char pheptoan;
printf("\n Nhap vao 2 so nguyen "); scanf("%d%d",&so1,&so2);
fflush(stdin); /*Xa k t enter trong vng m trc khi nhp php ton */
printf("\n Nhap vao phep toan "); scanf("%c",&pheptoan);
switch(pheptoan)
{ case '+': printf("\n %d + %d =%d",so1, so2, so1+so2); break;
case '-': printf("\n %d - %d =%d",so1, so2, so1-so2); break;
case '*': printf("\n %d * %d =%d",so1, so2, so1*so2); break;
case '/': if (so2!=0)
{ thuong=float(so1)/float(so2);
printf("\n %d / %d =%f", so1, so2, thuong); }
else printf("Khong chia duoc cho 0"); break;
default : printf("\n Chua ho tro phep toan %c", pheptoan); break;
}
getch();
return 0;
}
58
3. Lnh for
Lnh for cho php lp li cc lnh cho n khi Biu thc
iu kin 2 l sai
C php:
for (<biuthc 1>;<biuthc 2>;<biuthc 3>) <lnh S>
Bthc 2
Lnh S
T
F
BThc 3
Bthc 1
V d: Vit chng trnh nhp vo mt s nguyn
n. Tnh tng ca cc s nguyn t 1 n n.
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
printf("\n Nhap vao so n:");scanf("%d",&n);
tong=0;
for (i=1; i<=n; i++) tong+=i;
printf("\n Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
59
4. Lnh while
Dng lp li mt cng vic no
cho n khi iu kin sai.
C php
while (<Biu thc K>) <Lnh S>
while kim tra iu kin trc ri mi
thc hin lnh S.
S lp lp l khng bit trc.
S ln lp ti thiu l 0 v ti a l
khng xc nh.
Ch : Trong thn ca while phi c
t nht mt pht biu c kh nng
thay i gi tr ca iu kin. Nu
khng s lp v tn (infinite loop)
V d:
gt=1; i=1;
while (i<n)
{
i++;
gt=gt*i;
}
BTK
Lnh S
T
F
60
V d v lnh while
V d 2: Vit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc
s nguyn t 1 n n.
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n);
tong=0;
i=1;
while (i<=n)
{
tong+=i;
i++;
}
printf("\n Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
61
5. Lnh do .. while
Vng lp do while dng lp li mt cng vic
no khi iu kin cn ng.
C php:
do <Lnh S> while (<Biu thc iu kin>)
Thc hin xong lnh S mi kim tra iu kin.
S lp lp l khng bit trc.
S ln lp ti thiu l 1 v ti a l khng xc
nh.
Ch : Trong thn ca do .. While phi c t
nht mt pht biu c kh nng thay i gi tr
ca iu kin. Nu khng s lp v tn (infinite
loop)
BTK
S
F
T
62
V d v lnh do .. while
Vit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc s nguyn
t 1 n n.
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n);
tong=0;
i=1;
do
{
tong+=i;
i++;
} while (i<=n);
printf("\n Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
63
6. CC CU LNH C BIT
1. Lnh break C php: break
Dng thot khi vng lp. Khi gp cu lnh ny trong vng lp, chng trnh s
thot ra khi vng lp v ch n cu lnh lin sau n. Nu nhiu vng lp th
break s thot ra khi vng lp gn nht. Ngoi ra, break cn c dng trong
cu trc la chn switch.
2. Lnh continue C php: continue
- Khi gp lnh ny trong cc vng lp, chng trnh s b qua phn cn li trong
vng lp v tip tc thc hin ln lp tip theo.
- i vi lnh for, biu thc 3 s c tnh tr v quay li bc 2.
- i vi lnh while, do while; biu thc iu kin s c tnh v xt xem c th
tip tc thc hin <Lnh S> na hay khng? (da vo kt qu ca biu thc iu
kin).
V d: while (x != y)
{

if (x==a) continue;
b+=6;

if (y==b) break;

}
64
Chng 4: Cc hm trong C
1. Khi nim hm trong C
Ti sao phi dng chng trnh con:
C cng vic cn phi c thc hin ti nhiu ni trong chng
trnh => tch cng vic thnh chng trnh con
Phn on, module chng trnh thun tin trong qun l,
trnh by v pht trin.
Trong C, chng trnh con c gi l hm. Hm trong C c
th tr v kt qu thng qua tn hm hay c th khng tr v
kt qu.
Hm c hai loi: hm chun (hm c trnh bin dch C vit
sn) v hm t nh ngha.
Mt hm khi c nh ngha th c th c gi trong
chng trnh.
Trong C, hm main() c gi thc hin u tin
65
V d
Vit hm main dng nhp vo 2 s nguyn a,b v in ra mn hnh s ln trong 2
s nhp
#include <stdio.h>
#include <conio.h>
int max(int a, int b);
int main()
{
int a, b, c;
printf("\n Nhap vao 3 so a, b,c ");
scanf("%d%d%d",&a,&b,&c);
printf("\n So lon la %d",max(a, max(b,c)));
getch();
return 0;
}
int max(int a, int b)
{
return (a>b) ? a:b;
}
66
Ghi ch
- Dng int max(int a, int b); gi l Prototype ca hm, qui nh
kiu tr v ca hm, s lng tham s v kiu ca chng.
- Cc Prototype ca cc hm sn c cha trong cc tp tin *.h
- Hm c th c gi bi hm main(), hoc t mt hm khc
hoc chnh n( qui).
- Hm c th c tham s hoc khng.
- Hm ch c 1 im vo (lnh u tin ca hm) nhng c th
c nhiu im ra (lnh return).
- Mt hm c th c vit ngay trong vn bn chng trnh
(nh trn), hoc c vit trong tp tin khc v a vo
chng trnh bng ch th #include, hoc c bin dch ring
r v kt ni li.
- Khc vi ngn ng lp trnh Pascal:
- Ngn ng C khng c khi nim th tc (tht ra th tc khng
khc hm, th tc khng quan tm n gi tr tr v)
- Khng cho php cc hm lng vo nhau
67
2. Hm th vin/hm chun
Hm th vin l nhng hm c nh ngha sn trong mt th vin
no , mun s dng cc hm th vin th phi khai bo th vin trc
khi s dng bng lnh #include <tn th vin.h>
ngha ca mt s thu vin thung dng:
1. stdio.h : Th vin cha cc hm vo/ ra chun (standard input/output). Gm cc
hm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(),
fread(), fwrite(), getchar(), putchar(), getw(), putw()
2. conio.h : Th vin cha cc hm vo ra trong ch DOS (DOS console). Gm
cc hm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(),
clreol(),
3. math.h: Th vin cha cc hm tnh ton gm cc hm abs(), sqrt(), log().
log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),
4. alloc.h: Th vin cha cc hm lin quan n vic qun l b nh. Gm cc
hm calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(),
5. io.h: Th vin cha cc hm vo ra cp thp. Gm cc hm open(), _open(),
read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(),
filelength(), lock(),
6. graphics.h: Th vin cha cc hm lin quan n ha. Gm initgraph(),
line(), circle(), putpixel(), getpixel(), setcolor(),
...
Mun s dng cc hm th vin th ta phi xem c php ca cc hm v s dng
theo ng c php (xem trong phn tr gip ca Turbo C).
68
3. Hm ca ngi s dng
Hm ngi dng l nhng hm do ngi lp
trnh t to ra nhm p ng nhu cu x l ca
mnh.
Cu trc ca hm:
<kiu kt qu> <Tn hm> ([<kiu> <tham s>][,<kiu><tham s>][])
{
[Khai bo]
<cu lnh thc hin hm>
[return <Biu thc>;]
}
69
Truyn Bng Tr - Tham bin - Tham Chiu
V d: Vit chng trnh hon v 2 phn t
#include<stdio.h>
// Truyn bng tham tr
void Swap1 (int x, int y)
{
int temp = x;
x = y;
y = temp;
}
// Truyn bng tham bin (con tr)
void Swap2 (int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
// Truyn bng thamchiu
void Swap3 (int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{ int m=12; n=28;
Swap1(m,n);
printf(m=%d n=%d\n,m,n);
Swap2(&m,&n);
printf(m=%d n=%d\n,m,n);
Swap3(m,n);
printf(m=%d n=%d\n,m,n);
return 0;
}
?
?
70
4. Tham tr v tham bin
Mc nhin, vic truyn tham s cho hm trong C l truyn theo gi tr; ngha l
cc gi tr thc (tham s thc) khng b thay i gi tr khi truyn cho cc
tham s hnh thc
V d 1: Gi s mun in ra cc, mi dng gm 50 k t no . n gin ta
vit hm, hm ny s in ra trn mt dng 50 k t cho trc.
#include <stdio.h>
#include <conio.h>
void InKT(char ch)
{ int i;
for(i=1;i<=50;i++) printf(%c,ch);
] printf(\n);
}
int main()
{
char c = A;
InKT(*); /* In ra 50 dau * */
InKT(+);
InKT(c);
return 0;
}
Lu :
- Trong hm InKT trn, bin ch gi l
tham s hnh thc c truyn bng gi
tr (gi l tham tr ca hm). Cc tham tr
ca hm coi nh l mt bin cc b trong
hm v chng c s dng nh l d
liu u vo ca hm.
-Khi chng trnh con c gi thi
hnh, tham tr c cp nh v nhn
gi tr l bn sao gi tr ca tham s thc.
-Vic thay i gi tr ca chng khng c
ngha g i vi bn ngoi hm, khng
nh hng n chng trnh chnh,
ngha l khng lm nh hng n tham
s thc tng ng.
71
5. HM QUY
nh ngha: Mt hm c gi l quy nu bn trong thn hm c lnh gi n chnh n.
V d: nh ngha giai tha ca mt s nguyn dng n nh sau:
n!=1* 2 * 3 ** (n-1) *n = (n-1)! *n (vi 0!=1)
Nh vy, tnh n! ta thy nu n=0 th n!=1 ngc li th n!=n * (n-1)!
Vi nh ngha trn th hm quy tnh n! c vit:
#include <stdio.h>
#include <conio.h>
/*Hm tnh n! bng quy*/
unsigned int giaithua_dequy(int n)
{
if (n==0) return 1;
else return n*giaithua_dequy(n-1);
}
/*Hm tnh n! khng quy*/
unsigned int giaithua_khongdequy(int n)
{ unsigned int kq,i;
kq=1;
for (i=2;i<=n;i++) kq=kq*i;
return kq;
}
int main()
{
int n;
printf("\n Nhap so n can tinh giai thua "); scanf("%d",&n);
printf("\nGoi ham de quy: %d !=%u",n,giaithua_dequy(n));
printf("\nGoi ham khong de quy: %d != %u",
n,giaithua_khongdequy(n));
getch();
return 0;
}
72
c im cn lu khi vit hm quy
- Hm quy phi c 2 phn:
+ Phn dng hay phi c trng hp nguyn t. Trong v d
trn th trng hp n=0 l trng hp nguyn t.
+ Phn quy: l phn c gi li hm ang c nh ngha.
Trong v d trn th phn quy l n>0 th n! = n * (n-1)!
- S dng hm quy trong chng trnh s lm chng trnh d
c, d hiu v vn c nu bt r rng hn. Tuy nhin
trong a s trng hp th hm quy tn b nh nhiu hn
v tc thc hin chng trnh chm hn khng quy.
- Ty tng bi c c th m ngi lp trnh quyt nh c nn dng
quy hay khng (c nhng trng hp khng dng quy
th khng gii quyt c bi ton).
73
6. Tham s ca hm main()
- L 2 tham s : argc v argv
- Tham s argc l s nguyn ch tham s trn dng lnh, c gi tr nh nht =1,
v bn thn tn chng trnh l tham s th nht
- Tham s argv l mng cc con tr, tr n cc tham s trn dng lnh: char
*argv[ ];
argv[0]: cha a ch ca tn chng trnh
argv[1]: cha a ch ca tham s th nht
argv[2]: cha a ch ca tham s th hai
V d: Chng trnh sau c bin dch thnh MYPRO.EXE, nu nhp trn dng lnh
MYPRO th c dng nhc nh, nu nhp MYPRO LAN th Chao ban LAN
#include <stdio.h>
main(int argc, char *argv[])
{
if (argc !=2) printf(Phai nhap Ten);
else printf(Chao ban %s\n,argv[1]);
}
74
Chng 5: D liu c cu trc
1. Kiu mng:
- Mng l mt tp hp cc phn t c nh c cng mt kiu, gi l
kiu phn t. Kiu phn t c th l c cc kiu bt k: k t, s,
chui k t; cng c khi ta s dng kiu mng lm kiu
phn t cho mt mng (trong trng hp ny ta gi l mng ca
mng hay mng nhiu chiu).
- C th chia mng lm 2 loi: mng 1 chiu v mng nhiu chiu.
- Khai bo mng vi s phn t xc nh
C php: <Kiu> <Tn mng ><[s phn t]>
ngha:
- Tn mng: y l mt ci tn t ng theo quy tc t tn ca
danh biu. Tn ny cng mang ngha l tn bin mng.
- S phn t: l mt hng s nguyn, cho bit s lng phn t ti
a trong mng l bao nhiu (ni khc l kch thc ca mng).
- Kiu: mi phn t ca mng c d liu thuc kiu g.
- Khi khai bo mt bin mng gm c s phn t phn t, phn t
th nht l tn mng [0], phn t cui cng l tn mng[s
phn t -1]
75
1. Kiu mng(tip)
V d: int a[10]; /* Khai bo bin mng a gm 10 phn t , phn t th
nht l a[0], phn t cui cng l a[9].*/
C th coi mng a l mt dy lin tip cc phn t trong b nh nh sau:
2. Khai bo mng vi s phn t khng xc nh
C php: <Kiu> <Tn mng> <[]>
Khi khai bo, khng cho bit r s phn t ca mng, kiu khai bo
ny thng c p dng trong cc trng hp: va khai bo va
gn gi tr, khai bo mng l tham s hnh thc ca hm.
a. Va khai bo va gn gi tr
C php: <Kiu> <Tn mng> []= {Cc gi tr phn cch bi du ,}
Nu va khai bo va gn gi tr th mc nhin C s hiu s phn t
ca mng l s gi tr m chng ta gn cho mng trong cp du {}.
b. Khai bo mng l tham s hnh thc ca hm, trong trng hp ny ta
khng cn ch nh s phn t ca mng l bao nhiu.
V tr 0 1 2 3 4 5 6 7 8 9
Tn phn t a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

76
1. Kiu mng(tip)
- Truy xut tng phn t ca mng
+ Mi phn t ca mng c truy xut thng qua Tn bin mng
theo sau l ch s nm trong cp du ngoc vung [ ]. Chng hn
a[0] l phn t u tin ca mng a c khai bo trn. Ch s
ca phn t mng l mt biu thc m gi tr l kiu s nguyn.
+ Vi cch truy xut theo kiu ny, Tn bin mng[Ch s] c th coi
nh l mt bin c kiu d liu l kiu c ch ra trong khai bo
bin mng.
V d 2: Va khai bo va gn tr cho 1 mng 1 chiu cc s nguyn. In
mng s nguyn ny ln mn hnh.
#include <stdio.h>
#include <conio.h>
int main()
{
int n,i,j,tam;
int dayso[]={66,65,69,68,67,70};
n=sizeof(dayso)/sizeof(int); /*Ly s phn t*/
printf("\n Noi dung cua mang ");
for (i=0;i<n;i++) printf("%d ",dayso[i]);
return 0;
}
77
1. Kiu mng(tip)
V d 4: Nhp vo mt dy n s v sp xp cc s theo th t tng.
#include<conio.h>
#include<stdio.h>
void Nhap(int a[],int N)
{ int i;
for(i=0; i< N; i++)
{
printf("Phan tu thu %d: ",i);
scanf("%d",&a[i]);
}
}
void InMang(int a[], int N)
{ int i;
for (i=0; i<N;i++) printf("%d ",a[i]);
printf("\n");
}
void SapXep(int a[], int N)
{ int t,i;
for(i=0;i<N-1;i++)
for(int j=i+1;j<N;j++)
if (a[i]>a[j])
{ t=a[i]; a[i]=a[j]; a[j]=t; }
}
int main()
{ int b[20], N;
printf("So phan tu cua mang N=
");
scanf("%d",&N);
Nhap(b,N);
printf("Mang vua nhap: ");
InMang(b,N);
SapXep(b,N); /* Gi hm sp
xp*/
printf("Mang sau khi sap xep: ");
InMang(b,N);
getch();
return 0;
}
78
1. Kiu mng(tip)
V d: Vit chng trnh cho php nhp 2 ma trn a, b c m dng n ct, thc hin php ton
cng hai ma trn a,b v in ma trn kt qu ln mn hnh.
#include<conio.h>
#include<stdio.h>
void Nhap(int a[][10],int M,int N)
{ int i,j;
for(i=0;i<M;i++)
for(j=0; j<N; j++){
printf("Phan tu o dong %d cot %d: ",i,j);
scanf("%d",&a[i][j]);
}
}
void InMaTran(int a[][10], int M, int N)
{ int i,j;
for(i=0;i<M;i++){
for(j=0; j< N; j++) printf("%d ",a[i][j]);
printf("\n");
}
}
/* Cong 2 ma tran A & B ket qua la ma tran C*/
void CongMaTran(int a[][10],int b[][10],int M,int N,int c[][10])
{ int i,j;
for(i=0;i<M;i++)
for(j=0; j<N; j++) c[i][j]=a[i][j]+b[i][j];
}
int main()
{ int a[10][10], b[10][10], M, N;
int c[10][10];/* Ma tran tong*/
printf("So dong M= "); scanf("%d",&M);
printf("So cot M= "); scanf("%d",&N);
printf("Nhap ma tran A\n"); Nhap(a,M,N);
printf("Nhap ma tran B\n"); Nhap(b,M,N);
printf("Ma tran A: \n"); InMaTran(a,M,N);
printf("Ma tran B: \n"); InMaTran(b,M,N);
CongMaTran(a,b,M,N,c);
printf("Ma tran tong C:\n");
InMaTran(c,M,N);
getch();
return 0;
}
79
Mng nhiu chiu
20 25 38 28 Brisbane
13 19 32 24 Melbourne
17 22 34 26 Sydney
Ma ng Ma thu Ma h Ma xun
int Mua[3][4];
...
32 19 13 28 38 25
...
26 34 22 17 24 20
First row Second row Third row
hng u
hng hai hng ba
Cch t chc trong b nh
80
2. Kiu chui k t
- Kiu chui k t l mt trng
hp c bit ca mng cc k
t. Chui k t kt thc bng
k t c m ASCII l 0 (\0)
- Do , char[10]; //lu tr ti
a 9 k t
Ghi ch:
+ Khi p dng cc php ton
trn chui, ta phi s dng
cc hm (string.h)
V d:-Hm strcpy(chui1,chui 2):
chp chui 2 vo chui 1
-Hm strcmp(chui1,chui2):
so snh 2 chui tr v 0 nu 2
chui bng nhau .
V d: Nhp vo mt chui v hin th
trn mn hnh chui va nhp.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{ char Ten[12];
printf("Nhap chuoi: ");gets(Ten);
printf("Chuoi vua nhap: ");puts(Ten);
getch();
return 0;
}
81
3. Kiu con tr
- Cc bin trc y u l bin c kch thc v kiu d liu xc nh. Gi cc bin
kiu ny l bin tnh. Khi khai bo bin tnh, cc nh s c cp pht m khng bit
trong qu trnh chy chng trnh c s dng ht chng hay khng.
- Cc bin tnh dng ny s tn ti trong sut thi gian thc thi chng trnh d c
nhng bin m chng trnh ch s dng 1 ln ri b. Cc hn ch v bin tnh:
- Cp pht nh d, gy ra lng ph nh.
- Cp pht nh thiu, chng trnh thc thi b li.
- gii quyt nhng hn ch trn, ngn ng C cung cp cho ta mt loi bin c bit
gi l bin ng vi cc c im sau:
- Ch pht sinh trong qu trnh chy chng trnh ch khng pht sinh lc bt u chng trnh.
- Khi chy chng trnh, kch thc ca bin, vng nh v a ch vng nh c cp pht cho
bin c th thay i.
- Sau khi s dng xong c th gii phng tit kim ch trong b nh.
- V th, ngn ng C li cung cp cho ta mt loi bin c bit na khc phc tnh
trng ny, l bin con tr (pointer) vi cc c im:
- Bin con tr khng cha d liu m ch cha a ch ca d liu hay cha a ch ca nh
- Kch thc ca bin con tr khng ph thuc vo kiu d liu, lun c kch thc c nh l 2
bytes nu trong cng 1 on v 4 bytes nu khc on.
82
3. Kiu con tr(tip)
a. Khai bo bin con tr
C php: <Kiu> * <bin con tr>
V d 1: Khai bo 2 bin a,b c kiu int v 2 bin pa, pb l 2 bin con tr kiu int.
int a, b, *pa, *pb;
V d 2: Khai bo bin f kiu float v bin pf l con tr float
float f, *pf;
b. Cc php ton trn con tr
+. Php gn con tr: Hai con tr cng kiu c th gn cho nhau.
V d: int a, *p, *a ; float *f;
a = 5 ;
p = &a ;
q = p ; /* ng */
f = p ; /* sai do khc kiu */
+ Cng, tr con tr vi mt s nguyn: C th cng (+), tr (-) 1 con tr vi 1 s
nguyn N no ; kt qu tr v l 1 con tr. Con tr ny ch n vng nh cch
vng nh ca con tr hin ti N phn t.
- n v tng hay gim ca con tr c kch thcca bin c tr n
83
4. Con tr c dng nh mng.
V d: Cho 1 mng 1 chiu cc s nguyn a c 5 phn t, truy cp cc phn t theo
kiu mng v theo kiu con tr.
#include <stdio.h>
#include <conio.h>
/* Nhp mng bnh thng*/
void NhapMang(int a[], int N)
{ int i;
for(i=0;i<N;i++)
{ printf("Phan tu thu %d: ",i);
scanf("%d",&a[i]);
}
}
/* Nhp mng theo dng con tr*/
void NhapContro(int a[], int N)
{ int i;
for(i=0;i<N;i++)
{ printf("Phan tu thu %d: ",i);
scanf("%d",a+i);
}
}
int main()
{ int a[20],N,i;
printf("So phan tu N= ");scanf("%d",&N);
NhapMang(a,N);
printf("Truy cap theo kieu mang: ");
for(i=0;i<N;i++) printf("%d ",a[i]);
printf("\nTruy cap theo kieu con tro: ");
for(i=0;i<N;i++) printf("%d ",*(a+i));
getch();
return 0;
}
84
5. Con tr v cp pht ng
a. Hm cp pht:
void *malloc(size_t size): Cp pht vng nh c kch thc l size.
void *calloc(size_t nitems, size_t size): Cp pht vng nh c kch thc l
nitems*size.
V d: Gi s ta c khai bo:
int a, *pa, *pb; pa = (int*)malloc(sizeof(int)); /* Cp pht vng nh c kch
thc bng vi kch thc
ca mt s nguyn */
pb= (int*)calloc(10, sizeof(int)); /* Cp pht vng nh c th cha c 10 s
nguyn*/
Lu : Khi s dng hm malloc() hay calloc(), ta phi p kiu v nguyn mu cc
hm ny tr v con tr kiu void.
b. Thu hi vng nh: Mt vng nh cp pht cho bin ng do bin con tr gi
a ch, khi khng cn s dng na, ta s thu hi li vng nh ny nh hm
free().
C php: void free(void *block)
ngha: Gii phng vng nh c qun l bi con tr block.
V d: v d trn, sau khi thc hin xong, thu hi vng nh cho 2 bin con tr pa
v pb nh sau:
free(pa); free(pb);
85
Chng 6: Cc cu trc d
liu khc
1. Kiu cu trc(Structure): l kiu d liu bao gm
nhiu thnh phn c kiu khc nhau, mi thnh
phn c gi l mt trng (field)
a. Khai bo:
Cch 1:
struct <Tn cu trc>
{
<Kiu> <Trng 1> ;
<Kiu> <Trng 2> ;
..
<Kiu> <Trng n> ;
};
Cch 2: S dng t kha
typedef nh ngha kiu:
typedef struct
{
<Kiu> <Trng 1> ;
<Kiu> <Trng 2> ;
..
<Kiu> <Trng n> ;
} <Tn cu trc>;
86
1. Kiu cu trc(tip)
struct svien
{
char hoten[30];
char diachi[40];
float dtb;
};
typedef struct
{
char hoten[30];
char diachi[40];
float dtb;
} sinhvien;
Khai bo bin:
struct svien sv1,sv2;
sinhvien sv3, sv4;
b. Truy xut n mt trng ca bin cu trc
Cch 1: <bin cu trc>.<tn trng>
Cch 2: <bin con tr n cu trc> -> <tn trng>
87
V d v kiu cu trc
#include<conio.h>
#include<stdio.h>
#include<string.h>
typedef struct
{ unsigned char Ngay,Thang,Nam;
} NgayThang;
typedef struct
{ char MSSV[10];
char HoTen[40];
NgayThang NgaySinh;
int Phai;
char DiaChi[40];
} SinhVien;
/* Hm in ln mn hnh 1 mu tin SinhVien*/
void InSV(SinhVien s)
{
printf("%7s %20s %2d-%2d-%4d %s\n",s.MSSV,s.HoTen,
s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi);
}
88
V d v kiu cu trc(tip)
int main()
{
SinhVien SV, s;
printf("Nhap MSSV: ");gets(SV.MSSV);
printf("Nhap Ho va ten: ");gets(SV.HoTen);
printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay);
printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang);
printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam);
printf("Gioi tinh (0: Nu), (1: Nam): ");scanf("%d",&SV.Phai);
flushall();
printf("Dia chi: ");gets(SV.DiaChi);
InSV(SV);
s=SV; /* Gn tr cho mu tin s*/
InSV(s);
getch();
return 0;
}
89
V d v con tr n kiu cu trc
#include<conio.h>
#include<stdio.h>
typedef struct
{ unsigned char Ngay,Thang,Nam;
} NgayThang;
int main()
{
NgayThang Ng={25,2,2007};
NgayThang *p;
p=&Ng;
printf("Truy cap cau truc thong thuong %d-%d-%d\n",
Ng.Ngay,Ng.Thang,Ng.Nam);
printf("Truy cap qua con tro %d-%d-%d\n",
p->Ngay,p->Thang,p->Nam);
printf("Truy cap qua vung nho con tro %d-%d-%d\n",
(*p).Ngay,(*p).Thang,(*p).Nam);
getch();
return 0;
}
90
2. Kiu tp tin
a. Khi nim:
- L kiu d liu cho php lu tr d liu b nh ngoi (a). Khi kt thc
chng trnh th d liu vn cn do chng ta c th s dng nhiu ln.
- Ngoi ra, kiu tp tin c th c kch thc ln vi s lng cc phn t
khng hn ch (ch b hn ch bi dung lng ca b nh ngoi).
Bin tp tin: l mt bin thuc kiu d liu tp tin dng i din cho
mt tp tin. D liu cha trong mt tp tin c truy xut qua cc thao
tc vi thng s l bin tp tin i din cho tp tin .
Con tr tp tin: Khi mt tp tin c m ra lm vic, ti mi thi
im, s c mt v tr ca tp tin m ti vic c/ghi thng tin s xy ra.
Ngi ta hnh dung c mt con tr ang ch n v tr v t tn n l
con tr tp tin.
b. Khai bo:
FILE <Danh sch cc bin con tr> ;
V d: FILE *f1,*f2;
91
c. Cc thao tc trn tp tin
+M tp tin
C php: FILE *fopen(char *Path, const char *Mode)
Trong :
- Path: chui ch ng dn n tp tin trn a.
- Type: chui xc nh cch thc m tp tin s m.
V d: M mt tp tin tn C:\BAITAP\VIDU.TXT ghi.
FILE *f;
f = fopen(C:\\BAITAP\\VIDU.TX, w);
if (f!=NULL)
{
/* Cc cu lnh thao tc vi tp tin*/
/* ng tp tin*/
}
92
Bng cc gi tr ca Mode
Ch ngha
r M tp tin vn bn c
w To ra tp tin vn bn mi ghi
a Ni vo tp tin vn bn
rb M tp tin nh phn c
wb To ra tp tin nh phn ghi
ab Ni vo tp tin nh phn
r+ M mt tp tin vn bn c/ghi
w+ To ra tp tin vn bn c ghi
a+ Ni vo hay to mi tp tin vn bn c/ghi
r+b M ra tp tin nh phn c/ghi
w+b To ra tp tin nh phn c/ghi
a+b Ni vo hay to mi tp tin nh phn
93
c. Cc thao tc trn tp tin
+ Hm ng tp tin: Hm fclose() c dng ng tp tin
c m bi hm fopen(). Hm ny s ghi d liu cn li
trong vng m vo tp tin v ng li tp tin.
C php: int fclose(FILE *f)
+ Hm kim tra n cui tp tin hay cha?
C php: int feof(FILE *f)
Kim tra xem chm ti cui tp tin hay cha v tr v
EOF nu cui tp tin c chm ti, ngc li tr v 0.
+ Hm di chuyn con tr tp tin v u tp tin - Hm rewind()
Khi ta ang thao tc mt tp tin ang m, con tr tp tin lun
di chuyn v pha cui tp tin. Mun cho con tr quay v u
tp tin nh khi m n, ta s dng hm rewind().
C php: void rewind(FILE *f)
94
d. Truy cp vo tp tin vn bn
+ Hm ghi d liu ln tp tin vn bn: Hm putc()
Hm ny c dng ghi mt k t ln mt tp tin vn bn ang c m lm vic.
C php: int putc(int c, FILE *f)
Trong , tham s c cha m Ascii ca mt k t no . M ny c ghi ln tp tin lin kt
vi con tr f. Hm ny tr v EOF nu gp li.
+ Hm ny dng ghi mt chui k t cha trong vng m ln tp tin vn bn.
C php: int puts(const char *buffer, FILE *f)
Trong , buffer l con tr c kiu char ch n v tr u tin ca chui k t c ghi vo. Hm
ny tr v gi tr 0 nu buffer cha chui rng v tr v EOF nu gp li.
V d: Vit chng trnh ghi chui k t ln tp tin vn bn C:\BAITHO.TXT
#include<stdio.h>
#include<conio.h>
int main()
{ FILE *f;
f=fopen(C:\\BAITHO","r+");
if (f!=NULL) {
fputs(Chi co thuyen moi hieu.\n",f);
fputs( Bien menh mong duong nao.",f);
fclose(f);
}
getch();
return 0;
}
95
d. Truy cp vo tp tin vn bn(tip)
+ Hm dng ghi d liu c nh dng ln tp tin vn bn.
C php: fprintf(FILE *f, const char *format, varexpr)
Trong : format: chui nh dng (ging vi cc nh dng
ca hm printf()), varexpr: danh sch cc biu thc, mi biu
thc cch nhau du phy (,).
+ Hm dng c d liu t tp tin vn bn ang c m
lm vic.
C php: int getc(FILE *f)
Hm ny tr v m Ascii ca mt k t no (k c EOF)
trong tp tin lin kt vi con tr f.
+ Hm c d liu t tp tin vn bn vo danh sch cc bin theo
nh dng.
C php: fscanf(FILE *f, const char *format, varlist)
Trong : format: chui nh dng (ging hm scanf());
varlist: danh sch cc bin mi bin cch nhau du phy (,).
96
V d
Vit chng trnh chp tp tin C:\BAITHO.TXT trn sang tp tin D:\BAIHAT.TXT.
#include<stdio.h>
#include<conio.h>
int main()
{ FILE *f1,*f2;
f1=fopen(C:\\BAITHO.TXT","rt");
f2=fopen("D:\\BAIHAT.TXT","wt");
if (f1!=NULL && f2!=NULL)
{
int ch=fgetc(f1);
while (! feof(f1))
{
fputc(ch,f2);
ch=fgetc(f1);
}
fcloseall();
}
getch();
return 0;
}
97
e. Truy cp vo tp tin nh phn
+ Hm ghi d liu ln tp tin nh phn - Hm fwrite()
C php: size_t fwrite(const void *ptr, size_t size, size_t n, FILE *f)
Trong :
- ptr: con tr ch n vng nh cha thng tin cn ghi ln tp tin.
- n: s phn t s ghi ln tp tin.
- size: kch thc ca mi phn t.
- f: con tr tp tin c m.
- Gi tr tr v ca hm ny l s phn t c ghi ln tp tin. Gi tr ny bng n tr
khi xut hin li.
+c d liu t tp tin nh phn - Hm fread()
C php: size_t fread(const void *ptr, size_t size, size_t n, FILE *f)
Trong :
- ptr: con tr ch n vng nh s nhn d liu t tp tin.
- n: s phn t c c t tp tin.
- size: kch thc ca mi phn t.
- f: con tr tp tin c m.
- Gi tr tr v ca hm ny l s phn t c c t tp tin. Gi tr ny bng n
hay nh hn n nu chm n cui tp tin hoc c li xut hin..
98
e. Truy cp vo tp tin nh phn(tip)
+ Hm di chuyn con tr tp tin - Hm fseek()
- Vic ghi hay c d liu t tp tin s lm cho con tr tp tin dch chuyn
mt s byte, y chnh l kch thc ca kiu d liu ca mi phn t ca
tp tin.
- Khi ng tp tin ri m li n, con tr lun v tr ngay u tp tin.
Nhng nu ta s dng kiu m tp tin l a ghi ni d liu, con tr tp
tin s di chuyn n v tr cui cng ca tp tin ny.
- Ta cng c th iu khin vic di chuyn con tr tp tin n v tr ch nh
bng hm fseek().
C php: int fseek(FILE *f, long offset, int whence)
Trong :
- f: con tr tp tin ang thao tc.
- offset: s byte cn dch chuyn con tr tp tin k t v tr trc . Phn t u tin
l v tr 0.
- whence: v tr bt u tnh offset, ta c th chn im xut pht l:
0 SEEK_SET V tr u tp tin
1 SEEK_CUR V tr hin ti ca con tr tp tin
2 SEEK_END V tr cui tp tin
- Kt qu tr v ca hm l 0 nu vic di chuyn thnh cng. Nu khng thnh cng,
1 gi tr khc 0 ( l 1 m li) c tr v.

You might also like