Ch ng 03
T ch c d li u
trong ch ng trình
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
1
N i dung
D li u c đ nh
H ng
Bi n
Ki u d li u
T khoá
T m v c bi n
Phép toán và bi u th c
Ki u enum, struct
Chuy n đ i ki u d li u
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
2
D li u
D li u đ c l u tr trong RAM c a máy tính
trong q trình ch ng trình th c thi
D li u trong các ch ng trình C th ng xu t hi n
d i 3 hình th c:
Literals hay Fixed Value: giá tr c đ nh
Constant: h ng
Variable: bi n
Tr n Quang
© 2016
ć tên (name) và giá tr thay th (value)
ć tên (name), ki u (type) và n i dung ch a bên
trong (value)
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
3
Gí tr c đ nh
Giá tr s :
S nguyên h bát phân (octal): b t đ u b ng s 0
Ví d :
0x3D
-0x3AF8
Ví d :
169
ng
-2053
S th c d u ch m đ ng: (floating point)
Tr n Quang
© 2016
-0203
S nguyên h th p phân (decimal): nh bình th
0165
S nguyên h th p l c (hexadecimal): b t đ u b ng 0x
Ví d :
Ví d :
3.14159
Ch
ng 03: T ch c d
13.5f
li u trong ch
-83.1E-9
ng trình
K thu t l p trình
4
Gí tr c đ nh
Giá tr c đ nh ki u s nguyên có th ć ph n h u
t (suffix) là s k t h p c a U và L, cho ki u
Unsigned và ki u Long. Có th là ch hoa ho c
ch th ng theo b t c th t nào.
Ví d :
078
032UU
30
30u
30l
30ul
Tr n Quang
© 2016
/* Không h p l : 8 không ć trong h bát phân*/
/* Khong hop le: không th l p l i h u t */
/* int */
/* unsigned int */
/* long */
/* unsigned long */
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
5
Gí tr c đ nh
Giá tr ki u ḱ t - chu i
Ḱ t : đ t trong 2 d u nháy đ n ('). Ć th ḱ t
bình th ng (plain character) hay escape sequence
('\n', '\t', …)
'A'
'7'
'\101' '\t'
Chu i: đ t trong 2 d u nháy kép (“)
Tr n Quang
© 2016
Ví d :
Ví d :
"Dai Hoc Bach Khoa"
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
6
Escape sequence
Escape
sequenc
e
Escape
sequence
Meaning
Meaning
\\
\ character
\n
Newline
\'
' character
\r
Carriage return
\"
" character
\t
Horizontal tab
\?
? character
\v
Vertical tab
\a
Alert or bell
\ooo
Octal number of one to three digits
\b
Backspace
\f
Form feed
\xhh . . .
Hexadecimal number of one or
more digits
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
7
H ng
H ng là m t giá tr đ c đ t tên (th ng d̀ng ch
in hoa)
Cú pháp đ nh ngh a h ng:
const <type> <name> = <value> ;
hay
#define <ConstName> <value>
Ví d :
Tr n Quang
© 2016
const int MAX = 15;
#define MAX 15
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
8
Ví d
Ki u ḱ t
const char c = ‘a’;
const char c = ‘A’;
Ki u chu i
const char c[] = “LAP TRINH C/C++”;
const char c[] = “SAI GON”;
Ki u s
const int a = 100;
const float f = 10.5f;
const double d = 10.5;
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
9
Bi n
Bi n là m t v̀ng trong b nh c a máy tính và ć
các đ c đi m sau:
Tr n Quang
© 2016
Ć tên (name): do ng i d̀ng t đ t ra đ d̀ng
thay cho đ a ch trong b nh
Ć ki u (type): liên quan đ n lo i và đ l n c a giá
tr mà bi n ć th ch a.
Ć d li u: là giá tr ch a trong bi n.
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
10
Bi n
Là n i l u tr d li u c a ch ng trình, nói khác
nó là 1 v̀ng nh đ c đ t tên
Do ć tên, nên khi c n đ c/ghi v i v̀ng nh này,
ng i l p trình ch c n d̀ng tên thay cho m t đ a
ch c a ń.
Bi n c n đ c khai báo tr c khi d̀ng (đ c/ghi)
Ch ng trình t đ ng c p phát v̀ng nh khi g p
m t khai báo bi n
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
11
Khai b́o bi n
Cú pháp:
<type> <VariableName> [=<ConstExpr>];
trong đ́:
<type> : ki u ć s n hay ng
i d̀ng t đ nh ngh a
<VariableName> : tên bi n do ng
i d̀ng t đ t
<ConstExpr> : giá tr ban đ u, ć th
ć ho c khơng
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
12
Khai b́o bi n
Ví d :
T o m t bi n
int a;
char c;
T o nhi u bi n c̀ng ki u
int a, b;
char c1, c2;
T o bi n và kh i đ ng giá tr
int a=10, b;
char c1=‘A’, c2=‘a’;
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
13
Khai b́o bi n
Khai báo bi n đ̃ đ c đ nh ngh a trong module
khác:
extern <type> <variable> ;
Ví d : extern int so;
Khai báo bi n t nh:
static <type> <variable> [=<ConstExpr>];
Tr n Quang
© 2016
Ví d : static long dem;
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
14
Quy t c đ t tên bi n
Quy t c đ t tên bi n theo quy t c đ t tên danh hi u
(tên h ng, tên bi n, …)
Quy t c đ t tên danh hi u:
Tr n Quang
© 2016
Ḱ t đ u là m t ch cái hay d u g ch d i (_)
Các ḱ t ti p theo là ch cái, s , d u g ch d i
Không đ c là ḱ hi u nào khác: ! @ # $ % ^ & * …
Khơng đ c tr̀ng v i t khố
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
15
T khó
Là t ć ́ ngh a đ c bi t đ̃ đ c quy đ nh tr c
b i ngơn ng l p trình.
Ng i l p trình khơng đ c d̀ng t khoá đ đ t
tên cho các tên mình t o ra nh tên bi n, tên ki u,
tên hàm, tên h ng, v.v.
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
16
T khó
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
17
Ki u d li u
D li u mà ch ng trình l u tr ć th thu c nhi u
d ng khác nhau, g i là ki u d li u (data type)
Ḱ t (character)
Ki u s
Tr n Quang
© 2016
Ki
Ki
Ki
Ki
…
S nguyên (integer)
S th c (float)
u chu i
u m ng (array)
u c u trúc (struct)
u ki t kê (enum)
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
18
Ki u d li u
M i ki u d li u ć cách t ch c l u tr , c ng nh
các phép toán đi kèm khác nhau
Cách t ch c l u tr
Ví d : v i s nguyên, ý ngh a bit ć tr ng s l n nh t
(MSB) ph thu c vào ń là s ć d u hay khơng d u
Các phép tốn
Tr n Quang
© 2016
S khơng d u: bit này tham gia vào tính đ l n giá tr
S ć d u: bit này ch ra là s d ng hay âm
Ví d : ć th th c hi n các phép toán nhân hay chia
v i ki u s , nh ng không th th c hi n nhân v i ki u
chu i ḱ t
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
19
Ćc lo i ki u d li u
Ki u d li u c b n (fundamental data type)
Ki u d li u do ng
defined data type)
Ngôn ng C/C++ cung c p s n m t s các tên ki u
Tên các ki u này c ng là t khoá
i l p trình đ nh ngh a (user-
Tên ki u do ng i l p trình t đ t ra
M t s ki u nh : struct, enum
Ki u d li u d n xu t (derived data type)
Tr n Quang
© 2016
M ng (array)
Con tr (pointer)
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
20
Ki u s nguyên
Type
Storage size
Value range
char
1 byte
-128 to 127 or 0 to 255
unsigned char
1 byte
0 to 255
signed char
1 byte
-128 to 127
int
2 or 4 bytes
-32,768 to 32,767 or
-2,147,483,648 to 2,147,483,647
unsigned int
2 or 4 bytes
0 to 65,535
or 0 to 4,294,967,295
short
2 bytes
-32,768 to 32,767
unsigned short
2 bytes
0 to 65,535
long
4 bytes
-2,147,483,648 to 2,147,483,647
unsigned long
4 bytes
0 to 4,294,967,295
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
21
Hàm sizeof()
Hàm sizeof() tr v s byte c a ki u d li u
Ví d : printf("%d", sizeof(int));
S bytes c a ki u d li u tu thu c vào phiên b n,
tuy nhiên s tho m̃n:
1 == sizeof(char) <= sizeof(short) <= sizeof(int)
<= sizeof(long) <= sizeof(long long)
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
22
Ki u s th c
Type
float
double
long
double
Storage
Value range
Precision
size
4 byte 1.2E-38 to 3.4E+38
6 decimal places
8 byte 2.3E-308 to 1.7E+308 15 decimal places
3.4E-4932 to
10 byte
19 decimal places
1.1E+4932
Thêm #include <float.h> vào đ u ch ng trình đ s d ng
ćc chi ti t đã cài đ t s n c a ki u s th c
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
23
Ki u enum
enum d̀ng đ đ nh ngh a các giá tr thu c ki u s
nguyên nh ng đ c gán cho tên g i nh
Cú pháp:
enum enumName { enumeration list }
ví d :
enum colors {RED, GREEN, BLUE};
enum months {JAN, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC};
Tr n Quang
© 2016
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
24
Ki u enum
enum có th đ c xem nh m t ki u d li u.
các ví d trên ta ć các ki u là: colors, months
M t bi n ki u colors ch ć th RED, GREEN, BLUE
nh đ̃ khai báo
M t bi n ki u months trên ch ć th ć các giá tr
JAN, FEB, MAR, v.v.
Ngh a là ng
Tr n Quang
© 2016
i d̀ng ć th t o ra ki u m i
Ch
ng 03: T ch c d
li u trong ch
ng trình
K thu t l p trình
25