Tải bản đầy đủ (.ppt) (18 trang)

KIỂU DỮ LIỆU CÓ CẤU TRÚC VÀ KIỂU DỮ LIỆU TỰ ĐỊNH NGHĨA TRONG C - CHƯƠNG 10 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (155.46 KB, 18 trang )

Giảng viên: Nguyễn Đức Hoàng
Bộ môn Điều Khiển Tự Động
Khoa Điện – Điện Tử
Đại Học Bách Khoa Tp.HCM
Email:
MÔN HỌC
MÔN HỌC
Nội dung môn học (10
Nội dung môn học (10
chương)
chương)
(14 tuần = 28 tiết LT + 14 tiết BT)
(14 tuần = 28 tiết LT + 14 tiết BT)
Chương 1: Ôn lại các kiến thức cơ bản về máy tính
Chương 2: Các kiểu dữ liệu và thao tác
Chương 3: Giới thiệu ngôn ngữ lập trình C
Chương 4: Các thành phần cơ bản và kiểu dữ liệu của
C
Chương 5: Các lệnh điều khiển và vòng lặp
Chương 6: Hàm
Chương 7: Lớp lưu trữ của biến - Sự chuyển kiểu
Chương 8: Mảng
Chương 9: Pointer
Chương 10: Kiểu dữ liệu có cấu trúc và kiểu tự định
nghĩa
Tài liệu tham khảo
Tài liệu tham khảo
Tài liệu:
Tài liệu:
Tin Học 2
Tin Học 2




Đặng Thành Tín
Đặng Thành Tín
Kỹ Thuật Lập Trình C
Kỹ Thuật Lập Trình C


GS. Phạm Văn Ất
GS. Phạm Văn Ất
Giáo Trình C
Giáo Trình C


Nguyễn Hữu Tuấn
Nguyễn Hữu Tuấn
Giáo trình BT Kỹ thuật lập trình
Giáo trình BT Kỹ thuật lập trình
C
C
Đánh giá
Đánh giá
Thi giữa kỳ : 20%
Thi cuối kỳ : 80%
CÁC KiỂU DỮ LiỆU CÓ CẤU TRÚC
CÁC KiỂU DỮ LiỆU CÓ CẤU TRÚC
KiỂU DỮ LiỆU TỰ ĐỊNH NGHĨA
KiỂU DỮ LiỆU TỰ ĐỊNH NGHĨA
CHƯƠNG 10
CHƯƠNG 10

Nội dung chương 10
Nội dung chương 10
10.1 Kiểu struct
10.2 Kiểu union
10.3 Kiểu enum
10.4 Định nghĩa kiểu bằng typedef
Kiểu struct
Kiểu struct
Khái niệm – Khai báo struct
Khái niệm – Khai báo struct
Cấu trúc (struct) là một kiểu dữ liệu phức hợp được tạo
từ các kiểu dữ liệu khác, các kiểu dữ liệu này được sử
dụng khai báo cho các biến thành phần của biến kiểu
struct
Cú pháp định nghĩa một cấu trúc
struct ten_cau_truc
{
khai báo các biến thành phần; (biến, mảng, cấu
trúc đã định nghĩa)
};
Khái niệm – Khai báo struct
Khái niệm – Khai báo struct
VD1:
struct ngay
{
unsigned
ngaythu;
unsigned thang;
unsigned nam;
};

VD2:
struct nhancong
{
char ten[15];
char diachi[40];
double bacluong;
struct ngay ngaysinh;
struct ngay
ngaycongtac;
};
Khái niệm – Khai báo struct
Khái niệm – Khai báo struct
Việc định nghĩa một cấu trúc mới chỉ báo cho bộ dịch
C biết là có một cấu trúc đã được định nghĩa, chứ chưa
cấp chỗ cho biến cấu trúc
Để có biến cấu trúc ta phải khai báo biến với kiểu cấu
trúc đã định nghĩa
Cú pháp khai báo một biến cấu trúc
struct ten_cau_truc ten_bien;
Để truy xuất đến một thành phần của biến cấu trúc ta
sử dụng toán tử chấm “.”
Khái niệm – Khai báo struct
Khái niệm – Khai báo struct
VD3: #include "conio.h” #include "stdio.h"
struct ngay
{ unsigned ng; unsigned th; unsigned na; };
main()
{ struct ngay ns; unsigned d,m,y;
printf("Moi nhap ngay sinh theo mau (dd mm yy): ");
scanf("%u%u%u",&d,&m,&y);

ns.ng = d; ns.th = m; ns.na = y;
printf("\nBan sinh ngay: %u/%u/
%u",ns.ng,ns.th,ns.na);
getch();
}
VD4:#include "conio.h” #include "stdio.h” #include
"string.h"
struct ngay
{ unsigned ng; unsigned th; unsigned na; };
struct sinhvien
{ char ht[30]; char mssv[10]; struct ngay ns; } sv;
main()
{ printf("Moi SV nhap: "); printf("\nHo ten: ");
gets(sv.ht);
printf("\nMSSV: "); gets(sv.mssv);
printf("\nNgay sinh (dd mm yy): ");
scanf("%u%u%u",&sv.ns.ng,&sv.ns.th,&sv.ns.na);
printf("\nSV %s co mssv %s \nsinh ngay: %u/%u/
%u", sv.ht,sv.mssv,sv.ns.ng,sv.ns.th,sv.ns.na);
getch(); }
Khái niệm – Khai báo struct
Khái niệm – Khai báo struct
C cho phép gán các cấu trúc cùng kiểu cho nhau qua
tên biến cấu trúc thay vì phải gán từng thành phần cho
nhau
C cho phép đối số của hàm là struct, được truyền theo
tham số trị
Kiểu struct có thể tính toán kích thước theo byte bằng
toán tử sizeof
VD5:#include "conio.h” #include "stdio.h” #include "string.h"

struct ngay
{ unsigned ng; unsigned th; unsigned na; } ;
struct sinhvien
{ char ht[30]; char mssv[10]; struct ngay ns; } sv,svc;
void in(struct sinhvien sv);
main()
{ printf("Moi SV nhap: "); printf("\nHo ten: "); gets(sv.ht);
printf("\nMSSV: "); gets(sv.mssv);
printf("\nNgay sinh (dd mm yy): ");
scanf("%u%u%u",&sv.ns.ng,&sv.ns.th,&sv.ns.na);
svc=sv; in(svc); getch(); }
void in(struct sinhvien sv)
{ printf("\nSV %s co mssv %s \nsinh ngay:\
%u/%u/%u",sv.ht,sv.mssv,sv.ns.ng,sv.ns.th,sv.ns.na); }
Mảng các struct
Mảng các struct
C cho phép khai báo mảng struct như mảng các kiểu
dữ liệu khác
Cú pháp: struct ten_struct
ten_bien_struct[kichthuoc];
VD:
struct sinhvien sv[5];
VD6 : #include "conio.h” #include "stdio.h” #include "string.h"
struct ngay { unsigned ng; unsigned th; unsigned na; } ;
struct sinhvien { char ht[30]; char mssv[10]; struct ngay ns; }
sv[3];
void in(struct sinhvien sv);
main() { int i;
for(i=0;i<3;i++) { printf("\nMoi SV thu %d nhap: ",i+1);
printf("\nHo ten: "); gets(sv[i].ht);

printf("\nMSSV: "); gets(sv[i].mssv);
printf("\nNgay sinh (dd mm yy): ");
scanf("%u%u%u",&sv[i].ns.ng,&sv[i].ns.th,&sv[i].ns.na);
flushall(); }
printf("\nDanh sach gom co %d SV:",i);
for(i=0;i<3;i++){ printf("\n%d.",i+1); in(sv[i]);} getch(); }
void in(struct sinhvien sv)
{ printf("SV %s co mssv %s sinh ngay:\
%u/%u/%u",sv.ht,sv.mssv,sv.ns.ng,sv.ns.th,sv.ns.na); }
Pointer tới một struct
Pointer tới một struct
Một biến struct sau khi khai báo sẽ có một địa chỉ xác
định trong bộ nhớ. Có thể lấy địa chỉ này bằng toán tử
&
Địa chỉ này là một hằng pointer trỏ đến đầu của cấu
trúc, ta có thể khai báo một pointer trỏ tới một cấu trúc
Cú pháp: struct ten_struct *ten_pointer;
VD:
struct sinhvien sv,msv[5],*psv;
psv = &sv;
psv = msv;
VD7 : #include "conio.h” #include "stdio.h” #include
"string.h"
struct ngay { unsigned ng; unsigned th; unsigned na; };
struct sinhvien { char ht[30]; char mssv[10]; struct ngay ns;}
sv[3],*psv;
void nhap(struct sinhvien *psv); void xuat(struct sinhvien sv);
main() { int i; psv=sv; for(i=0;i<3;i++){
printf("\nMoi SV thu %d nhap: ",i+1); nhap(psv+i);
flushall(); }

printf("\nDanh sach gom co %d SV:",i);
for(i=0;i<3;i++){ printf("\n%d.",i+1); xuat(sv[i]); }
getch(); }
void nhap(struct sinhvien *psv)
{ printf("\nHo ten: "); gets(psv->ht); printf("\nMSSV: ");
gets(psv->mssv); printf("\nNgay sinh (dd mm yy): ");
scanf("%u%u%u",&psv->ns.ng,&psv->ns.th,&psv->ns.na);}
void xuat(struct sinhvien sv)
{ printf("SV %s co mssv %s sinh ngay:\
%u/%u/%u",sv.ht,sv.mssv,sv.ns.ng,sv.ns.th,sv.ns.na);}

×