fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. struct Student {
  6. char surname[100];
  7. int group_num;
  8. int grades[3];
  9. };
  10.  
  11.  
  12.  
  13.  
  14. float avg_grade(struct Student* students, int num_students, int group_num, int subject) {
  15. float total = 0;
  16. int counter = 0;
  17.  
  18.  
  19. for (int i = 0; i < num_students; i++) {
  20.  
  21. if (students[i].group_num == group_num) {
  22.  
  23.  
  24. total += students[i].grades[subject - 1];
  25. counter++;
  26. }
  27. }
  28.  
  29.  
  30. if (counter == 0) {
  31. return 0.0;
  32. }
  33.  
  34. return total / counter;
  35. }
  36.  
  37. int main() {
  38.  
  39. int num_students = 3;
  40.  
  41.  
  42. struct Student* students = (struct Student*)malloc(sizeof(struct Student) * num_students);
  43.  
  44.  
  45. if (students == NULL) {
  46. printf("Помилка виділення пам'яті!\n");
  47. return 1;
  48. }
  49.  
  50.  
  51. for (int i = 0; i < num_students; i++) {
  52. printf("--- Студент %d ---\n", i + 1);
  53.  
  54. printf("Введіть прізвище: ");
  55.  
  56.  
  57. scanf(" %99s", students[i].surname);
  58.  
  59. printf("Номер групи: ");
  60. scanf("%d", &students[i].group_num);
  61.  
  62. printf("Оцінка 1: ");
  63. scanf("%d", &students[i].grades[0]);
  64.  
  65. printf("Оцінка 2: ");
  66. scanf("%d", &students[i].grades[1]);
  67.  
  68. printf("Оцінка 3: ");
  69. scanf("%d", &students[i].grades[2]);
  70. }
  71.  
  72.  
  73.  
  74.  
  75. printf("\n--- dict_of_grades (еквівалент) ---\n");
  76. for (int i = 0; i < num_students; i++) {
  77. printf("%s: [%d, %d, %d]\n",
  78. students[i].surname,
  79. students[i].grades[0],
  80. students[i].grades[1],
  81. students[i].grades[2]);
  82. }
  83.  
  84.  
  85.  
  86. printf("\n--- dict_of_groups (еквівалент) ---\n");
  87. for (int i = 0; i < num_students; i++) {
  88. printf("Група %d: %s: [%d, %d, %d]\n",
  89. students[i].group_num,
  90. students[i].surname,
  91. students[i].grades[0],
  92. students[i].grades[1],
  93. students[i].grades[2]);
  94. }
  95.  
  96.  
  97. printf("\n--- Список боржників (оцінка < 3) ---\n");
  98. int debtors_found = 0;
  99.  
  100. for (int i = 0; i < num_students; i++) {
  101.  
  102. if (students[i].grades[0] < 3 || students[i].grades[1] < 3 || students[i].grades[2] < 3) {
  103. printf("%s (Група: %d)\n", students[i].surname, students[i].group_num);
  104. debtors_found = 1;
  105. }
  106. }
  107.  
  108. if (debtors_found == 0) {
  109. printf("Боржників немає!\n");
  110. }
  111.  
  112.  
  113. float init_mean = -1.0;
  114. char best_student[100];
  115. best_student[0] = '\0';
  116.  
  117. for (int i = 0; i < num_students; i++) {
  118.  
  119. float mean = (float)(students[i].grades[0] + students[i].grades[1] + students[i].grades[2]) / 3.0;
  120.  
  121. if (mean > init_mean) {
  122. init_mean = mean;
  123.  
  124.  
  125. int j = 0;
  126. while (students[i].surname[j] != '\0') {
  127. best_student[j] = students[i].surname[j];
  128. j++;
  129. }
  130. best_student[j] = '\0';
  131. }
  132. }
  133.  
  134. printf("\nНайкращий студент: %s (середній бал: %.2f)\n", best_student, init_mean);
  135.  
  136.  
  137.  
  138. int input_group;
  139. int input_subject;
  140.  
  141. printf("\n--- Розрахунок середнього балу ---\n");
  142. printf("Введіть номер групи: ");
  143. scanf("%d", &input_group);
  144. printf("Введіть номер предмету (1-3): ");
  145. scanf("%d", &input_subject);
  146.  
  147. float avg = avg_grade(students, num_students, input_group, input_subject);
  148. printf("Середня оцінка з предмету %d у групі %d: %.2f\n", input_subject, input_group, avg);
  149.  
  150.  
  151.  
  152. free(students);
  153.  
  154. return 0;
  155. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
--- Студент 1 ---
Введіть прізвище: Номер групи: Оцінка 1: Оцінка 2: Оцінка 3: --- Студент 2 ---
Введіть прізвище: Номер групи: Оцінка 1: Оцінка 2: Оцінка 3: --- Студент 3 ---
Введіть прізвище: Номер групи: Оцінка 1: Оцінка 2: Оцінка 3: 
--- dict_of_grades (еквівалент) ---
: [0, 0, 0]
: [0, 0, 0]
: [0, 0, 0]

--- dict_of_groups (еквівалент) ---
Група 0: : [0, 0, 0]
Група 0: : [0, 0, 0]
Група 0: : [0, 0, 0]

--- Список боржників (оцінка < 3) ---
 (Група: 0)
 (Група: 0)
 (Група: 0)

Найкращий студент:  (середній бал: 0.00)

--- Розрахунок середнього балу ---
Введіть номер групи: Введіть номер предмету (1-3): Середня оцінка з предмету 0 у групі 0: 0.00