티스토리 뷰

피트니스 센터의 회원관리 프로그램을 만듭니다.

신규회원이 등록하면 회원번호, 이름, 체중을 입력하여 동적 할당 영역에 저장합니다.

회원번호로 음수를 입력하면 입력작업을 마치고,

총 회원수와 평균 체중을 출력합니다.

또 이어서 최고 체중을 갖는 회원의 정보를 출력합니다.

최대 등록 회원수는 100명으로 제한하며 다음 구조체와 함수를 참고하여 작성합니다.

typedef struct
{
	double weight;	//회원번호
	int num;		//이름
	char name[20];	//체중
} Fitness;

int inputMember(Fitness **ppFitn);					//전체 회원 등록 수 반환
double averageWeight(Fitness **ppFitn, int count);	//평균 체중 반환
int maxWeight(Fitness** Fitn, int count);			//최대 체중 회원의 배열 index 반환
void printInfo(Fitness** ppFitn, int index);		//회원 정보 출력
void freeAry(Fitness** ppFitn, int count);			//동적 할당 영역 해제

다음은 실행결과입니다.

/*
실행결과

회원번호 : 1
이름 입력 : 홍길동
체중 입력 : 65.7
회원번호 : 2
이름 입력 : 이순신
체중 입력 : 84.5
회원번호 : 3
이름 입력 : 서하윤
체중 입력 : 45.9
회원번호 : -1
# 총 회원 수 : 3
# 평균 체중 : 65.4
# 체중이 가장 무거운 회원은?
회원 번호 : 2
이름 : 이순신
체중 : 84.5
*/

다음은 제가 작성한 코드입니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
	double weight;	//회원번호
	int num;		//이름
	char name[20];	//체중
} Fitness;

int inputMember(Fitness **ppFitn);					//전체 회원 등록 수 반환
double averageWeight(Fitness **ppFitn, int count);	//평균 체중 반환
int maxWeight(Fitness** ppFitn, int count);			//최대 체중 회원의 배열 index 반환
void printInfo(Fitness** ppFitn, int index);		//회원 정보 출력
void freeAry(Fitness** ppFitn, int count);			//동적 할당 영역 해제

void main(void)
{
	Fitness* pFitn[100];

	int count = inputMember(pFitn);
	
	double avgWeight;
	avgWeight = averageWeight(pFitn, count);

	int index;
	index = maxWeight(pFitn, count);
	//printf("index = %d\n", index);

	printf("# 총 회원수 : %d\n", count);
	printf("# 평균 체중 : %.1lf\n", avgWeight);
	printf("# 체중이 가장 무거운 회원은?\n");
	printInfo(pFitn, index);

	void freeAry(pFitn, count);
}

int inputMember(Fitness** ppFitn)
{
	int count = 0;

	//회원 정보를 입력하는 로직
	for (int i = 0; i < 100; i++)
	{
		int userNum;
		char userName[20];
		double userWeight;

		printf("회원 번호 : ");
		scanf("%d", &userNum);

		if (userNum < 0) break;

		getchar();
		printf("이름 입력 : ");
		fgets(userName, 20, stdin);
		userName[strlen(userName) - 1] = '\0';

		printf("체중 입력 : ");
		scanf("%lf", &userWeight);

		//동적 영역 할당
		*ppFitn= (Fitness*)malloc(sizeof(Fitness));
		if (*ppFitn == NULL)
		{
			printf("메모리가 부족합니다.\n");
			exit(1);
		}

		(*ppFitn)->num = userNum;
		strcpy((*ppFitn)->name, userName);
		(*ppFitn)->weight = userWeight;
		count++;
		ppFitn++;
	}

	return count;
}

double averageWeight(Fitness** ppFitn, int count)
{
	double avgweight = 0;

	for (int i = 0; i < count; i++)
	{
		avgweight += (*ppFitn)->weight;
		ppFitn++;
	}

	return avgweight / count;
}

int maxWeight(Fitness** ppFitn, int count)
{
	int index = 0;

	for (int i = 0; i < count; i++)
	{
		if (ppFitn[i]->weight > ppFitn[index]->weight)
		{
			index = i;
		}
	}

	return index;
}

void printInfo(Fitness** ppFitn, int index)
{
	printf("회원 번호 : %d\n", ppFitn[index]->num);
	printf("이름 : %s\n", ppFitn[index]->name);
	printf("체중 : %.1lf\n", ppFitn[index]->weight);
}

void freeAry(Fitness** ppFitn, int count)
{
	for (int i = 0; i < count; i++)
	{
		free(*ppFitn);
		ppFitn++;
	}
}

/*
실행결과

회원 번호 : 1
이름 입력 : 홍길동
체중 입력 : 65.7
회원 번호 : 2
이름 입력 : KOEY
체중 입력 : 84.5
회원 번호 : 3
이름 입력 : 이순신
체중 입력 : 45.9
회원 번호 : -1
# 총 회원수 : 3
# 평균 체중 : 65.4
# 체중이 가장 무거운 회원은?
회원 번호 : 2
이름 : KOEY
체중 : 84.5
*/

포인터의 활용에만 주의한다면 나머지는 어렵지 않습니다.

'공부 일지 > C언어 공부 일지' 카테고리의 다른 글

다양한 파일 입출력 함수  (0) 2021.02.01
파일 입출력  (0) 2021.02.01
사용자 정의 자료형 실전 문제1  (0) 2021.01.31
구조체 활용, 공용체, 열거형  (0) 2021.01.31
사용자 정의 자료형2  (0) 2021.01.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함