Алгоритмизации
Скачать 1.15 Mb.
|
ГЛАВА 8. Операторы и функции передачи управленияФормально к операторам передачи управления относятся: оператор безусловного перехода goto; оператор перехода к следующему шагу (итерации) цикла continue; выход из цикла, либо оператора switch– break; оператор возврата из функции return. ОператорбезусловногопереходаgotoВ языке Си предусмотрен оператор goto, общий вид которого gotoметка; Он предназначен для передачи управления оператору, помеченному указанной меткой. Метка представляет собой идентификатор, оформленный по всем правилам идентификации переменных с символом «двоеточие» после него, например, пустой помеченный меткой m1 оператор: m1: ; Область действия метки – функция, где эта метка определена. В случае необходимости можно использовать блок. Циклы и переключатели можно вкладывать вдруг в друга и наиболее характерный оправданный случай использования оператора goto – выполнение прерывания (организация выхода) во вложенной структуре. Например, при возникновении грубых неисправимых ошибок необходимо выйти из двух (или более) вложенных структур (где нельзя использовать непосредственно оператор break, т.к. он прерывает только самый внутренний цикл): for (...) for (...) { ... if (ошибка) goto error; } ... error: операторы для устранения ошибки; Второй оправданный случай: организация переходов из нескольких мест функции в одно, например, когда перед завершением работы функции необходимо сделать одну и ту же операцию. Операторыcontinue,breakиreturnОператор continueможет использоваться во всех типах циклов (но не в операторе-переключателе switch). Наличие оператора continue вызывает пропуск «оставшейся» части итерации и переход к началу следующей, т.е. досрочное завершение текущего шага и переход к следующему шагу. В циклах while и do-while это означает непосредственный переход к проверочной части. В цикле forуправление передается на шаг коррекции, т.е. модификации выражения 3. Оператор continue часто используется, когда последующая часть цикла оказывается слишком сложной, так что рассмотрение условия, обратного проверяемому, приводит к слишком высокому уровню вложенности программы. Оператор breakпроизводит досрочный выход из цикла или оператора- переключателя switch, к которому он принадлежит, и передает управление первому оператору, следующему за текущим оператором. То есть break обеспечивает переход в точку кода программы, находящуюся за оператором, внутри которого он (break) находится. Оператор returnпроизводит досрочный выход из текущей функции. Он также возвращает значение результата функции: returnвыражение; Выражениедолжно иметь скалярный тип. Правила использования данного оператора будут рассмотрены в гл. 12. ФункцииexitиabortФункция exitвыполняет прерывание программы и используется для нормального, корректного завершения работы программы при возникновении какой-либо внештатной ситуации, например, ошибка при открытии файла (гл. 14). При этом записываются все буферы в соответствующие файлы, закрываются все потоки и вызываются все зарегистрированные стандартные функции завершения. Прототип этой функции приведен в заголовочном файле stdlib.hи выглядит так: voidexit( intexit_code); Параметр данной функции – ненулевое целое число, передаваемое системе программирования (служебное сообщение о возникшей внештатной ситуации). Для завершения работы программы также может использоваться функция voidabort(void); действия которой аналогичны функции exit(3). СоветыпопрограммированиюПри выполнении вариантов заданий придерживайтесь следующих ключевых моментов. Выражение, стоящее в круглых скобках операторов if, whileи do- while, вычисляется по правилам стандартных приоритетов операций. Если в какой-либо ветви вычислений условного оператора или в цикле требуется выполнить два (и более) оператора, то они при помощи фигурных скобок объединяются в блок. Проверка вещественных величин на равенство, как правило, из-за ограниченной разрядности дает неверный результат. Чтобы получить максимальную читаемость и простоту структуры программы, надо правильно выбирать способ реализации ветвлений (с помощью if, switch, или условных операций), а также наиболее подходящий оператор цикла. Выражение в операторе switchи константные выражения в case должны быть целочисленного или символьного типов. Рекомендуется использовать в операторе switchветвь default. После каждой ветви для передачи управления на точку кода за оператором switch используется оператор break. При построении любого цикла надо не забывать тот факт, что в нем всегда явно или неявно присутствуют четыре основных элемента: начальные установки, код цикла, модификация параметра цикла и проверка условия на продолжение цикла. Если количество повторений цикла заранее не известно (реализуется итерационный процесс), необходимо предусмотреть аварийное завершение цикла при получении достаточно большого количества итераций. При использовании бесконечного цикла обязательно необходима организация выхода из цикла по условию. |