пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Циклс предусловием while. Цикл for.

Цикл while с предусловием позволяет выполнить одну и ту же последовательность действий пока проверяемое условие истинно. При этом условие записывается до тела цикла и проверяется до выполнения тела цикла.

При выполнении цикла while сначала проверяется условие. Если оно ложно, то цикл не выполняется и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.

Синтаксис цикла while ("пока") c предусловием такой:

     while (условие)
     {
         блок инструкций
     }

Следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10:

     int i=1;
     while (i<=10)
     {
         cout<<i*i<<endl;
         ++i;
     }

В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11, поскольку именно при i==11 условие i<=10 впервые перестанет выполняться.

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

     int Ndigits=0;
     while(n!=0)
     {
         Ndigits=Ndigits+1;
         n=n/10;
     }

Внутри цикла значение переменной n уменьшается в 10 раз до тех пор, пока она не станет равна 0. Уменьшение целочисленной переменной в 10 раз (с использованием целочисленного деления) эквивалентно отбрасыванию последней цифры этой переменной.

Цикл while ("пока") с постусловием

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

     do
     {
         Блок инструкций
     }
     while (условие);

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

 

Цикл for

4.   Цикл for используется для организации циклов - повторения каких-либо однородных действий. Например, если вам нужно посчитать сумму чисел от 1 до 10, то вы должны сложить 1 и 2, полученную сумму сложить с 3, полученную сумму сложить с 4 и так далее, пока не получим сумму предыдущих чисел с 10. В итоге получили последовательность повторяющихся действий: к сумме предыдущих чисел прибавляем следующее число. Вот для организации таких действий и используются циклы, в частности цикл for.

5.   Вот общий вид цикла for:

6.  
7.  for (начальная_инструкция; условие; выражение)
8.  {
9.  инструкции; 
10.  }
11.  

12.               Семантика (смысл) цикла for такова, что сначала выполняется начальная_инструкция; она инициализует переменную, используемую в цикле. Затем проверяется условие. Если оно истинно, то выполняются инструкции, вычисляется выражение, и управление передается обратно в начало цикла for с той разницей, что начальная_инструкция уже не выполняется. Это продолжается до тех пор, пока условие не станет ложно, после чего управление передается следующей_инструкции. Каждый проход цикла называется итерацией цикла.

13.               Начальной_инструкцией может быть инструкция-выражение или просто объявление.

14.               Цикл for является итерационной инструкцией, используемой обычно с увеличивающейся или уменьшающейся переменной. Например, в следующем коде инструкция for используется для сложения целых чисел от 1 до 10.

15. sum = 0;
16.  
17. for (i = 1; i <= 10; ++i)
18.  
19. sum += i;

20.               Когда инструкция for начинает выполняться, управляющей переменной i задается начальное значение 1. Затем проверяется условие продолжения цикла i <= 10. Поскольку начальное значение i равно 1, это условие удовлетворяется, так что оператор тела инструкции суммирует к значению переменной sum, равному 0, значение счетчика i, равное 1. Затем управляющая переменная i увеличивается на единицу в выражении ++i и цикл опять начинается с проверки условия его продолжения. Поскольку значение i теперь 2, предельная величина не превышена, так что программа снова выполняет тело цикла. Этот процесс продолжается, пока управляющая переменная i не увеличится до 11 — это приведет к тому, что условие продолжения цикла нарушится и повторение прекратится. Выполнение программы продолжится с первого оператора, расположенного после цикла for.

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

22. for (sum = 0,i = 1; i <= 10; ++i)
23.  sum += i;

24.               Основное назначение использования оператора запятая — помочь программисту использовать несколько выражений задания начальных значений и (или) несколько выражений приращения переменных. Например, в одной структуре for может быть несколько управляющих переменных, которым надо задавать начальное значение и которые надо изменять. Например:

25. for(i=0,j=0;i<3,j<`4;i++,j+=2)
26.  
27. cout<<i*j;

28.               Данный цикл проведет две итерации, после которых значение счетчика i станет равным 2, а значение счетчика j = 4. При этом условие для второго счетчик не выполняется (т.к. j строго должен быть меньше 4) и цикл будет прерван. На экране будет выведено 02.

29.               В цикле for может присутствовать локальное объявление переменной управления циклом, как в следующем примере.

30. for (int i = 0; i < N; ++i)
31.  sum += i*i; 

32.               Целая переменная i теперь является объявленной в программе. Это может вносить путаницу, поэтому лучше объявлять все программные переменные в начале блока.

33.               В большинстве случаев инсрукцию for можно представить при помощи инструкции while:

34.  
35. начальная_инструкция; 
36.  
37. while (условие) { 
38.  
39.  инструкция; 
40.  
41.  выражение;
42.  
43.  }
44.  
45. следующая_инструкция;
46.  

47.               Любое или все выражения в инструкции for могут отсутствовать, но две точки с запятой должны быть обязательно. Если пропущена начальная_инструкция, то никакая инициализация в цикле for не выполняется. Если пропущено выражение, то не производится приращение, а в случае отсутствия условия не производится проверка. Есть специальное правило для тех случаев, когда пропущено условие; в такой ситуации компилятор будет считать условие выполненным всегда. Так, цикл for в следующем фрагменте бесконечен.

48. for (i = 1, sum = 0 ; ; sum += i++ ) 
49.  cout << sum << endl;

50.               Размещение точки с запятой сразу после правой закрывающей скобки заголовка for делает тело структуры пустым оператором. Обычно это логическая ошибка.

51.               "Приращение” инструкции for может быть отрицательным (в этом случае в действительности происходит не приращение, а уменьшение переменной, управляющей циклом).

52.               Если условие продолжения цикла с самого начала не удовлетворяется, то операторы тела инструкции for не выполняются и управление передается оператору, следующему за for.

53.               Управляющая переменная иногда печатается или используется в вычислениях в теле инструкции for, но обычно это делается без изменений ее величины. Чаще управляющая переменная используется только для контроля числа повторений и никогда не упоминается в теле инструкции.

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

55.               Давайте рассмотрим несколько вариантов применения цикла for:

56. а) Изменение управляющей переменной от 1 до 100 с шагом 1.
57.  
58. for (int i = 1; i <= 100; i++) 
59. b) Изменение управляющей переменной от 100 до 1 с шагом -1
60. (с уменьшением на 1).
61.  
62. for (int i = 100; i >= 1; i--)

63.               Распространенная ошибка при программировании, это использование несоответствующей операции отношения в условии продолжения цикла при счете циклов сверху вниз (например, использование i <= 1 при счете циклов сверху до 1 не включая).

64. c) Изменение управляющей переменной от 7 до 77 с шагом 7.
65.  
66. for (int i = 0; i <= 77; i += 7)
67. d) Изменение управляющей переменной от 20 до 2 с шагом -2.
68.  
69. for (int i = 20; i >= 2; i -= 2)
70. e) Изменение управляющей переменной в следующей последовательности:
71. 2, 5, 8, 11, 14.
72.  
73. for (int j = 2;j <= 14; j += 3)
74. f) Изменение управляющей переменной в следующей последовательности:
75. 99, 88, 77, 66, 55, 44, 33, 22, 11, 0.
76.  
77. for (int j = 99; j >= 0; j -= 11)

27.12.2014; 11:13
хиты: 123
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь