Вывести фамилии студентов, которые не получают стипендию и их перечень дисциплин - C (СИ)
Формулировка задачи:
4. Дан список студентов. Общие поля: Ф.И.О., дата рождения, группа, средний балл. Если средний балл 4 и выше, то указать размер стипендии. Если средний балл ниже, то указать перечень дисциплин с оценками. Вывести фамилии студентов, которые не получают стипендию и их перечень дисциплин.
Что-то начал
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <clocale>
using namespace std;
struct stud
{
char familiy [30],data[6],gruppa[4];
double srball;
union ball
{
char *predmet[4];
double stependia;
}
}
int main ()
{
switch (ball)
case 1:<<"Выше 4" << ;
case 2:<<"Ниже 4" << ; break
return 0;
getch ();
}Решение задачи: «Вывести фамилии студентов, которые не получают стипендию и их перечень дисциплин»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main() {
static char res[128][128];
int res_top = 0;
printf("Students count: "); // Количество студентов
fflush(stdout);
int students_count;
scanf("%d", &students_count);
int i, k;
for (i = 0; i < students_count; i++) {
char name[128];
printf("Student %d\nName: ", i + 1); // Имя студента
fflush(stdout);
gets(name);
gets(name);
char group[128];
printf("Group: "); // Группа
fflush(stdout);
scanf("%s", group);
double mark;
printf("Mark: "); // Средний балл
fflush(stdout);
scanf("%lf", &mark);
if (mark >= 4.0) {
double grant;
printf("Grant: "); // Стипендия
fflush(stdout);
scanf("%lf", &grant);
} else {
strcpy(res[res_top], name);
int j = strlen(name);
strcpy(res[res_top] + j, ": ");
j += 2;
printf("Subjects count: "); // Количество предметов
fflush(stdout);
int subjects_count;
scanf("%d", &subjects_count);
for (k = 0; k < subjects_count; k++) {
char name[128];
printf("Subject %d\nName: ", i + 1); // Название предмета
fflush(stdout);
scanf("%s", name);
strcpy(res[res_top] + j, name);
j += strlen(name);
strcpy(res[res_top] + j, ", ");
j += 2;
int mark;
printf("Mark: "); // Оценка
fflush(stdout);
scanf("%d", &mark);
}
res_top++;
}
}
for (i = 0; i < res_top; i++) {
res[i][strlen(res[i]) - 2] = 0;
puts(res[i]);
}
return 0;
}
Объяснение кода листинга программы
- В начале программы объявляются две переменные: статический массив
resразмером 128x128 и переменнаяres_topдля отслеживания количества заполненных элементов массива. - Далее программа запрашивает у пользователя количество студентов и сохраняет это значение в переменную
students_count. - Затем следует цикл
for, который выполняется для каждого студента. Внутри цикла объявляются переменныеname,group,mark,grant, которые используются для хранения информации о студенте. - Если средний балл студента (
mark) больше или равен 4.0, то программа запрашивает стипендию и сохраняет ее значение в переменнуюgrant. В противном случае, программа сохраняет в массивresимя студента и информацию о его предметах. - После окончания цикла программа выводит на экран информацию о студентах, которые не получают стипендию, в формате
Имя студента: Группа: Mark: Subjects count: Subject 1 Name: Mark 1, Subject 2 Name: Mark 2, .... - В конце программы происходит инициализация переменных
res[i][strlen(res[i]) - 2]иres_topравной 0. - Затем программа выводит на экран все строки, хранящиеся в массиве
res, с помощью функцииputs. - Программа завершается возвратом значения 0.