33
Trường Đại học Khoa học Tự nhiên Khoa Công nghệ thông tin Bộ môn Công nghệ phần mềm 1 ThS. Đặng Bình Phương [email protected] NHẬP MÔN LẬP TRÌNH DỮ LIỆU KIỂU CẤU TRÚC

Bài 12 Dữ Liệu Kiểu Cấu Trúc C

Embed Size (px)

DESCRIPTION

Lap trinh C

Citation preview

  • Trng i hc Khoa hc T nhin Khoa Cng ngh thng tin B mn Cng ngh phn mm

    1

    ThS. ng Bnh Phng [email protected]

    NHP MN LP TRNH

    D LIU KIU CU TRC

  • VC &

    BB

    2 2

    Ni dung

    D liu kiu cu trc

    Khi nim kiu cu trc (struct) 1

    Khai bo & truy xut kiu cu trc 2

    Kiu d liu hp nht (union) 3

    Bi tp 4

  • VC &

    BB

    3 3

    t vn

    Thng tin 1 SV

    MSSV: kiu chui

    Tn SV: kiu chui

    NTNS: kiu chui

    Phi: kiu k t

    im Ton, L, Ha: kiu s thc

    Yu cu

    Lu thng tin n SV?

    Truyn thng tin n SV vo hm?

    D liu kiu cu trc

  • VC &

    BB

    4 4

    t vn

    Khai bo cc bin lu tr 1 SV

    char szMSSV[8]; // 0312078

    char szHoten[30]; // H. P. Trang

    char szNTNS[9]; // 17/06/85

    char cGioiTinh; // y

    float fToan, fLy, fHoa; // 8.5 9.0 10.0

    Truyn thng tin 1 SV cho hm

    void xuat(char* szMSSV, char* szHoten, char* szNTNS, char cGioiTinh, float fToan, float fLy, float fHoa);

    D liu kiu cu trc

  • VC &

    BB

    5 5

    t vn

    Nhn xt

    t tn bin kh khn v kh qun l

    Truyn tham s cho hm qu nhiu

    Tm kim, sp xp, sao chp, kh khn

    Tn nhiu b nh

    tng

    Gom nhng thng tin ca cng 1 SV thnh mt kiu d liu mi => Kiu struct

    D liu kiu cu trc

  • VC &

    BB

    6 6

    Khai bo kiu cu trc

    C php

    V d

    D liu kiu cu trc

    struct { ; ; };

    struct SDiem2D { int m_nX; int m_nY; };

  • VC &

    BB

    7 7

    Khai bo bin cu trc

    C php tng minh

    V d

    D liu kiu cu trc

    struct { ; ; } , ;

    struct SDiem2D { int m_nX; int m_nY; } diem2D1, diem2D2;

  • VC &

    BB

    8 8

    Khai bo bin cu trc

    C php khng tng minh

    V d

    D liu kiu cu trc

    struct { ; ; }; struct ;

    struct SDiem2D { int m_nX; int m_nY; }; struct SDiem2D diem2D1, diem2D2; // Trong C chun

  • VC &

    BB

    9 9

    S dng typedef

    C php

    V d

    D liu kiu cu trc

    typedef struct { ; ; } ; ;

    typedef struct { int m_nX; int m_nY; } SDiem2D; struct SDiem2D diem2D1, diem2D2;

  • VC &

    BB

    10 10

    Khi to cho bin cu trc

    C php tng minh

    V d

    D liu kiu cu trc

    struct { ; ; } = {,,};

    struct SDiem2D { int m_nX; int m_nY; } diem2D1 = {2912, 1706}, diem2D2;

  • VC &

    BB

    11 11

    Truy xut d liu kiu cu trc

    c im

    Khng th truy xut trc tip

    Thng qua ton t thnh phn cu trc . hay cn gi l ton t chm (dot operation)

    V d

    D liu kiu cu trc

    .

    struct SDiem2D { int m_nX; int m_nY; } diem2D1; printf(x = %d, y = %d, diem2D1.m_nX, diem2D1.m_nY);

  • VC &

    BB

    12 12

    Gn d liu kiu cu trc

    C 2 cch

    V d

    D liu kiu cu trc

    = ; . = ;

    struct SDiem2D { int m_nX, m_nY; } diem2D1 = {2912, 1706}, diem2D2; diem2D2 = diem2D1; diem2D2.m_nX = diem2D1.m_nX; diem2D2.m_nY = diem2D1.m_nY * 2;

  • VC &

    BB

    13 13

    Cu trc phc tp

    Thnh phn ca cu trc l cu trc khc

    D liu kiu cu trc

    struct SDiem2D { int m_nX; int m_nY; }; struct SHinhChuNhat { struct SDiem2D m_diem2DTraiTren; struct SDiem2D m_diem2DPhaiDuoi; } hinhChuNhat1; hinhChuNhat1.m_diem2DTraiTren.m_nX = 2912; hinhChuNhat1.m_diem2DPhaiDuoi.m_nY = 1706;

  • VC &

    BB

    14 14

    Cu trc phc tp

    Thnh phn ca cu trc l mng

    D liu kiu cu trc

    struct SSinhVien { char m_szHoten[30]; float m_fToan, m_fLy, m_fHoa; } sinhVien1; strcpy(sinhVien1.m_szHoten, Nguyen Van A); sinhVien1.m_fToan = 10; sinhVien1.m_fLy = 6.5; sinhVien1.m_fHoa = 9;

  • VC &

    BB

    15 15

    Cu trc phc tp

    Cu trc quy (t tr)

    D liu kiu cu trc

    struct SNguoi { char m_szHoten[30]; struct SNguoi *m_pNguoiCha, *m_pNguoiMe; }; struct SNut { int m_nKhoa; struct SNut *m_pNut; };

  • VC &

    BB

    16 16

    Cu trc phc tp

    Thnh phn ca cu trc c kch thc theo bit

    D liu kiu cu trc

    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

  • VC &

    BB

    17 17

    Kch thc ca struct

    V d

    D liu kiu cu trc

    struct SA { int m_nA; double m_nB; }; sizeof(A) = ???

    struct SB1 { int m_nA; int m_nB; double m_dC; }; sizeof(SB1) = ???

    struct SB2 { int m_nA; double m_dC; int m_nB; }; sizeof(SB2) = ???

  • VC &

    BB

    18 18

    Ch th #pragma pack

    Ch th #pragma pack (n)

    n = 1, 2, 4, 8, 16 (byte)

    Bin ln nht ca cc thnh phn trong struct

    BC n mc nh l 1

    VC++ n mc nh l 8

    Project settings Compile Option C/C++ Code Generation Structure Alignment

    Canh bin cho 1 cu trc

    D liu kiu cu trc

    #pragma pack(push, 1) struct MYSTRUCT { }; #pragma pack(pop)

  • VC &

    BB

    19 19

    #pragma pack

    V d: khng c #pragma pack (1)

    D liu kiu cu trc

    struct SA { double a; int b; int c; }; struct SB { int b; double a; int c; }; struct SC { int b; int c; double a; };

    a a a a a a a a

    b b b b c c c c

    b b b b m 4B

    a a a a a a a a

    c c c c m 4B

    b b b b c c c c

    a a a a a a a a

  • VC &

    BB

    20 20

    Cc lu v cu trc

    Lu

    Kiu cu trc c nh ngha lm khun dng cn bin cu trc c khai bo s dng khun dng nh ngha.

    Trong C++, c th b t kha struct khi khai bo bin (hoc s dng typedef)

    Khi nhp cc bin kiu s thc trong cu trc phi nhp thng qua mt bin trung gian.

    D liu kiu cu trc

    struct SDiem2D { float m_nX, m_nY; } diem2D1; float fTam; scanf(%f, &fTam); diem2D1.m_nX = fTam;

  • VC &

    BB

    21 21

    Mng cu trc

    Mng cu trc

    Tng t nh mng vi kiu d liu c s (char, int, float, )

    D liu kiu cu trc

    struct SDiem2D { int m_nX; int m_nY; }; SDiem2D arr1[20]; SDiem2D arr2[10] = {{3, 2}, {4, 4}, {2, 7}};

  • VC &

    BB

    22 22

    Truyn cu trc cho hm

    Truyn cu trc cho hm

    Ging nh truyn kiu d liu c s

    Tham tr (khng thay i sau khi kt thc hm)

    Tham chiu

    Con tr

    V d

    D liu kiu cu trc

    struct SDiem2D { int m_nX, m_nY; }; void xuat1(int x, int y) { }; void xuat2(SDiem2D diem2D) { }; void xuat3(SDiem2D &diem2D) { }; void xuat4(SDiem2D *diem2D) { };

  • VC &

    BB

    23 23

    Hp nht union

    Khi nim

    c khai bo v s dng nh cu trc

    Cc thnh phn ca union c chung a ch u (nm chng ln nhau trong b nh)

    Khai bo

    D liu kiu cu trc

    union { ; ; };

  • VC &

    BB

    24 24

    0 1 2 3 4

    So snh struct v union

    V d

    D liu kiu cu trc

    struct SMyStruct { char c; int n; } s; s.c = 1; s.n = 2;

    union UMyUnion { char c; int n; } u; u.c = 1; u.n = 2;

    01 02 00 00 00

    c n

    c

    n

    0 1 2 3

    01 02 00 00 00

  • VC &

    BB

    25 25

    V d

    struct trong union

    D liu kiu cu trc

    union date_tag { char full_date[9]; struct { char month[2]; char break_value1; char day[2]; char break_value2; char year[2]; } part_date_tag; } date = {29/12/82};

  • VC &

    BB

    26 26

    V d

    union trong struct

    D liu kiu cu trc

    struct generic_tag { char type; union { char c; int i; float f; } share_tag; };

  • VC &

    BB

    27 27

    Bi tp

    Phn s

    Khai bo kiu d liu phn s (SPhanSo)

    Nhp/Xut phn s

    Rt gn phn s

    Tnh tng, hiu, tch, thng hai phn s

    Kim tra phn s ti gin

    Quy ng hai phn s

    Kim tra phn s m hay dng

    So snh hai phn s

    D liu kiu cu trc

  • VC &

    BB

    28 28

    Bi tp

    n thc

    Khai bo kiu d liu n thc (SDonThuc)

    Nhp/Xut n thc

    Tnh tch, thng hai n thc

    Tnh o hm cp 1 ca n thc

    Tnh o hm cp k ca n thc

    Tnh gi tr n thc ti x = x0

    D liu kiu cu trc

  • VC &

    BB

    29 29

    Bi tp

    a thc

    Khai bo kiu d liu a thc (SDaThuc)

    Nhp/Xut a thc

    Tnh tng, hiu, tch hai a thc

    Tnh o hm cp 1 ca a thc

    Tnh o hm cp k ca a thc

    Tnh gi tr n thc ti x = x0

    D liu kiu cu trc

  • VC &

    BB

    30 30

    Bi tp

    im trong mt phng Oxy

    Khai bo kiu d liu im (SDiem)

    Nhp/Xut ta im

    Tnh khong cch gia hai im

    Tm im i xng qua gc to /trc Ox/Oy

    Kim tra im thuc phn t no?

    Tam gic

    Khai bo kiu d lu tam gic (STamGiac)

    Nhp/Xut tam gic

    Tnh chu vi, din tch tam gic D liu kiu cu trc

  • VC &

    BB

    31 31

    Bi tp

    Ngy

    Khai bo kiu d liu ngy (SNgay)

    Nhp/Xut ngy (ngy, thng, nm)

    Kim tra nm nhun

    Tnh s th t ngy trong nm

    Tnh s th t ngy k t ngy 1/1/1

    Tm ngy trc , sau k ngy

    Tnh khong cch gia hai ngy

    So snh hai ngy

    D liu kiu cu trc

  • VC &

    BB

    32 32

    Bi tp

    Mng phn s

    Nhp/Xut n phn s

    Rt gn mi phn s

    m s lng phn s m/dng trong mng

    Tm phn s dng u tin trong mng

    Tm phn s nh nht/ln nht trong mng

    Sp xp mng tng dn/gim dn

    D liu kiu cu trc

  • VC &

    BB

    33 33

    Bi tp

    Mng im

    Nhp/Xut n im

    m s lng im c honh dng

    m s lng im khng trng vi cc im khc trong mng

    Tm im c honh ln nht/nh nht

    Tm im gn gc ta nht

    D liu kiu cu trc