Библиотечные заголовочные файлы ANSI Си.
<assert.h> | Содержит макрос утверждений, используемый для обнаружения логических и некоторых других типов ошибок в отлаживаемой версии программы. |
<complex.h> | Набор функций для работы с комплексными числами. |
<ctype.h> | Содержит функции, используемые для классификации символов по их типам или для конвертации между верхним и нижним регистрами независимо от используемой кодировки (обычно ASCII или одно из её расширений, хотя есть и реализации, использующие EBCDIC). |
<errno.h> | Для проверки кодов ошибок, возвращаемых библиотечными функциями. |
<fenv.h> | Для управления средой, использующей числа с плавающей запятой. |
<float.h> | Содержит заранее определенные константы, описывающие специфику реализации свойств библиотеки для работы с числами с плавающей запятой, как, например, минимальная разница между двумя различными числами с плавающей точкой (_EPSILON), максимальное число цифр точности (_DIG) и область допустимых чисел (_MIN, _MAX). |
<inttypes.h> | Для точной конвертации целых типов. |
<iso646.h> | Для программирования в кодировке ISO 646. |
<limits.h> | Содержит заранее заданные константы, определяющие специфику реализации свойств целых типов, как, например, область допустимых значений (_MIN, _MAX). |
<locale.h> | Для setlocale() и связанных констант. Используется для выбора соответствующего языка. |
<math.h> | Для вычисления основных математических функций |
<setjmp.h> | Объявляет макросы setjmp и longjmp, используемые для нелокальных переходов |
<signal.h> | Для управления обработкой сигналов |
<stdarg.h> | Для доступа к различному числу аргументов, переданных функциям. |
<stdbool.h> | Для булевых типов данных. |
<stdint.h> | Для определения различных типов целых чисел. (Появилось в C99) |
<stddef.h> | Для определения нескольких стандартных типов и макросов. |
<stdio.h> | Реализует основные возможности ввода и вывода в языке Си. Этот файл содержит весьма важную функцию printf. |
<stdlib.h> | Для выполнения множества операций, включая конвертацию, генерацию псевдослучайных чисел, выделение памяти, контроль процессов, окружения, сигналов, поиска и сортировки. |
<string.h> | Для работы с различными видами строк. |
<math.h> | Для типовых математических функций. |
<time.h> | Для конвертации между различными форматами времени и даты. |
<wchar.h> | Для обработки «широких» потоков и нескольких видов строк при помощи «широких» символов (поддержка набора языков). |
<wctype.h> | Для классификации «широких» символов. |
Некоторые языки обеспечивают функциональность стандартной библиотеки Си при помощи своих собственных библиотек. Библиотека может быть адаптирована для структур языка, но семантика операций остается схожей. Язык программирования C++, например, содержит функциональность стандартной библиотеки ANSI Си в пространстве имен std (например, std::printf, std::atoi, std::feof и т. д.), в заголовочных файлах со схожими именами как в Си («cstdio», «cmath», «cstdlib» и т. д.).
Для работы со строками существуют следующие библиотечные функции:
Функция | Краткое описание |
strcat | канкатенация (склеивание) строк |
strchr | найти первое вхождение заданного символа в строке |
strcmp | сравнить две строки |
strcpy | копировать одну строку в другую |
strcspn | найти первое вхождение символа из заданного набора символов в строке |
strdup | дублирование строки |
strerror | сформировать в строке сообщение об ошибке, состоящее из двух частей: системной диагностики и необязательного добавочного пользовательского сообщения |
stricmp | сравнить две строки, считая символы нижнего и верхнего регистров эквивалентными |
strlen | вычислить длину строки |
strlwr | преобразовать строку в нижний регистр (строчные буквы) |
strncat | добавить n символов в строку |
strncmp | сравнение n символов в двух строках |
strncpy | скопировать n символов из одной строки в другую |
strnicmp | сравнение n символов двух строк |
strnset | установить n символов в строке в заданное значение |
strpbrk | найти первое вхождение любого символа из заданного набора в строке |
strrchr | найти последнее вхождение заданного символа в строке |
strrev | инвертировать (перевернуть) строку |
strset | установить все символы строки в заданное значение |
strspn | найти первую подстроку из заданного набора символов в строке |
strstr | найти первую подстановку одной строки (более короткой) в другой |
strtok | найти следующую точку в строке |
strupr | преобразовать строку в верхний регистр (заглавные буквы) |
Прототипы всех функций работы со строками содержатся в файле string.h. Все функции работают со строками, завершающимися нулевым байтом ('\0'). Для работы с массивом символов, не имеющим в конце нулевого байта можно использовать функции преобразования буферов, описанные выше.
Определение класса символов и преобразование символов:
Функция | Краткое описание |
isalnum | проверка на букву или цифру |
isalpha | проверка на букву |
isascii | проверка на символ из набора кодировки ASCII |
iscntrl | проверка на управляющий символ |
isdigit | проверка на десятичную цифру |
isgraph | проверка на печатный символ, исключая пробел |
islower | проверка на малую букву |
isprint | проверка на печатный символ |
ispunct | проверка на знак пунктуации |
isspace | проверка на пробельный символ |
isupper | проверка на заглавную букву |
isxdigit | проверка на шестнадцатеричную цифру |
toascii | преобразование символа в код ASCII |
tolower | проверка и преобразование в малую букву, если заглавная буква |
toupper | проверка и преобразование малой буквы в заглавную |
_tolower | преобразование буквы в малую (без проверки) |
_toupper | преобразование буквы в заглавную (без проверки) |
Все эти функции реализованы как макроопределения, заданные в файле ctype.h
Форматные преобразования данных:
Функция | Краткое описание |
atof | преобразование строки, в представляемое ей число типа float |
atoi | преобразование строки в число типа int (целое) |
atol | преобразование строки в число типа long (длинное целое) |
ecvt | преобразование числа типа double в строку |
fcvt | преобразование числа типа double в строку |
gcvt | преобразование числа типа double в строку |
itoa | преобразование числа типа int в строку |
ltoa | преобразование числа типа long в строку |
ultoa | преобразование числа типа unsigned long в строку |
Прототипы всех перечисленных функций содержатся в файле stdlib.h.
Функции ввода и вывода в стандартной библиотеке С позволяют читать данные из файлов или получать их с устройств ввода (например, с клавиатуры) и записывать данные в файлы, или выводить их на различные устройства (например, на принтер).
Функции ввода/вывода делятся на три класса:
1) Ввод/вывод верхнего уровня (с использованием понятия "поток").
2) Ввод/вывод для консольного терминала путем непосредственного обращения к нему.
3) Ввод/вывод нижнего уровня (с использованием понятия "дескриптор").
Функции ввода/вывода высокого уровня:
Функция | Краткое описание |
clearerr | очистка флажка ошибки для потока |
fclose | закрытие потока |
fcloseall | закрытие всех открытых (на верхнем уровне) файлов |
fdopen | создание потока для файла, ранее открытого на нижнем уровне, используя дескриптор |
feof | проверка на конец потока |
ferror | проверка флажка ошибок потока |
flush | сброс буфера потока на связанное с ним внешнее устройство |
fgetc | чтение символа из потока |
fileno | получение дескриптора файла, связанного с потоком |
fgetchar | чтение символа из стандартного потока ввода stdin |
fgets | чтение строки из потока |
flushall | сброс буферов всех потоков |
fopen | открытие потока (открыть файл и связать его с потоком) |
fprint | запись данных в поток по формату |
fputc | запись символа в поток |
fputchar | запись символа в стандартный поток вывода stdout |
fputs | запись строки в поток |
fread | неформатированное чтение данных из потока |
freopen | повторное открытие потока в новом режиме |
fscanf | чтение из потока по формату |
fseek | перемещение указателя файла в заданную позицию |
ftell | получение текущей позиции указателя файла |
fwrite | неформатированная запись данных в поток |
getc | чтение символа из потока (реализуется через макроопределение) |
getchar | чтение символа из потока stdin (версия макро) |
gets | чтение строки из потока stdin |
getw | чтение двух байтов (по размеру int) в формате слова из потока |
printf | запись данных в поток stdout по формату |
putc | запись символа в поток (версия макро) |
putchar | запись символа в поток stdout (версия макро) |
puts | запись строки в поток |
putw | запись двух байтов (по размеру int) в формате слова в поток |
rewind | установка указателя по файлу на начало файла |
scanf | чтение данных из потока stdin по формату |
setbuf | управление буферизацией потока |
setvbuf | управление буферизацией потока и размером буфера |
sprintf | запись данных в строку по формату |
sscanf | чтение данных из строки по формату |
tempnam | сгенерировать имя временного файла в заданном каталоге |
tmpfile | создать временный файл |
ungetc | вернуть символ в поток |
vfprintf | запись данных в поток по формату |
vsprintf | запись данных в строку по формату |
Прототипы всех функций ввода/вывода верхнего уровня содержатся в файле stdio.h.
Функции ввода/вывода для консольного терминала выделены в отдельную группу, потому что они используют специфические особенности компьютера (наличие специального видеоадаптера) и не являются переносимыми на другие типы компьютеров:
функция | Краткое описание |
cgets | чтение строки с консоли |
cprintf | запись данных на консольный терминал по формату |
cputs | вывод строки на консольный терминал |
getch | чтение символа с консоли |
getche | чтение символа с консоли с эхо-печатью |
kbhit | проверка нажатия клавиши на консоли |
putch | вывод символа на консольный терминал |
ungetch | возврат последнего прочитанного символа с консольного символа обратно с тем, чтобы он стал следующим символом для чтения |
Прототипы функций содержатся в файле conio.h.
Математические функции:
Функция | Краткое описание | |
abs | нахождение абсолютного значения выражения типа int | |
acos | вычисление арккосинуса | |
asin | вычисление арксинуса | |
atan | вычисление арктангенса х | |
atan2 | вычисление арктангенса от у/х | |
cabs | нахождение абсолютного значения комплексного числа | |
ceil | нахождение наименьшего целого, большего или равного х | |
_clear87 | получение значения и инициализация слова состояния сопроцессора и библиотеки арифметики с плавающей точкой | |
_control87 | получение старого значения слова состояния для функций арифметики с плавающей точкой и установка нового состояния | |
cos | вычисление косинуса | |
cosh | вычисление гиперболического косинуса | |
exp | вычисление экспоненты | |
fabs | нахождение абсолютного значения типа double | |
floor | нахождение наибольшего целого, меньшего или равного х | |
fmod | нахождение остатка от деления х/у | |
_fpreset | повторная инициализация пакета плавающей арифметики | |
frexp | разложение х как произведения мантиссы на экспоненту 2n | |
hypot | вычисление гипотенузы | |
labs | нахождение абсолютного значения типа long | |
ldexp | вычисление х*2exp | |
log | вычисление натурального логарифма | |
log10 | вычисление логарифма по основанию 10 | |
matherr | управление реакцией на ошибки при выполнении функций математической библиотеки | |
modf | разложение х на дробную и целую часть | |
pow | вычисление х в степени у | |
sin | вычисление синуса | |
sinh | вычисление гиперболического синуса | |
sqrt | нахождение квадратного корня | |
_status87 | получение значения слова состояния с плавающей точкой | |
tan | вычисление тангенса | |
tanh | вычисление гиперболического тангенса | |
bessel | вычисление функции Бесселя | |
dieeetomsbin | преобразование плавающего числа двойной точности из IEEE-формата в Microsoft-формат | |
dmsbintoieee | преобразование плавающего числа двойной точности из Microsoft-формата в IEEE-формат | |
fieeetomsbin | преобразование числа с плавающей точкой из IEEE-формата в Microsoft-формат | |
fmsbintoieee | преобразование числа с плавающей точкой из Microsoft-формата в IEEE-формат | |
Прототипы функций содержатся в файле math.h.
Следующие функции используются для динамического распределения памяти:
Функция | Краткое описание | |
calloc | выделить память для массива | |
free | освободить блок, полученный посредством функции calloc, malloc или realloc | |
malloc | выделить блок памяти | |
realloc | переразместить ранее выделенный блок памяти, изменив его размер | |
sbrk | переустановить адрес первого байта оперативной памяти, недоступного программе (начала области памяти вне досягаемости программы) | |
alloca | выделение блока памяти из программного стека | |
_expand | изменение размера блока памяти, не меняя местоположения блока | |
_ffree | освобождение блока, выделенного посредством функции fmalloc | |
_fmalloc | выделение блока памяти вне данного сегмента | |
_freect | определить примерное число областей заданного размера, которые можно выделить | |
_fmsize | возвращает размер блока памяти, на который указывает дальний (far) указатель | |
halloc | выделить память для большого массива (объемом более 64 Кбайтов) | |
hfree | освободить блок памяти, выделенный посредством функции halloc | |
_memavl | определить примерный размер в байтах памяти, доступной для выделения | |
_msize | определить размер блока, выделенного посредством функций calloc, malloc, realloc | |
_nfree | освобождает блок, выделенный посредством _nmalloc | |
_nmalloc | выделить блок памяти в заданном сегменте | |
_nmsize | определить размер блока, на которой указывает близкий (near) указатель | |
stackavail | определить объем памяти, доступной для выделения посредством функции alloca | |
brk | переустановить адрес первого байта оперативной памяти, недоступного программе (начала области памяти вне досягаемости программы) | |
allocmem | низкоуровневая функция выделения памяти | |
freemem | низкоуровневая функция возврата памяти операционной системе | |
coreleft | узнать, сколько осталось памяти для выделения в данном сегменте | |
farcalloc | выделить блок памяти вне данного сегмента | |
farcoreleft | определить, сколько памяти для размещения осталось вне данного сегмента | |
farmalloc | выделить блок памяти вне данного сегмента | |
farrealloc | изменить размер блока, ранее выделенного функцией farmalloc или farcalloc | |
farfree | освободить блок, ранее выделенный функцией farmalloc или farcalloc | |
Прототипы функций содержатся в файле malloc.h или в файле alloc.h .
Функции calloc и malloc выделяют блоки памяти, функция malloc выделяет заданное число байтов, тогда как calloc выделяет и инициализирует нулями массив элементов заданного размера.
Следующие библиотечные функции предназначены для поиска и сортировки в массиве:
Функция | Краткое описание |
bsearch | выполняет двоичный поиск |
lfind | выполняет линейный поиск для заданного значения |
lsearch | выполняет линейный поиск для заданного значения, которое добавляется в массив, если не найдено |
qsort | выполняет быструю сортировку |
Прототипы функций содержатся в файле stdlib.h .
Функции работы со временем:
Функция | Краткое описание |
asctime | преобразование времени из структуры (внутренней формы) в символьную строку |
ctime | преобразование времени из длинного целого (long int) в строку символов |
gmtime | преобразование времени из целого (int) в структуру |
localtime | преобразование времени из целочисленного (int) в структуру с локальной поправкой |
tzset | установить переменную времени из переменной времени среды |
ftime | получить текущее время системы как структуру |
time | получить текущее системное время как длинное целое (long int) |
utime | установить время изменения файла |
difftime | вычислить разность по времени |
dostounix | преобразование времени из формате ОС MS-DOS в формат ОС UNIX |
getdate | получить системную дату как структуру |
getftime | получить системную дату |
gettime | получить системное время как структуру |
setdate | установить системную дату |
setftime | установить системное время |
settime | установить системное время |
stime | установить системное время |
unixtodos | преобразовать время из формата ОС UNIX в формат ОС MS-DOS |
Прототипы функций работы со временем времени содержатся в файле time.h.
Функции работы со списком аргументов:
Функция | Краткое описание |
va_arg | выбрать аргумент из списка |
va_end | переустановить указатель |
va_start | установить указатель на начало списка аргументов |
Прототипы функций работы со временем времени содержатся в файле stdarg.h.
Другие функции:
Функция | Краткое описание |
assert | проверка утверждения о состоянии переменных |
getenv | получить значение переменной среды (окружения) |
perror | напечатать сообщение об ошибке |
putenv | изменить значение переменной среды |
swab | поменять местами два смежных байта |
rand | получить псевдо-случайное число |
srand | инициализация датчика случайных чисел |
setjmp | запоминание точки для многоуровневого возврата |
longjmp | многоуровневый возврат из функции |
Прототипы всех функций описаны в stdiib.h.
Прототипы функций setjmp и longjmp содержатся в файле setjmp.h.
Библиотечные заголовочные файлы С++.
В современной спецификации для языка C++ заголовки указываются с использованием стандартных имен заголовков, которые не имеют расширения .h (т.е. заголовки C++ не означают имена файлов). Это просто стандартные идентификаторы, которые компилятор может обрабатывать так, как считает нужным (т.е. заголовок может быть преобразован в имя файла, но это вовсе необязательно.
Заголовок C++ | Что поддерживает |
<algorithm> | Различные операции на контейнерах |
<bitset> | Битовые множества |
<complex> | Комплексные числа |
<deque> | Двухсторонние очереди |
<exception> | Обработка исключительных ситуаций |
<fstrearn> | Работа с файловыми потоками для чтения и записи в один и тот же файл |
<functional> | Различные объекты-функции |
<iomanip> | Манипуляторы ввода-вывода |
<ios> | Классы ввода-вывода нижнего уровня |
<iosfwd> | Упреждающие объявления для систем ввода-вывода |
<iostream> | Стандартные классы ввода-вывода |
<istream> | Обработка входных потоков |
<iterator> | Доступ к содержимому контейнеров |
<limits> | Различные ограничения реализации |
<list> | Линейные списки |
<locale> | Информация, связанная с традициями конкретных стран или географических регионов |
<map> | Отображения (ключи и значения) |
<memory> | Распределение памяти с помощью распределителей памяти (STL) |
<new> | Выделение памяти с помощью оператора new |
<numeriс> | Универсальные операции над числами |
<ostream> | Обработка выходных потоков |
<queue> | Очереди |
<set> | Множества |
<sstream> | Обработка строковых потоков |
<stack> | Стеки |
<stdexcept> | Стандартные исключительные ситуации |
<streambuf> | Буферизированная обработка потоков |
<string> | Стандартный класс string |
<typeinfo> | Динамическая информация о типе |
<utility> | Шаблоны общего назначения |
<valarray> | Операции над массивами, содержащими значения |
<vector> | Векторы (динамические массивы) |
В языке C++ также определены следующие заголовки, которые соответствуют С-заголовкам.
<cassert> | <cctype> | <cerrno> |
<cfloat> | <ciso646> | <climits> |
<clocale> | <cmath> | <csetjmp> |
<csignal> | <cstdarg> | <cstddef> |
<cstdio> | <cstdlib> | <cstring> |
<ctime> | <cwchar> | <cwctype> |
В стандартном языке C++ вся информация, связанная со стандартной библиотекой, определена в пространстве имен std. Следовательно, для получения прямого доступа к этим элементам после включения нужного заголовка вам придется использовать следующий оператор using:
using namespace std;
В качестве альтернативного варианта, чтобы не вносить целую библиотеку в глобальное пространство имен, каждый библиотечный идентификатор можно квалифицировать с помощью обозначения std::, например std::cout. Однако в этом случае квалификация каждого имени будет выглядеть весьма громоздко.
Ход работы.
1. Создать консольное приложение в MS Visual Studio 2008.
Рассмотрим порядок создания заготовки программы на языке Visual Studio 2008. После установки данного языка программирования на рабочем столе (или в меню пуск) появится иконка для запуска с названием «Microsoft Visual Studio 2008», выбирая которую на экране появится главное окно программы (рис. 1).
В самом верху окна располагается меню, с помощью которого можно осуществлять управление процессом создания, компиляции и отладки программ.
Создание программ осуществляется путем выбора в меню пункта
File->New->Project
после чего на экране появится диалоговое окно выбора типа проекта (рис. 2).
В данном окне в типах проектов (Projects types) следует выбрать пункт Win32, а в шаблонах (Templates) Win32 Console Application.
Все эти пункты показаны на рис. 2.
После этого внизу окна в поле Name (имя) следует ввести имя проекта (английскими буквами), например, lab 1, а в поле Location (расположение) указать папку, в которой будет располагаться проект, например, D:\temp. После заполнения всех указанных полей и нажатия на кнопку «OK» на экране появится окно настройки выбранного консольного проекта (рис. 3).
Здесь достаточно нажать на кнопку «Finish», после чего будет создан проект, а в главном окне появится список файлов консольного проекта (рис 4).
Слева в окне отображен список файлов проекта, из которых интерес представляет лишь файл lab1.cpp, т.к. в нем пишется непосредственно программа на языке C. Справа открыт файл lab1.cpp, в котором используется стандартный заголовочный файл проекта stdafx.h и главная функция программы _tmain() (аналог функции main()).
Вся логика программы должна заключаться внутри функции _tmain() .
Для того чтобы сохранить проект на внешнем носителе, например, Flash, необходимо открыть ранее указанную папку при создании проекта и в ней скопировать каталог с названием проекта, в данном случае - это каталог с именем lab1.
Чтобы загрузить ранее созданный проект в среду Visual Studio 2008 достаточно открыть пункт меню
File->Open->Project/Solution и в диалоговом окне указать файл проекта, находящегося в папке проекта, в данном случае - это папка lab1.
Для запуска и компиляции программы, написанной в данной среде, используется команда меню
Debug->Start Without Debugging или комбинация клавиш Ctrl+F5.
После запуска программы на экране появится окно консоли с результатом выполнения программы (рисунок 5):
Таким образом можно создавать проекты для лабораторной работы.
2. Написать программу с использованием функций printf() и scanf() в соответствии с номером своего варианта.
Варианты заданий.