- •Московский государственный социальный университет академия информатики и информационных технологий
- •Введение
- •Часть. Основы программирования на Си
- •1.1. Структура простейшей Си-программы
- •1.2. Данные в Си и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных в Си
- •1.2.3. Правила записи констант в Си
- •1.2.4. Описание переменных и именованных констант в Си.
- •1.2.5. Выражения в Си
- •1.3. Операторы преобразования данных
- •1.3.1. Общие положения
- •1.3.2. Функция форматного выводаprintf()
- •1.3.3. Функция форматного вводаscanf()
- •1.4. Разработка программ на Си
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Си.
- •1. Следование
- •2. Разветвление (развилка)
- •If (условие)
- •If (условие)
- •3. Цикл
- •1.4.4. Примеры разработки программ
- •1.5. Массивы и указатели
- •1.5.1. Понятие массива. Основные правила работы с массивами в Си
- •1.5.2. Примеры программ с массивами.
- •1.5.3. Инициализация массивов
- •1.5.4. Указатели в Си10
- •1.5.5. Связь массивов с указателями в Си
- •Часть. Функции и многофайловые программы в Си
- •2.1. Общие сведения о подпрограммах и функциях
- •2.2. Функции си
- •2.2.1. Описание функции
- •2.2.2. Обращение к функции
- •2.2.3. Место описания функции в программе
- •2.2.4. Примеры программ, использующих функции
- •2.3. Краткие сведения о препроцессоре Си
- •2.3.2.Директива макроопределения #define
- •2.3.3. Директива #include включения файлов
- •2.3.4. Директивы условной компиляции
- •2.415. Многофайловые си-программы
- •2.4.1. Структура программы на Си. Область действия переменных
- •2.4.2. Время жизни и класс памяти переменных
- •Описатели класса памяти
- •2.4.3 Понятие о файле проекта
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации на Си
- •3.1.1. Символьный тип
- •3.1.2. Работа со строками символов в Си. Строковые литералы. .
- •3.1.3. Функции и макросы для работы с символьной информацией
- •3.1.4. Примеры программ
- •3.2. Тип "структура" в Си
- •Структура
- •3.3. Файлы в Си
- •3.3.1. Общие понятия.
- •3.2.Функции Си для работы с файлами
- •3.3.3. Примеры программ, использующих файлы
- •Литература
- •Содержание
Московский государственный социальный университет академия информатики и информационных технологий
Батасова В.С.
Начальный курс программирования на базе СИ
Москва 2001
Введение
Любая программа, независимо от алгоритмического языка, на котором она написана, состоит из описания данных и описания действий, выполняемых с этими данными. "Алгоритмы+структуры данных = программы" - это название книги [1] классика современного программирования Н. Вирта является основным принципом разработки программ.
Существующие в настоящее время универсальные алгоритмические языки (т.е. языки, содержащие все основные средства современного программирования), такие как Паскаль, Си, Фортран, Бейсик, практически не отличаются по своим возможностям. Различия в правилах построения фраз языка не являются принципиальными, освоение этих правил - дело практики, а приверженность программиста к какому-то алгоритмическому языку обычно является следствием многолетней привычки. Существенные отличия, имеются, пожалуй, в способах организации многомодульных и многофайловых программ. Выбор алгоритмического языка Си для данного пособия объясняется тем, что в настоящее время он является признанным языком системного программирования, т.е. языком для специалистов в области разработки программного обеспечения.
Чтобы начать писать программы на каком-либо алгоритмическом языке, надо знать (см., например,[2]):
Какова структура простейшей (не использующей нестандартные подпрограммы) программы, в каком порядке в ней размещаются инструкции языка.
Какие типы и структуры данных приняты в языке и как они определяются (описываются), какие операции над данными различных типов допустимы в языке, как строятся с их помощью выражения и как они вычисляются. Заметим, что на начальном этапе овладения языком необязательно глубоко изучать все допустимые в нем типы и структуры, достаточно знать те, которые необходимы для решения интересующего вас класса задач.
Как записывать операторы преобразования данных: оператор присваивания, с помощью которого осуществляются все преобразования внутренних данных, операторы ввода (передачи данных с внешних устройств в память компьютера) и вывода (передачи данных из памяти компьютера на внешние устройства).
Как записать алгоритм (порядок, организацию обработки данных). Современные алгоритмические языки, как правило, имеют избыточный набор управляющих операторов для кодирования алгоритмов. На первом этапе изучения языка можно познакомиться с тремя-пятью из них, достаточными для программирования основных алгоритмических структур, с помощью которых можно записать любой алгоритм.
Перечисленных сведений достаточно для написания простых программ. Изложению этих сведений в минимальном объеме посвящена первая часть пособия. Дальнейшее изучение программирования связано с подпрограммами (в языке Си формально существуют только функции), организацией многофайловых программ (этот материал излагается во второй части), а также со сложными типами данных (третья часть). Объектно-ориентированное и визуальное программирование не входят в данное пособие.
Следует заметить, что овладение конструкциями алгоритмического языка еще не означает умения программировать. Главную роль в создании программных средств играет умение анализировать задачу и разрабатывать принципиальную схему алгоритма без привязки к алгоритмическому языку. Однако обучение начальным навыкам алгоритмизации не укладывается в формальные рамки, и написать пособие по этой теме также трудно, как самоучитель по чтению и письму. Чтобы помочь начинающим программистам, в пособии, наряду с программами на Си, используются блок-схемы, которые, пожалуй, являются наиболее общим и наглядным способом описания алгоритмов.
Для читателей, впервые столкнувшихся с программированием, поясним, что программа, написанная на алгоритмическом языке, должна быть переведена в коды компьютера, т. е. на внутренний язык компьютера (машинный язык). Процесс такого перевода называется трансляцией, а специальная программа-переводчик -транслятором. Существует два способа трансляции: компиляция и интерпретация. Прикомпиляциипрограмма сначала полностью переводится в коды, а затем выполняется без участия компилятора, т.е. процесс трансляции и выполнения программы четко разделены во времени. Приинтерпретациипоследовательно чередуются перевод группы инструкций языка в коды и их выполнение. Алгоритмический язык Си (также как Паскаль и Фортран) требует именно компиляции. Откомпилированная программа (так называемыйобъектный модуль) далее подвергаетсяредактированию связей1(процесс подключения к программе подпрограмм) изагрузке в оперативную память. В результате такой обработки получается готовая к выполнению программа, которая называетсяисполняемой программойилизагрузочным модулем.
В настоящее время трансляторы обычно входят в состав систем программирования, включающих в себя также редактор для набора и исправления текстов программ, редактор связей, загрузчик, средства для работы с файлами, программу- отладчик и среду, обеспечивающую удобную работу с этими программами. Мы будем ориентироваться на систему программирования BorlandC++ 3.1 и операционную системуMSDOS. Заметим также, что, следуя целямначального обучения программированию, в основном будем ориентироваться на подмножество языка Си++ (компилятор с которого входит в состав системы), соответствующее стандарту языка Си. С системойBorland C++ 3.1 можно ознакомиться, например, по [3, 4], в настоящем пособии описание этой системы не приводится.