Оператор присваивания
Операторы присваивания, условный и переключатель
Операторы служат основными строительными блоками программы. В языке Си указанием на наличие оператора служит символ «точка с запятой», стоящий в конце него.
Операторы состоят из выражений. Выражение представляет собой объединение операций и операндов. Операндом называется то, над чем выполняется операция.
Общий вид оператора присваивания:
<Имя> = <Выражение>
Пример:
int x, y, a
x=5;
y=x*2+7;
a=y/4;
Переменные получают значения: х=5, y=17, а=4.
В языке Си разрешается включать присваивания в выражения, т.е. присваивание может рассматриваться как операция с учётом старшинства и влияния скобок.
Пример: а=(y=(x=5)*2+7)/4.
В результате переменная х получает значение 5, причём это значение участвует в дальнейших вычислениях. Затем выполняется умножение (5*2), сложение (10+7) и ещё одно присваивание (y=17). Переменная у получает значение 17, после чего производится деление (17/4), результат которого присваивается переменной а.
В языке Си для компактной записи операторов присваивания имеются специальные операции:
+=, -=, *=, /=, %=.
Так, следующие две записи на языке Си эквивалентны: i=i+2 и i+=2.
Пример:
int x,y;
x=y=5;
x+=2; /* х увеличить на 2, результат х=7 */
y-=3; /* у уменьшить на 3, результат у=2 */
x*=y; /* х умножить на у, результат х=14 */
x/=++y; /* разделить х на увеличенный у; результат у=3, х=14/3 */
Операция присваивания сама по себе имеет значение (равное значению выражения, стоящего справа от знака “=”) и может входить в выражения.
Оператор if/else
Общий вид оператора:
If (<выражение>) <операторы 1>
Else <операторы 2>
Здесь часть “Else <операторы 2>” является необязательной, можно применять и неполное условие.
Вначале вычисляется значение выражения. Операторы 1 выполняются, если значение выражения истинно. Если выражение ложно (его значение равно нулю), и если есть часть с else, то выполняются операторы 2.
При программировании требуется аккуратно различать знаки = и ==, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанные с неправильным использованием знаков этих операций, что приведёт к неверным результатам.
В качестве оператора 1 может стоять любой оператор, в частности, снова оператор if/else. При этом может возникнуть неоднозначность, если во вложенной последовательности операторов if/else часть else опускается. Else всегда соответствует ближайшему предыдущему if, не содержащему else.
Например, в конструкции
If (n>0)
If (a>b)
z=a;
else
z=b;
else относится к внутреннему if. Если требуется отнести else к внешнему if, то необходимо использовать фигурные скобки:
If (n>0)
{ If (a>b)
z=a; }
else
z=b;
Часто приходится осуществлять выбор более чем из двух вариантов. Чтобы учесть это, конструкция if/else расширяется конструкцией else/if. Распространенный способ выбора по значению из нескольких вариантов:
If (<выражение 1>) <оператор 1>
Else If (<выражение 2>) <оператор 2>
Else If (<выражение 3>) <оператор 3>
Else <оператор N>;
Выражения просматриваются последовательно сверху вниз; как только какое-то выражение становится истинным, выполняется следующий за ним оператор, и на этом вся цепочка заканчивается. Последняя часть else, как и раньше, может быть опущена.
В языке Си++ имеется компактный способ записи одного из видов оператора if/else. Он называется «условным выражением» или «тернарной операцией». Такое выражение выглядит в общем виде так:
B1 ? B2 : B3
Сначала вычисляется значение выражения В1. Если оно отлично от нуля (истинно), то вычисляется значение выражения В2, которое и становится значением условного выражения. В противном случае вычисляется значение выражения В3, и оно становится значением условного выражения.
Условное выражение удобно использовать в тех случаях, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений. Типичными примерами являются присваивание переменной значение большей из двух величин:
max = (a>b) ? a : b;
и нахождение абсолютного значения числа:
x = (y<0) ? –y : y;
Оператор-переключатель switch
В тех случаях, когда в программе необходимо произвести выбор одного из нескольких вариантов, удобно применять оператор switch.
Его синтаксис:
Switch (<выражение>)
{
case <константа 1>: <список операторов 1>;
case <константа 2>: <список операторов 2>;
…
case <константа N>: <список операторов N>;
default: <список операторов>;
}
Оператор-переключатель выполняется следующим образом. Вычисляется значение выражения в скобках, приведённого после ключевого слова switch, затем программа просматривает список меток, указанных после слов case, до тех пор, пока не находит ту, которая соответствует данному значению. Далее программа переходит к выполнению оператора, расположенного в этой строке. Если подходящей метки не найдётся и если существует строка с меткой default:, то будет выполняться оператор, помеченный этой меткой. В противном случае произойдёт переход к оператору, расположенному за оператором switch.
Метки, имеющиеся в операторе switch, должны быть константами или константными выражениями (выражениями, операнды которого константы) целого или символьного типа. Запрещается использовать в качестве метки переменную. Значением выражения в скобках должна быть величина целого или символьного типа. Список операторов варианта может быть либо пустым, либо заканчиваться одним из операторов завершения (break, continue, goto, return). Если у вариантов нет общих частей, то рекомендуется каждый вариант завершать оператором break.
Пример:
Если не использовать оператор завершения, то по окончании выполнения списка операторов выбранного варианта произойдёт переход на следующий вариант из списка.