Операторы. Блок операторов. Условный оператор. Операторы циклов. Оператор возврата из функции.
Операторы
Программа на языке C состоит из модулей, модуль – из функций, функции – из операторов. Согласно принципам структурного программирования нам известно, что любую программу можно составить из трех структур: линейной (следования), разветвляющейся (развилки) и циклической (повторения).
Для реализации этих структур в каждом языке программирования существуют специальные команды, называемые операторами.
оператора - выражение, являющееся законченной инструкци для компьютера, чьим отличительным признаком является символ <;> , стоящий в конце.
Блок операторов
Блок операторов заключается в фигурные скобки {оператор}.
Общий вид:
{
Внутренние объявления и определения данных
Операторы
}
Оператор if-else.
Синтаксис:
if (выражение) оператор1;
[else оператор2;]
Вначале вычисляется заключенное в скобки выражение, которое должно принимать целое значение или будет преобразовано к целому значению. В условных операторах используются арифметические операции, операции отношения и логические операции.
Далее выполнение осуществляется по следующей схеме:
§ если выражение истинно (т.е. отлично от 0), то выполняется оператор1.
§ если выражение ложно (т.е. равно 0),то выполняется оператор2.
§ если выражение ложно и отсутствует оператор2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
Примечания:
· Вторая часть оператора (еlse оператор2) является необязательной. Если значение выражения не равно 0, а служебное слово elseотсутствует, то управление передается следующему оператору программы.
· Иногда в блоке оператора if бывает нужно выполнить не одно действие, а несколько. Для этого используется составной оператор или блок операторов:
if (i < j)
i++;
else
{
j = i-3;
i++;
}
Этот пример иллюстрирует тот факт, что на месте оператор1, так же как и на месте оператор2 могут находиться блоки операторов.
Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.
Операции сравнения младше (ниже по приоритету), чем арифметические операции. Поэтому значения арифметических выражений, включённых в выражение сравнения, будут вычисляться раньше выполнения операции сравнения. Поэтому вполне уместно использование выражений типа: i+k>j или a*5<j+4.
Например:
void func(int a)
{
if(a%10==0)
printf (“a кратно десяти”);
else
printf (“a не кратно десяти”);
}
Оператор return
Этот оператор имеет две основные формы записи:
· return;
· return (выражение); Например, return(5+i);
Первая форма обеспечивает простую передачу управления из текущей функции обратно в вызывающую функцию. Применяется для выхода из функции типа void.
Вторая форма обеспечивает не только передачу управления, но еще и возвращение значения выражения в вызывающую функцию. Применяется в функциях типа, отличного от void. Тип возвращаемого значения идентичен типу функции.
Циклы.
Циклы необходимы, когда надо повторить некоторые действия несколько раз, как правило, пока выполняется некоторое условие. В языке имеются 3 вида операторов цикла: for, while и do…while.
Оба цикла while и forявляются циклами с предусловием. При этом проверка истинности условия осуществляется перед началом каждой итерации цикла.
Оператор do…while – это конструкция цикла с постусловием (условием на выходе), где истинность условия проверяется после выполнения каждой итерации цикла.
Цикл for.
Цикл (для) имеется практически во всех языках программирования. Однако, версия этого цикла, используемая в языке C, отличается большей гибкостью и предоставляет больше возможностей.
При организации цикла, когда его тело должно быть выполнено фиксированное число раз, осуществляется 3 операции: инициализация счётчика, сравнение его величины с некоторым граничным значением и изменение значения счётчика при каждом прохождении тела цикла.
Синтаксис оператора for:
for(выражение1;выражение2;выражение 3 ) оператор;где
выражение 1 – выполняется в начале цикла (инициализация переменной-счётчика);
выражение 2 – проверяет условие продолжения цикла;
выражение 3 – выполняется в конце итерации (модифицирует переменную-счётчик).
В качестве тела цикла может выступать один оператор или блок операторов.
Например:
for(i=1; i<5; i ++)
printf(“i=%d\n”, i);
for(i=5; i>3; i--)
{
printf(“Another value…”);
printf(“i=%d\n”, i);
}
В отличие от других языков, в C оператор for является очень гибкой конструкцией, т.к. не накладывает практически никаких ограничений на содержимое трёх выражений, входящих в состав оператора. Чтобы понять любую конструкцию, записанную на основе оператора for, достаточно помнить следующие правила:
1. Первое выражение вызывается один раз в самом начале цикла, перед первой итерацией. Может содержать инициализацию переменной-счётчика, может содержать более сложное выражение, может быть пустым.
2. Второе выражение – условие продолжения цикла. В начале каждой итерации происходит вычисление этого выражения и если оно равно true, то итерация выполняется, иначе цикл заканчивается. Если это выражение равно false в самом начале цикла, то тело цикла не будет выполнено ни разу. Выражение может быть пустым, в этом случае компилятор считает, что выражение равно true.
3. Третье выражение – операция, выполняемая каждый раз по окончании очередной итерации. Обычно используется для изменения переменной-счётчика. Может быть пустым.
4. В С переменная-счётчик может быть изменена в теле цикла (в отличие от Pascal). Поэтому надо учитывать, что операторы в теле цикла могут оказывать влияние на длительность цикла.
5. С помощью оператора <,> в качестве каждого из 3 выражений можно записывать выражения, содержащие несколько операций.
Поясним всё вышесказанное на примерах:
//--- Вечный цикл ------------------------------------
for(;1;) // Также можно записать for(;;)
{
…
}
//--- Изменение переменной-счётчика в теле цикла -----
//--- Цикл пройдёт в 3 итерации для i=0, 2, 4 --------
for(i=0;i<5;i++)
{
…
i+=1;
}
//--- Одновременное изменение нескольких переменных ---
for(i=0,j=3; i<5 && k>-6; i++,j--)
{
k=func(i,j);
…
}
Но чаще всего стараются все дополнительные вычисления проводить в теле цикла сохраняя тем самым запись самого оператора for относительно простой.
Цикл while
Следующий оператор цикла в языке СИ – это цикл while (пока). Основная его форма имеет вид:
while (условие) оператор;
где условие может принимать нулевое или ненулевое значение, а оператор может быть простым или составным.
Выражение, стоящее в круглых скобках, вычисляется в цикле while. Если оно равно true, то выполняется идущий за ним оператор (тело цикла) и выражение вычисляется снова. Если выражение ложно, цикл whileзаканчивается и программа продолжает свою работу.
При построении цикла whileвы должны включить в него какие-то конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов, оно стало ложным. В противном случае выполнение цикла никогда не завершится.
Эта последовательность действий, состоящая из проверки и выполнения оператора, периодически повторяющегося до тех пор, пока выражение не станет ложным (в общем случае, равным 0).
Например, следующий фрагмент программы:
index=2;
while (index<5)
printf (“Neverending story! \n”);
печатает это радостное сообщение бесконечное число раз, поскольку в цикле отсутствуют конструкции, изменяющие величину переменной index, которой было присвоено значение 2.
Исправим программу следующим образом:
index=2;
while (index<5)
{
printf (“It will be over someday…\n”);
index++;
}
И получим печать сообщения только 3 раза. Разумеется, что то же самое с большим изяшеством можно реализовать с помощью цикла for. Цикл while же используется в реальных программах в более сложных случаях.
Интересно, что согласно синтаксису языка C оператор while может быть полностью заменён оператором for в виде for(;условие;).
Решение, выполнить ли в очередной раз тело цикла, принимается перед началом его прохождения. Поэтому, вполне возможно, что тело цикла не будет выполнено ни разу. Оператор, образующий тело цикла, может либо простым, либо составным.
Цикл do…while:
В общем виде цикл do…while записывается следующим образом:
do
оператор;
while (выражение);
Это единственная в C конструкция цикла с постусловием.
Эта конструкция полностью идентична циклу while за исключением того, что проверка условия осуществляется в конце цикла. Поэтому тло цикла do…while всегда выполняется, по крайней мере, один раз.
Использовать цикл do…while лучше всего в тех случаях, когда должна быть выполнена, по крайней мере, одна итерация, например:
int item;
do
item=ReadItem(); // Последовательно считываем элементы
while(item!=0); // пока не получим нулевой элемент