- •Краткая история развития языка с
- •Алфавит языка с
- •Знаки операций
- •Комментарий
- •Структура программы
- •Этапы создания исполняемой программы
- •Тип данных.
- •Целый тип int
- •Типы с плавающей точкой
- •Операторы
- •Переменные
- •Символьный тип char
- •Выражения
- •Операции
- •Типичные ошибки
- •Оператор switch
- •Операторы цикла
- •Цикл с предусловием
- •Ц икл с постусловием
- •Цикл с параметром
Выражения
Выражение состоит из операндов и знаков операции и используется для вычисления значения определенного типа.
Операции
Унарные
Приоритет |
Действие |
2 |
+ + увеличить на 1 - - уменьшить на 1 |
2 |
~ поразрядное отрицание ! логическое отрицание - арифметическое отрицание |
2 |
+ унарный плюс |
2 |
& взятие адреса |
2 |
* разыменование разадресация |
2 |
(type) преобразование типа |
2 |
sizeof размер |
Бинарные и тернарные операции
Приоритет |
Действие |
3 |
* умножение / деление % остаток от деления |
4 |
+ сложение - вычитание |
5 |
<< сдвиг влево >> сдвиг вправо |
6 |
< меньше <= меньше или равно > больше >= больше или равно |
7 |
= = равно ! = не равно |
8 |
& поразрядная конъюнкция И |
9 |
^ поразрядное исключающее ИЛИ |
10 |
| поразрядная дизъюнкция |
11 |
&& логическое И |
12 |
| | логическое ИЛИ |
13 |
? : условная операция (тернарная) |
14 |
= присваивание * = умножение с присваиванием / = деление с присваиванием % = остаток от деления с присваиванием + = сложение с присваиванием - = вычитание с присваиванием << = сдвиг влево с присваиванием >> = сдвиг вправо с присваиванием & = поразрядное И с присваиванием | = поразрядное ИЛИ с присваиванием ^ = поразрядное искл. ИЛИ с присваиванием
|
15 |
, последовательное вычисление |
Каждый операнд может быть выражением, или в частном случае – константой или переменной.
Если операции одного приоритета, то
справа налево вычисляются
унарные операции,
условная операция,
операция присваивания a=b=c равносильно a=(b=c).
слева направо вычисляются все остальные.
a+b+с равносильно (a+b)+c,
a>b>c равносильно (a>b)>c.
Для изменения порядка вычислений используют круглые скобки.
Результат вычисления выражения имеет значение и тип. Если операнды имеют одинаковый тип, тот же тип имеет результат выражения.
Если типы операндов различны, то перед вычислением выполняются преобразования типов (от более коротких к более длинным для сохранения значимости и точности).
При этом может измениться внутреннее представление (int float) или интерпретация внутреннего представления (char unsigned short int).
Операции инкремент и декремент
+ + и - - две формы записи :
префиксная <операция> <операнд>
постфиксная <операнд> <операция>
Префиксная форма:
Операнд изменяется, новое значение – результат выражения.
Постфиксная форма:
Результат выражения – исходное значение операнда, после вычисления выражения операнд изменяется.
Операнд – в общем случае это L – значение.
L – значение – это любое выражение, адресующее некоторый участок памяти, в который можно занести значение.
b=1;
a= + + b; (a=2, b=2)
c=b + +; (c=2, b=3)
b=4;
c= b - -; (c=4, b=3)
a= - - b; (a=2, b=2)
операции отрицания
int x = 3, y;
арифметическое
y = -x; /*y=-3*/;
поразрядное
y= ~ x; /*y= 0011 -> 1100 -> -4;*/
логическое
y=!x; /* y= 0*/
Логические и побитовые операции
int x=3,y =5,z;
Таблицы истинности |
логические |
поразрядные |
|||||||||
И
0
1
0
0
0
1
0
1 |
Z= (x>10) && (y<10) : /* z=0*/ Z= (x<10) && (y<10) :/*z=1*/ |
Z=x & y; /*z= 1*/ |
|||||||||
ИЛИ
0
1
0
0
1
1
1
1 |
Z= (x>10) || (y<10) : /* z=1*/ Z= (x>10) || (y>10) :/*z=0*/ |
Z=x | y; /*z= 7*/ |
|||||||||
Искл ИЛИ
0
1
0
0
1
1
1
0 |
|
Z=x ^ y; /*z= 6*/ |
Операции деления
% - остаток от деления. Операция применима только к целым операндам.
/ - деление. Если операнды целые, то результат этой операции – целое число.
Пример.
int x=13.y=2,z;
double a;
z= x/y; // z=6
z= x/y; // a=6
Оператор преобразования типов
a=(double)x/(double)y; //a=6,5
ОПЕРАТОРЫ
Оператор «выражение»
Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор « ;». (он используется, когда по синтаксису оператор требуется, а по смыслу - нет). Примеры:
i++; // выполняется операция инкремента
а* = b + с; // выполняется умножение с присваиванием
Операторы ветвления
Условный оператор if
Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:
if ( выражение) оператор_l; [else оператор_2;]
Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение истина), выполняется первый оператор, иначе - второй. После этого управление передается на оператор, следующий за условным.
Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом еlse. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из одних описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.
if (b>а) тах = b; else тах = а:
Примеры:
if (а<0) b = 1;
Отсутствует ветвь еlse. Подобная конструкция называется пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.
if (а<b && (a>d || а==0))
b ++;
else {b *= а; а = 0:}
Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение будет истинно в том случае, если выполнится одновременно условие а<b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом ИЛИ.
if (а<b)
{if (а<с)
т = а;
else т = с:}
else {if (b<с)
т = b;
else т = с:}
Вычисление наименьшего значения из трех переменных. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть еlse к ближайшему if.
if (а++) b++:
Хотя в качестве выражений в операторе if чаще всего используются операции отношения, это не обязательно.
