Структура оператора цикла for описывается синтаксической диаграммой for ( Сп1 ; W ; Сп2 ) Oп
где используются следующие обозначения:
Сп1 – список операторов присваивания, задающих начальные значения одной или нескольким переменным - параметрам цикла, которые могут испольльзоваться в выра-жении W и других частях цикла. Список может отсутствовать, если параметры получили требуемые значения до входа в цикл.
W – выражение, вычисляемое перед передачей управления в тело цикла, если его значение «истина» (не ноль), или следующему за циклом оператору, если его значение «ложь» (ноль). Выражение может отсутствовать, если выход из цикла организован в его теле, например, с помощью оператора break (см. ниже).
Сп2 – список операторов, задающих новые значения одному или нескольким па-раметрам цикла. Он может отсутствовать, если значения параметров цикла изменяются, при необходимости, в теле цикла.
Оп - тело цикла, в качестве которого должен использоваться или блок, или один оператор, возможно, пустой.
|
|
«Практикум по программированию на языке C в среде VS C++»
Алгоритма выполнения цикла представляет следующая схема
Например, в программе
#include "stdafx.h" #include "math.h"
int _tmain(int argc, _TCHAR* argv[])
{
int i;
for (i=0; i<=6; i++)printf("%10d%8.2f\n",i*10,sin(3.14/18*i));
return0;
}
оператор printf будет выполняться 7 раз при значениях параметра целого типа i, изменяющемся от 0 до 6 с шагом 1.
На экран будет выведена таблица, в первом столбце которой будут целые числа 0, 10, 20, …, 60, представляющие величины углов в градусах, а во втором – соответствую-щие им значения синуса:
0 0.00
10 0.17
20 0.34
30 0.50
40 0.64
«Практикум по программированию на языке C в среде VS C++»
50 0.77
60 0.87
Параметром цикла for может быть и вещественная переменная, а при наличии в списках Сп1 и Сп2 нескольких операторов они будут выполняться в порядке слева на-право, как в следующем примере
int i; float r;
...
for (i=1, r=-1.0; i<=6; ++i, r/=-i)printf("%10d%8.4f\n",i,r);
Результатом выполнения этого фрагмента программы будет таблица
1 -1.0000
2 0.5000
3 -0.1667
4 0.0417
5 -0.0083
6 0.0014
В приведенном примере переменная i является основным параметром цикла, оп-ределяющим условие выхода из него, а переменная r – дополнительным параметром цикла, изменялись синхронно с i, но по закону геометрической прогрессии.
При наличии в первом и последнем разделах заголовка цикла for нескольких операторов (как в рассмотренном примере) они должны разделяться знаком «запятая», и выполняться будут в порядке слева направо. Это позволяет сделать компактное описание цикла, возможно, в ущерб пониманию алгоритма. Для улучшения читаемости алгоритма лучше вынести все работы, связанные с собственно обработкой данных, а не организа-цией цикла, за пределы его заголовка, разместив соответствующие операторы в теле цикла и, если требуется, до входа в цикл. Для рассмотренного примера это выглядело бы так
|
|
inti;floatr;
...
r=-1.0;
for(i=1; i<=6; ++i)
{
«Практикум по программированию на языке C в среде VS C++»
printf("%10d%8.4f\n",i,r);r/=-i-1;
}
В общем случае условие выхода из цикла может строиться на основе переменных, изменяющих свои значения в теле цикла, а не в заголовке цикла for. Например, в по-следнем фрагменте программы заголовок цикла можно заменить следующим
for (i=1; fabs(r)>0.0013; ++i)