Структуры: известен рост каждого из 25 учеников класса - C (СИ)

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

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

Известен рост каждого из 25 учеников класса. Ни одна пара учеников не имеет одинакового роста. а) Определить фамилии самого высокого и самого низкого учеников класса. б) Определить фамилии двух учеников, являющихся самыми высокими, без учета самого высокого ученика класса. в) Определить фамилии двух учеников, являющихся самыми высокими в классе, не используя при этом два оператора цикла (два прохода по массиву). В пункте 'а' я не знаю как мне вывести именно фамилию учеников,а не просто самый высокий и низкий рост. Остальные пункты я вообще не знаю как мне сделать, помогите решить.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define n 25
 
int main()
{
  int i=0,k=0,min=0,max=0,niskiy=0, vysokiy=0;
  struct uch {
      char family[10];
      int rost
      }  u;
  struct uch com[n];
  printf("\n VVedite informaziy ob uchaschihsy \n");
  for (i=0;i<n;i++)
  {
        printf("\n  family, rost :  ");
     scanf("%s%d",&u.family,&u.rost);
      com[i]=u;
      }
 
    min=com[i].rost;
    max=com[i].rost;
    for (i=0;i<n;i++){
             if(com[i].rost<min)
    {
        min=com[i].rost;
        niskiy=i;
 
    }
    else if(com[i].rost>max)
    {
        max=com[i].rost;
        vysokiy=i;
    }
    }
printf("%Samyi  niskiy  %d\nSamyi vysokiy  %d", niskiy, vysokiy );
    getch();
    return 0;
    }

Решение задачи: «Структуры: известен рост каждого из 25 учеников класса»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define n 25
 
int main()
{
    int i=0,k=0,min=0,max=0,vysokiy=0,niskiy=0;
    struct uch
    {
        char family[10];
        int rost
    } u;
    struct uch com[n];
    printf("\n VVedite informaziy ob uchsschihsy \n");
    for (i=0;i<n;i++)
    {
        printf("\n family, rost : ");
        scanf("%s%d",&u.family,&u.rost);
        com[i]=u;
    }
    min = com[0].rost; niskiy = 0;
    max = com[0].rost; vysokiy = 0;
    for (i=0;i<n;i++)
    {
        if(com[i].rost<min)
        {
            min=com[i].rost;
            niskiy=i;
        }
        else if(com[i].rost>max)
        {
            max=com[i].rost;
            vysokiy=i;
            }
    }
    printf("\nSamyi niskyi\n");
    puts(com[niskiy].family);
    printf("Samyi vysokiy\n");
    puts(com[vysokiy].family);
 
    //пукт б)
    int imax2 = -1, imax3 = -1;
    for (i=0;i<n;i++)
    {
        if (com[vysokiy].rost != com[i].rost && imax2 == -1)
            imax2 = i;
        if (imax2 != -1 && com[vysokiy].rost != com[i].rost && com[imax2].rost < com[i].rost)
        imax2 = i;
    }
    for (i=0;i<n;i++)
    {
        if (com[vysokiy].rost != com[i].rost && com[imax2].rost != com[i].rost && imax3 == -1)
            imax3 = i;
        if (imax3 != -1 && com[vysokiy].rost != com[i].rost && com[imax2].rost != com[i].rost && com[imax3].rost < com[i].rost)
        imax3 = i;
    }
    printf("\nPunkt b)\n\nVysokiy 2\n");
    puts(com[imax2].family);
    printf("Vysokiy 3\n");
    puts(com[imax3].family);
 
    //пункт в)
    imax2 = -1;
    imax3 = -1;
    for (i=0;i<n;i++)
    {
        if (com[vysokiy].rost != com[i].rost && imax2 == -1)
            imax2 = i;
        if (imax2 != -1 && com[vysokiy].rost != com[i].rost && com[imax2].rost < com[i].rost)
        imax2 = i;
        if (imax2 != -1)
        {
            if (com[vysokiy].rost != com[i].rost && com[imax2].rost > com[i].rost && imax3 == -1)
            imax3 = i;
            if (imax3 != -1 && com[vysokiy].rost != com[i].rost && com[imax2].rost > com[i].rost && com[imax3].rost < com[i].rost)
            imax3 = i;
        }
    }
    printf("\nPunkt c\n\nVysokiy 2\n");
    puts(com[imax2].family);
    printf("Vysokiy 3\n");
    puts(com[imax3].family);
    getch();
    return 0;
}

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

Структура данных уч (uch) содержит два поля: family (фамилия) и rost (рост). Переменные min, max, vysokiy и niskiy используются для поиска трех учеников с наибольшим и наименьшим ростом. Список действий:

  1. Создаются переменные i, k, min, max, vysokiy и niskiy, а также структура данных uch и массив структур com.
  2. Задается вопрос Введите информацию об учениках и считывается информация о каждом ученике.
  3. Находится ученик с наименьшим ростом и заносится в переменную niskiy.
  4. Находится ученик с наибольшим ростом и заносится в переменную vysokiy.
  5. Находится второй ученик с наибольшим ростом и заносится в переменную imax2.
  6. Находится третий ученик с наибольшим ростом и заносится в переменную imax3.
  7. Выводятся на экран фамилия ученика с наименьшим ростом, затем фамилия ученика с наибольшим ростом, затем фамилия второго ученика с наибольшим ростом.
  8. Выводится информация о трех учениках с наибольшим и наименьшим ростом.
  9. Программа завершается.

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


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

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

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