Все темы
Циклы
for, while, do-while, range-for, break и continue, ошибки на единицу и беззнаковые счётчики.
Сортировка:
3 вопроса
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
135
Открыть задачу →Типичные ошибки
- ✗Ждать
1: так работаетbreak, аcontinueзавершает только текущую итерацию, и цикл продолжается со следующим значениемi. - ✗Ждать, что цикл не остановится: в цикле
forпослеcontinueвсё равно выполняется шаг++i, поэтомуiрастёт, и цикл заканчивается после5.
Уточняющие вопросы
- →Что напечатает программа, если заменить
continueнаbreak? - →Почему
continueможет сделать циклwhileбесконечным, если счётчик увеличивается в конце тела?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
6 4
Открыть задачу →Типичные ошибки
- ✗Ждать
5 4: с<=счётчик доходит и до границы, поэтому первый цикл проходит значения0,1, …5— их шесть, а не пять. - ✗Ждать
6 5: второй цикл начинается с1, поэтомуiпринимает только значения от1до4, и тело выполняется четыре раза.
Уточняющие вопросы
- →Как написать цикл
for, тело которого выполняется ровноnраз? - →Что пойдёт не так, если цикл вроде первого будет читать массив из 5 элементов?
JuniorТеорияЧастоЧто произойдёт, если собрать и запустить эту программу?
JuniorТеорияЧасто
Что произойдёт, если собрать и запустить эту программу?
Выведет 2, 1, 0, затем наибольшее значение unsigned и не остановится
Типичные ошибки
- ✗Ждать остановки на -1:
unsignedне бывает отрицательным, поэтому--iпри0даёт наибольшее значениеunsigned, иi >= 0остаётся истинным. - ✗Ждать неопределённого поведения: оно возникает только при переполнении знаковых чисел, а арифметика
unsignedпо определению идёт по кругу, и цикл продолжает печатать.
Уточняющие вопросы
- →Как переписать этот отсчёт, чтобы он напечатал
2,1,0и остановился, аiосталасьunsigned? - →С какими флагами предупреждений GCC и Clang сообщат, что условие
i >= 0здесь всегда истинно?