1. Trang chủ
  2. » Giáo án - Bài giảng

Tin học cơ sở 4 Mảng

36 348 1

Đ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

Định dạng
Số trang 36
Dung lượng 463,5 KB

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

Nội dung

Trong Bài Giảng 03• Các cấu trúc lặp 3 cấu trúc lặp trong C – for: không hoặc nhiều lần lặp • Kiểm tra điều kiện, sai kết thúc, đúng thực hiện câu lệnh và lặp lại • Nên được sử dụng k

Trang 1

Tin Học Cơ Sở 4

Mảng

Trang 2

Trong Bài Giảng 03

• Các cấu trúc lựa chọn:

if / if…else:

• Nếu điều kiện đúng thực hiện câu lệnh của if

• Nếu điều kiện sai thực hiện câu lệnh của else (không bắt buộc)

• Sử dụng if…else lồng nhau để kiểm tra nhiều trường hợp

• Lưu ý: Nhầm lẫn giữa gán (=) và so sánh bằng (==)

switch:

case: phải là một số hằng số

default: có thể có hoặc không

• Giá trị kiểm tra ứng với case nào thì thực hiện câu lệnh tương ứng

• Nếu không thực hiện default

Trang 3

Trong Bài Giảng 03

• Các cấu trúc lặp (3 cấu trúc lặp trong C)

for: không hoặc nhiều lần lặp

• Kiểm tra điều kiện, sai kết thúc, đúng thực hiện câu lệnh và lặp lại

• Nên được sử dụng khi xác định được số lần lặp

while: không hoặc nhiều lần lặp

• Kiểm tra điều kiện, sai kết thúc, đúng thực hiện câu lệnh và lặp lại

• Nên được sử dụng khi không xác định được số lần lặp

do…while: ít nhất một lần lặp

• Thực hiện câu lệnh, kiểm tra điều kiện, sai kết thúc, đúng lặp lại

• Nên được sử dụng khi không xác định được số lần lặp

– Cấu trúc lặp có thể lồng nhau

– Lỗi thường gặp với cấu trúc lặp:

Trang 5

Giới thiệu

• Định nghĩa mảng:

– Tập hợp các dữ liệu có cùng kiểu

• Độ dài của mảng:

– Phải xác định khi khai báo

– Không bao giờ thay đổi

• Sử dụng mảng cho dữ liệu giống nhau

– Tên, Điểm số, Nhiệt độ, Giá tiền (vnd), …

– Tránh không phải khai báo nhiều biến kiểu dữ

Trang 6

Khai báo Mảng

– Khai báo mảng với 5 số nguyên tên “diem_so”

– Tương đương với khai báo 5 biến

int diem_so0,diem_so1,diem_so2,diem_so3,diem_so4;

• Cách gọi tên:

– Phần tử của mảng: diem_so[1], diem_so[i], …

– Giá trị trong ngoặc vuông […]

Trang 7

Khởi tạo Mảng

• Sử dụng hằng cho độ dài mảng:

const int SO_SINH_VIEN = 5;

int diem_so[SO_SINH_VIEN];

• Khởi tạo mảng ban đầu:

– Khởi tạo ngay khi khai báo:

int diem_so[5] = {5, 8, 4, 7, 6};

int diem_so[] = {5, 8, 4, 7, 6};

•Đều khởi tạo mảng diem_so với 5 phần tử

•Mảng diem_so có độ dài là 5

Trang 8

Truy cập Mảng

• Truy cập phần tử sử dụng chỉ số

printf(“%i”, diem_so[3]);

• Chú ý cách sử dụng ngoặc vuông []:

– Khi khai báo: độ dài của mảng

– Ngoài ra: chỉ số phần tử của mảng

• Độ dài & chỉ số:

int diem_so[SO_SINH_VIEN];

(n=2)

Trang 9

Sử dụng hằng để khai báo độ dài

Trang 13

Tìm kiếm trên Mảng

SO_SINH_VIEN phần tử In ra vị trí của X

– Có thể duyệt từ đầu mảng hoặc cuối mảng– Dùng vòng lặp so sánh giá trị của X với giá trị của từng phần tử trong mảng

– Khi tìm được giá trị bằng giá trị của X, kết thúc ngay vòng lặp và in ra vị trí hiện tại

của phần tử trong mảng

Trang 15

Tìm kiếm trên Mảng

Sử dụng vòng lặp for không dùng break

for (i=0; i<SO_SINH_VIEN &&

diem_so[i]!=X; i++) {

}

if (0<=i && i<SO_SINH_VIEN)

printf(“vi tri trong mang %i”, i);

Trang 17

if (0<=i && i<SO_SINH_VIEN)

printf(“vi tri trong mang %i”, i);

Trang 18

Tìm kiếm trên Mảng

SO_SINH_VIEN phần tử In ra vị trí của X

– Nếu X không có trong mảng:

• Câu lệnh printf (trong 4 slides trước) đều không được thực hiện.

• Vòng lặp vẫn kết thúc khi mảng đã được duyệt toàn bộ (i<SO_SINH_VIEN).

• Tuy nhiên vẫn cần phải in ra thông báo:

Trang 19

Mảng không đầy

• Nói chung khó biết chính xác độ dài mảng

• Phải khai báo độ dài mảng đủ lớn

– Phải biết mảng thực sự có bao nhiêu phần tử– Thường sử dụng biến phụ

• Cập nhật số phần tử thực của mảng

• int soPhanTu;

– Tăng soPhanTu khi chèn thêm phần tử vào mảng – Giảm soPhanTu khi xóa một phần tử khỏi mảng

Trang 21

Chèn vào Mảng

• Chèn giá trị X vào mảng diem_so

– Điều kiện trước khi chèn:

• số phần tử hiện tại nhỏ hơn độ dài mảng

– Phải kiểm tra điều kiện trên trước khi chèn

– Mảng không sắp xếp:

• Chèn vào cuối

• Tăng biến lưu số phần tử của mảng lên 1

if (soSV < SO_SV_MAX) {

diem_so[soSV] = X;

soSV++;

Trang 22

soSV = 7

Trang 23

• Tăng biến lưu số phần tử của mảng lên

• Lưu ý các trường hợp đặc biệt khi X được chèn vào đầu mảng, cuối mảng, hoặc vào mảng trống (chưa có phần

tử nào)

Trang 24

soSV = 7

Trang 25

Xóa khỏi Mảng

– Tìm vị trí của giá trị X trong mảng diem_so

– Nếu tìm thấy X thì dồn các phần tử phía sau lên 1 vị trí để lấp đầy (đảm bảo tính liên tục của mảng)

– Giảm biến lưu số phần tử của mảng xuống 1– Chú ý:

• Với mảng chưa sắp xếp chỉ cần đưa phần tử cuối cùng lên lấp vào vị trí của X

Trang 26

Xóa khỏi Mảng

• Xóa phần tử X tại vi_tri khỏi mảng diem_so

– Mảng không sắp xếp: Xóa rồi lấp phần tử cuối lên

while (vi_tri<soSV) {

if (diem_so[vi_tri]==X) {

diem_so[vi_tri] = diem_so[soSV-1]; soSV ; break;

}

vi_tri++;

Trang 27

soSV = 7

Trang 28

Xóa khỏi Mảng

• Xóa phần tử X tại vi_tri khỏi mảng diem_so

– Mảng đã sắp xếp: rời các phần tử phía sau phần tử X lên 1 vị trí

if (0<=vi_tri && vi_tri<soSV) {

int i = vi_tri;

while (i<soSV-1) {

diem_so[i] = diem_so[i+1];

} soSV ;

Trang 29

soSV = 7

Trang 30

Sắp xếp Mảng

thứ tự tăng dần

• Giải pháp: Loại bỏ hết những vị trí sai trong mảng

– Thuật toán lựa chọn – Selection sort

• Đôi khi được gọi: Thuật toán đổi chỗ - Interchange sort – Thuật toán nổi bọt – Bubble sort

– Thuật toán chèn – Insertion sort

– …

Trang 31

Sắp xếp Lựa Chọn

• Thuật toán lựa chọn (3 bước) :

– Tìm phần tử nhỏ nhất của mảng chưa sắp xếp– Đổi chỗ phần tử nhỏ nhất này với phần tử tại ví trị đầu tiên trong mảng chưa sắp xếp

– Lặp lại 2 bước trên khi không còn phần tử nào trong mảng chưa sắp xếp

Trang 32

Sắp xếp Lựa Chọn

– Tìm phần tử nhỏ nhất của mảng chưa sắp xếp

– Đổi chỗ phần tử nhỏ nhất này với phần tử tại ví trị

Trang 33

Sắp xếp Lựa chọn

int i, j, min, vi_tri, temp;

for (i=0; i<soSV-1; i++) {

min=diem_so[i]; vi_tri =i;

for (j=i; j<soSV; j++) {

Trang 34

Mảng đa chiều

• C không hỗ trợ mảng đa chiều Tuy nhiên có thể tiếp cận theo hướng: Mảng 2 chiều là mảng một chiều mà mỗi thành phần của nó là một mảng

một chiều

diem_so[soSV][soMonHoc];

–có thể coi là một mảng 1 chiều, giống như mảng

diem_so[soSV] ở các ví dụ trên Tuy nhiên thay vì chỉ lưu được điểm số của một môn học cho mỗi sinh viên, ta

có thể lưu được điểm số của tất cả các môn học cho một

Trang 36

Tổng kết

• Mảng là một tập hợp dữ liệu cùng kiểu

• Phần tử mảng sử dụng như các biến

thông thường có dữ liệu kiểu của mảng

• Dùng vòng lặp for để thao tác mảng

• Tìm kiếm một phần tử trên mảng

• Phần tử mảng có thể được sắp xếp

• Mảng đa chiều

Ngày đăng: 03/04/2016, 21:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN