mac os x lion 10 7 2 free download full versionmac os x 10 7 lion free download full versionwindows 7 professional free download full versionmacromedia flash mx 2004 7 0 free download full versionphim hoạt hình 7 viên ngọc rồng full htv37 viên ngọc rồng full trên htv3windows live movie maker for windows 7 ultimate free download full version7 viên ngọc rồng fullformat usb or flash drive software 7 0
NGÔN NGỮ C Chương 7: KIỂU CẤU TRÚC (STRUCTURE TYPE) Giáo viên: Tạ Thúc Nhu Khoa CNTT trường ĐH Lạc Hồng I- Tổng Quan: • Kiểu cấu trúc, gọi kiểu mẫu tin, kiểu liệu tự tạo dùng lưu trữ tập hợp thơng tin thuộc tính cần xử lý đối tượng thực tế • Mỗi thuộc tính kiểu cấu trúc có tên phân biệt thuộc kiểu liệu định nghĩa • Kiểu thuộc tính khác • Ví dụ: Thơng tin nhân viên bao gồm: – Mã số nhân viên thuộc kiểu số nguyên, – Họ tên thuộc kiểu chuổi, – ngày sinh thuộc kiểu cấu trúc ngày tháng năm định nghĩa, – hệ số lương thuộc kiểu số thực v.v Mã hóa II-Định nghiã kiểu cấu trúc: Mẫu struct Tên_Kiểu { Kiểu Thuộctính_1; Kiểu Thuộctính_2; Kiểu Thuộctính_n; }; Mẫu typedef struct { Kiểu Thuộctính_1; Kiểu Thuộctính_2; Kiểu Thuộctính_n; } Tên_Kiểu; Mã hóa Ví dụ: Định nghiã kiểu cấu trúc tên Date chứa thông tin ngày, tháng năm struct Date { typedef struct { unsigned char Ngay, Thang ; unsigned char Ngay, Thang ; int Nam ; int Nam ; }; } Date; Date Ngay Thang unsigned char unsigned char Nam int Mã hóa Ví dụ: Định nghiã kiểu cấu trúc lưu trữ thông tin nhân viên struct NhanVien { int MSNV; char Ho[20], Ten[8]; struct Date NgaySinh; float HeSoLuong; }; typedef struct { int MSNV; char Ho[20], Ten[8]; Date NgaySinh; float HeSoLuong; } NhanVien; NhanVien MSNV Ho Ten int char[20] char[8] NgaySinh Ngay Thang Nam uc uc int HeSoLuong float Mã hóa III- Biến kiểu cấu trúc: Khai báo biến cấu trúc: [struct] TênKiểuCấuTrúc TênBiếnCT ={giá trị mục 1, giá trị mục 2, }; Ví dụ: Date ngaysinh = {12, 5, 1999}; Thuộc tính biến cấu trúc xác định bởi: TênBiếnCT.ThuộcTính ngaysinh ngaysinh.Ngay ngaysinh.Thang ngaysinh.Nam 12 1999 Vĩ dụ: NhanVien nv = {9, “Le Anh”, ”Tuan”, {12,3,1960}, 2.05}; nv.MSNV nv.Ho nv.Ten Le Anh Tuan nv nv.NgaySinh Ngay Thang Nam 12 1960 nv.HeSoLuong 2.05 Mã hóa Ví dụ: In giá trị thuộc tính biến nv puts("Thong tin nhan vien:"); printf("Ma so : %d", nv.MSNV); printf(“\nHo ten : %s %s”, nv.Ho, nv.Ten); printf(“\nNgay sinh: %d/%d/%d”, nv.NgaySinh.Ngay, nv.NgaySinh.Thang, nv.NgaySinh.Nam); printf("\nHe so luong : %f ", nv.HeSoLuong); nv.MSNV nv.Ho nv.Ten Le Anh Tuan nv nv.NgaySinh Ngay Thang Nam 12 1960 nv.HeSoLuong 2.05 Mã hóa Ví dụ: Nhập giá trị cho thuộc tính biến nv puts("\nNhap thong tin nhan vien :"); printf("Ma so: "); scanf("%d", &nv.MSNV); flushall( ); printf("Ho : "); gets(nv.Ho); printf("Ten : "); scanf("%s", nv.Ten); printf("Ngay sinh:"); scanf(“%d”, &nv.NgaySinh.Ngay); printf("Thang sinh:"); scanf(“%d”, &nv.NgaySinh.Thang); printf("Nam sinh:"); scanf(“%d”, &nv.NgaySinh.Nam); printf("He so luong : "); scanf(“%f”, &nv.HeSoLuong); nv.MSNV nv.Ho nv.Ten Le Anh Tuan nv nv.NgaySinh Ngay Thang Nam 12 1960 nv.HeSoLuong 2.05 Mã hóa Ví dụ: Tính tọa độ trung điểm đoạn thẳng AB typedef struct{ float x, y; } Diem; void main() { Diem A,B,M; printf("\nNhap toa diem A: "); scanf("%f%%f", &A.x, &A.y); printf("\nNhap toa diem B: "); A scanf("%f%%f", &B.x, &B.y); M.x = (A.x + B.x)/2; M.y = (A.y + B.y)/2; printf("\nToa diem M la (%.2f,%.2f)", M.x, M.y); B getch(); M } x y x y x y Mã hóa III- Biến kiểu cấu trúc: (tt) Gán biến cấu trúc có kiểu cấu trúc: Ví dụ: NhanVien nv1 = {9, “Le Anh”, ”Tuan”, {12,3,1960}, 2.05}; NhanVien nv2; nv2 = nv1; nv1 nv2 MSNV Ho Ten Le Anh Tuan MSNV Ho Ten Le Anh Tuan NgaySinh Ngay Thang Nam 12 1960 NgaySinh Ngay Thang Nam 12 10 1960 HeSoLuong 2.05 HeSoLuong 2.05 Mã hóa IV- Hàm kiểu cấu trúc: Hàm nhận biến cấu trúc với kiểu truyền: trị; tên hay địa return biếncấutrúc nơi gọi Hàm B return BiếnCấuTrúc; Truyền Biến cấu trúc Hàm A 11 Mã hóa Ví dụ: Chương trình tính tổng phân số (Truyền trị tham chiếu) //Khai báo kiểu phân số typedef struct{ int tu, mau;} PhanSo; void NhapPhanSo(PhanSo &a) { PhanSo x; { printf("\nNhap tu va mau: "); scanf("%d%d", &x.tu, &x.mau); fflushall( ); } while (x.mau == 0); a = x; if (a.mau < 0) { a.tu = - a.tu; a.mau = - a.mau; } } void NhapPhanSo(PhanSo & ); PhanSo Tong(PhanSo , PhanSo); void main() { PhanSo a, b, c; NhapPhanSo( a ); NhapPhanSo( b ); c = Tong(a,b); printf(“KQ=%d/%d”,c.tu, c.mau); } PhanSo Tong(PhanSo a, PhanSo b) { PhanSo c; c.tu = a.tu*b.mau + b.tu*a.mau; c.mau = a.mau*b.mau; return c; } Chú ý: Khơng dùng scanf để nhập giá trị thuộc tính tham chiếu kiểu cấu trúc trỏ kiểu cấu trúc 12 Mã hóa Ví dụ: Chương trình tính tổng phân số (Truyền trị địa chỉ) //Định nghĩa kiểu phân số typedef struct{ int tu, mau;} PhanSo; void NhapPhanSo(PhanSo *a) { PhanSo x; { printf("\nNhap tu va mau: "); scanf("%d%d", &x.tu, &x.mau); fflush(stdin); } while (x.mau == 0); *a = x; if (a->mau < 0) { a->tu = - a->tu; a->mau = - a->mau; } } void NhapPhanSo(PhanSo * ); PhanSo Tong(PhanSo , PhanSo); void main() { PhanSo a, b, c; NhapPhanSo( &a ); NhapPhanSo( &b ); c = Tong(a,b); printf(“KQ=%d/%d”,c.tu, c.mau); } PhanSo Tong(PhanSo a, PhanSo b) { PhanSo c; c.tu = a.tu*b.mau + b.tu*a.mau; c.mau = a.mau*b.mau; return c; } Chú ý: Thuộc tính biến cấu trúc truy xuất biến trỏ theo cú pháp: pBiếnCT ->ThuộcTính (*pBiếnCT).ThuộcTính 13 Mã hóa V- Mảng cấu trúc: • Dùng quản lý danh sách đối tượng kiểu cấu trúc • Khai báo: KiểuCấuTrúc TênMảng[Sốphầntử]; Ví dụ: NhanVien nv[100]; nv[i] biến cấu trúc thuộc kiểu NhanVien nv[0] MSNV Ho Le Anh Mảnh nv NgaySinh Ten Ngay Thang Nam Tuan 12 1960 HeSoLuong 2.05 nv[1] nv[2] 14 Mã hóa Ví dụ: danh sách nhân viên void NhapHoso(NhanVien nv[],int N) { NhanVien a; printf("\nNhap %d nhan vien :“, N); for (int i=0; i < N; i++) { printf("Nhap nhan vien %d:“, i ); printf("Ma so: "); scanf("%d", &a.MSNV); flushall(); printf("Ho:"); gets(a.Ho); printf("Ten:"); scanf("%s",a.Ten); printf("Ngay sinh:"); scanf(“%d”,&a.NgaySinh.Ngay); printf("Thang sinh:"); scanf(“%d”,&a.NgaySinh.Thang); printf("Nam sinh:"); scanf(“%d”,&a.NgaySinh.Nam); printf("He so luong : "); scanf(“%f”, &a.HeSoLuong); nv[i] = a; } } void InDS(NhanVien A[], int N) { printf("%-4s %-30s %-10s %s", “MSNV", "Ho Ten", "Ngay sinh",“HSLg”); for (int i = 0; i < N; i++) { printf("\n%4d %-20s %-9s %.2d/%.2d/%4d %4.1f”, A[i].MSNV, A[i].Ho, A[i].Ten, A[i].NgaySinh.Ngay, A[i].NgaySinh.Thang, A[i].NgaySinh.Nam, A[i].HeSoLuong); puts(“”); } } void main() { NhanVien NV[100]; NhapHoSo( NV, ); InDS( NV, 5); } 15 Mã hóa ... nghiã kiểu cấu trúc lưu trữ thông tin nhân viên struct NhanVien { int MSNV; char Ho[20], Ten[8]; struct Date NgaySinh; float HeSoLuong; }; typedef struct { int MSNV; char Ho[20], Ten[8]; Date NgaySinh;... Tên_Kiểu; Mã hóa Ví dụ: Định nghiã kiểu cấu trúc tên Date chứa thông tin ngày, tháng năm struct Date { typedef struct { unsigned char Ngay, Thang ; unsigned char Ngay, Thang ; int Nam ; int Nam ;... số thực v.v Mã hóa II-Định nghiã kiểu cấu trúc: Mẫu struct Tên_Kiểu { Kiểu Thuộctính_1; Kiểu Thuộctính_2; Kiểu Thuộctính_n; }; Mẫu typedef struct { Kiểu Thuộctính_1; Kiểu Thuộctính_2; Kiểu Thuộctính_n;