Выражение 1 выполняется только один раз в начале цикла. Обычно оно определяет начальное значение параметра цикла (инициализирует параметр цикла). Выражение 2 – это условие выполнения цикла. Выражение 3 обычно определяет изменение параметра цикла, оператор – тело цикла, которое может быть простым или составным. В последнем случае используются фигурные скобки.
Алгоритм выполнения цикла for представлен на блок-схеме на рисунке 9.
Рисунок 11 – Алгоритм цикла с параметром
С помощью цикла for нахождение N! можно организовать следующим образом:
F=l;
for(i=l;i<=N;i++) F=F*i;
Используя операцию «запятая», можно в выражение 1 внести инициализацию значений сразу нескольких переменных:
for(F=1,i=l;i<=N;i++) F=F*i;
Некоторых элементов в операторе for может не быть, однако разделяющие их точки с запятой обязательно должны присутствовать. В следующем примере инициализирующая часть вынесена из оператора for:
F=l;
i=l;
for(i=1;i<=N;i++) F=F*i;
В языке Си оператор for является достаточно универсальным средством для организации циклов. С его помощью можно программировать даже итерационные циклы, что невозможно в Паскале. Вот пример вычисления суммы элементов гармонического ряда, превышающих заданную величину е:
for(n=l,S=0;1.0/n>eps && n<INT_MAX;n++) S+=1.0/n;
//И наконец, эта же самая задача с пустым телом цикла:
for(n=l,S=0;1.0/n>eps && n<INT_MAX; S+=l.0/n++);
Следующий фрагмент программы на Си содержит два вложенных цикла for. В нем запрограммировано получение на экране таблицы умножения.
for(х=2;х<=9;х++)
for(y=2;y<=9;y++)
printf("\n %d*%d=", x*y);
На экране будет получен следующий результат:
2*2=4
2*3=6
9*8=72
9*9=81
Пример 1. Составить программу вычисления K первых членов арифметической прогрессии, заданных рекуррентной формулой
An+1 = An+2, где A1=5, K=6.
Решение:
введем обозначения:
x – член арифметической прогрессии an;
k – количество членов прогрессии;
n – параметр цикла.
Блок-схема алгоритма приведена на рисунке 12
Программа:
#include <conio.h>
#include <stdio.h>
void main () {
//раздел описания переменных
int n,k; float x;
k=6;
printf(“/n x=”); scanf(“%f”,&x);
//начало цикла
for (n=2;n<=k; n++)
{
//вычисление членов прогрессии
x=x+2;
printf(“x=%f”, x);
};//конец цикла
getch(); }
Рисунок 12 – Блок-схема алгоритма решения задачи из примера 1
Результат выполнения программы:
x= 5.00
x= 7.00
x= 9.00
x=11.00
x=13.00
x=15.00
Пример 2. Среди первых 1000 членов последовательности An найти номер и значение первого положительного члена, если An=-100--n+n3. Предусмотреть случай, когда последовательность не содержит искомого элемента.
Решение:
Рисунок 13 – Блок-схема алгоритма решения задачи из примера 2
Программа:
#include <stdio.h>
#include <conio.h>
void main () {
int n,pr; float a;
pr=0;
for (n=1; n<=1000; n++) {
a=-100-n+pow(n,3);
if a>0 {
printf(“a=%f n=%d”,a,n);
pr=1;
break;
}
}
if (pr=0) printf(“положительных значений нет”); getch(); }