Перебор массива в цикле
Вывести весь массив сразу нельзя. Если попробовать printf("%d\n", scores);, программа не скомпилируется:
main.c:5:20: error: format specifies type 'int' but the argument has type 'int *' [-Werror,-Wformat]%d выводит одно целое число, а printf получил весь массив scores. (Тип массива C записывает здесь как int *. Что означает звёздочка, вы узнаете в уроке об указателях.) Массив нужно выводить по элементам.
Для пяти элементов хватило бы пяти printf. Для сотни пришлось бы много писать. К счастью, индекс не обязан быть числом, записанным в коде. Он может быть и переменной: если i равно 2, то scores[i] — то же самое, что scores[2]. А цикл for может провести i по всем индексам, от 0 до последнего:
int scores[] = {80, 92, 75, 60, 88};
for (int i = 0; i < 5; i++) {
printf("%d\n", scores[i]);
}Это выведет:
80
92
75
60
88В первой итерации цикла i равно 0, и цикл выводит scores[0]. Во второй итерации i равно 1, и выводится scores[1], и так далее до scores[4]. Условие — i < 5, а не i <= 5: в массиве 5 элементов, значит, последний индекс — 4. В следующем упражнении вы увидите, что будет с индексом 5.
Число элементов часто встречается в программе в нескольких местах, например в нескольких циклах. Хорошо сохранить его в константе, чтобы записывать только один раз:
int scores[] = {80, 92, 75, 60, 88};
const int COUNT = 5;
for (int i = 0; i < COUNT; i++) {
printf("Тест %d, баллов: %d\n", i + 1, scores[i]);
}Это выведет:
Тест 1, баллов: 80
Тест 2, баллов: 92
Тест 3, баллов: 75
Тест 4, баллов: 60
Тест 5, баллов: 88Номер теста — это i + 1, потому что люди нумеруют тесты с 1, а индексы начинаются с 0. Константа должна соответствовать массиву. Если добавить в массив шестой результат и забыть изменить COUNT, цикл всё равно пройдёт только по пяти элементам, и новый результат никогда не будет выведен.
Цикл может вывести элементы и на одной строке через запятую. Запятая ставится перед каждым элементом, кроме первого, с индексом 0:
int scores[] = {80, 92, 75, 60, 88};
const int COUNT = 5;
for (int i = 0; i < COUNT; i++) {
if (i > 0) {
printf(", ");
}
printf("%d", scores[i]);
}
printf("\n");Это выведет:
80, 92, 75, 60, 88Последний printf("\n") стоит после цикла. Он завершает строку, когда все элементы выведены.
Задание
- 1
Под строкой, которая выводит капитана, создайте константу
COUNTс числом игроков,5. Затем напишите циклfor, переменная которого проходит по индексам, начиная с0, пока она меньшеCOUNT. - 2
В цикле выведите каждый игровой номер на отдельной строке:
7,10,23,4и11. - 3
Ниже напишите второй цикл, который выводит все номера на одной строке через запятую и пробел:
7, 10, 23, 4, 11.