1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình C: Chương 5 - Trần Minh Thái

50 9 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mảng một chiều
Tác giả Trần Minh Thái
Trường học Huflit
Chuyên ngành Lập trình
Thể loại Bài giảng
Năm xuất bản 2016
Thành phố Hồ Chí Minh
Định dạng
Số trang 50
Dung lượng 154,63 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Lập trình C - Chương 5: Mảng một chiều cung cấp cho người học các kiến thức: Kiểu dữ liệu mảng một chiều, các thao tác nhập/ xuất mảng, kỹ thuật tìm kiếm, liệt kê giá trị trong mảng. Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 3

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 và cùng tên

Giá trị

Vị trí

Vị trí được tính từ 0

Trang 4

KHAI BÁO

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

< Kiêu dư li u > < Tên mang > [ < Sô phân tư tôi đa cua mang> ] ; ê

Nhằm thuận tiện cho việc viết chương trình, ta nên định nghĩa hằng số MAX ở đầu chương trình – là kích thước tối đa của mảng - như sau:

Trang 5

KHAI BÁO VÀ GÁN GIÁ TRỊ BAN ĐẦU CHO MẢNG

Trang 6

TRUY XUẤT GIÁ TRỊ

TênMảng [vị trí cần truy xuất]

Trang 8

 Nhập a[i], 0<=i<n

Trang 9

printf ( "* Nhap vao phan tu tai vi tri %d : " , i);

scanf ( "%d" , & a [i]);

Trang 10

void XuatMang ( int a [], int n )

Trang 11

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

Trang 12

Ví dụ: Chương trình tạo mảng số nguyên có giá trị ngẫu nhiên từ 1

void NhapKichThuoc ( int & n );

void PhatSinh ( int a [], int n );

void XuatMang ( int a [], int n );

Trang 13

void NhapKichThuoc ( int & n )

Trang 15

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

Trang 16

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];

}

Trang 17

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];

}

Trang 18

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)

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 )

Trang 19

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)

printf(“Nhap phan tu tai vi tri %d: “, i);

scanf(“%d”, &a[i]);

Trang 20

void XuatMang (int a[], int n)

Trang 22

Bài tập tại lớp

Cho mảng số nguyên a, gồm n phần tử, viết chương trình gồm các hàm thực hiện các yêu cầu

sau:

1 Nhập vào kích thước mảng (0<n<=100), nếu nhập không thỏa miền giá trị thì cho phép

người dùng nhập lại

2 Nhập các giá trị vào mảng một chiều a

3 Xuất các phần tử là bội số của 5 trong mảng a

4 Xuất các phần tử là số nguyên tố trong mảng a

5 Hàm main() để gọi thực hiện các yêu cầu từ 1 đến 4

Trang 23

for (int i = 0; i<n; i++)

if (a[i] thỏa điều kiện)

d++;

return d;

Trang 24

Mẫu 2:

int DemXXX(int a[], int n, int x)

{

int d = 0;

for (int i = 0; i<n; i++)

if (a[i] thỏa điều kiện so với x)

d++;

Trang 25

Ví dụ 1: Đếm các phần tử có giá trị là số nguyên tố

int DemSNT(int a[], int n) {

int d = 0;

for (int i = 0; i<n; i++) {

if (LaSNT(a[i]) ==1) {

d++;

} } return d;

Trang 26

int DemNhoHonX(int a[], int n, int x)

Trang 27

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 Đếm số lượng các phần tử là số nguyên tố có trong mảng

#define MAX 100

void NhapKichThuoc(int &n);

void NhapMang(int a[], int n);

void XuatMang(int a[], int n);

int LaSNT(int k);

int DemSNT(int a[], int n);

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]);

Trang 28

int DemSNT(int a[], int n) {

int d = 0;

for (int i = 0; i<n; i++)

if (LaSNT(a[i]) ==1) d++;

Trang 30

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 Đếm số lượng các phần tử có giá trị lẻ

2 Đếm những phần tử có giá trị là bội số của 3

Trang 31

Đã tìm thấy tại

vị trí 5

Đã hết mảng

Trang 32

(nếu x không xuất hiện trong mảng trả về -1)

int TimVTX(int a[], int n, int x)

Trang 33

Bài tập

• Cho mảng một chiều số nguyên a, kích thước n Viết các hàm sau:

1. Tìm vị trí xuất hiện cuối cùng của phần tử có giá trị x nếu có

2. Tìm vị trí phần tử có giá trị âm xuất hiện đầu tiên trong mảng

Trang 34

15 15

1 1

Giả sử cần tìm vị trí phần tử nhỏ nhất trong dãy số sau ?

Trang 35

15 15

1 1

Bước 1: Giả sử vị trí phần tử nhỏ nhất là 1 (vtmin), phần tử này có giá trị 10

vtmin

Trang 36

15 15

1 1

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

vtmin

5 nhỏ hơn 10 nên cập nhật vị trí min

10

10

Trang 37

9

2 2

15 15

1 1

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

Trang 38

9

2 2

15 15

1 1

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

Trang 39

9

2 2

15 15

1 1

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

Trang 40

9

2 2

15 15

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

Trang 41

9

2 2

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

15 15

1 1

Trang 42

9 9

Bước 2: So sánh giá trị tại vtmin với tất cả giá trị tại vị trí còn lại (từ 2 đến 8), nếu có phần tử nào nhỏ hơn phần tử tại vtmin thì cập nhật lại vtmin

15 15

2 lớn hơn 1 nên không cập nhật vị trí min

2

2 1

1

Trang 43

CODE MINH HỌA

int TimVTMin(int a[], int n)

Trang 44

Bài tập

Cho mảng một chiều số nguyên a, kích thước n Hãy viết hàm tìm phần tử có giá trị lớn nhất

Trang 45

TÍNH TỔNG, GIÁ TRỊ TRUNG BÌNH CÓ ĐIỀU KIỆN

Trang 47

Ví dụ 1: Tính tổng các phần tử có giá trị lẻ trong mảng

int TongLe(int a[], int n)

Trang 48

Ví dụ 2: Tính giá trị trung bình các phần tử có giá trị âm trong mảng

float TrungBinhAm(int a[], int n)

Trang 49

Mẫu phương thức sắp thứ tự tăng:

void SapTang(int a[], int n)

Trang 50

Q&A

Ngày đăng: 09/05/2021, 18:47