Bài giảng Lập trình C - Bài 5: Mảng một chiều - Võ Đức Hoàng

Lập trì nh C  
Bài 5. Mảng một chiều  
Võ Đức Hoàng  
Cập nhật: 8/2018  
1
Mục tiêu  
1. Kiểu dữ liệu mảng một chiều  
2. Các thao tác nhập/ xuất mảng  
3. Kỹ thuật tìm kiếm, liệt kê giá trị trong mảng  
2
KHÁI NIỆM  
• Mảng đưꢀc cấp phꢁt bộ nhớ liên tꢂc và bao gꢃm nhiều  
biến thành phꢄn  
• Cꢁc thành phꢄn cꢅa mảng là tập hꢀp cꢁc biến cꢆ cꢇng  
KDL va cꢇng tên  
̀
Giá trị  
0
1
2
3
4
5
6
7
8
9
Vị trí  
Vị trí được tính từ 0  
3
KHAI BÁ O  
< Kiꢀu dữ liꢁu > < Tên mꢂng > [ < Số phꢃn tử tꢄi đa cꢅa mꢂng> ] ;  
• int a[100]; //Khai bao mang so nguyen a gom 100 phan tu  
• float b[50]; //Khai bao mang so thuc b gom 50 phan tu  
• char str[30]; //Khai bao mang ky tu str gom 30 ky tu  
Nên định nghĩa hằng số MAX ở đầu chương trình –kích thước tối đa  
của mảng - như sau:  
#define MAX 100  
int main()  
{
int a[MAX], b[MAX];  
//Các lệnh  
return 0;  
}
4
KHAI BÁO VÀ GÁN GIÁ TRỊ BAN ĐẦU CHO  
MẢNG  
Gán từng phần tử  
int a[5] = {3, 6, 8, 1, 12};  
Giá trị  
3 6 8 1 12  
Vị trí  
0
1
2
3
4
Gán toàn bộ phần tử có cùng giá trị  
int a[8] = {3};  
Giá trị  
3 3 3 3 3 3 3 3  
Vị trí  
0
1
2
3
4
5
6
7
5
TRUY XUẤT GIÁ TRỊ  
TênMảng [vị trí cần truy xuất]  
int main()  
{
Vị trí 3  
int a[5] = {3, 6, 8, 11, 12};  
printf(“Gia tri mang tai vi tri 3 = “, a[3]);  
getch();  
return 0;  
}
Kết quả: Gia tri mang tai vi tri 3 = 11  
6
CÁC THAO TÁC TRÊN MẢNG  
•Nhập  
•Xuất (liệt kê)  
•Tìm kiếm  
•Đếm  
•Sắp xếp  
•Kiểm tra mảng thỏa điều kiện cho trước  
•Tách/ ghép mảng  
•Chèn / xóa  
7
NHẬP XUẤT MẢNG  
a[0] a[1] a[2] a[3] a[4] a[5] … a[n-1]  
Nhập a[0]  
Nhập a[1]  
Nhập a[2]  
…
➔ Nhập a[i], 0<=i<n  
Nhập a[n-1]  
8
NHẬP/ XUẤT MẢNG  
#define MAX 100  
void NhapKichThuoc(int &n)  
{
printf("Nhap vao kich thuoc mang: ");  
scanf("%d", &n);  
}
void NhapMang(int a[], int n)  
{
for (int i = 0; i < n; i++)  
{
printf("* Nhap vao phan tu tai vi tri %d: ", i);  
scanf("%d", &a[i]);  
}
}
9
void XuatMang(int a[], int n)  
{
for(int i=0; i<n;i++)  
{
printf("%d\t", a[i]);  
}
}
int main()  
{
int a[MAX], n;  
NhapKichThuoc(n);  
NhapMang(a, n);  
printf("Cac gia tri trong mang a:\n");  
XuatMang(a, n);  
getch();  
return 0;  
}
10  
PHÁT SINH CÁC GIÁ TRỊ CHO MẢNG  
• Sử dꢂng thư viện hàm <time.h> và <stdlib.h>  
• Dùng hàm srand() trong hàm main() trước khi gọi hàm  
phát sinh: để khởi tạo bộ giá trị ngẫu nhiên  
• Dùng hàm rand()%k để phát sinh số ngẫu nhiên: có giá trị  
từ 0 đến k-1  
11  
Ví dụ: Chương trì nh tạo mảng số nguyên có  
giá trị ngẫu nhiên từ 1 đến MAX  
#include <stdio.h>  
#include <conio.h>  
#include <time.h>  
#include <stdlib.h>  
#define MAX 100  
void NhapKichThuoc(int &n);  
void PhatSinh(int a[], int n);  
void XuatMang(int a[], int n);  
12  
void NhapKichThuoc(int &n)  
{
printf("Nhap vao kich thuoc mang: ");  
scanf("%d", &n);  
}
void PhatSinh(int a[], int n)  
{
for (int i = 0; i < n; i++)  
{
a[i] = rand() % MAX + 1;  
}
}
void XuatMang(int a[], int n)  
{
for(int i=0; i<n;i++)  
{
printf("%d\t", a[i]);  
}
}
13  
int main()  
{
int a[MAX], n;  
NhapKichThuoc(n);  
srand((unsigned int)time(NULL));  
PhatSinh(a, n);  
printf("Cac gia tri trong mang a:\n");  
XuatMang(a, n);  
getch();  
return 0;  
}
14  
Bài tập  
• Cho mảng một chiều số nguyên a, kích thước n. Hãy viết  
các hàm:  
1. Phát sinh giá trị các phꢄn tử ngẫu nhiên theo thứ tự  
tăng dꢄn cho a.  
2. Phát sinh giá trị các phꢄn tử ngẫu nhiên có giá âm và  
dương.  
15  
LIỆT KÊ CÁC PHẦN TỬ THỎA ĐK CHO TRƯỚC  
Mẫu 1:  
void LietKeXXX(int a[], int n)  
{
for (int i = 0; i<n; i++)  
if (a[i] thỏa điều kiện)  
Xuất a[i];  
}
16  
LIỆT KÊ CÁC PHẦN TỬ THỎA ĐK CHO TRƯỚC  
Mẫu 2:  
void LietKeXXX(int a[], int n, int x)  
{
for (int i = 0; i<n; i++)  
if (a[i] thỏa điều kiện so với x)  
Xuất a[i];  
}
17  
Ví dụ 1: Liệt kê các phần tử có giá trị chẵn trong mảng  
void LietKeChan(int a[], int n)  
{
for (int i = 0; i<n; i++)  
if (a[i] %2 ==0)  
printf(“%d\t”, a[i]);  
}
Ví dụ 2: Liệt kê các phần tử có giá trị lớn hơn x trong mảng  
void LietKeLonHonX(int a[], int n, int x)  
{
for (int i = 0; i<n; i++)  
if (a[i] > x)  
printf(“%d\t”, a[i]);  
}
18  
Ví dụ 3: Chương trình nhập vào mảng một chiều số nguyên a,  
kích thước n. In ra các phần tử có giá trị lớn hơn x có trong mảng  
#define MAX 100  
void NhapKichThuoc(int &n);  
void NhapMang(int a[], int n);  
void XuatMang(int a[], int n);  
void LietKeLonHonX(int a[], int n, int x);  
void NhapKichThuoc(int &n)  
{
prinft(“Nhap vao kich thuoc mang: “);  
scanf(“%d”, &n);  
}
void NhapMang (int a[], int n)  
{
for (int i = 0; i < n; i ++)  
{
printf(“Nhap phan tu tai vi tri %d: “, i);  
scanf(“%d”, &a[i]);  
}
19  
}
void XuatMang (int a[], int n)  
{
for (int i = 0; i < n; i ++)  
printf(“%d\t”, a[i]);  
}
void LietKeLonHonX(int a[], int n, int x)  
{
for (int i = 0; i<n; i++)  
if (a[i] > x)  
printf(“%d\t”, a[i]);  
}
20  
Tải về để xem bản đầy đủ
pptx 50 trang Thùy Anh 16460 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình C - Bài 5: Mảng một chiều - Võ Đức Hoàng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pptxbai_giang_lap_trinh_c_bai_5_mang_mot_chieu_vo_duc_hoang.pptx