Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SHPORY DLYA TEL.doc
Скачиваний:
41
Добавлен:
30.04.2015
Размер:
462.34 Кб
Скачать

12 Операции и выражения в си

Унарные операции

* (косвенная адресация): выражение должно быть указателем, а рез-том явл-ся l_значение (lvalue), ссылающееся на тот объект, на кот.

указ-ет выражение.

& (взятие адреса):рез-т - указатель на объект, на кот. ссылается l_значение.

- (минус): рез-т - ее операнд, взятый с противоположным знаком. Для unsigned рез-т получ-ся вычитанием ее знач-я из 2**n, где n-число битов в int.

Унарной операции + (плюс) не существует.

! (логическое отрицание): результат - 1, если знач-е ее операнда равно 0, и 0, если знач-е ее операнда отлично от нуля. Результат имеет тип int. Эта операция применима к любому арифметическому типу или указателям.

~ (дополнение до единицы) – дает обратный код своего операнда. Вып-ся обычн. арифм. преобразования. Операнд должен быть целочисленного типа.

++(инкремент). Объект, на который ссылается операнд l_значения операции ++, увеличивается. Выражение ++х эквивалентно х += 1.

-- (декремент) - аналогична префиксной операции ++, но приводит к уменьшению своего операнда l_значения.

( ) (cast) - Заключенное в круглые скобки имя типа данных, стоящее перед выражением, вызывает преобраз-е знач-я эт. выражения к указанному типу.

sizeof выдает размер своего операнда в байтах. Может быть примен. и к заключенному в круглые скобки имени типа. Тогда она выдает размер в байтах объекта указанного типа.

Мультипликативные операции *, /, и % группируются слева направо.

% выдает остаток от дел-я перв. выраж-я на второе. Операнды должны быть целого типа.

Аддитивные операции + и - группируются слева направо.

Операции сдвига << и >> группируются слева направо. Операнды целого типа. Правый операнд преобразуется к типу int; результат имеет тип левого операнда. Результат не определен, если правый операнд отрицателен или больше или равен, чем длина объекта в битах.

Операции отношения < (меньше), > (больше), <= (меньше или равно) и >=

(больше или равно) дают 0, если указанное отношение ложно, и 1, если оно истинно. Результат имеет тип int.

Операции равенства == (равно) и != (не равно)

Операция присваивания

выражение_присваивания:

l_значение = выражение l_значение (op)= выражение

op: -, *, /, %, >>, <<, &, ^, |

13 Условный оператор и операция в Си.

Формат оператора: if (выражение) оператор-1;

[else оператор-2;]

Выполнение оператора if начинается с вычисления выражения. Далее выполнение осуществляется по следующей схеме:

- если выражение истинно, то выполняется оператор-1.

- если выражение ложно (т.е. равно 0),то выполняется оператор-2.

- если выражение ложно и отсутствует оператор-2, то выполняется следующий за if оператор. Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Примеры:

int main ( ){ int t=2, b=7, r=3; if (t>b) {if (b < r) r=b; } else r=t; return (0);}

В результате выполнения этой программы r станет равным 2. Если же в про­грамме опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:

int main ( ) {int t=2,b=7,r=3; if ( a>b ) if ( b < c ) t=b; else r=t; re­turn (0); }

В этом случае r получит значение равное 3, так как ключевое слово else отно­сится ко второму оператору if, который не выполня­ется, поскольку не выполня­ется условие, проверяемое в первом операторе if.

Условная операция. В языке СИ имеется одна тернарная опера­ция - условная операция, которая имеет следующий формат: опе­ранд-1 ? операнд-2 : операнд-3

Операнд-1 должен быть целого или плавающего типа или быть указателем. Он оценивается с точки зрения его эквивалентности 0. Если операнд-1 не равен 0, то вычисляется операнд-2 и его значе­ние является результатом операции. Если опе­ранд-1 равен 0, то вы­числяется операнд-3 и его значение является результатом опера­ции. Следует отметить, что вычисляется либо операнд-2, либо опе­ранд-3, но не оба.

14 Оператор-переключатель в Си. Оператор switch предназначен для организации выбора из множества различных вариантов.

switch( выражение )

{ [объявление]

:

[ case константное-выражение1]: [ список-операторов1]

[ case константное-выражение2]: [ список-операторов2]

:

[ default: [ список операторов ]]

}

Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, значение которого должно быть целым. Тело опера­тора switch состоит из нескольких операторов, помеченных ключевым сло­вом case с последующим константным-выражением. Так как конст. выраж-е вы­числ-ся во время трансляции, оно не может содержать переменные или вызовы функ­ций.

Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обяза­тельно один, фрагмент, помеченный ключевым словом default.

Список операторов может быть пустым, либо содержать один или более опе­раторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки. Схема выполнения оператора switch следующая:

- вычисляется выражение в круглых скобках;

- вычисленные значения последовательно сравниваются с константными вы­ражениями, следующими за ключевыми словами case;

- если одно из конст. выраж-й совпадает со знач-ем выраж-я, то управление передается на оператор, помеченный соответствующим ключевым словом case;

- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его от­сутствия управление передается на следующий после switch оператор.

Пример: inti=2;

switch (i)

{

case 1: i += 2;

case 2: i *= 3;

case 0: i /= 2;

case 4: i -= 5;

default: ;

}

Выполнение оператора switch начинается с оператора, помеченного case 2. Та­ким образом, переменная i получает значение, равное 6, далее выполняется опе­ратор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]