
- •«Национальный исследовательский томский политехнический университет»
- •Разработка программы сортировки элементов массива
- •Алгоритмы сортировки
- •Метод пузырька (обменная сортировка с выбором)
- •Сортировка выбором
- •Сортировка методом Шелла
- •Другие алгоритмы сортировки. Сравнение алгоритмов
- •Операторы циклов
- •Оператор цикла while
- •Оператор цикла for
- •Оператор цикла do while
- •Вложенные циклы
-
Оператор цикла do while
Структура оператора:
do оператор while (выражение);
|
Рисунок 8 |
Оператор do while определяет действия, которые циклически выполняются до тех пор, пока проверяемое выражение не станет ложным, или равным нулю (рисунок Error: Reference source not found). Оператор do while – это цикл с постусловием; решением, выполнять или нет в очередной раз тело цикла, принимается после его прохождения. Поэтому тело цикла будет выполнено по крайней мере один раз. Оператор, образующий тело цикла, может быть как простым, так и составным.
Пример 1:
do{
printf("Введите любой символ: ");
scanf("%s",&c);
printf("Симовол = %c; его код = %d\n", n, n);
} while ( c != 'q' );
В этом примере выполняется абсолютно то же самое, что и в приведенном выше для организации ввода символов.
Пример 2:
do{
printf("Введите количество строк в массиве (1..5): ");
scanf("%d",&m);
} while ( m<1 || m>5 );
Здесь в качестве "условия" проверяется значение, введенное в качестве количества строк матрицы. В случае истинности, что на самом деле означает, что число введено неправильное, количество строк запрашивается вновь.
-
Вложенные циклы
Так как "оператор" во всех приведенных выше конструкциях может быть составным, то внутри него можно использовать и другой цикл, и операторы ветвления, и т.д.
Вложенным называется цикл, находящийся внутри другого цикла (рисунок 9).
Рисунок 9 – Изображение на блок-схеме вложенных циклов
При работе с двумерными массивами, для перебора всех элементов массива (например, он описан как double mm[razm1][razm2]), очень удобно пользоваться приведенной ниже конструкцией. Здесь цикл с параметром ind1 является внешним, в котором задается текущий номер строки в массиве mm, а цикл с параметром ind2 – внутренним, в котором задается текущий номер столбца. Таким образом, каждое сочетание ind1 и ind2 позволяет обратиться к каждому элементу массива:
for (ind1=0; ind1 < razm1; ind1++)
{
for (ind2=0; ind2 < razm2; ind2++)
{
... – операторы, использующие соответствующий элемент массива; например:
mm[ind1][ind2] = Pi * (ind1+ind2);
}
}
a = mm[ind1][ind2]; /* – неправильно, т.к. оба цикла уже закончились, и оба индекса уже приняли "плохое" значение. */