Как задать цикл для нахождения числа студентов-ударников - 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, то программа может аварийно завершиться из-за деления на ноль.