1
Phm Đình Sc
dinhsac@gmail.com
Trư ng Cao đ ng K thu t Công ngh Đ ng Nai
Khoa Công ngh thông tin
NHP MÔN LP TRÌNH
M NG M T CHI U
VC
VC &
&
BB
BB
22
Nội dung
NMLT - Mả ng m t chi u
Khái ni m
1
Khai báo
2
Truy xu t d li u ki u m ng
3
M t s bài toán trên m ng 1 chi u
4
VC
VC &
&
BB
BB
33
Đặt vấn đ
dụ
Chư ơ ng trình cầ n lư u trữ 3số nguyên?
=> Khai báo 3biế n int a1, a2, a3;
Chư ơ ng trình cầ n lư u trữ 100 số nguyên?
=> Khai báo 100 biế n kiể u số nguyên!
Ngư i dùng muố n nhậ p nsố nguyên?
=> Không thự c hiệ n đư c!
Giả i pháp
Kiể u dữ liệ u mớ i cho phép u trữ mộ t dãy
các số nguyên và dễ dàng truy xuấ t.
NMLT - Mả ng m t chi u
VC
VC &
&
BB
BB
44
Dữ liệu kiểu mảng
Khái niệ m
mộ t kiể u dữ liệ u cấ u trúc do ngư i l p
trình đị nh nghĩa.
Biể u diễ n mộ t dãy các biế n có cùng kiể u. Ví
dụ : dãy các số nguyên, dãy các ký tự
Kích thư c đư c xác đị nh ngay khi khai báo
không bao giờ thay đổ i.
NNLT C luôn chỉ đị nh mộ t khố i nhớ liên tụ c
cho mộ t biế n kiể u mả ng.
NMLT - Mả ng m t chi u
VC
VC &
&
BB
BB
55
Khai báo biến mảng (tường minh)
ng minh
<N1>, …, <Nn> : số ng phầ n tử củ a mỗ i chi u.
u ý
Phả i xác đị nh <số phầ n tử > cụ thể (hằ ng) khi khai báo.
Mả ng nhiề u chiề u: <tổ ng số ph n tử > = N1*N2**Nn
Bộ nhớ sử dụ ng = <tổ ng số phầ n tử >*sizeof(<kiể u cơ sở >)
Bộ nhớ sử dụ ng phả i ít hơ n 64KB (65535 Bytes)
Mộ t dãy liên tụ c có chỉ số từ 0đế n <tổ ng số phầ n t >-1
NMLT - Mả ng m t chi u
<kiể u cơ sở > <tên biế n mả ng>[<số phầ n tử >];
<kiể u cơ sở > <tên biế n mả ng>[<N1>][<N2>][<Nn>];
VC
VC &
&
BB
BB
66
0
1
2
Khai báo biến mng (tưng minh)
dụ
NMLT - M ng m t chi u
int Mang1Chieu[10];
0 1 2 3 4 7 85 6 9
Mang1Chieu
int Mang2Chieu[3][4];
0 1 2 3 4 7 85 6 9
Mang2Chieu
10 11
VC
VC &
&
BB
BB
77
Khai báo biến mảng (kô tường minh)
pháp
Không tư ng minh (thông qua khai báo ki u)
dụ
NMLT - Mả ng m t chi u
typedef <kiể u cơ sở > <tên kiể u mả ng>[<số phầ n t >];
typedef <kiể u cơ sở > <tên kiể u mả ng>[<N1>][<Nn>];
<tên kiể u mả ng> <tên biế n mả ng>;
typedef int Mang1Chieu[10];
typedef int Mang2Chieu[3][4];
Mang1Chieu m1, m2, m3;
Mang2Chieu m4, m5;
VC
VC &
&
BB
BB
88
Số phần tử của mảng
Phả i xác đị nh cụ thể số phầ n tử ngay lúc khai
báo, không đư c sử dụ ng biế n hoặ c hằ ng
thư ng
Nên sử dụ ng chỉ thị tiề n xử #define để đị nh
nghĩa số phầ n tử mả ng
NMLT - Mả ng m t chi u
int n1 = 10; int a[n1];
const int n2 = 20; int b[n2];
#define n1 10
#define n2 20
int a[n1]; // int a[10];
int b[n1][n2]; // int b[10][20];
VC
VC &
&
BB
BB
99
Khởi tạo giá trị cho mảng lúc khai báo
Gồ m các cách sau
Khở i tạ o giá trị cho mọ i phầ n tử củ a mả ng
Khở i tạ o giá trị cho mộ t số phầ n tử đầ u m ng
NMLT - Mả ng m t chi u
int a[4] = {2912,1706,1506,1904};
2912
2912 1706
1706 1506
1506 1904
1904
0 1 2 3
a
int a[4] = {2912,1706};
2912
2912 1706
1706 0
00
0
0 1 2 3
a
VC
VC &
&
BB
BB
1010
Khởi tạo giá trị cho mảng lúc khai báo
Gồ m các cách sau
Khở i tạ o giá trị 0cho mọ i phầ n tử củ a m ng
Tự độ ng xác đị nh số ng phầ n tử
NMLT - Mả ng m t chi u
int a[4] = {0};
0
00
00
00
0
0 1 2 3
a
int a[] = {2912,1706,1506,1904};
2912
2912 1706
1706 1506
1506 1904
1904
0 1 2 3
a