- •Язык программирования Си
- •7. Понятие о препроцессоре языка Си 29
- •8. Операторы языка Си и приемы программирования 30
- •9. Массивы. Адресная арифметика языка Си 51
- •Правила записи программы на языке Си
- •Правила формального описания синтаксиса языка программирования
- •Идентификаторы языка Си
- •Понятие о типах данных.
- •Системы счисления. Представление данных в эвм.
- •Основные типы данных языка Си
- •Правила записи констант различных типов
- •Беззнаковый тип для целых данных
- •Символьные строки
- •Понятие функции
- •Стандартная функция printf
- •Стандартная функция scanf
- •Операции и выражения
- •Простейшие арифметические операции
- •Операция присваивания
- •Оператор-выражение
- •Использование в выражениях операндов разных типов
- •Операции преобразования типов
- •Стандартные математические функции
- •Простейшие функции, определяемые программистом
- •Дополнительные арифметические операции
- •Дополнительные операции присваивания
- •Битовые операции
- •Операции отношения
- •Логические операции
- •Операция определения размера данных
- •Приоритеты операций
- •Понятие о препроцессоре языка Си
- •Операторы языка Си и приемы программирования
- •Оператор цикла while
- •Условный оператор и условная операция
- •1) Короткие операторы:
- •2) Группы коротких операторов:
- •3) Длинные группы операторов:
- •Запись алгоритмов с помощью диаграмм Несси - Шнейдермана (структограмм )
- •Некоторые приемы программирования
- •Оператор прерывания цикла
- •Оператор продолжения цикла
- •Пример организации простейшего меню
- •Множественный выбор. Оператор переключения
- •Оператор цикла do-while.
- •Перечисления. Работа с клавиатурой ibm pc
- •Пример организации светового меню
- •Массивы. Адресная арифметика языка Си
- •Описание массива
- •Ввод-вывод массива
- •Инициализация массива
- •Программа вычисления длины строки символов
- •Двумерные массивы (массивы массивов)
- •Адресная арифметика языка Си
- •Указатели и одномерные массивы
- •Указатели и двумерные массивы
- •Указатели и функции
- •Оператор typedef
- •Дополнительные описания указателей для ibm pc
- •Непосредственная работа с экранной памятью
- •Дополнительные сведения о функциях
- •Области видимости и глобальные данные
- •Время жизни переменных и классы памяти языка Си
- •Передача аргументов в функцию
- •Возврат значений из функций
- •Работа с динамической памятью
- •Стандартные функции управления динамической памятью
- •Пример использования динамической памяти
- •Особенности работы с двумерными массивами
- •Пересчет индексов вручную
- •Массивы с постоянной длиной строки
- •Общий случай двумерного массива
- •Особенности работы с массивами большого размера
- •Модульное программирование в системе Turbo c
- •Обеспечение корректной стыковки модулей
- •Создание библиотек функций
- •Некоторые библиотечные функции языка Си
- •Функции консольного ввода/вывода (уникальны для tc)
- •Функции обработки строк.
- •Функции распознавания вида символа
- •Функции преобразования данных
- •Структуры языка c.
- •Описание структуры
- •1 Способ
- •2 Способ
- •Трактовка имени структуры.
- •Доступ к элементу структуры.
- •Инициализация структур.
- •Структуры и функции.
- •Поля бит в структурах.
- •Объединения.
- •Дополнительные сведения о препроцессоре языка c.
- •Условное выражение.
- •Приоритеты и направления операций.
- •Динамические данные.
- •Линейные списки.
- •Организация данных в виде стека.
- •Организация данных в виде очереди.
- •Организация данных в виде деревьев.
- •Библиотека ввода-вывода языка c.
- •Открытие потока.
- •Закрытие потока.
- •Предопределенные указатели потоков.
- •Функции ввода-вывода.
Создание библиотек функций
При разработке программных проектов, состоящих из большого числа модулей, целесообразно пользоваться библиотеками модулей. Каждая такая библиотека обычно имеет расширение *.lib и может быть включена в проект с помощью средств поддержки проекта.
Особенностью использования библиотек является тот факт, что компоновщик будет обращаться к библиотеке и выбирать оттуда необходимые модули только по мере необходимости, то есть, если имеются ссылки к функциям библиотечного модуля.
Следует помнить, что модуль будет выбран из библиотеки и подключен к программе всегда целиком, даже если на самом деле программе требуется всего лишь одна функция.
Для создания библиотек функций используются программы, называемые библиотекарями. В системе программирования фирмы Borland библиотекарь имеет имя tlib и может быть вызван из командной строки следующим образом:
БНФ:
"tlib " имя_библ ["/C"] ["/E"] команды [, файл_огл]
где имя_библиотеки - имя файла с создаваемой или модифицируемой библиотекой;
команды - последовательность команд модифицирующих библиотеку;
файл_огл - имя файла, в который будет помещено оглавление библиотеки;
/C - ключ, при наличии которого библиотекарь различает прописные и строчные буквы в именах внешних функций;
/E - клич, при наличии которого библиотекарь создает расширенный словарь.
Каждая команда модификации библиотеки имеет следующую форму:
БНФ:
("+" | "-" | "*" | "-+" | "-*") имя_модуля
где имя_модуля - имя скомпилированного модуля без расширения.
Символ "+" добавляет новый модуль в библиотеку, символ "-" удаляет модуль из библиотеки, символ "*" извлекает модуль из библиотеки без его удаления, символы "-+" или "+-" заменяют модуль в библиотеке, символы "-*" или "*-" извлекают и удаляют модуль из библиотеки.
Например, следующий вызов библиотекаря
tlib graph +line +draw +point, graph
создаст в текущем каталоге новую библиотеку с именем graph.lib, в которую будут добавлены модули line.obj, draw.obj и point.obj. Кроме того будет создан файл с оглавлением библиотеки, имеющий имя graph.lst.
Некоторые библиотечные функции языка Си
В этом разделе дается краткая информация о часто используемых функциях языка СИ.
Функции консольного ввода/вывода (уникальны для tc)
Рассматриваемые ниже функции уникальны для компиляторов фирмы Borland. Их прототипы находятся в файле <conio.h>.
Вертикальная позиция курсора в текущем текстовом окне (начиная с 1)
int wherey(void);
Горизонтальная текущая позиция курсора в текущем текстовом окне (начиная с 1)
int wherex(void);
Позиционирование курсора в текстовом окне
void gotoxy(int x, int y);
Установка активного текстового окна
void window(int left, int top, int right, int bottom);
Верхний левый угол экрана имеет координаты (1,1). Теперь для ввода доступно только это окно. Внешне это никак не проявляется. Действует на последующие операторы вывода текстовой информации.
Стирание текущего текстового окна
void clrscr(void);
Стереть до конца строки в текущем текстовом окне
void clreol(void);
Удалить строку в текущем текстовом окне
void delline(void);
Вставить пустую строку в текстовое окно в позицию курсора
void insline(void);
Строки ниже позиции курсора смещаются вниз, а последняя строка теряется.
Выбрать новый цвет фона символа в текстовом режиме
void textbackground(int newcolor);
Выбрать новый цвет символа в текстовом режиме
void textcolor(int newcolor);
Установить атрибут символа для текстовых функций вывода
void textattr(int newattr);
Скопировать текст с текстового экрана в память
int gettext(int left, int top, int right, int bottom,
void *destin);
Параметр destin должен указывать на реально существующий буфер памяти, имеющий размер достаточный для размещения фрагмента текста с атрибутами каждого символа. Функция возвращает не ноль при успешном копировании.
Скопировать текст из памяти на текстовый экран
int puttext(int left, int top, int right, int bottom,
void *source);
Функция выполняет операцию, обратную к предыдущей. Возвращает не ноль в случае успеха.
Копирует текст на экране с одной прямоугольной области в другую
int movetext(int left, int top, int right, int bottom,
int destleft, int desttop);
Возвращает не ноль в случае успеха.
Получить символ с консоли без эха
int getch(void);
Получить символ с консоли с эхом на экране
int getche(void);
Вывести символ в текстовое окно
int putch(int ch);
Возвратить символ назад в буфер клавиатуры
int ungetch(int ch);
Возвращает код символа ch в случае успеха или EOF при ошибке.
Прочитать строку с консоли
char *cgets(char *str);
Байт str[0] перед вызовом функции должен содержать максимальную длину строки, допустимую для ввода. После возврата байт str[1] содержит число фактически прочитанных символов. Сама строка начинается с байта str[2]. Функция возвращает адрес прочитанной строки &str[2].
Вывести строку в текстовое окно
int cputs(const char *str);
Возвращает последний выведенный символ.
Вводит данные с консоли с преобразованию по формату
int cscanf(char *format [, address, ...]);
Возвращает число успешно прочитанных полей данных. При попытке прочитать символ конца файла возвращает значение EOF.
Выводит данные в текстовое окно с преобразованием по формату
int cprintf(const char *format[, argumet,...]);
Возвращает число выведенных байт информации. В отличие от функции printf() использует установки цвета. Не производит автоматического добавления символа '\r' к '\n'.