Как работает оператор for
Перейти к содержимому

Как работает оператор for

  • автор:

Как работает оператор for

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

• x — любое допустимое имя переменной.

• y — значение или последовательность значений. Чаще всего y — это переменная диапазона, но можно также использовать вектор с результатами в виде серий скалярных значений, которые x предполагает в свою очередь.

• z — любое допустимое выражение или последовательность выражений. Допускается, например, локальное назначение или последовательность шагов программы.

Смотрите видео о циклах for :
Дополнительные сведения

• Для ускорения ввода можно ввести только имя оператора for и нажать клавиши Ctrl+J. Это имя будет преобразовано в полный вид оператора со всеми его местозаполнителями.

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

• При необходимости можно запрограммировать преждевременный выход из цикла (до выполнения условия его завершения) или пропуск определенной итерации и переход на начало следующей. Управлять выполнением цикла можно с помощью операторов break и continue .

Операторы цикла

В языке C++ помимо стандартного оператора присваивания = существует еще несколько операторов присваивания: += , -= , *= , /= , %= , &= , |= , ^= , >= . Запись x+=a эквивалентна записи x=x+a , то есть значение x увеличивается на a . Аналогично работают и остальные операторы: x=a присвоить x значение a
x+=a увеличить значение x на a
x-=a уменьшить значение x на a
x*=a умножить x на a
x/=a поделить x на a (не забудьте про то, что бывает деление целочисленное и с плавающей точкой!)
x%=a заменить x на остаток от деления x на a

Все эти операции возвращают ссылку на переменную, стоящую слева от оператора присваивания. При этом если в арифметической инструкции есть несколько операторов присваивания, то они выполняются справа налево. Операторы присваивания имеют более низкий приоритет, чем операторы + , — , * , / , % , то есть выполняются после этих операторов (если нет скобок).

Во второй строке стоит два оператора присваивания. Сначала выполнится оператор m*=2 , поскольку он стоит правее. Этот оператор присвоит m значение 6 и вернет это значение. Следующим выполнится оператор n+=6 , где 6 — это значение, которое вернул предыдущий оператор присваивания. Таким образом, переменной n будет присвоено значение 8 и на экран будут напечатаны числа 8 и 6.

Операторы инкремента и декремента

Унарный оператор инкремента ++ увеличивает значение переменной на 1. Существует две формы оператора инкремента: префиксная форма ++n и постфиксная форма n++ . Постфиксный оператор инкремента возвращает старое значение переменной, а префиксный оператор — новое, то есть увеличенное на 1. Пример:

Переменные a , b , d в этом примере будут иметь значение, равное 1, а переменная c будет равна 0.

Унарный оператор декремента — уменьшает значение переменной на 1 и также существует в префиксной и постфиксной формах.

Операторы инкремента и декремента имеют более высокий приоритет, нежели операторы арифметических операций и присваиваний, то есть выполняются раньше их (в выражении —d%=c сначала будет выполнен декремент переменной d , а затем оператор взятия остатка и присваивания %= ).

Цикл for

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

Синтаксис оператора for такой:

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

где инициализация , условие , итератор — арифметические выражения, инструкция — одна инструкция языка C++.

Работает цикл for следующим образом. Сначала вычисляется выражение » инициализация «. Затем вычисляется значение » условия «. Если оно истинно, то выполняется » инструкция » тела цикла, а затем вычисляется » итератор «. Если же » условие » ложно, то цикл не выполняется и управление передается на следующую инструкцию после цикла. Если цикл был выполнен, то после вычисления » итератора » снова проверяется » условие «, и если оно истинно, то снова выполняется » инструкция «, а затем вычисляется » итератор » и так далее, пока условие не станет ложно.

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

Рассмотрим следующий пример, в котором на экран выводится 3 числа: 0, 1 и 2:

  1. Выполняется инициализация i=0 .
  2. Проверяется условие i
  3. Выполняется тело цикла: значение переменной i выводится на экран.
  4. Вычисляется итератор ++i . Теперь i равно 1.
  5. Проверяется условие i
  6. Выполняется тело цикла: значение переменной i выводится на экран.
  7. Вычисляется итератор ++i . Теперь i равно 2.
  8. Проверяется условие i
  9. Выполняется тело цикла: значение переменной i выводится на экран.
  10. Вычисляется итератор ++i . Теперь i равно 3.
  11. Проверяется условие i

Инструкции управления циклом

Внутри циклов while и for могут встречаться инструкции управления циклом. Инструкция break; прерывает выполнение цикла, управление при этом немедленно передается на следующую после цикла инструкцию. Инструкция continue; продолжает выполнение цикла со следующей итерации: все входящие в блок цикла инструкции не выполняются, в цикле for выполняется итератор, после чего проверяется условие (во всех видах циклов) и в зависимости от его значения выполняется или не выполняется тело цикла. Как правило, инструкции break; и continue; используются вместе с инструкцией if . Пример: for(i=0;i <100;++i)
if(i%3==0)
continue;
cout // Выполнить еще какие-нибудь действия
>
В этом примере переменная i в цикле принимает значения от 0 до 99. Внутри цикла проверяется условие и если i делится на 3, то оставшаяся часть цикла пропускается, и на экран будут напечатаны только те значения i , которые не делятся на 3.

Извлечение квадратного корня

Для извлечения квадратного корня (из величин типа double , целочисленные величины необходимо преобразовать к типу double ) используется стандартная функция sqrt , определененная в файле cmath . Для ее использования необходимо в начале файла с программой добавить строку #include . Пример использования функции: d=sqrt(e); .

Упражнения (для 9 класса)

  1. Не используя компьютер, определите значения переменных после выполнения данных фрагментов программ: int a=5,b=4,c=17,d=3;
    a-=b=c%=d;

Упражнения (для 10 класса)

  1. Не используя компьютер, определите значения переменных после выполнения данных фрагментов программ: int a=5,b=4,c=17,d=3;
    a-=b=c%=d;

  1. Решите эту задачу для d=4.
  2. Аналитически (без использования компьютера) решите задачу для d=8.
  3. Решите эту задачу для всех оставшихся цифр.
  4. Подумайте над обобщением этой задачи на случай нескольких последних цифр.

Цикл for в C++: синтаксис, примеры и возможные ошибки

обложка статьи

Здравствуйте, дорогие читатели! Циклы, являются неотъемлемой частью любого языка программирования. Они позволяют нам выполнять огромное количество рутинных операций, которые делать вручную невероятно сложно. В этом и заключается главная “прелесть” циклов.

Существует три вида циклов в C++:

В данной статье речь пойдет о цикле for .

Как работает цикл for?

Цикл for последовательно выполняет одинаковые действия, определенное количество раз. Например, тысячу раз будет выводить сообщение Hello, world! .

Давайте рассмотрим структуру цикла for :

for (объявление счетчика>; условие выполнения цикла>; шаг цикла>)  тело цикла> >

Теперь давайте поподробнее рассмотрим синтаксис цикла for:

  • — здесь нужно создать переменную (счетчик цикла) и задать ей первоначальное значение. Эта команда выполняется до запуска цикла;
  • — оно похоже на условие оператора if. Нам нужно указать логическое выражение, при истинности которого, цикл будет работать;
  • — данная инструкция будет выполняться в конце каждой итерации, переводя счетчик цикла на новое значение;
  • — здесь мы указываем код, который будет выполнятся на каждой итерации цикла.

Возможно у вас остались вопросы, поэтому давайте разберем одну простенькую программу.

Пример работы цикла for

Следующая программа находит произведение цифр от 1 до N (факториал):

#include #include using namespace std; int main()  int n; // создаем переменную n cout  <"N token punctuation">; // выводим сообщение cin >> n; // считываем значение int res = 1; // создаем переменную res // в ней мы будем хранить результат работы цикла for (int i = 1; i  n; i++) // цикл for res *= i; // умножаем на i полученное ранее значение cout  <"RES token operator">  ; // выводим результат работы программы return 0; > 

Вот один из возможных результатов работы данной программы:

N = 7 RES = 5040 Process returned 0 (0x0) execution time : 2.723 s Press any key to continue.

Теперь давайте приступи к разбору кода:

  • Строка 6: мы создаем переменную n . В будущем ее мы будем использовать в условии выполнения цикла.
  • Строка 10: нам нужна переменная в которой будет хранится результат работы цикла. Поэтому мы создаем переменную res .
  • Строка 11: вот мы и добрались до цикла for . Здесь давайте разберемся поподробнее:
    • в качестве счетчика выступает переменная i . Мы сразу ей задаем значение 1 (собственно можно было начать и с двух, поскольку умножение на 1 не имеет смысла);
    • условием выполнения цикла является нестрогое неравенство. Цикл будет выполнятся до тех пор, пока i меньше или равно n ;
    • после каждой итерации мы увеличиваем значение счетчика на единицу (операция инкремента). Это равносильно следующей записи: i = i + 1 .

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

    int a, b; for (a = 140, b = 1742; a != b; )  if (a > b) a -= b; else b -= a; > cout  ;

    Данная программа — это реализация алгоритма нахождения НОД. Давайте не будем разбирать его работу, а просто рассмотрим особенности данного кода:

    • в качестве счетчика можно указывать сразу несколько переменных. Также они не обязательно должны быть объявлены непосредственно в самом блоке;
    • любой из блоков (их 3) может вовсе отсутствовать. Вот хороший пример работы бесконечного цикла:

    for (;;)  код> >

    Довольно часто вам придется пользоваться лишь одной вариацией цикла for . Однако если вам придется выполнять специфические задачи, то вы сможете подстроить цикл for под свои “хотелки”.

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

    У данной ошибки довольно много причин. Подробнее о ней можете почитать на Википедии. В случае работы с циклами она может возникнуть следующим образом:

    for (int i; i  10; i++)  ваш код> >

    Вы могли заметь, что здесь переменной i не задали значение. Изначально переменная содержит “мусор” (можете вывести такой мусор на экран для того, чтобы понять о чем я говорю). Естественно к мусору прибавлять ничего нельзя — программа вылетит.

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

    Некоторые компиляторы обнуляют переменные при их создании. Например, это делает компилятор gcc.

    Данная ошибка часто возникает из-за неправильного условия или изменение значения счетчика внутри цикла.

    Давайте посмотрим на простой пример:

    for (int i = 0; i  10; i++)  r += --i; >

    Данный цикл никогда не завершится, поскольку внутри значение i уменьшается на единицу, а после опять увеличивается. Таким образов условие i < 10 всегда будет истинным.

    В качестве домашнего задания, напишите программу, которая будет находить сумму чисел от 1 до N. Удачи!

    Читайте также

    Область видимости переменных в C++

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

    Динамические массивы и переменные в C++

    Как пользоваться динамическими переменными и массивами в C++. Мы разберем как их создать и узнаем их плюсы перед использованием обычных массивов.

    Указатели в C++

    В этом уроке мы разберем, как создать и использовать указатели в C++. Вы узнаете, что такое адрес переменой, как удалять переменную и узнаете что это * и это &.

    Оператор ветвления

    В данной статье мы подробно разберем условные операторы if и else. Мы создадим простую программу, которая будет использовать конструкцию ветвления в C++.

    Инкремент и декремент в C++

    Инкременты и декременты позволяют увеличивать и уменьшать значения переменных на единицу. Также мы научимся использовать постфиксные и префиксные операторы.

    План обучения C++

    Для успешного обучения C++ необходимо составить правильный план изучения. Именно этим мы и займемся в данной статье!

    Мы рассмотрим создание программы, ее структуру, а также главные правила синтаксиса языка C++.
    Массивы в C++

    В данном уроке мы научимся работать с массивами. Массивы являются самым популярным способом хранения больших объемов данных. Поэтому давайте разбираться!

    Логические выражения в C++

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *