Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TD-Si_Razrabotka_programm_lineyn_struktury.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
222.21 Кб
Скачать

Арифметические выражения

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

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

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

6+tan(3*3.14/4)

будет вещественное число 4.9976, так как в последней операции (+) второй операнд - вещественное число -1.0024 (значение тангенса угла, примерно равного 450),

а результатом вычисления выражения

6+(i=tan(3*3.14/4)) будет целое число 5, так как в последней операции (+) вторым операндом будет переменная i целого типа, имеющая значение -1, полученное из вещественного -1.0024 (значения tan(3*3.14/4)) преобразованием к целому при присваивании переменной i.

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

6+(int)tan(3*3.14/4)

Явное преобразование типа иногда приходится применять и для перехода от целого к вещественному. Например, для получения вещественного значения типа float натурального основания (e) в степени, вычисляемой выражением целого типа, например, I%3, следует использовать вызов функции exp((float)i%3).

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

В выражениях в первую очередь вычисляются обращения к функциям и содержимое круглых скобок, затем – унарные операции изменения знака (-), операции типа умножения (*, /, %) в порядке слева направо, затем – операции типа сложения (+ и -) в порядке слева направо.

Например, для вычисления выражения

в программе можно записать

pow(sin(X),2.0)*cos(pow(Y,3.0))*1.2E-4/sqrt(X)/Y/pow(Z,2.0/3.0)

Порядок вычислений поясняет следующий рисунок

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

В Си выражения могут включать операторы присваивания в различных формах.

Как и унарный минус (–) унарные операторы инкрементации (++) и декрементации (--) имеют наивысший приоритет. Они могут быть как префиксными, (знак операции записываются перед переменной, а выполнение идёт справа налево) так и постфиксными (знак операции записываются после переменной, а выполнение идёт слева направо). От этого завнисит, будет ли соответственно новое или исходное значение переменной использоваться для вычисления выражения. Например, если целое k равно -3 и целое j равно 2, то после выполнения вычислений

i=2*k--+-++j

значением переменной i будет -9, k станет равным -4, а j – равным -3. Действия будут выполнены в следующем порядке: вначале будет выполнено ++j и j получит значение 3, затем унарный минус изменит значение j на -3, затем по части выражения 2*k при исходном значении k будет вычислено значение -6 и прибавлено к -3 (новому значению j), и только потом k будет уменьшено на 1 и станет равным -4. Эти же результаты можно получить, выполнив следующие три оператора присваивания:

j=-(j+1); i=2*k+j; k=k-1; Последний способ описания процесса вычисления значений переменных i, k и j обладает большей наглядностью и его следует использовать, если это возможно, чтобы уменьшить вероятность появления ошибки.

Если в рассмотренном выражении сделать декрементацию k префиксной:

i=2*--k+-++j;

то i получит значение -11, так как до умножения на 2 переменная k будет уже иметь значение -4.

Двуместные формы оператора присваивания имеют одинаковый низший приоритет и выполняются в порядке справа налево. После выполнения каждого из них переменная получает новое значение, которое и используется для продолжения вычисления выражения. Например, одним выражением можно задать последовательность вычислений значений нескольких переменных, причем значением всего выражения будет значение, присвоенное последней, самой левой переменной. Например, площадь S основания и объём V цилиндра радиуса R и высотой L можно вычислить одним выражением

V=L*(S=d*R*R)

Одним выражением можно присвоить одно и то же значение нескольким переменным, например, после вычисления выражения

X=Y=Z=3.5

переменные X, Y и Z будут иметь значение 3,5. Такя форма уменьшает текст программы и делает её более наглядной.

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