Bài giảng Công nghệ Phần mềm - Bài 11: Các kiểu dữ liệu nâng cao

ppt 21 trang huongle 3681
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ Phần mềm - Bài 11: Các kiểu dữ liệu nâng cao", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cong_nghe_phan_mem_bai_11_cac_kieu_du_lieu_nang_ca.ppt

Nội dung text: Bài giảng Công nghệ Phần mềm - Bài 11: Các kiểu dữ liệu nâng cao

  1. Các kiểu dữ liệu nâng cao Bài 11
  2. Mục tiêu § Tìm hiểu kiểu dữ liệu cấu trúc và công dụng § Định nghĩa cấu trúc § Khai báo các biến kiểu cấu trúc § Cách truy cập vào các phần tử của cấu trúc § Khởi tạo biến cấu trúc § Sử dụng biến cấu trúc trong câu lệnh gán § Cách truyền tham số cấu trúc § Sử dụng mảng các cấu trúc § Tìm hiểu cách khởi tạo mảng các cấu trúc § Con trỏ cấu trúc § Cách truyền tham số kiểu con trỏ cấu trúc § Tìm hiểu từ khóa typedef Elementary Programming with C/Session 11/ Slide 2 of 23
  3. Cấu Trúc §Bao gồm các mẫu dữ liệu, không nhất thiết cùng kiểu, được nhóm lại với nhau. 1 I I L L U S I O N B A C H 1 Biến L L U Tên sách Tác giả Lần S xuất bản I O N Mảng Elementary Programming with C/Session 11/ Slide 3 of 23
  4. Định Nghĩa Cấu Trúc §Tạo ra kiểu dữ liệu mới cho phép người dùng sử dụng chúng để khai báo các biến kiểu cấu trúc . §Các biến trong cấu trúc được gọi là các phần tử của cấu trúc hay thành phần của cấu trúc §Ví dụ: struct cat { char bk_name [25]; char author [20]; int edn; float price; }; Elementary Programming with C/Session 11/ Slide 4 of 23
  5. Khai Báo Biến Cấu Trúc §Khi một cấu trúc đã được định nghĩa, chúng ta có thể khai báo một hoặc nhiều biến kiểu này. §Có hai cách khai báo: §Đi kèm với định nghĩa cấu trúc §Tách rời định nghĩa cấu trúc Elementary Programming with C/Session 11/ Slide 5 of 23
  6. Khai Báo Biến Cấu Trúc (tt) struct cat { struct cat { char bk_name[25]; char bk_name[25]; char author[20]; char author[20]; int edn; int edn; float price; float price; } books1, books2; }; struct cat books1, books2; Hoặc: struct cat books1; struct cat books2; Elementary Programming with C/Session 11/ Slide 6 of 23
  7. Truy Cập Phần Tử của Cấu Trúc §Thông qua việc sử dụng toán tử chấm “.” (toán tử thành viên – membership). § Cú pháp: structure_variable_name.element_name § Ví dụ: scanf(“%s”, books1.bk_name); Elementary Programming with C/Session 11/ Slide 7 of 23
  8. Khởi Tạo Cấu Trúc n Có thể được khởi tạo tại thời điểm khai báo struct employee { int no; char name [20]; }; n Các biến emp1 và emp2 có kiểu employee, có thể được khai báo và khởi tạo: struct employee emp1 = {346, “Abraham”}; struct employee emp2 = {347, “John”}; Elementary Programming with C/Session 11/ Slide 8 of 23
  9. Câu Lệnh Gán Sử Dụng Các Cấu Trúc - 1 §Có thể sử dụng câu lệnh gán đơn giản để gán giá trị của một biến cấu trúc cho một biến khác có cùng kiểu §Chẳng hạn, nếu books1 và books2 là các biến cấu trúc có cùng kiểu, thì câu lệnh sau là hợp lệ books2 = books1; Elementary Programming with C/Session 11/ Slide 9 of 23
  10. Câu Lệnh Gán Sử Dụng Các Cấu Trúc - 2 § Trong trường hợp không thể dùng câu lệnh gán trực tiếp, thì có thể sử dụng hàm tạo sẵn memcpy() § Cú pháp: memcpy (char * destn, char &source, int nbytes); § Ví dụ: memcpy (&books2, &books1, sizeof(struct cat)); Elementary Programming with C/Session 11/ Slide 10 of 23
  11. Cấu Trúc Lồng Trong Cấu Trúc § Một cấu trúc có thể lồng trong một cấu trúc khác. Tuy nhiên, một cấu trúc không thể lồng trong chính nó. struct issue { char borrower [20]; char dt_of_issue[8]; struct cat books; }issl; § Việc truy cập vào các phần tử của cấu trúc này tương tự như với cấu trúc bình thường khác, issl.borrower § Để truy cập vào phần tử của cấu trúc cat là một phần của cấu trúc issl , issl.books.author Elementary Programming with C/Session 11/ Slide 11 of 23
  12. Truyền tham số kiểu cấu trúc § Tham số của hàm có thể là một cấu trúc. § Hữu dụng khi muốn truyền một nhóm các thành phần dữ liệu có quan hệ logic với nhau thông qua một biến thay vì phải truyền từng thành phần một § Kiểu của tham số thực phải trùng với kiểu của tham số hình thức. Elementary Programming with C/Session 11/ Slide 12 of 23
  13. Mảng Cấu Trúc § Một áp dụng thường gặp là mảng cấu trúc § Một kiểu cấu trúc phải được định nghĩa trước, sau đó một biến mảng có kiểu đó mới được khai báo § Ví dụ: struct cat books[50]; § Để truy cập vào thành phần author của phần tử thứ tư của mảng books: books[4].author Elementary Programming with C/Session 11/ Slide 13 of 23
  14. Khởi Tạo Các Mảng Cấu Trúc §Mảng cấu trúc được khởi tạo bằng cách liệt kê danh sách các giá trị phần tử của nó trong một cặp dấu móc § Ví dụ: struct unit { char ch; int i; }; struct unit series [3] = {{‘a’, 100}{‘b’, 200}{‘c’, 300}}; Elementary Programming with C/Session 11/ Slide 14 of 23
  15. Ví dụ mảng cấu trúc #include /* Accepts data into the structure */ struct strucintcal for (i=0; i<50; i++) { { char name[20]; printf("\nEnter Customer name: "); int numb; gets(customers[i].name); float amt; printf("\nEnter Customer number: "); }; scanf("%d", &customers[i].numb); void intcal(struct strucintcal); printf("\nEnter Principal amount: "); void main() scanf("%f", & customers[i].amt); { struct strucintcal customers[50]; intcal(customers[i]); int i; } clrscr(); getch(); } Elementary Programming with C/Session 11/ Slide 15 of 23
  16. Ví dụ mảng cấu trúc (tt.) void intcal(struct strucintcal abc) { float si, rate = 5.5, yrs = 2.5; /* Computes the interest */ si = (abc.amt * rate * yrs) / 100; printf ("\nThe customer name is %s", abc.name); printf("\nThe customer number is %d", abc.numb); printf("\nThe amount is %f", abc.amt); printf("\nThe interest is %f", si); return; } Elementary Programming with C/Session 11/ Slide 16 of 23
  17. Con Trỏ Cấu Trúc §Được khai báo bằng cách đặt dấu * trước tên của biến cấu trúc. §Toán tử -> được dùng để truy cập vào các phần tử của một cấu trúc sử dụng một con trỏ §Ví dụ: struct cat *ptr_bk; ptr_bk = &books; printf(“%s”,ptr_bk->author); §Con trỏ cấu trúc được truyền vào hàm, cho phép hàm thay đổi trực tiếp các phần tử của cấu trúc. Elementary Programming with C/Session 11/ Slide 17 of 23
  18. Ví dụ con trỏ cấu trúc #include printf("\nEnter the number of customers: "); struct strucintcal scanf(“%d”,&n); { char name[20]; ptr_customers=(struct structintcal *) malloc(n *sizeof(struct strucintcal)); int numb; float amt; clrscr(); }; /* Accepts data into the structure */ void intcal(struct strucintcal); for (i=0; i name); struct strucintcal *ptr_customers; int i, n; Elementary Programming with C/Session 11/ Slide 18 of 23
  19. Ví dụ con trỏ cấu trúc (tt.) printf("\nEnter Customer number: "); scanf("%d", ptr_customers+i)->numb); printf("\nEnter Principal amount: "); scanf("%f", ptr_customers+i)-> amt); intcal(*(ptr_customers+i)); } getch(); } void intcal(struct strucintcal){} //xem slide 16 Elementary Programming with C/Session 11/ Slide 19 of 23
  20. Từ Khóa typedef § Một kiểu dữ liệu có thể được định nghĩa bằng cách sử dụng từ khóa typedef § Không tạo ra một kiểu dữ liệu mới, mà định nghĩa một tên mới cho một kiểu đã có. § Cú pháp: typedef type name; § typedef không thể sử dụng với storage classes Elementary Programming with C/Session 11/ Slide 20 of 23
  21. Ví dụ từ khóa typedef #include typedef float deci; typedef deci point; void main() { float num1; deci num2; point sum; printf("\nEnter the values of num1 and num2: "); scanf(“%f%f”,&num1, &num2); sum= num1 + num2; printf("\n The summary of num1 and num2 is: %f“, sum); getch(); } Elementary Programming with C/Session 11/ Slide 21 of 23