Представим ситуацию, когда нам надо вывести на экран одно и тоже слово, допустим, слово "HELLO", 10 раз. Как нам поступить?
Можно взять и 10 раз написать команду Console.WriteLine("HELLO");
А что если, надо не 10 раз, а 20, 30, 40 раз? А если 200 раз? В этом случае копирование займет очень много времени. А если, необходимо, чтобы пользователь сам выбирал, сколько раз ему вывести на экран информацию?
Чтобы справиться с такой задачей, нам поможет специальная конструкция, которая называется цикл.
Цикл - это алгоритмическая конструкция, в которой некоторая последовательность команд повторяется несколько раз.
В языке программирования C#, есть два вида циклов: цикл с переменной (for) и цикл с условием (while и do...while)
Начнем знакомство с циклами с первого вида.
Цикл с переменной или с известным числом шагов (for).
Часто бывает, что мы знаем число повторений каких-либо действий или же можем вычислить число повторений через известные нам данные. В некоторых языках программирования есть команда, которая на русском языке звучит как повтори (число раз) - то есть мы можем указать точное число повторений.
Интересно проследить как работает этот цикл на машинном уровне:
1. В памяти выделяется определенная ячейка памяти и в нее записывается число повторений.
2. Когда программа выполняет тело цикла один раз, содержимое этой ячейки (счетчик) уменьшается на единицу.
3. Выполнение цикла заканчивается, когда в этой ячейке будет ноль.
В языке программирования C#, нет такой конструкции, а есть конструкция for.
Общая форма записи оператора цикла for выглядит следующим образом:
for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )
{
/*один оператор или блок операторов - тело цикла*/;
}
Данная конструкция требует, чтобы мы:
1. Явно выделили ячейку памяти, которая будет являться счетчиком, и задать ей начальное значение.
2. Прописали условие, при котором тело цикла будет выполняться.
3. Указали, как будет меняться значение в данной ячейке.
В практической части мы попробуем вывести на экран слово "Hello" 10 раз, а в дальнейших задачах разберем данную конструкцию подробнее.
|
Цикл for
Цикл for представляет собой средство пошагового выполнения повторяющихся действий. Давайте рассмотрим более подробно, как он устроен.
Обычно части цикла for выполняют следующие шаги:
1. Установка начального значения.
2. Выполнение проверки условия для продолжения цикла.
3. Выполнение действий цикла.
4. Обновление значения (значений), используемых в проверочном условии.
и далее шаги 2-4 повторяются до тех пор пока условие выполняется. Как только условие становится ложным, цикл прекращает свою работу и выполняется оператор следующий за оператором цикла for.
Общая форма записи оператора цикла
for (/* выражение 1*/; /* выражение 2*/; /* выражение 3*/ )
{
/* один оператор или блок операторов - тело цикла */;
}
Выражение 1 отвечает за установку начального значения переменной цикла (счетчика), заканчивается точкой с запятой.
Например :
i=0; // переменной цикла i присваиваем начальное значение равное нулю - i должна быть объявлена до цикла
int i=0; // переменная i может быть объявлена сразу в заголовке цикла, но в этом случае после работы цикла сотрется из памяти
; // отсутствует инициализация и объявление переменной цикла вообще, в этом случае она может быть объявлена до цикла
Выражение 2 - это условие продолжения цикла for, оно проверяется на истинность. Например,
i <= 10 // цикл будет выполняться, пока переменная i меньше или равна 10.
Условие может быть любым.
Выражение 3 изменяет значение переменной-счетчика. Без этого значения цикл будет считаться бесконечным. Например,
i++; // при каждом завершении выполнения операций тела цикла, i увеличивается на 1.
|
В каждой части заголовка может быть несколько операторов, разделенных запятыми.
Примеры заголовков:
for ( int i = 0; i < 10; i ++ ) { ... } - стандартный заголовок
for ( int i = 0, x = 1; i < 10; i += 2, x *= 2 ){ ... }
// в данном случае, используем две переменные, которые будут меняться после выполнения тела цикла - это переменные i и x
// переменная i меняется с шагом 2 - i+=2 - сокращенная запись от i=i+2
// переменная x с каждым шагом увеличивается в 0,1 раз x=x*2 - сокращенно х*=2
|
Повторить N раз
Все программы с циклом for , которые мы до этого писали нельзя назвать универсальными. Потому что мы задавали сами число повторений тела цикла. А что делать, если количество повторений будет зависеть от какого-либо другого значения? Например, пользователь сам хочет задать количество повторений цикла.
Что делать в этом случае? Все очень просто. Вместо числовых начальных и конечных значений, мы можем использовать любые переменные, которые могут как вычисляться, так и задаваться пользователем.
Например, нам нужно вывести квадраты чисел от 1 до N , где значение переменной N вводится с клавиатуры пользователем.
Программа будет выглядеть следующим образом:
#include <iostream>
using namespace std;
main()
{
int i, N; // i – переменная цикла, N - максимальное число, у которого вычисляем квадрат
cin >> N;
for ( i = 1; i <= N; i ++) // цикл: для всех i от 1 до N. Переменная i будет последовательно принимать значения от 1 до N
{
cout << "Square number "<<i<<" is" <<i*i<<"\n"; // Вывод квадрата числа по определенному формату и переход на новую строку
}
}
При входе в цикл выполняется оператор i = 1 , и затем переменная i с каждым шагом увеличивается на единицу ( i ++ ). Цикл выполняется пока истинно условие i <= N . В теле цикла единственный оператор вывода печатает на экране само число и его квадрат по заданному формату.
Для возведения в квадрат или другую невысокую степень лучше использовать умножение.
Запустите программу и посмотрите результат ее работы при различных значениях переменной N .
|