Циклы в СИ
В языке СИ оператор цикла состоит из двух основных частей: непосредственно сам оператор цикла (for,while, do ... while); тело цикла – простой или составной оператор.Оператор цикла со счетчиком в СИ
Оператор цикла со счетчиком предполагает, что количество итераций (выполнений) тела цикла жестко задано
в виде некоторой константы или значения переменной. На самом деле данный тип циклов в языках программирования,
как правило, значительно более гибок. В языке СИ оператор цикла со счетчиком имеет следующий синтаксис:for(инициализация; условие; приращение) тело цикла. Например, пользователь вводит последовательность из десяти положительных чисел. Определить максимум этой последовательности.
unsigned max = 0;
printf("Введите последовательность: ");
for(int i=0;i<10;i++)
{
unsigned value;
scanf("%u”,&value);
if(max < value) max = value;
}
printf("Максимальное значение: %u\n",max);
В операторе for любой из блоков может отсутствовать. Если отсутствует какой-либо блок в круглых скобках (инициализация, условие или приращение), то разделитель этого блока все равно присутствует. Если отсутствует тело цикла, то после закрывающей оператор for круглой скобки просто указывается точка с запятой.
Рассмотрим задачу вычисления факториала числа. Любой из ниже приведенных фрагментов программы (циклов) будет правильным:
for(int i=1, fact=1.0; i<=n; i++) fact *= i;
for(int i=1, fact=1.0; i<=n; fact *= i++);
for(int i=1, fact=1.0; i<=n;) fact *= i++;
for(fact=1.0;n>0;) fact *= n--;
Возможность пропуска блоков в операторе for является довольно удобной, хотя в некоторых случаях вообще лишена смысла. Например, допустима следующая конструкция: for(;;); Это вечный цикл, который не выполняет никаких действий.
Правила форматирования
При написании программ с использованием цикла for рекомендуется придерживаться следующих правил
форматирования текста программы:Общий формат цикла for при составном операторе в теле цикла:
for(...)
{
оператор № 1;
...
оператор № 2;
}
Общий формат цикла for при простом операторе в теле цикла:
for(...)
оператор;
Если тело цикла состоит из простого или составного операторов имеющих достаточно краткую запись, то тело цикла допускается указывать на той же строке, что и сам цикл:
for(...) оператор;
for(...) {оператор №1; ... оператор №N;}
Оператор цикла с предусловием в СИ
Оператор цикла с предусловием (сначала проверяется условие, а затем выполняется тело цикла) имеет
следующий синтаксис:while(условие) тело цикла
Например, в следующем фрагменте программы осуществляется вывод на экран таблицы значений функции синус, если аргумент изменяется от a до b с шагом h. Переменные a, b и h вещественные (тип double), и их значения уже введены.
while(a <= b) {
printf("sin(%.4lf) = %.4lf\n",a,sin(a));
a += h;
}
ПРИМЕЧАНИЕ: В языке СИ данную программу можно также реализовать и с использованием цикла for:
for(;a<=b;a+=h)
printf("sin(%.4lf) = %.4lf\n",a,sin(a));
Правила форматирования. При написании программ с использованием цикла while рекомендуется придерживаться следующих правил форматирования текста программы:
Общий формат цикла while при составном операторе в теле цикла:
while(условие) {
оператор № 1;
...
оператор № 2;
}
Общий формат цикла while при простом операторе в теле цикла:
while(условие)
оператор;
Если тело цикла состоит из простого или составного операторов имеющих достаточно краткую запись, то тело цикла допускается указывать на той же строке, что и сам цикл:
while(условие) оператор;
while(условие) {оператор № 1; ... оператор № N;}
Оператор цикла с постусловием в СИ
Оператор цикла с постусловием (сначала выполняется тело цикла, а затем проверяется условие) имеет
следующий синтаксис:do тело цикла while(условие);
Например, в следующем фрагменте программы осуществляется вычисление суммы ряда с точностью eps (вещественная переменная типа double, содержит значение погрешности вычисления).
double s = 0.0;
unsigned i = 1;
do{
s = 1.0/i;
sum += s;
i++;
}while(eps < s);
Правила форматирования. При написании программ с использованием цикла do...while рекомендуется придерживаться следующих правил форматирования текста программы:
Общий формат цикла do...while при составном операторе в теле цикла:
do{
оператор № 1;
...
оператор № 2;
}while(условие);
Общий формат цикла do...while при простом операторе в теле цикла:
do оператор while(условие);
Если тело цикла состоит из составного оператора имеющего достаточно краткую запись, то тело цикла допускается указывать на той же строке, что и сам цикл:
do {оператор №1; ... оператор №N;} while(условие);
Можно перейти к одномерным массивам.