k=++i //дает следующий результат k=4
k=i++; // i=4, k=3
k=--i; // i=2, k=2
k=i--; // i=2, k=3;
i=j=k-- // i=0, j=0, k=-1
Выражения x+++b или z---d трактуются как (x++)+b и (z--)-d.
Отношение определяется как пара арифметических выражений, соединенных (разделенных) знаком операции отношения:
= = равно; != не равно;
< меньше чем, > больше чем;
<= меньше или равно, >= больше или равно.
Примеры:
a-b>8; c!=d; (x-4)*z>=0; x/(y-z)==12.
Принято считать, что отношение имеет ненулевое значение, т.е. 1, если оно истинно и 0, если ложно, т.е. значение отношения 101/9>=10 будет 1, а 101*9<0 будет 0.
Логических операций в Си три:
! – отрицание, т.е. логическое НЕ;
&& - конъюнкция, т.е. логическое И;
|| - дизъюнкция, т.е. логическое ИЛИ.
Пример:
Условие того, что сумма длин двух сторон треугольника всегда больше длины третьей стороны может быть записано следующим образом:
a+b>c && b+c>a && c+a>b.
Присваивание предназначено для изменения значений переменных. Символ “=” в языке Си обозначает бинарную операцию присваивания, у которой в выражении должно быть два операнда: левый – обычно переменная и правый обычно выражение. Если x – имя переменной, то x=5/1+7/2 – выражение со значением 12.3, которое присваивается переменной x.
Может быть также организована операция множественного присваивания:
c=x=d=1.3+8.5;
Здесь значение 9.8 присваивается переменной d, затем x как “d=1.3+8.5”, затем как “x=d”.
В языке Си предусмотрен набор составных операций присваивания, имеющих вид:
имя_переменнойОП=выражение;
здесь ОП=одна из операций: *, /, %, +, -, &, ^, |, <<, >>, причем в ОП= сначала выполняется ОП, а затем “=”. Например, x*=2; означает x=x*2; z+=4; - z=z+4; k/=x+4*z - k=k/(x+4*z).
Не следует путать операцию присваивания a=b и операцию сравнения a= =b. В первом случае в ячейки памяти с именем а помещается содержимое ячеек памяти с именем b. Во втором случае содержимое ячеек памяти с именем а сравнивается с содержимым ячеек памяти с именем b.
Очень часто в операциях принимают участие данные разных типов. Например, пусть int i; double r; float f1. Какого типа будет данное s=r*f1/i, если тип s не был объявлен заранее? В Си автоматические преобразования типов данных при выполнении смешанных операций производятся в соответствии с иерархией преобразования. То есть, в смешанных операциях, значения разных типов приводятся к тому типу данных, который имеет больший приоритет в иерархии:
double
float
long
int
short
Пример:
int ivalue1=3;
int ivalue2=4;
float fvalue1=7.0;
fresult=fvalue1+ivalue1/ivalue2.
Каким будет тип данных fresult?
ivalue1/ivalue2 не является смешанной операцией, деление двух целых чисел дает в результате целое число, в нашем случае это будет ноль, т.е. переменной fresult будет присвоено значение 7.0.
Если переменную ivalue2 описать как float, то операция ivalue1/ivalue2 даст в результате 0,75, а fresult примет значение 7.75. Следует также отметить, что тип переменной, стоящей слева от оператора присваивания определяет тип результата вычислений.
Пример:
int iresult; double fx,fy;
fx=7.0; fy=2.0;
iresult=4/0+fx/fy.
Так как iresult целое, то результат будет равен iresult=7 (дробная часть при делении fx/fy в этом случае отбрасывается).
Если в процессе выполнения программы требуется изменить тип переменной, то это можно сделать с помощью явного преобразования типов, применив, оператор приведения типа, т.е. перед переменной перед ее именем нужно ввести в круглых скобках название соответствующего типа данных. Например, следующие преобразования типов из предыдущего примера дадут одинаковый результат при вычислениях:
fresult=fvalue+(float)ivalue1/ivalue2;
fresult=fvalue+ivalue1/(float)ivalue2;
fresult=fvalue+(float)ivalue1/(float)ivalue2.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.