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

Bài giảng Kỹ thuật lập trình: Bài 5 - TS. Ngô Hữu Dũng

30 3 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 30
Dung lượng 339,22 KB

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

Nội dung

Bài giảng Kỹ thuật lập trình: Bài 5 do TS. Ngô Hữu Dũng biên soạn cung cấp cho người học các kiến thức: Khái niệm kiểu cấu trúc, khai báo cấu trúc, khai báo cấu trúc và biến, khai báo – Nhiều biến cấu trúc, không cần thẻ cấu trúc, cấu trúc trong cấu trúc, mảng trong cấu trúc,...

Trang 1

Kỹ thuật lập trình

Bài 5 – Kiểu cấu trúc

Ts Ngô Hữu Dũng

Trang 2

Khái niệm

Kiểu cấu trúc: Nhóm các phần tử không đồng nhất với nhau

 Ví dụ 1: Một ngày được lưu trong 3 biến riêng biệt

 int day = 28, month = 8, year = 2016;

 Vậy mỗi ngày ta phải dùng 3 biến riêng biệt để lưu trữ

 Ví dụ 2: Một sinh viên gồm nhiều thông tin liên quan

 char fullname[50]; date birthday; int height; int weight;

Kiểu cấu trúc: Nhóm các phần tử với nhau trong một biến student

Trang 3

Khai báo cấu trúc

1 struct t_date{ // Khai báo kiểu cấu trúc

5 };

6 struct t_date birthday, today; // Khai báo biến

Trang 5

Khai báo cấu trúc và biến

1 struct t_date{ // Khai báo kiểu cấu trúc

5 } today ; // Khai báo biến

6 struct t_date birthday; // Khai báo biến

Trang 6

Khai báo – Nhiều biến cấu trúc

1 struct t_date{ // Khai báo kiểu cấu trúc

5 } today, birthday ; // Khai báo nhiều biến

6 //struct date birthday;

Trang 7

Khai báo – Không cần thẻ cấu trúc

1 struct { // Không cần thẻ cấu trúc!?

6 //struct date birthday;

Trang 8

Khai báo - typedef

1 typedef struct { // typedef kiểu cấu trúc

Trang 9

Khai báo – Cấu trúc trong cấu trúc

Trang 10

Khai báo – Mảng trong cấu trúc

Trang 11

Khởi tạo giá trị

Trang 12

5 }holidays[10]; // Mảng kiểu cấu trúc, 10 phần tử

6 struct t_date dates[3] = {{1, 9, 2016},

7 {4,7,2016},{9,12,2016}}; // Khai báo và khởi tạo

8 holidays[4].day = 30; // Truy suất phần tử

9 holidays[4].month = 4;

10 dates[2].year = 2015;

Trang 13

Tham số cấu trúc – tham trị

8 struct t_date today = {1, 9, 2016};

10 }

Trang 14

Tham số cấu trúc – tham biến

1 // Tham biến, dùng kiểu con trỏ

2 void editDay( struct t_date* aDay, int d, int m, int y)

3 {

7 }

8 int main()

9 {

10 struct t_date today;

11 editDay( &today , 2, 9, 2016); // Truyền tham biến

12 }

Trang 15

Ví dụ vận dụng – Tìm ngày kế tiếp

 Viết hàm tính ngày mai là ngày mấy

 Cấu trúc dữ liệu gồm ngày, tháng, năm

 Dùng cấu trúc kiểu ngày gồm các phần tử ngày, tháng, năm

 Đối số của hàm là một biến kiểu ngày

 Hàm trả về kiểu ngày

 Gợi ý thuật toán

 Nếu ngày chưa phải là ngày cuối cùng của tháng thì tăng ngày

 Nếu là ngày cuối cùng của tháng thì tăng tháng

 Nếu là ngày cuối cùng của năm thì tăng năm

Trang 17

Ví dụ vận dụng – Tìm ngày kế tiếp (2)

1 struct t_date tomorrow( struct t_date aDay)

2 {

3 if (aDay.day < daysOfMonth(aDay)) // Chưa tròn tháng

5 else if (aDay.month < 12){ // Tròn tháng, chưa tròn năm

11 }

12 return aDay; // Trả về ngày kế tiếp

13 }

Trang 18

Ví dụ vận dụng – Tìm ngày kế tiếp (3)

 Hàm tính số ngày trong tháng, có tính đến năm nhuận

 =IF(OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)<>0)),"Leap Year", "NOT a Leap Year")

1 int daysOfMonth( struct t_date d)

Trang 20

Ví dụ vận dụng – Tìm giờ kế tiếp

 Viết hàm tính giờ sau khi tăng một giây

 Cấu trúc dữ liệu gồm giờ, phút, giây

 Thiết kế cấu trúc kiểu giờ gồm các phần tử giờ, phút, giây

 Input: Một giờ bất kỳ

 Đối số của hàm là một biến kiểu giờ

 Hàm trả về kiểu giờ

 Gợi ý thuật toán

 Tương tự như bài tính ngày kế tiếp

Điểm khác biệt: Năm kế tiếp không bị giới hạn, giờ kế tiếp bị giới hạn (24)

Trang 22

Ví dụ vận dụng – Tìm giờ kế tiếp (3)

1 struct t_time nextSec( struct t_time time)

2 {

3 if (time.second < 59) // Chưa tròn phút

4 time.second++; // Tăng giây

5 else if (time.minute < 59) { // Tròn phút, chưa tròn giờ

6 time.second = 0; // Reset giây

7 time.minute++; // Tăng phút

8 } else if (time.hour < 23){ //Tròn phút, giờ, chưa tròn ngày

9 time.second = time.minute = 0; // Reset giây, phút

10 time.hour++; // Tăng giờ

12 time.second = time.minute = time.hour = 0; // Ngày mới

13 return time; // Trả về thời gian mới

14 }

Trang 23

Ví dụ vận dụng – Tìm giờ kế tiếp (4)

Trang 24

Ví dụ vận dụng – Hoàn chỉnh ngày giờ

 Viết hàm tính ngày giờ hoàn chỉnh

 Cấu trúc dữ liệu gồm ngày, tháng, năm, giờ, phút, giây

 Dùng cấu trúc kiểu ngày giờ gồm các phần tử trên

 Input: Một ngày giờ bất kỳ

 Output: Ngày giờ kế tiếp

 Gợi ý thuật toán

 Tìm số giây tiếp theo như bài nextSec

 Nếu sang ngày mới thì tìm ngày tiếp theo như bài tomorrow

Trang 25

Ví dụ vận dụng – Hoàn chỉnh ngày giờ (2)

12 struct t_date date;

13 struct t_time time;

Trang 26

Ví dụ vận dụng – Hoàn chỉnh ngày giờ (3) – Cách 1

1 struct t_timeday timeday;

Trang 27

Ví dụ vận dụng – Hoàn chỉnh ngày giờ (4) – Cách 2

1. struct t_timeday nextTime( struct t_timeday1

Trang 28

Ví dụ vận dụng – Quản lý điểm

 Thiết kế cấu trúc dữ liệu để quản lý sinh viên

 Mỗi lớp học phần gồm mã lớp, tên lớp, chuyên ngành

Mỗi sinh viên gồm mã sinh viên, tên sinh viên, cấu trúc lớp học

phần, ngày sinh

 Mỗi môn học gồm mã môn học, tên môn học, tín chỉ lý thuyết, tín chỉ thực hành

Bảng điểm gồm cấu trúc sinh viên, cấu trúc môn học, cấu trúc

lớp học phần, điểm thường kỳ, giữa kỳ, cuối kỳ và thực hành

Ghi chú

Cơ sở dữ liệu thực tế của bảng điểm có thể chỉ chứa mã sinh

viên, mã môn học, mã kỳ thi, và điểm

Trang 29

6 };

Ngày đăng: 08/05/2021, 19:20

🧩 Sản phẩm bạn có thể quan tâm