Распечатать анкетные данные студентов, получивших в последнюю сессию оценки 2 - C (СИ)
Формулировка задачи:
Распечатать анкетные данные студентов, получивших в последнюю сессию оценки 2. си
Исходные данные: программа вводит информацию о 10 студентах: фамилию, день, месяц и год рождения, оценки двух последних сессий, если в каждой сессии по 8 предметов.
доделайле плиз
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
struct STUDENT
{
char students [50];
int point1[8];
int point2[8];
}
int main ()
{
int i,j;
STUDENT gruppa[50];
const char*pName[20]={"Mali","Necheparenko","Kumachev","Nikitin","Gnzich","Bova","Kozirev","Kondratuk","Phenichkin","Bastrygin"};
struct STUDENT stud [10];
for(int i=0;i<10;i++)
{
strcpy_s(gruppa[i].point1,10,pName[i]);
}
for (int j=0;j<8;j++)
{
stud[i].point1[j]=rand()%5;
stud[i].point2[j]=rand()%5;
printf("\n Sredni ball %d:\nNige srednego:",gruppa[i].point1[i],gruppa[i].point2[j]);
}
for (int i=0; i<10; i++)
{
for(int j=0; j<8; j++)
if(stud[i].point1[j]==5) ;
}
printf("Sredni ball: %d");
for (int i=0; i<10; i++)
{
for(int j=0; j<8; j++)
if (gruppa[i].point1[j]==4 || stud[i].point1[j]==5) ;
}
printf("\n Nige srednego: %d процентов");
/*FILE *f;
f=fopen("input.dat","wb");
fwrite(stud,sizeof(STUDENT),10,f);*/
printf("Press any key...");
getch ();
return 0;
}Решение задачи: «Распечатать анкетные данные студентов, получивших в последнюю сессию оценки 2»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define STUD 3
#define PRED 2
struct stud {
char fam[80 + 1];
char vik[80 + 1];
int print;
}
part1[STUD + 1];
struct sesion {
int ses1[PRED];
int ses2[PRED];
}
part2[STUD];
void printCheck(int ball, int i)
{
if( (ball <= 2) && (part1[i].print != 1) )
{
part1[i].print = 1;
}
}
main()
{
int i, j, cnt = 0;
system("cls");
for(i = 1; i <= STUD; i++)
{
printf("vvedit prizvuwe %d studenta:\n", i);
scanf("%s", part1[i].fam);
printf("vvedit rik narodchenny %d studenta:\n", i);
scanf("%s", part1[i].vik);
}
printf("\n"); system("pause");
for(i = 1; i <= STUD; i++)
{
for(j = 1; j <= PRED; j++)
{
printf("Vvedit %d ocinku dl9 studenta %s za 1 sesiyu: ", j, part1[i].fam);
scanf("%d", &part2[i].ses1[j-1]);
printCheck(part2[i].ses1[j-1], i);
}
}
for(i = 1; i <= STUD; i++)
{
for(j = 1; j <= PRED; j++)
{
printf("Vvedit %d ocinku dl9 studenta %s za 2 sesiyu: ", j, part1[i].fam);
scanf("%d", &part2[i].ses2[j-1]);
printCheck(part2[i].ses2[j-1], i);
}
}
printf("---------------------------------------------------------------\n");\
printf("| PRIZVUWE | DATA NAR | OCINKU ZA 1 SESI}0 | OCINKU ZA 2 SESI}0 |\n");
printf("---------------------------------------------------------------\n");
for(i = 1; i <= STUD; i++)
{
if(part1[i].print)
{
printf("%s\t %s\t", part1[i].fam, part1[i].vik);
for(j = 1; j <= PRED; j++)
{
printf("%d;",part2[i].ses1[j-1]);
}
printf("\t\t\t");
for(j = 1; j <= PRED; j++)
{
printf("%d;",part2[i].ses2[j-1]);
}
printf("\n");
cnt++;
}
}
if(cnt)
printf("\nKilkist studentiv v jakuh o4inka <= 2: %d\n", cnt);
else
printf("\nStudentu v jakuh o4inka <= 2 vidsutni!\n");
getch();
return 0;
}
Объяснение кода листинга программы
В данном коде реализована программа для хранения и печати анкетных данных студентов. Структура данных включает в себя фамилию и имя студента, а также оценки, полученные им на двух последних сессиях. Код содержит следующие основные элементы:
- Ввод данных: сначала программа запрашивает и сохраняет фамилию и имя каждого студента (индекс от 1 до STUD).
- Оценки за первую сессию: затем программа запрашивает и сохраняет оценки каждого студента за первую сессию (индекс от 1 до PRED). Здесь также вызывается функция printCheck, которая проверяет, была ли получена оценка 2, и если да, то устанавливает флаг print в 1 для данного студента.
- Оценки за вторую сессию: аналогично происходит ввод оценок за вторую сессию.
- Печать данных: после ввода всех данных программа выводит список студентов, которые получили оценку 2 или ниже на обеих сессиях. В этом списке выводятся фамилия, имя, оценки за первую и вторую сессию для каждого студента.
- Подсчет количества студентов с оценкой 2 или ниже: в конце программы подсчитывается количество студентов, у которых установлен флаг print. Если это количество больше 0, то выводится сообщение о количестве таких студентов и их фамилиях. Если же таких студентов нет, выводится соответствующее сообщение. Стоит отметить, что код не содержит обработки ошибок и проверки на конец строки при вводе, что является хорошей практикой программирования. Также в коде используется устаревший ввод-вывод с помощью функций scanf и printf без использования fflush, что может привести к проблемам с точностью ввода.