Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
samples / Stacionar / Системное_программир-е.doc
Скачиваний:
21
Добавлен:
25.03.2015
Размер:
90.62 Кб
Скачать
  1. Операции и выражения в языке программирования си

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

* (косвенная адресация): выражение должно быть указателем, а рез-том явл-ся 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: -, *, /, %, >>, <<, &, ^, |

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

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

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

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

- если выражение истинно (т.е. отлично от 0), то выполняется оператор-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; return (0); }

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

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

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

1. Если операнд-2 или операнд-3 имеет целый или плавающий тип (отметим, что их типы могут отличаться), то выполняются обычные арифметические преобразования. Типом результата является тип операнда после преобразования.

2. Если операнд-2 и операнд-3 имеют один и тот же тип структуры, объединения или указателя, то тип результата будет тем же самым типом структуры, объединения или указателя.

3. Если оба операнда имеют тип void, то результат имеет тип void.

4. Если один операнд является указателем на объект любого типа, а другой операнд является указателем на vold, то указатель на объект преобразуется к указателю на vold, который и будет типом результата.

5. Если один из операндов является указателем, а другой константным выражением со значением 0, то типом результата будет тип указателя.

Пример: max = (d<=b) ? b : d;

Переменной max присваивается максимальное значение переменных d и b.

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

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

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

:

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

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

:

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

}

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

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

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

Схема выполнения оператора switch следующая:

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

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

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

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

Пример: int i=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, не изменяет значения переменной.

Соседние файлы в папке Stacionar