Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект Лекций «программирование На Языке Высокого Уровня Си» По Информатике (Попов Д. И.).pdf
Скачиваний:
156
Добавлен:
07.10.2014
Размер:
1.31 Mб
Скачать
if (p1 == p2) return true; else
if ((p2 != NULL) && (p1 != NULL))
return ((p1->info = p2->info) && TreeEqual(p1->ltree, p2->ltree) &&
TreeEqual(p1->rtree, p2->rtree)); else return false;

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

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

bool TreeEqual(tree *p1, tree *p2)

{

}

Приложение 1. Стандартные библиотеки языка Си

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

 

Таблица 19.

 

Библиотеки языка Си

Имя

Назначение библиотеки

complex.h

Набор функций для работы с комплексными числами

ctype.h

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

типам или для конвертации между верхним и нижним регистрами

errno.h

независимо от используемой кодировки

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

iostream

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

limits.h

Содержит заранее заданные константы, определяющие специфику

реализации свойств целых типов

signal.h

Функции для управления различными исключительными условиями

math.h

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

stdio.h

Реализует основные возможности ввода и вывода в языке Си

stdlib.h

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

разнообразных программах

string.h

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

168

time.h

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

 

 

 

Таблица 20.

 

 

 

Состав библиотеки complex.h

Имя функции

 

Описание

cabs, cabsf, cabsl

 

Абсолютное значение комплексного числа

cacos, cacosf, cacosl

 

Комплексный арккосинус

cacosh, cacoshf, cacoshl

Комплексный гиперболический арккосинус

carg, cargf, cargl

 

Аргумент комплексного числа

casin, casinf, casinl

 

Комплексный арксинус

casinh, casinhf, casinhl

Комплексный гиперболический арксинус

catan, catanf, catanl

 

Комплексный арктангенс

catanh, catanhf, catanhl

Комплексный гиперболический арктангенс

ccos, ccosf, ccosl

 

Комплексный косинус

ccosh, ccoshf, ccoshl

 

Комплексный гиперболический косинус

cexp, cexpf, cexpl

 

Комплексная экспонента

cimag, cimagf, cimagl

 

Мнимая часть комплексного числа

clog, clogf, clogl

 

Натуральный логарифм комплексного числа

conj, conjf, conjl

 

Комплексное сопряжённое число

cpow, cpowf, cpowl

 

Степень комплексного числа

cproj, cprojf, cprojl

 

Проекция на римановскую сферу

creal, crealf, creall

 

Действительная часть комплексного числа

csin, csinf, csinl

 

Комплексный синус

csinh, csinhf, csinhl

 

Комплексный гиперболический синус

csqrt, csqrtf, csqrtl

 

Комплексный квадратный корень

ctan, ctanf, ctanl

 

Комплексный тангенс

ctanh, ctanhf, ctanhl

 

Комплексный гиперболический тангенс

 

 

 

Таблица 21.

 

 

 

Состав библиотеки ctype.h

Имя функции

 

 

Проверяет, является ли аргумент…

isalnum

 

…буквой или цифрой

isalpha

 

…буквой

iscntrl

 

…управляющим символом

isdigit

 

…цифрой

isgraph

 

…символом, имеющим графическое представление

islower

 

…буквой в нижнем регистре

isprint

 

…символом, который может быть напечатан

ispunct

 

…символом, имеющим графическое представление, но не

 

являющимся при этом буквой или цифрой

isspace

 

 

…разделительным символом

isupper

 

…буквой в верхнем регистре

isxdigit

 

…цифрой шестнадцатиричной системы счисления

 

 

 

Таблица 22.

 

 

 

Состав библиотеки errno.h

Имя функции

 

 

Описание

E2BIG

 

Список аргументов слишком длинный

EACCES

 

Отказ в доступе

EAGAIN

 

Ресурс временно недоступен

EBADF

 

Неправильный дескриптор файла

EBADMSG

 

Неправильное сообщение

169

EBUSY

Ресурс занят

ECANCELED

Операция отменена

ECHILD

Нет дочернего процесса

EDEADLK

Обход тупика ресурсов

EDOM

Ошибка области определения

EEXIST

Файл существует

EFAULT

Неправильный адрес

EFBIG

Файл слишком велик

EINPROGRESS

Операция в процессе выполнения

EINTR

Прерванный вызов функции

EINVAL

Неправильный аргумент

EIO

Ошибка ввода-вывода

EISDIR

Это каталог

EMFILE

Слишком много открытых файлов

EMLINK

Слишком много связей

EMSGSIZE

Неопределённая длина буфера сообщения

ENAMETOOLONG

Имя файла слишком длинное

ENFILE

Слишком много открытых файлов в системе

ENODEV

Нет такого устройства

ENOENT

Нет такого файла в каталоге

ENOEXEC

Ошибка формата исполняемого файла

ENOLCK

Блокировка недоступна

ENOMEM

Недостаточно памяти

ENOSPC

Памяти на устройстве не осталось

ENOSYS

Функция не реализована

ENOTDIR

Это не каталог

ENOTEMPTY

Каталог непустой

ENOTSUP

Не поддерживается

ENOTTY

Неопределённая операция управления вводом-выводом

ENXIO

Нет такого устройства или адреса

EPERM

Операция не разрешена

EPIPE

Разрушенный канал

ERANGE

Результат слишком велик

EROFS

Файловая система только на чтение

ESPIPE

Неправильное позиционирование

ESRCH

Нет такого процесса

ETIMEDOUT

Операция задержана

EXDEV

Неопределённая связь

 

Таблица 23.

 

Состав библиотеки iostream.h

Имя функции

Описание

cin

Соответствует стандартному вводу. В общем случае он позволяет

cout

читать данные с терминала пользователя

Соответствует стандартному выводу. В общем случае он позволяет

cerr

выводить данные на терминал пользователя

Соответствует стандартному выводу для ошибок. В этот поток мы

 

направляем сообщения об ошибках программы

 

Таблица 24.

 

Состав библиотеки limits.h

170

 

 

 

 

Типичное

Типичное

 

Стандартный

Имя

 

Описание

 

значение 32-

значение 64-

 

минимум или

 

 

битной

битной

 

максимум

 

 

 

 

 

 

 

 

 

программы

программы

 

диапазона значений

CHAR_BIT

 

Число бит в байте

 

8

8

 

 

8

SCHAR_MIN

 

Минимальное значение

 

−128

−128

 

-127

 

для знакового char

 

 

SCHAR_MAX

 

Максимальное значение

 

+127

+127

 

 

+127

 

для знакового char

 

 

 

UCHAR_MAX

 

Максимальное значение

 

+255

+255

 

 

+255

 

для беззнакового char

 

 

 

CHAR_MIN

 

Минимальное значение

 

 

 

 

 

-127(если char

 

 

−128

−128

 

представлено как знаковый

 

для char

 

 

 

 

 

 

 

 

 

 

char; иначе 0)

CHAR_MAX

 

Максимальное значение

 

 

 

 

 

+127 (если char

 

 

+127

+127

 

 

представлено как знаковый

 

для char

 

 

 

 

 

 

 

 

 

 

 

char; иначе +255)

 

 

Максимальная

 

 

 

 

 

 

MB_LEN_MAX

 

многобайтовая длина

 

различается,

различается,

 

1

 

символа по всем

 

обычно от 4

обычно от 4

 

 

 

локалям

 

 

 

 

 

 

SHRT_MIN

 

Минимальное значение

 

−32,768

−32,768

 

-32,767

 

для short int

 

 

SHRT_MAX

 

Максимальное значение

 

+32,767

+32,767

 

 

+32,767

 

для short int

 

 

 

USHRT_MAX

 

Максимальное значение

 

 

 

 

 

+65,535

 

для беззнакового short

 

+65,535

+65,535

 

 

 

 

int

 

 

 

 

 

 

INT_MIN

 

Минимальное значение

 

−2,147,483,648

−2,147,483,648

 

-32,767

 

для int

 

 

INT_MAX

 

Максимальное значение

 

+2,147,483,647

+2,147,483,647

 

 

+32,767

 

для int

 

 

 

UINT_MAX

 

Максимальное значение

 

+4,294,967,295

+4,294,967,295

 

 

+65,535

 

для беззнакового int

 

 

 

LONG_MIN

 

Минимальное значение

 

−2,147,483,648

−9,223,372,036,854

 

-2,147,483,647

 

для long int

 

,775,808

 

 

LONG_MAX

 

Максимальное значение

 

+2,147,483,647

+9,223,372,036,854

 

+2,147,483,647

 

для long int

 

,775,807

 

 

ULONG_MAX

 

максимальное значение

 

 

+18,446,744,073,70

 

+4,294,967,295

 

для беззнакового long

 

+4,294,967,295

 

 

 

9,551,615

 

 

 

 

int

 

 

 

 

 

 

LLONG_MIN

 

Минимальное значение

 

−9,223,372,036,85

−9,223,372,036,854

 

-9,223,372,036,854,775,807

 

для long long int

 

4,775,808

,775,808

 

 

LLONG_MAX

 

Максимальное значение

 

+9,223,372,036,85

+9,223,372,036,854,

 

+9,223,372,036,854,775,807

 

для long long int

 

4,775,807

775,807

 

 

ULLONG_MAX

 

максимальное значение

 

+18,446,744,073,7

+18,446,744,073,70

 

 

+18,446,744,073,709,551,61

 

для беззнакового long

 

 

 

 

 

09,551,615

9,551,615

 

 

5

 

 

long int

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 25.

 

 

 

 

 

 

 

 

Состав библиотеки limits.h

Константа

 

 

 

Значение

 

 

 

Стандарты

SIGHUP

 

Отбой

 

 

 

POSIX

SIGINT

 

Прерывание

 

 

 

ANSI

SIGQUIT

 

Выход

 

 

 

POSIX

SIGILL

 

Недопустимая инструкция

 

 

ANSI

SIGABRT

 

Самоостановка

 

 

 

ANSI

SIGTRAP

 

Перехват события

 

 

 

POSIX

SIGIOT

 

Перехват ввода-вывода

 

 

4.2 BSD

SIGEMT

 

Перехват эмуляции

 

 

 

4.2 BSD

SIGFPE

 

Исключение с плавающей запятой

 

 

ANSI

SIGKILL

 

Неперехватываемый сигнал завершения

 

POSIX

171

SIGBUS

Ошибка шины

4.2 BSD

SIGSEGV

Нарушение сегментации

ANSI

SIGSYS

Неправильный аргумент в системный вызов

4.2 BSD

SIGPIPE

Нарушение канала

POSIX

SIGALRM

Истечение времени

POSIX

SIGTERM

Заверешние

ANSI

SIGUSR1

Пользовательский сигнал 1

POSIX

SIGUSR2

Пользовательский сигнал 2

POSIX

SIGCHLD

Изменение статуса дочернего процесса

POSIX

SIGCLD

Аналогично SIGCHLD

System V

SIGPWR

Перезапуск после проблемы с питанием

System V

SIGXCPU

Ограничение процессорного времени

POSIX

 

 

Таблица 26.

Имя функции

Описание

Состав библиотеки math.h

 

acos

арккосинус

 

asin

арксинус

 

atan

арктангенс

 

atan2

арктангенс с двумя параметрами

 

ceil

округление до ближайшего большего целого числа

cos

косинус

 

cosh

гиперболический косинус

 

exp

вычисление экспоненты

 

fabs

абсолютная величина (числа с плавающей точкой)

 

floor

округление до ближайшего меньшего целого числа

fmod

вычисление остатка от деления нацело для чисел с плавающей точкой

frexp

разбивает число с плавающей точкой на мантиссу и показатель степени.

ldexp

умножение числа с плавающей точкой на целую степень двух

log

натуральный логарифм

 

log10

логарифм по основанию 10

 

modf(x,p)

извлекает целую и дробную части (с учетом знака) из числа с плавающей

точкой

 

pow(x,y)

 

результат возведения x в степень y, xy

 

sin

синус

 

sinh

гиперболический синус

 

sqrt

квадратный корень

 

tan

тангенс

 

tanh

гиперболический тангенс

 

 

 

Таблица 27.

Имя функции

Описание

Состав библиотеки stdio.h

 

fclose

Функции для файловых операций

 

закрывает файл, ассоциированный с переданным ей значением FILE *

fopen, freopen,

открывают файл для определенных типов чтения и записи

fdopen

 

 

remove

удаляет файл (стирая его)

 

rename

переименовывает файл

 

172

rewind

работает аналогично fseek(stream, SEEK_SET), вызванному для потока, со

сбросом индикатора ошибок

 

tmpfile

создает и открывает временный файл, удаляемый при закрытии через

 

fclose()

 

 

Функции для операций ввода-вывода

clearerr

очищает EOF и индикаторы ошибок для данного потока

feof

проверяет, установлен ли индикатор EOF для данного потока

ferror

проверяет, установлен ли индикатор ошибок для данного потока

fflush

принудительно записывает вывод, предназначенный для помещения в

буфер, в файл, ассоциированный с данным потоком

 

fgetpos

сохраняет позицию указателя файла потока, ассоциированный с его

первым аргументом (FILE *), в его второй аргумент (fpos_t *)

 

fgetc

возвращает один символ из файла

fgets

получает строку из файла (оканчивающуюся символом перевода строки

или конца файла)

 

fputc

записывает один символ в файл

fputs

записывает строку в файл

ftell

возвращает указатель позиции файла, который может быть передан fseek

fseek

производит поиск по файлу

fsetpos

устанавливает указатель позиции файла потока, ассоциированный с его

первым аргументом (FILE *), как хранимый во втором его аргументе

 

(fpos_t *)

fread

читает данные из файла

fwrite

записывает данные в файл

 

считывает и возвращает символ из данного потока и изменяет укащатель

getc

позиции файла; позволяет использоваться как макрос с теми же

эффектами, что и fgetc, кроме того, что может вычислять поток более

 

 

одного раза

getchar

имеет аналогичный эффект, что и getc(stdin)

gets

считывает символы из stdin до символа перевода строки и хранит их в

своем единственном аргументе

 

printf, vprintf

используются для вывода в стандартный поток вывода

fprintf,

используются для вывода в файл

vfprintf

 

sprintf,

 

snprintf,

используются для вывода в массив типа char (Строка в языке Си)

vsprintf

 

perror

записывает сообщение об ошибке в stderr

putc

записывает и возвращает символ в поток и изменяет указатель позиции

файла на него; можно использовать как макрос с теми же свойствами, что

 

и fputc, кроме того, что он может обрабатывать поток более одного раза

putchar,

аналогичны putc(stdout)

fputchar

scanf, vscanf

используются для ввода из стандартного потока ввода

fscanf, vfscanf

используются для ввода из файла

sscanf, vsscanf

используются для ввода из массива char (то есть Строка в языке Си)

setvbuf

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

tmpnam

создает временное имя файла

ungetc

помещает символ обратно в поток

173

 

 

 

 

 

puts

 

выводит символьную строку в stdout

 

 

 

Таблица 28.

 

 

 

Состав библиотеки stdlib.h

Имя функции

 

Описание

Реализация

 

abort

Ненормальное завершение

void abort(void);

 

программы

 

 

 

 

abs

Модуль целого числа

int abs(int i);

 

assert

Макроопределение для вывода

void assert(int expression);

 

отладочных диагностических

 

 

сообщений

 

 

atexit

Запрос вызова функции при

int atexit(void (*function)(void);

 

завершении работы

 

 

программы

 

 

atof, atoff

Преобразование строки в

double atof(const char *s);

 

значение типа double или float

float atoff(const char *s);

 

atii, atol

Строка в целое

int atoi(const char *s);

 

long atol(const char *s);

 

atol

Преобразовывает строку в long

long atol(const char *s);

 

 

 

 

void *bsearch(const void *key, const

 

bsearsh

Двоичный поиск

void *base, size_t nmemb, size_t size,

 

int (*compar)(const void *, const void

 

 

 

 

*));

 

calloc

Выделяет пространство для

void *calloc(size_t n, size_t s);

 

массивов

void *calloc_r(void *reent, size_t <n>,

 

 

<size_t> s);

 

div

Деление двух целых

div_t div(int n, int d);

 

ecvt,

 

 

char *ecvt(double val, int chars, int

 

Преобразование double или

*decpt, int *sgn);

 

ecvtf,

 

float в строку

char *ecvtf(float val, int chars, int

 

fcvt, fcvtf

 

 

 

*decpt, int *sgn);

 

gvcvt,

Форматируют double и float

char *gcvt(double val, int precision,

 

char *buf);

 

gcvtf

как строку

char *gcvtf(float val, int precision,

 

 

 

 

char *buf);

 

ecvtbuf,

 

 

char *ecvtbuf(double val, int chars,

 

Double или float в строку

int *decpt, int *sgn, char *buf);

 

fcvtbuf

char *fcvtbuf(double val, int decimals,

 

 

 

 

int *decpt, int *sgn, char *buf);

 

exit

Завершение выполнения

void exit(int code);

 

программы

 

 

 

 

getenv

Поиск переменной окружения

char *getenv(const char *name);

 

labs

Модуль длинного целого

long labs(long i);

 

ldiv

Деление двyх длинных целых

ldiv_t ldiv(long n, long d);

 

malloc,

 

 

void *malloc(size_t nbytes);

 

 

 

void *realloc(void *aptr, size_t

 

realloc,

Управление памятью

 

nbytes);

 

free

 

 

 

 

 

void free(void *aptr);

 

 

 

 

 

mbtowc

Минимальный

int mbtowc(wchar_t *pwc, const char *s,

 

преобразователь мультибайтов

 

 

в широкие символы

size_t n);

 

 

 

 

qsort

 

 

void qsort(void *base, size_t nmemb,

 

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

size_t size,int (*compar)(const void *,

 

 

 

 

const void *) );

 

174

 

 

 

 

 

 

int rand(void);

 

 

 

void srand(unsigned int seed);

 

rand, srand

Псевдо-случайные числа

int _rand_r(void *reent);

 

void _srand_r(void *reent, unsigned int

 

 

 

seed);

 

 

 

 

 

 

 

double strtod(const char *str, char

 

strtod,

 

**tail);

 

Строка в double или float

float strtodf(const char *str, char

 

strtodf

**tail);

 

 

 

double _strtod_r(void *reent, const

 

 

 

char *str, char **tail);

 

strtol

Строка в long

ong strtol(const char *s, char

 

**ptr,int base);

 

strtoul

Строка в unsigned long

unsigned long strtoul(const char *s,

 

char **ptr, int base);

 

system

Выполняет командную строку

int system(char *s);

 

int _system_r(void *reent, char *s);

 

 

 

 

wctomb

Минимальный

int wctomb(char *s, wchar_t wchar);

 

преобразователь широких

 

 

символов в мультибайты

 

 

 

 

Таблица 29.

 

 

 

Состав библиотеки string.h

 

 

Имя функции

Описание

 

void *memcpy(void *dest, const void

Копирует n байт из области памяти src в dest,

 

которые не должны пересекаться, в противном

 

*src, size_t n);

случае результат неопределен (возможно как

 

 

 

правильное копирование, так и нет)

 

void *memmove(void *dest, const void

Копирует n байт из области памяти src в dest,

 

которые в отличие от memcpy могут

 

*src, size_t n);

 

 

 

перекрываться

 

void *memchr(const void *s, char c,

Возвращает указатель на первое вхождение c в

 

size_t n);

 

первых n байтах s, или NULL, если не найдено

 

int memcmp(const void *s1, const void

Сравнивает первые n символов в областях

 

*s2, size_t n);

памяти

 

void *memset(void *, int z, size_t);

Заполняет область памяти одним байтом z

 

char *strcat(char *dest, const char

Дописывает строку src в конец dest

 

*src);

 

 

 

char *strncat(char *, const char *,

Дописывает не более n начальных симолов

 

строки src (или всю src, если ее длина меньше) в

 

size_t);

 

 

 

 

конец dest

 

char *strchr(const char *, int);

Ищет символ в строке, начиная с головы и

 

возращает его адрес, или NULL если не найден

 

 

 

 

char *strrchr(const char *, int);

Ищет символ в строке, начиная с хвоста и

 

возращает его адрес, или NULL если не найден

 

 

 

 

int strcmp(const char *, const char

Лексикографическое сравнение строк

 

*);

 

 

 

int strncmp(const char *, const char

Лексикографическое сравнение первых n байтов

 

*, size_t);

 

строк

 

int strcoll(const char *, const char

Лексикографическое сравнение строк с учетом

 

*);

 

локали collating order

 

char *strcpy(char *toHere, const char

Копирует строку из одного места в другое

 

*fromHere);

 

 

 

175