Последний из описанных вариантов организации циклов часто применяют при обработке массивов. 
Массив- совокупность переменных одинакового типа, имеющих одно имя и различные индексы, задающиеся последовательно. Массивы могут быть одномерными (вектора), двухмерными (матрицы) и многомерными.
Среди типовых задач, связанных с обработкой массивов, часто встречаются следующие: нахождение максимального (минимального) элемента массива и упорядочивание элементов в массиве по возрастанию (убыванию). Ниже рассмотрим возможные решения этих задач.

1) Пусть требуется найти максимальный элемент в одномерном массиве Х, состоящем из 12 элементов. 
Возможное решение:

#include <stdio.h>
main()
{
float x[12], max;
             /* Определяем массив, состоящий из 12 вещественных (float) элементов и вещественную переменную max, которой присвоим значение наибольшего элемента массива Х. */
int i; // описываем переменную целого типа - i, понадобится для цикла
for(i=0; i<=11; i++)         // цикл по i от 0 до 11 : ввод массива. 
{
printf(" X(%d)=", i);
     /* пишем подсказку пользователю: какой элемент Х надо ввести:
элементы массива нумеруются последовательно от Х[0] до X[11] */
scanf("%f", &x[i]);       // считываем введенное значение i-го элемента массива X, т.е. x[i] 
}
/* cобственно вот оно решение - следующие три строчки */
max=x[0];                      //пусть x[0] -максимальный элемент массива; присвоим max=X[0]
for(i=0; i<=11; i++)       // цикл по i от 0 до 11 : перебор элементов массива. 
if(x[i]>max) max=x[i];   // проверка: если текущий элемент X[i] больше max, то max=X[i]
printf(" max X=%2.2f", max);         // после выполнения цикла пишем на экран ответ
} 

2) Пусть требуется найти минимальный элемент и его индексы в матрице (двухмерном массиве) Х из трех строк и четырех столбцов.
Возможное решение:

#include <stdio.h>
main()
{
float x[3][4], min;    
// определяем двухмерный массив Х 3 на 4 элемента
int i,j,ii,jj;                  // i,j -для организации цикла, ii,jj -индексы min элемента
for(i=0; i<=2; i++)    // обслуживание ввода массива Х пользователем
for(j=0; j<=3; j++)
{
printf(" X(%d,%d)=", i,j);
scanf("%f", &x[i][j]);
}

/* а вот и решение - следующие 8 строк */
min=x[0][0]; ii=0,jj=0;     // пусть min элемент стоит в строке 0, столбце 0
for(i=0; i<=2; i++)           // цикл по строкам
for(j=0; j<=3; j++)           // ... и по столбцам
if(x[i][j]<min)                 // и если текущий элемент массива x[i][j] меньше Y, то
{                                     // открываем блок операторов, в которых
min=x[i][j];                    // корректируем текущие значения min
ii=i; jj=j;                        // и индексов ii и jj
}                                     // конец условного блока if
printf(" min X(%d,%d)=%2.2f", ii,jj, min);     //выводим ответ на экран
} 

3) Пусть требуется упорядочить по возрастанию одномерный массив Х, состоящий из 12 элементов. 
Возможное решение:

#include <stdio.h>
main()
{
float x[12], y;
               // y- "буферная" переменная
int i, j;
for(i=0; i<=11; i++)
     // обслуживание ввода массива Х пользователем
{
printf(" X(%d)=", i);
scanf("%f", &x[i]);
}

/* далее - собственно решение, правда, не рациональное, но простое: */
for(j=0; j<=10; j++)     // делаем 11 переборок всего массива
for(i=0; i<=10; i++)     // а в каждой переборке - сравниваем
{
if(x[i] > x[i+1])
             // x[i] с последующим x[i+1], и если x[i]>x[i+1],
{                                    // то меняем их значения местами:
y=x[i];                 // копируем значение x[i] в буферную переменную Y
x[i]=x[i+1];         // присваиваем x[i]=x[i+1]
x[i+1]=y;             // и значение x[i] из Y присваиваем x[i+1]-му элементу
}                           // конец блока if
}
/* пишем результат на экран: */
printf("************* result: ************\n");
for(i=0; i<=11; i++)
printf("\n X(%d)=%1.2f", i, x[i]);
}

Что нерационального в приведенной выше программе? Конечно же принудительная переборка всего массива 11 раз.
Сделаем так, чтобы переборка повторялась только в том случае, если на предыдущем шаге были сделаны перестановки. Возможное решение:

#include <stdio.h>
main()
{
float x[12], y;
int i, j;
for(i=0; i<=11; i++)
{
printf(" X(%d)=", i);
scanf("%f", &x[i]);
}
do{
                 // будем повторять переборку элементов... 
j=0;
for(i=0; i<=10; i++)
if(x[i] > x[i+1])
{
j=1;
                 // (j=1 - флаг, указывает на то, что перестановки были сделаны)
y=x[i];
x[i]=x[i+1];
x[i+1]=y;
}
} while (j==1);
/* ...повторять, если на предыдущем шаге были сделаны перестановки */ 
printf("************* result: ************\n");
for(i=0; i<=11; i++)
printf("\n X(%d)=%1.2f", i, x[i]);
}

                    <<ранее             к оглавлению        далее>>

                      то же на Fortran                        то же на Basic                 то же на Pascal

                аналог на JavaScript
Используются технологии uCoz