1.8. Пошаговый цикл for
1.8.1 Пример работы оператора for - вычисление суммы чисел (пример 9)
Рассмотрим пример вычисления суммы чисел от 1 до 10.
/////////////////////////////////////////////////////////////////////////////
// Программирование на языке высокого уровня. Основы языка С++
// Пример 9. Пример работы оператора for - вычисление суммы чисел
//
// http://aco.ifmo.ru/el_books/programming
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// описание переменных
int sum = 0;
// оператор пошагового цикла
for(int i=1; i<=10; ++i)
{
sum+=i;
}
cout<<"sum="<<sum<<endl;
}
/////////////////////////////////////////////////////////////////////////////
Пошаговый цикл for позволяет выполнять блок операторов, заключенный в фигурные
скобки задуманное количество раз.
В данном примере, когда оператор for начинает выполняться, объявляется и
инициализируется счетчик цикла i ( i=0). Затем проверяется
условие продолжения цикла i < 10. Поскольку начальное значение i равно
0, условие удовлетворяется, и выполняется блок операторов внутри цикла (тело
цикла). Затем выражение ++ i выполняет приращение счетчику i ( i=1),
и цикл снова начинается с проверки условия продолжения. Этот процесс продолжается,
пока тело цикла не будет исполнено 10 раз и управляющая переменная i не увеличится
до 10, это приведет к тому, что проверка условия продолжения даст отрицательный
результат, и повторение будет прервано. Выполнение программы продолжится
с первого оператора, расположенного после оператора for.
1.8.2 Пошаговый цикл for
Общая форма оператора for, и соответствующая ему блок-схема показаны в таблице.
Пошаговый цикл
for(инициализация; условие; приращение)
{
блок операторов;
}
|
|
В заголовке цикла указывается выражение инициализации,
которое задает начальное значение счетчику цикла, условие,
должен ли цикл продолжать свое выполнение, а выражение приращения модифицирует
счетчик цикла.
Если условие продолжения цикла с самого начала ложно, то операторы тела
for не исполняются и управление сразу передается оператору, следующему за
for.
В большинстве случаев оператор for можно представить эквивалентным оператором
while:
инициализация;
while ( условие )
{
блок операторов ;
приращение ;
}
Если выражение инициализации в заголовке оператора for объявляет счетчик
цикла (т.е. перед именем переменной указан ее тип), то переменная может использоваться
только в теле оператора for – вне оператора for эта переменная будет неизвестна.
Такое ограничение на использование имени переменной называют областью
действия переменной. Область действия переменной определяет, где
в программе она может использоваться.
Переменная-счетчик всегда должна иметь целочисленный тип данных. Если переменная
была объявлена в цикле (все равно в каком), по завершении
цикла эта переменная будет уничтожена.
Еще несколько примеров заголовков цикла:
- изменение управляющей переменной от 1 до 100 с шагом 1:
for(int i
= 1; i <= 100; i++)
- изменение управляющей переменной от 100 до 1 с шагом -1 (с уменьшением
на 1):
for(int i
= 100; i > 0; i--)
- изменение управляющей переменной от 7 до 77 с шагом 7:
for(int i
= 7; i <= 77; i += 7)
- изменение управляющей переменной от 20 до 2 с шагом -2:
for(int i
= 20; i >= 2; i -= 2)
- изменение управляющей переменной в следующей последовательности: 2, 5,
8, 11, 14:
for(int j
= 2; j <= 20; j += 3)
- изменение управляющей переменной в следующей последовательности: 99,
88, 77, 66, 55, 44, 33, 22, 11, 0:
for(int j
= 99; j >= 0; j -= 11)
Выражения инициализации и приращения могут быть списками выражений, разделенных
запятыми. Например, в одном операторе for может быть несколько управляющих
переменных, которые нужно инициализировать и модифицировать:
for(int x
= 0, y=0; x < 10; x++, y++)
Поскольку числа с плавающей точкой являются приближенными, использование
в качестве счетчиков цикла переменных с плавающей точкой может приводить
к неточным значениям счетчика и неправильным результатам проверки условия
окончания. Поэтому в качестве счетчиков цикла всегда следует использовать
целые переменные.
На самом деле, все три выражения в операторе for являются необязательными.
Если опущено выражение для условия продолжения цикла, C++ предполагает, что
условие всегда истинно и, таким образом, получается бесконечный цикл. Можно
опустить выражение инициализации, если управляющая переменная инициализируется
в программе ранее. Можно опустить и выражение приращения, если приращение
переменной выполняется в теле цикла или оно вообще не требуется.
Например, цикл for(int i
= 0; i < 100; i++) можно записать
следующим образом:
int i=0;
for( ; ; )
{
// ...
if(i>=100)
break;
i++;
}
1.8.3 Операторы break и continue
Когда оператор break исполняется в операторе while, for,
do... while или switch, происходит немедленный выход из цикла (или switch)
и исполнение программы продолжается со следующего оператора. Типичным применением
оператора break является досрочное прерывание цикла или пропуск оставшейся
части оператора switch.
Исполнение оператора continue в операторе while, for или
do... while вызывает пропуск оставшейся части тела оператора и переход к
следующей итерации цикла. В операторах while и do... while сразу после исполнения
оператора continue оценивается условие продолжения цикла. В операторе for
сначала исполняется выражение приращения, и затем оценивается условие продолжения.
1.8.4 Пример вычисление факториала (пример 10)
/////////////////////////////////////////////////////////////////////////////
// Программирование на языке высокого уровня. Основы языка С++
// Пример 10. Вычисление факториала. Примеры работы циклов for, do...while
//
// http://aco.ifmo.ru/el_books/programming
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
int menu_number;// номер пункта меню
// цикл, позволяющий производить вычисления пока не будет выбран пункт "Exit"
do
{
// число, для которого вычисляется факториал
int number;
// цикл будет работать до тех пор, пока не будет введено положительное число
do
{
cout<<"Enter integer positive numbers: ";
cin>>number;
}while(number <= 0);
// факториал, первоначальное значение равно 1, т.к. 0!=1
int factorial=1;
// пошаговый цикл, перебирает все числа от number до 1, с шагом -1
for(int i=number; i>0; --i)
{
factorial*=i;
}
// вывод результата
cout<<number<<"! = "<<factorial<<endl;
// вывод меню
cout<<endl<<"Enter number of menu item: "<<endl;
cout<<"0. Exit"<<endl;
cout<<"1. New calculation"<<endl;
// ввод номера пункта меню
cin>>menu_number;
}while(menu_number!=0);
}
/////////////////////////////////////////////////////////////////////////////
|