- •А. В. Кибардин
- •Часть 1 Основы структурного и модульного программирования
- •Оглавление
- •Введение
- •1. Структурное программирование
- •Состав языка
- •Константы
- •Комментарии
- •Типы данных
- •Основные типы данных
- •Структура программы
- •Переменные и выражения Переменные
- •Операции
- •Примеры операций
- •Выражения
- •Функции ввода-вывода Основные функции ввода-вывода в стиле с
- •Спецификации формата
- •Модификаторы формата
- •Операторы Оператор «выражение»
- •Условный операторif
- •Оператор switch
- •Цикл с предусловием
- •Цикл с постусловием
- •Цикл с параметромfor
- •Операторы передачи управления Оператор безусловного перехода
- •Оператор break
- •Оператор continue
- •Оператор return
- •Указатели и ссылки
- •Инициализация указателей
- •Операции с указателями
- •Массивы Одномерные массивы
- •Динамические массивы
- •Многомерные массивы
- •Задание Написать программу, вычисляющую среднее арифметическое для каждого столбца и каждой строки двумерного числового массива a[4, 5]. Строки
- •Типы данных, определенные пользователем
- •Переименование типов
- •Перечисления
- •Структуры
- •2. Модульное программирование
- •Функции Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Передача имен функций в качестве параметров
- •Параметры со значениями по умолчанию
- •Перегрузка функций
- •Правила описания перегруженных функций
- •Шаблоны функций
- •Функции стандартной библиотеки
- •Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод
- •Закрытие потока
- •Обработка ошибок
- •Функции работы со строками и символами
- •Математические функции
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •Области действия и пространства имен
- •Внешние объявления
- •Поименованные области
- •Библиографический список
- •Часть 1 основы структурного и модульного программирования
- •620034, Екатеринбург, ул. Колмогорова, 66
Математические функции
С++ унаследовал из С стандартные математические функции, описание которых находится в заголовочном файле <math.h> (<cmath>). Они позволяют получить абсолютное значение (abs, fabs), округленное число (ceil, floor), квадратный корень (sqrt), степень (pow), значения тригонометрических функций (sin, cos, tan, asin, acos, atan и др.), экспоненту (exp), логарифм (log, log10), дробную и целую части числа (modf), остаток от деления (fmod) и ряд других.
Ошибки индицируются установкой errno из <errno.h> в значение EDOM для ошибок из области определения и ERANGE для ошибок выхода за пределы определения.
Функции
int abs (int num);
long labs(long int num);
double fabs(double x);
возвращают модуль целого и дробного числа соответственно.
Функции
double acos(double x);
double asin(double x);
double atan(double x);
double atan2(double x);
возвращают значение арккосинуса, арксинуса, арктангенса и арккотангенса соответственно. Значение возвращается в радианах.
double cos(double x);
double sin(double x);
double tan(double x);
double tan2(double x);
возвращают косинус, синус, тангенс, котангенс аргумента, заданного в радианах.
div_t div (int numerator, int denomerator);
делит целое numerator на целое denomerator, возвращая результат в структуре, содержащей частное от деления и остаток:
struct div_t {
int quot;
int rem;
}
double exp(double x);
возвращает результат возведения е в степень х.
double floor (double x);
округляет вещественное число х до ближайшего меньшего целого и возвращает его как вещественное число.
double log (double x);
double log10 (double x);
возвращают значение натурального и десятичного логарифмов соответственно.
double modf (double x, double *intptr);
разбивает х на целую и дробную части, причем дробную часть числа возвращает, а целую часть числа помещает по адресу, определяемому указателем intptr.
double pow (double x, double y);
вычисляет степень х основания у.
int rand(void);
генерирует случайное число в диапазоне от 0 до RAND_MAX (константа описана в <stdlib.h>. Для инициализации генератора псевдослучайных чисел используется функция randomize( ) – ее необходимо поставить в начале программы.
double sqrt(double x);
возвращает квадратный корень из х.
Задание
Написать программу, моделирующую игру в кости.
Директивы препроцессора
Препроцессором называется первая фаза компиляции. Инструкции препроцессора называются директивами. Они должны начинаться с символа #.
Директива #include
Директива #include <имя файла> вставляет содержимое указанного файла в ту точку исходного файла, где она записана. Включаемый файл также может содержать директивы #include. Вместо угловых скобок можно использовать двойные кавычки, тогда можно указывать полный путь к файлу.
Директива #include является простейшим средством согласованности объявлений в различных файлах, она включает в них информацию об интерфейсе из заголовочных файлов.
Заголовочные файлы имеют расширение .h и могут содержать:
– определения типов, констант, встроенных функций, шаблонов, перечислений;
– объявления функций, данных, имен, шаблонов;
– пространства имен (см. далее);
– директивы препроцессора;
– комментарии.
В заголовочном файле не должно быть определений функций и данных. Эти правила отражают не требования языка, а разумный подход использования директивы.
При указании заголовочных файлов стандартной библиотеки расширение .h можно опускать. Для каждого файла библиотеки С с именем <name.h> имеется соответствующий файл библиотеки С++ с именем <сname>, в котором те же средства описываются в пространстве имен std (см. далее).