Bài giảng Tin học đại cương - Phần 7: Struct

11/8/2010  
7. Struct  
Ni dung  
Khái nim vStruct  
Khai báo struct  
Truy nhp các trường trong struct  
Phép gán gia biến kiu struct  
Con trvà struct  
1
11/8/2010  
3. Cu trúc  
Kiu dliu cu trúc (struct) là kiu dliu phc hp bao  
gm nhiu thành phn, mi thành phn có ththuc nhng  
kiu dliu khác nhau.  
Ví d: khi cn lưu githông tin về  
mt dng đối tượng nào đó  
như đối tượng sinh viên chng hn,  
ta lưu gicác thông tin liên quan  
đến sinh viên như htên, tui,  
kết quhc tp…  
3.struct  
Khai báo kiu dliu cu trúc:  
Để khai báo mt kiu dliu cu trúc ta dùng cú pháp khai báo  
sau:  
struct tên_cu_trúc  
{
<khai báo các trường dliu>;  
};  
2
11/8/2010  
3.struct  
struct sinh_vien  
{
char masoSV[10];  
char hoten[30];  
float diem_TinDC;  
};  
struct point_3D  
{
float x;  
float y;  
float z;  
};  
3.struct  
Khai báo biến cu trúc:  
Để khai báo biến cu trúc ta dùng cú pháp khai báo sau  
struct tên_cu_trúc tên_biến_cu_trúc;  
Ví d:  
struct sinh_vien sv1, sv2;  
struct point_3D point1, point2;  
Câu lnh trên khai báo 2 biến ln lượt tên là sv1, sv2 có kiu  
dliu là cu trúc sinh_vien.  
3
11/8/2010  
3.struct  
Khai báo dùng tkhóa typedef  
typedef struct point_3D  
{
float x;  
float y;  
float z;  
} POINT;  
Khi khai báo biến chcn dùng POINT  
POINT x,y; (thay vì struct point_3D x,y;)  
Xlí dliu cu trúc  
Truy nhp các trường dliu ca cu trúc :  
Dliu ca mt biến cu trúc bao gm nhiu trường dliu, và  
các trường này độc lp vi nhau.  
Mun thay đổi ni dung dliu bên trong mt biến cu trúc ta  
cn truy nhp ti tng trường và thc hin thao tác cn thiết  
trên tng trường đó.  
tên_biến_cu_trúc.tên_trường  
Giờ đây ta có thđối xtên_biến_cu_trúc.tên_trường ging  
như mt biến thông thường,  
4
11/8/2010  
struct sinhvien  
{
char masoSV[10];  
char hoten[30];  
float diem;  
};  
int main(void)  
{
struct sinhvien a;  
strcpy(a.masoSV,"BK2456");  
strcpy(a.hoten,"Nguyen Van A");  
a.diem=7.6;  
printf("Ten : %s MasoSV: %s Diem: %0.2f \n",a.hoten,  
a. masoSV, a.diem);  
return 0;  
}
3.Struct  
Phép gán gia các biến cu trúc  
Phép gán cu trúc có cú pháp tương tnhư phép gán thông  
thường  
biến_cu_trúc_1 = biến_cu_trúc_2;  
Câu lnh trên sgán giá trca các trường trong  
biến_cu_trúc_2 cho các trường tương ng trong  
biến_cu_trúc_1.  
5
11/8/2010  
Mt sví dvstruct  
Chương trình xác định ngày tiếp theo, vi thi đim ngày nhp  
vào tbàn phím.  
#include <stdio.h>  
int main (void)  
{
struct date  
{
int month;  
int day;  
int year;  
};  
struct date today, tomorrow;  
const int daysPerMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31,  
30, 31, 30, 31 };  
printf ("Enter today's date (mm dd yyyy): ");  
scanf ("%i%i%i", &today.month, &today.day, &today.year);  
if ( today.day != daysPerMonth[today.month 1] ) {  
tomorrow.day = today.day + 1;  
tomorrow.month = today.month;  
tomorrow.year = today.year;  
}
else if ( today.month == 12 ) { // end of year  
tomorrow.day = 1;  
tomorrow.month = 1;  
tomorrow.year = today.year + 1;  
}
else { // end of month  
tomorrow.day = 1;  
tomorrow.month = today.month + 1;  
tomorrow.year = today.year;  
}
printf ("Tomorrow's date is %i/%i/%.2i.\n", tomorrow.month,  
tomorrow.day, tomorrow.year % 100);  
return 0;  
}
6
11/8/2010  
Khi to biến cu trúc  
Khi to giá trcho biến kiu struct  
struct date today = { 7, 2, 2010 };  
struct date today = { 7, 2 };  
struct date today = { .day=7,.year= 2010 }; (*)  
struct date today = { .year = 2011 }; (*)  
(*): chcó trong C99 (devC++, MSVC…)  
Lnh gán phc hp  
Gán giá trị đồng thi nhiu thành phn cho biến cu trúc (chcó  
trong C99)  
today = (struct date) { 9, 25, 2004 };  
today = (struct date) { .month = 9,  
.day = 25, .year = 2004 };  
7
11/8/2010  
Mng cu trúc  
Mng cu trúc : mi phn tca mng là mt cu trúc.  
struct date LichHen[3];  
LichHen[1].month = 11;  
LichHen[1].day=10;  
LichHen[1].year=2010;  
Khi to biến mng cu trúc  
struct date lichHen[3]={{12,11,2010},{25,11,2010},{5,12,2010}};  
struct date lichHen[3]={12,11,2010,25,11,2010,5,12,2010};  
Mng cu trúc  
int main()  
{
Đổ bnhớ đệm bàn phím  
struct sinhvien a[5];  
int i;  
for(i=0; i<5; i++)  
{
printf(ʺNhap sinh vien thu %d \nʺ,i+1);  
printf(ʺMa SV: ʺ); scanf(ʺ%sʺ,a[i].masoSV);  
printf(ʺHo ten: ʺ); fflush(stdin); gets(a[i].hoten);  
printf(ʺDiem: ʺ); scanf(ʺ%fʺ,&a[i].diem);  
}
for(i=0; i<5; i++)  
printf(ʺTen: %s MaSV: %s diem: %0.2f\nʺ,a[i].hoten,a[i].masoSV,a[i].diem);  
return 0;  
}
8
11/8/2010  
Struct cha struct  
struct date  
{
struct time  
{
int month;  
int day;  
int year;  
};  
int hour;  
int min;  
int sec;  
};  
struct dateTime  
{
struct date sDate;  
struct time sTime;  
};  
Struct cha struct  
struct dateTime event = {11,6,2010};  
event.sTime.hour =8;  
event.sTime.min =0;  
event.sTime.sec =0;  
printf("%.2i/%.2i/%.2i %.2i:%.2i:%.2i",  
event.sDate.month,event.sDate.day,event.sDate.year,  
event.sTime.hour,event.sTime.min,event.sTime.sec);  
9
11/8/2010  
Struct cha mng  
struct sinhvien  
{
char masoSV[10];  
char hoten[30];  
float diem;  
};  
Truy cp vào tng phn tca mng thành phn như vi biến  
mng thông thường.  
struct sinhvien sv;  
sv.masoSV[0]='B';  
sv.masoSV[1]='K';  
sv.masoSV[2]='H';  
sv.masoSV[3]='N';  
Bài tp  
Bài 1 : Định nghĩa cu trúc sinh viên (mã sinh viên, htên,  
lp, đim trung bình), nhp và in ra danh sách lp theo cu  
trúc sinh viên đó.  
Tìm và in ra màn hình thông tin vsinh viên có mã sinh  
viên do người dùng nhp vào tbàn phím.  
Tìm và in ra màn hình tên nhng sinh viên có đim  
trung bình ln hơn 5.  
10  
11/8/2010  
3.Struct  
Con trcu trúc  
Để khai báo mt biến con trcu trúc ta dùng cú pháp khai báo  
<tên cu trúc> * <tên biến con trcu trúc> ;  
Có 2 cách truy nhp vào trường dliu ca cu trúc tbiến con  
trcu trúc là  
(*<tên biến con trcu trúc>).<tên trường dliu>  
<tên biến con trcu trúc>><tên trường dliu>  
3.struct  
struct sinhvien a,b,*c;  
strcpy(a.masoSV,ʺBK2456ʺ);  
strcpy(a.hoten,ʺNguyen Van Aʺ);  
a.diem=7.6;  
printf(ʺTen : %s MasoSV: % s Diem: %0.2f \nʺ,a.hoten, a.masoSV, a.diem);  
b=a;  
printf(ʺTen : %s MasoSV: % s Diem: %0.2f \nʺ,b.hoten, b.masoSV, b.diem);  
c=(sinhvien*)malloc(sizeof(sinhvien));  
*c = b;  
printf(ʺTen : %s MasoSV: % s Diem: %0.2f \nʺ,c>hoten, c>masoSV, c>diem);  
11  
pdf 11 trang Thùy Anh 26/04/2022 8240
Bạn đang xem tài liệu "Bài giảng Tin học đại cương - Phần 7: Struct", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_phan_7_struct.pdf