Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке с++ ч.1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.13 Mб
Скачать

Лабораторная работа №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. Наберите код программы из Примера 1. Сохраните код в файл с именем mathfun.cpp. Выполните компиляцию и запуск программы.

  2. Наберите код программы из Примера 2. Сохраните код в файл с именем mathvyr.cpp. Выполните компиляцию и запуск программы.

  3. Написать программу вычисления площади треугольника, если известны длины двух его сторон и величина угла в градусах между этими сторонами. Аргумент функции sin в программе должен быть выражен в радианах. 1 рад. = 180/pi, где pi – число «пи».

Вычисление площади треугольника.

Введите длины двух сторон (см) треугольника > 25 17

Введите величину угла между сторонами треугольника > 30

Площадь треугольника: 106.25 кв. см.

  1. Напишите в одной программе проверку истинности заданных неравенств и равенств:

    1. ;

    2. ;

    3. .

Домашние задания

  1. Даны x, y, z. Вычислить a и b, если

, .

  1. Напишите в одной программе проверку истинности заданных неравенств и равенств:

  1. ;

  2. , (10 = π/1800);

  3. .

  1. Индивидуальное задание. Номер варианта определяется по журналу. Разработайте программу для вычисления у. Числа a, b, c вводятся с клавиатуры. В данном задании используйте форматированный ввод-вывод данных.

Варианты индивидуального задания

Задание