[C언어 소스] 학생 성적 정렬(구조체, 입력한 학생 수만큼 동적 메모리 할당)

n명의 학생 정보를 입력받아 성적 순으로 내림차순으로 정렬하는 프로그램을 작성하시오.

/*https://ehpub.co.kr
  언제나 휴일
  언제나  C언어 예제 Center
  학생 성적 정렬 및 구조체 동적 메모리 할당*/

#include <stdio.h>
#include <stdlib.h>
#define MAX_NAME_LEN 20
#define SUM(stu) (stu.middle+stu.final)
typedef struct Student Student;
struct  Student
{
    char name[MAX_NAME_LEN];
    int snum;
    int middle;
    int final;
    //int total;
};
void Sort(Student* base, int n);
void View(Student* base, int n);
int main()
{
    int n = 0;
    Student* base = 0;
    int i = 0;

    printf("학생 수:");
    scanf_s("%d", &n);

    base = (Student*)malloc(sizeof(Student) * n);
    printf("학생 정보 입력: 번호 이름 중간고사 기말고사\n");
    for (i = 0; i < n; i++)
    {
        printf("%d번째 학생 정보", i + 1);
        scanf_s("%d %s %d %d", &base[i].snum, base[i].name, MAX_NAME_LEN, &base[i].middle, &base[i].final);
    }
    Sort(base, n);
    View(base, n);
    free(base);
    return 0;
}
void Sort(Student* base, int n)
{    
    Student temp;
    int i = 0, j = 0;
    for (i = n; i > 1; i--)
    {
        for (j = 1; j < i; j++)
        {
            if (SUM(base[j - 1]) < SUM(base[j]))
            {
                temp = base[j - 1];
                base[j - 1] = base[j];
                base[j] = temp;
            }
        }
    }

}
void View(Student* base, int n)
{
    int i= 0;
    printf("%4s| %8s| %4s| %4s| %4s| %s\n", "번호", "이름", "중간", "기말", "합계", "평균");
    for (i = 0; i < n; i++)
    {
        printf("%4d| %8s| %4d| %4d| %4d| %.1f\n",
            base[i].snum, base[i].name, base[i].middle, base[i].final, SUM(base[i]), SUM(base[i]) / 2.0);
    }
}
학생 성적 정렬 실행 화면
학생 성적 정렬 실행 화면