Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
___2_Пособие по Языку С++.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.34 Mб
Скачать

3.9. Операция следования

Символом операции следования является , (запятая). Выражения, разделенные этим символом, выполняются слева направо строго в том порядке, в котором они перечислены.

Результатом этой операции является результат последнего выражения. Если оно является адресным выражением, то и результат операции также является адресным выражением.

Примеры:

int a=3, b=8; c; // здесь запятая - разделитель, а не операция;

c=a++, a+b; // здесь а станет равно 4, а с 12;

(b--,c)*=3; // здесь b станет равно 7, а с 36.

Операция следования часто используется в операторе for. В различные части этого оператора можно включить несколько выражений, например, для параллельного изменения двух индексов. Это иллюстрируется функцией REVERSE(S), которая располагает строку S в обратном порядке ***на том же месте.

void REVERSE ( char S[ ] ){

int C, I, J;

for ( I = 0, J = strlen (S) - 1; I < J; I++, J – –){

C = S[I]; S[I] = S[J]; S[J] = C; }

}

В этом примере strlen(S) – функция, вычисляющая число символов в строке S (без символа ‘\0’).

Запятые, которые разделяют аргументы функций, переменные в описаниях и т.д., не имеют отношения к операции запятая и не обеспечивают вычислений слева направо.

3.10. Приоритеты операций и порядок вычисления

Сведения обо всех операциях С++ сведены в следующую таблицу 4:

Таблица 4

Приоритет операций и порядок их выполнения

Приоритет

Операция

Примечание

Порядок

выполнения

1

::.

[ ]

( )

( )

Разрешение контекста, извлечение

индексирование массива

вызов функции

преобразование типа

слева – направо

слева – направо

слева – направо

слева – направо

2

++ – – ~ !

–+

&

*

new, delete

sizeof

унарный –, унарный +

получение адреса

разрешение указателя

работа с динамической памятью

определение размера

справа – налево

справа – налево

справа – налево

справа – налево

справа – налево

справа – налево

3

*

/

%

умножение

деление

остаток

слева – направо

слева – направо

слева – направо

4

* .*

извлечение

слева – направо

5

+

бинарное сложение

бинарное вычитание

слева – направо

слева – направо

6

<< >>

сдвиги

слева – направо

7

< <=> =>

сравнение

слева – направо

8

= = !=

равно не равно

слева – направо

9

&

побитовое И

слева – направо

10

^

XOR (исключающее ИЛИ)

слева – направо

11

|

побитовое ИЛИ

слева – направо

12

&&

И – логическое

слева – направо

13

||

ИЛИ – логическое

слева – направо

14

?:

тернарная операция

справа – налево

15

= *= /= %= += и т.д.

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

справа – налево

16

,

следование

слева – направо

Первый приоритет является наивысшим. Большинство операций выполняется слева направо. Например, выражение а + b + c интерпретируется как (а + b) + с. Исключение составляют унарные операции, операции присваивания и операция ?: , которые выполняются справа налево: а = b = с выполняется как a = (b = c).

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

Выражение

7.a + b/-с интерпретируется как

(7. a) + (b/(-c)).

Можно изменить этот порядок:

7.  (a+b)/(-c).

Отметим, что выражения, в которые входит одна из бинарных операций  + & ^ |, могут перегруппировываться компилятором, даже если они заключены в круглые скобки. Для обеспечения нужного порядка вычисления можно использовать явные промежуточные вычисления. В С++ не фиксируется порядок вычисления операндов в выражении. Например, в

c=sin(ax+b)+fabs(x);

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

4. Операторы

В С++ точка с запятой является признаком конца оператора.

4.1. Пустой оператор состоит из ;

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

4.2. Оператор-выражение

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

Примеры:

i ++;

a = b+c;

c + = (a<b)? a:b;

x+y; // Здесь результат не используется

// и будет выдано предупреждение.

4.3. Составной оператор

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

{i=5; c=sin(ix); c++;} // Это блок.

4.4. Объявления

В С++ объявления являются операторами языка и могут стоять там, где возможен любой другой оператор С++:

s = 0.3; d/=s; int k = 5;

d = s+2*k;

double f=s+d; f=k;

4.5. Условный оператор

Имеется две формы условного оператора:

1) if (выражение) оператор1

2) if (выражение) оператор1 else оператор2

Оператор1 выполняется в случае, если выражение принимает ненулевое значение. Если выражение принимает значение 0 (или указатель NULL), то выполняется оператор2.

Примеры:

if (a > b) c = a - b; else c = b - a;

if (i < j) i++; else {j = i - 3; i ++;}

При использовании вложенных операторов if текущий else всегда относится к самому последнему if, с которым еще не сопоставлен ни один else.

void main ( ){

int a = 2, b = 7, c = 3;

if (a > b) { if (b <c ) c = b;}

else c=a;

cout<<“c=“<<c<<“.\n”;

}

Здесь результатом будет вывод строки c=2.

Если опустить фигурные скобки в операторе if, то программа примет вид

void main ( ){

int a=2, b=7, c=3;

if (a > b)

if (b < c) c=b;

else c = a;

cout<<“c=“<<c<<“.\n”;

}

Здесь else относится ко второму if.

В результате выведется строка c=3.

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