Попробуйте часть кода до слова main заменить на #include "stdafx.h" //1 #include <iostream> //2 using namespace std; //3 |
Основные синтаксические конструкции языка C
5.3. Оператор присваивания
Оператор присваивания является наиболее распространенным средством, позволяющим изменить значение переменной во время работы программы.
В простейшем случае он имеет следующий формат:
namev = expression;
Здесь
- namev – имя переменной:
- expression – выражение, значение которого будет присвоено переменной namev.
Если переменная namev относится к категории числовых данных, то результат вычисления выражения тоже должен быть числовым. Типы переменной namev и значения выражения expression при этом могут не совпадать. О соответствующем преобразовании машинных форматов система позаботится сама. Но не забывайте, что при преобразовании вещественного значения в целочисленное дробная часть выражения (какой бы она ни была) будет отброшена. Таким образом, об округлении вы должны позаботиться сами. В тех случаях, когда тип выражения допускает более широкий диапазон представления данных, возможна потеря точности или переполнение диапазона, предусмотренного для переменной namev. В таких случаях компилятор выдает сообщение о возможных последствиях, и на такие сообщения программист обязан обратить внимание.
Если нескольким переменным необходимо присвоить значение одного и того же выражения, то оператор присваивания допускает расширенный формат:
v1=v2=v3=exp;
Используя такую форму множественного присвоения, не пытайтесь писать операторы, результат выполнения которых может по разному толковаться разными пользователями. Например:
i=5; i=a[i]=4; j=6; a[j]=j=2;
Результат таких действий зависит от алгоритма просмотра строки программы и последовательности выполнения присваиваний – слева направо или справа налево. Старайтесь избегать подобных ситуаций, т.к. в случае переноса программы в другую систему программирования можно получить неожиданный результат.
В программах на C, C++ очень часто встречаются специфические форматы записи операторов присваивания. В тех случаях, когда значение переменной должно быть увеличено или уменьшено на 1, используются следующие синтаксические конструкции:
x++; // вместо x=x+1; ++x; // вместо x=x+1; x--; // вместо x=x-1; --x; // вместо x=x-1;
В приведенных примерах размещение двойного знака сложения или вычитания роли не играет. Однако такая конструкция может входить в качестве операнда в арифметическое выражение (что встречается не очень часто) или выступать в роли индекса у элементов массива. Например:
y=a[i++]; z=b[++j];
В первом случае переменной y будет присвоено значение a[i] со старым индексом, после чего индекс i будет увеличен на 1. Во втором случае сначала индекс j будет увеличен на 1, а потом значение b[j] с новым индексом будет участвовать в операции присвоения.
Еще одна форма оператора присваивания ведет свое происхождение от условного арифметического выражения, впервые появившегося в языке АЛГОЛ-60:
v = (a > b)? e1 : e2;
Выполняется такой оператор следующим образом. Проверяется условие, записанное в круглых скобках и, если оно удовлетворяется, то переменной v присваивается значение выражения e1. В противном случае в переменную v засылается значение выражения e2.
5.4. Специальные формы оператора присваивания
Следующая группа операторов присваивания обязана своим происхождением формату машинных команд в двухадресных машинах:
COD A1,A2
Здесь
- COD – код машинной операции;
- A1,A2 – адреса ячеек оперативной памяти и/или арифметических регистров.
Результат выполнения такой операции над содержимым A1 и A2 записывается по адресу A1 ( ). По аналогии с такой записью в языках C, C++ появилась следующая синтаксическая конструкция:
Здесь символ обозначает один из следующих знаков двухместных операций:
+,-,*,/,%,<<,>>,&,|,^
Например:
x += 2; //вместо x=x+2; z /= 1.5; //вместо z=z/1.5;
Довольно экзотически выглядит оператор присваивания, в правой части которого через запятую задана последовательность некоторых действий. Например:
x=(y=sin(a+b),z=cos(a-b),max(y,z));
Действия в скобках выполняются слева направо, т.е. сначала будет вычислено значение sin(a+b), которое занесут в переменную y, затем будет вычислено значение переменной z. Окончательным результатом скобки, которое будет присвоено переменной x, станет вычисление значения функции max(y,z).
5.5. Условный оператор
С помощью условного оператора в программе можно создать две альтернативные цепочки операторов, выполнение каждой из которых происходит в зависимости от истинности или ложности заданного условия:
if(условие) {S1; S2;...} [else {Q1;Q2;...}]
Если условие, указанное в круглых скобках истинно, то выполняется цепочка операторов S1, S2, .... В противном случае выполняется цепочка операторов Q1,Q2,.... Альтернативная ветвь вместе со служебным словом else может отсутствовать. И тогда речь идет о выполнении или обходе цепочки операторов S1,S2,....
Простейшие условия задаются в виде проверки соотношения двух однотипных выражений:
if(a>b) cout<<a; else cout<<b; if(x>=0) y=sqrt(x);
Напомним, что операции отношения в языках C, C++ обозначаются следующими символами и их комбинациями:
Более сложные условия могут составляться из элементарных соотношений с помощью логических операций "ИЛИ" ( || ), "И" ( && ), "НЕ" ( !). Например, проверка принадлежности x диапазону [ a,b ] выглядит следующим образом:
if(a<=x && x<=b) ...
В качестве логического условия иногда можно встретить в круглых скобках обычное арифметическое выражение:
if(a)...
В языке C логические переменные отсутствуют. Вместо этого действует соглашение о том, что ложь эквивалентна нулевому значению числового выражения, а истина – не нулевому значению. Поэтому приведенная выше проверка эквивалентна соотношению:
if(a != 0)...