logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

Глава 3

Заголовочный файл стандартной библиотеки

Объяснение

<assert .h>

Содержит макросы и информацию для дополнительной диагностики, помогающей при отладке программы.

<ctype .h>

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

<errno.h>

Определяет макросы, полезные для получения сообщений об ошибках.

<float.h>

Содержит ограничения на числа с плавающей запятой в системе.

<limits .h>

Содержит общие ограничения системы.

<locale.h>

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

<math.h>

Содержит прототипы математических библиотечных функций.

<setjmp.h>

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

<signal .h>

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

<stdarg.h>

Определяет макросы для работы со списком аргументов функции при неизвестном количестве и типе аргументов.

<stddef .h>

Содержит объявления типов, используемых для выполнения некоторых вычислений.

<stdio.h>

Содержит прототипы стандартных библиотечных функций ввода-вывода и используемую ими информацию.

<stdlib.h>

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

<string.h>

Содержит прототипы функций, обрабатывающих строки.

<time .h>

Содержит прототипы функций и типы для работы с временем и датами.

Рис. 3.6. Заголовочные файлы стандартной библиотеки

Есть нечто такое в атмосфере казино с азартными играми, что подвигает людей любого склада проматывать деньги на плюшевых столах красного де­рева или у одноруких бандитов. Это — элемент случайности, возможность превратить карманные деньги в истинное богатство. Элемент случайности может быть введен в компьютерные приложения с помощью функции rand из стандартной библиотеки С.

Рассмотрим следующий оператор:

i = rand() ;

Функция rand генерирует целое число в диапазоне между 0 и RAND_MAX (символическая константа, определенная в заголовочном файле <stdlib.h>). Значение RAND_MAX должно быть по меньшей мере равно 32767 — максимальное положительное значение двухбайтового (т.е. 16-би-

Функции

191

тового) целого числа. Программы, представленные в этом разделе, были про­верены на системе с максимальным значением RAND_MAX, равным 32767. Если rand действительно вырабатывает случайные целые число, то при каж­дом вызове rand результирующее число имеет равную вероятность оказаться любым целым, лежащим между 0 и RAND_MAX.

Диапазон значений, которые вырабатываются непосредственно функцией rand, отличается от диапазонов, которые требуются в специальных прило­жениях. Например, программа, моделирующая бросание монеты, требует только двух значений: 0 для «орла» и 1 для «решки». Программе, модели­рующей метание кости с шестью гранями, должны бы потребоваться слу­чайные целые числа в диапазоне от 1 до 6. Программа, которая случайным образом определяет тип следующего космического корабля (из четырех воз­можных), пересекающего горизонт в видеоигре, должна требовать случайные целые числа в диапазоне от 1 до 4.

Чтобы продемонстрировать rand, давайте разработаем программу моде­лирования 20 бросаний шестигранной игральной кости с печатью результата каждого бросания. Прототип функции rand можно найти в <stdlib.h>. Для того, чтобы выработать целые числа в диапазоне от 0 до 5, используем опе­рацию вычисления остатка % в сочетании с rand:

rand() % 6

Это называется масштабированием. Число 6 называется масштабирую­щим коэффициентом. Затем мы сдвигаем диапазон чисел, добавляя 1 к по­лученному результату. Рис. 3.7 подтверждает, что результаты находятся в диапазоне от 1 до 6.

// Сдвинутые, масштабированные целые числа, // полученные по закону 1 + rand() % 6

#include <iostream.h> #include <iomanip.h> #include <stdlib.h>

main () {

for (int i = 1; i <= 20; i++)

{

cout « setw(10} « 1 + rand() % 6;

if (i % 5 == 0) cout « endl; }

return 0;

5

5

3

5

5

2

4

2

5

5

5

3

2

2

1

5

1

4

6

4

Рис. 3.7. Сдвинутые масштабированные целые числа, полученные по закону 1 + rand() % 6