Символьный тип (char)
Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Тип char, как и другие целые типы, может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.
Расширенный символьный тип (wchar_t)
Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode.
Размер этого типа зависит от реализации; как правило, он соответствует типу short.
Строковые константы типа wchar_t записываются с префиксом L, например, L "Gates".
Логический тип (bool)
Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами.
Внутренняя форма представления значения false — 0 (нуль).
Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.
Типы с плавающей точкой (float, double и long double)
Стандарт C++ определяет три типа данных для хранения вещественных значений: float, double и long double.
Типы данных с плавающей точкой хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка. В IBM PC-совместимых компьютерах величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.
Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка — его диапазон. Как можно видеть из табл., при одинаковом количестве байт, отводимом под величины типа float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления.
Спецификатор long перед именем типа double указывает, что под величину отводится 10 байт.
Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6L будет иметь тип long double, а константа 1.82f — тип float.
Для вещественных типов в таблице приведены абсолютные величины минимальных и максимальных значений.
Для написания переносимых на различные платформы программ нельзя делать предположений о размере типа int. Для его получения необходимо пользоваться операцией sizeof, результатом которой является размер типа/в байтах. Например, для операционной системы MS-DOS sizeof (int) даст в результате 2, а для Windows 9X или OS/2 результатом будет 4.
В стандарте ANSI диапазоны значений для основных типов не задаются, определяются только соотношения между их размерами, например:
sizeof(float) sizeof(double) sizeof(long double)
sizeof(char) sizeof(short) sizeof(int) sizeof(long)
Различные виды целых и вещественных типов, различающиеся диапазоном и точностью представления данных, введены для того, чтобы дать программисту возможность наиболее эффективно использовать возможности конкретной аппаратуры, поскольку от выбора типа зависит скорость вычислений и объем памяти. Но оптимизированная для компьютеров какого-либо одного типа программа может стать не переносимой на другие платформы, поэтому в общем случае следует избегать зависимостей от конкретных характеристик типов данных.
Тип void
К основным типам языка относится тип также void. Множество значений этого типа пусто. Он используется:
• для определения функций, которые не возвращают значения,
• для указания пустого списка аргументов функции.
Математические функции
Прототипы функций хранятся в файле math.h.
В библиотеке math.h. описаны следующие функции:
abs ... acos, acosl asin, asinl
atan, atanl atan2, atan2l atof, _atold
cabs, cabsl ceil, ceill cos, cosl
cosh, coshl exp, expl fabs, fabsl
floor, floorl fmod, fmodl frexp, frexpl
hypot, hypotl labs ... ldexp, ldexpl
log, logl log10, log101 matherr, _matherrl
modf, modfl poly, polyl pow, powl
pow10, pow10l sin, sinl sinh, sinhl
sqrt, sqrtl tan, tanl tanh, tanhl
Для того, чтобы получить данный перечень, необходимо ввести в тексте программы имя библиотеки math и нажать Ctrl+F1. Появится перечень слов с выделенным именем библиотеки. Нажать Enter.
Для того, чтобы прочитать описание конкретной функции, необходимо выделить имя функции и нажать Enter или выполнить двойной щелчок мышью на имени функции. Например, описание функции hypot (вычисление длины гипотенузы прямоугольного треугольника) будет выглядеть следующим образом.
_______________
_hypot, hypotl_ <MATH.H>
_______________
Calculates hypotenuse of right triangle
Declaration:
_ double hypot(double x, double y);
_ long double hypotl(long double (x), long double (y));
Remarks:
hypot and hypotl calculate the value z where
z**2 = x**2 + y**2 and z >= 0
This is equivalent to the length of the hypotenuse of a right triangle, if
the lengths of the two sides are x and y.
Return Value:
_ On success,
_ hypot returns a double
_ hypotl returns a long double
_ On error (such as an overflow), both
functions set errno to ERANGE (result
out of range) and:
_ hypot returns the value HUGE_VAL.
_ hypotl returns the value _LHUGE_VAL.
Error handling for hypot can be modified via matherr; for hypotl, via
_matherrl.
Example:
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 3.0;
double y = 4.0;
result = hypot(x, y);
printf("The hypotenuse is: %lf\n", result);
return(0);
}
Таблица описания некоторых математических функций.
Обращение к функции |
Тип аргументов |
Тип значения (z) |
Описание
|
abs(x) |
int |
int |
Нахождение x |
fabs(x) |
double |
double |
-//- |
labs(x) |
long int |
long int |
-//- |
acos(x) |
double |
double |
arccos(x), -1≤x≤1, 0≤z≤pi |
asin(x) |
double |
double |
arcsin(x), -1≤x≤1, -pi/2≤z≤pi/2 |
atan(x) |
double |
double |
arctg(x), -pi/2<z<pi/2 |
atan2(y,x) |
double, double |
double |
arctg(y/x), x≠0, -pi<z<pi |
ceil(x) |
double |
double |
Нахождение наименьшего целого ≥x |
floor(x) |
double |
double |
Нахождение наибольшего целого ≤x |
cos(x) |
double |
double |
Нахождение cos(x), x-в радианах |
sin(x) |
double |
double |
Нахождение sin(x), x-в радианах |
tan(x) |
double |
double |
Нахождение tg(x), x-в радианах |
cosh(x) |
double |
double |
Нахождение ch(x) |
sinh(x) |
double |
double |
Нахождение sh(x) |
tanh(x) |
double |
double |
Нахождение th(x) |
exp(x) |
double |
double |
Нахождение ex |
fmod(x,y) |
double, double |
double |
Деление x по модулю y |
log(x) |
double |
double |
Вычисление ln(x), x>0 |
log10(x) |
double |
double |
Вычисление lg(x), x>0 |
modf(x,&i) |
Double, double *i |
double |
Определение целой i и дробной modf(x,&i) частей числа x |
pow(x,y) |
Double, double |
double |
Вычисление xy, x>0. Если x=y=0=>1 |
sqrt(x) |
double |
double |
Вычисление корня квадратного, x≥0 |
pow10(x) |
int |
double |
Вычисление 10x |