Как задать цикл для нахождения числа студентов-ударников - C (СИ)
Формулировка задачи:
Дано задание, список студентов в структуре, структура вводится с клавиатуры, надо найти кол-во ударников. Не могу понять, как задать цикл для нахождения числа ударников.
Что тут не так? В конце получается, что g и h равны 0.
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <conio.h>
- #include <string.h>
- #define MAX 100
- struct Program
- {
- char name[MAX];
- int num_gr;
- int physic;
- int matan;
- int linal;
- int terver;
- };
- void main ()
- {
- int i, n;
- float h;
- int g = 0;
- printf ("Vvedite col-vo studentov ");
- scanf ("%i", &n);
- struct Program p[10];
- for (i=0; i<n; i++){
- printf ("Vvedite FIO studenta ", i);
- scanf ("%s", &p[i].name);
- printf ("Vvedite nomer gruppi ", i);
- scanf ("%i", &p[i].num_gr);
- printf ("Vvedite ball po fizike ", i);
- scanf ("%i", &p[i].physic);
- printf ("Vvedite ball po matany ", i);
- scanf ("%i", &p[i].matan);
- printf ("Vvedite ball po linaly ", i);
- scanf ("%i", &p[i].linal);
- printf ("Vvedite ball po tervery ", i);
- scanf ("%i", &p[i].terver);
- }
- do
- {
- if((p[i].physic >=4) && (p[i].matan >=4) && (p[i].linal >=4) && (p[i].terver >=4)){
- g++;
- i++;
- printf("%f", g);
- }
- else
- {
- i++;
- }
- }
- while (i<n);
- h = (g/n)*100;
- printf("kol-vo procentov %n");
- printf ("%f", h);
- }
Решение задачи: «Как задать цикл для нахождения числа студентов-ударников»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <conio.h>
- #include <string.h>
- #define MAX 100
- struct Program
- {
- char name[MAX];
- int num_gr;
- int physic;
- int matan;
- int linal;
- int terver;
- };
- void main ()
- {
- int i, n;
- float h;
- printf ("Vvedite col-vo studentov ");
- scanf ("%i", &n);
- struct Program p[10];
- for (i=0; i<n; i++){
- printf ("Vvedite FIO studenta ", i);
- scanf ("%s", &p[i].name);
- printf ("Vvedite nomer gruppi ", i);
- scanf ("%i", &p[i].num_gr);
- printf ("Vvedite ball po fizike ", i);
- scanf ("%i", &p[i].physic);
- printf ("Vvedite ball po matany ", i);
- scanf ("%i", &p[i].matan);
- printf ("Vvedite ball po linaly ", i);
- scanf ("%i", &p[i].linal);
- printf ("Vvedite ball po tervery ", i);
- scanf ("%i", &p[i].terver);
- }
- i = 0;
- int g = 0;
- do
- {
- if((p[i].physic >=4) && (p[i].matan >=4) && (p[i].linal >=4) && (p[i].terver >=4)){
- g++;
- i++;
- printf("%f", g);
- }
- else
- {
- i++;
- }
- }
- while (i<n);
- h = (g/n)*100;
- printf("kol-vo procentov %n");
- printf ("%f", h);
- }
Объяснение кода листинга программы
В этом коде задача состоит в том, чтобы найти количество студентов-ударников в группе. Список действий:
- Ввод количества студентов: с помощью функции
scanf
вводится количество студентов (переменнаяn
). - Ввод данных о каждом студенте: в цикле
for
происходит ввод данных о каждом студенте (имя, номер группы, оценки по физике, математике, линейке и теории вероятности). - Проверка на условие: в цикле
do-while
происходит проверка, является ли студент ударником (оцены по всем предметам >= 4). Если да, то переменнаяg
увеличивается на 1. - Вывод количества студентов-ударников в процентах: после окончания цикла
do-while
, вычисляется и выводится процент студентов-ударников. Коды ошибок: - Если во время ввода данных пользователь введет символ
carriage return
(возврат каретки), то все последующие вызовы функцииscanf
будут читать данные из предыдущего ввода. - Если во время ввода данных пользователь введет некорректные данные (например, не число или число больше максимально допустимого значения), то программа может аварийно завершиться.
- Если количество студентов-ударников будет равно 0, то программа может аварийно завершиться из-за деления на ноль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д