Циклы. Операторы перехода (break, continue, return, goto)
Также существуют операторы перехода - break, continue, return, goto
break - завершает выполнение цикла.
лекция № 4 - циклы for, do_while, while
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
В языке Си существует 3 вида циклов.
while( проверка условия );
do{}while( проверка условия );
for( ; проверка условия ; ){}
while(); - перед выполнением тела, идет проверка какого-либо условия,результатом проверки которой является - выполнять тело цикла или нет. предусловие.
do{}while(); проверка условия выполняется в конце тела. постусловие
for( ;проверка условия ; ){} - проверка условия выполняется в конце тела. предусловие
Цикл for имеет 3 секции, разделенных с помощью ;.
for( инициализация (выполняется один раз, в начале цикла);
проверка условия(выполняется каждый раз перед выполнением тела) ;
выполняется каждый раз после выполнения тела).
В инициалицации можно объявлять переменные(счетчики циклов), или инициализировать какие-то глобальные счетчики каким-то стартовым значением.
Телом цикла называется блок {}, внутри которого находятся инструкции, которые нужно выполнять циклично (определенное колличество раз).
Если инструкций больше чем одна, и они разделены ; то тело оборачивается блоком {}, если же инструкция одна то тело в эти скобки можно не оборачивать. Это справедливо для циклов с предусловием.
Под проверкой условия подразумевается сравнение какого-либо выражение с 0. Если результат выполнения выражения равен 0. Значит тело цикла не выполнять. Смотрите примеры ниже.
#include <stdio.h> int main() { int i = 0; while(i) printf("loop 1\n"); // блок {} не обязателен, одна инструкция i = 1; while(i < 3) { printf("loop 2 : %i\n", i);// блок {} обязателен, больше одной инструкции i++; } do { printf("loop 3 : %i\n", i); i--; }while(i); for(i = 3; i; i--) printf("loop 4 : %i\n", i); // блок {} не обязателен, одна инструкция for(int i1 = 0, j1 = 10; i1 != j1; i1++, j1--) printf("loop 5 : %i - %i\n", i1, j1); return 0; }Циклы for обычно используются когда есть конкрентое понятие - счетчик итераций, и мы знаем сколько раз должно выполниться тело цикла. Как раз дя этого и есть 3 секции. В других случаях используются оставшиеся циклы. К примеру бесконечный цикл в языке Си выглядит так:
#include <stdio.h> int main() { while(1) { // come instructions } return 0; }
break - завершает выполнение цикла.
int main() { int i = 0; while(1) { if(i > 100) break; // завершить цикл ++i; } return 0; }
continue - выполняет переход в конец тела цикла(то есть после выполнения этого оператора, все что после него игнорируется, происходит переход в конец цикла, и далее начинается новая итерация). В примере ниже, цикл бесконечный, так как при выполнении условия i>2 происходит переход в конец тела цикла, то есть игнорируется увеличение счетчика, а условием выхода из цикла является i==11.
int main() { int i = 0; while(i != 11) { if(i > 2) continue; ++i; } return 0; }
return - завершает выпонение не то что цикла, а целой функции. Если функция типа void то нужно вызвать просто return; иначе вернуть выражение того типа каким является тип функции.
Переход осуществляется в рамках одной функции, из одной функции перейти в другую с помощью goto нельзя. Ниже можете ознакомится с циклом for и его аналогом с помощью оператора goto:
На этом все. Спасибо за внимание.
void foo_a(int aCounterStart, int aCounterEnd, int aExtraCondition) { for(int i = aCounterStart; i < aCounterEnd; ++i) { if(i == aExtraCondition) return; } } int foo_b(int aCounterStart, int aCounterEnd, int aExtraCondition) { for(int i = aCounterStart; i < aCounterEnd; ++i) { if(i == aExtraCondition) return -1; } return 1; } int main() { foo_a(0, 4, 4); foo_b(0, 4, 2); return 0; }goto - оператор перехода, использование которого я крайне не рекомендую, если на это нет серьезных причин. Причина в том, что использование этого оператора, без веских на то оснований, может затруднять чтение исходного кода программы, затрудняет его понимание, и т.д. что приводит к ошибкам.
Переход осуществляется в рамках одной функции, из одной функции перейти в другую с помощью goto нельзя. Ниже можете ознакомится с циклом for и его аналогом с помощью оператора goto:
#include <stdio.h> int main() { int i = 0; for(i = 0; i < 10; ++i) printf("%i\n", i); printf("----------------------------------------\n\n"); goto init; init: i = 0; goto check_condition; check_condition: if(i < 10) goto loop_body; else goto loop_exit; loop_body: printf("%i\n", i); goto end_body; end_body: ++i; goto check_condition; loop_exit: return 0; }
На этом все. Спасибо за внимание.
Очень полезные информации спасибо
ОтветитьУдалитьОчень полезные информации спасибо