Вывести фамилии студентов, которые не получают стипендию и их перечень дисциплин - 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;
}

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

  1. В начале программы объявляются две переменные: статический массив res размером 128x128 и переменная res_top для отслеживания количества заполненных элементов массива.
  2. Далее программа запрашивает у пользователя количество студентов и сохраняет это значение в переменную students_count.
  3. Затем следует цикл for, который выполняется для каждого студента. Внутри цикла объявляются переменные name, group, mark, grant, которые используются для хранения информации о студенте.
  4. Если средний балл студента (mark) больше или равен 4.0, то программа запрашивает стипендию и сохраняет ее значение в переменную grant. В противном случае, программа сохраняет в массив res имя студента и информацию о его предметах.
  5. После окончания цикла программа выводит на экран информацию о студентах, которые не получают стипендию, в формате Имя студента: Группа: Mark: Subjects count: Subject 1 Name: Mark 1, Subject 2 Name: Mark 2, ....
  6. В конце программы происходит инициализация переменных res[i][strlen(res[i]) - 2] и res_top равной 0.
  7. Затем программа выводит на экран все строки, хранящиеся в массиве res, с помощью функции puts.
  8. Программа завершается возвратом значения 0.

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

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