1. 구조체
- 구조체 (structure)
- 임의의 데이터를 다시 조합하여 만드는 자료구조
- 구조체 태그 (structure tag) : 구조체에 붙는 이름(xyz)
- 구조체 멤버 (structure member) : 구조체를 구성하는 요소
//구조체 xyz
struct xyz {
int x; //int형 멤버
long y; //long형 멤버
double z; //double형 멤버
};
//struct xyz형 a의 정의
struct xyz a;
//a를 가리키는 포인터
struct xyz *p = &a;
- 구조체의 객체 안 멤버는 .연산자를 사용하여 접근
a.x //객체 이름.멤버이름( 객체 a안의 멤버 x)
- p가 구조체형 객체에 대한 포인터일때 p가 가리키는 객체의 멤버 x에 접근하는 형식은 -> 연산자 사용
p->x //포인터 이름 -> 멤버 이름(p가 가리키는 객체 안의 멤버 x)
- struct xyz에 대하여 typedef이름인 동의어 XYZ 정의
typedef struct xyz XYZ; //struct xyz와 동의어인 XYZ를 선언
XYZ a; //XYZ형(struct xyz형)의 a
XYZ *p =&a; //a를 가리키는 XYZ*형(struct xyz형)의 포인터 p
2. 구조체 배열로 구현하기
- 신체검사 데이터를 구조체 배열로 구현
//신체검사 데이터용 구조체 배열
#include <stdio.h>
#define VMAX 21 //시력의 최대값 2.1X10
//신체검사 데이터형
typedef struct {
char name[20]; //이름
int height; //키
double vision; //시력
}PhysCheck;
//키의 평균값
double ave_height(const PhysCheck dat[], int n)
{
double sum=0;
for(int i=0; i<n; i++)
sum+= dat[i].height;
return sum/n;
}
//시력 분포
void dist_vision(const PhysCheck dat[], int n, int dist[])
{
for(int i=0; i < VMAX; i++)
dist[i]=0;
for(int i=0; i<n; i++)
if(dat[i].vision >=0.0 && dat[i].vision <= VMAX/10.0)
dist[(int)(dat[i].vision*10)]++;
}
int main(void)
{
PhysCheck x[] = {
{"박현규", 162,0.3},
{"함진아", 173,0.7},
{"최윤미", 175,2.0},
{"홍연의", 171,1.5},
{"이수진", 168,0.4},
{"김영준", 174,1.2},
{"박용규", 169,0.8}
};
int nx = sizeof(x)/sizeof(x[0]); //사람수
int vdist[VMAX];
puts("===신체검사표===");
puts(" 이름 키 시력 ");
puts("------------------------");
for(int i =0; i < nx; i++)
printf("%-18.18s%4d%5.1\n", x[i].name, x[i].height, x[i].vision);
printf("\n평균 키:%5.1f cm\n", ave_height(x,nx));
dist_vision(x,nx,vdist);
printf("\n시력 분포\n");
for(int i=0; i <VMAX; i++)
printf("%3.1f~:%2d 명\n", i/10.0, vdist[i]);
return 0;
}
'C언어 > 자료구조' 카테고리의 다른 글
3-2장 선형 검색 (0) | 2023.07.25 |
---|---|
3-1장 검색 알고리즘이란? (0) | 2023.07.25 |
2-1장 배열(2) (0) | 2023.07.24 |
2-1 장 배열(1) (0) | 2023.04.08 |
1장 기본 알고리즘 (0) | 2023.04.06 |