4388

Использование циклов в языке С++

Реферат

Информатика, кибернетика и программирование

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

Русский

2012-11-18

55.5 KB

10 чел.

Использование циклов в языке С++

  1.  Оператор goto

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

В С++ метка представляет собой имя, за которым следует двоеточие (:). Метка размещается слева от того оператора С++, к которому будет выполнен переход по оператору goto с соответствующим именем метки.

Листинг 4.1. Цикл на основе оператора goto

1: #include <iostream>

2: int main()

3: {

4: using namespace std;

5: int counter=0;  // инициализировать счетчик

6:  loop:    //метка – начало цикла

7: counter ++;   //инкрементируем счетчик

8: cout << “counter: “ << counter << “\n”;

9: if (counter < 5)  //проверка значения

10: goto loop;   //перейти к началу

11:

12: cout << “Complete. Counter: ” << counter << “.\n”;

13: return 0;

14: }

РЕЗУЛЬТАТ

counter: 1

counter: 2

counter: 3

counter: 4

counter: 5

Complete. Counter: 5.

Как правило, программисты избегают оператора goto, и на то есть причины. Оператор goto позволяет перейти в любую точку программы – как вперед, так и назад. Беспорядочное использование операторов goto приводит к сознанию запутанного, трудно читаемого кода, прозванного «спагетти». Чтобы избежать оператора goto, используют более сложные, управляемые операторы цикла: for, while, do..while.

  1.  Оператор цикла while

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

Рис. 4.1. Обозначение цикла while на блок-схеме алгоритма программы

Листинг 4.2. Цикл на основе оператора while

1: #include <iostream>

2: int main()

3: {

4: using namespace std;

5: int counter=0; // присвоить начальное значение

6:  while (counter < 5) //проверка истинности условия

7: {

8: counter ++;   //инкрементируем счетчик

9: cout << “counter: “ << counter << “\n”;

10: }

11: cout << “Complete. Counter: ” << counter << “.\n”;

12: return 0;

13: }

РЕЗУЛЬТАТ

counter: 1

counter: 2

counter: 3

counter: 4

counter: 5

Complete. Counter: 5.

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

  1.  Операторы break и continue 

Иногда необходимо перейти к началу цикла еще до завершения выполнения всех операторов тела цикла. Для этого используется оператор continue. Однако в ряде случаев требуется выйти из цикла еще до проверки условия продолжения цикла. Для этого используется оператор break.

Операторы continue и break следует использовать осторожно. Это наиболее опасные команды после оператора goto. Программы, которые внезапно меняют свое поведение, тяжело понять, а свободное применение операторов continue и break способно запутать даже маленький цикл while и сделать его непонятным. Необходимость в операторе безусловного выхода из цикла зачастую свидетельствует о плохо продуманной логике условия выхода из цикла. Как правило, внутри тела цикла можно использовать оператор if, чтобы пропустить несколько строк кода, а не прибегать к оператору break.

  1.  Оператор цикла do..while

Рис. 4.2. Обозначение цикла do..while на блок-схеме алгоритма программы

Вполне возможен вариант, когда тело цикла while вовсе не будет выполнено.  Оператор цикла while проверяет выражение условия цикла до того, как приступит к выполнению операторов тела цикла, и если условие ложно с самого начала, то тело цикла будет пропущено.

Цикл do..while сначала выполняет тело цикла, а условие продолжения проверяет потом. Это гарантирует выполнение операторов цикла, по крайней мере, один раз. Оператор do..while имеет следующий синтаксис:

do

оператор;

while (условие);

Пример:

// считать до 10

int x=0;

do

cout << “x: “ <<x++;

while (x<10);

  1.  Оператор цикла  for

Рис. 4.3. Обозначение цикла c заданным числом повторений

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

for (инициализация; условие; приращение)

оператор;

Оператор инициализация устанавливает начальное значение счетчика. Следующий оператор: условие – это любое выражение языка С++, результат которого проверяется на каждом цикле. Если результат этого выражения является истинным, то выполняется тело цикла, а затем, после изменения счетчика на величину приращения (по умолчанию – увеличение на единицу), действия повторяются.

Пример:

// вывести Hello десять раз

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

cout << “Hello! “;

Цикл, организованный в теле другого цикла, называется вложенным. В этом случае внутренний цикл полностью выполняется на каждой итерации внешнего. Листинг 4.3 демонстрирует заполнение элементов матрицы случайными числами с помощью вложенного цикла for.

Листинг 4.3. Вложенный цикл for

#include <iostream>

#define rnd (rand()/32768.0)  /* директива #define задает переменную rnd, которая изменяется случайным образом в диапазоне от 0 до 1 */

int main (){

using namespace std;

int i, j, n, m;

float a[50][50];

cout<<"Input n: ";

cin>>n;

cout<<"Input m: ";

cin>>m;

cout<<endl;

cout<<"Random Array \n";

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

 cout<<endl;

 for (j=0; j<m; j++){

  a[i][j]=rnd*10-5;

  cout<<a[i][j]<<"  \t";

 }

}

char response;

cin>>response;

return 0;

}


  Условие

   Действие

Да

ет

  Условие

   Действие

Да

Нет

   Действие

  i=n1, n2, h


 

А также другие работы, которые могут Вас заинтересовать

46780. Государственное регулирование рыночной экономики 32.09 KB
  Многовековой опыт рыночного хозяйствования развитых стран мира многими интерпретируется как последовательное воплощение принципа свободы предпринимательства. И как аксиома предполагается предпочтительность экономического порядка
46781. Защита экологических прав граждан в судах общей юрисдикции 30.25 KB
  Особенности правового режима животного мира Юридическое понятие животного мира определено в Федеральном законе О животном мире. Отношения в области охраны и использования объектов животного мира содержащихся в полувольных условиях или искусственно созданной среде обитания в целях сохранения ресурса и генетического фонда объектов животного мира и в иных научных и воспитательных целях регулируются названным Федеральным законом другими федеральными законами и иными нормативными правовыми актами РФ а также законами и нормативными правовыми...
46783. Экономический рост – обобщающий результат функционирования национальной экономики 31.64 KB
  Экономическая наука выделяет два основных типа экономического роста: экстенсивный и интенсивный. Главное здесь совершенствование технологии производства повышение основных факторов производства. В экономической теории существуют два основных типа равновесных моделей экономического роста: неоклассические и неокейнсианские. В макроэкономической теории выделяются два основных типа равновесных траекторий экономического роста: устойчивые и неустойчивые.
46786. Imperative sentences 30.5 KB
  Impertive sentences express commnds which convey the desire of the speker to mke someone generlly the listener perform n ction. Besides commnds proper impertive sentences my express prohibition request n invittion wrning persusion etc. Be quick Formlly commnds re mrked by the predicte verb in the impertive mood positive or negtive the reference to the second person lck of subject nd the use of the uxiliry do in negtive in emphtic sentences with the verb to be. Commnds re generlly chrcterized by the flling tone lthough the rising...