
- •Г.В. Ваныкина, т.О. Сундукова
- •Часть 1. Введение в программирование Тула - 2009
- •Содержание
- •Предисловие
- •Лабораторная работа №1
- •Лабораторная работа №2 Типы данных. Стандартные потоки ввода-вывода данных
- •Лабораторная работа №3 Константы. Стандартные потоки ввода-вывода вещественных данных
- •Лабораторная работа №4 Форматированный ввод-вывод данных
- •Лабораторная работа №5 Присваивание. Арифметические операции
- •Лабораторная работа №6 Логические и поразрядные операции. Операции сравнения и определения размера
- •Лабораторная работа №7 Математические функции. Выражения
- •Математические функции – файл math.H
- •Лабораторная работа №8 Линейные программы. Преобразование типов
- •Лабораторная работа №9 Операторы выбора: оператор условия if
- •Лабораторная работа №10 Решение задач с использование оператора условия if
- •Лабораторная работа №11 Операторы перехода. Операторы выбора: оператор-переключатель switch
- •Лабораторная работа №12 Решение задач с использованием оператора-переключателя switch
- •Лабораторная работа №13 Операторы цикла: оператор цикла с параметром for
- •Лабораторная работа №14 Операторы цикла: оператор цикла с предусловие while
- •Лабораторная работа №15 Операторы цикла: оператор цикла с постусловием do … while
- •Лабораторная работа №16 Решение задач с использованием операторов цикла
- •Лабораторная работа №17 Функции пользователя
- •Лабораторная работа №18 Решение задач методом процедурной абстракции
- •Лабораторная работа №19 Рекурсивные функции
- •Индивидуальные задания Требования к оформлению индивидуальных заданий
- •Задание 1. Линейные программы
- •Задание 2. Задачи на составление логических выражений
- •Задание 3. Условный оператор
- •Задание 4. Цикл с параметром
- •Задание 5. Циклы с условиями
- •Задание 6. Числовые функции
- •Задание 7. Функции
- •Задание 8. Рекурсия
- •Литература
- •Часть 1. Введение в программирования
Лабораторная работа №7 Математические функции. Выражения
Цель работы: научиться использовать в программе математические функции и выражения в языке C++.
Теоретические сведения
Математические функции
Для математических вычислений и преобразований используются библиотечные математические функции, прототипы которых находятся в заголовочном файле math.h.
В выражениях программы вызовы математических функций задаются в виде:
ИмяФ(СписокАргументов)
где ИмяФ – имя функции;
СписокАргументов – список аргументов, передаваемых в тело функции; отдельный аргумент может являться идентификатором или выражением соответствующего типа.
При вызове функций следует учитывать:
их область определения с точки зрения математики;
обязательное заключение списка аргументов в круглые скобки;
количество, типы и порядок аргументов в списке;
радианную меру измерения аргументов тригонометрических функций.
При вычислении композиции функций (сложной функции) необходимо заключать аргументы каждой вызываемой функции в круглые скобки. Вычисление значения сложной функции начинается с аргумента функции последнего уровня вложенности.
Например:
y=sin(30); //объекту y присвоить значение синуса 30 радиан
a=pow(5.1,3); //объекту a присвоить значение куба числа 5.1
x=sqrt(cos(1.2)); //объекту х присвоить значение функции квадратного корня из косинуса 1.2 радиан
При следующем вызове логарифмической функции: z=log(-1); – будет выдана ошибка на этапе выполнения программы.
Для нахождения значений функций, не входящих в файл math.h, используется композиция стандартных функций.
Например,
чтобы найти значение
,
можно воспользоваться свойством
логарифмов
:
z=log(3)/log(2);
Математические функции – файл math.H
Функция |
Прототип |
Краткое описание действий |
abs |
int abs (int i); |
возвращает абсолютное значение целого аргумента i |
acos |
double acos (double x); |
функция арккосинуса, значение аргумента должно находиться в диапазоне от –1 до +1 |
asin |
double asin (double x); |
функция арксинуса, значение аргумента должно находиться в диапазоне от –1 до +1 |
atan |
double atan (double x); |
функция арктангенса |
atan2 |
double atan (double y, double x); |
функция арктангенса от значения y/x |
cabs |
double cabs (struct complex znum); |
вычисляет абсолютное значение комплексного числа znum, определение структуры (типа) complex – в файле math.h |
cos |
double cos (double x); |
функция косинуса, угол (аргумент) задается в радианах |
cosh |
double cosh (double x); |
возвращает значение гиперболического косинуса х |
exp |
double exp (double x); |
вычисляет значение ex (экспоненциальная функция) |
fabs |
double fabs (double x); |
возвращает абсолютное значение вещественного аргумента х двойной точности |
floor |
double floor (double x); |
находит наибольшее целое, не превышающее значения х, возвращает его в форме double |
fmod |
double fmod (double x, double y); |
возвращает остаток от деления нацело х на y |
labs |
long labs (long x); |
возвращает абсолютное значение целого аргумента long x |
ldexp |
double ldexp (double v, int e); |
возвращает значение выражения v·2e |
log |
double log (double x); |
возвращает значение натурального логарифма (ln x) |
log10 |
double log10 (double x); |
возвращает значение десятичного логарифма (log10 x) |
pow |
double pow (double x, double y); |
возвращает значение xy, т.е. x в степени y |
sin |
double sin (double x); |
функция синуса, угол (аргумент) задается в радианах |
sinh |
double sinh (double x); |
возвращает значение гиперболического синуса х |
sqrt |
double sqrt (double x); |
возвращает положительное значение квадратного корня √х |
tan |
double tan (double x); |
функция тангенса, угол (аргумент) задается в радианах |
tanh |
double tanh (double x); |
возвращает значение гиперболического тангенса х |
Пример 1.
/*Программа демонстрирует работу математических функций файла math.h/*
#include <stdio.h>
#include <math.h>
void main(){
int a=-32, abs_zn;
double x1=-0.24, y1=0.358,
x2=5.02, y2=11.3,
exp_f, abs_v, naib, ost, ln, log_d, step, kv_k,
arccos, arcsin, arctan, arctan2,
cos_f, cosh_f, sin_f, sinh_f, tan_f, tanh_f;
printf("a=%d \n x1=%.2f, y1=%.3f\n x2=%.2f,
y2=%.1f\n\n",a,x1,y1,x2,y2);
/*основные математические функции*/
abs_zn=abs(a); /*абсолютное значение целого*/
printf("abs(a)=%d\n",abs_zn);
exp_f=exp(x2); /*экспоненциальная функция*/
printf("exp(x2)=%f\n",exp_f);
abs_v=fabs(x1); /*абсолюнтое значение вещественного*/
printf("exp(x1)=%f\n",abs_v);
naib=floor(y2);
/*наибольшее целое, не превышающее данное значение*/
printf("floor(y2)=%f\n",naib);
ost=fmod(y2,x2); /*остаток от деления нацело y2 на x2*/
printf("fmod(y2,x2)=%f\n",ost);
ln=log(y1); /*натуральный логарифм*/
printf("log(y1)=%f\n",ln);
log_d=log10(y2); /*десятичный логарифм*/
printf("log10(y2)=%f\n",log_d);
step=pow(3,4); /*3 в степени 4*/
printf("pow(3,4)=%f\n",step);
kv_k=sqrt(x2); /*квадратный корень*/
printf("sqrt(x2)=%f\n\n",kv_k);
/*тригометрические функции*/
arccos=acos(x1); /*арккосинус*/
printf("acos(x1)=%f\n",arccos);
arcsin=asin(y1); /*арксинус*/
printf("asin(y1)=%f\n",arcsin);
arctan=atan(x2); /*арктангес*/
printf("atan(x2)=%f\n",arctan);
arctan2=atan2(y2,x2); /*арктангес от y1/x2*/
printf("atan2(y2,x2)=%f\n",arctan2);
cos_f=cos(x1); /*косинус*/
printf("cos(x1)=%f\n",cos_f);
cosh_f=cosh(y1); /*гиперболический косинус*/
printf("cosh_f(y1)=%f\n",cosh_f);
sin_f=sin(x2); /*синус*/
printf("sin(x2)=%f\n",sin_f);
sinh_f=sinh(y2); /*гиперболический синус*/
printf("sinh_f(y2)=%f\n",sinh_f);
tan_f=tan(x1); /*тангенс*/
printf("tan(x1)=%f\n",tan_f);
tanh_f=tanh(y1); /*гиперболический тангенс*/
printf("tanh_f(y1)=%f\n",tanh_f);
}
Выражения
Выражение – это последовательность операндов, разделителей и знаков операций, результатом которой является определенное значение.
Порядок применения операций к операндам определяется приоритетами (рангами) операций и правилами группирования операций (их ассоциативностью). Для изменения порядка выполнения операций и их группирования используют разделители (круглые скобки). В общем случае унарные операции (ранг 2), условная операция (ранг 14) и операции присваивания (ранг 15) правоассоциативны, а остальные операции левоассоциативны.
Таким образом, x=y=z означает x=(y=z),
x+y-z означает (x+y)-z.
Приоритеты операций
Ранг |
Операции |
Ассоциа-тивность |
1 |
() [] –> :: . |
→ |
2 |
! ~ + - ++ -- & * (тип) sizeof |
← |
3 |
.* ->* |
→ |
4 |
* / % (мультипликативные бинарные операции) |
→ |
5 |
+ - (аддитивные бинарные операции) |
→ |
6 |
<< >> |
→ |
7 |
< <= >= > |
→ |
8 |
== != |
→ |
9 |
& |
→ |
10 |
^ |
→ |
11 |
| |
→ |
12 |
&& |
→ |
13 |
|| |
→ |
14 |
?: (условная операция) |
← |
15 |
= *= /= %= += -= ?= ^= |= <<= >>= |
← |
16 |
, (операция запятая) |
→ |
Пример 2. Написать программу вычисления выражения
,
где переменные a и b типа int, а переменная x типа float.
//Программа вычисляет заданное выражение
#include <stdio.h>
#include <math.h>
void main(){
int a, b;
double x,z;
printf("Введите а="); scanf("%d", &a);
printf("Введите b="); scanf("%d", &b);
printf("Введите x="); scanf("%f", &x);
z=(sqrt(x*b/a)+pow(cos(pow((x+b),3)),2))/
((pow(x,2)*(x+1))/b-(pow(sin(x+a),2)));
printf("\nz=%5.3f\n",z);
}
Задания
Наберите код программы из Примера 1. Сохраните код в файл с именем mathfun.cpp. Выполните компиляцию и запуск программы.
Наберите код программы из Примера 2. Сохраните код в файл с именем mathvyr.cpp. Выполните компиляцию и запуск программы.
Написать программу вычисления площади треугольника, если известны длины двух его сторон и величина угла в градусах между этими сторонами. Аргумент функции sin в программе должен быть выражен в радианах. 1 рад. = 180/pi, где pi – число «пи».
Вычисление площади треугольника.
Введите длины двух сторон (см) треугольника > 25 17
Введите величину угла между сторонами треугольника > 30
Площадь треугольника: 106.25 кв. см.
Напишите в одной программе проверку истинности заданных неравенств и равенств:
;
;
.
Домашние задания
Даны x, y, z. Вычислить a и b, если
,
.
Напишите в одной программе проверку истинности заданных неравенств и равенств:
;
, (10 = π/1800);
.
Индивидуальное задание. Номер варианта определяется по журналу. Разработайте программу для вычисления у. Числа a, b, c вводятся с клавиатуры. В данном задании используйте форматированный ввод-вывод данных.
Варианты индивидуального задания
№ |
Задание |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|