Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по экзамену ЯП.doc
Скачиваний:
3
Добавлен:
25.08.2019
Размер:
534.02 Кб
Скачать

Цикл с постусловием

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. 

На языке Си:

do

{

<тело цикла>

}

while(<условие продолжения цикла>) В трактовке условия цикла с постусловием в разных языках есть различия. В Паскале и языках, произошедших от него, условие такого цикла трактуется как условие выхода (цикл завершается, когда условие истинно, в русской терминологии такие циклы называют ещё «цикл до»), а в Си и его потомках — как условие продолжения (цикл завершается, когда условие ложно, такие циклы иногда называют «цикл пока»).

Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for, в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. Например, в языке Оберон-2 такой цикл имеет вид:

FOR v := b TO e BY s DO

... тело цикла

END

(здесь v — счётчик, b — начальное значение счётчика, e — граничное значение счётчика, s — шаг).

Неоднозначен вопрос о значении переменной по завершении цикла, в котором эта переменная использовалась как счётчик. Например, если в программе на языке Паскаль встретится конструкция вида:

i := 100;

for i := 0 to 9 do

begin

... тело цикла

end;

k := i;

    1. Оператор безусловной передачи управления goto, оператор возврата из функции return.

В С++ есть несколько операторов, изменяющих естественный порядок выполнения вычислений:

  • оператор безусловного перехода goto;

  • оператор выхода из цикла break;

  • оператор перехода к следующей итерации цикла continue;

  • оператор возврата из функции return.

Оператор перехода goto предназначен для безусловной передачи управления в заданную точку программы. Его выполнение заключается в передаче управления оператору, помеченному заданной меткой. Общий вид оператора следующий:

goto <метка>;

. . . .

<метка>: <оператор>

    Оператор перехода goto предназначен для безусловной передачи управления в заданную точку программы. В качестве метки используется идентификатор. Метка отделяется от помеченного оператора двоеточием. Передача управления разрешена на любой помеченный оператор в теле функции. Однако существует одно важное ограничение: запрещено "перескакивать" через описания, содержащие инициализацию объектов.

    Принятые в настоящее время правила составления программ рекомендуют либо вовсе отказаться от оператора goto, либо свести его применение к минимуму и строго придерживаться следующих рекомендаций:

  • не входить внутрь блока извне;

  • не входить внутрь условного оператора, то есть не передавать управление операторам, размещенным после служебных слов if или else;

  • не входить извне внутрь переключателя switch;

  • не передавать управление внутрь цикла.

    Следование перечисленным рекомендациям позволяет исключить возможные нежелательные последствия бессистемного использования оператора безусловного перехода. Полностью отказываться от его использования вряд ли стоит. Есть случаи, когда этот оператор обеспечивает наиболее простые и понятные решения. Один из них - это ситуация, когда в рамках текста одной функции необходимо из разных мест переходить к одному участку программы. Если по каким-то причинам эту часть программы нельзя оформить в виде функции (например, это может быть текст на ассемблере), то наиболее простое решение - применение безусловного перехода с помощью оператора goto. Такое положение возникает, например, при необходимости обрабатывать ошибки, выявляемые в процессе выполнения программы. 

Оператор return завершает выполнение данной функции и передает управление вызывающей функции. Операторreturn, появившийся в главной функции main, вызывает завершение выполнения всей программы.

    Общий вид оператора return следующий:

return (<выражение>);

или

return <выражение>;

    Если выражение "не пусто" (то есть оно присутствует), то вычисляется его значение, которое и становится значением вызова функции. Выражение, если оно присутствует, может быть только скалярным.

    Выражение в операторе return не может присутствовать в том случае, если возвращаемое функцией значение имеет тип void, чаще всего означающий, что функция не возвращает никакого значения. Достижение "конца" функции (правой закрывающей фигурной скобки) эквивалентно выполнению оператора return без возвращаемого значения (т.е. операторreturn в конце функции может быть опущен). Как правило, он опускается, когда функция имеет тип void.

    Если же оператор return не содержит никакого выражения, то значение вызова функции не определено. Заметим, что оператор return позволяет вернуть в основную программу только одно значение. Более подробное знакомство с функциями можно осуществить на 42 шаге 

17. Указатели и адреса объектов в языке C++. Адресная арифметика, типы указателей и операции над ними.

Указатель - это переменная, содержащая адрес другой переменной, т.е. значением переменной типа указатель является целое число, равное адресу того объекта, на который ссылается указатель.

Указатель существенно связан с типом объекта, на который он ссылается. Если в описании перед обозначением объекта поставить символ "*", то оно будет описывать указатель на объект того же типа и класса памяти, которые соответствуют данному обозначению без звездочки.

Указатели и целые не являются взаимозаменяемыми объектами. Константа - единственное исключение из этого правила: ее можно присвоить указателю и указатель можно сравнить с нулевой константой. Чтобы показать, что это специальное значение для указателя, вместо числа 0, как правило, записывают NULL - константу, определенную, в том числе, в файле stdio.h.

Унарная операция "*", называемая  операцией косвенной адресации, рассматривает свой операнд как адрес объекта и обращается по этому адресу, возвращая его содержимое.

Унарная операция "&", называемая операцией нахождения адреса, будучи примененной к переменной, возвращает ее адрес.

Например, рассмотрим последовательность операторов: