Оператор цикла for. Общая форма. Примеры решения задач
Содержание
- 1. Назначение оператора цикла for. Общая форма
- 2. Разновидности цикла for. Примеры
- 3. Примеры цикла for, в котором количество итераций заведомо известно
- 4. Примеры цикла for, в котором количество итераций заведомо неизвестно
- 5. Понятие вложенного цикла for
- 6. Примеры решения задач, в которых цикл for есть вложенным в другие циклы
- Связанные темы
Поиск на других ресурсах:
1. Назначение оператора цикла for. Общая форма
Цикл for предназначен для организации циклического процесса. С помощью цикла for можно организовывать циклический процесс любого типа, в котором:
- количество итераций цикла заведомо известно;
- количество итераций цикла неизвестно и определяется на основе выполнения некоторого условия.
Общая форма оператора цикла for
for (инициализация; условие; выражение) { // некоторые инструкции, операторы // ... }
где
- инициализация – выражение, инициализирующее переменную-счетчик. Эта переменная определяет количество итераций, которые должны выполниться в цикле;
- условие – логическое выражение, которое определяет необходимость выполнения следующей итерации цикла. Если условие = true, то выполняется следующая итерация цикла. Если значение условие = false, то происходит прекращение выполнения цикла и переход к следующему оператору, который следует за оператором for;
- выражение – некоторое выражение, изменяющее значение переменной-счетчика. Необязательно выражение может изменять значение переменной-счетчика. Также переменная-счетчик может изменять свое значение в теле цикла.
Если оператор цикла for применяется для одного оператора, то в общей форме фигурные скобки можно опустить
for (инициализация; условие; выражение)
оператор;
здесь оператор – один оператор или одна инструкция.
⇑
2. Разновидности цикла for. Примеры
В цикле for можно опускать любую из его частей (инициализация, условие, выражение). Следующие примеры демонстрируют универсальность цикла for, который может быть использовано по разному.
Пример 1. В примере опущена часть, которая инициализирует переменную-счетчик. Вычисляется сумма
s = 2 + 4 + 8 + … + 100
Фрагмент кода, решающий данную задачу следующий:
// вычислить сумму 2+4+8+...+100 int sum = 0; int i = 0; // нет части инициализации переменной-счетчика for (; i <= 100; i += 2) sum += i; // sum = 2550
Пример 2. В примере опущена часть, которая проверяет условие выполнения следующей итерации. Пример вычисляет сумму элементов массива A.
// вычислить сумму элементов массива A double[] A = { 2.5, 1.2, 0.8, 3.3, 4.2 }; double sum = 0; int i; // нет части, которая проверяет условие выполнения цикла for (i = 0; ; i++) { if (i == A.Length) break; sum += A[i]; } // sum = 12.0
Пример 3. В примере опущена часть выражения, которая изменяет переменную-счетчик. Дано вещественное число a и натуральное число n. Вычислить:
a × (a+1) × … × (a+n-1)
Фрагмент кода, решающий данную задачу
// вычислить произведение a*(a+1)*...*(a+n-1) int mult; int i; int n, a; n = 5; a = 4; mult = 1; // отсутствует часть прироста переменной-счетчика i for (i = 0; i < n; ) { mult = mult * (a + i); i++; } // mult = 6720
Пример 4. В примере цикл for не содержит инициализации и условия. Задано натуральное число n. Определить максимальную цифру этого числа.
Решение данной задачи с использованием цикла for (приложение типа Console Application)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // определить максимальную цифру числа n int n; int t, d; int max; // ввод n Console.Write("n = "); n = Convert.ToInt32(Console.ReadLine()); t = n; max = 0; // максимальная цифра for (; t > 0; ) // цикл не содержит инициализации и прироста счетчика { d = t % 10; if (max < d) max = d; t = t / 10; } Console.WriteLine("Max = {0}", max); } } }
Результат выполнения вышеприведенной программы:
n = 283915 Max = 9
Пример 5. В примере цикл for не содержит условия и выражения. Выход из цикла for осуществляется с помощью инструкции break.
Задан массив B чисел типа float. Найти позицию pos первого элемента массива, значение которого лежит в диапазоне от -5 до +5.
Фрагмент кода, решающий данную задачу
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // найти позицию первого вхождения float[] B = { 12.4f, -11.9f, 7.5f, 2.3f, 1.8f }; int pos; for (pos = 0; ; ) // цикл for не содержит условия и выражения { if (pos == B.Length) break; if ((B[pos] >= -5) && (B[pos] <= 5)) break; pos++; } if (pos == B.Length) Console.WriteLine("Искомого элемента нет в массиве."); else Console.WriteLine("pos = {0}", pos); } } }
Результат выполнения программы
pos = 3
Пример 6. В примере демонстрируется «пустой» цикл for. В общем случае пустой цикл for выглядит следующим образом:
for ( ; ; ) { // некоторые инструкции // ... }
⇑
3. Примеры цикла for, в котором количество итераций заведомо известно
Пример 1. Найти сумму всех целых чисел от 100 до 200. Фрагмент программы, которая решает данную задачу с использованием цикла for следующий:
// вычислить сумму int sum; int i; sum = 0; for (i = 100; i <= 200; i++) sum += i; // sum = 15150
Пример 2. Дано натуральное число n. Разработать программу, которая находит следующую сумму
Фрагмент кода, решающий данную задачу
// вычислить сумму double sum; int i; int n; n = 10; sum = 0; for (i = 1; i <= n; i++) sum = sum + 1.0 / i; // sum = 2.92896825396825
Пример 3. Рекурентные соотношения. Последовательность чисел a0, a1, a2, … получается по закону:
Дано натуральное число n. Получить a1, a2, …, an.
Текст программы, которая решает данную задачу, следующий:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // получить a1, a2, ..., an double a0, ak; int k; int n; n = 10; a0 = 1; k = 0; Console.WriteLine("a[{0}] = {1}", k, a0); for (k = 1; k <= n; k++) { ak = k * a0 + 1.0 / k; Console.WriteLine("a[{0}] = {1}", k, ak); a0 = ak; } } } }
В результате выполнения вышеприведенного кода, будет выведен следующий результат
a[0] = 1 a[1] = 2 a[2] = 4.5 a[3] = 13.8333333333333 a[4] = 55.5833333333333 a[5] = 278.116666666667 a[6] = 1668.86666666667 a[7] = 11682.2095238095 a[8] = 93457.8011904762 a[9] = 841120.321825397 a[10] = 8411203.31825397
⇑
4. Примеры цикла for, в котором количество итераций заведомо неизвестно
Пример 1. Дано вещественное число a. Найти такое наименьшее n, что
Решение задачи для приложения типа Console Application
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // цикл for, в котором количество итераций заранее неизвестно int n; double a; double t; Console.Write("a = "); a = Convert.ToDouble(Console.ReadLine()); // цикл вычисления for (n = 1, t = 0; t < a; n++) t = t + 1.0 / n; Console.Write("n = {0}", n - 1); } } }
Выполнение данной программы даст следующий результат
a = 2 n = 4
Пример 2. Задано число a (1<a≤1.5). Найти такое наименьшее n, что в последовательности чисел
последнее число есть меньше чем a.
Ниже приведено решение задачи для приложения типа Console Application
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // найти наименьшее n int n; double a; double t; Console.Write("a = "); a = Convert.ToDouble(Console.ReadLine()); // в части инициализации помещаются два выражения for (n = 2, t = 1 + 1.0 / n; t >= a; n++) t = 1 + 1.0 / n; Console.WriteLine("n = {0}", n-1); } } }
Как видно из вышеприведенного кода, в цикле for в части инициализации помещаются два выражения, разделенных запятой:
for (n = 2, t = 1 + 1.0 / n; t >= a; n++)
t = 1 + 1.0 / n;
Выполнение программы для некоторого значения a может быть, например, следующим
a = 1.3 n = 4
⇑
5. Понятие вложенного цикла for
Цикл for может быть вложенным в любой другой управляющий оператор, которым может быть:
- оператор условного перехода if;
- оператор варианта switch;
- оператор цикла for;
- оператор цикла while;
- оператор цикла do…while.
Количество уровней вложения неограничено.
⇑
6. Примеры решения задач, в которых цикл for есть вложенным в другие циклы
Пример 1. В примере цикл for вложен в другой цикл for.
Напечатать числа в следующем виде:
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
Фрагмент кода, который решает данную задачу для приложения типа Console Application:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // в цикле for вложен другой цикл for for (int i = 1; i <= 5; i++) { for (int j = 1; j <= i; j++) Console.Write("{0} ", i); Console.WriteLine(); } } } }
Пример 2. Цикл for вложен в цикл while.
Найти все целые числа из промежутка от 1 до 300, в которых ровно 5 делителей.
Фрагмент кода, который решает данную задачу
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // найти все числа от 1 до 300 в которых ровно 5 делителей int num; int i, k; num = 1; while (num <= 300) { k = 0; for (i = 1; i <= num; i++) // цикл for вложен в цикл while if (num % i == 0) k++; if (k == 5) Console.WriteLine("{0}", num); num++; } } } }
Результат выполнения программы
16 81
⇑
Связанные темы
- Оператор условного перехода if. Полная и сокращенная формы. Конструкция if-else-if
- Оператор выбора switch
- Оператор цикла while. Примеры