Определить среднюю оценку ученика и всего класса - 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; (завершение работы программы)