- •Предисловие
- •Раздел 1. Полный курс программирования на стандартном языке Си Глава 1. Базовые понятия языка
- •1.1. Алфавит, идентификаторы, служебные слова Алфавит
- •Идентификатор
- •Служебные (ключевые) слова
- •1.2. Константы и строки
- •Символы, или символьные константы.
- •Целые константы.
- •Вещественные константы.
- •Предельные значения и типы арифметических констант.
- •Целые константы и выбираемые для них типы
- •Данные вещественных типов
- •Нулевой указатель.
- •Строки, или строковые константы.
- •1.3. Переменные и именованные константы Переменная как объект.
- •Определение переменных.
- •Предельные значения переменных.
- •Основные типы данных
- •Инициализация переменных.
- •Именованные константы.
- •1.4. Операции
- •Знаки операций.
- •Приоритеты (ранги) операций
- •Унарные (одноместные) операции.
- •1.5. Разделители
- •Квадратные скобки.
- •Круглые скобки.
- •Запятая.
- •Точка с запятой.
- •Двоеточие.
- •Многоточие.
- •Звездочка.
- •Обозначение присваивания.
- •Признак препроцессорных средств.
- •1.6. Выражения и приведение арифметических типов
- •Отношения и логические выражения.
- •Присваивание (выражение и оператор).
- •Приведение типов.
- •Правила преобразования типов
- •Правила стандартных арифметических преобразований
- •Выражения с поразрядными операциями.
- •Условное выражение.
- •Глава 2. Введение в программирование на языке си
- •2.1. Структура и компоненты простой программы
- •Текст программы и препроцессор.
- •Структура программы.
- •Функция форматированного вывода.
- •Программы печати предельных констант.
- •Применимость вещественных данных.
- •Выделение лексем из текста программы.
- •2.2. Элементарные средства программирования Деление операторов языка Си на группы.
- •Программа оценки машинного нуля.
- •Трассировочная таблица
- •Ввод данных.
- •Вычисление объема цилиндра.
- •Сумма членов ряда Фибоначчи.
- •2.3. Операторы цикла Три формы операторов цикла.
- •Приближенное значение экспоненты.
- •Оператор break.
- •Сумма отрезка степенного ряда.
- •Оператор continue.
- •Суммирование положительных чисел.
- •2.4. Массивы и вложение операторов цикла Массивы и переменные с индексами.
- •Вычисление среднего и дисперсии.
- •Упорядочение в одномерных массивах.
- •Инициализация массивов.
- •2.5. Функции Определение функций.
- •Функция для вычисления объема цилиндра.
- •Функция для вычисления скалярного произведения векторов.
- •Обращение к функции и ее прототип.
- •Вычисление биномиального коэффициента.
- •Вычисление объема цилиндра
- •Вычисление площади треугольника.
- •Скалярное произведение векторов.
- •2.6. Переключатели
- •Глава 3. Препроцессорные средства
- •3.1. Стадии и команды препроцессорной обработки
- •Стадии препроцессорной обработки.
- •Директивы препроцессора.
- •3.2. Замены в тексте Директива #define.
- •Цепочка подстановок.
- •3.3. Включение текстов из файлов
- •3.4. Условная компиляция Директивы ветвлений.
- •Операция defined.
- •3.5. Макроподстановки средствами препроцессора
- •Моделирование многомерных массивов.
- •Отличия макросов от функций.
- •Препроцессорные операции в строке замещения.
- •3.6. Вспомогательные директивы
- •Препроцессорные обозначения строк.
- •Реакция на ошибки.
- •Пустая директива.
- •Прагмы.
- •3.7. Встроенные (заранее определенные) макроимена
- •Глава 4. Указатели, массивы, строки
- •4.1. Указатели на объекты Адреса и указатели.
- •Операции над указателями.
- •Арифметические операции и указатели.
- •Указатели и отношения.
- •4.2. Указатели и массивы Указатели и доступ к элементам массивов.
- •Массивы динамической памяти.
- •Функции для выделения и освобождения памяти
- •Массивы указателей и моделирование многомерных массивов.
- •"Матрица" со строками разной длины.
- •4.3. Символьная информация и строки
- •Ввод-вывод символьных данных.
- •Внутренние коды и упорядоченность символов.
- •Строки, или строковые константы.
- •Строки и указатели.
- •Глава 5. Функции
- •5.1. Общие сведения о функциях Определение функции.
- •Описание функции и ее тип.
- •Вызов функции.
- •5.2. Указатели в параметрах функций Указатель-параметр.
- •Имитация подпрограмм.
- •5.3. Массивы и строки как параметры функций Массивы в параметрах.
- •Резюме по строкам-параметрам.
- •5.4. Указатели на функции Указатели при вызове функций.
- •Указатели на функции как параметры
- •Указатель на функцию как возвращаемое функцией значение.
- •Библиотечные функции с указателями на функции в параметрах.
- •5.5. Функции с переменным количеством параметров
- •Доступ к адресам параметров из списка.
- •Макросредства для переменного числа параметров.
- •Примеры функций с переменным количеством параметров.
- •5.6. Рекурсивные функции
- •5.7. Классы памяти и организация программ Локализация объектов.
- •Глобальные объекты.
- •Динамическая память
- •Внешние объекты.
- •5.8. Параметры функции main( )
- •Глава 6. Структуры и объединения
- •6.1. Структурные типы и структуры Производные типы.
- •Структурный тип.
- •Определение структур.
- •Выделение памяти для структур.
- •Инициализация и присваивание структур.
- •Доступ к элементам структур.
- •6.2. Структуры, массивы и указатели Массивы и структуры в качестве элементов структур.
- •Массивы структур.
- •Указатели на структуры.
- •Указатели как средство доступа к компонентам структур.
- •Указатели на структуры как компоненты структур.
- •6.3. Структуры и функции
- •Имитация абстрактных типов данных.
- •6.4. Динамические информационные структуры Статическое и динамическое представление данных.
- •Односвязный список.
- •Рекурсия при обработке списка.
- •6.5. Объединения и битовые поля Объединения.
- •Битовые поля.
- •Глава 7. Ввод и вывод
- •7.1. Потоковый ввод-вывод
- •7.1.1. Открытие и закрытие потока
- •7.1.2. Стандартные файлы и функции для работы с ними
- •Ввод-вывод отдельных символов.
- •Ввод-вывод строк.
- •Форматный ввод-вывод.
- •Спецификаторы форматной строки для функции форматного вывода
- •Спецификаторы форматной строки для функции форматного ввода
- •7.1.3. Работа с файлами на диске
- •Двоичный (бинарный) режим обмена с файлами.
- •Строковый обмен с файлами.
- •Позиционирование в потоке.
- •Трехъязычный словарь "Цифры
- •7.2. Ввод-вывод нижнего уровня
- •7.2.1. Открытие / закрытие файла
- •7.2.2. Чтение и запись данных
- •7.2.3. Произвольный доступ к файлу
- •Глава 8. Примеры разработки программ
- •8.1. Программа с объектами разных классов памяти Постановка задачи.
- •Программная реализация.
- •8.2. Структуры и обработка списков в основной памяти Постановка задачи.
- •Функция main( ).
- •Функция init( ) - "Инициализировать базу данных".
- •Функция delete() - "Удалить все сведения о сотруднике из базы данных".
- •Функция fr( ) - "Возвратить освобожденный элемент в список свободных элементов".
- •Функция input( ) - "Ввести в базу данных сведения о новом сотруднике".
- •Функция print( ) - "Печать списка занятых элементов".
- •Сохранение (восстановление) базы данных.
- •8.3. Сортировка на основе бинарного дерева Статические и динамические данные.
- •Управление динамической памятью.
- •Сортировка с помощью бинарного дерева.
- •Печать результатов сортировки.
- •Раздел 2. Выполнение программ в разных операционных системах Глава 9. Подготовка и выполнение программ
- •9.1. Подготовка программ в операционной системе unix
- •9.1.1. Команда make
- •Формат файла описаний зависимостей модулей.
- •Формат команды make.
- •Макроопределения.
- •Встроенные правила.
- •9.1.2. Библиотеки объектных модулей
- •Стандартные библиотеки.
- •Создание и сопровождение собственных библиотек.
- •9.2. Сборка и выполнение программ в интегрированной среде Turbo с 2.0
- •9.2.1. Состав системы программирования Turbo с 2.0
- •9.2.2. Экран интегрированной среды Turbo с 2.0
- •9.2.3. Система меню среды Turbo с 2.0
- •9.2.4. Настройка среды Turbo с
- •Создание рабочего каталога.
- •Установка в среде Turbo с 2.0 полных имен каталогов.
- •Настройка параметров управления проектом.
- •9.5. Окно определения проекта
- •Сборка и выполнение программы.
- •1. Команды управления курсором:
- •2. Команды вставки и удаления:
- •3. Команды обработки блоков текста:
- •4. Дополнительные команды:
- •9.3.2. Экран интегрированной среды
- •9.3.3. Система меню интегрированной среды
- •Задание полных имен основных и рабочего каталогов.
- •Выбор стандарта языка Си.
- •Установка параметров подсистемы Make.
- •Создание проекта.
- •Задание аргументов командной строки.
- •Сохранение параметров настройки интегрированной среды.
- •Сборка и выполнение программы.
- •Работа в интегрированной среде в последующих сеансах.
- •Раздел 3. Практикум по программированию на языке Си Глава 10. Задачи по программированию
- •10.1. Ознакомительная работа
- •10.2. Итерационные методы и ряды
- •Варианты заданий по итерационным методам и рядам
- •10.3. Работа со строками. Указатели, динамические одномерные массивы
- •10..1. Варианты задач по обработке строк*
- •10.3.2. Рекомендации по обработке строк
- •10.3.3. Пример выполнения задания по обработке строк
- •10.4. Многомерные динамические массивы с переменными размерами
- •10.4.1. Варианты задач для 1-й части задания по многомерным массивам (правила формирования многомерного массива)
- •10.4.2. Варианты для 2-й части задания по многомерным массивам
- •10.4.3. Пример выполнения задания по многомерным динамическим массивам
- •10.5. Функции и указатели
- •10.6. Функции и массивы
- •10.7. Работа со структурами
- •10.7.1. Варианты структур для выполнения работы
- •10.8. Списки и деревья
- •10.8.1. Списки
- •10.8.2. Деревья
- •Приложение 1. Таблицы кодов ascii
- •Коды управляющих символов (0 31)
- •Символы с кодами 32 127
- •Символы с кодами 128 255 (Кодовая таблица 866 - ms-dos)
- •Символы с кодами 128 255 (Кодовая таблица 1251 - ms Windows)
- •Приложение 2. Константы предельных значений
- •Приложение 3. Стандартная библиотека функций языка Си
- •Функции для работы с терминалом в текстовом режиме (файл conio.H)
- •Специальные функции
- •Литература
- •Содержание
- •Раздел 1. Полный курс программирования на стандартном языке Си 4
- •Глава 1. Базовые понятия языка 4
- •Глава 2. Введение в программирование на языке си 33
- •Глава 3. Препроцессорные средства 73
- •Глава 4. Указатели, массивы, строки 91
- •Глава 5. Функции 114
- •Глава 6. Структуры и объединения 155
- •Глава 7. Ввод и вывод 186
- •Глава 8. Примеры разработки программ 218
- •Раздел 2. Выполнение программ в разных операционных системах 256
- •Глава 9. Подготовка и выполнение программ 256
- •Раздел 3. Практикум по программированию на языке Си 282
- •Глава 10. Задачи по программированию 282
- •Подбельский Вадим Валерьевич Фомин Сергей Сергеевич программирование на языке си
- •101000, Москва, ул. Покровка, 7 Телефон (095) 925-35-02, факс (095) 925-09-57
4. Дополнительные команды:
Перейти в главное меню Ctrl-K D или F10
Сохранить редактируемый файл и продолжать его редактировать F2
Создать новый файл F3
Взять для редактирования предыдущий файл Alt-F3
Найти последовательность символов Ctrl-Q F
Найти и заменить последовательность символов Ctrl-Q A
Прекратить операцию Esc
Примечания.
1. Запись "Ctrl-A" означает одновременное кратковременное нажатие клавиш <Ctrl> и <А>, а запись "Ctrl-K В" -кратковременное одновременное нажатие клавиш <Ctrl> и <К>, а затем - нажатие одной клавиши <В>.
2. Для получения справки по синтаксису языка Си (это может понадобиться при вводе исходных текстов программ) необходимо поставить маркер на строку, содержащую название объекта языка Си, и нажать клавиши "Ctrl-Fl". Например, подведя курсор к служебному слову int и нажав "Ctrl-Fl", получим достаточно полную информацию о типе int и близких к нему целых типах.
Введя текст функции, можно приступить к ее отладке. Для этого служит команда Compile|Compile to obj. При выполнении компиляции появляется окно отладки, содержащее информацию о компилируемом модуле: имя файла, количество откомпилированных строк, число обнаруженных предупреждений и ошибок. В нижней строке окна компиляции фиксируется результат компиляции: Warnings (предупреждения), Errors (ошибки), Success (успех), а также сообщение "Press any key" (нажмите любую клавишу). При нажатии произвольной клавиши окно компиляции закрывается. Сообщения об ошибках (Errors) и предупреждения (Warnings) отображаются в окне сообщений. После завершения трансляции окно сообщений находится в активном режиме, и клавишами со стрелками "вверх" и "вниз" можно просматривать сообщения об ошибках и предупреждения. Синхронно с просматриваемыми сообщениями об ошибках будет перемещаться подсветка строки в окне редактирования. Нажав клавишу <F1>, можно получить краткую справку о сути ошибки или предупреждения.
Для выхода из режима просмотра сообщений об ошибках и перехода в режим редактирования необходимо выполнить команду F10|Edit (редактировать) в главном меню либо просто нажать клавишу <Enter>, "находясь" на том сообщении, которое вас заинтересовало. Если ошибка синтаксическая, то автоматически произойдет переход к той строке текста программы, в которой компилятор ошибку распознал. Не возвращаясь в окно сообщений, можно перейти к позиции следующей ошибки с помощью клавиш Alt-F8 (подсказка с указанием назначения клавиши, как обычно, в нижней строке экрана). Исправив ошибку, необходимо снова откомпилировать исходный текст функции. При наличии нескольких ошибок необходимо анализировать первые 2-3 ошибки; остальные могут быть следствием нескольких первых ошибок. Процесс отладки продолжается до появления в окне отладки (в последней строке) сообщения "Success: Press any key".
Исправив синтаксические ошибки поочередно во всех функциях, можно выполнить команду Compile|Make EXE file для построения исполняемой программы в соответствии с файлом проекта. Если в окне сборки (имя окна "Linking") появится сообщение Success (успех), то можно вызвать построенную (собранную) программу для выполнения.
Программа сортировки на основе бинарного дерева получает из командной строки имя файла, в котором содержатся слова для сортировки. Готовую к выполнению программу сортировки можно выполнить вне среды Turbo С, набрав в командной строке операционной системы после подсказки MS-DOS (например, '>') имя исполняемой программы и ее аргументы:
где f- имя файла с данными для сортировки.
Программу сортировки на основе бинарного дерева можно вызвать для выполнения и из среды Turbo С. Для передачи программе имени файла, содержащего слова для сортировки, необходимо указать его в качестве аргумента вызываемой программы в пункте меню Options|Arguments. Затем можно выполнить программу при помощи команды Run|Run. Результаты работы программы отображаются на так называемом экране пользователя. Для просмотра экрана пользователя необходимо выполнить команду Run|User screen или использовать сочетание клавиш Alt-F5. Для возврата обратно в среду необходимо нажать произвольную клавишу.
Поскольку в среде Turbo С для рассматриваемой программы сортировки на основе бинарного дерева был определен файл проекта (tree.prj), то при попытке построить по команде Compile|Make EXE file программу сортировки еще раз (не внося в исходные тексты функций никаких изменений) будет выдано следующее сообщение в окне "Построение" (Making):
означающее, что программа сортировки собрана из последних вариантов входящих в нее функций и в перестройке не нуждается. При внесении изменений в одну или несколько функций именно они будут откомпилированы, и программа сортировки будет построена заново.
Заметим, что выполнение команды Compile|Build all приводит к полной перестройке всех компонентов программы независимо от их соответствия или несоответствия последним версиям исходных модулей.
9.3. Сборка и выполнение программ в интегрированной среде Borland C++ 3.1
Технические характеристики современных персональных компьютеров улучшаются с каждым годом. В соответствии с ростом возможностей развиваются и операционные системы: MS-DOS, MS Windows 3.XX, MS Windows-95 и т.д. Несмотря на то, что в каждой среде (MS-DOS или Windows) работает конкретная (и не одна) система программирования, существует определенная преемственность между "младшими" и "старшими" версиями любой системы программирования, так как лучшие решения "младших" версий закрепляются и повторяются в "старших" версиях. Поэтому опыт, приобретенный при работе в одной интегрированной системе, помогает разобраться в работе другой системы.
Круг задач, затронутых в данном пособии, и приведенные примеры могут быть выполнены в различных операционных системах. Как можно подготовить исполняемые модули программ в UNIX и MS-DOS, было показано в предыдущих разделах главы 9. Однако нельзя не упомянуть какую-либо систему программирования для MS Windows.
Рассмотрим одну из первых систем программирования Си для MS Windows, а именно: систему программирования Borland C++3.1 фирмы Borland International, Inc. Эта система программирования вполне может функционировать на IBM PC/386 с тактовой частотой 40 МГц и объемом оперативной памяти 4 Мбайта. На жестком диске стандартный вариант системы занимает около 35 Мбайт.
9.3.1. Состав системы программирования Borland C++ 3.1
В системе программирования Borland C++ 3.1 компоненты обычно размещаются в следующих каталогах:
1. BGI - система поддержки графического интерфейса фирмы Borland.
2. BIN - основной каталог:
• динамически подключаемые библиотеки (*.dll);
• файлы конфигурации для компилятора, подсистемы Help и т.п.;
• автономный препроцессор и компилятор для запуска из командной строки;
• исполняемые модули для запуска интегрированной среды в MS-DOS и MS Windows;
• файлы инициализации, содержащие параметры настройки для интегрированной среды и ее компонентов;
• вспомогательные подсистемы, например подсистема управления проектами Make.
3. CRTL - ряд каталогов с исходными текстами функций стандартной библиотеки языков Си и Си++ (C/C++ Runtime Library Version 5.0).
4. DOC - файлы документации по интегрированной среде и ее компонентам.
5. EXAMPLES - исходные тексты и файлы проектов для нескольких несложных программных систем.
6. INCLUDE - заголовочные файлы системы программирования.
7. LIB - библиотеки объектных модулей.
8. OWL - подсистема для разработки интерфейсов прикладных программ, предназначенных для работы в MS Windows (Object-Windows Library).
Для запуска варианта интегрированной среды для MS Windows необходимо выполнить программу bcw.exe.
