티스토리 뷰
피트니스 센터의 회원관리 프로그램을 만듭니다.
신규회원이 등록하면 회원번호, 이름, 체중을 입력하여 동적 할당 영역에 저장합니다.
회원번호로 음수를 입력하면 입력작업을 마치고,
총 회원수와 평균 체중을 출력합니다.
또 이어서 최고 체중을 갖는 회원의 정보를 출력합니다.
최대 등록 회원수는 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 |