Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си++ Занятие 3.doc
Скачиваний:
5
Добавлен:
12.11.2019
Размер:
118.78 Кб
Скачать

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

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

Пример.

//в первой строке запятая – разделитель, а не операция

int a=3, b=8, С;

//а сейчас уже операция следования

C=k++, k+b;

(b--, С)*=3;

Первую операцию следования можно заменить следующей последовательностью команд:

C=k++, C=k+b;

В результате получим С = 12.

Вторую операцию следования можно заменить последовательностью команд:

b--; С*=3;

в результате получаем b=7; С = 36.

В качестве разделителя запятая может применяться в следующих случаях:

1) в функциях для разделения аргументов, если их более одного. Например, fl(x, y).

2) при объявлении переменных (см. первую строку примера).

В качестве операции запятая часто используется в операторе for.

2.11 Условная операция (?:)

Эта операция тернарная, т.е. имеет три операнда. Ее формат

Операнд_1 ? операнд_2 : операнд_3

Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности 0 (операнд, равный 0, рассматривается как false, не равный 0 – как true). Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение второго операнда, иначе – третьего операнда. Вычисляется всегда либо второй, либо третий операнд. Их тип может различаться. Условная операция является сокращенной формой условного оператора if.

Пример.

#include <stdio.h>

int main()

{

int a=11, b=4, max;

max = (b>a)? b : a;

pintf("Наибольшее число: %d", max);

return 0;

}

Результат работы программы:

Наибольшее число: 11.

Другой пример применения условной операции. Требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает n, а иначе принимала значение 1:

i = (i<n)? i+1 : 1.

3. Выражения

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

Примеры выражений:

(a + 0.12) /6

X && y || !z

(t*sin(x)-1.05t-4)

Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используют круглые скобки. Если в одно выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операция присваивания выполняются справа налево, остальные – слева направо. Например, а=b=с означает а = (b=c), а а+b+с означает (a+b)+c. Порядок вычисления подвыражений внутри выражений не определен. Например, нельзя считать, что в выражении sin (x+2) + cos (y+1) обращение к синусу будет выполнено раньше, чем к косинусу, и что х+2 будет вычислено раньше, чем у+1.

Результат вычисления выражения характеризуется значением и типом. Например, если а и b – переменные целого типа и описаны как

int a=2, b=5;

то выражение а +и имеет значение 7 и тип int, а выражение а=и имеет значение, равное помещенному в переменную а (в данном случае 5) и тип, совпадающий с типом этой переменной. Таким образом, в С++ допустимы выражения вида а=b=с. Сначала вычисляется выражение b=с, а затем его результат становится правым операндом для операции присваивания переменной а.

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

Преобразования бывают двух типов:

  • Изменяющие внутреннее представление величин (с потерей точности или без потери точности);

  • Изменяющие только интерпретацию внутреннего представления.

К первому типу относится, например, преобразование целого типа в вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму – преобразование знакового целого в беззнаковое.

В любом случае величины типов char, signed char, unsigned char, short int и unsigned short int преобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.

После этого операнды преобразуются к типу наиболее длинного из них, и он используется как тип результата.

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