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

Bài giảng kỹ thuật lập trình nâng cao chương 2 kiểu dữ liệu có cấu trúc

54 418 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 54
Dung lượng 632,17 KB

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

Nội dung

1 Ch ương 2 KIỂU DỮ LIỆU CÓ CẤU TRÚC KỸ THUẬT LẬP TRÌNH NÂNG CAO TRƯỜNG CAO ĐẲNG CNTT TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Giảng Viên: ThS.. KIỂU DỮ LIỆU MẢNG 1 CHIỀU... KIỂU DỮ LIỆU MẢN

Trang 1

1

Ch ương 2

KIỂU DỮ LIỆU CÓ CẤU TRÚC

KỸ THUẬT LẬP TRÌNH NÂNG CAO

TRƯỜNG CAO ĐẲNG CNTT TP.HCM KHOA CÔNG NGHỆ THÔNG TIN

Giảng Viên: ThS Dương Thành Phết Email: phetcm@gmail.com

Website: http://www.thayphet.net Tel: 0918158670 – facebook.com/DuongThanhPhet

Trang 2

1 Kiểu dữ liệu mảng 1 chiều

2 Các thao tác trên mảng 1 chiều

3 Mảng 2 chiều

4 Kiểu chuổi ký tự

5 Kiểu cấu trúc – Mảng cấu trúc

6 Kiểu tập tin - File

NỘI DUNG

Trang 3

3

1.1 Khái niệm

phần được cấp phát bộ nhớ liên tục

kiểu dữ liệu và cùng tên Do đó để truy xuất các biến thành phần, ta dùng cơ chế chỉ mục (Vị trí)

Trang 4

1.2 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 mảng > [ < Số p.tử tối đa của mảng> ] ;

1 KIỂU DỮ LIỆU MẢNG 1 CHIỀU

Trang 6

1.4 Truy xuất

A[0] A[1] A[2] A[3] A[4]

1 KIỂU DỮ LIỆU MẢNG 1 CHIỀU

Trang 9

9

Xuất các phần tử thỏa điều kiện

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

}

9

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

}

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

Trang 10

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++)

Trang 11

11

Ví dụ 2: Liệt kê các phần tử có giá trị lớn hơn x trong mảng

11

void LietKeLonHonX(int a[], int n, int x){

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

Trang 12

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

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

Trang 13

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

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

Trang 14

Ví dụ 2: Đếm các phần tử có trong mảng mà giá trị nhỏ hơn x

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

Trang 15

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

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

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

if (a[i] == x) return i;

return -1;

}

Trang 16

2.4 Kiểm tra mảng có thỏa đk cho trước

Trường hợp 1: Kiểm tra tồn tại một phần tử trong mảng

thỏa điều kiện nào đó cho trước  tìm phần tử thỏa điều kiện để kết luận

Mẫu 1:

bool KiemTraTonTaiXXX(int a[], int n){

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

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

return false;

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

Trang 17

17

17

Mẫu 2:

bool KiemTraXXX(int a[], int n){

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

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

return true;

}

Trường hợp 2: Kiểm tra tất cả các phần tử thỏa điều

kiện nào đó cho trước  tìm phần tử không thỏa điều kiện

để kết luận mảng không thỏa điều kiện

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

Trang 18

bool KiemTraTonTaiLe(int a[], int n){

foreach (int giatri in a)

if (giatri % 2 != 0)

return true;

return false;

}

Ví dụ 1: Kiểm tra xem mảng có tồn tại số lẻ không?

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

Trang 19

19

Ví dụ 2: Kiểm tra xem mảng có toàn giá trị âm không?

(true: có/ false: không)

19

bool KiemTraToanAm(int a[], int n){

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

Trang 20

2.5 Tính toán các phần tử trong mảng

Mẫu tính tổng:

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

int s = 0;

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

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

Trang 22

Mẫu tính trung bình:

float TrungBinhXXX(int a[], int n){

int s = 0;

int d = 0;

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

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

Trang 24

Minh họa thuật toán

2

i=1 j=2 i=2 j=3 i=3 j=4 i=4 j=5 i=5 j=6 i=6 j=7 i=7

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

2.6 Sắp xếp

Trang 25

25

25

2 CÁC THAO TÁC TRÊN MẢNG 1 CHIỀU

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

void SapTang(int a[], int n){

for (int i = 0; i < n-1; i ++) for(int j = i+1; j < n; j ++)

if (a[i] > a[j])

} void HoanVi(int &a, int &b){

int tam = a;

a = b;

b = tam;

}

Trang 26

 Mảng hai chiều thực chất là mảng một chiều trong đó mỗi phần tử của mảng là một mảng một chiều, và được truy xuất bởi hai chỉ số dòng và cột

mảng nhiều chiều như sau: mảng có từ hai chiều trở lên gọi là mảng nhiều chiều

3 MẢNG 2 CHIỀU

3.1 Giới thiệu

Trang 28

3.3 Truy xuất

Để truy xuất các thành phần của mảng hai chiều ta phải dựa vào chỉ số dòng và chỉ số cột

Ví dụ: int A[3][4] = { {2,3,9,4} , {5,6,7,6} , {2,9,4,7} };

Với các khai báo như trên ta có:

A[0][0] = 2; A[0][1] = 3;

A[1][1] = 6; A[1][3] = 6;

3 MẢNG 2 CHIỀU

Trang 29

 Sắp xếp dòng/ cột

 Xóa dòng/ cột

29

3 MẢNG 2 CHIỀU

Trang 30

3.4 Ma trận vuông

 Số dòng = Số cột

 Đường chéo chính của ma trận vuông:

chỉ số dòng = chỉ số cột

Đường chéo phụ của ma trận vuông:

chỉ số cột + chỉ số dòng = kích thước - 1

3 MẢNG 2 CHIỀU

Chéo chính

Trang 31

4.1 Giới thiệu

Chuỗi ký tự là một dãy các phần tử, mỗi phần tử có kiểu ký tự

Khai báo cách 1:

char < Tên chuỗi > [ < Số ký tự tối đa của chuỗi > ] ;

Ví dụ: char chuoi[25];

(lưu được 24 ký tự, ký tự 25 là ký tự kết thúc chuỗi „\0‟ )

Khai báo cách 2:

char *< Tên chuỗi >;

 Chuỗi ký tự không giới hạn chiều dài

31

4 CHUỖI KÝ TỰ

Trang 33

4.3 Các hàm thư viện – <string.h>

 Tính độ dài của chuỗi s

int strlen(char s[]);

strcpy(char đích[], char nguồn[]);

 Chép n ký tự từ chuỗi nguồn sang chuỗi đích Nếu chiều dài nguồn < n thì hàm sẽ điền khoảng trắng cho đủ n ký tự vào đích

strncpy(char đích[], char nguồn[], int n);

33

4 CHUỖI KÝ TỰ

Trang 34

 Nối chuỗi s2 vài chuỗi s1

strcat(char s1[],char s2[]);

 Nối n ký tự đầu tiên của chuỗi s2 vào chuỗi s1

strncat(char s1[],char s2[],int n);

 So sánh 2 chuỗi s1 và s2 theo nguyên tắc thứ tự

Phân biệt chữ hoa và thường Trả về:

0: nếu s1 bằng s2

>0: nếu s1 lớn hơn s2

4 CHUỖI KÝ TỰ

Trang 35

 So sánh n ký tự đầu tiên của s1 và s2, giá trị trả về tương tự hàm strcmp()

int strncmp(char s1[],char s2[], int n);

thường, giá trị trả về tương tự hàm strcmp()

int stricmp(char s1[],char s2[]);

phân biệt hoa thường, giá trị trả về tương tự hàm strcmp()

int strnicmp(char s1[],char s2[], int n);

35

4 CHUỖI KÝ TỰ

Trang 36

 Tìm sự xuất hiện đầu tiên của ký tư c trong chuỗi s Trả về:

NULL: nếu không có

Địa chỉ c: nếu tìm thấy

char *strchr(char s[], char c);

 Tìm sự xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1 Trả về:

NULL: nếu không có

4 CHUỖI KÝ TỰ

Trang 37

Tách chuỗi: Nếu s2 có xuất hiện trong s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu là những ký tự cho đến khi gặp chuỗi s2 đầu tiên, chuỗi sau là những ký tự còn lại của s1 sau khi đã bỏ đi chuỗi s2 xuất hiện trong s1

Trang 38

5.1 Giới thiệu

Cấu trúc thực chất là một kiểu dữ liệu do người dùng định nghĩa bằng cách sử dụng các kiểu dữ liệu cơ sở thành một kiểu dữ liệu phức hợp nhiều thành phần

5 KIỂU CÓ CẤU TRÚC

Trang 39

char MSSV[6] ; char HoTenSV[30]; bool Phai ;

float Toan, Ly, Hoa; };

struct SinhVien SV;

Trang 40

char MSSV[6] ; char HoTenSV[30]; bool Phai ;

float Toan, Ly, Hoa; }Sinhvien;

SinhVien SV;

Trang 41

41

5 KIỂU CÓ CẤU TRÚC

5.3 Khởi tạo cấu trúc

lúc khai báo biến cấu trúc

giữa 2 dấu { và }, chúng được phân cách nhau bởi dấu phẩy (,)

struct SinhVien SV={„sv01‟,‟nguyen thi lan‟,0,6.0,7.5,8.0};

Trang 42

5 KIỂU CÓ CẤU TRÚC

5.4 Truy xuất từng trường trong biến cấu trúc

Cú pháp:

<Biến cấu trúc>.<Tên trường> ;

s = SV.HoTenSV; //nguyen thi lan

Trang 43

43

5 KIỂU CÓ CẤU TRÚC

5.5 Mảng cấu trúc

ma trận (Kiểu dữ liệu nhưng kiểu dữ liệu của mỗi phần tử là kiểu dữ liệu có cấu trúc)

cập trên mảng một chiều hay ma trận Nhưng do từng phần tử có kiểu cấu trúc nên phải chỉ định rõ cần lấy thành phần nào

Trang 44

5 KIỂU CÓ CẤU TRÚC

struct PhanSo {

int tu, mau;

};

struc PhanSo ps;

void main() {

int n; //Kích thước của mảng PhanSo a[100]; //Mảng các phân số

Trang 45

45

5 KIỂU CÓ CẤU TRÚC

 Do kiểu dữ liệu có cấu trúc thường chứa rất nhiều thành phần nên khi viết chương trình loại này ta cần lưu ý:

lý cho một kiểu cấu trúc đã được xây dựng bằng cách dùng vòng lặp

Trang 46

In DS như sau:

Trang 47

47

5 KIỂU CÓ CẤU TRÚC

Bài tập 2. Viết chương trình khai báo kiểu dữ liệu để biểu diễn một phân số Hãy viết hàm thực hiện những công việc sau:

 Tính tổng, hiệu, tích, thương hai phân số (kết quả phải tối giản)

Trang 49

6.2 Thao tác với tập tin

49

6 KIỂU TẬP TIN - FILE

Trang 51

Tạo tập tin văn bản

void main() {

fstream file(“d:\\file_text.txt”, ios::out); file<<“Write to file";

Trang 52

Đọc toàn bộ tập tin văn bản

void main() {

char str[2000];

fstream file(“d:\\file_text.txt”, ios::in); while(file >> str)

cout << str ;

file.close();

}

6 KIỂU TẬP TIN - FILE

Trang 53

Đọc từng dòng tập tin văn bản

void main() {

char str[2000];

fstream file(“d:\\file_text”, ios::in); while(!file.eof())

{ file.getline(str,2000);

cout <<str;

} file.close();

}

53

6 KIỂU TẬP TIN - FILE

Trang 54

The End

Ngày đăng: 22/04/2016, 09:05

TỪ KHÓA LIÊN QUAN