Опубликован: 14.12.2010 | Доступ: свободный | Студентов: 3080 / 691 | Оценка: 4.53 / 4.12 | Длительность: 26:28:00
Лекция 4:

Организация циклов в языке С

< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Аннотация: В лекции рассматриваются операторы цикла while, for, do–while. Приводятся составные операторы цикла и операторы отношения, для которых приводятся примеры с полной программной реализацией.

Теоретическая часть

Операторы цикла относятся к управляющим конструкциям всякого языка программирования. Управляющие операторы и конструкции языка задают порядок, в котором выполняются вычислительные операции программы [3.1].

3.1. Оператор while

Изучение операторов цикла начнем с оператора while. Цикл while имеет следующий формат (синтаксис) записи [3.2]:

while (expression)
program statement;

Производится расчет выражения expression, заключенного в круглые скобки. Если в результате расчета выражения expression получается истинный результат ( TRUE ), то выполняется утверждение program statement, следующее непосредственно за закрывающей круглой скобкой. После выполнения этого утверждения вновь рассчитывается выражение expression. Если в результате расчета будет TRUE, то вновь будут выполнены утверждения program statement. Цикл повторяется до тех пор, пока в результате расчета выражения expression (в круглых скобках оператора while ) не будет получено значение FALSE (ложный), которое является признаком окончания цикла, после чего выполнение программы продолжается с утверждения, следующего за утверждением program statement. Когда требуется выполнить группу утверждений, то она (группа) располагается в фигурных скобках:

while (expression)
{
program statement;
program2 statement2;
program3 statement3;
...
}

Открывающаяся фигурная скобка может следовать непосредственно после закрывающей круглой скобки оператора while. Все, что находится в фигурных скобках, будет выполняться, пока верно выражение expression.

Очевидно, что неверное задание выражения expression может привести к бесконечному циклу (к зацикливанию).

3.2. Оператор for

Оператор цикла for имеет следующий формат записи:

for (init_expression; loop_condition; loop_expression)
program statement;

Три выражения, заключенные в круглые скобки оператора цикла for, задают условия выполнения программного цикла [3.2].

Первый параметр init_expression используется для задания начального значения цикла.

Второй компонент loop_condition определяет условие или условия, в соответствии с которыми будет происходить выход из цикла. Повторение будет происходить до тех пор, пока это условие (или условия) выполняются. Если условие не выполняется, то цикл немедленно заканчивается.

Третий параметр loop_expression выполняется каждый раз, когда заканчивается обработка тела цикла, т.е. program statement.

Чаще всего выражения init_expression и loop_expression являются операторами присваивания или вызовами функций, а второе выражение loop_condition – выражением отношения или логическим выражением [3.1]. Любую из трех частей можно опустить, но точки с запятыми должны остаться на своих местах. Если опустить init_expression или loop_expression, то соответствующие операции не будут выполняться. Если же опустить проверку условия loop_condition, то по умолчанию считается, что условие продолжения цикла всегда истинно, и тогда цикл станет бесконечным (произойдет зацикливание).

Когда требуется выполнения нескольких утверждений, то они должны заключаться в фигурные скобки:

for (init_expression; loop_condition; loop_expression)
{
program1 statement1;
program2 statement2;
program3 statement3;
...
}

В представленном случае тело цикла находится в фигурных скобках.

Конструкция цикла, реализованная оператором for, может быть выполнена также и оператором while следующим образом [3.1]:

init_expression;
while (loop_condition)
{
program statement;
loop_expression;
}

Исключением является применение операции continue.

Операторы отношения перечислены в табл. 3.1.

Таблица 3.1.
Операторы отношения языка программирования С
№ п/п Оператор Значение
1) == Равно
2) != Не равно
3) < Меньше
4) <= Меньше или равно
5) > Больше
6) >= больше или равно

В программах языка С возможно применять вложенные циклы, каждый из которых контролируется своей переменной цикла и своим отношением (второе выражение в круглых скобках оператора for ). Вложенные циклы могут идти непосредственно друг за другом или составлять тело цикла с помощью фигурных скобок. Возможно также использование двух индексных переменных для инициализации начала цикла с последующим их инкрементированием (увеличением) или декрементированием (уменьшением).

3.3. Оператор do–while

Рассмотренные операторы цикла while и for производят проверку условия выполнения цикла до начала выполнения тела цикла [3.1]. Поэтому тело цикла может ни разу не выполниться, если с самого начала результатом расчета условия выполнения цикла будет значение FALSE (ложь). В случае необходимости производить проверку условия выполнения цикла после тела цикла (т.е. когда выполняется хотя бы одно предписанное действие в теле цикла) прибегают к циклу do–while.

Оператор цикла do–while имеет следующий формат записи [3.2]:

do
program statement;
while (loop_condition);

Выполнение цикла do–while происходит следующим образом: сначала выполняется утверждение program statement, затем производится проверка условия выполнения цикла loop_condition с помощью оператора while. Если результатом проверки будет значение TRUE (истина), то выполнение цикла продолжится, и утверждение program statement всякий раз будет выполняться вновь. Повторение цикла будет продолжаться до тех пор, пока в результате проверки условия выполнения цикла loop_condition будет получаться значение TRUE. Когда в результате проверки условия будет вычислено значение FALSE (ложь), то выполнение цикла прекратится и произойдет переход к утверждению (следующему фрагменту программы), непосредственно следующему за циклом [3.2].

Таким образом, цикл do–while гарантированно выполнится хотя бы один раз.

В случае выполнения нескольких утверждений используются фигурные скобки для выделения тела цикла:

do {
program1 statement1;
program2 statement2;
program3 statement3;
... } while (loop_condition);

Оператор цикла while называется оператором цикла с предусловием, оператор цикла for называется оператором цикла с параметром, оператор цикла do–while называется оператором цикла c постусловием.

Практическая часть

Рассмотрим примеры программ с операторами циклов while, for и do–while.

Пример 1. Напишите программу вывода на экран пользователя целых положительных чисел с помощью оператора while. Начальное и последнее число должно задаваться пользователем с клавиатуры.

Программный код решения примера:

#include <stdio.h>
#include <conio.h>

int main(void)
 {
int i, j = 0, n;
printf("\n\t Enter the primary natural number: ");
scanf_s("%d", &i);
printf("\t Enter the last natural number: ");
scanf_s("%d", &n);

printf("\n\t The numbers are:");
while (i <= n) {
printf("\n\t %3d", i);
++i;
++j; 
}
printf("\n\t Total numbers: %d\n", j);
	
printf("\n Press any key: ");
	_getch();
	return 0;
 }
Результат выполнения программы с вводом целых чисел

Рис. 3.1. Результат выполнения программы с вводом целых чисел

Возможный результат выполнения программы показан на рис. 3.1.

В программе использована функция scanf_s(), принятая в MS Visual Studio. В программе применено инкрементирование переменных, принятое в языке С, а именно ++i или ++j означает, что переменные увеличиваются на единицу. При этом знаки "++" могут располагаться перед именем переменной или после. Отличие в том, что ++i – это значение переменной после увеличения, а i++ – сначала переменная имеет заданное значение, а потом происходит ее увеличение. Для переменных цикла обе формы равнозначны.

Условием цикла является то, что пока переменная i меньше или равна переменной n (предполагается, что n больше начального значения i ), то будут выполняться действия (печать и увеличение переменной j ), заложенные в теле цикла. Расчет выражения, заключенного в круглые скобки оператора, предназначен для проверки нестрогого неравенства переменной i по отношению к переменной n. Если это неравенство выполняется, то в теле цикла происходят печать и увеличение (инкрементирование) переменных i, j.

< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Мухаммадюсуф Курбонов
Мухаммадюсуф Курбонов