Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. /*
  2. 학생 성적 및 등수 출력 with struct
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. struct Student
  7. {
  8.     int *scores;
  9.     int avg;
  10. };
  11. void getAverage(struct Student *arr, int numStu, int numSubj);
  12. void printRank(struct Student *arr, int numStu, int numSubj);
  13.  
  14. int main(int argc, char **argv)
  15. {
  16.     if (argc != 3)
  17.     {
  18.         printf("Usage : [학생 수] [과목 수]\n");
  19.         return 1;
  20.     }
  21.     struct Student *stus;
  22.  
  23.     int i, j, input, sum = 0;
  24.  
  25.     int subject = atoi(argv[2]);
  26.     int students = atoi(argv[1]);
  27.     /* int maxscore = 100;
  28.     int subject = 5;
  29.     int students = 5; */
  30.  
  31.     printf("학생 수: %d // 과목 수: %d\n", students, subject - 1);
  32.  
  33.     stus = (Student *)malloc(sizeof(Student) * students);
  34.     for (i = 0; i < students; ++i)
  35.     {
  36.         (&stus[i])->scores = (int *)malloc(sizeof(int) * subject);
  37.     }
  38.     for (i = 0; i < students; ++i)
  39.     {
  40.         printf("학생 %d 의 점수 ------------\n", i + 1);
  41.         for (j = 0; j < subject; ++j)
  42.         {
  43.             struct Student *A;
  44.             A = &stus[i];
  45.             printf("과목 %d 점수 입력 : ", j + 1);
  46.             scanf("%d", &input);
  47.             A->scores[j] = input;
  48.         }
  49.     }
  50.     getAverage(stus, students, subject);
  51.     printRank(stus, students, subject);
  52.  
  53.     for (i = 0; i < students; i++)
  54.     {
  55.         free((&stus[i])->scores);
  56.     }
  57.     free(stus);
  58.  
  59.     return 1;
  60. }
  61.  
  62. void getAverage(struct Student *arr, int numStu, int numSubj)
  63. {
  64.     int i, j, sum, avg;
  65.     for (i = 0; i < numStu; ++i)
  66.     {
  67.         sum = 0;
  68.         for (j = 0; j < numSubj; ++j)
  69.         {
  70.             sum += (&arr[i])->scores[j];
  71.         }
  72.         (&arr[i])->avg = sum / numSubj;
  73.         printf("학생 %d의 평균 점수 : %d\n", i + 1, (&arr[i])->avg);
  74.     }
  75. }
  76.  
  77. void printRank(struct Student *arr, int numStu, int numSubj)
  78. {
  79.     int i, j, rank;
  80.     for (i = 0; i < numStu; ++i)
  81.     {
  82.         rank = 1;
  83.         for (j = 0; j < numStu; ++j)
  84.         {
  85.             if ((&arr[i])->avg < (&arr[j])->avg)
  86.                 rank++;
  87.         }
  88.         printf("학생 %d의 등수 : %d\n", i + 1, rank);
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement