Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.doc
Скачиваний:
40
Добавлен:
12.04.2015
Размер:
4.91 Mб
Скачать

Пример1

#include<stdio.h>

void main(void)

{

enum color {red,yellow,green};

int col=0;

switch(col)

{

case red: puts("Stop! Color is red"); break;

case yellow: puts("Warning! Color is yellow"); break;

case green: puts("Go! Color is green"); break;

default: puts("No working"); break;

}

}

Структура «повторение» (см. рис. 5.1, г) реализуется операторами итерации. Операторы итерации позволяют организовывать циклическое выполнение набора операторов программы. Язык C++ имеет три формы операторов итерации: циклы while, do и for. Общий формат оператора while следующий:

while (условное_выражение) оператор_пока_"истина";

Оператор_пока_"истина" будет циклически повторяться до тех пор, пока вычисление условного_выражения не даст значения ноль (ложь). Условное_выражение вычисляется и проверяется первым. Если это значение ненулевое (истина), то выполняется оператор_пока_"истина". Если не встречен оператор перехода, выполняющий выход из цикла, то условное_выражение вычисляется снова. Цикл повторяется до тех пор, пока условное_выражение не даст значения 0.

Как и в случае оператора if, выражения типа указателя могут сравниваться с пустым указателем, так что while (ptr) ... эквивалентно while (ptr != NULL)...

Цикл while представляет собой удобный способ сканирования строк и других заканчивающихся пустым символом структур данных. Например:

char str[10]="Borland";

char *ptr=&str[0];

int count=0;

//...

while (*ptr++) // цикл до конца строки

count++;

При отсутствии операторов перехода оператор_пока_"истина" должен некоторым способом воздействовать на значение условного_выражения, либо последнее должно изменяться во время его вычисления, чтобы предотвратить зацикливание.

Общий формат оператора do while следующий:

do выполняемый_оператор while (условное_выражение);

Выполняемый_оператор циклически повторяется до тех пор, пока вычисление условного_выражения не даст 0 (ложь). Главное отличие этого оператора от оператора while состоит в том, что условное_выражение здесь проверяется не до, а после первого выполнения тела цикла. Гарантировано как минимум одно его выполнение.

Формат оператора for в языке С следующий:

for(<выражение_инициализации>;<выражение_проверки>;

<выражение_инкремента>) оператор;

В языке С++ <выражение_инициализации> может быть как выражением, так и объявлением.

Последовательность действий при выполнении данного оператора следующая:

  1. выполняется вычисление выражения_инициализации, если таковое задано. Как следует из его названия, это выражение обычно инициализирует один или несколько счетчиков цикла, но его синтаксис в действительности позволяет любую степень сложности (включая объявления в случае языка С++);

  2. выражение_проверки вычисляется по правилам, приводимым для циклов while. Если выражение_проверки ненулевое (истина), то оператор тела цикла выполняется. Пустое выражение трактуется в данном случае как while(1), то есть, как если бы условие проверки выполнялось всегда. Если выражение_проверки дает значение ноль (ложь), то цикл for прекращается;

  3. выражение_инкремента выполняет приращения одного или нескольких цикловых счетчиков;

  4. выражение "оператор" (возможно, пустое) вычисляется, после чего управление возвращается на шаг 2.

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

for (;;) {

// то же, что и for (;1;) – вечный цикл

}

Правила для операторов for в языке С применимы и в языке С++. Однако выражение_инициализации в языке С++ может также включать в себя и объявление. Контекст объявленного идентификатора продолжается до конца данного оператора, не далее. Например:

for (int i = 1; i < j; ++i)

{

if (i ...) ... // здесь обращаться к значению i можно

}

if (i ...) // а здесь нельзя : i вне контекста

Использование операторов итерации рассмотрим позже.

При изменении порядка выполнения операторов используются операторы перехода, реализуемые в структурах «развилка» и «повторение». Существует четыре таких оператора: break, continue, goto и return.

Синтаксис оператора break следующий:

break;

Его можно использовать только внутри операторов итерации (while, do и for – циклы) или с оператором switch. Он прекращает выполнение итерации или оператора switch. Поскольку операторы итерации и оператор switch могут комбинироваться и иметь любую глубину вложенности, следует обращать особое внимание на то, чтобы оператр break выполнял выход именно из нужного цикла или оператора switch. Сущеествует правило, которое состоит в том, что оператор break заканчивает выполнение ближайшего к нему объемлющего цикла итерации или оператора switch.

Синтаксис оператора continue следующий:

continue;

Он может быть использован только внутри оператора итерации и передает управление на проверку условия циклов while и do, либо на выражение инкремента цикла for. При вложенности циклов итерации оператор continue считается принадлежащим ближайшей объемлющей итерации.

Синтаксис оператора goto следующий:

goto метка;

Оператор goto передает управление оператору, имеющему указанную «метку», которая должна находиться в пределах той же функции.

Оператор с меткой имеет имя (метку), поэтому к нему можно обращаться с помощью оператора безусловного перехода goto. Формат оператора с меткой:

Идентификатор_метки : оператор;

Идентификатор метки используется оператором goto безусловного перехода. Идентификаторы меток имеют свое собственное пространство имен в контексте функции. Язык С++ дает возможность устанавливать метки любому oператору. Например, бесконечный цикл

for(;;)

{

printf("\nУкажите значение N (меньше 32766) > ");

scanf("%d",&N);

if(N<32766) break;

}

можно записать с использованием метки следующим образом:

met: printf("\nУкажите значение N (меньше 32766) > ");

scanf("%d",&N);

if(N>32766) goto met;

В языке С++ допустимо обойти объявление с явным или неявным инициализатором, если это объявление не находится во внутреннем блоке, который также обходится.

Если тип возврата функции не равен void, то тело функции должно содержать как минимум один оператор return следующего формата:

return выражение_возврата;

где выражение_возврата должно быть типа type или типа, преобразуемого при присвоении к типу, заданному type. Значение выражения возврата и есть значение, возвращаемое данной функцией.

Выполнение вызова функции заканчивается, когда встретился оператор return; если оператор return отсутствует, то выполнение «проваливается» к последней закрыващей фигурной скобке тела функции.

Если тип возврата void, то оператор return можно записать без выражения_возврата, либо оператор return вообще может быть опущен, например:

{

...

return;

}

Наконец, в языке С++ можно использовать объявления объектов внутри блоков, что дает возможность более рационально расходовать оперативную память ЭВМ.