logo search
Подбельский Фомин_Программирование на языке СИ_

Предисловие

Язык программирования Си создан в 1972 г. сотрудником фирмы Bell Laboratories Деннисом Ритчи (Dennis M. Ritchie) при разработке операционной системы UNIX. Язык проектировался как инструмент для системного программирования с ориентацией на разработку хорошо структурированных программ. Удачное сочетание лаконичности конструкций и богатства выразительных возможностей позволило языку Си быстро распространиться и стать наиболее популярным языком прикладного и системного программирования. Компиляторы языка Си работают почти на всех типах современных ЭВМ в операционных системах UNIX, MS-DOS, Mac OS, OS/2, Windows, Windows NT, Solaris и др.

В отличие от многих предшествующих языков (Ада, Алгол-60, Алгол-68 и т.д.), которые вступали в силу после принятия соответствующих национальных и международных стандартов, язык Си вначале был создан как рабочий инструмент, не претендующий на широкое применение. Стандарта на язык Си до 1989 г. не существовало, и в качестве формального описания разработчики компиляторов использовали первое издание книги Б. Кернигана и Д. Ритчи, вышедшее в США в 1978 г. (переведена на русский язык в 1985 г. [1]). Роль неформального стандарта языка Си сохранилась за этой книгой и в настоящее время. Не случайно в литературе и документации по компиляторам ссылка на эту работу обозначается специальным сокращением K&R.

Второе издание книги Б. Кернигана и Д. Ритчи [2] описывает язык Си в стандартизованном Американским институтом национальных стандартов виде (стандарт ANSI языка Си). В настоящее время, кроме стандарта ANSI С, разработан международный стандарт ISO С (International Standard Organization С). Обе версии стандарта близки друг к другу, и на различиях между стандартами нет необходимости останавливаться до возникновения разногласий в толковании той или иной конструкции языка либо при оценке стандартности конкретного компилятора. Эти ситуации выходят за рамки курса по программированию на языке Си. В случае необходимости получения справок по стандартам языка Си следует обращаться к специальным публикациям, например к "Толковому словарю стандарта языка Си" Р. Жешке [5]. Неформальное применение книги K&R в качестве стандарта до 1989 г. и последующая ее переработка авторами в соответствии с принятым стандартом ANSI привели к тому, что ее и сейчас можно рассматривать как достоверный источник при получении справок по языку Си.

Настоящее пособие предназначено для изучения программирования на стандартном языке Си. Ориентация сделана как на изложение синтаксиса и семантики конструкций языка, так и на их практическое использование при решении типовых задач программирования. Первый раздел (главы 1 - 8) содержит материал, относящийся к синтаксису, семантике и особенностям программирования на нем. После описания в главе 1 основных понятий языка Си рассмотрены средства представлений базовых конструкций структурного программирования, возможности которых в главе 2 иллюстрируются на простых вычислительных задачах. Глава 3 содержит подробное описание пре-процессорных средств компилятора языка Си, которые активно используются при последующем изучении методов и приемов программирования на языке Си. Следующая глава и посвящена незаменимым в системном программировании понятиям - объектам и адресам (указателям). Аппарат указателей используется затем при обработке массивов и строк. Центральное место занимает глава 5, посвященная функциям. Здесь возможности функций рассмотрены подробно и с нужной полнотой. Особое внимание уделено взаимосвязи функций с указателями, а также классам памяти, которые вводятся в связи с организацией многофайловых программ, включающих много функций. Глава 6 рассматривает структурированные данные (структуры и объединения). Особенности работы с файлами, а также средства ввода-вывода показаны на типовых задачах в главе 7. В главе 8 подробно рассмотрено несколько задач, иллюстрирующих не только синтаксические возможности языка, но и основные принципы построения достаточно крупных программ. Второй раздел (глава 9) посвящен использованию компиляторов и интегрированных средств разработки программ на языке Си в разных операционных системах, причем большое внимание уделено таким универсальным средствам различных сред программирования, как проекты многомодульных программ.

Приводимые в пособии программы сопровождаются результатами, полученными на ЭВМ. Программы выполнялись в ОС UNIX (в частности, в FreeBSD) и на IBM PC в интегрированных средах Turbo С 2.0 и Borland C++3.1. Более поздние версии компиляторов использовать не требовалось. Обратим внимание на тот факт, что большинство интегрированных сред, в названии которых указан язык Си ++, компилируют и программы на языке Си. Например, Borland C++ и Turbo C++ включают по 2 компилятора - для языка Си и для языка Си ++. Подробнее об этом говорится в главе 9.

В третьем разделе книги представлен "Практикум" - сборник задач, снабженный вариантами типовых решений и рекомендациями по программированию. Задачи сгруппированы по темам и в совокупности представляют хорошую основу для организации практических работ группы студентов и самостоятельного активного усвоения материала.

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

Книга написана на основе курсов лекций, которые авторы в течение ряда лет читали в МИЭМе на факультете прикладной математики, на факультете автоматики и вычислительной техники и факультете повышения квалификации инженеров. Материал пособия соответствует учебной программе дисциплины "Алгоритмические языки и программирование". Изучение указанной дисциплины, в частности языка Си, служит основой для курсов по математическому обеспечению ЭВМ и сетей, по операционным системам, построению компиляторов и системному программированию.

Авторы надеются, что книга поможет ликвидировать разрыв между широко публикуемыми техническими руководствами по реализации языка Си и потребностями в методическом обеспечении учебного процесса. Для чтения книги достаточно знать основы информатики. Поэтому пособие можно использовать как в вузе, так и в курсах информатики школ, гимназий, лицеев и техникумов. Необходимым условием освоения материала книги являются выполнение приведенных в ней примеров и решение задач практикума на любой ЭВМ, снабженной транслятором с языка Си.

С.С. Фоминым написаны главы 7 и 9, В.В. Подбельским выполнено общее редактирование, написаны главы 1 - 6. Глава 8 и практикум написаны авторами совместно. В подборе задач для практикума принял участие С.Г. Чернацкий. В текст пособия по предложению С.М. Лавренова включено несколько программ, иллюстрирующих тонкие вопросы языка Си.

Повышению качества рукописи способствовали замечания рецензентов, а также внимательный анализ текста, который провели С.М. Лавренов и С.Г. Чернацкий. При печати и оформлении рукописи авторам помогали Н.В. Васюкова, И.А. Морозова, О.В. Шеханова и Юлия Кочнева. Авторы выражают им глубокую благодарность.

Любые конструктивные замечания и предложения по улучшению пособия авторы с благодарностью примут и учтут в дальнейшем. Нам можно писать по адресу издательства либо по электронной почте: vvp@expert.extech.msk.su.