- •1. Краткие теоретические сведения
- •1.1. Алгоритмизация вычислительного процесса
- •1.2. Арифметические операции
- •1.2.1. Знаки операций
- •1.2.2. Операции
- •1.2.3. Арифметические операции
- •1.2.4.1. Операция присваивания
- •1.2.4.6. Операция sizeof
- •1.3. Порядок (старшинство) выполнения арифметических операций
- •1.4. Круглые скобки позволяют переопределить приоритет
- •{ // Начало главной функции double X, y, z, a, b, c, h; // Объявление переменных
- •1.6. Побитовые логические операции и операции сдвига
- •3.6. Использование операторов сдвига для организации ввода и вывода
- •2. Задание
- •2.12. Задания
- •2.12.1. Задание на алгоритмизацию вычислительных процессов (домашнее)
- •2.12.2.1. Формулировка задания
- •2.12.2.2. Варианты задания Варианты задания приведены в табл. 3.14. Вариант соответствует номеру в журнале группы.
- •2.12.2.3. Разработка алгоритма решения
- •2.12.2.4. Определение переменных программы
- •2.12.2.5. Разработка текста программы
- •2.12.2.6. Текст программы
- •При работе программы на экран было выдано следующее:
- •Варианты задания приведены в табл. 3.15. Вариант соответствует номеру в журнале группы.
- •2.12.3.3. Пример решения задачи для варианта № 30 Решение задачи предполагает создание двух программ: упаковки (см. 2.12.3.3.1) и распаковки (см. 2.12.3.3.2)
- •2.12.3.3.1. Программа упаковки
- •2.12.3.3.1.1. Разработка алгоритма решения
- •2.12.3.3.1.2. Определение переменных программы
- •2.12.3.3.1.3. Разработка текста программы
- •2.12.3.3.1.4. Программа
- •2.12.3.3.1.5. Отладка программы
- •2.12.3.3.1.6. Результаты работы программы
- •2.12.3.3.2. Программа распаковки
- •2.12.3.3.2.1. Разработка алгоритма решения.
- •2.12.3.3.2.4. Текст программы
- •2.12.3.3.2. 5. Отладка программы
- •2.12.3.3.2.6. Результаты работы программы
- •2.12.4. Домашнее задание
- •2.12.4.1. Текст программы
- •2.12.4.2. Результаты работы программы
- •3. Выводы
- •4. Требование к отчету
- •5. Вопросы для самоконтроля
- •Литература
- •Оглавление
- •1. Краткие теоретические сведения 2
- •1.1. Алгоритмизация вычислительного процесса 2
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 ()