Last active
May 25, 2019 15:02
-
-
Save zzzz465/d5d0993982280ac437b8cee744efc027 to your computer and use it in GitHub Desktop.
메인에압축시켜넣은거
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int main() | |
{ | |
int data[100][7] = {0}, n, code, koScore, EnScore, MathScore, input, KoScoreMin = 100, EnScoreMin = 100, MathScoreMin = 100, KoScoreMax = 0, EnScoreMax = 0, MathScoreMax = 0, KoScoreSum = 0, EnScoreSum = 0, MathScoreSum = 0; | |
scanf("%d", &n); // 몇줄짜리 데이터를 받는지 n에 저장합니다 | |
for(int count = 0; count < n; count++) // 0부터 n-1까지 "n번" 반복합니다 | |
{ | |
scanf(" %d %d %d %d", &code, &koScore, &EnScore, &MathScore); // 학번, 국어, 영어, 수학 성적을 받습니다 | |
data[count][0] = code; //학번 | |
data[count][1] = koScore; // 국어 | |
data[count][2] = EnScore; // 영어 | |
data[count][3] = MathScore; // 수학 | |
data[count][4] = koScore + EnScore + MathScore; // 3개의 성적의 합산을 저장 | |
data[count][5] = data[count][4] / 3; // 합산된 성적을 3으로 나눠 평균을 구함 | |
data[count][6] = GradeEval(data[count][5]); // GradeEval 함수를 이용하여 등급을 계산, 문자를 int형으로 저장 | |
MaxEval(koScore, &KoScoreMax); // MaxEval 함수를 이용하여, 만약 현재 학생의 국어 성적(koScore)이 최고로 높은 국어 성적(koScoreMax) 보다 높으면, koScoreMax에 값을 저장 | |
MaxEval(EnScore, &EnScoreMax); // 이하 동일 | |
MaxEval(MathScore, &MathScoreMax); // 이하 동일 | |
MinEval(koScore, &KoScoreMin); // MinEval 함수를 이용하여, 만약 현재 학생의 국어 성적(koScore)이 최고로 낮은 국어 성적(koScoreMax) 보다 낮으면, koScoreMin에 값을 저장 | |
MinEval(EnScore, &EnScoreMin); // 이하 동일 | |
MinEval(MathScore, &MathScoreMin); // 이하 동일 | |
KoScoreSum += koScore; // 모든 학생들의 평균을 구해야하니까, 모든 학생의 국어 성적을 모아두는 KoScoreNum에 현재 학생의 점수를 저장 | |
MathScoreSum += MathScore; // 동일 | |
EnScoreSum += EnScore; // 동일 | |
} | |
// 메타데이터(데이터에 대한 데이터)를 설정해줍니다. 지금까지 모아둔 자료들을 활용합니다. | |
data[n][1] = KoScoreMin; | |
data[n][2] = EnScoreMin; | |
data[n][3] = MathScoreMin; | |
data[n+1][1] = KoScoreMax; | |
data[n+1][2] = EnScoreMax; | |
data[n+1][3] = MathScoreMax; | |
data[n+2][1] = KoScoreSum / n; | |
data[n+2][2] = EnScoreSum / n; | |
data[n+2][3] = MathScoreSum / n; | |
while(1) | |
{ | |
printf("type 0, 1 or 2\n1 -> print data of all students\n2 -> get student's code and return value. if the value isn't right, raise error\n"); | |
scanf(" %d", &input); // 0부터 2까지 입력받습니다 | |
switch (input) // 스위치문 | |
{ | |
case 0: | |
return 0; // 0을 입력받을경우, return을 통하여 main 탈출 | |
case 1: | |
for(int count = 0; count < n; count++) // 0부터 n-1번까지 n개의 학생의 데이터를 읽어옵니다 | |
{ | |
printf("%d %d %d %d %d %d %c\n", data[count][0], data[count][1], data[count][2], data[count][3], data[count][4], data[count][5], (char)data[count][6]); // data[count][6]에는 학생의 등급이 int형으로 저장되어있으므로, (char) 명시적 형변환을 통해서 문자로 바꿔줍니다. | |
} | |
for(int count = n; count < n+3; count++) // n번부터 n+2번까지는 모든 학생의 최고, 평균, 최저 등의 메타데이터를 담고있습니다. | |
{ | |
printf("%d %d %d %d\n", data[count][0], data[count][1], data[count][2], data[count][3]); | |
} | |
break; | |
case 2: | |
printf("학생의 학번을 입력해주세요 : "); | |
scanf(" %d", &input); printf("\n"); // 학번을 입력받습니다, (printf는 줄넘김을 위하여 사용) | |
for(int count = 0; count < n; count++) | |
{ | |
if(data[count][0] == input) // 만약 | |
printf("%d %d %d %d %d %d %c\n", data[count][0], data[count][1], data[count][2], data[count][3], data[count][4], data[count][5], (char)data[count][6]); // data[count][6]에는 학생의 등급이 int형으로 저장되어있으므로, (char) 명시적 형변환을 통해서 문자로 바꿔줍니다. | |
break; //만약 해당하는 학생이 있을경우, 값을 출력하고 break을 통해 switch 문을 빠져나옵니다. 이후 while(1)에 의해 다시 처음으로 돌아갑니다. | |
} | |
printf("Not Valid\n"); // 만약 위의 조건에 해당하는 학생이 없을경우, break문이 실행되지 않으므로 여기로 내려옵니다. | |
break; | |
default: | |
printf("error"); // 문제에서 제시한 구현대상은 아니지만, 임의로 넣었습니다. | |
} | |
} | |
} | |
void MaxEval(int value, int* p) | |
{ *p = (*p < value) ? value : *p; } | |
void MinEval(int value, int *p) | |
{ *p = (*p > value) ? value : *p;} | |
int GradeEval(int Score) | |
{ if (Score >= 90) | |
return 'A'; | |
else if (Score >= 80) | |
return 'B'; | |
else if (Score >= 70) | |
return 'C'; | |
else if (Score >= 60) | |
return 'D'; | |
else | |
return 'F';} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment