Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




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

Для оператора do-while, как и для while, параметр цикла инициализируется до входа в цикл. Тело цикла do-while также состоит как бы из двух частей: собственно тела и блока «модификации» значений параметра цикла. Отсутствие модификации переменных цикла также приведет к неправильной работе цикла (зацикливанию).

С помощью do-while можно организовать бесконечный цикл: do…..while (true).

-----------------------------------------------------------------------------------------

Цикл со счетчиком (параметрический цикл) for

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

for (инициализация; выражение-условие; модификации) тело цикла;

Инициализация используется для определения и инициализации параметра цикла и выполняется один раз в начале выполнения цикла. Операция «последовательное выполнение» позволяет записать в этой части несколько операторов, разделенных запятой:

for (int i=0, j=2; …..)

int k, m;

for (k=1, m=0; ……..)

Областью действия переменных, объявленных в части цикла « инициализация », является цикл.

Выражение-условие определяет условие выполнения цикла: если его результат, приведенный к типу bool, равен true, то цикл выполняется.

Модификации выполняются после каждой итерации цикла и служат обычно для изменения значения параметра цикла. В части модификаций можно записать несколько операторов через запятую.

 

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

for (b1; b2; b3) оператор à    b1;

                             while (b2) {

                                         оператор;

                                    b3; 

                       }

Возможности цикла for

Цикл for позволяет:

· использовать в качестве параметра  цикла переменные целого, вещественного, символьного, перечислимого, булевского типа:

for (unsigned i = 0; i < 100; i += 5) cout <<i<< endl;

for (unsigned s1 = 127; s1 <= 255; s1++)
      cout << s1 << " " << char(s1) << endl;

for (double delta = 0.1, x = 1.; x <(30.+delta/2); x += delta)
                                        cout << x<< endl;

 for (char s ='0'; s <= '9'; ++s) cout << s << " " << int(s) << endl;

 for (char s ='A'; s <= 'Z'; ++s) cout << s << " " << int(s) << endl;

 for (char s ='a'; s <= 'z'; ++s) cout << s << " " << int(s) << endl;

 

 enum den {pon, vt, sr, chet, pjat, sub, voskr};

 for (den d = vt; d <= sub; d = den(int(d)+1))

               cout << int(d) <<endl;

 

 for (bool b = false; b < true; ++b)

             cout << b <<endl;

НО!!!

 for (bool b = false; b <= true; ++b)

             cout << b <<endl;

дает бесконечный цикл, почему???

 

· организовать вычисления в порядке убывания значения параметра цикла:

       unsigned n; for(ci >> n; n; --n) cout <<n << endl; //для n=5: 5 4 3 2 1

 unsigned n; for(cin >> n; --n;) cout <<n << endl; //для n=5: 4 3 2 1

 unsigned n; for(cin >> n; n--;) cout <<n << endl; //для n=5: 4 3 2 1 0

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

for (unsigned i = 0, j = 2; …..)…              

unsigned k, m; for (k = 1, m = 0; …)…

· использовать приращение параметра цикла, отличное от 1 (организовать счет двойками, тройками, десятками и т.д.):

for (unsigned i = 0; i < 100; i += 5)…

· изменять значение параметра цикла в геометрической прогрессии:

     for (double k = 100; k < 185; k *= 1.1) cout << k << endl;

· для вычисления значения параметра цикла использовать выражения:

for(unsigned k = 1, z = 0; z <= 96; z = 5 * k + 23, k = k + 2)
                                       cout << z <<endl;
                                //0 28 38 48 58 68 78 88

· включать в спецификацию цикла проверку любых других условий, отличных от подсчета числа итераций;

· использовать в спецификации цикла неполный список выражений;

unsigned n; cin >> n; for (; n; --n) cout << n << endl;

unsigned n; cin >> n; for (; --n;) cout << n << endl; // !!!

unsigned n; cin >> n; for (; n--;) cout << n << endl; // !!!

· включать прямо в спецификацию цикла ввод начального значения параметра:

unsigned n,m; for (cout << "input m:", cin >> m; m < 10; ++m)  

                       {n = m; cout <<n << " " << m << endl;}

· изменять в теле цикла переменные, входящие в выражение спецификации цикла:

for (double delta = 0.1, x = 1.; x < 30.; x += delta)

 {delta += 0.5; 

 cout <<setw(5)<< x << " " << setw(5) << delta << endl;

}

Результат выполнения:

 1 0.6

1.6 1.1

2.7 1.6

4.3 2.1

6.4 2.6

 9  3.1

 12.1 3.6

 15.7 4.1

 19.8 4.6

 24.4 5.1

 29.5 5.6

· организовать задержку выполнения программы:

for (double i = 0.0; i < 200000000; i++);

// или                                     

for (unsigned int t_beg = time(NULL); time(NULL)- t_beg!= 10;);
  // #include <time.h> time(NULL) – возвращает текущее время

 

    // или    

const int DELAY =100000000;

int main ()

{ long i; int n;

cout << "sec=?\n";

for (cin >> n; n; n--)          //задержка

  for (i = 0; i < DELAY; i++);

      _getch();

   return 0;

}

· организовать цикл for без тела ( но это плохой стиль ):

float x =1;

cout << "Enter value of x: "; cin >> x;

for ( float d = 1, r = 1e-5f, y = 0; d > r; y=cos(x), d=abs(y-x), x=y );

cout << x << endl;

· организовать бесконечный цикл:

for (;;)…;

 

-----------------------------------------------------------------------------------------





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 279 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

2592 - | 2386 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.