Bài giảng Lập trình C - Chương 3: Kiểu dữ liệu có cấu trúc - Trần Minh Thái

pptx 27 trang cucquyet12 3250
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình C - Chương 3: Kiểu dữ liệu có cấu trúc - Trần Minh Thái", để 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:

  • pptxbai_giang_lap_trinh_c_chuong_3_kieu_du_lieu_co_cau_truc_tran.pptx

Nội dung text: Bài giảng Lập trình C - Chương 3: Kiểu dữ liệu có cấu trúc - Trần Minh Thái

  1. Lập trình C Chương 3. Kiểu dữ liệu có cấu trúc (3 tiết) Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 28/02/2017 1
  2. Nội dung • Khái niệm • Khai báo • Cách truy xuất thành phần bên trong cấu trúc • Xử lý cấu trúc đơn • Xử lý mảng có cấu trúc • Bài tập 2
  3. KHÁI NIỆM VÀ KHAI BÁO 3
  4. Khái niệm Là kiểu dữ liệu (KDL) do lập trình viên tự định nghĩa bằng cách gom nhóm các KDL cơ bản trong C thành một KDL phức hợp gồm nhiều thành phần • Khai báo struct StructName { khai báo các thuộc tính; }; typedef struct StructName NewDataType; 4
  5. Khái niệm • Ví dụ khai báo kiểu dữ liệu lưu thông tin của ngày: struct StructDate { char thu[10]; int ngay; int thang; int nam; }; typedef struct StructDate Date; 5
  6. TRUY CẬP CÁC THÀNH PHẦN TRONG CẤU TRÚC 6
  7. Truy cập các thuộc tính cấu trúc • Biến kiểu cấu trúc NewDataType variableName; variableName.atributeName; • Ví dụ Date x; x.ngay = 5; 7
  8. Truy cập các thuộc tính cấu trúc • Biến con trỏ kiểu cấu trúc NewDataType *pointerName; pointerName -> attributeName; Ví dụ: Date *x ; x = (Date*) malloc(sizeof(Date)); x -> ngay = 5 ; 8
  9. Khai báo đệ quy struct StructName { khai báo các thuộc tính; struct StructName *attributeName;; }; 9
  10. Khai báo đệ quy • Ví dụ: struct StructNode { int key; struct StructNode *pNext; }; 10
  11. Ví dụ Viết chương trình nhập vào toạ độ hai điểm trong mặt phẳng, tính tổng và khoảng cách của hai toạ độ này struct StructDiem { double x; double y; }; typedef struct StructDiem Diem; void Nhap(Diem &d); void Xuat(Diem d); Diem Tong(Diem d1, Diem d2); double TinhKhoangCach(Diem, Diem); 11
  12. Ví dụ void Nhap (Diem &d) { printf("Hoanh do : "); scanf("%lf", &d.x); printf("Tung do : "); scanf("%lf", &d.y); } 12
  13. Ví dụ void Xuat (Diem d) { printf("Toa do diem: (%lf, %lf)", d.x, d.y); } Diem Tong (Diem d1, Diem d2) { Diem temp; temp.x = d1.x + d2.x ; temp.y = d1.y + d2.y ; return temp; } 13
  14. Ví dụ double TinhKhoangCach(Diem A, Diem B) { return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)); } 14
  15. int main() { Diem A , B, AB; double kc; printf("Nhap vao toa do diem A: "); Nhap(A); printf("Toa do diem A: "); Xuat(A); printf("\nNhap vao toa do diem B: "); Nhap(B); printf("Toa do diem B: "); Xuat(B); printf("\n Toa do tong cua A va B: "); AB = Tong (A, B); Xuat (AB); kc=TinhKhoangCach(A, B); printf("\nKhoang cach A va B: %lf", kc); getch(); return 0; }
  16. BÀI TẬP 16
  17. Bài tập 1 Viết chương trình nhập vào thông tin của một sinh viên có cấu trúc như sau: • Mã số sinh viên (mssv) • Họ và tên (hoTen) • Điểm giữa kỳ (gk) • Điểm thực hành (th) • Điểm lý thuyết (lt) Tính điểm tổng kết môn theo công thức: gk*10%+th*30%+lt*60% 17
  18. Bài tập 2 Sử dụng KDL có cấu trúc để khai báo và viết chương trình gồm các chức năng sau: 1. Nhập vào 2 phân số 2. Tính tổng và tích hai phân số (kết quả phải là phân số tối giản) 3. Xuất kết quả ra màn hình 18
  19. Bài tập 3 Viết chương trình nhập vào 2 thời gian t1 và t2 (thông tin thời gian gồm: giờ, phút và giây); tính khoảng cách giữa t1 và t2 (đơn vị tính bằng giây) 19
  20. MẢNG CÓ CẤU TRÚC 20
  21. Mảng cấu trúc • Cách khai báo tương tự như mảng một chiều (KDL mảng là KDL có cấu trúc) • Cách truy cập phần tử trong mảng cũng như truy cập trên mảng một chiều. 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 (truy cập đến thành phần cuối cùng có KDL cơ bản) 21
  22. Nguyên tắc lập trình trên mảng cấu trúc Do kiểu dữ liệu có cấu trúc chứa nhiều thành phần nên khi viết chương trình loại này ta cần: 1. Xây dựng hàm xử lý cho một kiểu cấu trúc 2. Muốn xử lý cho mảng cấu trúc, gọi hàm xử lý cho một kiểu cấu trúc bằng cách dùng vòng lặp 22 22
  23. Ví dụ Viết hàm nhập vào mảng các phân số struct StructPhanSo { int tu; int mau; }; typedef struct StructPhanSo PhanSo; 23
  24. Ví dụ void Nhap1PhanSo (PhanSo &ps) { printf("Nhap tu so: "); scanf("%d " , &ps.tu); printf("\nNhap mau so: “); scanf(“%d”, &ps.mau); } 24
  25. Ví dụ void NhapMang (PhanSo dsps[], int n) { for(int i=0; i<n; i++) { printf(”\nNhap vao phan so thu %d: “, i+1); Nhap1PhanSo (dsps[i]); } } 25
  26. Bài tập 1. Viết chương trình nhập vào mảng các phân số, cho biết phân số có giá trị lớn nhất trong mảng 2. Viết chương trình nhập vào danh sách các mặt hàng, in ra mặt hàng có xuất xứ theo điều kiện cho trước (ví dụ: “Viet Nam”, ), biết thông tin mặt hàng gồm: - Mã mặt hàng - Tên mặt hàng - Đơn giá - Xuất xứ 26
  27. Q&A 27