Тема: Пропозиції і скарги)
Доброго дня всім!
Виконав завдання яке дали в коледжі (На С). Викладачі подивилися і сказали "Добре добре, молодець"
А я хочу просто дізнатись чи можна було зробити краще і компактніше, одним словом крити, щоб люди які мають певний досвід, вказали на мої помилки.
Ось завдання:
Написати програму аналізу середньої успішності чотирьох студентів по чотирьох предметах за сесію на основі структурного типу даних. Виконаєте усереднювання оцінок для кожного студента.
1. Передбачите введення назв предметів (математичний аналіз, алгебра і т.(д.) і визначите їх у вигляді ініціалізаторів структури.
2. Застосуєте оператора typedef для визначення структурного типу даних.
3. Розташуєте прізвища (з іменами) студентів в порядку зростання їх середнього балу за сесію.
І моє вирішення:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#define N 40
typedef struct
{
char student_name[N];
char student_surname[N];
char student_group[N];
char predmet[N];
float score1;
float score2;
float score3;
float score4;
float SR;
} book;
int main()
{
char name[] = {"Name"};
char surname[] = {"Surname"};
char group[] = {"Group"};
char score[] = {"Score"};
printf("Enter the number of students: ");
unsigned int n;
scanf("%i", &n);
if (n < 4)
{
printf("Minimum number of students is 4!");
return 1;
}
book students[n], t;
printf("Enter Subjects:\n");
for (int i = 0; i < 4; i++)
{
printf("Subject #%i: ", i + 1);
scanf("%s", &students[i].predmet);
}
printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet);
for (int i = 0; i < n; i++)
{
scanf("%s %s %s %f %f %f %f", &students[i].student_name, &students[i].student_surname, &students[i].student_group, &students[i].score1, &students[i].score2, &students[i].score3, &students[i].score4);
if (students[i].score1 > 12 || students[i].score1 < 1 || students[i].score2 > 12 || students[i].score2 < 1 || students[i].score3 > 12 || students[i].score3 < 1 || students[i].score4 > 12 || students[i].score4 < 1)
{
printf("You enter wrong score!");
return 1;
}
}
printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet);
for (int i = 0; i < n; i++)
printf("%-12s %-12s %-12s %-12.0f %-12.0f %-12.0f %-12.0f \n", students[i].student_name, students[i].student_surname, students[i].student_group, students[i].score1, students[i].score2, students[i].score3, students[i].score4);
for (int i = 0; i < n; i++)
{
students[i].SR = (students[i].score1 + students[i].score2 + students[i].score3 + students[i].score4) / 4;
}
printf("\nAverage grade of students (column Score)\n");
printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet, score);
for (int i = 0; i < n; i++)
printf("%-12s %-12s %-12s %-12.0f %-12.0f %-12.0f %-12.0f %-12.1f \n", students[i].student_name, students[i].student_surname, students[i].student_group, students[i].score1, students[i].score2, students[i].score3, students[i].score4, students[i].SR);
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
if (students[j + 1].SR > students[j].SR)
{
t = students[j];
students[j] = students[j + 1];
students[j + 1] = t;
}
printf("\nStudents are ranked in order of increasing the grade point average per session\n");
printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet, score);
for (int i = 0; i < n; i++)
printf("%-12s %-12s %-12s %-12.0f %-12.0f %-12.0f %-12.0f %-12.1f \n", students[i].student_name, students[i].student_surname, students[i].student_group, students[i].score1, students[i].score2, students[i].score3, students[i].score4, students[i].SR);
printf("\n\n Press any key: ");
_getch();
return 0;
}
І результат:
P.S Так, я користувався Google Translate :3