You are on page 1of 61

Bi ging: C s lp trnh

===================================================================

MC LC
CHNG I: TNG QUAN V NGN NG LP TRNH C....................................................3
1. Cc khi nim chng trnh, lp trnh, lp trnh vin.......................................................3
2. S pht trin ca cc cng c lp trnh.............................................................................3
3. Mt s ngn ng lp trnh thng dng.............................................................................3
4. Gii thiu v ngn ng lp trnh C...................................................................................3
II. Cc khi nim c bn............................................................................................................4
1. Cc yu t c bn...............................................................................................................4
2. Cu trc mt chng trnh ..............................................................................................6
3. Mi trng lm vic.........................................................................................................8
III. Cc kiu d liu trong C......................................................................................................8
1. Cc kiu d liu c bn.....................................................................................................8
2. Chuyn i kiu d liu...................................................................................................10
3. Th t u tin cc php ton...........................................................................................11
IV. Nhp xut d liu trong C.................................................................................................12
2. Cc lnh xut d liu ......................................................................................................13
3. Trnh by mn hnh..........................................................................................................14
CHNG II: CC CU LNH IU KHIN.........................................................................18
I. Cc cu lnh la chn:.........................................................................................................18
1. if else ......................................................................................................................18
2. SWITCH ........................................................................................................................19
II. Cc lnh lp .......................................................................................................................22
1. Vng lp xc nh FOR...................................................................................................22
2. Vng lp khng xc nh DO WHILE.......................................................................23
3. WHILE............................................................................................................................24
III. Cc lnh r nhnh v iu kin : .......................................................................................25
1. BREAK............................................................................................................................25
2. CONTINUE.....................................................................................................................25
3. GOTO ............................................................................................................................25
CHNG III: HM TRONG NGN NG LP TRNH C.....................................................26
I. Khi nim v hm.................................................................................................................26
1. Hm th vin...................................................................................................................26
2. Hm t to.......................................................................................................................26
II. Cch xy dng hm.............................................................................................................26
1. Xy dng hm..................................................................................................................26
2. S dng hm....................................................................................................................28
3. Nguyn tc hot ng ca hm........................................................................................29
4. Truyn tham s cho hm..................................................................................................29
III. Hm quy........................................................................................................................32
1. nh ngha hm quy....................................................................................................32
2. Mt s ch khi vit hm quy....................................................................................32
3) Xy dng macro..............................................................................................................34
4) Mt s th vin hm chun v hm thng dng.............................................................34
CHNG IV: CC KIU D LIU C CU TRC.............................................................39
I. Kiu d liu mng................................................................................................................39
1. Khi nim v mng..........................................................................................................39
3. Mng nhiu chiu............................................................................................................42
4. Bi tp..............................................................................................................................42
1. Khi nim con tr ...........................................................................................................47
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
1

Bi ging: C s lp trnh
===================================================================
2. a ch con tr.................................................................................................................47
4. S dng con tr trong mng nhiu chiu.........................................................................48
5. S dng con tr trong hm..............................................................................................48
III. Kiu d liu struct..............................................................................................................49
1. Khai bo struct.................................................................................................................49
2. Truy cp vo phn t ca struct.......................................................................................50
3. Phi hp mng v d liu kiu struct..............................................................................50
IV. Kiu d liu t nh ngha : ..............................................................................................52
1. Kiu lit k (t kho enum).............................................................................................52
2. Kiu typedef.....................................................................................................................53
CHNG V: D LIU KIU TP...........................................................................................55
I. Khi nim v tp...................................................................................................................55
1. Khi nim tp...................................................................................................................55
2. Cu trc v phn loi tp.................................................................................................55
3. Cc bc x l tp ..........................................................................................................56
II. Tp d liu nh phn...........................................................................................................57
1. To tp nh phn.............................................................................................................57
2. c tp d liu nh phn.................................................................................................58
3. Truy nhp tp d liu nh phn.......................................................................................59

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
2

Bi ging: C s lp trnh
===================================================================

CHNG I: TNG QUAN V NGN NG LP TRNH C


I. GII THIU NGN NG LP TRNH
1. Cc khi nim chng trnh, lp trnh, lp trnh vin
- Chng trnh: l tp hp dy cc lnh iu khin my tnh thc hin.
- Lp trnh (my tnh): l k thut ci t mt hoc nhiu thut ton tru tng c lin
quan vi nhau bng mt hoc nhiu ngn ng lp trnh to ra mt chng trnh my
tnh.
- Lp trnh vin: L ngi vit chng trnh my tnh.
2. S pht trin ca cc cng c lp trnh.
3. Mt s ngn ng lp trnh thng dng.
4. Gii thiu v ngn ng lp trnh C
- Ngn ng C do Dennis Ritchie sng tc nm 1972 ti phng th nghim Bell
Telephone (thuc cng ty vin thng AT & T ca M) vit h iu hnh UNIX.
* u im ca ngn ng C:
- C l ngn ng mnh v mm do.
- C c dng ph bin.
- C l ngn ng c th chuyn dch, d thch nghi
- C l ngn ng t t kho.
- C l ngn ng c cu trc modun: Cc chng trnh con l cc hm c th c s
dng nhiu ln trong cng mt chng trnh hoc trong cc chng trnh khc.
* Khuyt im ca ngn ng C:
- C php kh hc (nu cha hiu r bn cht).
- Mt s k hiu c nhiu ngha khc nhau: V d k hiu * l ton t nhn, ton t
khng nh hng, ton t thay th, ...
* Cch khi ng C
Vo th mc Bin trong th mc ci t TC => chy tp TC.exe

Thanh
menu
Phn son
ni dung
chng
trnh

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
3

Bi ging: C s lp trnh
===================================================================

Ch : Khi mn mnh lm vic ca C hin th, mun chng trnh chy c, ta cn


thit lp li mt vi thng s cho ph hp (ch cn ci t mt ln u tin):
Vo menu Options/ Environment/ Directories

Include Directories: Th mc cha cc tp tin m chng ta gi trong chng trnh (tp


tin .h vit sau #include)
Library Directories: Th mc cha cc tp tin th vin (*.Lib)
Output Directories: Th mc cha cc tp tin i tng (*.OBJ), tp tin *.exe sau
khi bin dch.
Source Directory: Th mc cha cc tp tin ngun (*.OBJ, *.Lib)
* Chy chng trnh: n Ctrl + F9
II. Cc khi nim c bn
1. Cc yu t c bn
1.1 B ch vit trong C
B ch vit trong ngn ng C bao gm nhng k t, k hiu sau: (phn bit ch
in hoa v in thng):
26 ch ci latinh ln A,B,C...Z
26 ch ci latinh nh a,b,c ...z.
10 ch s thp phn 0,1,2...9.
Cc k hiu ton hc: +, -, *, /, =, <, >, (, )
Cc k hiu c bit: :. , ; " ' _ @ # $ ! ^ [ ] { } ...
Du cch hay khong trng.
1.2 Cc t kho trong C
T kha l cc t dnh ring (reserved words) ca C m ngi lp trnh c th s
dng n trong chng trnh ty theo ngha ca tng t.
auto
break
case
char
continue
default
do
double
else
extern
float
for
goto if int
long
register
return
short
sizeof
static
struct
switch
typedef union
unsigned
void
volatile
while
_cs
_ds
_es
_ss
_AH
_AL
_AX
_BH
_BL
_BX
_CH
_CL
_CX
_DH
_DL
_DX
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
4

Bi ging: C s lp trnh
===================================================================

_BP
_DI
_SI
_SP
1.3 Ch thch
- Tc dng: ch thch cho mt cu lnh hay mt on chng trnh vit. Dng
ch thch ny s b b qua khi bin dch chng trnh.
- K hiu: /* ch thch */
hoc // ch thch
V d 1:
#include<stdio.h>
#include<conio.h>
main()
{
printf("chao");
//in ra mn hnh t chao
getch();
//tm dng chng trnh ch n phm Enter tip tc
}
V d 2:
#include <stdio.h>
#include <conio.h>
main()
{
char ten[50];
/* khai bao bien ten kieu char 50 ky tu */
clrscr();
/*lenh xoa man hinh*/
printf("Xin cho biet ten cua ban: "); /*Xuat chuoi ra man hinh*/
scanf("%s",ten);
/*Doc vao 1 chuoi la ten cua ban*/
printf("\nXin chao ban %s\n",ten);
printf("Chao mung ban den voi Ngon ngu lap trinh C");
getch(); /*Dung chuong trinh, cho go phim*/
}
1.4 Du chm cu
- Du ; dng kt thc mt cu lnh.
1.5 Cch khai bo
* Khai bo bin:
kieu_du_lieu danh_sach_bien;
ch : Danh sch c th l mt bin hoc nhiu bin c cng mt kiu d liu c vit
cch nhau bi du , . Ta c th gn lun gi tr cho tng bin.
v d :
int i ;
float x,y,z ;
int i=3 ;
* Khai bo hng s
const kieu_du_lieu ten_hang = gia_tri_hang ;
v du :
const int x=2 ;
* Khai bo hng s tng trng
#define Ten_hang gia_tri ; /* vit sau dng #include */
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
5

Bi ging: C s lp trnh
===================================================================

v d 4:
#include <stdio.h>
#include<conio.h>
#define PI 3.14
/*khai bo hng s tng trng */
main()
{
float R,Dien_tich;
printf("R= ");
scanf("%f",&R);
Dien_tich = PI*R*R;
printf("Dien tich = %f\n",Dien_tich);
getch();
return(0);
}
1.6 Php gn gi tr
Tn_mt_bin = biu_thc;
v d:
i=3; /* i c gn gi tr l 3 */
i=i+4; /* i cng 4 c kt qu l 7, gi tr 7 ny li t vo nh c a ch ca i*/
ch : Ta c th s dng php gn kp gn mt gi tr cho nhiu bin
v d:
a=b=c=3; /*gn gi tr 3 cho cc bin a, b, c */
a=b + (c=3); //gn 3 cho bin c, sau cng vo vi b gn kt qu nhn c cho a
2. Cu trc mt chng trnh
* Chng trnh n gin:
#include <.....> /* gi cc tp tin x l */
/* ------------------ HM CHNH -------------------------*/
main()
{
.........
/* Cc cu lnh */
return(0);
/* C th b lnh ny */
}
// ------------------ DINH NGHIA HAM ----------------------Kiu_d_liu tn hm (cc tham s);
{
............
/* Cc cu lnh */
return (... )
/* Tr li mt gi tr c th cho hm */
}
* Cu trc tng th:
Chuyn sang b tin x l
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
6

Bi ging: C s lp trnh
===================================================================

#include
#define
typedefs (nh ngha kiu d liu)
funtion prototype (nguyn mu cc hm: khai bo tn hm vi tham s)
Khai bo bin ngoi (External variables)
main()
(function chnh)
{
Khai bo cc bin, hng
S dng cc hm khc
}
function th hai
{
Khai bo cc bin, hng
S dng cc hm khc
}
function th ba
{
Khai bo cc bin, hng
S dng cc hm khc
}
v d 5:
#include <stdio.h>
#include <conio.h>
/*------------------HAM CHINH ----------------*/
main()
{
clrscr();
//cau lenh xoa man hinh
float x=1.5;
float y,z;
int n=3, p=5, q=10;
float f(float, int, int); //khai bao mau ham
y= f(x,n,p);
printf("Gia tri cua y = %f\n",y);
z= f(x+0.5,q,n-1);
printf("Gia tri cua z = %f\n",z);
getch();
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
7

Bi ging: C s lp trnh
===================================================================

}
/*------------------DINH NGHIA HAM f ----------------*/
float f(float x, int b, int c)
{
float gia_tri;
//khai bao bien cuc bo
gia_tri = x*x+b*x+c;
return gia_tri;
}
3. Mi trng lm vic
- TC c th chy trong mi trng MS_DOS hoc mi trng Windows.
III. Cc kiu d liu trong C
1. Cc kiu d liu c bn
1.1 Kiu s nguyn
Kiu s nguyn (hay cn gi l kiu m c): l kiu d liu dng lu cc
gi tr nguyn. Kiu s nguyn trong C c chia thnh cc kiu d liu con, mi kiu
c mt min gi tr khc nhau
Kiu bin
Character
Integer
Short integer
Long integer
Unsigned character
Unsigned integer
Unsigned Short integer
Unsigned Long integer

T kho
char
int
short
long
unsigned char
unsigned int
unsigned short
unsigned long

S byte
1
2
2
4
1
2
2
4

Di gi tr
-128 127
-32768 32767
-32768 32767
-2,147,483,648 2,147,483,647
0 255
0 65,535
0 65,535
0 4,294,967,295

* Cc php ton i vi s nguyn: +, -, *, / (ly phn nguyn), % (ly phn d).


v d: 5/3 c 1
5%3 c 2
ch : Mun ly c kt qu chnh xc l s thc ca php chia hai s nguyn, ta phi
vit (float) x/y
1.2 Kiu s thc
Kiu s thc dng lu cc s thc hay cc s c du chm thp phn
- Dng vit thp phn bnh thng: 3.14; -0.4545;
- Dng vit c phn m (dng vit khoa hc)
v d:
5.6543E +02
(= 5.6543* 102)
phn nh tr

phn m

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
8

Bi ging: C s lp trnh
===================================================================

-0.001234 = -1.234*103 s c vit li lL -1.234E -03


ch : Phn nh tr v phn m u c du i km. Hai phn ny phi c vit lin
nhau.
Kiu bin
T
S
Di gi tr
kho byte
Single-precision float-point
float
4
1.2E-38 3.4E38
(s thc vi chnh xc n)
chnh xc khong 7 ch s
Double-precision float-point
double
8
2.2E-308 1.8E308
(s thc vi chnh xc kp)
chnh xc khong 15 ch s
Long Double-precision float-point long
10
3.4E-4932 3.4E4932
( di ln)
double
chnh xc khong 19 ch s
ch : Ta c th vit E hoc e u c.
* Cc php ton: +, - , *, / (kt qu l s thc)
1.3 Kiu k t (char)
- Mi k t chim 1 byte trong b nh.
V d: h A 0 ?
Mi gi tr kiu k t l mt phn t ca mt tp hu hn cc k t c sp xp c
th t => ta c th so snh c.
(bng m ASCII vi 128 k t u trang 47 Ngn ng lp trnh C)
* Cc hm x l k t:
Hm
Kiu gi tr nhn c
Tc dng
toASCII(c)
int
Chuyn c thnh m ASCII
tolower(c)
char
Chuyn thnh ch thng
toupper(c)
char
Chuyn thnh ch hoa
ch : Cc hm trn nm trong tp <ctype.h>
v d 5:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
main()
{
char ChuThuong,ChuHoa;
ChuThuong = getchar(); //doc mot ky tu tu ban phim
ChuHoa = toupper(ChuThuong); //Chuyen thanh chu hoa
putchar(ChuHoa);
//in ra man hinh
getch();
}
1.4 Hng xu k t
Xu k t l d liu k t c lu tr trong mt mng cc nh lin nhau trong
cui cng cha m s l 0 (tc l null hay \0)
v d:
Ha Noi
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
9

Bi ging: C s lp trnh
===================================================================

H a

N o i

\0

1.5 Kiu Boolean


- l biu thc m kt qu ch nhn mt trong hai gi tr true (ng vi 1) hoc false (ng
vi 0)
* Cc php ton logic
TON T
&&
||
!

PHP TON LOGIC


AND
OR
NOT

NGHA
Php v
Php hoc
Php ph nh

* Bng s tht
X
Y
0
0
0
s khc khng
s khc khng
0
s khc khng s khc khng

X&&Y
0
0
0
1

X||Y
0
1
1
1

X
0
s khc khng

!X
1
0

* Cc php ton quan h (kt qu tr v l true,1 hoc false,0):


!= so snh khc nhau
== so snh bng nhau
>= so snh ln hn hoc bng
<= so snh nh hn hoc bng
> so snh ln hn
< so snh nh hn
V d:
3<5 c kt qu l true (tng ng vi 1)
!(3<5) c kt qu l false (tng ng vi 0)

2. Chuyn i kiu d liu


* S hiu chnh kiu d liu s hc
- Mt biu thc ton hc c th tn ti nhiu ton hng vi cc kiu s hc khc nhau
(s nguyn, s thc)
Khi quy i kt qu, my tnh s chuyn t kiu n gin ln kiu cao hn cho ph
hp theo nguyn tc:
int long float double long double
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
10

Bi ging: C s lp trnh
===================================================================

(2 byte) (4)
(4)
(8)
(10)
V d:
int i;
long j;
float k;
i + j c kt qu l d liu kiu long.
i + j + k c kt qu l d liu kiu float.
ch : Khng c kiu char v short trong dy nguyn tc trn.
* S u tin cho kiu s:
- Trong biu thc ton hc, cc bin c kiu d liu char hoc short u c quy i v
kiu d liu int ri mi thc hin tnh (v cc php ton s hc khng c nh ngha
cho kiu char v short).
v d:
char a;
int b;
float c;
a + b cho kt qu c kiu d liu l int (v a c chuyn sang kiu d liu int ri
mi cng vo b)
a + b + c cho kt qu c kiu d liu l float
* S chuyn i cho kiu k t char
- Trong php ton, char t chuyn i thnh int
- Trong php tnh tng (hiu) vi mt k t khc, kt qu s l tng (hiu) ca a vi m
ASCII ca k t.
V d:
char a = 5;
B + a chnh l B + 5 = 66 + 5 = 71 => c kt qu l k t G
3. Th t u tin cc php ton
* Bng tng hp n gin v th t u tin ton t s hc v quan h
TON T
()
- (ton t 1 ngi)
*
/
%
+
< <= > >=
== !=
&&
||

CHIU TNH
TON
L R
R L
L R
L R
L R
L R
L R
L R

V d:
5*(2+3) = 5*6=30
5/3*2 = 1*2 = 2
Vd6: Chng trnh minh ha
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
11

Bi ging: C s lp trnh
===================================================================

#include<stdio.h>
#include<conio.h>
main()
{
int a;
a=5/3*2;
printf("kq: %f",a); //in ra man hinh gia tri cua a
getch();
//lenh tam dung chuong trinh cho an phim Enter
}
* Bng tng hp y
TON T
( ) [ ] ->
++ -- ! sizeof( ) (ton t mt ngi)
*
/
%
+
<<
>>
<
<= >
>=
==
!=
&
^
|
$$
||
?:
= += -= *= /= %= &= ^= |= <<= >>=

CHIU TNH TON


L R
R L
L R
L R
L R
L R
L R
L R
L R
L R
L R
L R
R L
R L

IV. Nhp xut d liu trong C


1. Cc lnh nhp d liu (c d liu t bn phm):
scanf( ), getchar( ), getch( ), gets()
* Hm scanf( )
scanf(dy m quy cch, dy a ch cc bin);
Hm scanf ( ) s dng nhng m quy cch sau:
%c
: c mt k t c khai bo l char
%d
: c mt s nguyn
%u
: c s nguyn unsigned int
%hd
:------------------- shortint
%hu
: -------------------unsigned int
%lu
: ------------------- unsigned long

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
12

Bi ging: C s lp trnh
===================================================================

%f

: c s thc float, (nhp s theo mt trong hai cch: thng thng hoc
vit theo s m)
%e
: c s thc float, (nhp s theo mt trong hai cch: thng thng hoc
vit theo s m)
%lf hoc %lu : c s thc double
%s
: c xu k t khng cha du cch, dng vi a ch xu.
%o
: c vo s nguyn di dng h m c s 8 (octal)
%x
: ----------------------------------------------------- 16 (hexa)
Ch 1: Trng hp c s, my tnh s b qua du trng, cch, du xung dng cho
n khi gp ch s th bt u ly ra c v ch dng li nu k t khng phi l ch
s. Sau my tnh ghp chng li thnh s cn ly.
i vi trng hp c ch, my tnh s c chnh xc tuyt i v s lng.
v d:
Nhp
Hm
Kt qu my tnh nhn c
m^^*(25
scanf(%d%c,&x,&y); x=m y=25
123^*hfn
scanf(%d%c,&x,&y); x=123
y=^ (vd7)
Ch 2:Nu chn thm k hiu vo gia 2 m qui cch th khi c d liu, my tnh s
nhy qua cc du cch, du ngn cch Enter c s liu hay mt k t.
- Nguyn tc ca hm scanf( ) : D liu g t bn phm c lu tr trong b nh m
ch x l. Hm scanf( ) ly d liu t b nh m .
* Hm getchar( )
c= getchar( ) ;
c vai tr gn ging nh lnh scanf( %c ,&c) dng ly 1 k t c g vo t
bn phm.
* Hm c xu k t gets( )
- Hm ny nm trong tp stdio.h
- Tc dng: c mt xu k t c cha c du cch cho n khi n phm Enter th dng.
2. Cc lnh xut d liu
*Mu hm:
printf(dy m qui cch, dy cc biu thc);
V d:
int n;
float x;
char ch;
printf(In ra cac gia tri: %d, %f v %c, n, x, ch);
Dy m qui cch
ngha
%c
: in ra k t kiu char, c th dng cho kiu short v int
%d
: in ra s nguyn int, c th dng cho kiu char
%u
: in ra kiu s nguyn khng du, unsign int, c th
dng cho unsign char, unsign short
%ld
: in ra s nguyn kiu long
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
13

Bi ging: C s lp trnh
===================================================================

%lu
%x, %X
%o
%f

: -------------------------unsigned long
: ------------------- vit di dng s hexa (h m 16)
: ------------------------------------------ octal (h m 8)
: in ra s thc di dng bnh thng (phn thp phn
c 6 ch s), dng cho kiu float v double
: in ra kiu d thc di dng s m (phn nh tr c
6 ch s phn thp phn), dng cho kiu float,
double. Du e hay E s tng ng vi kt qu e hoc
E s in ra.
: chn ci no ngn hn trong hai kiu %f hoc %e
in ra.
: in ra xu k t vi a ch cho trc.

%e, %E

%g, %G
%s

* Khun in: %m, %m.n


- Dng vit c quy cch cc d liu c in ra
+ D liu l ch, s: thm mt s nguyn m vo ngay sau % th khi in d liu ra s
dnh m v tr dng vit d liu .
+ D liu l s thc: thm hai s nguyn m v n (vit theo qui tc m.n) vo ngay
sau % th khi in d liu ra s dnh tng m ch s trong c n ch s phn thp
phn.
v d:
int x=1;
printf(%3d,x);
=> kt qu l: ^^1
float x=1.2345
printf(%5.3f,x)

=> kt qu l : ^1.234

* Cn l tri : B sung du vo ngay sau du %


* K t xo tri : B sung \b vo cui ca xu k t. Mi k hiu \b s xo c mt k
t.
v d : printf(In ra cac gia tri \b\b); s cho in ra dng ch: In ra cac gia t
* In ra du %: ta phi vit 2 ln %%
* In ra mn hnh son tho:
cprintf(dy m qui cch, dy cc biu thc);

3. Trnh by mn hnh
- s dng cc hm ny, ta cn khai bo:
#include <conio.h>
gotoxy(int X, int Y);
clrscr( );

//Di chuyn con tr n v tr c to ct l X, to dng


l Y.

// xo mn hnh v a con tr v v tr (1,1)

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
14

Bi ging: C s lp trnh
===================================================================

clreol();

//Clear End Of Line: xo cc k t nm bn phi im nhc.

textcolor(tn mu hoc m mu);

// chn mu cho ch

textbackground(tn mu hoc m mu);

//chn mu cho nn

Ch : Tn mu l cc ch ci in hoa. Ta c th cng thm 128 vo m mu hoc


+BLINK vo tn mu c c mu nhp nhy.
V d 8:
#include <stdio.h>
#include <conio.h>
main()
{
textbackground(RED);
clrscr();
gotoxy(3,10);
textcolor(BLACK);
cprintf("\nxin chao"); //in ra man hinh soan thao
cprintf("\nChao mung ban den voi Ngon ngu lap trinh C");
getch();
}

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
15

Bi ging: C s lp trnh
===================================================================

N TP
1) Lnh hin th d liu:
printf(dy m quy cch, dy cc biu thc);

//in ra cc k t l gi tr ca cc
biu thc

putchar(c);

// in ra mt k t l gi tr ca bin c

puts(xu k t);

// in ra mt xu k t

fprintf(stdprn, d liu a ra my in %d\n, k);

//in ra my in

fprintf(stdout, d liu a ra my in %d\n, k);

//in ra mn hnh = printf

cprintf(dy m qui cch, dy cc biu thc);

// in ra mn hnh son tho c s


dng cc cu lnh trang tr mn hnh.

2) Lnh nhp d liu


scanf(dy m quy cch, dy a ch cc bin);
c= getchar( ) ;

//nhp d liu cho cc bin trong


danh sch a ch.

//nhp 1 k t cho bin c.

gets(str );

//nhp 1 xu k t cho bin str


(kt thc bng Enter)

3) Lnh xo b nh m ca bn phm
fflush(stdin);
4) Lnh trang tr mn hnh
gotoxy(ct x, dng y) ;
textcolor(mu hoc m mu) ;
textbackground(mu hoc m mu);

//chn mu cho ch
//chn mu cho nn

wherex() ;

//cho bit to ct

wherey() ;

//cho bit to dng.

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
16

Bi ging: C s lp trnh
===================================================================

N TP CHNG I
1. Hy xy dng chng trnh tnh chu vi, din tch hnh ch nht vi chiu di v chiu rng
nhp vo t bn phm.
2. Hy xy dng chng trnh tnh tng, hiu, tch, thng ca 2 s nguyn nhp vo t bn
phm.
3. Hy xy dng mt phn mm ng dng l tr chi p ng yu cu sau:
- Nhp vo mt m ASCII
- Nhp vo k t m bn d on (ngi th nht).
- Hin th kt qu ca m ASCII m ngi trc nhp (ngi th hai).
4. Hy xy dng phn mm ng dng l tr chi p ng yu cu sau:
- Bt u nhp 3 s nguyn dng (ngi th nht)
- Xo mn hnh (ngi th nht)
- Nhp li 3 s bn nh (ngi th 2).
- Hin th 3 s ban u.
5. Xy dng chng trnh p ng yu cu sau:
- Nhp s nguyn a t bn phm
- Tnh tngv tch ca cc s nguyn lin tip k t s nhp (a, a+1. a+2. a+3. a+4)
6. Xy dng chng trnh tnh s tin li lnh c sau mt nm bit s tin gi ban u l S
(nhp vo t bn phm), li sut hng thng l 2%. Bit rng mi thng ngi gi s rt li mt
ln.
7. Hy xy dng chng trnh nhp k t u tin ca tn cc bn trong nhm v hin th ra
mn hnh bng 2 cch: vit hoa, vit thng.
8. Hy xy dng phn mm ng dng p ng yu cu sau:
- Nhp vo 5 k t
- Chuyn cc k t thnh cc k t vit hoa.
- Hin th ra mn hnh nh sau:
+ dng u l tt c cc k t vit hoa
+ cc dng sau, mi dng hin th mt k t.
9. Xy dng chng trnh tnh bnh phng v cn bc hai ca mt s nguyn c nhp vo t
bn phm.
10. Xy dng chng trnh tnh lp phng ca tng 3 s nguyn dng nhp vo t bn phm
11. Xy dng chng trnh tnh gi tr ca f = a*x*x + b*x + c vi a, b, c l cc s cho trc,
x l s c nhp v t bn phm.
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
17

CHNG II: CC CU LNH IU KHIN


I. Cc cu lnh la chn:
1. if else
a) Mu lnh:
* Mu lnh 1:
if (biu thc lgic)
cngvic1;
else
cngvic2;
- Cch thc hin: Nu biu thc lgic nhn gi tr ng th my tnh s thc hin cng
vic1. Trng hp ngc li (biu thc logic nhn gi tr sai) th my tnh thc hin
cng vic 2.
V d:
if (a>b)
max=a;
else
max=b;
* Mu lnh 2:
if (biu thc lgic)
cngvic;
- Cch thc hin: Nu biu thc lgic nhn gi tr ng th my tnh s thc hin lnh
trong cu trc if
V d:
if ((x==a)&&(y==b)&&(z==c))
printf(ban da nhap dung ca ba so);
* Ch : cngvic, cngvic1, cngvic2 c th l mt cu lnh n hoc mt cu lnh
ghp (nm gia hai du {}) hoc cng c th l cu lnh c cu trc.
b) V d
V d 9: Vit chng trnh tm s ln nht trong 2 ch s c nhp vo t bn
phm.
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int a,b,max;

Bi ging: C s lp trnh
===================================================================

printf("Nhap hai so:\n");


scanf("%d%d",&a,&b);
if (a>b)
max=a;
else
max=b;
printf("So lon nhat la: %d",max);
getch();
}
2. SWITCH
a) Mu lnh
switch (biu thc)
{
case hng_1: [cng_vic1]
case hng_2: [cng_vic2]
...
case hng_n: [cng_vicn]
[default: [cng_vicn+1]]
}
* Gii thch:
- biu thc, hng1, hng2, ..., hngn c th nhn gi tr l cc s nguyn hoc char (s t
i thnh int)
- cng vic c th l mt cu lnh n hoc 1 cu lnh ghp hoc 1 cu trc lnh khc.
Trong cng vic thng s dng thm lnh break thot lun ra khi cu trc lnh
switch.
* Cch thc hin:
- Nu biu thc nhn gi tr hng no th cng vic tng ng vi hng c thc
hin. Sau , nu khng gp lnh break th n s thc hin tip cng vic cc trng
hp hng cn li.
- Nu tt c cc hng u khng phi l gi tr ca biu thc th cng vic th n+1 s
c thc hin.
b) V d
V d 10:
#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
int a=1;
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
19

Bi ging: C s lp trnh
===================================================================

switch(a)
{
case 0: printf("so do la 0\n");
case 1: printf("so do la 1\n");
case 2: printf("so do la 2\n");
default: printf("khong phai so 0 1 2");
}
getch();
}
V d 10_break:
#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
int a=1;
switch(a)
{
case 0: printf("so do la 0\n");
break;
case 1: printf("so do la 1\n");
break;
case 2: printf("so do la 2\n");
break;
default: printf("khong phai so 0 1 2");
}
getch();
}

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
20

Bi ging: C s lp trnh
===================================================================

BI TP
Bi 1: Hy vit chng trnh tm s ln nht trong hai s nhp vo t bn phm m
khng phi s dng bin ph max?
Bi 2: Hy vit chng trnh tm s ln nht trong hai s v tnh hiu dng ca hai s
.
Bi 3: Hy vit phn mm gii phng trnh bc nht ax-b=0
Bi 4: Hy vit phn mm gii phng trnh bc hai ax2+bx+c=0 vi a, b, c l cc s
nhp vo t bn phm
Bi 5: Hy vit phn mm tnh s tin li lnh c sau thi gian t thng bit:
- Nu gi t hn 6 thng th li sut hng thng l 2%
- Nu gi t 7 thng n 1 nm th li sut hng thng l 3% (p dng cho ton b
thi gian gi).
- Nu gi trn 1 nm th li sut hng thng l 4% (p dng cho ton b thi gian
gi).
Phng thc gi: C sau mi thng ngi gi s c rt li mt ln.
Bi 6: Cho bn s a, b, c, d c vo t bn phm. Hy tm gi tr cc i gn cho bin
c tn l Max v in ra mn hnh.
Bi 7: Vit chng trnh nhp mt s nguyn x vi 2<=x<= 8 v in ra mn hnh th
trong tun bit rng
- Nu s nhp vo l 2 th in ra dng thng bo thu hai
- Nu s nhp vo l 3 th in ra dng thng bo l thu ba
- ...
- Nu s nhp vo l 8 th in ra dng thng bo l ch nht.

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
21

Bi ging: C s lp trnh
===================================================================

II. Cc lnh lp
1. Vng lp xc nh FOR
* Mu lnh
for ([khi to]; [iu kin]; [bthc thay i gtr bin iu khin])
cng_vic;
Trong :
- khi to: l biu thc cho bit gi tr khi to ca bin iu khin
- iu kin : l biu thc cho bit iu kin ca bin iu khin thc hin cng vic
- bthc thay i gtr bin iu khin : l biu thc cho bit gi tr ca bin kiu khin
c thay i nh th no sau mi vng lp.
- cng vic : c th l mt cu lnh n hoc mt cu lnh ghp (gm nhiu lnh n
t gia 2 du )
V d 1:
for (ch = A; ch<= Z; ch++)
printf(%c, ch);
V d 2:
i=1;
for (; i<=24; i++) printf(%d\n,i);
V d 3:
i=1;
for (; i<=24; )
{
printf(%d\n,i);
i++;
}
* Cch thc hin:
Begin
bin khin = gtr khi to
bin iu khin
c tho mn k?

sai

ng
cng vic c thc hin
bin khin nhn gi tr mi
//Chuyen doi ki tu

End

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
22

Bi ging: C s lp trnh
===================================================================

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
main()
{
clrscr();
char chu[80];
int tong, dem;
//doc vao xau ki tu
for (dem=0; (chu[dem]=getchar())!= '\n'; ++dem);
tong=dem;

//lenh rong

//hien thi xau ki tu duoi dang chu hoa


for (dem=0; dem<tong; ++dem)
putchar(toupper(chu[dem]));
getch();
}
Ch : Nu trong cng vic l lnh for khc th ta c cu trc for lng nhau.
2. Vng lp khng xc nh DO WHILE
* Mu lnh
do <cng vic>
while (biu thc logic);
Trong :
- cng vic : l mt lnh n hoc mt lnh ghp c t trong du " " hoc l lnh
rng.
- biu thc logic: nhn 1 trong 2 gi tr ng hoc sai
* Cch thc hin:
Begin

Cng vic thc hin


ng

biu thc logic


sai

End
V d 12:
// nhap cac so nguyen tu ban phim sao cho tong cua chung lon hon 100
#include <stdio.h>
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
23

Bi ging: C s lp trnh
===================================================================

#include <conio.h>
main()
{
clrscr();
int n, tong=0;
do
{
printf("Nhap so: ");
scanf("%d",&n);
tong+=n;
}
while (tong<=100);
printf("Tong cac so da nhap la: %d",tong);
getch();
}
3. WHILE
* Mu lnh
while (biu thc logic);
<cng vic>
Trong :
- biu thc logic: nhn 1 trong 2 gi tr ng hoc sai
- cng vic : l mt lnh n hoc mt lnh ghp c t trong du " "
* Cch thc hin:
Begin
sai

biu thc logic


ng

cng vic thc hin

End
V d 13: Nhp cc s nguyn t bn phm sao cho tng ca chng ln hn 100
#include <stdio.h>
#include <conio.h>
main()
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
24

Bi ging: C s lp trnh
===================================================================

{
clrscr();
int n, tong=0;
while (tong <=100)
{
printf("Nhap so: ");
scanf("%d",&n);
tong+=n;
}
printf("Tong cac so da nhap la: %d",tong);
getch();
}
III. Cc lnh r nhnh v iu kin :
1. BREAK
* Mu lnh
break;
* Tc dng
- Lnh break c tc dng thot ra khi cu lnh c cu trc trc tip cha n v thc
hin tip cc cu lnh pha sau ca chng trnh.
V d 10_break (trang 19)
2. CONTINUE
* Mu lnh
continue;
* Tc dng
- Lnh continue cho php chuyn sang vng lp tip theo m khng cn thc hin cc
cu lnh pha sau trong cng vic ca vng lp.
V d : 8.15 (gio trnh trang 151)
3. GOTO
*Mu lnh
goto tn_v_tr_mi;
Ch : Tn_v_tr_mi l k hiu nh du cu lnh m my tnh s thc hin ngay khi
gp lnh goto. Ta c th k hiu nh du cu lnh nh sau:
Tn_v_tr_mi: cu_lnh;
V d: 8.16 (gio trnh trang 151).

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
25

Bi ging: C s lp trnh
===================================================================

CHNG III: HM TRONG NGN NG LP TRNH C


I. Khi nim v hm
1. Hm th vin
- Hm th vin: l nhng chng trnh con chun, thng dng c lp sn v c
chng trnh dch qun l. Cc hm ny c cha trong cc n v chng trnh khc
nhau di dng cc tp tiu (header) nh stdio.h, conio.h, ...
2. Hm t to
- Hm t to: l chng trnh con c ngi lp trnh vit.
V d 14a:
#include<stdio.h>
#include<conio.h>
main()
{
float f_thi_du(float, int, int); //mau ham, prototype
float x=1.5;
float y, z;
int n=3, p=5, q=10;
y=f_thi_du(x, n, p);
printf("gia tri cua y la %f\n",y);
z=f_thi_du(x+0.5, q, n-1);
printf("gia tri cua y = %f\n",z);
getch();
}
//Khai bao ham
float f_thi_du(float x, int b, int c)
{
float gia_tri;
//khai bao bien cuc bo
gia_tri=x*x+b*x+c;
return gia_tri;
}
II. Cch xy dng hm
1. Xy dng hm
* Khai bo hm:
Kiu_gtr_ca_hm Tn_hm (cc_tham_s_hnh_thc)
{
Cngvic;
[return (gtr ca hm);]
}
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
26

Bi ging: C s lp trnh
===================================================================
Trong :
- Kiu gi tr ca hm: L mt trong cc kiu d liu c bn (float, int, ...)

- Tn hm: Do ngi lp trnh t.


- Cc tham s hnh thc: Tham s hnh thc l danh sch tn cc bin v kiu d liu
tng ng ca n dng khi khai bo hm.
V d:
float f_thi_du(float x, int b, int c)
Ch : Tham s thc s l cc tham s cung cp cho hm khi ta gi hm ra s dng.
Tham s thc s c th l tn bin, c th l biu thc hoc cng c th l mt gi tr
c th.
V d:
y=f_thi_du(x, n, p);
z=f_thi_du(x+0.5, q, n-1);
* Mt s dng khai bo c bit.
- Hm khng c gi tr: l hm khi s dng s khng nhn c gi tr no. V vy,
trong khi khai bo hm, ta khng cn dng lnh return. Khi khai bo hoc m t mu
hm, ta dng t kho void (l kiu d liu c bit ca C m t s vic khng c gi
tr).
V d:
void hm_khng_ c_gi_tr(int n);
- Hm khng c tham s: i vi nhng hm khng c tham s, ta dng t kho void
m t s vic.
V d:
float thi_d(void)
void thi_d(void) //hm khng c gi tr v khng c tham s.
- Hm khng khai bo kiu gi tr ca hm: Khi hm s c nhn kiu gi tr
ngm nh l int
V d:
hm(float x);
//hm nhn gi tr l s int
V d 15: chuyn i ch thng thnh ch hoa
Cch 1:
#include<stdio.h>
#include<conio.h>
char chuyen_chu_hoa(char ch)
{
char kytu;
kytu=(ch>='a' && ch<='z') ? (ch-32) : ch;
//kytu=(ch>='a' && ch<='z') ? (ch-('a'-'A')) : ch; //'a'-'A'=32
return(kytu);
}
main()
{
clrscr();
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
27

Bi ging: C s lp trnh
===================================================================

char thuong,hoa;
printf("Hay go vao mot ky tu: ");
scanf("%c",&thuong);
hoa=chuyen_chu_hoa(thuong);
printf("\nChu hoa tuong ung la %c\n\n",hoa);
getch();
}
Cch 2: S dng hm if chuyn ch thng thnh ch hoa
char chuyen_chu_hoa(char ch)
{
char kytu;
if kytu=(ch>='a' && ch<='z')
return (ch-32);
else
return(kytu);
}
Cch 3: S dng hm toupper (sinh vin t lm)
V d 16: Xy dng hm kim tra tnh chn l ca mt s nguyn
even(n)
int n;
{
int result;
if ((n%2)==0)
result=1;
else
result=0;
return (result);
}
2. S dng hm
- Mun s dng hm trong main, ta phi khai bo nguyn mu (prototype) trc khi gi
hm ra s dng (c th khai bo trc hm main hoc khai bo trong hm main). Cch
khai bo nguyn mu nh sau:
- Cch 1:
Kiu_gtr_ca_hm Tn_hm(dsch_cc_kiu_dliu_t.ng_vi_cc_tham_s_hnh_thc)
V d:
float f_thi_du(float, int, int);
- Cch 2:
Kiu_gtr_ca_hm Tn_hm(cc_tham_s_hnh_thc_v_kiu_d_liu_t.ng)
V d:
float f_thi_du(float x, int a, int b);
V d 14b:
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
28

Bi ging: C s lp trnh
===================================================================

#include<stdio.h>
#include<conio.h>
float f_thi_du(float, int, int); //khai bao mau ham, prototype
main()
{
float x=1.5;
float y, z;
int n=3, p=5, q=10;
y=f_thi_du(x, n, p);
printf("gia tri cua y la %f\n",y);
z=f_thi_du(x+0.5, q, n-1);
printf("gia tri cua y = %f\n",z);
getch();
}
//Khai bao ham
float f_thi_du(float x, int b, int c)
{
float gia_tri;
//khai bao bien cuc bo
gia_tri=x*x+b*x+c;
return gia_tri;
}
3. Nguyn tc hot ng ca hm
- Hm nhn cc thng s vo v tr li kt qu cho tn hm.
V d:
y=f_thi_du(x, n, p);
Trong ln gi ny, hm f_thi_du nhn tham s l x, n, p v tr li kt qu l gi tr ca
biu thc x*x+n*x+p.
=> V vy, y chnh l gi tr ca biu thc x*x+n*x+p.
? Hy xc nh cc thng s truyn vo v gi tr nhn c ca hm khi gi hm nh
sau:
z=f_thi_du(x+0.5, q, n-1);
4. Truyn tham s cho hm
Truyn tham s cho hm chnh l vic truyn gi tr cho hm . Gi tr ca tham s
thc s trc v sau khi gi hm khng thay i.
V d 17 : Xy dng hm hon v 2 s nguyn cho trc
#include<stdio.h>
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
29

Bi ging: C s lp trnh
===================================================================

#include<conio.h>
main()
{
clrscr();
//khai bao mau ham
void hoan_vi(int, int); //void hoan_vi(int a, int b)
int n=10, p=20;
printf("Truoc khi goi ham: %d %d\n",n,p);
hoan_vi(n,p);
printf("Sau khi goi ham: %d %d\n",n,p);
getch();
}
void hoan_vi(int a, int b)
{
int t;
printf("Truoc khi hoan vi: %d %d\n",a,b);
t=a;
a=b;
b=t;
printf("Sau khi hoan vi: %d %d\n",a,b);
}
5. Phn loi bin
* Bin ton cc
- L bin c khai bo trc khi khai bo hm. Bin ton cc c s dng mi ni
trong chng trnh v c tc dng ngay t chng trnh ngun theo sau khai bo bin
.
V d :
int a ;
main()
{....}
int n ;
float x ;
ham1(....)
{.....}
ham2()
{.....}
* Bin a phng
- L bin ch c gi tr trong thi gian hm hot ng . Sau khi hm kt thc, nhng bin
khai bo bn trong hm cng vi cc tham s ca hm s c gii phng.
V d :
#include<stdio.h>
int i;
//Bien toan cuc
main()
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
30

Bi ging: C s lp trnh
===================================================================

{
void thi_du(void);
for (i=1; i<=5;i++)
thi_du();
}
void thi_du(void)
{
int m=3 ; //Bien dia phuong
m++ ;
printf("%d %d\n",i,m);
}
* Bin a phng tnh (static)
- Bin a phng tnh c gi tr khi to l 0 (trong ln dng u tin). Bin a
phng tnh c th tn ti v lu gi gi tr ngay c khi hm kt thc hot ng.
Khai bo:
static kiu_d_liu danh_sch_bin;
V d:
static int i;
V d 18:
#include<stdio.h>
#include<conio.h>
main()
{
void thi_du(void);
int n;
for (n=1;n<=5;n++)
thi_du();
getch();
}
void thi_du(void)
{
static int i;
i++;
printf("Goi lan thu %d\n",i);
}
* Bin thanh ghi (register)
- Bin thanh ghi l cc bin c lu trong cc thanh ghi ca b vi x l CPU vi tc
c truy xut nhanh. V s thanh ghi khng nhiu nn cn hn ch dng cc bin thanh
ghi (thng dng cho cc bin trong vng lp).
V d:
register int t;
for (t=0 ; string[t] ; t++)
putchar(toupper(string[t]));
ch : Bin thanh ghi khng c a ch ring nh cc nh khc v thanh ghi nm ngay
trong CPU.
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
31

Bi ging: C s lp trnh
===================================================================

III. Hm quy
1. nh ngha hm quy
- Hm quy l hm c th c li gi ti chnh n.
V d: Tnh giai tha ca n bit
1 ,n = 0

n! =
( n 1)!* n , n >= 1

Ta xy dng hm GIAI_THUA nh sau:


int GIAI_THUA (int n)
{
if (n==0) return(1)
else return(n*GIAI_THUA(N-1));
}
V d (Sinh vin t lm): Tm c s chung ln nht ca hai s x,y bit
UCLN(x,y) = x nu y=0
UCLN(y, phn d ca x/y) nu y<>0
2. Mt s ch khi vit hm quy
Khi vit hm quy, my tnh s s dng b nh xp chng kiu LIFO (Last In, First
Out stack) cha cc kt qu trung gian. V vy, chng trnh khi chy s tn nhiu b
nh. Nu chng trnh c th s dng vng lp thay th th ta nn dng vng lp.
V d: Xy dng hm tm c chung ln nht ca hai s x, y theo phng php sau:
UCLN(x,y)= x nu y=0
UCLN(y,x%y) nu y<>0
Gii :
int UCLN(int x, int y)
{
if (y==0) return(x) ;
else return(UCLN(y,x%y)) ;
}
V d 19: Xy dng chng trnh tnh giai tha ca s nguyn n nhp vo t bn phm
#include<stdio.h>
#include<conio.h>
main()
{
int n;
long int GIAI_THUA(int n);
//Doc so n
printf("Nhap n= ");
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
32

Bi ging: C s lp trnh
===================================================================

scanf("%d",&n);
//in ra giai thua
printf("n! = %ld \n",GIAI_THUA(n));
getch();
}
//xay dung ham tinh giai thua
long int GIAI_THUA(int n)
{
if (n==0) return (1);
else return (n*GIAI_THUA(n-1));
}
V d 20: Xy dng chng trnh cho 3 cc trong cc C1 cha N a xp t ln n
nh. Yu cu chuyn cc a n cc C2 vi nguyn tc:
- c php chuyn a qua cc trung gian C3
- Trn mi cc, cc a c xp phi tho mn nguyn tc: a nh trn, a
ln di.

C1

C2

C3

#include<stdio.h>
#include<conio.h>
void DICH_CHUYEN(int N, int C1, int C2, int C3);
main()
{
clrscr();
int N;
printf("Nhap N= "); scanf("%d",&N);
DICH_CHUYEN(N,1,2,3);
getch();
}
//xay dung ham DICH_CHUYEN
void DICH_CHUYEN(int N, int C1, int C2, int C3)
{
if (N==1) printf("%d den %d\n",C1,C2);
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
33

Bi ging: C s lp trnh
===================================================================

else
{
DICH_CHUYEN(N-1,C1,C3,C2);
DICH_CHUYEN(1,C1,C2,C3);
DICH_CHUYEN(N-1,C3,C2,C1);
printf("\n");
}
}
3) Xy dng macro
- Macro l mt tp hp cc lnh v biu thc c i din bng mt tn c th. Khi ta
cn s dng tp hp cc lnh v biu thc , ta ch cn gi tn macro.
Khai bo:
#define tn_macro dy_cc_lnh_v_biu thc.
V d:
#define In_gtri(x) printf(x= %d,x)
#define cube(y) (y*y*y)
V d 21 :
#include<stdio.h>
#include<conio.h>
#define hang 3
#define In_gtri(x) printf("%d\n",x)
#define cube(y) (y*y*y)
main()
{
clrscr();
int x, y, z;
x=hang;
z=cube(x);
In_gtri(x);
In_gtri(z);
getch();
}
ch : -Trong trng hp macro c cha nhiu lnh th gia cc lnh phi c du ;
ngn cch.
- macro khng c tnh quy v tnh modun ho nh hm.
4) Mt s th vin hm chun v hm thng dng
a) Th vin hm chun
stdio.h
math.h
stdlib.h
string.h

Th vin cc hm Input/Output
Th vin cc hm ton hc du chm ng (sqrt, sin,...)
Th vin cc hm cp pht b nh.
Cc hm v xu k t

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
34

Bi ging: C s lp trnh
===================================================================

ctype.h
Cc hm v chuyn i k t.
b) Mt s hm thng dng
* Hm to s ngu nhin
randomize;
//Hm to b s ngu nhin
random(n);
//Hm to s ngu nhin trong khong t 0 ti n-1
Ch : - Nu ta s dng hm rand() th chng trnh s to ra mt s ngu nhin nm
trong khong t 0 n 32767.
- Nu mun s dng hm to s ngu nhin, ta phi gi tp tin x l stdlib.h
V d 22:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
randomize();
printf("So ngau nhien trong khoang tu 0-99: %d\n",random(100));
getch();
}
* Cc hm thi gian
- Hm ngy thng
- Turbo C nh ngha cu trc ngy thng v thi gian nh sau:
struct date
{
int da_year;
//nm hin ti
char da_day; //ngy hin ti
char da_mon;
//thng
}
Khi :
void getdate(struct date *datep); //hm ly ngy thng ca my
void setdate(struct date *datep);//hm xc lp ngy thng
V d 23: Vit chng trnh ly ngy thng ca my
#include<stdio.h>
#include<conio.h>
#include<dos.h>
main()
{
clrscr();

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
35

Bi ging: C s lp trnh
===================================================================

struct date d;
getdate(&d);
printf("Nam hien tai la: %d\n",d.da_year);
printf("Thang hien tai la: %d\n",d.da_mon);
printf("Ngay hien tai la: %d\n",d.da_day);
getch();
}
V d 24: Vit chng trnh xc lp ngy thng cho my
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<process.h> //su dung ham system
main()
{
clrscr();
struct date ngay_moi,ngay_cu;
getdate(&ngay_cu);
printf("ngay thang goc: %d / %d / %d \n",ngay_cu.da_day, ngay_cu.da_mon,
ngay_cu.da_year);
//system("date");
ngay_moi.da_year = 2000;
ngay_moi.da_mon = 1;
ngay_moi.da_day = 1;
setdate(&ngay_moi);
printf("Ngay thang duoc xac lap: %d / %d / %d \n",ngay_moi.da_day,
ngay_moi.da_mon, ngay_moi.da_year);
system("date");
//ham system dung de goi lenh cua dos
setdate(&ngay_cu);
printf("Tro lai ngay thang goc:
ngay_cu.da_mon, ngay_cu.da_year);
system("date");
getch();

%d / %d / %d \n",ngay_cu.da_day,

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
36

Bi ging: C s lp trnh
===================================================================

BI TP CHNG II - III.
Bi 1: Cho hm
F(x) = 5x2 + 5x + 1 khi -1 < x <= 1
|x-5| / (3(x2 + 1)) khi x < -1 hay x >= 1
Vit chng trnh c mt s thc x t bn phm v in ra mn hnh gi tr ca F(x)
Bi 2: Tnh s tin thc lnh ca mt nhn vin trong x nghip theo cng thc:
Thc lnh = (lng chnh * s ngy cng)/26 + (ph cp) - (tm ng)
vi quy nh: ngh qu 5 ngy s b tr 20% tng thc lnh, lm thm qu 3 ngy
c tng 10% tng thc lnh.
Bi 3: Vit chng trnh tm v in ra mn hnh mi c ca s nguyn dng c vo
t bn phm
Bi 4: Dng cu trc swich ... case tnh s ngy ca thng bt k thuc nm bt k c
vo t bn phm.
(Bit rng nhng nm nhun thng 2 c 29 ngy, cn nm khng nhun, thng 2 ch c
28 ngy. Nm nhun l nm chia ht cho 4 nhng khng chia ht cho 100).
Bi 5: Tm s hon ho khng vt qu N (vi N nhp vo t bn phm). Bit s hon
ho l s c tng cc c nguyn dng b hn n bng chnh n.
V d: 6 c cc c nguyn dng b hn n l 1, 2, 3
Ta c 1+2+3=6 nn 6 l s hon ho.
Bi 6: Vit chng trnh tm cc s chnh phng khng vt qu s n c vo t bn
phm.
Bi 7: Vit chng trnh hin th cc s nguyn t ln hn 2 v nh hn s n nhp vo
t bn phm.
Bi 8: Vit chng trnh tm nhng s c 3 ch s m tng cc lp phng ca cc ch
s ca chng bng chnh chng.
Bi 9: Mt ngi c N triu ng mun i ngn hng ly cc t 10000, 5000, 2000,
1000, 500, 200. Hy vit chng trnh hin th cc phng n i tin ra mn
hnh.
Bi 10: Vit chng trnh tnh giai tha ca s nguyn n vi n nhp vo t bn phm.
Bi 11: S dn ca mt a phng hin nay l N triu ngi, t l tng dn s l s%
/nm. Hy vit chng trnh tnh xem sau bao nhiu nm th s dn nc ta tng
ln gp k ln.
Bi 12: Vit chng trnh m s ch s ca mt s nguyn c vo t bn phm.
Bi 13: Vit chng trnh tnh thi gian gi tit kim ngn hng bit s tin gi ban
u l T, li sut thng l s%, s tin cn lnh trong tng lai l Ts. Tin tit kim
c gi theo phng thc sau mi thng, li s c gp vo s tin cho vay
tnh li cho thng tip theo (gi l li lu k).
Bi 14: Phn tch mt s nguyn N thnh tch cc tha s nguyn t.
Bi 15: Vit chng trnh gii phng trnh bc 2 ax2+bx+c=0 vi a, b, c l cc s nhp
vo t bn phm.
Bi 16: Vit chng trnh nhp vo N s nguyn v in ra mn hnh theo th t tng dn.
Bi 17: Vit chng trnh nhp vo mt s t nhin t bn phm v in ra cc ch s l
c mt trong .
Bi 18: Hy vit chng trnh s dng quy hin th dy s Fibonacci theo nh ngha
sau:
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
37

Bi ging: C s lp trnh
===================================================================

F1=1; F2=1;
Fn = Fn-1+Fn-2
Bi 19: Vit chng trnh nhp vo t bn phm mt dy cc s nguyn khc 0 cho n
khi nhp s 0 th dng vic nhp d liu li. Tnh gi tr trung bnh.
Bi 20: Vit chng trnh c mt k t vo t bn phm v in ra mn hnh m ASCII
ca n. Chng trnh ch kt thc khi n phm 0.
Bi 21: Hy vit chng trnh in ra bng n! vi n = 1..14
n
n!
1
1
2
2
3
6
4
24
5
120
6
720
7
...
Bi 22: Vit hm tnh an vi a l s thc, n l s nguyn dng nhp vo t bn phm
Bi 23: Vit hm tnh din tch ca cc hnh: hnh vung, hnh trn, hnh thang trong
cng mt chng trnh. Sau hi v chn mt phng n tnh din tch bng
cch chn trong bng chn lnh sau:
0. Ri khi chng trnh. Quay v DOS
1. Tnh din tch hnh vung
2. Tnh din tch hnh trn
3. Tnh din tch hnh thang
Hy n mt s chn:
Bi 24: Hy vit chng trnh tnh n! v tnh
k
C = n !/(k !*(n k ))
n

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
38

Bi ging: C s lp trnh
===================================================================

CHNG IV: CC KIU D LIU C CU TRC


I. Kiu d liu mng
1. Khi nim v mng
- Khi nim: Mng l mt nhm cc phn t hu hn c cng kiu d liu c bn.
Cc yu t xc nh mt mng gm c:
Tn mng
Kiu d liu chung ca cc phn t trong mng
Kiu d liu ca ch s v phm vi ca ch s.
Ch : Kiu d liu ca cc phn t mng l mi kiu d liu m mt bin c th
nhn. Tuy nhin, kiu d liu ca ch s ch c th l kiu m c (nguyn, k t,
lgic, lit k hay on con) ch khng c l kiu thc hay kiu chui.
V d:
int A[100];
char text[80];
static char message[25];
static float n[12*4];
/*Khai bao voi bieu thuc*/
Mng l tp hp cc gi tr c cng kiu d liu. Mng c th c 1 chiu hoc nhu
chiu (mng a chiu).
1. Mng 1 chiu:
C bn nht s l mng 1 chiu, mi 1 phn t trong mng s l nhng gi tr c cng
kiu d liu vi nhau.
Cch khai bo: c 2 cch
M
int number[10];
M
int number[] = {5,3,6,7,8};
Cch trn c s dng khi bn mun khai bo 1 mng kiu int c 10 phn t (10 l
s lng phn t ln nht m mng number c th cha c).
Cch th 2 c s dng khi ta mun khai bo 1 mng tnh ( c sn cc gi tr
trong mng). trng hp ny ta khng cn phi khai bo s lng phn t trong
mng.
Truy xut mng: v mng l 1 tp hp cc phn t nn khi dng ta phi thng qua
index (ch s mng). N ging nh ta c 1 ci bn vi nhiu ngn, khi mun tm 1 th g
ta phi nh l n ngn th my. Index l 1 kiu s nguyn chy t 0 ti s
phn t ln nht trong mng tr 1.
VD: mng c 10 phn t th index s i t 0 cho ti 9. Phn t u tin l 0 v cui
cng l 9.
M
int number[3];
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
39

Bi ging: C s lp trnh
===================================================================

number[0] = 10; // phn t th nht mang gi tr l 10


number[1] = 40;
number[2] = 90; // phn t th 3 mang gi tr l 90
number[3] = 100; // bo li dng ny v index t 0 -> 2 (v khai bo mng c 3 phn t)
Thng thng mng c duyt bng cc vng lp, sau y l 1 VD:
M
#include<stdio.h>
void main()
{
int number[5];
int i;
// Nhp vo
for(i = 0 ; i < 5 ; i++) {
printf("Nhap so thu %d : ", (i+1));
scanf("%d", &number[i]);
}
// Xut ra
for(i = 0 ; i < 5 ; i++) {
printf("So thu %d : %d
", (i+1), number[i]);
}
getch();
}
Vng lp s gip chng ta i ln lt t phn t u ti phn t cui cng ca mng.
2. Mng 2 chiu:
Mng 2 chiu l 1 mng m mi phn t trong n l 1 mng 1 chiu (mng ca
mng)
* Cch khai bo:
M
int number[3][4];
Da vo cu lnh khai bo trn ta s c 1 mng 2 chiu cc s int. Mng ny tn
number v c tng cng 12 phn t (3 hng - 4 ct)
Note: index ca mng 2 chiu c quy c bng s hng v s ct. Cng ging nh
khi ta cn v 1 ci bng th ch cn bit s hng v s ct ca bng .
* Cch s dng: tng t nh mng 1 chiu, mun ghi d liu vo u th ta phi ch
ra index .
VD:
M
int number[3][4];
number[0][0] = 10; // Phn t u tin ca mng mang gi tr l 10 (hng 1, dng 1)
number[0][1] = 20; // Phn t hng th 1, ct th 2 mang gi tr l 20
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
40

Bi ging: C s lp trnh
===================================================================

//.......
number[2][3] = 100; // Phn t cui cng ca mng
Nh vy vn l nguyn tc index, index ca hng th khng b hn hoc bng s
hng v index ca ct th b hn hoc bng s ct.
V th m khi p dng trong vng lp, ch n gin l lng 2 vng lp vo nhau.
VD:
M
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int A[3][4];
int i, j;
// Nhp vo
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
printf("Nhap so o A[%d][%d] : ",i,j);
scanf("%d", &A[i][j]);
}
printf(\n);
}
// Xut ra
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
printf("%d
", A[i][j]);
}
printf("\n");
}
getch();
}
Mt s lu v mng:
- Index: Bt u t 0 v kt thc s phn t mng - 1.
- Trong C khi 1 mng c khai bo n s t ng ly 1 vng nh trong RAM v n s
khng t ng Reset vng nh . VD nh sau:
M
int number[5];
printf("%d", number[0]);
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
41

Bi ging: C s lp trnh
===================================================================

on code trn s ra 1 con s bt k d bn cha h gn gi tr cho n. y gi l d


liu rc trong C. iu ny cng c ngha l khi ta khai bo mng c 100 phn t th n
chim b nh tng ng cho 100 phn t mc d bn ch mi dng c vi phn t
trong
mng.
Tc dng ca mng: Trong cc bi tp v mng chng ta s hiu r hn v n
nhng trong 1 lp trnh mng cn c p dng lm ra kiu d liu l String (kiu
chui). D trong C khng c kiu String nhng ta vn c th suy lun c String chnh
l mng 1 chiu ca kiu char (k t). VD:
M
char name[40];
printf("Nhap ten cua ban: ");
scanf("%s", &name);
printf("Ten cua ban la: %s", name);
3. Mng nhiu chiu
4. Bi tp
BT4_1:
1. Vit hm nhp mt mng s nguyn gm n phn t.
2. Vit hm in mng s nguyn gm n phn t
3. Vit hm tm phn t ln nht ca mng
4. Vit hm tm phn t ln nht trong mng (tr v gi tr v ch s).
5. Vit hm tm phn t nh nht trong mng (tr v gi tr v ch s).
6. Vit hm in ra cc s nguyn t trong mng
7. Vit hm m cc s nguyn t trong mng
8. Vit hm trung bnh cng cc s nguyn t trong mng
9. Vit hm lit k cc s chnh phng trong mng
10. Vit hm sp xp mng theo th t tng dn.
11. Vit hm in ra cc s l theo th t tr tuyt i tng dn, cc s chn theo th t tr
tuyt i gim dn.
BT4_2: Vit chng trnh nhp vo mt mng 1 chiu, sau tm xem trong mng c
on tng no c s phn t nhiu nht.
BT4_3: Vit chng trnh nhp vo mt mng 1 chiu, sau tm xem trong mng c
on tng no c tng ln nht.
BT4_4: Vit chng trnh nhp vo mng 1 chiu c n phn t (c th dng hm
randomize cho nhanh) sau xut ra phn t no xut hin trong mng nhiu nht v
xut hin bao nhiu ln.
BT4_5: Cho mng s nguyn di n.
- In ra mng con cc phn t dng di nht
- In ra mng con c tng ln nht.
BT4_6: Vit chng trnh gn gi tr ngu nhin cho N phn t ca mng A.
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
42

Bi ging: C s lp trnh
===================================================================

1. Hin th cc phn t ca mng A.


2. Sp xp mng theo chiu tng dn.
3. Chia mng ra thnh 2 mng con trong c 1 mng (B) cc s dng v 1 mng (C)
cc s m.
4. Xo mt phn t th i trong mng C
5. Chn thm s x vo mng C vi x nhp t bn phm sao cho mng C vn l mng cc
s dng tng dn.
6. Vit hm m s nguyn x xut hin trong mng A (x nhp vo t bn phm).
7. Tm xem on tng dn trong mng A m c s phn t ln nht.
BT4_7: Vit chng trnh
1. Nhp N s nguyn t bn phm (lu vo mng A)
2. Hin th cc s nguyn ra mn hnh
3. Chia N s nguyn thnh 2 mng:
- Mng B gm cc s nguyn m
- Mng C gm cc s nguyn dng
4. Sp xp cc phn t trong mng A theo chiu tng dn
5. Chn thm mt s nguyn a bt k t bn phm vo mng A m vn m bo tnh
tng dn
6. Nhp mt s nguyn a bt k t bn phm v xo tt c cc phn t bng a trong
mng A
7. m s phn t trong mng A chia ht cho 3
8. Sa tt c cc phn t chia ht cho 3 trong mng A thnh 100.
Bi lm:
BT4_7
#include<stdio.h>
#include<conio.h>
static int A[100],B[100],C[100],N;
int i,min,x,y;
void Nhap(void)
{
for(i=0;i<N;i++)
{
printf("A[%d]=",i);
scanf("%d",&A[i]);
}
}
void HienThi(int A[],int N)
{
printf("\n");
for (int m=0; m<N; m++)
}
//phuong phap sap xep chon

printf("%4d",A[m]);

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
43

Bi ging: C s lp trnh
===================================================================

void SapXep(void)
{
int i, j, index,tg;
for(i=0;i<N;i++)
{
min=A[i]; index=i;
for(j=i;j<N;j++)
{
if (A[j]<min)
{ //tim gia tri nho nhat trong mang con
min=A[j];
index=j;
//giu lai chi so cua phan tu duoc coi la min
}
}
tg=A[i]; A[i]=A[index]; A[index]=tg;
}
printf("\nMang A sap xep tang dan la: ");
HienThi(A,N);
}
void ChiaMang(void)
{
int x=0;y=0;
for(i=0;i<N;i++){
if(A[i]<0) {B[x]=A[i];x++;}
if(A[i]>0) {C[y]=A[i];y++;}
}
printf("\nMang B co %d phan tu la: ",x);
HienThi(B,x);
printf("\nMang C co %d phan tu la: ",y);
HienThi(C,y);
}
void Xoa(void)
{
int a,k;
printf("\nNhap gia tri muon xoa a= ");
scanf("%d",&a);
for(i=0;i<N;i++)
if(A[i]==a)
{
for(k=i+1;k<N;k++) A[k-1]=A[k];
N--;
}
printf("\nMang A sau khi xoa so %d la: \n",a);
HienThi(A,N);
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
44

Bi ging: C s lp trnh
===================================================================

}
void Chen(void){
int a,k;
printf("\nBan muon chen so a= ");
scanf("%d",&a);
for(i=0;i<N;i++)
{
if(A[i]>a){
for(k=N;k>i;k--) A[k]=A[k-1];
A[i]=a;
break;
}
}
if (i==N) A[N]=a;
N++;
printf("\nMang A sau khi chen so %d la: \n",a);
HienThi(A,N);
}
void TimSoChiaHetCho3(void)
{
int x=0;
for(i=0;i<N;i++)
if(A[i]%3==0) x++;
printf("\nmang A co %d so chia het cho 3",x);
}
void Sua(void) {
for(i=0;i<N;i++)
if(A[i]%3==0) A[i]=100;
printf("\nDay A da sua cac phan tu chia het cho 3 la: \n");
HienThi(A,N);
}
void main(void)
{
clrscr();
printf("Nhap so phan tu cua mang N= ");
scanf("%d",&N);
Nhap();
printf("\nMang A gom: ");
HienThi(A,N);
SapXep();
ChiaMang();
Xoa();
Chen();
TimSoChiaHetCho3();
Sua();
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
45

Bi ging: C s lp trnh
===================================================================

getch();
}

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
46

Bi ging: C s lp trnh
===================================================================

II. Kiu d liu con tr


1. Khi nim con tr
- Con tr l bin nhn gi tr c kiu d liu s nguyn
- Khai bo:
int *tn_bin_con_tr;
v d :
int *con_tro;
//bin con tr c tn l con_tro
- Khi mi khai bo :
+ Bin con tr c t mt nh c a ch do my tnh quy nh.
+ Bin con tr cha c gi tr c th
+ Bin con tr tr n vng nh khng bit trc.
V vy, ta phi dng lnh gn :
<tn_bin_con_tr> = &<tn_bin> ;
2. a ch con tr
- Ta c :
con_tro: Gi tr ca con tr l a ch ca bin xut hin trong lnh gn :
con_tro = &bien ;
*con_tro : Gi tr m con tr tr n (chnh l gi tr ca bien)
&con_tro : a ch ca con tr trong b nh
=> *con_tro v bien u ch gi tr ca bien
con_tro v &bien u ch a ch ca bien
- ch : mun hin th gi tr l a ch ca nh, ta dng m quy cch %p
V d 26: Hy chy chng trnh sau
#include <conio.h>
#include <stdio.h>
main()
{
int bien;
int *con_tro; //con tro
bien=10;
printf("\nDia chi cua bien la: %p", &bien);
printf("\nGia tri cua bien la: %d", bien);

//dia chi bien


//10

con_tro=&bien; //con_tro duoc gan gia tri la dia chi cua bien
printf("\nDia chi cua con tro la: %p", &con_tro); //dia chi con_tro
printf("\nGia tri cua con tro la: %p",con_tro);

// = gia tri bien

printf("\nGia tri duoc tro toi la: %d",*con_tro);


getch();

// = 10

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
47

Bi ging: C s lp trnh
===================================================================

3. S dng con tr trong mng mt chiu


- Mi mng mt chiu c coi l mt bin con tr.
Trong mng 1 chiu A, A chnh l a ch ca phn t u tin trong mng.
=> A tng ng vi &A[0]
V d:
int A[], *con_tro;
con_tro=A;
hoc con_tro = &A[0];
V vy, truy xut n phn t th n ca mng, ta c:
A[n] == *(con_tro+n)
4. S dng con tr trong mng nhiu chiu
5. S dng con tr trong hm

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
48

Bi ging: C s lp trnh
===================================================================

III. Kiu d liu struct


- Khi nim: struct l kiu d liu m trong mi phn t ca n c nhiu trng vi
cc kiu d liu c th khc nhau.
1. Khai bo struct
* Cch 1: Khai bo trc tip.
struct [Tn_struct]
{ kiu_d_liu tn_trng1;
kiu_d_liu tn_trng2;
...
kiu_d_liu tn_trngn;
} bien1, bien2, . bien n ;

/*danh_sach_bien_nhan_struct*/

Ch : Danh sch bin nhn d liu kiu struct l tn cc bin c vit cch nhau bi
du ,
V d:
struct DiaChi
{ int SoNha;
char Pho[20];
char ThanhPho[20];
} OngA, BaB;
* Cch 2: Khai bo gin tip.
struct <Tn_struct>
{ kiu_d_liu tn_trng1;
kiu_d_liu tn_trng2;
...
kiu_d_liu tn_trngn;
}
struct <tn_struct> bien1, bien2, . bien n ;

/*danh_sach_bien_nhan_struct*/

V d:
struct DiaChi
{ int SoNha;
char Pho[20];
char ThanhPho[20];
}
struct DiaChi OngA, BaB;
* Cch 3: Khai bo struct lng nhau
V d:
struct Date
{unsigned char Ngay ;
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
49

Bi ging: C s lp trnh
===================================================================

unsigned char thang;


unsigned int nam;
}
struct NhanSu
{char HoTen[30] ;
struct Date NgaySinh ;
unsigned int GioiTinh;
struct DiaChi NoiO ;
float Luong;
} NguoiA, NguoiB;
2. Truy cp vo phn t ca struct
Mun truy cp n 1 trng ca mt bin bt k c kiu d liu struct, ta vit:
Tn_bin.Tn_trng
V d:
OngA.SoNha = 10;
OngA. Pho = Ha Dong;
OngA.ThanhPho = Ha Noi
3. Phi hp mng v d liu kiu struct
- Mng_struct l mng m mi phn t ca n c kiu d liu struct.
V d:
struct DiaChi NoiO[100];
- Mun truy cp vo 1 trng ca bin th i trong mng ta vit:
Tn_bin_mng[ch_s].Tn_Trng;
V d:
for (i=0; i<5; i++)
{
printf("Nhap dia chi noi o cho nguoi thu %d",i+1) ;
printf("\nSo nha: ") ; scanf("%d",&NoiO[i].SoNha) ;
printf(" - Pho: ") ; scanf("%s",&NoiO[i].Pho) ;
printf(" - Thanh pho: ") ; scanf("%s",&NoiO[i].ThanhPho) ;
}
v d 27 :
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int i;
struct DiaChi
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
50

Bi ging: C s lp trnh
===================================================================

{int SoNha;
char Pho[20];
char ThanhPho[20];
};
struct DiaChi NoiO[10];
for (i=0; i<3; i++)
{
printf("\n\nNhap dia chi noi o cho nguoi thu %d :",i+1);
printf("\n So nha: "); scanf("%d",&NoiO[i].SoNha);
printf("\n Pho: "); scanf("%s",&NoiO[i].Pho);
printf("\n Thanh pho: "); scanf("%s",&NoiO[i].ThanhPho);
}
clrscr();
for (i=0; i<3; i++)
{
printf("\n\nDia chi noi o cho nguoi thu %d :",i+1);
printf("\n So nha: %d",NoiO[i].SoNha);
printf("\n Pho: %s",NoiO[i].Pho);
printf("\n Thanh pho: %s",NoiO[i].ThanhPho);
}
getch();
}

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
51

Bi ging: C s lp trnh
===================================================================

IV. Kiu d liu t nh ngha :


1. Kiu lit k (t kho enum)
- Kiu d liu lit k: l kiu d liu m khi nh ngha, ta lit k tt c cc phn t ca
n.
C php:
enum Tn_kiu_d_liu_lit_k {Danh sach gi tr};
enum Tn_kiu_d_liu_lit_k Tn_bin;
Trong : Danh sch cc gi tr l dy cc gi tr c th c vit cch nhau bi du
,
V d:
enum Mau {trang, den, vang};
enum Mau MauAo;
V d 28:
#include<stdio.h>
#include<conio.h>
main()
{ clrscr();
enum Mau{trang, den, vang};
enum Mau MauAo;
MauAo=trang;
if (MauAo==trang) printf("Ao mau trang");
getch();
}
Ch : Khi nh ngha kiu lit k, gi tr u tin ca danh sch gi tr c s th t
mc nh l 0, cc s th t ca cc phn t ng sau n tng dn thm 1 n v.
Trong trng hp mun gn s t ban u cho gi tr u tin ca danh sch gi tr
ta b sung thm gtr1=s th t u tin
V d:
enum Mau {trang=0, den, vang};
enum Mau MauAo;
v d 29 :
#include<stdio.h>
#include<conio.h>
main()
{ clrscr();
enum Mau{trang=1, den, vang};
enum Mau MauAo;
printf("%d",den);
getch();

/*2*/

}
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
52

Bi ging: C s lp trnh
===================================================================

2. Kiu typedef
T kho typedef dng t tn mi cho kiu d liu c hoc nh ngha tn ca
mt kiu d liu mi.
V d1:
typedef float So;
typedef So SoThuc;

/* nh ngha tn mi ca kiu d liu float l So */


/* nh ngha tn mi ca kiu d liu So l SoThuc */

V d 2:
typedef struct NhanSu{
char HT[30];
unsigned int GioiTinh;
} NS_Phong1;
NS_Phong1 st;
/*
struct NhanSu{
char HT[30];
unsigned int GioiTinh;
}
struct NhanSu st;
*/
* u im: Khi s dng Typedef, m chng trnh ngn gn, d c v d chuyn m
sang my khc.
V d:
Cch 1:
char st1[50], st2[50], st3[50], st4[50], st5[50]
Cch 2:
typedef char st[50];
st st1, st2, st3, st4, st5;

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
53

Bi ging: C s lp trnh
===================================================================

BT1: Vit chng trnh nhp thng tin Nhn s cho N nhn vin Cng ty THNH Duy
Phng (vi N nhp vo t bn phm)
Trong gm cc thng tin v:
- M nhn vin
- H tn nhn vin
- Nm sinh
- Qu qun
- Ngy k hp ng
- H s lng
1. m xem c bao nhiu nhn vin sinh nm 1990
2. Hin th danh sch nhng ngi c h s lng > 2.1
3. Hin th H tn v h s lng ca ngi c h s lng cao nht
4. Gi s nhng ngi trn 40 tui c hng thm ph cp sc kho l 200,000
ng/thng. Hy tnh tng s tin cng ty dng chi tr ph cp trong mt thng.
BT2:
Vit chng trnh to mt mng danh sch cc loi my in ca mt ca hng, thng tin
ca my in bao gm:
- Loi my
- Ni sn xut
- Thi gian bo hnh
- Gi tin
Vit hm nhp 1 dy cc loi my in c thng tin trn
In ra mn hnh danh sch cc loi my in
In ra mn hnh cc loi my in c thi gian bo hnh ln hn 3 nm v gi tin ln
hn 1000000

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
54

Bi ging: C s lp trnh
===================================================================

CHNG V: D LIU KIU TP


I. Khi nim v tp
1. Khi nim tp
- Tp (tp d liu) l mt tp hp cc d liu c cng mt kiu d liu c gp li vi
nhau thnh mt dy v cha trong thit b nh ngoi (a cng, a CD,...).
- c im ca tp:
+ C tn
+ Cha d liu, chng trnh, ...
+ Tp cha trong b nh ngoi => tn ti ngay c khi mt in
(Cc cu trc d liu khc nh mng, bn ghi, c t chc trong b nh RAM)
Ch : Tp cng c th t chc trong b nh trong ca my tnh nhng n ch l nhng
tp c tnh cht tm thi, trung gian v s khng tn ti khi dng chng trnh hoc khi
mt in.
+ S phn t ca tp khng xc nh c khi ta nh ngha (khc vi mng)
2. Cu trc v phn loi tp
* Cu trc tp:
- Cc phn t ca tp c sp xp thnh mt dy. Ti mi thi im, chng trnh ch
c th truy nhp c vo mt phn t ca tp thng qua gi tr ca mt bin m (bin
m c dng nh du v tr truy nhp ca tp).
- Sau khi c mt phn t ca tp, bin tr t ng ch n phn t tip theo trong tp
.
- Khi chy chng trnh, vng nh m c thit lp lu tr tm thi cc thng tin
ca d liu. Vng nh m cho php thng tin d liu c ghi vo tp hoc c ra t
tp mt cc nhanh chng nht bng cch ghi hoc c c mt khi d liu tng i
ln.
Cch thit lp vng nh m: Khai bo
FILE *fpt;
trong : FILE l mt cu trc d liu c bit dng thit lp vng nh m.
fpt l con tr (con tr cu trc tp hoc bin tp = file point) tr ti a ch
u ca b nh m ny.
Ch : Mi tp c kt thc bng mt du hiu c bit l EOF (End Of File. Hm
feof s nhn gi tr False nu bin tp ang tr ti v tr cui tp

EOF (F)

Bin tp (ca s nhn tp)


* Phn loi tp: Da vo bn cht ca d liu, tp c chia ra thnh 2 loi:
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
55

Bi ging: C s lp trnh
===================================================================

- Tp vn bn: l tp cha cc phn t l cc k t, cc du chm cu. Cc k t ny


c t chc thnh tng dng vi du kt thc dng l CR v LF (\r v \n). Tp vn
bn dng k t ^Z (Ctrl_Z) c m ASCII l 26 lm k hiu kt thc tp.
=> Tp vn bn c th c c trn mn hnh, son tho bng cc phn mm son tho
vn bn, c th s dng hm x l k t,
Ch : Mn hnh, bn phm, my in l cc tp vn bn c bit.
- Tp d liu nh phn: L tp cha cc phn t l cc s nh phn biu din thng tin.
Thng tin y c th l cc s thc float, cu trc struct, tp cha m lnh my tnh,...
3. Cc bc x l tp
* Bc 1: Khai bo bin tp
- Mu lnh:
FILE *<Bin_tp> ;
Trong : FILE l t kho (c vit hoa).
V d :
FILE *tep ;
* Bc 2: M tp ( ghi, c)
- Mu lnh:
Bin_tp=fopen(Tn_tp_trn a, Kiu_x_l_tp);

V d:
+ M tp ghi:
tep=fopen(VD.TXT, w);
hoc
tep=fopen(C:\\TC\\VD.TXT, w);
+ M tp c:
tep=fopen(VD.TXT, r);
hoc
tep=fopen(C:\\TC\\VD.TXT, r);
Bng k hiu kiu x l tp:
i vi tp vn bn:
KIU
NGHA
X L
r
read only: M tp vn bn tn ti c
w
writing only: M tp vn bn mi ghi
a
M tp vn bn c v ghi thm d liu tip ni vo cui tp. Nu tp
cha c th my tnh s t ng to tp mi.
r+
M tp vn bn c v c, ghi d liu
w+
M tp vn bn mi ghi, c. Nu my tnh tn ti tp c tn trng
vi tn tp trong lnh th tp c s b hu, thay vo l tp mi.
a+
M tp vn bn c (nu cha c tp th my tnh s t to ra mt tp
mi) c hoc ghi thm d liu tip ni vo cui tp.
i vi tp nh phn:
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
56

Bi ging: C s lp trnh
===================================================================

KIU
X L
rb
wb
ab
r+b
w+b
a+b

NGHA
read only, binary: M tp vn bn tn ti c
writing only, binary: M tp vn bn mi ghi
M tp vn bn c v ghi thm d liu tip ni vo cui tp. Nu tp
cha c th my tnh s t ng to tp mi.
M tp vn bn c v c, ghi d liu
M tp vn bn mi ghi, c. Nu my tnh tn ti tp c tn trng
vi tn tp trong lnh th tp c s b hu, thay vo l tp mi.
M tp vn bn c (nu cha c tp th my tnh s t to ra mt tp
mi) c hoc ghi thm d liu tip ni vo cui tp.

* Bc 3: Ghi, c tp (x l d liu)
- Trong bc 3, ngi lp trnh c th s dng cc hm c sn hoc cc hm t xy
dng vit chng trnh.
* Bc 4: ng tp
- Mu lnh:
fclose(tep);
Khung chng trnh x l tp:
#include <stdio.h>
main()
{
FILE *tep;
tep=fopen(VD.dat, w);
if (tep = = NULL)
printf(\n Khong mo duoc tep);
else
{
/*Xu li du lieu */
.......
fclose(tep);
}
}

II. Tp d liu nh phn


1. To tp nh phn
Nu hm m tp mi c ch x l l w th tp s rng, con tr tp ch vo cui tp
(EOF) => ca s tp khng c gi tr cc nh.
Ch : Trong trng hp tn tp trong hm trng vi tn ca mt tp c th tp c s
khng cn na.
V d 31: To tp cc s nguyn.

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
57

Bi ging: C s lp trnh
===================================================================

Cch 1:
#include<stdio.h>
main()
{ FILE *f1;
f1=fopen("SONGUYEN.DAT", "wb");
for (int i=1; i<=100; i++)
*/
fwrite(&i, sizeof(int), 1, f1);
fclose(f1);
}

/* Khai bao con tro cau truc tep*/


/*Mo tep voi che do ghi du lieu*/
/* Ghi 100 so nguyen co gia tri tu 1 den 100

Cch 2:
#include<stdio.h>
main()
{ char filename[21];
int i;
FILE *f1; /* Khai bao con tro cau truc tep*/
printf("Ten tep can tao: ");
scanf("%20s", filename);
f1=fopen(filename, "wb"); /*Mo tep voi che do ghi du lieu*/
/* Ghi 100 so nguyen co gia tri tu 1 den 100 */
for (i=1; i<=100; i++)
fwrite(&i, sizeof(int), 1, f1);
fclose(f1);
}
Ch : nu tp khng th m c, hm fopen s cho gi tr NULL.
2. c tp d liu nh phn
Khi c tp, ta dng lnh c phn t ca tp v kim tra xem phn t c phi l
EOF hay khng.
Cch 1: Dng lnh
if (ch=getc(fp)) !=EOF) ....
trong hm getc(fp) c 1 k t hay 1 byte ca tp c con tr l fp v if
(ch=getc(fp)) !=EOF) kim tra xem gi tr c phi l EOF hay khng.
Cch 2: Dng lnh while
while ((ch=getc(fp))....
Khi my tnh gp lnh ny, my tnh s c ht cc phn t ca tp cho n khi gp k
hiu ht tp.
V d 32: c tp cc s nguyn
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
58

Bi ging: C s lp trnh
===================================================================

#include <stdio.h>
#include <io.h>
#include <conio.h>
main()
{ int i;
FILE *f1;
f1=fopen("SONGUYEN.DAT","rb"); /* Mo tep nhi phan de doc*/
while (fread(&i, sizeof(int), 1, f1), !feof(f1))
printf("%4d",i);
fclose(f1);
getch();
}
* Mu lnh c gi tr v kim tra tp:
Mu 1:
do
BiuThc1;
if (BiuThc2) <CngVic>
while (BiuThc2);
Mu 2:
do
{ fread(&i, sizeof(int), 1, f1);
if (!feof(f1))
printf(\n%d,i);
}
while (!feof(f1));

/* c trc */

3. Truy nhp tp d liu nh phn


- Hm truy nhp trc tip l fseek
- Mu lnh :
fseek(fptr, No*kch_thc_1_phn_t, SEEK_SET) ;
Trong :
fptr l tn con tr tp (do ngi lp trnh t)
No l v tr s th t ca phn t trong tp. (Phn t u tin ca tp l 0)
Kch_thc_1_phn_t: thng c thc hin bng hm sizeof().
=> No*Kch_thc_1_phn_t cho bit to tnh theo byt ca phn t cn truy nhp
vo.
Tham s cui cng trong mu lnh l mt trong 3 trng hp:
SEEK_SET (hoc 0): di chuyn v tr truy nhp bt u t u tp
SEEK_CUR (hoc 1): di chuyn tnh t v tr hin ti ca ca s hin ti ca tp
SEEK_END (hoc 2): di chuyn tnh t to cui tp
V d: (14.8, 14.9 gio trnh Ngn ng lp trnh C _ trang 276, 277, 278)

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
59

Bi ging: C s lp trnh
===================================================================

CC THUT TON SP XP
- Selection Sort - Sp xp kiu chn
- Insertion Sort - Sp xp kiu chn
- Bubble Sort - Sp xp ni bt
1.Selection Sort - Sp xp kiu chn
Gii thut:
y l phng php sp xp n gin nht c tin hnh nh sau:
u tin chn phn t nh nht trong n phn t t danh sch X[1]X[n] v hon v n
vi phn t X[1].
Chn phn t c kha nh nht trong n-1phn t t danh sch X[2] X[n] v hon v
n vi X[2].
Tng qut bc th i, chn phn t c kho nh nht trong n-i+1 phn t t danh sch
X(i) X(n) v hon v n vi X(i).
Sau n-1 bc ny th mng c sp xp.
=>Phng php ny c gi l phng php chn bi v n lp li qu trnh chn
phn t nh nht trong s cc phn t cha c sp.
2. Insertion Sort - Sp xp kiu chn
Vn :
Sp th t cc phn t ca mt danh sch:
X1, X2,, Xn
Sao cho (theo mt trng kha no ) chng c th t tng dn:
X1 X2 Xn
Hoc c th t gim dn:
X1 X2 Xn
Gii thut :
Bc 1, xen phn t X[2] vo danh sch c th t X[1] sao cho X[1], X[2] l mt
danh sch c th t.
Bc 2, xen phn t X[3] vo danh sch c th t X[1], X[2] sao cho X[1], X[2],
X[3] l mt danh sch c th t.
Tng qut, bc i, xen phn t X[i+1] vo danh sch c th t
X[1],X[2],..X[i]
sao cho X[1], X[2],.. X[i+1] l mt danh sch c th t.
Phn t ang xt X[j] s c xen vo v tr thch hp trong danh sch cc phn t
c sp trc X[1],X[2],..X[j-1] bng cch so snh kho ca X[j] vi kho ca X[j1] ng ngay trc n. Nu kho ca X[j] nh hn kho ca X[j-1] th hon i X[j-1]
v X[j] cho nhau v tip tc so snh kho ca X[j-1] (lc ny X[j-1] cha ni dung ca
X[j]) vi kho ca X[j-2] ng ngay trc n...
3. Bubble Sort - Sp xp ni bt
Vn :
Sp th t cc phn t ca mt danh sch:
X1, X2,, Xn
Sao cho (theo mt trng kha no ) chng c th t tng dn:
===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
60

Bi ging: C s lp trnh
===================================================================

X1 X2 Xn
Hoc c th t gim dn:
X1 X2 Xn
Sp xp kiu Ni bt (bubble sort) l mt gii thut sp xp n gin. N lp i lp li
qu trnh duyt danh sch cn sp xp, so snh hai phn t v i v tr nu chng ng
sai v tr.
Gii thut nh sau:
1.So snh 2 phn t cnh nhau. Nu phn t trc ln hn phn t sau th i v tr
(swap) ca chng cho nhau.
2.Thc hin vic vi mi cp phn t., t cp u tin ti cp cui cng. Ti thi
im ny, phn t cui cng s l phn t c gi tr ln nht.
3.Lp li cc bc trn vi cc phn t tr phn t cui cng. Cho ti khi khng cn
cp no cn so snh.

===================================================================
Ging vin: Hong Th Vn Anh Khoa: Tin hc kinh t
61

You might also like