Определить среднюю оценку ученика и всего класса - 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; }
Объяснение кода листинга программы
- Объявление переменных и структур — NUM (количество студентов) — PREDM (количество предметов) — Student (структура для ученика, содержит имя ученика и массив оценок)
- Создание массива структур Student — s[NUM]={0} (инициализация всех элементов массива структур Student нулями)
- Ввод данных
— 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; (среднее значение класса)
- Поиск студентов, успевающих больше среднего класса
— for (i=0;i<NUM;i++) (счетчик для прохождения по всем студентам)
— if(s[i].avr > cavr) (условие для вывода имени студента и его среднего значения, если они больше среднего класса)
— printf(
Name: %s | Average: %d
,s[i].name,s[i].avr); - Вывод результатов
— 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; (завершение работы программы)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д