rueki
1. 구조체 본문
728x90
반응형
구조체 : 임의의 데이터를 다시 조합하여 만드는 자료구조
개인의 데이터를 같은 인덱스 욧에 저장하도록 프로그램에서 관리하는 것은 어렵다.
사람의 키와 시력 데이터를 가지고 예를 들어보자
이름 | 몸무게 | 시력 |
박현규 | 162 | 0.3 |
함진아 | 173 | 0.7 |
최윤미 | 175 | 2.0 |
이수진 | 168 | 0.4 |
이름 , 몸무게, 시력의 열이 각각 하나의 배열로 구성되어 있다고 생각해보자.
이럴 때 각각의 배열에 접근을 해서 원소를 하나씩 빼내야하는 경우가 발생할 것이다.
박현규에 대한 몸무게와 시력을 알고 싶은데, 몸무게 배열과 시력 배열에 접근을 해서 가져와야 한다.
그래서 나온 것이 구조체 (Structure) 이다.
임의의 자료형의 요소를 조합하여 다시 만든 자료구조로서 구조체 선언에 대해 코드를 통해 보자.
//구조체 선언
struct xyz
{
int x;
long y;
double z;
};
//구조체 xyz형의 a 변수 정의
struct xyz a;
// a를 가리키는 포인터
struct xyz *p = &a;
구조체는 메인함수 밖에서 선언을 할 수가 있다.
a는 struct xyz 형을 갖는 객체를 정의한다.
객체 안의 멤버 접근에 대해서 알아보자.
a.x
// 객체 이름.멤버 이름(객체 a안의 멤버 x)
p->x
// 포인터 이름 -> 멤버이름 (p가 가리키는 객체 안의 멤버)
구조체는 typedef 라는 선언을 통해 이름을 다시 만들어 사용할 수가 있다.
여기까지 구조체 선언과 멤버 접근에 대해서 알아보았다.
이제 구조체의 배열을 구현해보자.
#include <stdio.h>
#define VMAX 21
typedef struct {
char name[20]; // 이름
int height; // 몸무게
double vision; // 시력
}PhysCheck;
// 키의 평균값 구하는 함수
double ave_height(const PhysCheck dat[], int n)
{
int i;
double sum = 0;
for (i = 0; i < n; i++)
{
sum += dat[i].height;
return sum / n;
}
}
// 시력 분포 구하기
void dist_vision(const PhysCheck dat[], int n, int dist[])
{
int i;
for (i = 0; i < VMAX; i++)
{
dist[i] = 0;
for (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)
{
int i;
PhysCheck x[] = {
{"박현규",162,0.3},
{"함진아",173,0.7},
{"최윤미",175,2.0},
{"홍연의",171,1.5},
{"이수진",168,0.4},
{"김영준",174,1.2},
};
int nx = sizeof(x) / sizeof(x[0]); // 배열 요소의 개수 구하기
int vdist[VMAX];
puts("--- 신체 검사표 ---");
puts(" 이름 키 시력 ");
puts("------------------------");
for (i = 0; i < nx; i++)
{
printf("%-18.18s%4d%5.1f\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);
for (i = 0; i < VMAX; i++)
{
printf("%3.1f ~ %2d명\n", i / 10.0, vdist[i]);
}
return 0;
}
728x90
반응형
'C,C++ 기초 및 자료구조' 카테고리의 다른 글
3.1 C++ STL 스택 (0) | 2020.03.11 |
---|---|
4. 큐 (Queue) (0) | 2020.03.08 |
3. 스택 (0) | 2020.03.05 |
2.2 이진 검색 (Binary Search) (0) | 2020.03.04 |
2.1 선형 검색 (Linear Search) (0) | 2020.03.01 |
Comments