Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР3-С++-13 марта-2012.doc
Скачиваний:
14
Добавлен:
15.09.2019
Размер:
1.26 Mб
Скачать

1.4. Круглые скобки позволяют переопределить приоритет

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

Пример 3.8.

// круглые скобки позволяют изменить стандартный приоритет

// и порядок выполнения операторов

cout << ((6 + ((3 * 4) / 2)) + 2) << endl; //результат 14

// круглые скобки позволяют создать альтернативные группировки

cout << (6+3) * (4/2+2) << endl; //результат 36

cout << ((6+3) * 4) /2+2 << endl; //результат 20

cout << 6+3*4/ (2+2) << endl; // результат 9

В качестве примера рассмотрим следующее вы­ражение:

*iter++;

Приоритет оператора ++ выше приоритета оператора *. Это значит, что сначала выполняется часть iter++,a ee результат становится операндом оператора *. Таким образом, обращение к значению итератора iter происходит после его инкремента. Но если бы необходимо было увеличить значение, на которое указывает итератор iter, пришлось бы применить круглые скобки, чтобы явно указать свои намерения.

(*iter)++; // увеличить значение, на которое указывает

// итератор iter

Круглые скобки указывают, что операнд * применяется к итератору iter. Те­перь как операнд оператора ++ в выражении используется часть *iter.

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

Пример 3.9.

2 + 2 * 2 = 6; (2 + 2) * 2 = 8.

1.5. Стандартные математические функции языка С++

Для удобства (облегчения) использования математических функций в программах пользователя на языке С++, программы вычисления большинства математических функций реализованы заранее в виде модулей стандартным образом и хранятся в соответствующей библиотеке компилятора.

Прототипы функций хранятся в заголовочном файле math.h.

Подключение библиотеки математических функций: #include <math.h>.

Все аргументы в три­гонометрических функциях задаются в радианах. Параметры и аргументы всех остальных функций имеют тип double (кроме abs(x)).

Описание некоторых математических функций приведено в табл. 3.8.

Таблица 3.8

Описание некоторых математических функций

Математическая

функция

Обращение к функции в библиотеке

math.h

Тип аргументов

Тип значения

Описание

|x|

abs(x)

int

int

Нахождение |x| (только для коротких целых чисел!)

|x|

fabs(x)

double

double

Нахождение |x| (только для вещественных чисел!)

|x|

labs(x)

long int

long int

Нахождение |x| (только для длинных целых чисел!)

sqrt(x)

double

double

Вычисление корня квадратного, x>0

xy

pow(x,y)

double, double

double

Возведение x в степень y, x>0. Если x=y=0=>1

sin(x)

sin(x)

double

double

Вычисление синуса x: sin(x), x-в радианах

cos(x)

cos(x)

double

double

Вычисление косинуса x: cos(x), x-в радианах

tg(x)

tan(x)

double

double

Вычисление тангенса x: tg(x), x-в радианах

arctg(x)

atan(x)

double

double

Вычисление арктангенса x: arctg(x), -pi/2<z<pi/2

arctg(x/y)

atan2(y,x)

double, double

double

Вычисление арктангенса двух ар­гументов x и y: arctg(y/x), x^0, -pi<z<pi

ex

exp(x)

double

double

Вычисление экспоненты числа x: ex

ln(x)

log(x)

double

double

Вычисление натурального логарифма x:ln(x), x>0

lg10(x)

log10(x)

double

double

Вычисление десятичного логарифма x: lg(x), x>0

arccos(x)

acos(x)

double

double

Вычисление значения арккосинуса x: arccos(x), -1<x<1, 0<z<pi

asin(x)

double

double

arcsin(x), -1<x<1, -pi/2<z<pi/2

ch(x)= (ex+e-x)/2

cosh(x)

double

double

Вычисление косинуса гиперболического x:ch(x)

sh(x)= (ex-e-x)/2

sinh(x)

double

double

Вычисление синуса гиперболического x: sh(x)

tgh(x)

tanh(x)

double

double

Вычисление тангенса гиперболического x: th(x)

pow10(x)

int

double

Вычисление 10x

Округление к большему

ceil(x)

double

double

Функция возвращает действительное зна­чение, соответствующее наименьшему це­лому числу, которое больше или равно x

Округление к меньшему

floor(x)

double

double

Функция возвращает действительное зна­чение, соответствующее наибольшему це­лому числу, которое меньше или равно x

Остаток от деле­ния x на y

fmod(x,y)

double

double

Функция возвращает действительное зна­чение, соответствующее остатку от цело­численного деления x на y

modf(x,&i)

double, double *i

double

Определение целой i и дробной modf(x,&i) частей числа x

В примере 3.10 реализовано использование некоторых математических функций при вычислении арифметических выражений.

Пример 3.10.

double x, y,

double z = exp(1)+exp(x*x)+exp(2*pow(x,3)); //

double z1 = pow (x, pow (y, 4+pow (x, 1/4.))); //

double z2 = fmod( 5, 2); // или z2 = 5%2; => z2 = {5/2} = 1

double z3 = ceil (5.6); // или z3 = ceil (5.1); => res3 = 6

double z4 = ceil (-5.1); // или z4 = ceil (-5.8); => res4 = -5

double z5 = floor (5.6); // или z5 = floor (5.1); => res5 = 5

double z6 = floor (-5.6); // или z6 = floor (-5.1); => res6 = -6

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

Пример 3.11.

Написать программу вычисления линейного арифметического выражения

при x = 2,45; y = -0,423·10-2; z = 1,232·10-3.

Ответ: h = 6,9465.

Текст программы:

#include <iostream.h>

#include <math.h>

int main ()