본문 바로가기

C\C++

구조체 실습과제 01

개요

성적처리 할 학생의 수를 사용자로부터 입력받고,
사용자가 입력한 수만큼의 학생에 대해 이름과 국어,영어,수학 성적을 입력받아
총점과 평균을 계산하여 출력하는 프로그램을 작성하세요.

 

Code

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

#define MAX_NAME 20
#define SUBJECTS 3

typedef struct Grade
{
	char name[MAX_NAME];
	int score[SUBJECTS];
	int total;
	double average;
}gr_t;
typedef enum SubjectName { kor, eng, math }Sub_e;
typedef enum ModeSelect { data_in, data_out }MS_e;

void InputGrade(gr_t* in, int index);
void PrintSubjectName(int name, int mode);
void PrintStudent(gr_t* out);

void PrintSubjectName(int name,int mode)
{
	char subName[10] = { 0 };
	switch (name)
	{
	case kor:
		strcpy_s(subName, (unsigned)sizeof(subName), "국어"); break;
	case eng:
		strcpy_s(subName, (unsigned)sizeof(subName), "영어"); break;
	case math:
		strcpy_s(subName, (unsigned)sizeof(subName), "수학"); break;
	default:
		strcpy_s(subName, (unsigned)sizeof(subName), "ERROR"); break;
	}
	printf("%s%s", subName,(mode==data_in)?" : ":"\t|");
}

void InputGrade(gr_t* in, int index)
{
	printf("이름 : ");
	scanf_s("%s", in[index].name, (unsigned)sizeof(in[index].name));
	in[index].total = 0;
	for (int i = 0; i < SUBJECTS; i++) {
		PrintSubjectName(i,data_in);
		scanf_s("%d", &in[index].score[i]);
		in[index].total += in[index].score[i];
	}
	in[index].average = in[index].total / SUBJECTS;
}
void PrintStudent(gr_t* out)
{
	printf("%s\t|", out->name);
	for (int i = 0; i < SUBJECTS; i++) {
		printf("%7d|", out->score[i]);
	}
	printf("%7d|", out->total);
	printf("%7.1lf|\n", out->average);
}

int main(void)
{
	int iStudent;
	gr_t* sPtr = NULL;
	printf("성적처리 할 학생 수를 입력하세요 :");
	scanf_s("%d", &iStudent);

	sPtr = (gr_t*)malloc((unsigned)sizeof(gr_t) * (iStudent + 1));

	for (int i = 0; i < iStudent; i++)
	{
		printf("************* %2d번째 학생 *************\n", i + 1);
		InputGrade(sPtr, i);
	}
	puts("------------------------------------------------");
	printf("이름\t|");
	for (int i = 0; i < SUBJECTS; i++)
	{
		PrintSubjectName(i,data_out);
	}
	printf("총점\t|평균\t|\n");
	puts("------------------------------------------------");
	for (int i=0;i<iStudent;i++){
		PrintStudent(&sPtr[i]);
	}
	puts("\n------------------------------------------------");
	
	free(sPtr);
	return 0;
}

Output

'C\C++' 카테고리의 다른 글

최대 최소 구하기(bubble sort)  (0) 2022.02.28
String 관련 예제  (0) 2022.02.27
Structure Input/Output  (0) 2022.02.22
소수 구하기 2  (0) 2022.02.18
소수 구하기  (0) 2022.02.17