Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по ОАиП.doc
Скачиваний:
21
Добавлен:
15.04.2019
Размер:
411.14 Кб
Скачать
  1. Линейный алгоритм. Операции присваивания, разновидности сокращений записи операции присваивания.

Линейный алгоритм или следование – это тип алгоритма, в котором последовательность действий не меняется в его процессе выполнения.  Предложение языка программирование задающее описание действия называется оператором. Операторы бывают простые и структурные.  Простыми называются операторы, которые описывают одно действие. Такие операторы используют для составления простейших линейных алгоритмов.  В программе линейный алгоритм реализуется последовательным размещением операторов. 

Формат операции присваивания:

< ID > = <выражение>;

Присваивание значения в языке Cи, в отличие от традиционной интерпретации рассматривается как выражение, имеющее значение левого операнда после присваивания. Таким образом, присваивание может включать несколько операций присваивания, изменяя значения нескольких операндов. Например:

int i, j, k;

float x, y, z;

...

i = j = k = 0;  k = 0; j = k; i = j;

x = i+(y = 3) - (z = 0);  z = 0; y = 3; x = i + y - z;

Внимание, левым операндом операции присваивания может быть только именованная либо косвенно адресуемая указателем переменная. Примеры недопустимых выражений:

а) присваивание константе: 2 = x+y;

б) присваивание функции: getch() = i;

в) присваивание результату операции: (i+1) = 2+y;

Сокращенная запись операции присваивания

В языке Cи допускается две разновидности сокращений записи операции присваивания:

a) вместо записи:

v = v @ e;

где @ - арифметическая операция либо операция над битовым представлением операндов, рекомендуется использовать запись

v @ = e;

например, i = i + 2;  i + = 2;

б) вместо записи (автоувеличение):

x = x # 1;

где # - символ + либо -, обозначающий операцию инкремента либо декремента, x - целочисленная переменная, переменная-указатель), рекомендуется использовать запись

префиксная: ##x; постфиксная: x##;

Если операции инкремента или декремента в коде программы используются в чистом виде, то различий в постфиксной и префиксной формами нет. Если же эти операции используются в выражении, то при использовании префиксной формы (##x), сначала значение x изменится на 1, а затем будет использовано в выражении. В постфиксной форме (x##), значение сначала используется в выражении, а затем изменяется на 1. Операции над указателями рассмотрим позже.

Примеры использования сокращений (фрагменты программ):

1) int i,j,k;

float x,y;

...

x* = y;  x = x*y;

i+ = 2;  i = i+2;

x/ = y+15;  x = x/(y+15);

k--;  k = k-1;

--k;  k = k-1;

j = i++;  j = i; i = i+1;

j = ++i;  i = i+1; j = i;

2) int n,a,b,c,d;

n = 2; a = b = c = 0;

a = ++n; // n=3, a=3

a+ = 2; // a=5

b = n++; // b=3, n=4

b- = 2; // b=1

c = --n; // n=3, c=3

c* = 2; // c=6

d = n--; // d=3, n=2

d% = 2; // d=1

Рекомендации использования сокращений обоснованы возможностью оптимизации программы. Например, схема выражения вида v@=e соответствует схеме выполнения многих машинных команд типа "регистр-память", а использование ##х и x## наличием в Си специальных процессорных команд инкремента и декремента.