Tải bản đầy đủ (.pptx) (25 trang)

Bài giảng lập trình c nâng cao chương 1 mảng một chiều (nâng cao)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (341.24 KB, 25 trang )

TRẦN MINH THÁI
Email:
Website: www.minhthai.edu.vn
Cập nhật: 05 tháng 01 năm 2015
Chương 1. Mảng một chiều (nc)
#2
Nội dung
Khái quát các kỹ thuật cơ bản xử lý mảng
Xoá phần tử trong mảng
Chèn phần tử vào mảng
Bài tập
#3
Khái niệm mảng một chiều
Tập các phần tử có cùng kiểu dữ liệu (KDL) được lưu trữ liên tiếp nhau
Các phần tử có chỉ số
Chỉ số của phần tử đầu tiên của mảng là 0
Khai báo
<KDL> tên mảng [số phần tử tối đa];
VD: mảng số nguyên a có tối đa 100 phần tử
int a[100];
#4
Khái niệm mảng một chiều
Khởi tạo mảng
<KDL> tên mảng [] = {giá trị 1, giá trị 2, …};
hoặc
<KDL> tên mảng [số lượng] = {giá trị};
VD1: Khởi tạo mảng gồm 5 giá trị riêng biệt
int a[] = {10, 12, 20, 15, 34};
VD2: Khởi tạo mảng gồm 10 phần đều có giá trị 30
int a[10] = {30};
#5


Khái niệm mảng một chiều
Truy xuất mảng thông qua chỉ số
tên mảng[chỉ số]
VD
int a[] = {10, 12, 20, 15, 34};
int x = a[2]; // Giá trị x = 20
a[0] = 32; // Cập nhật phần tử tại vị trí 0 bằng 32
#6
Các thao tác trên mảng
Nhập/ xuất
Xuất có điều kiện
Tìm kiếm
Tìm min/ max
Đếm số lượng thoả điều kiện
Tính tổng/ giá trị trung bình theo điều kiện cho trước
Sắp xếp
Chèn và xoá phần tử
#7
Các thao tác trên mảng
Sử dụng vòng lặp để thực hiện các thao tác trên mảng
Cấu trúc lặp phổ biến:
for(int i=0; i<=n-1; i++)
{
Xử lý phần tử a[i]
}
#8
Các thao tác trên mảng
VD: Xuất các phần tử có giá trị lẻ trong mảng số nguyên
for(int i=0; i<=n-1; i++)
{

if(a[i]%2!=0)
{
printf(“%d\t”, a[i]);
}
}
#9
Chèn phần tử vào mảng
Cho mảng sau:
Hãy trình bày từng bước chèn 111 vào vị trí 3 của mảng
12 5 7 9 21 38
0 1 2 3 4 5
12 5 7
0 1 2 3 4 5
38219
111
9
#10
Chèn phần tử vào mảng
Chèn 111 vào vị trí 3 của mảng
12 5 7 9 21 38
0 1 2 3 4 5 6
1. Di chuyển a[5] sang a[6]: a[6] = a[5]
12 5 7 9 21 38
0 1 2 3 4 5 6
12 5 7 9 21 38
0 1 2 3 4 5 6
2. Di chuyển a[4] sang a[5]: a[5] = a[4]
12 5 7 9 21 38
0 1 2 3 4 5 6
3. Di chuyển a[3] sang a[4]: a[4] = a[3]

12 5 7 111 9 21 38
0 1 2 3 4 5 6
4. Gán a[3] = 111
#11
Chèn phần tử vào mảng
Gọi k là vị trí cần chèn, n là kích thước mảng, x là giá trị cần chèn
a[6] = a[5]
a[5] = a[4]
a[4] = a[3]
a[3] = 111
a[i+1]=a[i]
i=n-1
i=k
a[k]=x
#12
Chèn phần tử vào mảng
BT: Hãy viết hàm chèn phần tử có giá trị x vào vị trí k cho trước trong mảng a
kích thước n theo mẫu sau:
void ChenX(int a[], int &n, int x, int k);
12
#13
Chèn phần tử vào mảng
void ChenX(int a[], int &n, int x, int k)
{
for(int i=n-1; i>=k; i )
{
a[i+1]=a[i];
}
a[k]=x;
n++;

}
#14
Bài tập áp dụng
Hãy viết hàm chèn phần tử có giá trị x vào sau phần tử có giá trị nhỏ nhất có
trong mảng a, kích thước n (giả sử mảng không có giá trị trùng nhau)
Gợi ý:
1. Viết hàm tìm vị trí phần tử có giá trị nhỏ nhất (min)
2. Viết hàm chèn x vào sau min (sử dụng hàm ChenX)
14
#15
Bài tập áp dụng
int TimVTMin(int a[], int n)
{
int vtmin=0;
for(int i=1; i<=n-1; i++)
{
if(a[i]<a[vtmin])
vtmin=i;
}
return vtmin;
}
#16
Bài tập áp dụng
void ChenXSauMin(int a[], int &n, int x)
{
int vtmin=TimVTMin(a, n);
ChenX(a, n, x, vtmin+1);
}
#17
Xóa phần tử khỏi mảng

Cho mảng sau:
Hãy trình bày từng bước xóa phần tử tại vị trí 3 trong mảng
12 5 7 9 21 38
0 1 2 3 4 5
12 5 7 9
0 1 2 3 4 5
21 38
17
#18
Xoá phần tử khỏi mảng
Xoá phần tử tại vị trí 3
12 5 7 21 38
0 1 2 3 4 5
1. Dời a[4] sang a[3]: a[3] = a[4]
12 5 7 9 21 38
0 1 2 3 4 5
2. Dời a[5] sang a[4]: a[4] = a[5]
12 5 7 21 38
0 1 2 3 4 5
#19
Xoá phần tử khỏi mảng
Gọi k là vị trí cần xoá, n là kích thước mảng
a[3] = a[4]
a[4] = a[5]
a[i]=a[i+1]
i=k
i=n-2
#20
Xóa phần tử khỏi mảng
BT: Hãy viết hàm xóa phần tử tại vị trí k cho trước trong mảng a kích thước n

theo mẫu sau:
void XoaTaiVTk(int a[], int &n, int k);
20
#21
Xoá phần tử khỏi mảng
void XoaTaiVTk(int a[], int &n, int k)
{
for(int i=k, i<=n-2; k++)
{
a[i]=a[i+1];
}
n ;
}
#22
Bài tập áp dụng
Hãy viết hàm xóa phần tử x (nếu có) trong mảng a, kích thước n (giả sử mảng
không có giá trị trùng nhau)
Gợi ý:
1. Viết hàm tìm vị trí phần tử có giá trị x
2. Viết hàm xoá phần tử x (sử dụng hàm XoaTaiVTk)
22
#23
Bài tập áp dụng
int TimX(int a[], int n, int x)
{
for(int i=0; i<=n-1; i++)
{
if(a[i]==x)
return i;
}

return -1;
}
#24
Bài tập áp dụng
void XoaX(int a[], int &n, int x)
{
int vtx=TimX(a, n, x);
if(vtx!=-1)
XoaTaiVTk(a, n, vtx);
}
#25
Q&A

×