Bài Giảng C CHƯƠNG 7 - KIỂU DỮ LIỆU CÓ CẤU TRÚC

19 5.2K 8
Bài Giảng  C  CHƯƠNG 7 - KIỂU DỮ LIỆU CÓ CẤU TRÚC

Đ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

Bài Giảng C ,

KIỂU DỮ LIỆU CÓ CẤU TRÚC Cung cấp chế cho phép khai báo kiểu liệu để giải theo yêu cầu toán dựa vào kiểu liệu cài đặt sẵn ngơn ngữ lập trình I TĨM TẮT LÝ THUYẾT I.1 Khái niệm Cấu trúc (struct) thực chất kiểu liệu người dùng định nghĩa cách gom nhóm kiểu liệu có sẵn C thành kiểu liệu phức hợp nhiều thành phần I Định nghĩa kiểu liệu Cú pháp struct < tên cấu trúc > { Các kiểu liệu thành phần ; }; Ngồi ta dùng từ khoá typedef đểđịnh nghĩa tên cho kiểu dữliệu có Cú pháp typedef struct < tên cấu trúc > < tên >; Ví dụ: Kiểu liệu DATE gồm thành phần: Thứ (thu): kiểu chuỗi Ngày (ngay): kiểu số nguyên byte Tháng (thang): kiểu số nguyên byte Năm (nam): kiểu số nguyên bytes Ta định nghĩa DATE sau: struct DATE { string thu; unsigned char ngay; unsigned char thang; unsigned int nam; }; typedef struct DATE Kieungay; Kiểu liệu cấu trúc ghi lồng vào Ví dụ 2: Định nghĩa kiểu liệu học sinh HOCSINH gồm: Mã số học sinh (MSHS): kiểu chuỗi Họ tên (hoten): kiểu chuỗi Ngày tháng năm sinh (ngaysinh): kiểu DATE Địa (diachi): kiểu chuỗi Giới tính (gt): kiểu chuỗi Điểm trung bình (diemtb): số thực Ta định nghĩa kiểu HOCSINH sau: struct DATE { string thu; unsigned char ngay; unsigned char thang; unsigned int nam; }; typedef struct HOCSINH { string MSHS; string hoten; struct DATE ngaysinh; string diachi; string gt; double diemtb; };  Khi định nghĩa kiểu liệu struct lồng nhau, ta cần lưu ý: Kiểu liệu sử dụng phải khai báo phía I.3 Khai báo Khi ta định nghĩa kiểu liệu tức ta có kiểu liệu mới, muốn sử dụng ta phải khai báo biến Cú pháp khai báo kiểu liệu giống cách khai báo kiểu liệu chuẩn struct < tên cấu trúc > < tên biến > ; Ví dụ : struct DATE x ; // Khai bao bien x co kieu du lieu DATE Tuy nhiên ta định nghĩa struct có dùng từ khố typedef ta khai báo trực tiếp mà khơng cần từ khố “struct” Ví dụ : DATE x ; // Khai bao bien x co kieu DATE I.4 Truy xuất Để truy xuất thành phần liệu bên cấu trúc ta có trường hợp truy xuất sau : • Biến x biến cấu trúc thơng thường, ta dùng tốn tử dấu chấm “.” Cú pháp : < Tên cấu trúc >.< Biến thành phần >; Ví dụ : DATE x ; // khai bao bien x kieu DATE x.ngay = ; // gan bang •Biến x biến trỏ, ta dùng toán tử mũi tên “->“ (Gồm dấu trừ ‘–‘ dấu lớn ‘>’) Cú pháp : < Tên cấu trúc > -> < Biến thành phần >; Ví dụ : DATE *x ; // khai bao bien x kieu tro DATE x -> = ; // gan bang Đối với kiểu liệu có struct lồng phải truy cập đến thành phần cuối có kiểu liệu Ví dụ: Giả sử, có kiểu HOCSINH HOCSINH hs; // khai bao bien hs kieu HOCSINH Muốn biết hs sinh vào tháng ta phải truy cập sau: (hs.ngaysinh).thang; I.5 Ví dụ minh hoạ Viết chương trình nhập vào toạ độ hai điểm mặt phẳng tính khoảng cách hai điểm getch (); I.6 Mảng cấu trúc Cách khai báo tương tự mảng chiều hay ma trận (Kiểu liệu kiểu liệu có cấu trúc) Cách truy cập phần tử mảng truy cập mảng chiều hay ma trận Nhưng phần tử có kiểu cấu trúc nên phải định rõ cần lấy thành phần nào, tức phải truy cập đến thành phần cuối có kiểu liệu I.7 Ngun tắc viết chương trình có mảng cấu trúc Do kiểu liệu có cấu trúc thường chứa nhiều thành phần nên viết chương trình loại ta cần lưu ý: Xây dựng hàm xử lý cho kiểu cấu trúc Muốn xử lý cho mảng cấu trúc, ta gọi lại hàm xử lý cho kiểu cấu trúc xây dựng cách dùng vòng lặp Ví dụ 1: Cho lớp học gồm n học sinh (n≤50) Thông tin học sinh mơ tảở ví dụ 2, mục I.2 Hãy viết chương trình nhập xuất danh sách học sinh sau đếm xem có học sinh lên lớp (Điều kiện lên lớp điểm trung bình ≥ 5.0) Cách làm: -Trước hết ta phải xây dựng hàm nhập xuất cho học sinh -Xây dựng hàm nhập xuất ngày tháng năm (Kiểu liệu DATE) -Sau xây dựng hàm nhập xuất cho danh sách học sinh #define MAX 50 struct DATE { char thu[5]; unsigned char ngay; unsigned char thang; int nam; }; typedef struct HOCSINH { char MSHS[6]; char hoten[31]; struct DATE ngaysinh; Kết ví dụ chạy chương trình: Nhap so luong phan so: Nhap vao phan so thu 1: Nhap tu so: Nhap mau so: Nhap vao phan so thu 2: Nhap tu so: Nhap mau so: Nhap vao phan so thu 3: Nhap tu so: Nhap mau so: Nhap vao phan so thu 4: II BÀI TẬP II.1 Bài tập Viết chương trình sử dụng trỏ cấu trúc để hiển thị giờ, phút, giây hình, tính khoảng cách mốc thời gian Viết chương trình sử dụng trỏ cấu trúc thể ngày, tháng, năm hình, tính khoảng cách ngày Viết chương trình khai báo kiểu liệu thể số phức Sử dụng kiểu để viết hàm tính tổng, hiệu, tích hai số phức Viết chương trình khai báo kiểu liệu để biểu diễn phân số Hãy viết hàm thực cơng việc sau: Tính tổng, hiệu, tích, thương hai phân số Rút gọn phân số Qui đồng hai phân số So sánh hai phân số Viết chương trình khai báo kiểu liệu để biểu diễn hỗn số Hãy viết hàm thực công việc sau : Đổi hỗn số sang phân số Tính tổng, tích hai hỗn số Viết chương trình khai báo kiểu liệu để biểu diễn điểm hệ tọa độ 0xy Hãy viết hàm thực cơng việc sau: Tìm điểm đối xứng qua tung độ, hồnh độ, toạđộ tâm Hãy tính tổng, hiệu, tích hai điểm mặt phẳng toạđộ 0xy Tính khoảng cách hai điểm Cho hình trụ có thơng tin sau: BanKinh (bán kính hình trụ kiểu sốthực), ChieuCao (chiều cao hình trụ kiểu số thực) Hãy thực công việc sau Nhập liệu cho hình trụ Tính diện tích xung quanh, diện tích tồn phần, thể tích hình trụ II.2 Bài Tập Luyện Tập Viết chương trình tạo mảng số phức Hãy viết hàm tính tổng, tích số phức có mảng Viết chương trình tạo mảng phân số Hãy viết hàm thực cơng việc sau : Tính tổng tất phân số (kết dạng phân số tối giản) Tìm phân số lớn nhất, phân số nhỏ Sắp xếp mảng tăng dần 10 Viết chương trình khai báo kiểu liệu STACK (cơ chế LIFO) Viết hàm làm công việc sau : Kiểm tra STACK rỗng Kiểm tra STACK đầy Thêm phần tử vào STACK Lấy phần tử khỏi STACK Tổ chức liệu để quản lí sinh viên cấu trúc mẫu tin mảng N phần tử, phần tử có cấu trúc sau: -Mã sinh viên -Tên Năm sinh -Điểm tốn, lý, hố, điểm trung bình Viết chương trình thực công việc sau: Nhập danh sách sinh viên cho lớp học Xuất danh sách sinh viên hình Tìm sinh viên có điểm trung bình cao Sắp xếp danh sách lớp theo thứ tự tăng dần điểm trung bình Sắp xếp danh sách lớp theo thứ tự giảm dần điểm tốn Tìm kiếm in sinh viên có điểm trung bình lớn khơng có mơn Tìm sinh viên có tuổi lớn Nhập vào tên sinh viên Tìm in thơng tin liên quan đến sinh viên (nếu có) 12 Tổ chức liệu quản lí danh mục phim VIDEO, thông tin liên quan đến phim sau: -Tên phim (tựa phim).-Thể loại (3 loại : hình sự, tình cảm, hài) -Tên đạo diễn -Tên điễn viên nam -Tên diễn viên nữ -Năm sản xuất -Hãng sản xuất Viết chương trình thực công việc sau : Nhập vào phim với thông tin liên quan đến phim Nhập thể loại: In danh sách phim thuộc thể loại Nhập tên nam diễn viên In phim có diễn viên đóng Nhập tên đạo diễn In danh sách phim đạo diễn dàn dựng 13 Một thư viện cần quản lý thông tin đầu sách Mỗi đầu sách bao gồm thông tin sau : MaSSach (mã số sách), TenSach (tên sách), TacGia (tác giả), SL (số lượng sách đầu sách) Viết chương trình thực chức sau: Nhập vào danh sách đầu sách (tối đa 100 đầu sách) Nhập vào tên sách In thông tin đầy đủ sách có tên đó, khơng có tên sách báo :Khơng Tìm Thấy Tính tổng số sách có thư viện 14 Viết chương trình tạo mảng danh sách máy tính cửa hàng, thơng tin máy tính bao gồm : -Loại máy -Nơi sản xuất -Thời gian bảo hành Viết hàm nhập dãy loại máy tính có thông tin Hãy viết hàm thống kê xem có máy có thời gian bảo hành năm In danh sách máy tính có xuất xứ từ Mỹ 15 Để lắp ráp máy vi tính hồn chỉnh cần phải có tối thiểu 10 linh kiện loại A lắp bổ sung thêm vào khoảng tối đa linh kiện loại B Tại cửa hàng vi tính cần quản lý bán hàng loại linh kiện cửa hàng Thông tin loại linh kiện gồm có: Tên linh kiện, quy cách , loại, đơn giá loại ( chất lượng tốt – số nguyên), đơn giá loại ( chất lượng thường – sốnguyên ) Viết chương trình thực công việc sau : Nhập vào thông tin linh kiện có cửa hàng Xuất danh sách linh kiện nhập theo thứ tự tăng dần loại linh kiện tên linh kiện Cho biết có đủ 10 linh kiện loại A cần thiết lắp ráp máy hay chưa? 16 Một cửa hàng cần quản lý mặt hàng, thông tin mặt hàng bao gồm: -Mã hàng -Tên mặt hàng -Số lượng -Đơn giá -Số lượng tồn - Thời gian bảo hành (tính theo đơn vị tháng) Hãy nhập vào danh sách mặt hàng Tìm mặt hàng có số lượng tồn nhiều Tìm mặt hàng có số lượng tồn Tìm mặt hàng có giá tiền cao In mặt hàng có thời gian bảo hành lớn 12 tháng Sắp xếp mặt hàng theo thứ tự tăng dần số lượng tồn 17 Viết chương trình quản lý hồ sơ nhân viên cơng ty, chương trình thực cơng việc sau : -Họ tên.-Phái -Ngày sinh -Địa -Lương -Bảo hiểm xã hội -Thưởng -Phạt -Lương thực lĩnh = lương + thưởng – BH xã hội – phạt Nhập vào hồ sơ nhân viên công ty Xuất danh sách nhân viên theo lương thực lĩnh giảm dần cách sau : Cấp phát vùng nhớ tĩnh -Cấp phát vùng nhớđộng 18 (*) Viết chương trình quản lý lớp học trường Các thông tin lớp học sau : -Tên lớp -Sĩ số -Danh sách sinh viên lớp Nhập vào danh sach lớp với thông tin yêu cầu In danh sách lớp có sinh viên có điểm trung bình loại giỏi Tìm lớp có nhiều sinh viên Tìm lớp có sinh viên Tìm sinh viên có điểm trung bình cao Tìm lớp có số lượng sinh viên đạt điểm trung bình loại giỏi nhiều 19 Viết chương trình quản lý vé tàu, thơng tin vé tàu sau : -Ngày khởi hành, ngày giờđến -Ga đi, ga đến -Loại tàu, loại chỗ ngồi ( ngồi, nằm, cứng, mềm) -Số toa, số ghế Viết hàm nhập vào danh sách vé tàu In danh sách vé tàu có ga đến Huế In danh sách vé tàu có ga đến Hà Nội ngày 8/6/2005 Đếm xem có khách tàu loại chỗ ngồi nằm cứng 20 Viết chương trình tính tiền điện hàng tháng hộ gia đình, thơng tin khách hàng sau : -Kỳ thu, từ ngày……đến ngày -Tên khách hàng, mã khách hàng.-Địa -Điện tiêu thụ (Kwh) Nhập vào danh sách khách hàng Xuất danh sách hoá đơn theo thứ tự tăng dần điện tiêu thụ Tính tiền điện khách hàng theo quy định sau -100 kw 550 đ / kw -50 kw 900 đ / kw -50 kw 1210 đ / kw -Thuế 10 % tổng số tiền phải trả Tính tổng số tiền thu khách hàng III KẾT LUẬN Kiểu liệu có cấu trúc cho phép ta định nghĩa kiểu liệu sở kiểu liệu có sẵn ngơn ngữ lập trình Khi xây dựng xong kiểu liệu ta phải định nghĩa thao tác cho kiểu liệu Những kiểu liệu tựđịnh nghĩa thơng thường có nhiều thành phần, thành phần kiểu liệu tựđịnh nghĩa, vấn đề ta chọn kiểu liệu để xây dựng nên chúng cho phù hợp mặt kiểu liệu phù hợp kích thước lưu trữ (vừa đủ) Các sử dựng kiểu liệu tựđịnh nghĩa giống kiểu dữliệu Muốn sử dụng phải khai báo biến, truy cập thành phần phải truy cập theo quy ước Nếu thành phần cấu trúc có kiểu liệu số thực sử dụng hàm scanf() phải thông qua biến trung gian gán lại cho thành phần cấu trúc Đối với mảng kiểu liệu có cấu trúc ta nên xử lý cho thành phần cấu trúc xử lý cho mảng cấu trúc cách dùng vòng lặp ... viết chương trình c? ? mảng c? ??u tr? ?c Do kiểu liệu c? ? c? ??u tr? ?c thường chứa nhiều thành phần nên viết chương trình loại ta c? ??n lưu ý: Xây dựng hàm xử lý cho kiểu c? ??u tr? ?c Muốn xử lý cho mảng c? ??u tr? ?c, ... Viết chương trình nhập vào toạ độ hai điểm mặt phẳng tính khoảng c? ?ch hai điểm getch (); I.6 Mảng c? ??u tr? ?c Cách khai báo tương tự mảng chiều hay ma trận (Kiểu liệu kiểu liệu c? ? c? ??u tr? ?c) C? ?ch... truy c? ??p phần tử mảng truy c? ??p mảng chiều hay ma trận Nhưng phần tử c? ? kiểu c? ??u tr? ?c nên phải định rõ c? ??n lấy thành phần nào, t? ?c phải truy c? ??p đến thành phần cuối c? ? kiểu liệu I .7 Nguyên t? ?c viết

Ngày đăng: 14/11/2012, 15:35

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan