Цикл for
Цикл for, наиболее универсальный из всех циклов языка С, выглядит так:
for ([инициализация]; [условие]; [модификация]) оператор
Прежде всего выполняется инициализация цикла; секция инициализации может содержать любое выражение. Инициализация производится только один раз перед началом работы цикла. Оценивается выражение условия. Если оно истинно, выполняется оператор тела цикла; если условие ложно, происходит выход из цикла и управление передается следующему оператору.
После исполнения тела цикла производится модификация, после чего управление возвращается заголовку цикла и все повторяется снова. Секция модификации может содержать любое выражение; обычно в ней изменяют значения управляющих переменных цикла.
Как видно из синтаксического описания, любую секцию заголовка цикла for можно опустить, но разделители — точки с запятой — все равно должны присутствовать.
Если опущено условие, цикл будет выполняться бесконечно. Простейшей и самой популярной конструкцией на основе цикла for является цикл с управляющей переменной-счетчиком:
int i;
for (i =0; i < REPEAT; i++)
DoSomething (i);
Счетчик инициализируется значением 0. В начале каждого прохода цикла проверяется, не достиг ли он значения REPEAT. Как только i станет равным REPEAT, тело цикла пропускается и управление передается следующему оператору. В конце каждого прохода i увеличивается на единицу [1].
Любую конкретную структуру повторения, требуемую для решения некоторой задачи, можно реализовать на основе любого из циклов С, однако всегда какой-то из них подходит к данному случаю наилучшим образом, позволяя написать более ясный и компактный код. Так, если необходимое число итераций цикла известно заранее (как при обработке массива), проще всего применить цикл for. Если же число итераций заранее определить нельзя, как в нашем примере обработки команд (момент завершения цикла определяется пользователем) или при операциях поиска в списке, применяют цикл while или do. . .while.
У структур повторения в ряде ситуаций есть альтернатива. Это рекурсия, заключающаяся в том, что функция вызывает саму себя. Естественно, такой вызов должен быть условным, т. е. обязательно должен наступить такой момент, когда на очередном шаге рекурсивного вызова не происходит. Есть классический пример рекурсии — вычисление факториала:
unsigned Fac(unsigned n)
{
if (n)
return n * Fac(n - 1);
else
return 1;
}
Пример 1. Протабулировать функцию в заданном интервале [2,3] с шагом 0,1 [3].
1. Поместите на форму объекты: Edit1, Edit2, Edit3, Label1, Label2, Label3, Memo1, Button1, Button2.
2. Присвойте объектам свойства согласно таблице:
Объект | Свойства | Значение |
Edit1 | Text | ‘’ |
Edit2 | Text | ‘’ |
Edit3 | Text | ‘’ |
Label1 | Caption | A= |
Label2 | Caption | B= |
Label3 | Caption | H= |
Memo1 | Lines | ‘’ |
Button1 | Caption | Выполнить |
Button2 | Caption | Выход |
3. Дважды щёлкнув по кнопке “Выход”, впишите в месте, где мигает курсор
Close();
4. Дважды щёлкнув по кнопке “Выполнить”, впишите следующий код:
5. Сохраните проект в папке и выполните его.
Пример 2. Найти минимальное и максимально значение данной функции в заданном интервале: [2; 3].
1. Поместите на форму объекты: Edit1, Edit2, Edit3, Label1, Label2, Label3, Memo1, Button1, Button2.
2. Присвойте объектам свойства согласно таблице:
Объект | Свойства | Значение |
Edit1 | Text | |
Edit2 | Text | |
Edit3 | Text | |
Edit4 | Text | |
Edit5 | Text | |
Label1 | Caption | A= |
Label2 | Caption | B= |
Label3 | Caption | H= |
Label4 | Caption | Max |
Label5 | Caption | Min |
Button1 | Caption | Выполнить |
Button2 | Caption | Выход |
3. Дважды щёлкнув по кнопке “Выход”, впишите в месте, где мигает курсор
Close();
4. Дважды щёлкнув по кнопке “Выполнить”, впишите следующий код:
5. Сохраните проект в папке и выполните его.
Результат выполнения программы:
Контрольные вопросы
1. Какие операторы цикла вы знаете?
2. Когда используется оператор цикла ДЛЯ?
3. Как изменяется управляющая переменная в цикле ДЛЯ?
4. Когда применяется составной оператор в цикле?
5. Когда выполняется тело оператора цикла ПОКА?
Вариант задания | Уравнение | Отрезок | Шаг |
ex - e-x-2 = 0 | [0;1] | 0.1 | |
3sin +0.35x - 3.8 = 0 | [2;3] | 0.1 | |
x – 2 +sin(1/x) = 0 | [1.2,2] | 0.1 | |
1 – x + sinx - ln(l+x) = 0 | [0;1.5] | 0.1 | |
x2 – ln(1+x) – 3 = 0 | [2;3] | 0.1 | |
[0,0.85] | 0.1 | ||
Lnx – x + 1.8 = 0 | [2;3] | ||
[1;2] | 0.1 | ||
x + cos(x0.52+2) = 0 | [0.5;1] | 0.05 | |
[0;1] | 0.01 | ||
[0;1] | |||
[2;4] | 0.15 | ||
[1:2] | 0.1 | ||
[0;1] | 0.1 | ||
2x-31nx-3=0 | [0.5;0.6] | 0.01 |
Задание №2. Найти min и max значения данной функции в заданном интервале.