[자료구조] : 구조체(C)

이번 시간에는 구조체에 대해 알아보자.

struct xyz{

   int x; // int형 멤버
   long y; // long형 멤버
   double z; // double형 맴버
}

struct xyz a; // struct xyz형 a의 정의

struct xyz *p  = &a; 

<구조체의 객체  멤버 접근 방법>
1. a.x
2. a.y
3. a.z

<p가 포인터  때, p가 가리키는 객체의 멤버에 접근하는 형식 '->' 사용>
1. p->x


<struct xyz에 대해서 typedef 이름인 동의어 XYZ를 정의할  있다.>
1. typedef struct xyz XYZ;
2. XYZ a; // XYZ형 (struct xyz형)의 a
3. XYZ *p = &a; // a를 가리키는 XYZ *형 (struct xyz*형)의 포인터 p

다음은 구조체를 활용한 예제를 보자.

#include <stdio.h>
#define VMAX 21


typedef struct
{
	char name[20];
	int height;
	double vision;


}pisik;

void dist_vision(const pisik 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)]++;
	


}

double ave_height(const pisik dat[], int n) // x와 nx
{
	int i = 0;
	double sum = 0;
	for (i = 0; i < n; i++)
		sum += dat[i].height;
	return sum / n;


}

int main(void)
{
	int i;
	pisik x[] = {
		{"오지환", 175, 0.3},
		{"이다솜", 163, 0.7},
		{"이구영", 180, 2.0},
		{"홍연의", 185, 1.5},
		{"이준우", 130, 0.4},
		{"유동훈", 145, 1.2},
		{"오지원", 191, 0.8}
	};
	int nx = sizeof(x) / sizeof(x[0]);
	//배열 x의 요소개수를 구한다.

	int vdist[VMAX];
	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);
	printf("\n 시력 분포 \n");
	for (i = 0; i < VMAX; i++)
	{
		printf("%3.1f ~ : %2d명\n", i / 10.0, vdist[i]);
	}
	return 0;


}

<결과>

<핵심코드1>

<main에서 호출>
printf("\n 평균 키 : %5.1f cm\n", ave_height(x, nx));


// 키의 평균값을 구한다.
double ave_height(const pisik dat[], int n) // x와 nx
{
	int i = 0;
	double sum = 0;
	for (i = 0; i < n; i++)
	sum += dat[i].height;
	return sum / n;

}

<핵심코드2>

<main에서 호출>
dist_vision(x, nx, vdist);
// vdist[21]; 분포를 저장하는 공간 

//시력 분포를 구한다.
void dist_vision(const pisik 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)]++;
	
}

좋은 웹페이지 즐겨찾기