Библиотека стандартных функций

Ряд функций, которые часто используются во многих программах, образуют библиотеку стандартных функций языка С++, большинство из которых пришли из языка С.

Библиотека стандартных функций является частью практически любого компилятора языка C++ и позволяет программистам использовать готовые функции в своих программах. В состав библиотеки входят математические функции (вычисление логарифма, квадратного корня, возведение в произвольную степень и т.д.), функции ввода-вывода, функции обработки строк и символов и ряд других. Для работы со стандартными функциями необходимо включать в программу файлы заголовков, которые содержат объявления нужных стандартных функций.

Так, для выполнения математических стандартных функций нужно подключить к программе файл заголовков math.h:

#include <math.h>

. . .

double x=sqrt (a); // вычисление квадратного корня переменной a

. . .

5. Язык C++: стиль записи программ

При записи программ важно придерживаться определенного стиля записи. Прежде всего, стиль выражается в способе именования переменных и функций и в распо­ложении операторов программы. Наличие правильного стиля облегчает изучение программ. Разбираться в программах, написанных в разных стилях, гораздо сложнее. Известно, что чтение программ с целью их проверки или модификации – не менее важное и редкое дело, чем их написание, и следует максимально облегчить это занятие.

В мировом программистском сообществе давно сложились представления о хорошем стиле программирования, и знание их свидетельствуют об уровне квалификации специалиста.

Итак, каждый оператор рекомендуется писать в отдельной строке. Допускается несколько коротких присваиваний в одной строке.

Пустые строки обычно разделяют однородные группы операторов. Например, можно поставить пус­тую строку между объявлением переменных и первым выполняемым оператором, перед группой логически связанных операторов.

При написании программ важно подчеркнуть структуру программы. Рекомендуемым средством достижения этой цели является отступ от левого края и расположение фигурных скобок. С левого края начинаются только описания функций, глобальных переменных и типов данных. Начало блока (открывающая фигурная скобка) увеличивает отступ следующего оператора от левого края на некоторое фиксированное число пробелов (обычно на та­буляцию или на 3-4 пробела):

int

sum (int x, int y, int z)

{

return x + y + z; // запись с отступом

}

Как видно из примера, тип возвращаемого значения записан от­дельной строкой, в следующей строке записано имя функции с формаль­ными параметрами, с той же позиции в следующей строке – левая (открывающая) фигур­ная скобка. Тело функции, в данном случае состоящее из одного оператора, записано с отступом. Правая (закрывающая) фигурная скобка убира­ет отступ и записывается под именем функции.

Зависимость операторов друг от друга также подчеркивается отступом. Например, выполняемый оператор в операторе if зависит от усло­вия, поэтому он записывается с отступом от позиции начала оператора if:

int

abs (int x)

{

if (x >= 0) // одинарный отступ

return x; // двойной отступ

else

return -x;

}

В операторах if-else без вложенности else располагается под соответствующим if.

Если в операторе if используется блок, то открывающаяся фигур­ная скобка ставится на той же строчке, где и условие, а закрывающаяся – на новой строчке в той же позиции,что и if. Если после этого следует конструкция else или else if, она начинается в той же строке через пробел:

if ( условие_1 ) {

операторы

} else if ( условие_2 ) {

операторы

} else {

операторы

}

Аналогичное правило используется для операторов цикла – тело цикла пишется с отступом по сравнению с заголовком цикла, закрываю­щаяся фигурная скобка убирает дополнительный отступ. Особенно важно придерживаться правил отступа при использовании вложенных циклов и условных операторов. Закрывающаяся фигурная скобка должна нахо­диться на том же уровне, что и начало соответствующего условного оператора или цикла:

for (int i = 0; i < n; i++) {

if (x > 0) {

while (true) {

операторы

} // конец тела цикла while

} // конец тела if

} // конец тела цикла for

Немного отличается написание оператора switch. Несмотря на то, что после заголовка оператора ставится открывающаяся фигурная скобка, все метки case или default располагаются на том же уровне, что и switch. Однако операторы, соответствующие меткам, пишутся с отступом:

switch (code) {

case 1:

x = 1;

break;

case 2:

x = 2;

break;

default:

;

}

Те же цели – легкость понимания и удобства чтения – преследуют правила именования. Использование одно- или двух буквенных идентификаторов в качестве имен переменных допустимо только, если это временные локальные переменные, смысл которых и так ясен из контекста. Однобуквенные идентификаторы i, j, k, l также часто используют в качестве переменных цикла. Чаще всего имена функций, переменных и т.д. составляются из английских слов, описывающих их смысл. Имена функций целесообразно писать с маленькой буквы, также как и имена переменных. Имена констант целесообразно составлять из заглавных букв. Если имена констант состоят из нескольких слов, в качестве разделителя используется подчеркивание:

fact, width, length, BITS_IN_BYTE

6. Язык C++: встроенные типы данных

Большинство программ на языке C++ представляет и обрабатывает данные. Любые данные принадлежат к какому-то из типов. Тип данных определя­ет возможные значения данных и набор определенных для них операций. Напри­мер, данные типа short (“короткие” целые числа со знаком) могут принимать числовые значения от -32768 до 32767. Для данных этого типа определены обычные арифметические операции и правила выполнения этих опе­раций при, например, переполнении, то есть при выходе результата за грани­цы допустимых значений этого типа.

Данные могут быть постоянными, то есть неизменяемыми во время выполнения программы. Для обозначения таких данных используются констан­ты. При работе с изменяемыми данными в программе создаются пере­менные для хранения изменяемых значений.

Встроенные типы данных предопределены в языке. Это основные, “базовые” типы, из которых составляют все производные типы. Различные реализации и различные компиляторы могут оп­ределять различные диапазоны значений целых и вещественных чисел.

В табл. 1 перечислены встроенные типы данных языка C++ и приведены наиболее типичные диапазоны их значений.

Таблица 1. Встроенные типы данных языка C++.

Название Обозначение Число байтов Диапазон значений
Символ char от -128 до +127
Символ без знака unsigned char от 0 до 255
Короткое целое число short int от -32768 до +32767
Короткое целое число без знака unsigned short int от 0 до 65535
Длинное целое число long int от -2147483648 до +2147483647
Длинное целое число без знака unsigned long int от 0 до 4294967295
Вещественное число одинарной точности float от ±3.4е-38 до ±3.4е+38 (7 значащих цифр)
Вещественное число двойной точности double от ±1.7е-308 до ±1.7е+308 (15 значащих цифр)
Вещественное число увеличенной точности long double от ±1 .2е-4932 до. ±1 .2е+4932
Логическое значе­ние bool значения true (истина) или false (ложь)

Целые числа

Для представления целых чисел в языке C++ существует несколь­ко типов, например, short int (”короткое” целое), int (целое) и long int (“длинное” целое). Они отличаются друг от друга диапазо­ном возможных значений (см. табл. 1). В словосочетаниях short int и long int описатель int можно опустить. Каждый из целочисленных типов может быть знаковым (signed) или беззнаковым (unsigned). По умолчанию, тип целых величин – знако­вый. Если перед определением типа стоит ключевое слово unsigned, то тип целого числа беззнаковый. Так, для того, чтобы объявить переменную x как короткое целое знаковое число, нужно записать:

short x;

а чтобы указать, что оно короткое беззнаковое –

unsigned short x;

Переменная без знака может принимать только неотрицательные значения, переменная со знаком – как неотрицательные, так и отрицательные значения.

Тип int совпадает либо с short, либо с long. В современных аппаратно-операционных средах int можно принимать за полный аналог long, хотя некоторое время назад, в эпоху распространения 16-разрядной аппаратной базы, int совпадал с short.

Целое число может быть непосредственно записано в программе в виде константы. Запись чисел соответствует общепринятой нотации. Примеры целых констант: 0, 125, -37. По умолчанию целые константы принадлежат к типу int.

Кроме стандартной десятичной записи, числа можно записывать в восьмеричной или шестнадцатеричной системе счисления. Признаком восьмеричной системы счисления является цифра 0 в начале числа, признаком шестнадцатеричной – 0х или 0Х перед числом. Для записи шестнадцатеричных цифр используются большие или маленькие латинские буквы от А до F.

const int x = 240;

const int y = 0360;

const int z = 0xF0;

Отрицательные числа предваряются знаком “минус” (-).

Для целых чисел определены стандартные арифметические опе­рации сложения (+), вычитания (-), умножения (*), деления (/), нахожде­ние остатка от деления (%), изменение знака (-). Результатом этих опера­ций также является целое число. При делении остаток отбрасывается.

Кроме стандартных арифметических операций, для целых чисел определен набор побитовых (или поразрядных) операций. В них целое число рассматривается как строка битов (нулей и единиц при записи числа в двоичной системе счисления или разрядов машинного представления числа).

К этим операциям относятся поразрядные (побитовые) операции И (&), ИЛИ (|), ИСКЛЮЧАЮЩЕЕ ИЛИ (^) и НЕ (отрицание) (~), а также поразрядные сдвиги. Поразрядные операции И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и НЕ выполняют операцию над соответствующими отдельными битами своих операндов, их результаты приведены в таблице 2.

Таблица 2. Результаты выполнения побитовых операций

p q p & q p | q p^q ~p

Операции сдвига, обозначаемые << и >>, сдвигают двоичное представление левого операн­да в “указываемую” сторону на количество битов, соответствующее значению правого операнда.

При сдвиге влево число дополняется нулями справа. При сдвиге вправо значение, которым дополняется число, определяется тем, знаковое оно или беззнаковое. Беззнаковые числа при сдвиге вправо всегда допол­няются нулями. Если же число знаковое, то для дополнения используется значение самого левого бита числа. Это объясняется тем, что во внутреннем представлении целых чисел в компьютере самый левый бит как раз и является знаком: 0 означает плюс, 1 означает минус.

Рассмотренные арифметические и поразрядные операции выполняются над целыми числами и в результате дают целое число. В отличие от них операции сравнения выполняются над целыми числами, но в результате дают логическое значение истина (true) или ложь (false).

Для целых чисел определены операции сравнения: равенства (= =), неравенства (!=), больше (>), меньше (<), больше или равно (>=) и меньше или равно (<=).

В языке C++ допустимо смешивать различные целые типы в выражении. Общее правило преобразования целых типов состоит в том, что более короткий тип при вычислениях преобразу­ется к более длинному. Только при выполнении присваивания более длинный тип может преобразовываться к более короткому. Такое преобразование не всегда безопасно, при нем могут потеряться значащие цифры. Обычно компиляторы выдают предупреждение или ошибку, встречая такое преобразование.

Вещественные числа

Вещественные числа в C++ могут быть одного из трех типов: с одинарной точностью (float), с двойной точностью (double) и с расширен­ной точностью (long double):

float x;

double e = 2.9;

long double s;

В большинстве реализаций языка представление и диапазоны зна­чений соответствуют стандарту IEEE (Institute of Electrical and Electronics Engineers) для представления вещественных чисел. Именно в соответст­вии с этим стандартом в табл. 1 и приведены диапазоны значений веще­ственных чисел. Точность представления чисел составляет 7 десятичных значащих цифр для типа float, 15 значащих цифр для double и 19 для типа long double.

Вещественные числа записываются либо в виде десятичных дро­бей: 1.3, 3.1415, 0.0005, либо в виде мантиссы и экспоненты: 1.2Е-1, 0.12е0. Отметим, что обе предыдущие записи изображают одно и тоже число 0.12.

По умолчанию вещественная константа принадлежит к типу double.

Для вещественных чисел определены все стандартные арифмети­ческие операции: изменения знака (-), сложения (+), вычитания (-), умножения (*), деления (/) и изменения знака (-). В отличие от целых чисел, операция % не определена. Аналогично, все побитовые операции и сдвиги не при­менимы к вещественным числам; они работают только с целыми числами.

Вещественные числа можно сравнивать на равенство (= =), неравенство (!=), больше (>), меньше (<), больше или равно (>=) и меньше или равно (<=). В результате операции сравнения получается логическое значение истина или ложь.

Если арифметическая операция применяется к двум вещественным числам разных типов, то менее точное число преобразуется к более точному, то есть float преобразуется в double и double преобразуется к long double. Очевидно, что такое преобразование всегда можно выполнить без потери точности.

Если вторым операндом в операции с вещественным числом выступает целое число, то целое число преобразуется в вещественное представление.

Хотя любую целую величину можно представить в виде вещественного числа, при таком преобразовании возможна потеря точности (для больших чисел).








Дата добавления: 2015-11-10; просмотров: 1302;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.