Студопедия — Библиотека времени выполнения
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Библиотека времени выполнения






 

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

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

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

В Си++ определены следующие файлы заголовков:

Assert.H - содержит макросы для сообщений об ошибках при выполнении условия, задаваемого программистом.

Макрос - упорядоченная по­следовательность команд, выполняющая определенные действия.

Ctype. Н - функции для проверки и преобразования данных типа char;

Float. H - макросы для операций над числами с плавающей точкой;

Limits.H - макросы, задающие диапазоны представления целых;

Locale. Н - представление даты, времени, денежных единиц;

Math. Н - пакет стандартных математических функций;

Setjump. H - имена типов и функции для реализации опера­торов перехода, используется редко;

Signal.H - макросы для сигнализации об ошибках согласно стандарту ANSI;

Stdarg. Н - макросы для вызова функций с переменным чис­лом аргументов;

Stddef.H - определение общих типов для указателей, типов size_t и null;

Stdio. Н - стандартные функции ввода-вывода;

Stdlib.H - определение общих типов, переменных и функ­ций;

String. Н - функции для операций над строковыми данными;

Time. Н - структуры и функции для операций с датами и вре­менем.

В C++ добавлены операции с комплексными числами и деся­тичными данными:

Bcd.Н – данные из десятичной системы счис­ления;

Complex.H - функции и операции над комплексными чис­лами.

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

Чтобы использовать какие-либо функции из библиотек време­ни выполнения, в программу должен быть включен файл-заголовок с прототипами требуемых функций. Добавление в про­грамму файла-заголовка обеспечивается препроцессорной дирек­тивой # include < имя файла>.

Любая программа использует входные данные, осуществляя вывод результатов, поэтому файл заголовков stdio.hприсутствует во всех программах. Функции ввода-вывода используют понятие " пото­ка", рассматриваемого как последовательность байтов. Поток связывается с дисковым файлом или другим устройством ввода-вывода, в т.ч с консолью, когда ввод осуществляется с клавиатуры, а вывод - на экран монитора.

Предусмотрены не­сколько стандартных потоков:

stdin - стандартный ввод;

stdout - стандартный вывод;

stderr - для вывода сообщений об ошибках;

stdprn - стандартное устройство печати;

stdaux - стандартный последовательный порт.

Потоки stdin, stdout и stderr обычно связываются с кон­солью, но могут быть перенаправлены на другие устройства. Назначение двух последних потоков зависит от используемой аппаратуры. Стандартные потоки автоматически открываются при запуске Си-программы и закрываются при ее завершении. В свою очередь, потоки, создаваемые программистом, открываются функцией fopen и закрываются функцией fclose.

Функции ввода-вывода из stdio.h разбиваются на четыре группы: ввод-вывод байтов, ввод-вывод строк, форматный ввод-вывод и прямой (бесформатный) ввод-вывод.

Отметим отдельные элементы первых трех групп, предназначенные для ввода из потока stdin и вывода в поток stdout.

Функция ввод-вывод int getchar () служит для ввода одного символа с клавиатуры и возвращает код символа, преобразованный к типу int. Например, функция int putchar (int с) выводит сим­вол «с» в очередную позицию на экране монитора

Для ввода строки с клавиатуры служит функция char * gets (char * buf), считывающая коды нажатых клавиш (до симвода новой стро­ки или нажатия клавиши Enter) и помещает эти коды в буфер, адрес которого задается параметром buf; в конце строки добавля­ется нулевой байт.

Вывод строки выполняет функция int puts (char * string),

выводящая строку по адресу string на экран, пока в строке не встретится нулевой байт, и возвращает код последнего выве­денного символа.

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

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

Некото­рые коды типа формата:

d - для представления целого со знаком в десятичной системе счисления;

i - для представления целого без знака в десятичной системе счисления;

f - для представления числа с плавающей точкой в естествен­ной форме;

е или Е - представление числа с плавающей точкой в экспо­ненциальной форме;

s - ввод-вывод строковых данных;

с - ввод-вывод символов.

Для форматного вывода служит int printf (char*format..)

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

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

Пример применения функции Printf;

printf (" \n x=%d, у = %f %s", x, у, st);

При выполнении этой функции просматривается строка фор­мата слева направо, и символы, не являющиеся спецификациями формата, копируются на выводное устройство. Управляющий символ \n переводит курсор на экране к началу следующей строки. Когда встречается спецификация формата, выбирается очередной аргумент из списка вывода, преобразуется в соответствии с форматом и выводится в очередную позицию экрана. Для правильного вывода требуется, чтобы переменная х была типа int, у - float, а переменная st - char*.

Форматный ввод выполняет int scanf (char*format,...) функция, в которой список ввода должен задавать указатели на вводимые переменные. Если в строке формата присутствуют символы, не входящие в спецификации форматов и не являющиеся пробельны­ми, то во входном потоке должны присутствовать те же символы. Пробельными символами считаются знаки пробела, табуляции, новой строки; они считываются из потока ввода, но не участвуют в формировании входных данных. Когда в форматной строке встречается спецификация формата, во входном потоке пропуска­ются пробельные символы, а последующие символы интерпрети­руются в соответствии с типом формата, преобразуются во внут­реннее представление, после чего полученное значение записыва­ется в память по адресу очередного элемента списка ввода. Например, для ввода двух переменных целого типа и одной пере­менной вещественного типа применяется оператор вызова функции

scanf (" %d %d %f", fixl, & x2, & y);

где x1 и х2 типа int, а у - float. Во входном потоке вводимые значения должны разделяться хотя бы одним пробелом.

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

Для этого определены новые стандартные потоки:

cin - для ввода данных;

cout - для вывода данных;

сеrr - вывод сообщений об ошибках без буферизации вы­вода;

clog - вывод сообщений об ошибках с буферизацией вывода.

В качестве знака операции вывода определены символы < <, азнаком операции ввода - символы», те же, что и для операции сдвига. Компилятор по контексту определяет, какую операцию задают эти символы: ввод-вывод или сдвиг.

Чтобы использовать средства ввода-вывода C++, в программу должен быть включен файл-заголовок iostream.h:

# include < iostream.h>

В операциях вывода левым операндом должен быть поток вы­вода, правым операндом - выводимое данное. Результатом опера­ции вывода является поток вывода, что позволяет записывать вывод в виде цепочки операций «, например:

cout < < " x1=" < < x1 < < " х2=" < < х2 < < " \n";

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

В операции ввода левым операндом должен быть поток ввода, а правым операндом - имя вводимого данного для арифметиче­ских данных или указатель char*для ввода строк,

напри­мер: cin» xl» x2» st;

Операции ввода-вывода выполняются слева направо и послед­ний оператор эквивалентен оператору

((cin» xl)» x2)» st;

или трем операторам

cin» xl; cin» х2; cin» st;

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

# include < iostream.h>

int x, у;

int main {) {

cout «" x - ";

cin» x; //Запрос и ввод значения х

cout «" \n у = ";

cin» у; //Запрос и ввод значения у

cout «" \n" «" х + у = " «х + у;

return 0;

 

5. ПРАКТИЧЕСКИЙ ПРИМЕР НА С++

Задание. Реализовать арифметические действия с целыми числами большого размера (до 1040) без использования «больших» типов данных. В качестве примера вычислить 30!, 2100, 330+550, (350-240)/555555.

 







Дата добавления: 2014-11-12; просмотров: 1453. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Принципы, критерии и методы оценки и аттестации персонала   Аттестация персонала является одной их важнейших функций управления персоналом...

Пункты решения командира взвода на организацию боя. уяснение полученной задачи; оценка обстановки; принятие решения; проведение рекогносцировки; отдача боевого приказа; организация взаимодействия...

Что такое пропорции? Это соотношение частей целого между собой. Что может являться частями в образе или в луке...

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

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия