Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4098

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 4. Управляющие инструкции 

61 

  default: 
    инструкции 
  } 

Работает  инструкция 

switch

  следующим  образом.  Сначала  вы-

числяется  значение 

выражения

,  при  этом  завершаются  все  побоч-

ные эффекты. Затем полученное значение 

выражения

 сравнивается 

с константами, и управление передается на ту 

инструкцию

, для ко-

торой  это  сравнение  дает  значение  "истина".  То  есть  ключевое 
слово 

case

  и  следующая  за  ним  константа  определяют  просто 

метку инструкции, на которую может быть передано управление. 
Для  выхода  из  блока 

case

  используется  оператор 

break

 

(см. 

разд. 4.5)

.  Если  значение 

выражения

  не  совпадает  ни  с  одной  из 

констант, то управление передается 

инструкции

 с меткой 

default

А  если  этой  метки  нет,  то  управление  передается  инструкции, 
следующей за блоком инструкции 

switch

. Инструкция 

switch

 ис-

пользуется в основном для "разбора случаев". Например: 

  int x = 2, y = 0; 
  switch(x) 
  { 
  case 0: 
  case 1: ++y; 
  case 2: y += 2; 
  case 3: y += 3; 
  }    /* y = 5 */ 

На инструкцию 

switch

 накладываются следующие ограничения: 

 

выражение  и  константы  в  инструкции 

switch

  должны  иметь 

интегральный тип; 

 

две константы не могут иметь одинаковое значение; 

 

при  сравнении  значения  выражения  с  константами  использу-
ется интегральное продвижение по типам. 

Относительно метки 

default

 справедливы следующие замечания: 

 

вариант 

default

 не обязателен; 

 

если вариант 

default

 присутствует, то он не обязательно дол-

жен быть последним. 


background image

Часть I. Язык программирования С 

62 

В  языке  программирования  C  переменные  могут  объявляться 
только в начале блока 

switch

, а в языке программирования C++ и 

внутри блока. Кроме того, в языке программирования С++ нельзя 
инициализировать переменные, объявленные в блоке 

switch

4.3. Инструкции цикла  

while

 и 

do...while

 

Инструкция цикла 

while

 имеет следующий синтаксис: 

  while (выражение) 
    инструкция 

Работает инструкция 

while

 следующим образом. Сначала вычис-

ляется  значение 

выражения

,  при  этом  завершаются  все  побочные 

эффекты. Результат вычисления 

выражения

 должен иметь арифме-

тический тип или указатель. Если полученное значение истинно, 
то выполняется 

инструкция

. Так повторяется до тех пор, пока зна-

чение 

выражения

 не станет ложным. Например: 

  int a = -2; 
  while (a) 
    ++a;     /* a = 0 после выхода их цикла */ 

Выражение

 после ключевого слова 

while

 часто называют 

условием 

продолжения цикла

. Если это условие выполняется, то цикл про-

должается. В противном случае цикл завершается. 
Инструкция цикла 

do...while

 имеет следующий синтаксис: 

  do 
    инструкция 
  while (выражение); 

Работает инструкция 

do...while

 следующим образом. 

Инструкция

 

выполняется до тех пор, пока значение 

выражения

 остается истин-

ным. Но в отличие от инструкции 

while

, значение 

выражения

  вы-

числяется  всякий  раз  после  выполнения 

инструкции

  и  это  значе-

ние должно иметь арифметический тип или быть указателем. 


background image

Глава 4. Управляющие инструкции 

63 

То есть в случае 

do...while 

инструкция отработает хотя бы один 

раз, независимо от значения выражения. 
Например: 

  int a = -2; 
  do 
    ++a; 
  while(a);  /* a = 0 после выхода из цикла */ 

4.4. Инструкция цикла 

for

 

Инструкция цикла 

for

 имеет следующий синтаксис: 

  for (выражение_1; выражение_2; выражение_3) 
    инструкция 

Работает  инструкция 

for

  следующим  образом.  Перед  началом 

цикла  один  раз  вычисляется 

выражение_1

.  Значение 

выражения_2

 

вычисляется каждый раз перед выполнением 

инструкции

. Если это 

значение равно истинна, то выполняется 

инструкция

, в противном 

случае цикл заканчивается. После каждой итерации цикла вычис-
ляется 

выражение_3

. При вычислении выражений завершаются все 

побочные  эффекты.  Например,  следующий  цикл  находит  сумму 
цифр от 1 до 9: 

  int i, s = 0; 
  for ( i = 1; i < 10; ++i) 
    s += i;   /* s = 45 после выхода из цикла */ 

 

В  языке  программирования  С++ 

выражение_1

 

может  содержать 

объявления переменных. В этом случае объявленная переменная 
видима только в цикле 

for

Учитывая это замечание, в языке программирования С++ этот же 
цикл можно записать следующим образом: 

  int s = 0; 
  for ( int i = 1; i < 10; ++i) 
    s += i; 


background image

Часть I. Язык программирования С 

64 

Относительно  выражений  в  инструкции 

for

  нужно  сделать  сле-

дующее  замечание.  Как  каждое  в  отдельности,  так  и  все  вместе 
выражения в инструкции 

for

 могут отсутствовать. Если отсутст-

вует 

выражение_2

,  то  считается,  что  оно  постоянно  истинно.  По-

этому инструкция: 

  for (;;) 
    инструкция 

описывает бесконечный цикл. 

4.5. Инструкция перехода 

break

 

Инструкция 

break

 прекращает работу циклов 

while

do...while

 и 

for

, а также выполняет выход из блока 

switch

. Например: 

  int x = 1, y = 0; 
  switch(x) 
  { 
  case 0: 
    --y; 
    break; 
  case 1: 
    ++y; 
    break; 
  default: 
    y = 10; 
  }      /* y = 1 */ 

Инструкция 

break

  чаще  всего  используется  в  том  случае,  если 

внутри  цикла  получено  такое  значение  некоторого  выражения, 
которое делает продолжение цикла невозможным. Конечно, луч-
ше вставлять такую проверку в  условие продолжения цикла. Но 
это  не  всегда  возможно,  если  проверка  условия  продолжения 
цикла требует нетривиальных предварительных вычислений. 

4.6. Инструкция перехода 

continue

 

Инструкция 

continue

 завершает текущую итерацию циклов 

while

do...while

for

  и  передает  управление  на  вычисление  условия 


background image

Глава 4. Управляющие инструкции 

65 

цикла.  То  есть  инструкция 

continue

  прерывает  исполнение  тела 

цикла и передает управление на начало этого цикла.  
Например: 

  int x = -10, y = 0; 
  while (x) 
  { 
    ++x; 
    if (!(x + y)) 
      continue; 
    --y; 
  }       /* x = 0, y = -10 после выхода из цикла */ 

Как и в случае с инструкцией 

break

, если это возможно, то инст-

рукцию цикла 

continue

 лучше не использовать для продолжения 

цикла. 

4.7. Метки инструкций  
и инструкция перехода 

goto

 

Метка инструкции

  состоит  из  идентификатора,  за  которым  сле-

дует  символ 

:

,  и  может  стоять  перед  любой  инструкцией.  На- 

пример: 

  err: s = 0; 

Метка инструкции используется для передачи управления на эту 
инструкцию  при  помощи  инструкции 

goto

,  которая  имеет  сле-

дующий вид: 

  goto метка; 

Областью видимости 

метки

 является функция, в которой эта 

метка

 

определена. Поэтому передачу управления посредством инструк-
ции 

goto

  можно  выполнять  только  внутри  функции.  При  этом 

отметим, что инструкция 

goto

 чаще всего используется для пере-

дачи управления наверх из вложенных управляющих инструкций 
в случае возникновения ошибки. Иначе, программа считается не-
структурной.  Ниже  показан  пример  использования  инструкции 

goto


Смотрите также файлы