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); } }