Наибольшее значение
Третий шаблон — поиск наибольшего значения. Представьте, что вы просматриваете стопку экзаменационных работ, чтобы найти лучшую. Вы берёте первую работу. Затем смотрите остальные по одной, и всякий раз, когда одна лучше той, что у вас в руке, берёте её вместо прежней. В конце в руке у вас лучшая работа. В коде работа в вашей руке — это переменная:
int scores[] = {72, 45, 90, 38, 64};
int count = sizeof(scores) / sizeof(scores[0]);
int highest = scores[0];
for (int i = 1; i < count; i++) {
if (scores[i] > highest) {
highest = scores[i];
}
}
printf("Наибольший балл: %d\n", highest);Это выведет:
Наибольший балл: 90Переменная highest начинается с первого элемента. Поэтому цикл может начинаться с индекса 1: сравнивать первый элемент с самим собой незачем (начало с 0 тоже сработало бы). 45 не больше 72, а вот 90 больше, так что highest становится равной 90. Ни 38, ни 64 не больше 90, поэтому 90 остаётся до конца.
Почему бы не начать с 0? Потому что 0 может не быть среди значений. Если все значения отрицательные, например зимние температуры {-5, -2, -8}, начальный 0 остался бы наибольшим, и программа вывела бы 0 — температуру, которой в массиве вообще нет. Первый элемент — всегда надёжное начало.
Наименьшее значение находят так же, только с < вместо >.
Иногда нужно знать и то, где находится наибольшее значение. Тогда храните его индекс во второй переменной и меняйте обе переменные вместе:
int scores[] = {72, 45, 90, 38, 64};
int count = sizeof(scores) / sizeof(scores[0]);
int highest = scores[0];
int best_index = 0;
for (int i = 1; i < count; i++) {
if (scores[i] > highest) {
highest = scores[i];
best_index = i;
}
}
printf("Больше всех баллов у ученика %d: %d\n", best_index + 1, highest);Это выведет:
Больше всех баллов у ученика 3: 90best_index начинается с 0, индекса первого элемента, и меняется всякий раз, когда меняется highest. В конце он равен 2, поэтому номер ученика, считая с 1, — это best_index + 1.
Задание
- 1
В массиве
pricesхранятся цены наушников в интернет-магазине. Создайте переменнуюhighestтипаintс первой ценой,prices[0]. - 2
Переберите
pricesциклом, и всякий раз, когда цена большеhighest, сохраняйте её вhighest. После цикла выведите результат в видеСамая высокая цена: 2499. - 3
Выясните, что это за наушники. Рядом с
highestсоздайте переменнуюhighest_indexсо значением0и в цикле сохраняйте в неё индексiвсякий раз, когда меняетеhighest. После цикла выведите на следующей строке номер наушников, считая с 1:Номер: 4.