Материал: lectures_3

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

цикла. Здесь же рассматриваются общие принципы организации арифметических циклов. Работа циклов, управляемых циклическими инструкциями while и do while, поясняется на примерах организации итерационных циклов.

29. Цикл, управляемый инструкцией for

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

В общем случае цикл, построенный на основе инструкции for, имеет

следующий формат:

[инструкции_инициализации] for([выражение1];[выражение2];[выражение3])

инструкция продолжение_программы

Здесь инструкции_инициализации – необязательная группа инструкций, используемая для инициализации цикла, for – зарезервированное слово,

выражение1, выражение2 и выражение3 – необязательные выражения, а

инструкция – единственная инструкция языка Си.

Выражения выражение1, выражение2 и выражение3, входящие в состав инструкции for, имеют следующее функциональное назначение:

выражение1 – инициализация цикла,

выражение2 – проверка нахождения в цикле,

выражение3 – продвижение цикла.

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

Использование внешних инструкции_инициализации может быть обусловлено соображениями повышения читабельности программного кода.

Работу рассматриваемого цикла удобно иллюстрировать следующей схемой алгоритма.

56

1

Инструкции_инициализации

выражение1

2

Нет

выражение2

Да

3

Тело (инст рук ция)

4

выражение3

5

Продолжение_прог раммы

Следует отметить, что эта схема совпадает с функциональной схемой цикла, которая приводилась в пункте 1.26. Порядок работы цикла, управляемого инструкцией for, состоит в следующем:

Выполняются инструкции_инициализации и вычисляется значение выражения выражение1 (символ 1 схемы алгоритма).

Оценивается значение выражения выражение2 (символ 2). Если

значение этого выражения равно true, то выполняется тело цикла (символ 3). В противном случае управление передается инструкции, непосредственно следующей за телом цикла (символ 5).

● После выполнения тела цикла вычисляется выражение выражение3 (символ 4). После этого вновь вычисляется выражение выражение2.

Рекомендуется применять цикл, управляемый инструкцией for в простейших случаях, когда все элементы управления циклом можно сосредоточить внутри инструкции for.

Перейдем к рассмотрению примера организации цикла, управляемого циклической инструкцией for. Приведем решение типичной задачи,

57

требующей организации арифметического цикла. Вначале рассмотрим принципы организации арифметических циклов.

Принципы организации арифметических циклов.

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

В некоторых задачах в постановке задачи уже имеется переменная, которую можно использовать в качестве счетчика. Например, это имеет место в той задаче, которая будет использована для иллюстрации работы цикла, управляемого инструкцией for. В других задачах такую переменную необходимо вводить специально.

Очень важно придерживаться следующего положения: все значения, которые будет принимать управляющая переменная, должны определяться инструкцией for. Это означает, что эта инструкция должна определять для этой переменной:

начальное значение,

конечное значение,

порядок изменения переменной в процессе выполнения цикла. Заметим, что в инструкции for имеются средства, позволяющие

полностью (в простейших случаях) контролировать использование управляющей переменной в цикле. Действительно, с помощью выражения выражение1 можно задать начальное значение управляющей переменной, с помощью выражения выражение2 можно задать условие, сравнивающее текущее значение управляющей переменной с ее последним значением, а с помощью выражения выражение3 можно задать закон изменения управляющей переменной в процессе работы цикла.

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

Перейдем теперь к рассмотрению конкретного примера.

Постановка задачи. Вычислить значение величины “y”, заданной следующим образом

y = ån i i x

i=2 +

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

58

(счетчика) удобно использовать переменную суммирования i. В этом цикле необходимо значения переменной i последовательно увеличивать от значения i == 2 до значения i == n. Инициализацию переменной суммирования (i) и сравнение текущего значения этой переменной с ее наибольшим значением (n) можно поручить инструкции for. Эта же инструкция может выполнять на каждом шаге цикла увеличение переменной суммирования на 1. Сложнее дело обстоит с реализацией процесса накопления суммы. В теле цикла необходимо вычислять очередное слагаемое по формуле i / (i + x) и добавлять его к уже накопленному значению суммы. Если у – имя переменной, выступающей в роли накопителя суммы, то для накопления суммы необходимо в теле цикла написать следующую инструкцию

y += i / (i + x);

Переменную – накопитель суммы “y” необходимо до входа в цикл обнулить. Это требуется для того, чтобы при первом выполнении тела цикла значение суммы было равно первому слагаемому.

Изложенные соображения приводят к следующей программе.

/* Файл summa.c */. #include<stdio.h> #include<conio.h>

int main(void)

{

clrcsr(); int i, n;

double x, y;

printf(“n=”) scanf(“%d”, &n); printf(“x=”); scanf(“%lf”, &x);

y = 0;

for(i = 2; i <= n; i++) y += i / (i + x);

printf(“y=%0.4\n”, y); getch();

return 0;

}

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

/* Файл summa.c */. #include<stdio.h> #include<conio.h>

59

int main(void)

{

clrcsr(); int n; printf(“n=”)

scanf(“%d”, &n); double x; printf(“x=”); scanf(“%lf”, &x);

double y = 0;

for(int i = 2; i <= n; i++) y += i / (i + x);

printf(“y=%0.4g\n”, y); getch();

return 0;

}

30. Цикл, управляемый инструкцией while

Вначале рассмотрим организацию цикла, управляемого этой инструкцией, а затем приведем ряд примеров.

В общем случае цикл, управляемый инструкцией while, может состоять из трех частей. К первой части цикла относятся элементы его инициализации. Вторую часть составляет сама инструкция while, а последнюю часть, часто называемую телом, – любая инструкция языка Си. Говорят, что инструкция while управляет работой тела цикла. В случае, когда в теле цикла должны находиться несколько инструкций, их следует объединить в составную инструкцию. Таким образом, в общем случае цикл, построенный на основе инструкции while, имеет следующий формат:

Инструкции_инициализации

 

while(выражение)

/* Инструкция while

*/

инструкция

/* Единственная инструкция */

 

продолжение_программы

 

Заключенное в круглые скобки выражение относится к категории полных выражений (оно не является подвыражением другого выражения). Поэтому к моменту начала выполнения тела цикла все побочные эффекты при его вычислении будут завершены.

Работу цикла удобно пояснить фрагментом схемы алгоритма, приведенным ниже.

60

Источник: https://studfile.net/preview/16544272/