Ch ng 06
Ki u c u trúc
Ki u m ng – chu i
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
1
N i dung
T khoá typedef
C u trúc
M ng
Chu i ký t
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
2
nh ngh a ki u m i v i typedef
typedef cho phép ng i l p trình t o ra tên m i
cho m t ki u d li u đã có.
Tên m i mang l i tính d hi u h n, trong ng c nh
c a bài toán đang xét.
Tên m i giúp rút ng n mã ngu n
Cú pháp
typedef <tên_ki u_c > <tên_m i>;
Ví d
typedef unsigned char BYTE;
BYTE a, b;
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
3
ki u c u trúc (struct)
Là ki u d li u ph c h p, bao g m nhi u thành
ph n có th thu c các ki u d li u khác nhau
Các thành ph n g i là: tr ng d li u (field)
M t bi n thu c ki u c u trúc đ c xem là m t t p
h p nhi u bi n đ n l thành m t bi n duy nh t
Ví d
M i sinh viên c n l u các thông tin:
Tr n Quang
© 2016
Mã s sinh viên
H tên
Ngày sinh
Email, …
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 4p trình
4
ki u c u trúc (struct)
T t c các d li u trong m t bi n c u trúc có quan
h v i nhau t o thành m t kh i
Luôn luôn c p phát cùng nhau và s p x p liên t c
trong b nh
Luôn luôn đ c hu kh i b nh cùng nhau
Các m nh d li u thành ph n có th truy xu t đ c
l p, thơng quan tên field.
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
5
Khai báo ki u d li u c u trúc
Khai báo ki u c u trúc
struct <tên c u trúc> {
<khai báo các tr ng >
}
Ví d
struct sinhvien {
char mssv[8];
char hoten[30];
float dtb;
}
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
6
K thu t l p trình
6
Khai báo bi n c u trúc
Cú pháp:
struct <tên c u trúc> <danh sách bi n>;
Ví d :
struct sinhvien sv1, sv2, sv3;
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 7p trình
7
Khai báo bi n c u trúc
Cú pháp:
struct <tên c u trúc> <danh sách bi n>;
Ví d :
struct sinhvien sv1, sv2, sv3;
K t h p khai báo bi n v i khai báo c u trúc
struct [tên c u trúc] {
<khai báo các tr ng>;
} <danh sách bi n>;
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 8p trình
8
Gán giá tr kh i t o khi khai báo
struct sinhvien {
char mssv[8];
char hoten[30];
float dtb;
S1: Không đ c kh i đ ng
};
s2: đ c kh i đ ng không đ y đ
void main() {
s3: đ c kh i đ ng đ y đ
struct sinhvien s1;
struct sinhvien s2 = { "001", "Nguyen Van An" };
struct sinhvien s3 = { "001", "Nguyen Van An", 9.5f };
printf("MSSV: %s\n", s3.mssv);
printf("Ho Ten: %s\n", s3.hoten);
Truy xu t d li u thành ph n qua tên g i
}
Quy t c: <tên bi n>.<tên thành ph n>
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
9
K t h p typedef v i struct
B t khoá “struct” khi khai báo bi n có ki u struct
Ví d :
typedef struct sPoint3D {
float x, y, z;
} Point3D;
cách đ nh ngh a m t tên ki u m i
là Point3D thông qua typedef
void main(){
struct sPoint3D p1 = {1.0f, 2.0f, 3.0f};
Point3D p2 = {1.0f, 2.0f, 3.0f};
printf("p1 = (%4.1f,%4.1f,%4.1f)\n", p1.x, p1.y, p1.z);
printf("p2 = (%4.1f,%4.1f,%4.1f)\n", p2.x, p2.y, p2.z);
}
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
10
M ng
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
11
Khái ni m m ng
M ng là m t ki u d li u g m m t s h u h n
thành ph n. Các thành ph n có cùng m t ki u, g i
là ki u c s hay là ki u thành ph n.
M i ph n t c a m ng đ c tham kh o thông qua
tên m ng và ch s c a ph n t trong m ng
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 12
p trình
12
Khái ni m m ng
M ng là m t dãy các ph n t cùng m t ki u n m
li n k nhau trong b nh .
Các ph n t có cùng m t ki u, g i là ki u c s
M i ph n t c a m ng đ c tham kh o thông qua
tên m ng và ch s c a ph n t trong m ng
Ví d
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
13
Khái ni m m ng
Sáu s này n m liên t c nhau trên b nh
Do đó,
N u ơ nh đ u tiên, ch a giá tr 10, b t đ u BYTE
có đ a ch 100 trong vùng nh c a ch ng trình
Thì
Tr n Quang
© 2016
a ch
a ch
a ch
a ch
a ch
c
c
c
c
c
CuuDuongThanCong.com
a ô nh
a ô nh
a ô nh
a ô nh
a ô nh
Ch
ch
ch
ch
ch
ch
a 20: 104
a 30: 108
a 40: 112
a 50: 116
a 60: 120
ng 06: Array - struct
/>
K thu t l p trình
14
Khái ni m m ng
Các ph n t trong m ng đ c đánh ch s đ truy xu t
Ph n t
đ u tiên LN LN CĨ ch s là 0
Các ph n t
k ti p theo là 1, 2, …
Do đó,
Ơ nh
ch a 10 có ch s là 0
Ơ nh
ch a 20 có ch s là 1
Ơ nh
ch a 30 có ch s là 2
Ơ nh
ch a 40 có ch s là 3
…
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
15
Khái ni m m ng
tính đ a ch c a ô nh có ch s k, ch
dùng công th c sau:
Tr n Quang
© 2016
ng trình
a ch = đ a ch ph n t đ u tiên + k *(kích th c
ph n t )
Do đó, ch ng trình d dàng ch ra ngay m t ph n
t có ch s b t k => TRUY C P NG U NHIÊN
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
16
M ng 1 chi u
Cú pháp khai báo
<ki u d li u> <tên m ng> [
Ví d
c>];
// khai báo m ng A g m 10 ph n t thu c ki u int
int A[10];
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 17
p trình
17
M ng 1 chi u
Ví d :
int a[6];
int b[6] = {10, 20, 30};
int c[6] = {10, 20, 30, 40, 50, 60};
a: m ng g m 6 s nguyên giá tr các ph n t ch a
xác đ nh
b: m ng g m 6 s nguyên. Giá tr 3 ph n t đ u là:
10, 20, và 30. Còn 3 ph n t sau ch a xác đ nh
c: m ng g m 6 s nguyên. Giá tr các ph n t l n
l t là: 10, 20, 30, 40, 50, và 60
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
18
M ng 1 chi u
Hình nh trong
b nh c a các
m ng a, b, và c
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
19
M ng 1 chi u
S ph n t c a m ng ph i bi t tr c th i đi m
biên d ch và là h ng s không âm.
S d ng macro
#define MAX_SIZE
Khai báo h ng s nguyên
const int max_size
#define MAX_SIZE 6
void main(){
const int max_size = 10;
int a[MAX_SIZE];
int b[max_size];
}
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
20
Truy c p đ n thành ph n c a m ng
Truy c p ph n t c a m ng thông qua tên m ng
và ch s c a ph n t trong m ng
<tên m ng> [<ch s >]
Chú ý: ch s m ng luôn b t đ u t 0
Ví d
Tr n Quang
© 2016
int a[10]; //m ng nguyên có 10 ph n t
a[0] : ph n t đ u tiên (th nh t) c a m ng
a[9]: ph n t cu i cùng (th 10) c a m ng:
a[i-1]: là ph n t th i c a m ng a
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 21
p trình
21
Nh p d li u cho m ng
Dùng hàm scanf()
Ví d ta khai báo m ng:
int a[10];
Nh p d li u cho ph n t a[1]:
scanf(“%d”, &a[1]);
Nh p d li u cho toàn b các ph n t c a m ng
s d ng vòng l p for
for (int i=0; i < 10; i++) {
printf ("Nhap a[%d]: ", i);
scanf("%d", &a[i]);
}
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
22
K thu t l p trình
22
L uý
Tr ng h p s ph n t c a m ng ch a bi t tr
(ch xác đ nh khi ch ng trình đang th c hi n)
c
Khai báo m ng v i kích th c t i đa
S d ng bi n l u s ph n t th c s c a m ng.
Ví d :
int a[100];
int n, i;
printf ("Cho biet so phan tu cua mang: ");
scanf (“%d”,&n);
for(i = 0; i < n; i++){
printf (“a[%d] = ", i);
scanf ("%d",&a[i]);
}
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
23
K thu t l p trình
23
Duy t m ng 1 chi u
Dùng 1 bi n ch s (ki u s nguyên)
u tiên gán ch s này b ng 0
Ch đ n ph n t đ u tiên c a m ng
Dùng vòng l p đ duy t qua m i ph n t c a m ng
int arr[MAX_SIZE];
int n = 5;
Nh p m ng
In ra các ph n t trong m ng
for(int i=0; i
printf("%-3d", arr[i]);
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l p trình
24
M ng nhi u chi u
M i ph n t c a m ng c ng có th là m t m ng
=> m ng nhi u chi u
Ví d
int a[6][5] ;
m ng a g m 6 ph n t
m i ph n t l i là m t m ng
g m 5 s nguyên int
T
ng đ ng ma tr n 6 dòng x 5 c t
a[0]: ph n t
đ u tiên c a m ng a, là m ng 1 chi u
a[i][j]: ph n t
th j+1 c a m ng a[i]
Tr n Quang
© 2016
CuuDuongThanCong.com
Ch
ng 06: Array - struct
/>
K thu t l 25
p trình
25