Как задать цикл для нахождения числа студентов-ударников - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дано задание, список студентов в структуре, структура вводится с клавиатуры, надо найти кол-во ударников. Не могу понять, как задать цикл для нахождения числа ударников.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <conio.h>
  5. #include <string.h>
  6. #define MAX 100
  7. struct Program
  8. {
  9. char name[MAX];
  10. int num_gr;
  11. int physic;
  12. int matan;
  13. int linal;
  14. int terver;
  15. };
  16. void main ()
  17. {
  18. int i, n;
  19. float h;
  20. int g = 0;
  21. printf ("Vvedite col-vo studentov ");
  22. scanf ("%i", &n);
  23. struct Program p[10];
  24. for (i=0; i<n; i++){
  25. printf ("Vvedite FIO studenta ", i);
  26. scanf ("%s", &p[i].name);
  27. printf ("Vvedite nomer gruppi ", i);
  28. scanf ("%i", &p[i].num_gr);
  29. printf ("Vvedite ball po fizike ", i);
  30. scanf ("%i", &p[i].physic);
  31. printf ("Vvedite ball po matany ", i);
  32. scanf ("%i", &p[i].matan);
  33. printf ("Vvedite ball po linaly ", i);
  34. scanf ("%i", &p[i].linal);
  35. printf ("Vvedite ball po tervery ", i);
  36. scanf ("%i", &p[i].terver);
  37. }
  38. do
  39. {
  40. if((p[i].physic >=4) && (p[i].matan >=4) && (p[i].linal >=4) && (p[i].terver >=4)){
  41. g++;
  42. i++;
  43. printf("%f", g);
  44. }
  45. else
  46. {
  47. i++;
  48. }
  49. }
  50. while (i<n);
  51. h = (g/n)*100;
  52. printf("kol-vo procentov %n");
  53. printf ("%f", h);
  54. }
Что тут не так? В конце получается, что g и h равны 0.

Решение задачи: «Как задать цикл для нахождения числа студентов-ударников»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <conio.h>
  5. #include <string.h>
  6.  
  7. #define MAX 100
  8.  
  9. struct Program
  10. {
  11.   char name[MAX];
  12.   int num_gr;
  13.   int physic;
  14.   int matan;
  15.   int linal;
  16.   int terver;
  17. };
  18. void main ()
  19. {
  20.     int i, n;
  21.     float h;
  22.     printf ("Vvedite col-vo studentov ");
  23.     scanf ("%i", &n);
  24.         struct Program p[10];
  25.      for (i=0; i<n; i++){
  26.          printf ("Vvedite FIO studenta ", i);
  27.          scanf ("%s", &p[i].name);
  28.          printf ("Vvedite nomer gruppi  ", i);
  29.          scanf ("%i", &p[i].num_gr);
  30.          printf ("Vvedite ball po fizike  ", i);
  31.          scanf ("%i", &p[i].physic);
  32.          printf ("Vvedite ball po matany  ", i);
  33.          scanf ("%i", &p[i].matan);
  34.          printf ("Vvedite ball po linaly  ", i);
  35.          scanf ("%i", &p[i].linal);
  36.          printf ("Vvedite ball po tervery  ", i);
  37.          scanf ("%i", &p[i].terver);
  38.  
  39. }
  40.     i = 0;
  41.     int g = 0;
  42.     do
  43.      {
  44.  
  45.             if((p[i].physic >=4) && (p[i].matan >=4) && (p[i].linal >=4) && (p[i].terver >=4)){
  46.                     g++;
  47.                     i++;
  48.                     printf("%f", g);
  49.  
  50.             }
  51.  
  52.                else
  53.                {
  54.                     i++;
  55.                }
  56.      }
  57.  
  58.         while (i<n);
  59.         h = (g/n)*100;
  60.  
  61.         printf("kol-vo procentov %n");
  62.         printf ("%f", h);
  63. }

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

В этом коде задача состоит в том, чтобы найти количество студентов-ударников в группе. Список действий:

  1. Ввод количества студентов: с помощью функции scanf вводится количество студентов (переменная n).
  2. Ввод данных о каждом студенте: в цикле for происходит ввод данных о каждом студенте (имя, номер группы, оценки по физике, математике, линейке и теории вероятности).
  3. Проверка на условие: в цикле do-while происходит проверка, является ли студент ударником (оцены по всем предметам >= 4). Если да, то переменная g увеличивается на 1.
  4. Вывод количества студентов-ударников в процентах: после окончания цикла do-while, вычисляется и выводится процент студентов-ударников. Коды ошибок:
  5. Если во время ввода данных пользователь введет символ carriage return (возврат каретки), то все последующие вызовы функции scanf будут читать данные из предыдущего ввода.
  6. Если во время ввода данных пользователь введет некорректные данные (например, не число или число больше максимально допустимого значения), то программа может аварийно завершиться.
  7. Если количество студентов-ударников будет равно 0, то программа может аварийно завершиться из-за деления на ноль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы