
- •Разработка программы нахождения максимального или минимального элементов в массиве
- •Основные операции, операторы ветвления и циклов
- •Арифметические выражения
- •Логические выражения
- •Приоритеты (порядок) выполнения операций
- •Порядок вычислений
- •Выбор вариантов
- •Условные операторы
- •Оператор ветвления (проверки условия) if
- •If (выражение1)
- •If (выражение2)
- •Операция условия
- •Выражение1 ? выражение2 : выражение3
- •Множественный выбор: оператор switch
- •Операторы циклов
- •Оператор цикла while
- •Оператор цикла for
- •Оператор цикла do while
- •Вложенные циклы
- •Другие управляющие операторы
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Организация ввода элементов массивов
- •Задача поиска минимального (максимального) значения
-
Оператор цикла do while
Структура оператора:
do оператор while (выражение);
|
Рисунок 7 |
Оператор 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 );
Здесь в качестве "условия" проверяется значение, введенное в качестве количества строк матрицы. В случае истинности, что на самом деле означает, что число введено неправильное, количество строк запрашивается вновь.
-
Вложенные циклы
Так как "оператор" во всех приведенных выше конструкциях может быть составным, то внутри него можно использовать и другой цикл, и операторы ветвления, и т.д.
Вложенным называется цикл, находящийся внутри другого цикла (рисунок 8).
Рисунок 8 – Изображение на блок-схеме вложенных циклов
При работе с двумерными массивами, для перебора всех элементов массива (например, он описан как 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]; /* – неправильно, т.к. оба цикла уже закончились, и оба индекса уже приняли "плохое" значение. */
-
Другие управляющие операторы
Операторы, рассматриваемые ниже, обычно используются реже, поскольку слишком частое их использование ухудшает читаемость программы, увеличивает вероятность ошибок и затрудняет ее модификацию.
Выполнение каждого из этих трех операторов языка вызывает скачкообразное изменение процесса выполнения программы, т.е. переход от одной команды программы к другой (не следующей за ней непосредственно).
-
Оператор break
Оператор break можно использовать внутри любой из трех форм цикла и конструкции switch. Его выполнение приводит к тому, что управление программой, минуя оставшуюся часть тела цикла или конструкцию switch, содержащую данный оператор, передается на следующую (за этим циклом или за конструкцией switch) команду.
Пример:
switch (number)
{
case 4: printf("Это хороший выбор.\n");
break;
case 5: printf("Это неплохой выбор.\n");
break;
default: printf("Это плохой выбор.\n");
}