본문 바로가기

C언어/자료구조

2-2 구조체란?

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