Определить среднюю оценку ученика и всего класса - C (СИ)

Узнай цену своей работы

Формулировка задачи:

известны оценки каждого из 20-ти учеников по 12 предметам. Определить среднюю оценку ученика и всего класса. Вывести фамилии учеников чья средняя оценка выше средней по классу. Решить через структуры.

Решение задачи: «Определить среднюю оценку ученика и всего класса»

textual
Листинг программы
#include <stdio.h>
#define NUM 20 /* количество студентов */
#define PREDM 12 /* количество предметов */
typedef struct /* структура для ученика */
{
    char name [16]; /*поле под имя ученика*/
    int ball[PREDM]; /*массив оценок*/
    int avr; /*поле под средний балл*/
}Student;
 
int main(void)
{
    Student s[NUM]={0};
    int i,j; /*переменные-счетчики*/
    int cavr=0;  /*переменная под среднюю класса*/
    for (i=0;i<NUM;i++) /*заполняем сведения*/
    {
        printf("%s","Please enter name:");
        fflush(stdin);
        gets(s[i].name);
        for (j=0;j<PREDM;j++)
        {
            printf("%s#%d:","Exam",j+1);
            scanf("%d",&s[i].ball[j]);
            s[i].avr+=s[i].ball[j];
        }
        s[i].avr/=PREDM; /*нашли среднее ученика*/
        cavr+=s[i].avr; /*добавили к общеклассной сумме*/
    }
    cavr/=NUM; /* нашли среднее класса */
    printf("Average of class: %d\n",cavr);
    for (i=0;i<NUM;i++) /* ищем успевающих */
    {
        if(s[i].avr > cavr)
            printf("Name: %s | Average: %d",s[i].name,s[i].avr);
    }
    return 0;
}

Объяснение кода листинга программы

  1. Объявление переменных и структур — NUM (количество студентов) — PREDM (количество предметов) — Student (структура для ученика, содержит имя ученика и массив оценок)
  2. Создание массива структур Student — s[NUM]={0} (инициализация всех элементов массива структур Student нулями)
  3. Ввод данных — for (i=0;i<NUM;i++) (счетчик для прохождения по всем студентам) — printf(%s,Please enter name:); (вывод приглашения для ввода имени студента) — fflush(stdin); (очистка буфера ввода) — gets(s[i].name); (ввод имени студента) — for (j=0;j<PREDM;j++) (счетчик для прохождения по всем предметам) — printf(%s#%d:,Exam,j+1); (вывод приглашения для ввода оценки по предмету) — scanf(%d,&s[i].ball[j]); (ввод оценки по предмету) — s[i].avr+=s[i].ball[j]; (сумма всех оценок студента)
  4. Вычисление среднего значения студента и класса — s[i].avr/=PREDM; (среднее значение студента) — cavr+=s[i].avr; (добавление среднего значения студента к общеклассной сумме) — cavr/=NUM; (среднее значение класса)
  5. Поиск студентов, успевающих больше среднего класса — for (i=0;i<NUM;i++) (счетчик для прохождения по всем студентам) — if(s[i].avr > cavr) (условие для вывода имени студента и его среднего значения, если они больше среднего класса) — printf(Name: %s | Average: %d,s[i].name,s[i].avr);
  6. Вывод результатов — printf(Average of class: %d\n,cavr); (среднее значение класса) — for (i=0;i<NUM;i++) (счетчик для прохождения по всем студентам) — if(s[i].avr > cavr) (условие для вывода имени студента и его среднего значения, если они больше среднего класса) — printf(Name: %s | Average: %d,s[i].name,s[i].avr); (вывод имени студента и его среднего значения, если они больше среднего класса)
  7. Завершение программы — return 0; (завершение работы программы)

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы