Lập trình C - Chương 3: Kiểu dữ liệu có cấu trúc

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%

pptx27 trang | Chia sẻ: huyhoang44 | Lượt xem: 675 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Lập trình C - Chương 3: Kiểu dữ liệu có cấu trúc, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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áiEmail: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 28/02/20171Nội dungKhái niệmKhai báoCách truy xuất thành phần bên trong cấu trúcXử lý cấu trúc đơnXử lý mảng có cấu trúcBài tậpKHÁI NIỆM VÀ KHAI BÁO3Khái niệmLà 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ầnKhai báo struct StructName { khai báo các thuộc tính; }; typedef struct StructName NewDataType;Khái niệmVí 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;TRUY CẬP CÁC THÀNH PHẦN TRONG CẤU TRÚC6Truy cập các thuộc tính cấu trúcBiến kiểu cấu trúcNewDataType variableName;variableName.atributeName;Ví dụ Date x; x.ngay = 5;Truy cập các thuộc tính cấu trúcBiến con trỏ kiểu cấu trúcNewDataType *pointerName;pointerName -> attributeName;Ví dụ: Date *x ; x = (Date*) malloc(sizeof(Date)); x -> ngay = 5 ; struct StructName { khai báo các thuộc tính; struct StructName *attributeName;; };Khai báo đệ quyVí dụ: struct StructNode { int key; struct StructNode *pNext; };Khai báo đệ quyViế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àyVí dụ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);Ví dụvoid Nhap (Diem &d) { printf("Hoanh do : "); scanf("%lf", &d.x); printf("Tung do : "); scanf("%lf", &d.y); }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; }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)); } 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; }BÀI TẬP16Bài tập 1Viế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%Bài tập 2Sử 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:Nhập vào 2 phân sốTính tổng và tích hai phân số (kết quả phải là phân số tối giản)Xuất kết quả ra màn hìnhBài tập 3Viế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)MẢNG CÓ CẤU TRÚC20Mảng cấu trúcCá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)Nguyên tắc lập trình trên mảng cấu trúcDo 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: Xây dựng hàm xử lý cho một kiểu cấu trúcMuố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 22Ví 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;Ví dụvoid Nhap1PhanSo (PhanSo &ps){ printf("Nhap tu so: "); scanf("%d " , &ps.tu); printf("\nNhap mau so: “); scanf(“%d”, &ps.mau);}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]); }}Bài tậpViế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ảngViế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ứ Q&A

Các file đính kèm theo tài liệu này:

  • pptxky_thuat_lap_trinhchuong3_kieudulieucocautruc_637.pptx