Подсчёт
Второй шаблон — подсчёт: сколько элементов удовлетворяют условию? Он похож на суммирование, но вместо элемента вы прибавляете 1, и только когда так решает if. Эта программа считает жаркие дни одной недели:
int temperatures[] = {18, 24, 27, 15, 31, 22, 29};
int count = sizeof(temperatures) / sizeof(temperatures[0]);
int hot_days = 0;
for (int i = 0; i < count; i++) {
if (temperatures[i] >= 25) {
hot_days++;
}
}
printf("Жарких дней: %d\n", hot_days);Это выведет:
Жарких дней: 3Счётчик hot_days начинается с 0, перед циклом. Цикл смотрит на каждую температуру, а if решает, считать ли её. hot_days++ выполняется только для 27, 31 и 29, поэтому в конце счётчик равен 3. Обратите внимание на две пары фигурных скобок: hot_days++ стоит в блоке if, который стоит в блоке цикла. Результат вы снова выводите после цикла.
Не путайте два числа. count — число всех элементов, 7, и цикл нуждается в нём, чтобы пройти по всем. hot_days — число элементов, удовлетворяющих условию, и это результат.
В условии можно проверять что угодно об элементе. Этот цикл считает, сколько раз на кубике выпала шестёрка:
int rolls[] = {6, 2, 6, 4, 1, 6, 3};
int count = sizeof(rolls) / sizeof(rolls[0]);
int sixes = 0;
for (int i = 0; i < count; i++) {
if (rolls[i] == 6) {
sixes++;
}
}
printf("Шестёрок: %d\n", sixes);Это выведет:
Шестёрок: 3Один цикл может считать и несколько вещей сразу, каждую в своём счётчике. С if и else каждый элемент считается ровно один раз, в одном счётчике или в другом.
Задание
- 1
В массиве
scoresхранятся баллы за контрольную. Чтобы сдать, нужно набрать 50 баллов или больше. Посчитайте тех, кто сдал: создайте переменнуюpassedсо значением0, переберитеscoresциклом и для каждого результата не меньше 50 увеличивайтеpassedна 1. После цикла выведите результат в видеСдали: 5. - 2
В том же цикле посчитайте тех, кто не сдал: перед циклом создайте переменную
failedсо значением0и увеличивайте её в веткеelse. После цикла выведите на следующей строкеНе сдали: 3.