Цикл for лучше всего использовать, когда известно количество повторений в цикле. Программа при этом становится короче и понятнее.
Синтаксис
FOR (выражение 1; выражение 2; выражение 3) <оператор>
Здесь «выражение 1» задает начальное значение переменной цикла, «выражение 2» – это выражение, определяющее условие, при котором тело цикла будет выполняться, «Выражение 3» определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла. Значения «выражения 1» и «выражения 2» должны быть типа, совместимого по присваиванию с типом переменной цикла. Таким образом, цикл for может быть реализован на основе цикла с предусловием:
<переменная>=<выражение 1>;
while <переменная> <= <выражение 2>
{
<оператор>;
<переменная>++;
}
Вход в цикл возможен только через его заголовок, т.е. нельзя войти во внутрь цикла, используя оператор goto. Однако с помощью этого оператора можно досрочно выйти из цикла, что делать не рекомендуется, для этого используется оператор break. При нормальном завершении цикла значение переменной цикла неопределенно, если цикл завершился преждевременно по оператору break или goto, то переменная цикла сохраняет свое последнее значение. В теле цикла for запрещается изменять переменную цикла.
Пример 19. Необходимо ввести и вывести матрицу вещественных чисел с помощью цикла с параметром, по пути подсчитав сумму всех ее элементов.
int n=10;
int a[10][10];
int sum=0;
int i,j;
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Введите элемент матрицы [%d %d]: ",i,j);
scanf("%d",&a[i][j]);
}
}
printf("Введенная матрица:");
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i][j]);
sum = sum + a[i][j]; // считаем сумму
}
printf("\n");
}
printf("Сумма элементов = %d", sum);
Операторы прерывания циклов
В некоторых случаях необходимо прервать повторение цикла, проанализировав какие-то условия внутри тела цикла. Это может потребоваться в тех случаях, когда проверки условия для окончания цикла громоздкие, требуют многоэтапного сравнения и сопоставления каких-то данных, и все эти проверки просто невозможно разместить в выражении условия операторов while, do-while или for. Для этого можно использовать оператор break. Он прерывает выполнение тела любого цикла for, do-while или while и передает управление следующему за циклом выполняемому оператору. Еще один способ прерывания – использование оператора goto, передающего управление какому-то оператору, расположенному вне тела цикла. Такой способ нарушает концепции структурного программирования и не рекомендуется к использованию.
Для прерывания циклов, размещенных в процедурах или функциях, можно воспользоваться стандартной процедурой exit. В отличие от оператора break, процедура exit прерывает не только выполнение цикла, но и выполнение той процедуры или функции, в которой расположен цикл.
Иногда внутри тела цикла возникает необходимость прервать только выполнение текущей итерации и перейти к следующей. В этом случае можно воспользоваться стандартной процедурой continue, которая передает управление в заголовок цикла.
Пример 20. Написать программу, которая находит в массиве целых чисел первое отрицательное число и выводит его на экран.
const int n=10;
int mas[n];
int i;
bool flag; //переменная–индикатор отсутствия отрицательных элементов в массиве
flag=false;
for(i=0;i<n;i++)
{
printf("Введите %d элемент массива: ",i);
scanf("%d",&mas[i]);
}
for (i=0;i<n;i++) //теперь ищем отрицательное число
{
if (mas[i] > 0) continue; // переходим в заголовок цикла
printf ("Первое отрицательное число = %d. Номер = %d\n",mas[i],i);
flag = true;
break; // отрицательное число найдено – можно прервать цикл
}
if (!flag) printf("Отрицательных чисел нет");