Вывести фамилии студентов, которые не получают стипендию и их перечень дисциплин - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д