Kĩ thuật lập trình - Cấu trúc
Bạn đang xem tài liệu "Kĩ thuật lập trình - Cấu trúc", để 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:
- ki_thuat_lap_trinh_cau_truc.pdf
Nội dung text: Kĩ thuật lập trình - Cấu trúc
- Trường Cao đẳng Kỹ thuật Công nghệ Đồng Nai Khoa Công nghệ thông tin NHẬP MÔN LẬP TRÌNH Phạm Đình Sắc dinhsac@gmail.com CẤU TRÚC 2 && VCVC Nội dung BBBB 1 Khái niệm kiểu cấu trúc (struct) 2 Khai báo & truy xuất kiểu cấu trúc 3 Kiểu dữ liệu hợp nhất (union) 4 Bài tập NMLT - Cấu trúc 3
- && VCVC Đặt vấn đề BBBB Thông tin 1 SV . MSSV : kiểu chuỗi . Tên SV : kiểu chuỗi . NGAYSINH: kiểu chuỗi . Phái : ký tự . Điểm Toán, Lý, Hóa : số thực Yêu cầu . Lưu thông tin n SV? . Tuyền thông tin n SV vào hàm? NMLT - Cấu trúc 4 && VCVC Đặt vấn đề BBBB Khai báo các biến để lưu trữ 1 SV . char mssv[7]; // “0012078” . char hoten[30]; // “Nguyen Van A” . char ngaysinh[11]; // “29/12/1990” . char phai; // ‘y’ Nam, ‘n’ Nữ . float toan, ly, hoa; // 8.5 9.0 10.0 Truyền thông tin 1 SV cho hàm . void xuat(char mssv[], char hoten[], char ntns[], char phai, float toan, float ly, float hoa); NMLT - Cấu trúc 5
- && VCVC Đặt vấn đề BBBB Nhận xét . Đặt tên biến khó khăn và khó quản lý . Truyền tham số cho hàm quá nhiều . Tìm kiếm, sắp xếp, sao chép, khó khăn . Tốn nhiều bộ nhớ . Ý tưởng . Gom những thông tin của cùng 1 SV thành một kiểu dữ liệu mới => Kiểu struct NMLT - Cấu trúc 6 && VCVC Khai báo kiểu cấu trúc BBBB Cú pháp struct ể ấ { ; ể ữ ệ ầ ; ể ữ ệ ầ }; Ví dụ struct DIEM { int x; int y; }; NMLT - Cấu trúc 7
- && VCVC Khai báo biến cấu trúc BBBB Cú pháp tường minh struct ể ấ { ; ể ữ ệ ầ ; ể ữ ệ ầ } , ; ế ế Ví dụ struct DIEM { int x; int y; } diem1, diem2; NMLT - Cấu trúc 8 && VCVC Khai báo biến cấu trúc BBBB Cú pháp không tường minh struct ể ấ { ; ể ữ ệ ầ ; ể ữ ệ ầ }; struct ; ể ấ ế Ví dụ struct DIEM { int x; int y; }; struct DIEM diem1, diem2;// C++ có th b struct ể ỏ NMLT - Cấu trúc 9
- && VCVC Sử dụng typedef BBBB Cú pháp typedef struct { ; ể ữ ệ ầ ; ể ữ ệ ầ } ; ể ấ ; ể ấ ế Ví dụ NMLT - Cấu trúc 10 && VCVC Khởi tạo cho biến cấu trúc BBBB Cú pháp tường minh struct ể ấ { ; ể ữ ệ ầ ; ể ữ ệ ầ } = { , , }; ế ị ị Ví dụ struct DIEM { int x; int y; } diem1 = {2912, 1706}, diem2; NMLT - Cấu trúc 11
- && VCVC Truy xuất dữ liệu kiểu cấu trúc BBBB Đặc điểm . Không thể truy xuất trực tiếp . Thông qua toán tử thành phần cấu trúc . hay còn gọi là toán tử chấm (dot operation) . ế ấ ầ Ví dụ struct DIEM { int x; int y; } diem1; printf( x = %d, y = %d , diem1.x, diem1.y); “ ” NMLT - Cấu trúc 12 && VCVC Gán dữ liệu kiểu cấu trúc BBBB Có 2 cách = ; ế ấ đ ế ấ ồ . = ; ế ấ đ ầ ị Ví dụ struct DIEM { int x, y; } diem1 = {2912, 1706}, diem2; diem2 = diem1; diem2.x = diem1.x; diem2.y = diem1.y * 2; NMLT - Cấu trúc 13
- && VCVC Cấu trúc phức tạp BBBB Thành phần của cấu trúc là cấu trúc khác struct DIEM { int x; int y; }; struct HINHCHUNHAT { struct DIEM traitren; struct DIEM phaiduoi; } hcn1; hcn1.traitren.x = 2912; hcn1.traitren.y = 1706; NMLT - Cấu trúc 14 && VCVC Cấu trúc phức tạp BBBB Thành phần của cấu trúc là mảng struct SINHVIEN { char hoten[30]; float toan, ly, hoa; } sv1; strcpy(sv1.hoten, Nguyen Van A ); “ ” sv1.toan = 10; sv1.ly = 6.5; sv1.hoa = 9; NMLT - Cấu trúc 15
- && VCVC Cấu trúc phức tạp BBBB Cấu trúc đệ quy (tự trỏ) struct PERSON { char hoten[30]; struct PERSON *father, *mother; }; struct NODE { int value; struct NODE *pNext; }; NMLT - Cấu trúc 16 && VCVC Cấu trúc phức tạp BBBB Thành phần của cấu trúc có kích thước theo bit struct bit_fields { int bit_0 : 1; int bit_1_to_4 : 4; int bit_5 : 1; int bit_6_to_15 : 10; }; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NMLT - Cấu trúc 17
- && VCVC Kích thước của struct BBBB Ví dụ struct A { int a; double b; }; sizeof(A) = ??? struct B1 struct B2 { { int a; int a; int b; double c; double c; int b; }; }; sizeof(B1) = ??? sizeof(B2) = ??? NMLT - Cấu trúc 18 && VCVC Chỉ thị #pragma pack BBBB Chỉ thị #pragma pack (n) . n = 1, 2, 4, 8, 16 (byte) . Biên lớn nhất của các thành phần trong struct • BC n mặc định là 1 • VC++ n mặc định là 8 • Project settings Compile Option C/C++ Code Generation Structure Alignment . Canh biên cho 1 cấu trúc #pragma pack(push, 1) struct MYSTRUCT { }; #pragma pack(pop) NMLT - Cấu trúc 19
- && VCVC #pragma pack BBBB Ví dụ: không có #pragma pack (1) struct A { double a; a a a a a a a a int b; int c; b b b b c c c c }; struct B { int b; b b b b đệm 4B double a; a a a a a a a a int c; }; c c c c đệm 4B struct C { int b; b b b b c c c c int c; double a; a a a a a a a a }; NMLT - Cấu trúc 20 && VCVC Các lưu ý về cấu trúc BBBB Lưu ý . Kiểu cấu trúc được định nghĩa để làm khuôn dạng còn biến cấu trúc được khai báo để sử dụng khuôn dạng đã định nghĩa. . Trong C++, có thể bỏ từ khóa struct khi khai báo biến (hoặc sử dụng typedef) . Khi nhập các biến kiểu số thực trong cấu trúc phải nhập thông qua một biến trung gian. struct DIEM { float x, y;} d1; float temp; scanf( %f , &temp); d1.x = temp; “ ” NMLT - Cấu trúc 21
- && VCVC Mảng cấu trúc BBBB Mảng cấu trúc . Tương tự như mảng với kiểu dữ liệu cơ sở (char, int, float, ) typedef struct { int x; int y; } DIEM ; DIEM mang1[20]; DIEM mang2[10] = {{3, 2}, {4, 4}, {2, 7}}; NMLT - Cấu trúc 22 && VCVC Truyền cấu trúc cho hàm BBBB Truyền cấu trúc cho hàm . Giống như truyền kiểu dữ liệu cơ sở • Tham trị (không thay đổi sau khi kết thúc hàm) • Tham chiếu • Con trỏ . Ví dụ struct DIEM { int x, y; }; void xuat1(int x, int y) { }; void xuat2(DIEM diem) { }; void xuat3(DIEM &diem) { }; void xuat4(DIEM *diem) { }; NMLT - Cấu trúc 23
- && VCVC Bài tập về cấu trúc BBBB 1. Phân số . Khai báo kiểu dữ liệu phân số (PHANSO) . Nhập/Xuất phân số . Rút gọn phân số . Tính tổng, hiệu, tích, thương hai phân số . Kiểm tra phân số tối giản . Quy đồng hai phân số . Kiểm tra phân số âm hay dương . So sánh hai phân số NMLT - Cấu trúc 24 && VCVC Bài tập về cấu trúc BBBB 2. Đơn thức . Khai báo kiểu dữ liệu đơn thức (DONTHUC) . Nhập/Xuất đơn thức . Tính tích, thương hai đơn thức . Tính đạo hàm cấp 1 của đơn thức . Tính giá trị đơn thức tại x = x0 NMLT - Cấu trúc 25
- && VCVC Bài tập về cấu trúc BBBB 3. Đa thức . Khai báo kiểu dữ liệu đa thức (DATHUC) . Nhập/Xuất đa thức . Tính tổng, hiệu, tích, thương hai đơn thức . Tính đạo hàm cấp 1 của đơn thức . Tính đạo hàm cấp k của đơn thức . Tính giá trị đơn thức tại x = x0 NMLT - Cấu trúc 26 && VCVC Bài tập về cấu trúc BBBB 4. Điểm trong mặt phẳng Oxy . Khai báo kiểu dữ liệu điểm (DIEM) . Nhập/Xuất tọa độ điểm . Tính khoảng cách giữa hai điểm . Tìm điểm đối xứng qua gốc toạ độ/trục Ox/Oy . Kiểm tra điểm thuộc phần tư nào? 5. Tam giác . Khai báo kiểu dữ lịêu tam giác (TAMGIAC) . Nhập/Xuất tam giác . Tính chu vi, diện tích tam giác NMLT - Cấu trúc 27
- && VCVC Bài tập về cấu trúc BBBB 6. Ngày . Khai báo kiểu dữ liệu ngày (NGAY) . Nhập/Xuất ngày (ngày, tháng, năm) . Kiểm tra năm nhuận . Tính số thứ tự ngày trong năm . Tính số thứ tự ngày kể từ ngày 1/1/1 . Tìm ngày trước đó, sau đó k ngày . Tính khoảng cách giữa hai ngày . So sánh hai ngày NMLT - Cấu trúc 28 && VCVC Bài tập về mảng cấu trúc BBBB 7. Mảng phân số . Nhập/Xuất n phân số . Rút gọn mọi phân số . Đếm số lượng phân số âm/dương trong mảng . Tìm phân số dương đầu tiên trong mảng . Tìm phân số nhỏ nhất/lớn nhất trong mảng . Sắp xếp mảng tăng dần/giảm dần NMLT - Cấu trúc 29