Стандартная библиотека С.
Язык Си был создан в AT&T’s Bell Laboratories начале 1970-х. В 1970-е язык программирования С пользовался невероятной популярностью. Множество университетов и организаций начали создание собственных вариантов языка, более подходящих для собственных нужд. Язык программирования С до стандартизации не обеспечивал встроенной функциональности (например отсутствовала операция ввода-вывода). С началом 1980-х проблемы совместимости между различными реализациями языка Си стали очевидными. Для поддержки функциональности требовалась стандартная библиотека языка С .
В 1983 году Американский национальный институт стандартов (ANSI) сформировал комитет для принятия стандарта языка С, известный как «ANSI С». Эта работа вылилась в создание так называемого стандарта C89 в 1989 году. Часть итогового стандарта была набором библиотек, названная Стандартная библиотека ANSI С.
Стандартную библиотеку функций языка С можно разделить на две категории:
1. функции, которые имеются в библиотеке любой системы программирования языка С для различных операционных систем и различных архитектур компьютеров.
2. функции, которые являются уникальными в рамках какой-либо системы программирования, или обеспечивают доступ к специфическим возможностям конкретной операционной системы, или связаны с конкретной архитектурой компьютера.
Функции первой категории образуют переносимое ядро библиотеки; программы, в которых используются только такие библиотечные функции, могут быть перенесены в другую систему программирования, другую операционную систему и/или на другой тип архитектуры компьютеров с наименьшими затратами. Плата за универсальность и переносимость — невозможность воспользоваться специфическими средствами, предоставляемыми конкретной вычислительной средой.
Функции второй категории предоставляют возможность получить доступ к функциям ядра данной операционной системы, к внутренним структурам данных операционной системы, к регистрам используемых аппаратных устройств. Кроме того, ко второй категории относятся функции, которые добавлены в библиотеку, исходя из личных привязанностей разработчиков конкретной системы программирования — как им видится удобный набор средств для разработки различных алгоритмов. В современных системах программирования С в рамках общей тенденции к стандартизации такие необоснованные расширения библиотек сокращаются.
К сожалению, наборы функций второй категории не согласованы даже для различных систем программирования в рамках одной операционной системы на одном типе архитектур компьютеров. Библиотечные функции, обеспечивающие интерфейс для вызова одной и той же функции операционной системы, могут иметь не только разные параметры, но и разные названия.
Стандарт ANSI .
Стандартная библиотека ANSI Си состоит из 24 заголовочных файлов, каждый из которых можно подключать к программному проекту при помощи одной директивы. Каждый заголовочный файл содержит объявления одной или более функций, определения типов данных и макросы.
Библиотека обеспечивает поддержку основного набора математических функций, обработку строк, конвертацию типов, файловый и консольный ввод-вывод.
Она не содержит стандартный набор «контейнерных типов» как стандартная библиотека шаблонов языка C++, компоненты для работы с графическим пользовательским интерфейсом (GUI), сетью и прочей разнообразной функциональности.
Главным преимуществом маленькой стандартной библиотеки является упрощение работы с окружением ANSI Си по сравнению с другими языками, а следовательно и упрощение портирования программ на языке Си на новые платформы.
Библиотечные заголовочные файлы 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() в соответствии с номером своего варианта.
Варианты заданий.
