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

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

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

Добавлен: 30.03.2021

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

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

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

 cout << "1. for\n";

 cout << "2. if\n";

 cout << "3. switch\n\n";

 cout << "Введите номер темы (1-3): ";

  cin >> choice;

 cout << "\n";

 switch(choice) {

  case 1:

   cout << "for - это самый универсальный цикл в С++.\n";

   break;

  case 2:

   cout << "if - это инструкция условного ветвления.\n";

   break;

  case 3:

   cout <<"switch - это инструкция многонаправленного ветвления.\n";

   break;

  default:

   cout << "Вы должны ввести число от 1 до З.\n";

  }

 return 0;

}


Цикл while

Инструкция whileеще один способ организации циклов в C++.

Общая форма цикла while имеет такой вид:


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

Здесь под элементом инструкция понимается либо одиночная инструкция, либо блок инструкций. Работой цикла управляет элемент выражение, который представляет собой любое допустимое С++-выражение. Элемент инструкция выполняется до тех пор, пока условное выражение возвращает значение ИСТИНА. Как только это выражение становится ложным, управление передается инструкции, которая следует за этим циклом.

Использование цикла while демонстрируется на примере следующей небольшой программы. Практически все компиляторы поддерживают расширенный набор символов, который не ограничивается символами ASCII. В расширенный набор часто включаются специальные символы и некоторые буквы из алфавитов иностранных языков. ASCII-символы используют значения, не превышающие число 127, а расширенный набор символов— значения из диапазона 128-255. При выполнении этой программы выводятся все символы, значения которых лежат в диапазоне 32-255 (32 — это код пробела). Выполнив эту программу, вы должны увидеть ряд очень интересных символов.


/* Эта программа выводит все печатаемые символы, включая расширенный набор символов, если таковой существует.


*/


#include <iostream>

using namespace std;

int main(){

 unsigned char ch;

 ch = 32;

 while(ch) {

  cout << ch;

  ch++;

 }

 return 0;

}

Рассмотрим while-выражение из предыдущей программы. Возможно, вас удивило, что оно состоит всего лишь из одной переменной ch. Но "ларчик" здесь открывается просто. Поскольку переменная ch имеет здесь тип unsigned char, она может содержать значения от 0 до 255. Если ее значение равно 255, то после инкрементирования оно "сбрасывается" в нуль. Следовательно, факт равенства значения переменной ch нулю служит удобным способом завершить while-цикл.

Подобно циклу for, условное выражение проверяется при входе в цикл while, а это значит, что тело цикла (при ложном результате вычисления условного выражения) может не выполниться ни разу. Это свойство цикла устраняет необходимость отдельного тестирования до начала цикла.


Тело while-цикла может вообще не содержать ни одной инструкции. Вот пример:


while(rand() != 100);


Этот цикл выполняется до тех пор, пока случайное число, генерируемое функцией rand(), не окажется равным числу 100.



Цикл do-while

Цикл do-whileэто единственный цикл, который всегда делает итерацию хотя бы один раз.

В отличие от циклов for и while, в которых условие проверяется при входе, цикл do-while проверяет условие при выходе из цикла. Это значит, что цикл do-while всегда выполняется хотя бы один раз. Его общий формат имеет такой вид.


do {

 инструкции;

}while(выражение);

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

В следующей программе цикл do-while выполняется до тех пор, пока пользователь не введет число 100.


#include <iostream>

using namespace std;

int main()

{

 int num;

 do {

  cout << "Введите число (100 - для выхода): ";

  cin >> num;

 }while(num != 100);

 return 0;

}


Использование инструкции continue

Инструкция continue позволяет немедленно перейти к выполнению следующей итерации цикла.

В C++ существует средство "досрочного" выхода из текущей итерации цикла. Этим средством является инструкция continue. Она принудительно выполняет переход к следующей итерации, опуская выполнение оставшегося кода в текущей. Например, в следующей программе инструкция continue используется для "ускоренного" поиска чётных чисел в диапазоне от 0 до 100.


#include <iostream>

using namespace std;

int main()

{

 int x;

 for(x=0; x<=100; x++) {

  if(x%2) continue;

  cout << x << ' ';

 }

 return 0;

}

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

В циклах while и do-while инструкция continue передает управление непосредственно инструкции, проверяющей условное выражение, после чего циклический процесс продолжает "идти своим чередом". А в цикле for после выполнения инструкции continue сначала вычисляется инкрементное выражение, а затем— условное. И только после этого циклический процесс будет продолжен.


Использование инструкции break для выхода из цикла

Инструкция break позволяет немедленно выйти из цикла.

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


#include <iostream>

using namespace std;

int main()

{

 int t;

 // Цикл работает для значений t от 0 до 9, а не до 100!

 for(t=0; t<100; t++) {

  if(t==10) break;

  cout << t <<' ';

 }

 return 0;

}

Эта программа выведет на экран числа от 0 до 9, а не до 100, поскольку инструкция break при значении t, равном 10, обеспечивает немедленный выход из цикла.

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


for(i=0; i<1000; i++) {


 // Какие-то действия.


 if(kbhit()) break;


}

Инструкция break приводит к выходу из самого внутреннего цикла. Рассмотрим пример.


#include <iostream>

using namespace std;

int main()

{

 int t, count;


 for(t=0; t<100; t++) {

  count = 1;

  for(;;) {

   cout << count << ' ';

   count++;

   if(count==10) break;

  }

  cout << '\n';

 }

 return 0;

}

Эта программа 100 раз выводит на экран числа от 0 до 9. При каждом выполнении инструкции break управление передается назад во внешний цикл for.


На примере предыдущей программы вы убедились, что в C++ с помощью инструкция for можно создать бесконечный цикл. (Бесконечные циклы можно также создавать, используя инструкции while или do-while, но цикл for — это традиционное решение.) Для выхода из бесконечного цикла необходимо использовать инструкцию break. (Безусловно, инструкцию break можно использовать и для завершения небесконечного цикла.)


Вложенные циклы

Как было продемонстрировано на примере предыдущей программы, один цикл можно вложить в другой. В C++ разрешено использовать до 256 уровней вложения. Вложенные циклы используются для решения задач самого разного профиля. Например, в следующей программе вложенный цикл for позволяет найти простые числа в диапазоне от 2 до 1000.


/* Эта программа выводит простые числа, найденные в диапазоне от 2 до 1000.

#include <iostream>

using namespace std;

int main()

{

 int i, j;

 for(i=2; i<1000; i++) {

  for(j=2; j<=(i/j); j++)

   if(!(i%j)) break; // Если число имеет множитель, значит, оно не простое.

  if(j > (i/j)) cout << i << " - простое число\n";

 }

 return 0;

}

Эта программа определяет, является ли простым число, которое содержится в переменной i, путем последовательного его деления на значения, расположенные между числом 2 и результатом вычисления выражения i/j. (Остановить перебор множителей можно на значении выражения i/j, поскольку число, которое превышает i/j, уже не может быть множителем значения i.) Если остаток от деления i/j равен нулю, значит, число i не является простым. Но если внутренний цикл завершится полностью (без досрочного окончания по инструкции break), это означает, что текущее значение переменной i действительно является простым числом.


Инструкция goto

Инструкция gotoэто С++-инструкция безусловного перехода.

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


Инструкция goto требует наличия в программе метки. Метка — это действительный в C++ идентификатор, за которым поставлено двоеточие. При выполнении инструкции goto управление программой передается инструкции, указанной с помощью метки. Метка должна находиться в одной функции с инструкцией goto, которая ссылается на эту метку.

Меткаэто идентификатор, за которым стоит двоеточие.

Например, с помощью инструкции goto и метки можно организовать следующий цикл на 100 итераций.


х = 1;


 loop1:


  х++;


  if(х < 100) goto loop1;

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


for(...) {


 for(...) {


  while(...) {


   if(...) goto stop;


  }


 }


}


stop:


 cout << "Ошибка в программе.\n";

Чтобы заменить инструкцию goto, пришлось бы выполнить ряд дополнительных проверок. В данном случае инструкция goto существенно упрощает программный код. Простым применением инструкции break здесь не обошлось, поскольку она обеспечила бы выход лишь из самого внутреннего цикла.


51