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

Bài giảng ngôn ngữ lập trình c chương 5 GV dương khai phong

27 204 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

Định dạng
Số trang 27
Dung lượng 195,91 KB

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

Nội dung

KHÁI NIỆM VỀ MẢNGa/ Khái niệm mảng : là một tập hợp nhiều biến có cùng kiểu dữ liệu và cùng tên, khi đó mỗi phần tử của mảng được truy xuất thông qua chỉ số... CÁC VẤN ĐỀ LIÊN QUAN ĐẾN M

Trang 1

TIN HỌC ĐẠI CƯƠNG

Lý thuyết: 6 buổi Thực hành: 8 buổi

GVHD: Dương Khai PhongEmail: khaiphong@gmail.com

Ngôn ngữ lập trình: C

Trang 2

NỘI DUNG CÁC BUỔI HỌC

Trang 3

CHƯƠNG 5: MẢNG, CHUỔI VÀ CON TRỎ

Trang 5

1 KHÁI NIỆM VỀ MẢNG

a/ Khái niệm mảng : là một tập hợp nhiều biến có cùng kiểu dữ liệu

và cùng tên, khi đó mỗi phần tử của mảng được truy xuất thông qua chỉ số.

Trang 6

1 KHÁI NIỆM VỀ MẢNG

c/ Chỉ số của mảng : phải là 1 giá trị kiểu int không vượt quá kích

thước của mảng và bắt đầu từ 0.

a[0] = 5; // gán giá trị 5 cho phần tử thứ 0 của mảng.

a[3] = 8; // gán giá trị 8 cho phần tử thứ 3 của mảng.

so = a[3]; // lấy giá trị của phần tử thứ 3 gán cho biến so.

Trang 7

2 CÁC BÀI TOÁN LIÊN QUAN ĐẾN MẢNG

Trang 8

// Nhap gia tri cho cac ptu

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

}

(mảng 1 chiều)

Trang 9

// Nhap gia tri cho cac ptu

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

(mảng 2 chiều – ma trận)

Lưu ý: nếu là mảng 2 chiều số thực thì ta bắt buộc phải nhập thông qua một biến phụ khác rồi mới gán cho a[i][j] (xem trang 114)

Trang 10

2 CÁC VẤN ĐỀ LIÊN QUAN ĐẾN MẢNG

b/ Tìm kiếm giá trị trong mảng:

Có 2 thuật toán dùng để tìm kiếm:

 Tìm kiếm tuyến tính

Tìm kiếm nhị phân (học ở môn CTDL1)

* Tìm kiếm tuyến tính:

Ý tưởng: bắt đầu từ phần tử đầu tiên (phần tử thứ 0) và duyệt

qua tất cả các phần tử, nếu tìm thấy phần tử bằng khóa x thì báo tìm thấy và dừng, ngược lại báo không tìm thấy.

Thuật toán:

B1: i=0; // bắt đầu từ phần tử đầu tiên

B2: so sánh a[i] với x, có 2 khả năng

 a[i] = x : tìm thấy và dừng

a[i] <> x : sang B3

B3: i=i=+1 // xét phần tử kế tiếp trong mảng

 Nếu i>n: hết mảng, không tìm thấy và dừng

Ngược lại : lặp lại B2

Trang 11

i

x=6

Dừng

Trang 12

2 CÁC VẤN ĐỀ LIÊN QUAN ĐẾN MẢNG

b/ Thuật toán tìm kiếm tuyến tính:

void main()

{ int a[5], so;

// Da nhap xong mang a

printf (“Nhap gia tri can tim: ”);

Trang 13

2 CÁC VẤN ĐỀ LIÊN QUAN ĐẾN MẢNG

c/ Sắp xếp mảng tăng dần / giảm dần:

Có rất nhiều thuật toán dùng để sắp xếp:

 Đổi chỗ trực tiếp (Interchange Sort)

 Nổi bọt (Bubble Sort)

 Chọn trực tiếp (Selection Sort)

 Chèn trực tiếp (Insert Sort)

=> xem từ trang 162 – 167

(hoặc giáo trình môn Cấu trúc dữ liệu 1)

Trang 14

2 CÁC VẤN ĐỀ LIÊN QUAN ĐẾN MẢNG

c/ Sắp xếp mảng tăng dần:

Đổi chỗ trực tiếp - Interchange Sort

Ý tưởng:

B1: bắt đầu từ phần tử đầu tiên của mảng, tìm

phần tử có giá trị nhỏ hơn để đổi chỗ (hoán vị) vớinhau, thực hiện tiếp tục cho các phần tử còn lạicho đến khi phần tử đầu tiên là phần tử nhỏ nhất

B2: lặp lại bước 1 nhưng bắt đầu bằng phần tử kế

tiếp…

=> Nhận xét: từ ý tưởng trên cho thấy ta cần 2 vòng

lặp for lồng nhau để thực hiện việc sắp xếp

Trang 17

2 CÁC VẤN ĐỀ LIÊN QUAN ĐẾN MẢNG

void hoanvi(int &a,int &b);

void main()

{ int a[5], so;

// Da nhap xong mang a

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

for (int j=i+1;j<5;j++)

Trang 18

B2: thực hiện cập nhật lại giá trị mới.

Ví dụ: thay thế phần tử có giá trị 3 trong mảng

(2,3,7,6,5) bằng giá trị 5

Chỉ số mảng

x=3

i

5

Trang 19

i

Bước 1: xác định chỉ số k của phần tử có giá trị = 7.

Bước 2: di chuyển các phần tử bên phải của chỉ số k về

một chỉ số.

Bước 3: cập nhật lại kích thước của mảng n=n-1.

n=5

Trang 20

char s1=“HELLO”, khi đó trong bộ nhớ sẽ lưu như sau:

char s2=“”, chuỗi rỗng khi đó trong bộ nhớ sẽ lưu như sau:

\0

Trang 21

3 CHUỖI KÝ TỰ

b/ Các vấn đề liên quan đến chuỗi:

Nhập / xuất chuỗi (xem trang 44,125)

• Các phép toán không tồn tại đối với chuỗi:

 So sánh: == , != , …

 Gán nội dung chuỗi: s1=s2;

=> Để giải quyết các vấn đề này, ta cần sử dụng

các hàm chuẩn trong thư viện “string.h” (xem

trang 123)

Trang 22

strcpy(s1, s2); // sao chép nội dung từ s2 sang s1

chieudai=strlen(s1); // lấy chiều dài trong chuỗi , kq: 8 ký tự

strcat(s1, “ cac ban”); // nối thêm cho s1 chuỗi “ cac ban”

if (strcmp(s1,s2)==0) // so sánh s1,s2: ( 0 : s1=s2, -1 : s1<s2, 1 :s1>s2)

printf (“s1 bang s2”);

s1[4]=‘C’; // thay thế ký tự c trong chuỗi thành ‘C’

}

Trang 23

4 CON TRỎ VÀ BỘ NHỚ

a/ Khái niệm con trỏ

b/ Các phép toán trên con trỏ

c/ Con trỏ và cấp phát vùng nhớ

Trang 24

4 CON TRỎ VÀ BỘ NHỚ

a/ Khái niệm con trỏ:

• Con trỏ là một kiểu biến đặc biệt dùng để lưu địachỉ vùng nhớ

Trang 25

4 CON TRỎ VÀ BỘ NHỚ

b/ Các phép toán trên con trỏ:

Các phép toán 1 ngôi (xem trang 128)

 Toán tử & : lấy địa chỉ của đối tượng.

 Toán tử * : truy nhập đến nội dung đối tượng.

Các phép toán khác trên con trỏ (xem trang 130)

 Phép gán = : ta có thể thực hiện phép gán cho 2 con trỏ có cùng kiểu (nếu khác kiểu thì phải ép kiểu).

 Phép truy nhập bộ nhớ

 Phép so sánh

Trang 26

4 CON TRỎ VÀ BỘ NHỚ

c/ Con trỏ và cấp phát vùng nhớ : (xem trang 155)

* Xét ví dụ: viết CT quản lí điểm của 1000 sinh viên

có kích thước 1000 phần tửfloat => lãng phí bộ nhớ

 Khi CT cần gia tăng sốlượng học viên lên 5000 sinhviên thì người lập trình phảichỉnh sửa lại code

Trang 27

4 CON TRỎ VÀ BỘ NHỚ

c/ Con trỏ và cấp phát vùng nhớ : (xem trang 155)

=> Để giải quyết bài toán này ta dùng cấp phát vùng nhớđộng khi thực hiện chương trình

Lệnh free giải phóng vùng

nhớ Lệnh malloc cấp phát vùng nhớ để lưu giữ n số thực

Ngày đăng: 03/12/2015, 15:39

TỪ KHÓA LIÊN QUAN