Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция 05

.pdf
Скачиваний:
9
Добавлен:
19.05.2015
Размер:
301.46 Кб
Скачать

Кафедра автоматизации технологических процессов Тверского государственного технического университета

Разработчик: доцент В. Г. Васильев

ЛЕКЦИЯ № 5

«Обзор стандартных библиотек языка С»

по курсу ««Структуры и алгоритмы обработки данных»

(для специальности «Управление в технических системах»)

СОДЕРЖАНИЕ

5.1 Понятие «стандартная библиотека»

5.2.Библиотечные функции ввода–вывод данных

5.3.Математические функции

5.4.Функции общего назначения

5.5.Функции работы со строками

5.5. Функции работы со строками

5.1. Понятие «стандартная библиотека»

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

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

Стандартная библиотека языка Си — это описание программного интерфейса, а не настоящая библиотека, пригодная для использования в процессе компиляции.

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

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

Стандарт ANSI

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

В сравнении с некоторыми другими языками (например Java) стандартная библиотека крайне мала. Библиотека обеспечивает поддержку основного набора математических функций, обработку строк, конвертацию типов, файловый и консольный ввод-вывод. Она не содержит стандартный набор «контейнерных типов» как стандартная библиотека шаблонов языка C++, компоненты для работы с графическим пользовательским интерфейсом (GUI), сетью и прочей разнообразной функциональности, которую Java поддерживает по стандарту. Главным преимуществом маленькой стандартной библиотеки является упрощение работы с окружением ANSI Си по сравнению с другими языками, а следовательно и упрощение портирования программ на языке Си на новые платформы.

Чтобы в программе обеспечить корректный вызов функции, нужно включать в исходный текст заголовочные файлы (файлы имеют расширение «h») с помощью директивы # inclule файлов

Например

#inclule< stdio.h >

#inclule< conio.h >

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

Библиотечные заголовочные файлы ANSI Си

<assert.h>

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

некоторых других типов ошибок в отлаживаемой версии программы.

 

<complex.h> Набор функций для работы с комплексными числами. (Появилось в C99)

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

<ctype.h> или для конвертации между верхним и нижним регистрами независимо от используемой кодировки (обычно ASCII или одно из её расширений, хотя

есть и реализации, использующие EBCDIC).

<errno.h>

<fenv.h>

<float.h>

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

Для управления средой, использующей числа с плавающей запятой. (Появилось в C99)

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

<inttypes.h>

<iso646.h>

<limits.h>

<locale.h>

Для точной конвертации целых типов. (Появилось в C99)

Для программирования в кодировке ISO 646. (Появилось в NA1)

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

Для setlocale() и связанных констант. Используется для выбора соответствующего языка.

<math.h>

Для вычисления основных математических функций

<setjmp.h>

Объявляет макросы setjmp и longjmp, используемые для нелокальных

переходов

 

<signal.h>

<stdarg.h>

<stdbool.h>

<stdint.h>

<stddef.h>

<stdio.h>

<stdlib.h>

Для управления различными асинхирооными сигналами Для доступа к различному числу аргументов, переданных функциям. Для булевых типов данных. (Появилось в C99)

Для определения различных типов целых чисел. (Появилось в C99) Для определения нескольких стандартных типов и макросов.

Реализует основные возможности ввода и вывода в языке Си. Этот файл содержит весьма важную функцию printf.

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

<string.h>

<tgmath.h>

<time.h>

<wchar.h>

<wctype.h>

Для работы с различными видами строк.

Для типовых математических функций. (Появилось в C99)

Для конвертации между различными форматами времени и даты.

Для обработки «широких» потоков и нескольких видов строк при помощи «широких» символов (поддержка набора языков). (Появилось в NA1)

Для классификации «широких» символов. (Появилось в NA1)

5.2. Библиотечные функции ввода–вывод данных

При вводе (выводе) данные рассматриваются как поток байтов. Физически поток представляет собой файл или устройство, например, клавиатуру или дисплей. Используемые устройства рассматриваются как частный случай файла. В языке Си существуют пять предопределенных потоков:

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

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

стандартный вывод сообщений об ошибках stderr;

стандартный дополнительный поток stdaux;

стандартная печать stdprn.

Первые три потока относятся к консоли. Консоль (console) - это устройство, обеспечивающее взаимодействие оператора ЭВМ с операционной системой. Различают основную (главную) и дополнительную консоли. В качестве консоли, как правило, используется дисплей.

Ввод-вывод реализован в Си через библиотечные функции разными способами. Например:

в виде последовательности байтов;

в виде символов и строк;

или с использованием форматных преобразований

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

форматированный ввод из потока выполняет функция fscanf;

ввод из стандартного потока stdin выполняет функция scanf;

ввод из строки выполняет функция sscanf;

форматированный вывод в поток выполняет функция fprintf;

вывод в стандартный поток stdout выполняет функция printf;

вывод в строку выполняет функция sprintf;

Вприводимых ниже таблицах показаны функции ввода-вывода для стандартных файлов ввода–вывода и функции, предназначенные для работы

стерминалом в текстовом режиме

ФункцииПрототип и краткое описание действий

Getch

 

int getch(void);

 

Считывает один символ с клавиатуры без отображения на экране.

 

 

 

 

 

getchar

 

int getchar(void);

 

Считывает очередной символ из стандартного входного потока (stdin).

 

 

 

 

 

Gets

 

char *gets(char *s);

 

Считывает строку s из стандартного входного потока (stdin).

 

 

 

 

 

printf

 

int printf(const char *format [, argument, ...]);

 

Функция форматированного вывода в стандартный поток stdout.

 

 

 

 

 

putchar

 

int putchar(int c);

 

Записывает символ c в стандартный поток вывода (stdout).

 

 

 

 

 

puts

 

int puts(const char *s);

 

Записывает строку s в стандартный поток вывода (stdout).

 

 

 

 

 

scanf

 

int scanf(const char *format [, address, ...]);

 

Функция форматированного ввода из стандартного потока stdin.

 

 

 

 

 

sprintf

 

int sprintf(char *s, const char *format [, argument, ...]);

 

Функция форматированной записи в строку s.

 

 

sscanf

int sscanf(const char *s, const char *format [, address, ...]);

Функция форматированного чтения из строки s.

 

int ungetch(int c);

ungetch Возвращает символ c в стандартный поток ввода stdin, заставляя его быть следующим считываемым символом.

Функции

clreol

clrscr

cgets

cprintf

cputs

cscanf

Прототип и краткое описание действий

void clreol(void);

Стирает символы от позиции курсора до конца строки в текстовом окне.

void clrscr(void);

Очищает экран.

char *cgets(char *str);

Выводит на экран строку str.

int cprintf(const char *format [, argument, ...]);

Выводит форматированную строку в текстовое окно, созданное функцией windows().

int cputs(char *str);

Помещает в символьный массив str строку с клавиатуры (консоли).

int cscanf(const char *format [, address,...]);

Функция форматированного ввода, которая используется при работе

delline

gotoxy

highvideo

movetext

с терминалом. в текстовом режиме.

void delline(void);

Удаляет строку в текстовом окне (где находится курсор).

void gotoxy(int x, int y);

Перемещает курсор в позицию текстового окна с координатами (x, y).

void highvideo(void);

Повышает яркость символов, выводимых на экран после ее вызова.

int movetext(int x0, int y0, int x1, int y1, int x, int y);

Переносит текстовое окно в область экрана, правый верхний угол которого имеет координаты (x, y). Координаты угловых точек окна - (x0, y0), (x1, y1).

 

normvideo

 

void normvideo(void);

 

 

Устанавливает нормальную яркость выводимых на экран символов.

 

 

 

 

 

 

 

 

textattr

 

void textattr(int newattr);

 

 

Устанавливает атрибуты (фон, цвет) символов, выводимых на экран.

 

 

 

 

 

 

 

 

textbackground

 

void textbackground(int c);

 

 

Устанавливает цвет фона по значению параметра c.

 

 

 

 

 

textcolor

 

void textcolor(int c);

 

 

Устанавливает цвет символов по значению параметра c.

 

 

 

 

 

 

 

 

textmode

 

viod textmode(int m);

 

 

Переводит экран в текстовый режим по значению параметра m.

 

 

 

 

 

 

 

 

wherex

 

int wherex(void);

 

 

Возвращает значение горизонтальной координаты курсора.

 

 

 

 

 

 

 

 

wherey

 

int wherey(void);

 

 

Возвращает значение вертикальной координаты курсора.

 

 

 

 

 

 

 

 

 

 

void window(int x0, int y0, int x1, int y1);

 

window

 

Создает текстовое окно по координатам угловых точек (x0, y0), (x1,

 

 

 

y1).

 

 

 

 

5.2.1. Вывод данных в языке Си с помощью функции printf

Обращение к функции printf имеет следующий вид:

printf(s1, s2);

Здесь s1 – строка вывода, s2 – список выводимых переменных.

В строке вывода вместо выводимых переменных указывается строка преобразования следующего вида:

%[флаг][ширина][.точность][модификатор]тип.

Символы управления форматированием

 

 

 

 

 

 

Параметр

Назначение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Флаги

 

 

 

 

 

-

 

Выравнивание числа влево. Правая сторона дополняется

 

 

пробелами. По умолчанию выравнивание вправо.

 

 

 

 

 

 

 

 

 

 

+

 

Перед числом выводится знак «+» или «-»

 

 

 

 

 

Пробел

Перед положительным числом выводится пробел, перед

 

 

отрицательным – «-»

 

 

 

 

 

 

#

 

Выводится код системы счисления: 0 – перед

 

 

 

восьмеричным числом, 0х (0Х) перед

 

 

 

 

шестнадцатеричным числом.

 

 

 

 

 

 

 

 

 

 

 

 

 

Ширина

 

 

 

 

n

 

Ширина поля вывода. Если n позиций недостаточно, то

 

 

поле вывода расширяется до минимально необходимого.

 

 

 

 

Незаполненные позиции заполняются пробелами.

 

 

 

 

 

 

 

0n

 

То же, что и n, но незаполненные позиции заполняются

 

 

 

нулями.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Точность

 

 

 

 

 

 

 

 

ничего

Точность по умолчанию

 

 

 

 

n

 

Для типов e, E, f выводить n знаков после десятичной

 

 

 

точки

 

 

 

 

 

 

 

 

 

 

 

 

Модификатор

 

 

 

 

 

 

 

 

 

 

 

 

h

 

Для d, i, o, u, x, X тип short int

 

 

 

 

 

l

 

Для d, i, o, u, x, X тип long int

 

 

 

 

 

 

 

 

 

 

 

Тип

 

 

 

 

 

 

 

 

с

 

При вводе символьный тип char, при выводе один байт.

 

 

 

 

 

d

 

Десятичное int со знаком

 

 

 

i

 

Десятичное int со знаком

 

 

 

 

 

 

o

 

Восьмеричное int unsigned

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Параметр

Назначение

 

 

 

 

 

 

 

 

u

 

Десятичное int unsigned

 

 

 

 

 

 

 

 

x, X

 

Шестнадцатеричное int unsigned, при х используются

 

 

 

символы a-f, при Х – A-F.

 

 

 

 

 

 

f

 

Значение со знаком вида [-]dddd.dddd

 

 

 

 

 

 

e

 

Значение со знаком вида [-]d.dddde[+|-]ddd

 

 

 

 

 

 

 

 

E

 

Значение со знаком вида [-]d.ddddE[+|-]ddd

 

 

 

 

 

 

g

 

Значение со знаком типа e или f в зависимости от

 

 

 

значения и точности

 

 

 

 

G

 

Значение со знаком типа e или F в зависимости от

 

 

 

значения и точности

 

 

 

 

s

 

Строка символов

 

 

 

 

 

 

 

 

 

Некоторые специальные символы

 

 

 

 

Символ

 

Назначение

 

 

 

 

\b

 

Сдвиг текущей позиции влево

 

 

 

 

\n

 

Перевод строки

 

 

 

 

 

 

 

\r

 

Перевод в начало строки, не переходя на новую

 

 

строку

 

 

 

 

 

 

 

 

 

 

 

\t

 

Горизонтальная табуляция

 

 

 

 

 

 

 

\’

 

Символ одинарной кавычки

 

 

 

 

 

\’’

 

Символ двойной кавычки

 

 

 

 

 

 

 

\?

 

Символ ?

 

 

 

 

 

 

 

 

 

5.2.2 Ввод данных в языке Си с помощью функции scanf

scanf(s1, s2);

Здесь s1 – список форматов вывода; s2 – список адресов вводимых переменных.

%тип

scanf("%f%f",&a,&b);

scanf("%f%d",&c,&d);

printf("a=");

scanf("%f",&a);

Вывод по - русски

#include <windows.h> #include <iostream.h> void main()

{

char name[14]; CharToOem("Пример", name); cout<<name<<"\n";

}

5.2.3. Вывод данных в C++ с помощью функции cout

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

Например, это функция для входного потока "cin" и функция "cout" для выходного потока.

#include <iostream.h> cout<<"X="<<X; cout<<"x="<<x<<"y="<<y<<"\n"; cout<<"x="<<x<<"y="<<y<<endl; cout<<''Summa =''<<x+y;

5. 2.4. Ввод данных в C++ с помощью функции cin

#include <iostream.h> cin>>a>>b;

cin>>c;

Этот материал будет рассмотрен, когда будет рассматриваться непосредственно язык С++

Примеры

Задача 1. Введите обозначения и объявите переменные x, y, z и s. Запишите инструкции, которые присваивают переменной "x" значение -25,6, переменной "y" значение 128, а значение переменной "z" вводится в

клавиатуры. Вычислите сумму значений трех величин по формуле: s=x+y+z. Выведите результат на экран.

Решение:

#include <stdio.h> main()

{

float x=-25.6, y=128, z, s; /* Значения величин */ printf("Введите вещественное число z\n"); scanf("%f", &z);

printf("Вы ввели число = %f ", z); printf("\n");

s=x+y+z; /* Вычисление суммы чисел */ printf("Сумма чисел = %f ", s); printf("\n");

printf("Для завершения нажмите клавишу "); getch();

}

После компиляции программы и запуска ее на выполнение перед вами на черном экране появится подсказка пользователю следующего содержания: "Введите вещественное число z". И курсор передвинется в начало следующей строки, ожидая ввода информации с клавиатуры.

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

Компьютер Вам выдаст, что Вами было только что введено с клавиатуры вещественное число 120.5. Далее Вы увидите ответ: "Сумма чисел = 222.899994". Ответ это 9-значное число, полученное как результат сложения трех чисел: двух чисел x=-25.6 и y=128, введенных в память компьютера командами присвоения, и третьего числа z=120.5, введенного в компьютер с клавиатуры командой scanf. Результат появился на экране в сопровождении

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]