기타
<18> Q4. Do it C언어 입문
도라몬즈
2020. 8. 20. 14:31
#include<stdio.h>
#include<stdlib.h>
typedef struct person {
char Name[14];
int Korean;
int English;
int Math;
int Sum;
struct person *next;
} Person;
void AddScore(Person **head, Person **tail, int *count)
{
if(*head != NULL){
(*tail)->next = (Person *)malloc(sizeof(Person));
*tail = (*tail)->next;
}else{
*head = (Person *)malloc(sizeof(Person));
*tail = *head;
}
printf("%d 번째 학생 이름: ",*count+1);
scanf("%s",(*tail)->Name);
printf("국어 점수: ");
scanf("%d",&(*tail)->Korean);
printf("영어 점수: ");
scanf("%d",&(*tail)->English);
printf("수학 점수: ");
scanf("%d",&(*tail)->Math);
(*tail)->Sum = (*tail)->Korean + (*tail)->English + (*tail)->Math;
*count=*count+1;
}
void PrintGrade(Person **head, int count)
{
if(count) {
Person **p = head;
Person *arr = (Person *)malloc(sizeof(Person) * count);
Person temp;
int check=1;
for (int i = 0; i < count*sizeof(Person); i+=sizeof(Person)) {
*(arr + i) = **p;
*p = (*p)->next;
}
while(check){
check = 0;
for (int i = 0; i < count*sizeof(Person); i+=sizeof(Person)) {
for (int j = i + sizeof(Person); j < count*sizeof(Person); j+=sizeof(Person)) {
if ((arr + i)->Sum < (arr + j)->Sum) {
temp = *(arr + i);
*(arr + i) = *(arr + j);
*(arr + j) = temp;
check++;
}
}
}
}
printf("------------------------------------\n");
printf(" 이름 국어 영어 수학 총점 평균 등수\n");
printf("------------------------------------\n");
for (int i = 0; i < count*sizeof(Person); i+=sizeof(Person)) {
printf(" %3s %3d %3d %3d %3d %3d %d등\n", (arr + i)->Name, (arr + i)->Korean, (arr + i)->English,
(arr + i)->Math, (arr + i)->Sum, ((arr + i)->Sum) / 3, i/sizeof(Person) + 1);
}
}else{
printf("입력된 값 없음\n");
}
}
void main()
{
Person *Mhead = NULL, *Mtail = NULL;
char num;
int count = 0;
while(num!='3') {
printf("[Menu]\n1. 성적 입력\n2. 성적 확인\n3. 종료\n__________\n선택 (1 ~ 3) :");
scanf("%c", &num);
fflush(stdin);
if(num=='1') AddScore(&Mhead, &Mtail, &count);
else if (num=='2') PrintGrade(&Mhead, count);
else if (num=='3') printf("프로그램이 종료됨");
else{
printf("비정상 값 입력됨\n");
num = 0;
}
}
}