Оператор цикла for
Оператор цикла for удобно использовать, если заранее известно (или может быть вычислено) количество повторений цикла.
В программе «Табулирование функции» заменим оператор цикла while оператором for:
for ( i = 1; i<=n; i++)
{ printf(“\n%5.2f %5.2f”, x, 3+2*x);
x = x + 0.1;
}
или короткая форма записи оператора
for ( i = 1; i<=n; x += 0.1, i++)
printf(“\n%5.2f %5.2f”, x, 3+2*x);
Операция запятая (,) - операция последовательного вычисления.
Оператор цикла for имеет вид
for ( [выражение1]; [выражение2]; [выражение3])
оператор s;
Схема работы оператора цикла for представлена на рис.2.4.
Рис. 2.4. Схема работы оператора цикла for
Эквивалентный оператор while имеет вид:
выражение1;
while ( выражение2 )
{ оператор s;
выражение3;
}
Любое из выражений в операторе for может отсутствовать, например может отсутствовать выражение1, если не требуются подготовительные действия. В частном случае могут отсутствовать все выражения, тогда получим условие бесконечного цикла. Прервать цикл можно оператором break, например, при обнаружении некоторого условия:
for ( ; ; )
{ …
break;
….
}
Оператор завершения break иногда полезен для “аварийного” выхода из цикла, часто позволяет избежать сложных проверок, но затрудняет понимание программы.
Изменим программу 2.1. – для вычисления значения функции f(x) используем подпрограмму.
/*Программа 2.2. Табулирование функции (в стиле С) */
/* с использованием подпрограммы для вычисления функции f(x) */
#include <stdio.h>
/* подпрограмма вычисления функции f(x) */
float f ( float z )
{ float y;
y = 3 + 2*z;
return y; /* возврат значения функции */
}
void main ()
{ int n, i; /*количество строк, номер строки */
float x; /* текущее значение х */
scanf (“%f %d”, &x, &n);
printf ("\n X F(X) ");
for (i = 1; i <= n; i++)
{printf(“\n%5.2f %5.2f”, x, f ( x )); /* вызов функции */
x = x + 0.1;
}
}
Пояснения к программе.
1. Для вычисления значения функции f(x) вызывается подпрограмма - функция. Подпрограмма, получив в качестве аргумента очередное значение величины x, вычисляет и возвращает значение y = 3 + 2*x.
2. В подпрограмме можно обойтись без дополнительной переменной y: вычисление значения функции выполнить в операторе return.
float f ( float z )
{ return (3 + 2 * z); }
3. Использование подпрограммы позволяет менять функцию, не изменяя основную программу.