Форматированный
вывод
Для
выдачи значений заданной длины или
точности оператор cout имеет
ряд настроек:
cout.width(число)
– общая длина выводимого значения
cout.precision(число)
– число знаков после запятой
cout.fill(‘символ-заполнитель’)
– символ, которым заполняются лишние
позиции на экране
Настройка cout.width после
выполнения одного оператора вывода
сбрасывается в начальное значение.
Поэтому ее приходится указывать отдельно
для каждой переменной или строки.
Настройки
этих параметров должны проводиться до
вызова оператора вывода.
Например:
//описываем
переменные
float a=125.478, b=625.365;
//задаем
число знаков поле запятой
cout.precision(2);
//задаем
заполнитель для лишний позиций
cout.fill(‘0’);
//выдаем значения переменных
на экран
cout<<”a=”;
cout<<”
b=”;
//задаем
общую длину для числа
Регулировка
ширины поля (width)
и заполнителя (fill)
имеет смысл при выдачи данных
в таблицу. Чаще всего можно обойтись
только настройкой precision.
Очистка
экрана
Язык С++
имеет функцию, позволяющую очищать
экран от текстовой информации. Эта
функция имеет вид:
Данная
функция находится в заголовочном
файле conio.h.
Поэтому для ее использования данный
файл должен быть подключен с помощью
директивы:
#include
Организация
паузы для просмотра результата
После
выполнения программы обычно происходит
автоматичский возврат в окно с исходным
текстом. Это не позволяет просмотреть
результат, который программа выдает на
экран. Выходом из этой ситуации может
быть использование
клавиш Alt+F5, при нажатии на которые происходит
скрытие окна с кодом программы. Повторное
нажатие на эти клавиши возвращает окно
с кодом на экран.
Однако,
если создать исполняемый EXE файл,
то использовать эти клавиши будет
невозможно и результат останется
невидимым для пользователя.
Для
решения данной проблемы в конце программы
можно добавлять функцию, которая
приостанавливает работу до нажатия
любой клавиши. Эта функция имеет вид:
getch
();
Данная функция
находится в заголовочном файле conio.h.
Поэтому для ее использования данный
файл должен быть подключен с помощью
директивы:
#include
Оператор
ввода данных с клавиатуры
Для
вода данных с клавиатуры в С++
имеется оператор:
cin>>переменная;
Данный
оператор приостанавливает работу
программы и ждет пока пользователь не
введет значение переменной и на нажмет ENTER.
C помощью
одного оператора можно ввести значения
нескольких переменных. Для этого
оператор записывают в виде:
cin>>переменная1>>переменная2>>.
. .>>переменнаяn;
При
запуске программы каждое значение
вводится через пробел и в конце
нажимают ENTER.
Оператор COUT находится
в заголовочном файле iostream.h.
Поэтому для его использования данный
файл нужно подключить с помощью директивы:
#include
(начало)
6.
Пример программы на С++
Для демонстрации решим одну
задачу. Составить программу для нахождения
значения функции:
Программа может иметь
вид:
//подключаем
файл для организации ввода/вывода
#include
//подключаем
файл для использования алгебраических
функций
#include
//подключаем
файл для вызова функции очистки экрана
#include
//заголовок
главной программы
//описываем
три переменных вещественного типа
//очищаем экран
//выдаем
текстовую подсказку на экран
cout<<"Введите
значения a и b:";
//запрашиваем
ввод с клавиатуры двух переменных: a и b
//считаем
значение функции
c=sin(a)+pow(cos(b),2);
//устанавливаем
точность вывода результата 3
знака полсе запятой
cout.precision(3);
//выводим
результат на экран
cout<<"Функция
равна:"<cout<<"Для
продолжения нажмите любую клавишу. . .";
//делаем
паузу для просмотра результата
//завершаем
работу главной программы
Математические функции языка С
В языках С и C++ определено множество разнообразных математических функций. Сначала оба языка поддерживали один и тот же набор, состоящий из 22 математических функций. Однако по мере развития языка C++ расширялся и арсенал определенных в нем функций. Затем в версии С99 размер математической библиотеки значительно увеличился. В результате этих изменений библиотеки математических функций языков С и C++ стали существенно отличаться одна от другой. Поэтому в данной главе описываются математические функции языка С(включая те, которые добавлены в версии С99), а в главе 9 уделено внимание исключительно функциям языка C++. При этом имейте в виду, что исходный набор математических функций по-прежнему поддерживается всеми версиями языков С и C++.
Для использования всех математических функций в программу необходимо включить заголовок . Помимо объявления математических функций, этот заголовок определяет один или несколько макросов. В версии С89 заголовком определяется только макрос HUGE_VAL, который представляет собой значение типа double, сигнализирующее о возникшем переполнении.
В версии С99 определены следующие макросы.
В версии С99 определены следующие макросы(подобные функциям), которые классифицируют значение.
В версии С99 определены следующие макросы сравнения, аргументами которых(a и b) должны быть значения с плавающей точкой.
Эти макросы прекрасно обрабатывают значения, которые не являются числами, не вызывая при этом исключений вещественного типа.
Макросы EDOM и ERANGE также используются математическими функциями. Эти макросы определены в заголовке .
Ошибки в версиях С89 и С99 обрабатываются по-разному. Так, в версии С89, если аргумент математической функции не попадает в домен, для которого он определен, возвращается некоторое значение, зависящее от конкретной реализации, а встроенная глобальная целая переменная errno устанавливается равной значению EDOM. В версии С99 ошибка нарушения границ домена также приводит к возврату значения, зависящего от конкретной реализации. Однако по значению math_errhandling можно судить о выполнении других действий. Если math_errhandling содержит значение MATH_ERRNO, встроенная глобальная целая переменная errno устанавливается равной значению EDOM. Если же math_errhandling содержит значение MATH_ERREXCEPT, возбуждается исключение вещественного типа.
В версии С89, если функция генерирует результат, который слишком велик для возможностей представления, происходит переполнение. В этом случае функция возвращает значение HUGE_VAL, а переменная errno устанавливается равной значению ERANGE, сигнализирующему об ошибке диапазона. При обнаружении потери значимости функция возвращает нуль и устанавливает переменную errno равной значению ERANGE. В версии С99 ошибка переполнения также приводит к тому, что функция возвращает значение. HUGE_VAL, а при потере значимости - нуль. Если math_errhandling содержит значение MATH_ERRNO, глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке диапазона. Если же math_errhandling содержит значение MATH_ERREXCEPT, возбуждается исключение вещественного типа.
В версии С89 аргументами математических функций должны быть значения типа double и значения, возвращаемые функциями, имеют тип double. В версии С99 добавлены float- и long double-варианты этих функций, которые используют суффиксы f и l соответственно. Например, в версии С89 функция sin() определена следующим образом.
Double sin(double arg);
В версии С99 поддерживается приведенное выше определение функции sin() и добавляются еще две ее модификации - sinf() и sinl().
Float sinf(float arg);
long double sinl(long double arg);
Операции, выполняемые всеми тремя функциями, одинаковы; различаются лишь данные, подвергаемые этим операциям. Добавление f- и 1-модификаций математических функций позволяет использовать версию, которая наиболее точно соответствует вашим данным.
Поскольку в версии С99 добавлено так много новых функций, стоит отдельно перечислить функции, поддерживаемые версией С89(они также используются в языке C++).
acos
|
asin
|
atan
|
atan2
|
ceil
|
cos
|
cosh
|
exp
|
fabs
|
floor
|
fmod
|
frexp
|
ldexp
|
log
|
log10
|
modf
|
pow
|
sin
|
sinh
|
sqrt
|
tan
|
tanh
|
|
|
|
И еще одно: все углы задаются в радианах.
Смотрите также
acos - Возвращает значение арккосинуса
acosh - Возвращает значение гиперболического арккосинуса
asin - Возвращает значение арксинуса
asinh - Возвращает значение гиперболического арксинуса
atan - Возвращает значение арктангенса
atan2 - Возвращает значение арктангенса от а/Ь
atanh - Возвращает значение гиперболического арктангенса
cbrt - Возвращает значение кубического корня
ceil - Возвращает наименьшее целое, которое больше значения заданого аргумента
copysign - Наделяет заданный аргумент знаком, который имеет указаный аргумент
cos - Возвращает значение косинуса
cosh - Возвращает значение гиперболического косинуса
erf - Возвращает значение функции ошибок
erfc - Возвращает дополнительное значение функции ошибок
exp - Возвращает значение экспоненты
exp2 - Возвращает число 2, возведенное в заданную степень
expm1 - Возвращает уменьшенное на единицу значение натурального логарифма е
fabs - Возвращает абсолютное значение
fdim - Возвращает нуль или разность в двух заданных аргументов
floor - Возвращает наибольшее целое которое меньше или равно значению заданного аргумента
fma - Возвращает значение а*Ь+с заданных аргументов
fmax - Возвращает большее из двух значений
fmin - Возвращает меньшее из двух значений
fmod - Возвращает остаток от деления
frexp - Разбивает заданное число на мантиссу и экспоненту
hypot - Возвращает длину гипотенузы при заданных длинах двух катетов
ilogb - Выделяет экспоненциальное значение
ldexp - Возвращает значение выражения num*2^ехр.
Для всех математических функций необходим заголовок . В программах на языке C используется заголовок
1
|
acos
|
Функция double acos(double arg
arg
|
2
|
asin
|
Функция double asin(double arg
) возвращает арккосинус аргумента arg
. Значение аргумента функции должно лежать в интервале от -1 до 1, иначе произойдет ошибка.
|
3
|
atan
|
Функция double atan(double arg
) возвращает арктангенс аргумента arg
.
|
4
|
atan2
|
Функция double atan2(double x
, double y
) возвращает арктангенс значения y
/x
.
|
5
|
ceil
|
Функция double ceil(double num
) возвращает ближайшее целое число (представленное как действительное число с плавающей точкой), которое не меньше значения аргумента num
. Например, ceil(1.02) вернет 2.0. Такое преобразование называется округлением с избытком.
|
6
|
cos
|
Функция double cos(double arg
) возвращает косинус аргумента arg
|
7
|
cosh
|
Функция double cosh(double arg
) возвращает гиперболический косинус аргумента arg
.
|
8
|
exp
|
Функция double exp(double arg
) возвращает основание натурального логарифма e,
возведенное в степень arg
.
|
9
|
fabs
|
Функция double fabs(double num
) возвращает абсолютное значение (значение по модулю) аргумента num
.
|
10
|
floor
|
Функция double floor(double num
) возвращает наибольшее целое число (представленное как действительное число с плавающей точкой), не превышающее значения аргумента num
. Например, floor(1.02) вернет число 1.0. Такое преобразование называется округлением с недостатком.
|
11
|
fmod
|
Функция double fmod(double x, double y) возвращает остаток от деления x/y.
|
12
|
frexp
|
Функция double frexp(double num
, int *exp
) раскладывает число num
на мантиссу, изменяющуюся в диапазоне от 0.1 до 1, не включая 1, и целый показатель степени, так что num
= mantissa
. Функция возвращает мантиссу, а значение показателя степени сохраняется в переменной, на которую ссылается указатель exp
.
|
13
|
log
|
Функция double log(double num
) возвращает натуральный логарифм числа num
. Если аргумент num
|
14
|
log10
|
Функция double log10(double num
) возвращает десятичный логарифм числа num
. Если аргумент num
отрицателен или равен нулю, возникает ошибка.
|
15
|
pow
|
Функция double pow(double base
, double exp
) возвращает число base
, возведенное в степени exp
. Если основание степени base
равно нулю, а показатель степени exp
меньше или равен нулю, может произойти ошибка, связанная с выходом аргумента из области определения функции (domain error). Это ошибка возникает также, если аргумент base
отрицателен, а аргумент exp
не является целым числом.
|
16
|
sin
|
Функция double sin(double arg
) возвращает синус аргумента arg
. Значение аргумента должно быть выражено в радианах.
|
17
|
sinh
|
Функция double sinh(double arg
) возвращает гиперболический синус аргумента arg
.
|
18
|
sqrt
|
Функция double sqrt(double num
) возвращает квадратный корень аргумента num
. Если значение аргумента отрицательно, возникает ошибка, связанная с выходом из области определения функции.
|
19
|
tan
|
Функция double tan(double arg
) возвращает тангенс аргумента arg
. Значение аргумента должно быть выражено в радианах.
|
20
|
tanh
|
Функция double tanh(double arg
) возвращает гиперболический тангенс аргумента arg
.
|
Пожалуйста, приостановите работу AdBlock на этом сайте.
Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.
Для использования математических функций нужно подключить заголовочный файл math.h
. В ней определено много различных функций, но мы пока рассмотрим следующие:
Некоторые математические функции
fabs(x)
модуль числа x
sqrt(x)
квадратный корень из числа x
sin(x)
синус числа x (х в радианах)
cos(x)
косинус числа x (х в радианах)
pow(x, y)
вычисление x y
exp(x)
вычисление e x
log(x)
натуральный логарифм числа x
log10(x)
десятичный логарифм числа x
Два важных момента.
- Все функции возвращают значение типа double
.
- Параметры функций – вещественные числа(double
), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа
. Компилятор из целого числа, например 3, сделает вещественное 3.0.
Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы.
Простая задачка на знание теоремы Пифагора.
Листинг 1.
#include
#include // подключаем math.h
int main (void) {
int a, b, c2;
scanf("%d",&a);
scanf("%d",&b);
c2 = a*a + b*b;
printf("c = %.2f\n", sqrt(c2));
return 0;
}
Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.
Листинг 2.
#include
#include // подключаем math.h
int main (void) {
double alpha, sin_a, pi = 3.1415926;
scanf("%lf",&alpha);
alpha = alpha*pi/180;
sin_a = sin(alpha);
printf("%.2f\n", sin_a);
return 0;
}
В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h
работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы . Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.
Неявное преобразование типов
При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип.
Неявное преобразование типов осуществляется в следующих случаях:
- перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
- выполнение арифметических операций с разными типами аргументов
- перед выполнением присваивания
Правила неявного преобразования типов
- если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
Порядок типов: int
< float
< double
- при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.
int+float
будет автоматически преобразовано к float+float
float/int
будет автоматически преобразовано к float/float
double*float
будет преобразовано к double*double
int = double
double
будет преобразовано к int
с потерей дробной части
float = int
int
будет преобразовано к float