SLIDE1

Sunday, January 4, 2015

KIỂU CẤU TRÚC struct TRONG NGÔN NGỮ LẬP TRÌNH C

KIỂU CẤU TRÚC TRONG NGÔN NGỮ LẬP TRÌNH C

kiểu cấu trúc là dạng dữ liệu thường được định nghĩa để mô tả dữ liệu trong lập trình c có nhiều thành thược nhiều kiểu dữ liệu khác nhau
kiểu dữ liệu thành phần cso thể là cá kiêu dữ liệu cơ bản, thậm chí là cấu trúc, mảng,...
kiểu cấu trúc được định nghĩa thông qua từ kháo struct
cú pháp:
struct <tên cấu trúc>
{
danh sách các thành phần và kiểu dữ liệu cảu chúng
};
có thể dặt lại tên hoặc là làm cho tên ngắn gọn la dùng thêm từ khóa định nghĩa typedef
ví dụ:
typedef struct hocsinh
{
char ten[20];
int *namhoc;
} hs;
các thao tác như mảng, con trỏ,hàm trên biến cấu trúc hoàn toàn giống như biến thông thường
để truy xuất đến 1 phần tử của cấu trúc ta dùng toán tử chấm "." và dùng toán tử "->" đối với thành phần và biến con trỏ.
ví dụ:
hs ok;
ok.ten="Tran khanh toan";
ok->namhoc = 2015;
không nên dùng toán tử & đối thành phần cấu trúc
ví dụ:
struct hocvien
{
char ten[20];
int *diem;
};
hociven hv;
hocvien *hv2;
truy xuất như sau:
hv.ten="Tran Khanh Toan";
hv->diem = 8;
hv2[1].ten = "Tran Khanh Toan";
hv2[2]->diem = 9;
ví dụ minh họa:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tagHOCSINH
{
char sHoTen[50];
float fVan, fToan;
float fDTB;
}HOCSINH, *PTR_HOCSINH;

void NhapHS(PTR_HOCSINH phs, int stt);
void XuatHS(HOCSINH hs, int stt);
void main()
{
int i, nSoHS;
PTR_HOCSINH pDSHS;
printf("So luong hoc sinh: ");
scanf_s("%d", &nSoHS);
pDSHS = (PTR_HOCSINH)calloc(nSoHS, sizeof(HOCSINH));
if (pDSHS == NULL) return;
for (i = 0; i<nSoHS; i++)
NhapHS(&pDSHS[i], i);
for (i = 0; i<nSoHS; i++)
XuatHS(pDSHS[i], i);
if (pDSHS) free(pDSHS);
_getch();
}
void NhapHS(PTR_HOCSINH phs, int stt)
{
char hoten[50];
float van, toan;
_flushall();
printf("\nHoc sinh thu %d:", stt + 1);
printf("\nHo Ten: ");
gets_s(hoten);
printf("Diem van: ");
scanf_s("%f", &van);
printf("Diem toan: ");
scanf_s("%f", &toan);
strcpy_s(phs->sHoTen, hoten);
phs->fVan = van;
phs->fToan = toan;
phs->fDTB = (float)(van + toan) / 2;
}
void XuatHS(HOCSINH hs, int stt)
{
printf("\n\nHoc sinh thu %d: %s",
stt + 1, hs.sHoTen);
printf("\nVan %.1f, Toan %.1f. DTB %.1f",
hs.fVan, hs.fToan, hs.fDTB);
}