Chỉång VII : Dỉỵ liãûu kiãøu cáúu trục Trang 86
Ch−¬ng VII.
DỈỴ LIÃÛU KIÃØU CÁÚU TRỤC
I.
Kiãøu cáúu trục:
I.1.
Khai bạo v khåíi tảo kiãøu biãún cáúu trục :
Mng l táûp håüp gäưm cạc pháưn tỉí cọ cng kiãøu. Khi ta mún tảo kiãøu dỉỵ liãûu m cạc
pháưn tỉí ca chụng cọ kiãøu khạc nhau nhỉng cọ sỉû liãn kãút våïi nhau, ta sỉí dủng kiãøu struct.
Máùu : struct tãn_kiãøu_cáúu_trục
{ khai bạo cạc thnh pháưn (cạc trỉåìng)
};
Vê dủ : struct khach
{ char ten[20];
char diachi[100];
int tuoi;
int dienthoai;
};
Ta cọ mäüt kiãøu måïi l kiãøu khach gäưm cạc trỉåìng ten, diachi, tuoi v dienthoai.
Khai bạo v khåíi tảo biãún :
struct khach khach_thu_1 = {“Nguyen Van A”,”Da Nang”,20,888888};
Ta cng cọ thãø khai bạo biãún cng lục våïi kiãøu nhỉ sau:
struct khach
{ char ten[20];
char diachi[100];
int tuoi;
int dienthoai;
struct ngay ngaysinh;
int gioitinh;
float hsluong;
}nguoi1;
I.2.
Truy cáûp âãún cạc pháưn tỉí ca mäüt biãún kiãøu cáúu trục :
Máùu : tãn_biãún.tãn_pháưn_tỉí
Vê dủ : strcpy(khach_thu_1.ten,”Tran Van B”);
khach_thu_1.tuoi=40;
printf(“Tuoi cua %s la %d”, khach_thu_1.ten, khach_thu_1.tuoi);
Ta cọ thãø gạn biãún cáúu trục ny cho biãún cáúu trục khạc cọ cng kiãøu :
khach_thu_2= khach_thu_1;
Ta cọ thãø khåíi tảo biãún cáúu trục tỉì lục khai bạo nhỉ khåíi tảo mng:
khach khach_1={“John”,”17 Le Duan, Da Nang”,40,876543};
Våïi cạc cáúu trục läưng nhau ta cng truy cáûp tỉång tỉû.
Vê dủ : nguoi1.ngaysinh.nam
Ta cọ thãø sỉí dủng phẹp toạn láúy âëa chè âäúi våïi thnh pháưn cáúu trục
Vê dủ : scanf(“%d”,&khach_thu_1.tuoi);
Våïi thnh pháưn cáúu trục khäng ngun, ta nháûp thäng qua biãún trung gian.
I.3.
Thnh pháưn kiãøu field:
Khi ta mún cọ âỉåüc cạc thnh pháưn ngun giạ trë nh, tiãút kiãûm bäü nhåï thç ta dng
kiãøu field. Cạc pháưn tỉí âỉåüc âënh nghéa âỉåïi dảng cạc bit cọ dáúu hồûc khäng dáúu. Âäü di ca
mäùi trỉåìng khäng vỉåüt quạ 16 bit.
struct bit_field
{ int bit_1 : 1;
int bits_2_to_5 : 4;
int bit_6 : 1;
int bits_7_to_16 : 10;
} bit_var;
Âãø lỉu trỉỵ ta âäü ca 20 âiãøm ta dng mng :
diem taphop[20]= { {2,3},
{3,4}
};
Cng nhỉ mng khạc, mng cáúu trục cng âỉåüc âạnh säú thỉï tỉû tỉì 0.
Âãø truy cáûp vo cạc pháưn tỉí ca mng :
taphop[3].x=4;
taphop[3].y=6;
Cng nhỉ cạc biãún cáúu trục, ta cọ thãø gạn cạc pháưn tỉí ca mng cho nhau v cho cạc
biãún cáúu trục âån.
Chụ : thỉåìng khäng âỉåüc sỉí dủng phẹp toạn láúy âëa chè âäúi våïi cạc thnh pháưn ca
mng cáúu trục.
Âãø cáúp phạt bäü nhåï hiãûu qu, ta dng hm malloc:
diem *d;
int sodiem;
d=(diem *)malloc(sodiem*sizeof(diem));
I.6.
Cáúu trục v hm :
Chuøn tỉìng pháưn tỉí ca biãún cáúu trục hồûc c biãún cáúu trục cho hm :
Chổồng VII : Dổợ lióỷu kióứu cỏỳu truùc Trang 89
ham1(diem1.x);
ham2(diem1.y);
Ta coù thóứ chuyóứn õởa chố cuớa tổỡng phỏửn tổớ cho haỡm.
ham1(&diem1.x);
ham2(&diem1.y);
Vờ duỷ :
{ int i , diem ;
p = lop ;
for ( i = 0 ; i < n ; i++)
{ printf("\nNhap Ho ten nguoi thu %d : " , i + 1 ) ; gets ( p->ten);
printf ( " diem = " ) ; scanf ( "%d" , &diem ) ; p->diem = diem ;
Chổồng VII : Dổợ lióỷu kióứu cỏỳu truùc Trang 90
printf ("%c", getchar()); /* khu stdin */
p++ ;
}
}
/* Ham sap xep*/
void sapxep ( int n, kieuHV lop[ ])
{ int i , j ; kieuHV tam ;
for ( i = 0 ; i < n-1 ; i++)
for ( j=i + 1 ; j< n ; j++)
if ( lop[i].diem < lop[j].diem )
{ tam = lop[i] ; lop[i] = lop [j] ; lop [j] = tam ; }
}
/* ham in danh sach */
void inds( int n, kieuHV lop[] )
{ int i ;
for ( i = 0 ; i < n ; i++ )
{ printf ("%20s%5d ", lop[i].ten,lop[i].diem );
printf ("\n") ; /* xuong hang */
}
}
/* chuong trinh chinh */