Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều
Trường Cao đẳng Công nghệ Thông Tin Khoa Công nghệ Thông Tin
CHƯƠNG 4 MẢNG MỘT CHIỀU
GV: ThS. TRẦN NGUYỄN ANH CHI
TpHCM, 02/2011
Đặt vấn đề
Ví dụ
Chương trình cần lưu trữ 3 số nguyên?
=> Khai báo 3 biế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 n số nguyên?
=> Không thực hiện được!
Giải pháp
Kiểu dữ liệu mới cho phép lưu trữ một dãy các số
nguyên.
2
GV: ThS. Trần Nguyễn Anh Chi 1
Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều
Dữ liệu kiểu mảng
Khái niệm
Là một kiểu dữ liệu có 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. NNLT C luôn chỉ định một khối nhớ liên tục cho một
biến kiểu mảng.
3
Dữ liệu kiểu mảng (tt)
Khai báo
];
Ví dụ 1
Chỉ số
int Mang1Chieu[10]; 1
0
2
3
4
5
6
7
8
9
1
3
-1
7
-2
9
0
4
5
-1
Giá trị
Mang1Chieu
Ví dụ 2
float a[7];
Chỉ số
0
1
2
3
4
5
6
1.2 -1 2.5 3.7 8.1 -9 5.2
a
Giá trị
4
GV: ThS. Trần Nguyễn Anh Chi 2
Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều
Số phần tử 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 chưa có giá trị
//sai int n1; int a[n1]; int n2 = 10; int a[n2];
Nên sử dụng chỉ thị tiền xử lý #define để định nghĩa số
phần tử mảng
5
#define n3 10 int a[n3]; // int a[10];
Khởi tạo giá trị cho mảng
Khởi tạo giá trị cho mọi phần tử của mảng
0
1
2
3
123
456
-789
100
a
Khởi tạo giá trị cho một số phần tử đầu mảng
int a[4] = {123, 456, -789, 100};
0
1
2
3
123
-456
0
0
int a[4] = {123, -456};
6
a
GV: ThS. Trần Nguyễn Anh Chi 3
Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều
Khởi tạo giá trị cho mảng(tt)
Khởi tạo giá trị 0 cho mọi phần tử của mảng
0
1
2
3
0
0
0
0
int a[4] = {0};
Tự động xác định số lượng phần tử của mảng
a
0
1
2
3
123
-456
789
100
int a[] = {123, -456, 789, 100};
7
a
Truy xuất đến một phần tử trong mảng
Truy xuất thông qua chỉ số
Ví dụ: cho mảng như sau:
0
1
2
3
11 22 33 44
Các truy xuất:
Hợp lệ: a[0], a[1], a[2], a[3] Không Hợp lệ: a[-2], a[-1], a[4], a[5]…
Chỉ số không hợp lệ thường cho kết quả không mong
muốn
8
int a[4];
GV: ThS. Trần Nguyễn Anh Chi 4
Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều
Truy xuất đến một phần tử (tt)
9
i= 0 i= 1 i= 2 i= 3 i= 4
Một số thao tác trên mảng
Nhập mảng Xuất mảng Đếm, tính tổng, tính trung bình Tìm kiếm Kiểm tra mảng thỏa điều kiện cho trước Sắp xếp Tách / ghép mảng Chèn / xóa
10
GV: ThS. Trần Nguyễn Anh Chi 5
Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều
Nhập mảng
Yêu cầu
Cho phép nhập mảng a, số lượng phần tử n
Ý tưởng
Cho trước một mảng có số lượng phần tử là MAX. Nhập số lượng phần tử thực sự n của mảng. Nhập từng phần tử cho mảng từ chỉ số 0 đến n – 1.
0
1
2
MAX - 1
3
4 n - 1
…
…
…
11
Nhập mảng (tt)
#define MAX 100
void NhapMang(int a[], int n) {
int i;
for (i=0; i 12 } } GV: ThS. Trần Nguyễn Anh Chi 6 Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều Cho trước mảng a, số lượng phần tử n. Hãy xuất nội dung mảng a ra màn hình. Xuất giá trị từng phần tử của mảng từ chỉ số 0 đến n-1. 13 void XuatMang(int a[], int n)
{ int i;
for (i = 0; i < n; i++) cout<
void main()
{ 14 int n, a[MAX];
cout<<“Nhap so luong phan tu thuc su: “;
cin>>n;
NhapMang(a,n);
XuatMang(a,n); } GV: ThS. Trần Nguyễn Anh Chi 7 Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều Cho trước mảng a, số lượng phần tử n. Hãy xuất các phần tử thỏa điều kiện nào đó. Duyệt từ đầu đến cuối mảng (từ chỉ số 0 đến n-1)
Tại vị trí thứ i, nếu a[i] thỏa điều kiện → xuất giá trị a[i] Nếu không có giá trị nào thỏa điều kiện → xuất thông báo 15 int i;
for (i = 0; i < n; i++)
if(a[i]%2==0) cout<
16 Main:
XuatChan(a,n); GV: ThS. Trần Nguyễn Anh Chi 8 Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều void XuatChan(int a[], int n) //co thong bao
{ int i, flag=0;
for (i = 0; i < n; i++)
if(a[i]%2==0)
{ flag = 1;
cout<
17 }
if(flag==0) cout<<“Khong co so chan trong mang”; } 18 GV: ThS. Trần Nguyễn Anh Chi 9 Kỹ thuật lập trình cơ bản Chương 4: Mảng một chiều //co thong bao void XuatSNT(int a[], int n)
{ int i, flag=0;
for (i = 0; i < n; i++) if(LaSNT(a[i])==true)
{cout<<“Phan tu thu: ”<>a[i];
Xuất mảng
Yêu cầu
Ý tưởng
n - 1
0
1
2
MAX - 1
…
…
…
Xuất mảng (tt)
Liệt kê các phần tử thỏa điều kiện
Yêu cầu
Ý tưởng
Liệt kê các phần tử thỏa điều kiện (tt)
Ví dụ 1: Liệt kê các số chẵn trong mảng
void XuatChan(int a[], int n)
{
Liệt kê các phần tử thỏa điều kiện (tt)
Liệt kê các phần tử thỏa điều kiện (tt)
Ví dụ 2: Liệt kê các số nguyên tố
bool LaSNT(int x)
{
if(x<2)
return false;
int i, demus=0;
for (i = 1; i <= x; i++)
if(x%i==0)
demus++;
if(demus==2)
return true;
return false;
void XuatSNT(int a[], int n)
{
}
int i;
for (i = 0; i < n; i++)
if(LaSNT(a[i])==true)
cout<
}
Liệt kê các phần tử thỏa điều kiện (tt)

