Структуры: известен рост каждого из 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 используются для поиска трех учеников с наибольшим и наименьшим ростом.
Список действий:
- Создаются переменные
i,k,min,max,vysokiyиniskiy, а также структура данныхuchи массив структурcom. - Задается вопрос
Введите информацию об ученикахи считывается информация о каждом ученике. - Находится ученик с наименьшим ростом и заносится в переменную
niskiy. - Находится ученик с наибольшим ростом и заносится в переменную
vysokiy. - Находится второй ученик с наибольшим ростом и заносится в переменную
imax2. - Находится третий ученик с наибольшим ростом и заносится в переменную
imax3. - Выводятся на экран фамилия ученика с наименьшим ростом, затем фамилия ученика с наибольшим ростом, затем фамилия второго ученика с наибольшим ростом.
- Выводится информация о трех учениках с наибольшим и наименьшим ростом.
- Программа завершается.