EG








				РУКОВОДСТВО	  ПО  ИСПОЛЬЗОВАНИЮ

						КОМПИЛЯТОРА  C80

			   И СТАНДАРТНЫХ БИБЛИОТЕК ЯЗЫКА Си.





						   СОДЕРЖАНИЕ

I     Компилятор языка Си C80.............................1
1.1   Назначение и применениe компилятора C80.............1
1.2   Режимы работы компилятора C80.......................1
1.3   Сообщения, возникающие в процессе компиляции........3
1.4   Сообщения об ошибках компилятора C80................4
1.5   Файлы,необходимые для работы с C80..................6
II    Библиотеки компилятора языка Си.....................7
2.1   Библиотека LIBC.....................................7
2.1.1 Операции со строками................................7
2.1.2 Системные утилиты...................................9
2.1.3 Интерфейс с ОС CP/M.................................10
2.1.4 Небуферизованный ввод-вывод.........................11
2.1.5 Буферизованный ввод-вывод...........................13
2.1.6 Форматированный вывод...............................17
2.1.7 Форматированный ввод................................17
2.2   Библиотека математических функций MATH..............17


							 - 1 -


				  I  Компилятор языка Си C80.

				  1.1 Назначение и применение
						компилятора C80.

	Компилятор   с80   обрабатывает   файл   с  именем  NAME.C,
содержащий текст программы на языке си.  Результатом работы с80
является файл с именем NAME.ASM, содержащий текст программы  на
языке ассемблер i8080.
	Ассемблирование   и   компоновка  программы  осуществляется
ассемблером м80 и компоновщиком l80.
	Последовательность  компиляции,ассемблирования и компоновки
программы для получения файла NAME.COM:


NAME.C-->C80-->NAME.ASM-->M80-->NAME.REL-->L80,LIBC.REL,MATH.REL-->NAME.COM


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

			  1.2 Режимы работы компилятора c80.

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

C80 [-m -o NEWNAME.EXT -s -t -eNN -xMM -yKK -zPP] NAME.C <CR>

где  NAME.C - имя файла, который должен быть  скомпилирован.  В
скобках указаны ключи, определяющие режим работы компилятора .


						   - 2 -

		 Ключи,определяющие режим работы компилятора.

---------------------------------------------------------------
 Ключ           	описание      режима
---------------------------------------------------------------

-o NEWNAME.EXT  
				позволяет  записать результат компиляции в файл
                с именем, отличным от NAME.ASM.

-m              
				результатом  трансляции  является файл на языке
                ассемблерa   i8080,    который    может    быть
                странслирован  в перемещаемый об'ектный  модуль
                стандартным ассемблером m80.

 -t             
				в  ассемблерный  файл   как  комментарии  будут
                вставляться операторы языка Си.

  -s            
				ключ  управляет  использованием  указателей  на
                элементы  структуры.   В   данном   компиляторе
                использование указателя для доступа к элементам
                структуры  ограничивается структурой, с которой
                связан  указатель.   При  задании  ключа  -s  в
                случае,  если  указатель  обеспечивает доступ к
                элементу структуры, с которой данный  указатель
                не   связан,   производится   поиск  структуры,
                содержащей элемент с таким  же  именем.   Поиск
                структуры, в которой содержится элемент с таким
                же  именем,  производится  в  порядке, обратном
                определению структур в программе на  языке  Си.

-eNNNN 
				определяет  размер  рабочей таблицы для разбора
                выражения,NNNN - десятичное число, определяющее
                размер таблицы в байтах.  По умолчанию  таблица
                содержит   120   входов   по  14  байтов.   Для
                устранения ошибки  err36  необходимо  увеличить
                размер рабочей таблицы.

 -xMMMM         
				определяет   размер  таблицы  макроопределений,
                MMMM - десятичное число байтов в таблице.Размер
                этой таблицы по умолчанию  -  2000  байт.Каждый
                #define  занимает  число байт,равное сумме длин
                обеих строк в определении  +  4.Для  устранения
                ошибки err59 необходимо расширить таблицу.

 -yKKKK
                определяет размер таблицы количества меток 
                case  в  операторе  switch.KKKK - 
                десятичное  число  байтов  в   таблице. 
                По  умолчанию таблица содержит 200 входов
                по 4  байта каждый.Для устранения ошибки
                err76 необходимо расширить таблицу.


					     - 3 -


 -zPPPP 
				устанавливает  размер  таблицы  строк.   PPPP -
                десятичное число байтов в таблице.  Размер этой
                строковой таблицы по  умолчанию  2000.   Каждый
                строковый  литерал занимает число байтов равное
                размеру  строки.   Размер  строки  равен  числу
                символов    в    строке    плюс   один   символ
                (ограничитель NULL ).Для устранения ошибки err2
                необходимо расширить таблицу.
---------------------------------------------------------------


		1.3 Сообщения,возникающие в процессе компиляции.


    Во время работы компилятора c80 возможен вывод  на 
терминал следующих  сообщений :  	
duplicate output file     - выводной файл задан дважды.  
too few arguments for -x option   
                          - не хватает аргументов для
                            ключа -x.
unknown option x          - неизвестный ключ x.
open failure on input     - ошибка открытия входного
                            файла.
open failure on output    - ошибка открытия выходного
                            файла.
out of memory!            - не хватает памяти компиля
                            тору.
compiler aborted by user! - работа компилятора прекра
                            щена пользователем.
xxxx: line nnn: error mmm - xxxx  строка  nnn:   ошибка  
                            mmm.   Здесь  xxxx  часть 
                            текста программы, в которой 
                            обнаружена   синтаксическая 
                            ошибка.  nnn - номер строки 
                            текста,   а   mmm   - номер 
                            ошибки.


							 - 4 -


		   1.4 Сообщения об ошибках компилятора C80.

---------------------------------------------------------------
 номер                   значение 
 ошибки 
---------------------------------------------------------------
  1.       Недопустимая цифра в восьмеричной константе.
  2.       Не хватает места в таблице строк компилятора / ключ -z/.     
  3.       Строка не закончена.
  4.       Ошибка компилятора.
  5.       Недопустимый тип функции.
  6.       Неподходящие аргументы.
  7.       Неправильный синтаксис декларации.
  8.       Здесь недопустимо имя.  
  9.       Должна быть константа.
 10.       Размерность должна быть целым  положительным числом.
 11.       Слишком сложный тип данных.
 12.       Недопустимое использование указателя.
 13.       Нереализованный тип. 
 14.       Нереализованный тип.
 15.       Противоречие в классе хранения.
 16.       Противоречие типа данных.
 17.       Неподдерживаемый тип данных.
 18.       Противоречие типа данных.
 19.       Слишком много структур.
 20.       Переопределение структур.
 21.       Не хватает круглой закрывающей скобки.
 22.       Неверный синтаксис описания структуры.
 23.       Неопределенное имя структуры.
 24.       Требуется правая скобка.
 25.       Здесь ожидается имя.
 26.       Должен быть член структуры или об'единения.
 27.       Недопустимый тип cast.
 28.       Несовместимые структуры.
 30.       Нет : в выражении ?
 31.       Вызов не функции.
 32.       Недопустимые вычисления с указателями.
 33.       Недопустимый тип.
 34.       Неопределенное имя.
 35.       typedef здесь недопустим.
 36.       Переполнение таблицы разбора выражений /ключ -e /.
 37.       Неправильное выражение.
 38.       Для автоматического класса хранения недопустима
		   агрегатная инициализация. 
 39.       Строковая константа недопустима в автоматическом 
           классе хранения.
 40.       Этого не должно случиться.
 41.       Неверный инициализатор.
 42.       Слишком много инициализаторов.
 43.       Инициализация неописанной структуры.
 44.       Слишком много инициализаторов структур.
 45.       Недопустимый синтаксис описания.


							 - 5 -


 46.       Нет закрывающей скобки.
 47.       Ошибка открытия include-файла.
 48.       Недопустимое имя.
 49.       Ранее определен. 
 50.       Нет  скобки.
 51.       Должно быть lvalue.
 52.       Переполнение таблицы символов компилятора.
 53.       Многократное определение метки.
 54.       Слишком много меток.
 55.       Отсутствует кавычка.
 56.       Отсутствует апостроф.
 57.       Слишком длинная строчка.
 58.       Недопустимый символ # .
 59.       Таблица макроопределений переполнилась /ключ -x/.
 60.       Ошибка записи в выходной файл.
 61.       Ссылка на член неописанной структуры.
 62.       Тело функции должно быть составным оператором.
 63.       Неопределенная метка.
 64.       Неподходящие аргументы.
 65.       Недопустимое имя аргумента.
 66.       Должна быть запятая.
 67.       Неверный else.
 68.       Синтаксическая ошибка.
 69.       Должна быть точка с запятой /;/.
 70.       Неверный синтаксис goto.
 71.       Синтаксис оператора.
 72.       Синтаксис оператора.
 73.       Синтаксис оператора.
 74.       Метки в операторе case должны быть целыми константами.
 75.       Отсутствует : в операторе case.
 76.       Слишком много case в операторе switch /ключ -y/.
 77.       Оператор case вне switch.
 78.       Нет двоеточия.
 79.       Несколько default.
 80.       Оператор default вне switch.
 81.       Ошибка в операторах break/continue.
 82.       Недопустимый символ.
 83.       Глубина вложений include слишком велика.
 84.       Недопустимый символ.
 85.       Не аргумент.
 86.       Нулевая размерность.
 87.       Недопустимая символьная константа.
 88.       Не структура.
 89.       Недопустимый класс хранения.
 90.       Переопределение имени.
 91.       Недопустимое использование типа с плавающей запятой.
 92.       Недопустимое преобразование типов.
 93.       Недопустимый тип выражения в операторе switch.
 94.       Недопустимый аргумент в define.
 95.       Нет списка аргументов.
 96.       Пропущен аргумент.
 97.       Недопустимый аргумент.
 98.       Не хватает аргументов.
 99.       Преобразование не найдено в таблице кодов.


							 - 6 -


			1.5 Файлы,необходимые для работы с C80.

	Нормальная работа  компилятора C80 обеспечивается наличием
на диске файлов,  перечисленных ниже: 
	c80.com  - компилятор языка Си; 
	l80.com  - редактор-копоновщик;
	m80.com  - ассемблер языка i8080;
	lib.com  - библиотекарь  об'ектных модулей;
	libc.rel - библиотека стандартных функций языка Си;
	math.rel - библиотека математических функций;
	libc.h   - include-файл,обязательный  для  включения   в 
	           программу, работающую в ОС CP/M.


							 - 7 -

	     II  Библиотеки компилятора языка Си.

	В   состав  компилятора  входят  два  библиотечных 
файла:   libc.rel  и   math.rel.   Последний   является 
библиотекой математических функций,  содержание которой 
описано  в  подразделе  4.2.   Файл  libc.rel  содержит  
несколько библиотек: библиотеку функций буферизованного 
ввода/вывода,   небуферизованного ввода/вывода,  работы 
со строками,  обслуживающих фуншций, библиотеку связи с 
операционной системой CP/M.

					 2.1  Библиотека LIBC.

				 2.1.1  Операции со строками.
  
atof
	double atof(nptr)	/*ascii-to-float*/
	char *nptr;

atoi
	atoi (nptr)        /*ascii-to-int*/
	char *nptr; 

atol
	long atol (nptr)    /*ascii-to-long*/
	char *nptr;

ftoa
	int ftoa(m,str,precision,type)	/*float-to-ascii*/
	double	m;
	char *str;
	int precision,type;
	Где: precision -число цифр после запятой;
	 type =0 - E-формат, type =1 - F-формат.

strlen
	strlen(str)			/*длина строки*/
	char *str;

strcat
	char *strcat(s,t)	/*Соединить строки*/
	char *s,*t;
	Подшивает t после s.
	Возвращает s.

strncat
	char *strncat(s,t,n)
	char *s,*t;
	int n;
	Аналогична strcat ,но подсоединяет не более n символов
	( не считая '\0' ).


							 - 8 -


strcpy
	strcpy(dest,src)	/*Копирвать строку*/
	char *dest,*src;
	Копирует src в dest.

strncpy
	strncpy(dest,src,n)
	char *dest,*src;
	int n;
	Аналогична strcpy ,но копирует не более n символов,а
	оставшееся место заполняет 0-ми.

strcmp
	strcmp(s,t)			/*Сравнить строки*/
	char *s,*t;
	Возвращает:	0 -если строки совпали,
				<0 -если s < t,
				>0 -если s > t.

strncmp
	strncmp(s,t,n)
	char *s,*t;
	int n;
	Аналогична strcmp ,но сравнивает не более n символов.

index
	char *index(str,pttrn)	/*Поиск буквы в строке*/
	char *str,*pttrn;
	Возвращает:	указатель на найденную букву(*pttrn),
				NULL -если буква не найдена.

rindex
	char *rindex(str,pttrn)
	char *str,*pttrn;
	Аналогична index ,но начинает поиск с конца строки.

	
						   - 9 -


					2.1.2  Системные утилиты.

alloc
	char *alloc(size)	/*Выделение памяти*/
	int size;
	Выделяет size байтов памяти и возвращает указатель на
	начало области выделенной памяти.


clear
	clear(start,length,value) /*Инициализация области памяти*/
	char *start;
	int length;
	char value;
	Инициализирует length байт памяти начиная со start
	значением value.


blockmv
	blockmv(dest,src,length)	/*Копирование памяти*/
	Перемещает length байт из src в dest.


format
	format(func,fmt,argptr)	/*Форматирование*/
	int (*func)();
	char *fmt;
	unsigned *argptr;
	Форматирование данных в соответствии со строкой 
	форматирования fmt и вызов функции с каждым символом
	результата.
	Например printf может быть организован так:
		printf(fmt,arg)
		char *fmt;
		unsigned arg;
		{	format(putchar,fmt,&arg);  }
	Примечание: long и float пока не поддерживаются.


isspace
	isspace(c)
	char c;

isdigit
	isdigit(c)
	char c;

islower
	islower(c)
	char c;


							- 10 -

isupper
	isupper(c)
	char c;

tolower
	tolower(c)
	char c;

toupper
	toupper(c)
	char c;



				   2.1.3  Интерфейс с ОС CP/M.


bdos
	bdos(bc,de)		/*Вызов BDOS*/
	int bc,de;
	Возвращает:	содержимое A.


cpm
	cpm(bc,de)
	int bc,de;
	Полностью аналогична bdos.


bdoshl
	bdoshl(bc,de)
	int bc,de;
	Возвращает:	содержимое HL.


bios
	bios(n,bc,de)		/*Вызов BIOS*/
	int n,bc,de;
	Возвращает:	содержимое A.


bioshl
	bioshl(n,bc,de)
	int n,bc,de;
	Возвращает:	содержимое HL.

 
exit
	exit(n)		/*Возвращение в операционную систему*/
	int n;
	Закрываются все файлы, открытые при помощи fopen.Код n
    задает тип завершения программы: n=0 - нормальное
    завершение.  При n не равном 0 нулю прекращается
    выполнение SUBMIT-файла.



							- 11 -


settop
	settop(size)	/*Сдвиг верхней границы доступной памяти*/
	int size;
	Сдвигает верхнюю границу области доступной памяти на
	size.
	Возвращает:	новое значение верхней границы,или
				NULL если новое значение ближе 512 байт от SP.


fcbinit
	fcbinit(name,fcbptr)	/*Инициализация FCB*/
	char *name;
	struct _fcb *fcbptr;
	Структура _fcb инициализируется 0-ми и name записывается в
	требуемое место.fcbptr должен указывать как минимум на
	36 байт.


			   2.1.4  Небуферизованный ввод-вывод.
   
creat
	creat(name)	/*Создать и открыть файл для записи*/
	char *name;
	Возвращает:	fd -файл-дескриптор(целое положительное число,
				являющееся индексом в таблице устройств и
				блока управления файлами.)
				-1 -если creat выполнен с ошибкой;в errno
				устанавливается  код ошибки.


open
	open (name, mode)		/*Открыть файл*/
	char *name;
	int mode;      
	Возвращает:	fd -файл-дескриптор, или
				-1	в случае ошибок в открытии файла.
	Ошибка фиксируется в следующих случаях:
	- файл не существует;
	- открыто слишком много файлов;
	- файл недоступен для записи (чтения).
	При написании программ возможно символическое  задание
	режимов открытия файла:
   
	значение mode       величина	режим открытия
     
	O_RDONLY            0			только чтение
	O_WRONLY            1			только запись
	O_RDWR              2			чтение и запись
	O_CREAT				0x100		создание и открытие
	O_TRUNC				0x200		обнуление и открытие
	O_EXCL				0x400		условное создание
						0x500		если файл уже существует,
									фиксируется ошибка.
	В качестве файлов возможно использование устройств:
	CON: , 	LST: , PRN: , PUN: , RDR: .


							- 12 -

close
	close (fd)		/*Закрыть файл*/
	int fd;
	Возвращает:	fd -при успешном завершении,
				-1 -при ошибке;при этом в errno устанавливается
				ebadf (недопустимый файл-дескриптор).


unlink
	unlink(filename)	/*Удалить файл*/
	char *filename;
	Возвращает:	0-3 если успешно завершена,
				-1  при ошибке.
	Никогда не модифицирует errno.


rename
	rename(oldname,newname)	/*Переименовать файл*/
	char *oldname,*newname;
	Файл newname (если он был) предварительно стирается.
	Никогда не модифицирует errno.


lseek
	long lseek( fd, offset, how)	/*Установить указатель*/
	long offset;
	int fd,how;
	В зависимости от how указатель текущей позиции в файле
	принимает следующие значения:
	how=0 - указателю = offset.     
	how=1 - указатель += offset.
	how=2 - указателю = размер_файла + offset.
	В результате установки указателя в позицию после конца
    файла и последующей записи создается пустой промежуток,
    который не занимает физического пространства и в
    результате чтения выдает нули.
	Возвращает: новую позицию указателя.
	Примечание:
	lseek с байториентированными специальными файлами  никаких
	действий не выполняет.


posit
	posit(fd,num)		/*Установка файла в указанную запись*/
	int fd,num;
	Установка текущей позиции файла в указанную 128-байтовую
	запись.num =0,1,...


							- 13 -


read
	read (fd,buf,nbytes)		/*Чтение из файла*/
	char *buf;
	int fd,nbytes;
	Читает nbytes байтов из файла в буфер buf.
	Возвращает:	число прочитанных байтов.
				0 -если достигнут конец файла.
	Ошибки фиксируются в следующих случаях:
	- чтение прошло с ошибками;
	- неверно задан адрес буфера;
	- задано неверное значение аргумента nbytes;
	- неверно задан дескриптор входного файла.
 
 
write
	write (fd,buf,nbytes)		/*Запись в файл*/
	char *buf;
	int fd,nbytes;
	Выводит nbytes байт из buf в файл.
	Возвращает:	число фактически записанных байтов.Если оно не
			равно требуемому,это ошибка.Ошибки фиксируются в
			следующих случаях:
	- неверно задан файл-дескриптор,адрес буфера или счетчик
	  байтов;
	- физическая ошибка ввода/вывода.



			   2.1.5 Буферизованный ввод-вывод.
 
fopen
	FILE *fopen (fname,how)		/*Открыть файл*/
	char *fname, *how;
	Как файлы могут быть  открыты устройства:
	CON: , LST: , PRN: , PUN: ,	RDR: .
	Имя устройства может быть указано большими или малыми
	латинскими  буквами.
	Параметр how может принимать следующие значения: 

	  "r"  - открыть для чтения.Если файл не существует,
			 возвращается NULL.
	  "w"  - открыть для записи.Старый файл уничтожается.
	  "a"  - открыть для добавления.Если файл не существует,
			 то он создается.
	  "r+" - открыть для чтения и записи ( аналогично "r"). 
	  "w+" - открыть для чтения и записи ( аналогично "w"). 
	  "a+" - открыть для дополнения и чтения ( аналогично "a").

	Возвращает:	fp -файл-поинтер, или
				NULL при ошибке и устанавливается код в errno.


							- 14 -

fclose
	int fclose (fp)		/*Довывести буфер и закрыть файл*/
	FILE *fp;
	Возвращает:	неотрицательное целое,или
				-1 при ошибке;и устанавливает код в errno.

 
   
fseek
	fseek (fp, offset, how)		/*Изменить позицию указателя*/
	FILE *fp;
	long offset;
	int how;
	Устанавливает указатель в соответствии с how и offset
	аналогично lseek.
	Возвращает:	новое положение указателя,или
				-1 в случае некорректной установки указателя.

	!!!	Функция fseek отменяет последнее действие ungetc.


ftell
	long ftell (fp)		/*Вернуть текущую позицию указателя*/
	FILE *fp;
   

fread
	fread (dest, sizeof(*dest), nitems, fp)	/*Ввод из файла*/
	FILE *fp;
	int nitems;
	Чтение nitems * sizeof(*dest) байт в dest .
	Возвращает:	число действительно прочитанных объектов.
				NULL-при обнаружении конца файла или ошибке.

     
fwrite
	fwrite (src, sizeof(*src), nitems, fp)	/*Вывод в файл*/
	FILE *fp;
	int nitems;
	Дописывает в файл nitems *sizeof(*src) байт из src .
	Возвращает:	число  действительно записанных объектов.
				NULL  -при обнаружении конца файла или ошибке.



getc
	int getc(fp)		/*Прочитать символ из файла*/
	FILE *fp;
	Возвращает:	символ,или
				EOF  при обнаружении конца файла или ошибке.
				Т.к. это обычное целое значение,то для проверки
				правильности результата функции getw следует
				использовать функции feof и ferror.


							- 15 -

agetc
	agetc(fp)
	FILE *fp;
	Аналогичен getc ,но преобразует ввод в ASCII -формат:
	переводит последовательность CR-LF в один символ '\n',
	а символ ^Z(конец файла) в EOF.


getchar
	int getchar ()		/*Прочитать символ из stdin*/
	Возвращает:	символ,или
				EOF


getw
	int getw (fp)		/*Прочитать слово из файла*/
	FILE *fp;
	Возвращает	слово,или
				EOF


fgets
	char *fgets (dest,numb,fp);	/*Прочитать строку из файла*/
	char *dest;
	int numb;
	FILE *fp;
	Читает из файла numb-1 символ или все до <CR> (что раньше).
	fgets  сохраняет символ перевода строки.
	Возвращает:	dest .
				NULL при обнаружении конца файла или  ошибке.


gets
	char *gets(str);			/*Прочитать строку из stdin*/
	char *str;
	Читает строку.При этом символ перевода строки не сохраняет.
	Возвращает:	str ,или
				NULL при обнаружении конца файла или  ошибке.


ungetc
	ungetc (c, fp)		/*Вернуть символ в файл*/
	FILE *fp;
	Помещает символ c обратно в файл .
	Гарантируется возвращение в файл одного символа  при
    условии, что он был ранее прочитан из файла, и  поток
    действительно буферизован.  Не допускается попыток
    вернуть признак конца файла EOF.
	Возвращает: c,или
				EOF,если не может вернуть символ в файл.


							- 16 -

putc
	int putc(c, fp)	/*Вывести символ в файл*/
	char c;
	FILE *fp;
	Возвращает:	записанный символ,или
				EOF при ошибке.


aputc
	aputc(c,fp)
	char c;
	FILE *fp;
	Аналогичен putc, но преобразует '\n' в CR-LF.


putchar
	putchar(c)			/*Вывести символ в stdout*/
	char c;
	Определяется как putc(stdout).
	По умолчанию stdout буферизован всегда, когда вывод идет
    не на терминал;эту ситуацию можно изменить,используя
    функцию setbuf.


putw
	putw (w, fp)		/*Вывести слово в файл*/
	FILE *fp;
	Возврвщает:	записанное слово,или
				EOF при ошибке.


fputs
	fputs (s, fp) 			/*Вывести строку в файл*/
	char *s;
	FILE *fp;
	Выводит строку и добавляет <CR>.


puts
	puts(s)					/*Вывести строку в stdout*/
	char *s;
	Выводит строку в файл,но '\0' не выводит.


fflush
	fflush(fp)		/*Вывести буфер*/
	FILE *fp;
	Возвращает:	0 -если вывод произошел нормально,
				EOF - при ошибке.


							- 17 -

				 2.1.6  Форматированный вывод.
 

printf
	printf (format[,arg]..) /*Форматированный вывод в stdout*/
	char *format;


fprintf
	fprintf(fp,format[,arg]..)/*Форматированный вывод в файл*/
	FILE *fp;
	char *format;


sprintf
	sprintf(s,format[,arg]..)/*Форматированный вывод в строку*/
	char *s, format;
 


				 2.1.7  Форматированный ввод.
 
scanf
	scanf (format [,pointer]...)	/*Ввод из stdin*/
	char *format;
	Возвращает:	число совпавших и присвоенных полей ввода,или
				EOF при достижении конца ввода.EOF отлична от
				0,который означает,что не было сделано никаких
				преобразований,возможно,из-за появления
				неподходящего символа при вводе.


fscanf
	fscanf (fp, format [,pointer]...) /*Ввод из файла*/
	FILE *fp;
	char *format;
	Возвращает:	Аналогично scanf.


sscanf
	sscanf (s, format [,pointer]...) /*Ввод из строки*/
	char *s, *format;
	Возвращает:	Аналогично scanf.

 

		   2.2 Библиотека математических функций MATH.

	В стандартную бибилиотеку с именем math.rel входят
некоторые, часто встречающиеся функции такие как  возведение в
степень, логарифм, тригонометрические  функции и т.п.При
использовании этой библиотеки необходимо включать include-файл
MATH.H.


							- 18 -

exp
	double exp(x) 		/*экспонента*/
	double x;


log
	double log(x) 		/*натуральный логарифм*/
	double x;
	При нулевом или отрицательном аргументе устанавливает errno
	в edom.


log10
	double log10(x) 	/*Десятичный логарифм*/
	double x;
	При нулевом или отрицательном аргументе устанавливает errno
	в edom.


pow
	double pow(x,y) 	/* x в степени y */
	double x,y;
	При  x<0 или x=y=0, errno устанавливается в edom.


sqrt
	double sqrt(x) 		/*Квадратный корень*/
	double x;
	При отрицательном аргументе устанавливает errno в edom.


Примечание:	при слишком большом или малом значении результата
функции устанавливают errno в  erange. 


floor
	double floor(x) 		/*Нижняя граница*/
	double x;
	Возвращает:	наибольшее целое,меньшее x.


ceil
	double ceil(x)			/*Верхняя граница*/
	double x;
	Возвращает:	наименьшее  целое,большее x.

sin
	double sin(x)
	double x;

cos
	double cos(x)
	double x;

tan
	double tan(x)
	double x;


							- 19 -

cotan
	double cotan(x)
	double x;
	Возвращают:	значение тригонометрических функций, аргумент-
				задан в радианах.Чтобы результат имел смысл,
				аргумент не должен по абс.величине превышать
				6.7465e9 радиан.(Для cotan он должен быть
				также больше чем 1.91e-152 радиан.)
				Иначе функции устанавливают errno в erange.

asin
	double asin(x)		/*arcsin*/
	double x;
	Возвращает:значение арксинуса в диапазоне от -пи/2 до пи/2.

acos
	double acos(x)		/*arccos*/
	double x;
	Возвращает:	значение арккосинуса в диапазоне от 0 до пи.

atan
	double atan(x)		/*arctg*/
	double x;
	Возвращает:	значение арктангенса в диапазоне
				от -пи/2 до пи/2.

atan2
	double atan2(x,y)	/*arctg(x/y)*/
	double x,y;
	Возвращает:	значение арктангенса x/y в диапазоне
				от -пи до пи.
				Если x=y=0,то устанавливает errno в edom.

sinh
	double sinh(x)		/*sh*/
	double x;

cosh
	double cosh(x)		/*ch*/
	double x;

tanh
	double tanh(x)		/*th*/
	double x;
	Примечание: при  превышении предельных  значений аргумента
				errno устанавливается в erange.авливает errno в edom.

sinh
	double sinh(x)		/*sh*/
	double x;

cosh
	double cosh(x)		/*ch*/
	dou