Джонс Р., Стюарт Я. Программируем на Си/ Пер. с англ, и предисл. М.Л. Сальникова, Ю.В. Сальниковой. - М.: Компьютер, ЮНИТИ, 1994. - 236 с.: ил. ISBN 5-88201-015-2 Книга представляет собой учебное пособие по одному из самых популярных языков программирования высокого уровня. В живой, увлекательной форме авторы знакомят с выразительными средствами языка и спецификой программирования на Си. Изложение сопровождается большим числом примеров. Книга послужит полезным пособием для самостоятельно изучающих Си, но и владеющим языком она также будет интересна. Для всех работающих с IBM PC.
Предисловие к русскому изданию
Перед вами, уважаемый читатель, еще одна книга по языку программирования Си, которая, на наш взгляд, представляет собой прекрасное пособие для начинающих. Мы не будем здесь говорить о Си, одном из самых популярных на сегодняшний день языков программирования высокого уровня (уверены, вы достаточно о нем наслышаны). Скажем о самой книге, которую вы держите в руках.
В живой, увлекательной, методически безупречной форме авторы знакомят читателя с выразительными средствами языка и спецификой программирования на Си, т.е. с тем, что в оригинале названо ими "философией Си". Изложение сопровождается большим количеством задач с ответами и контрольными упражнениями, позволяющими читателю самостоятельно проверить усвоение материала. Как и во всех по настоящему хороших книгах по программированию, материал умело дозируется и носит ярко выраженную практическую направленность. Начиная с не очень строгого описания языка, авторы постепенно, на большом числе примеров, углубляют изложение и в конечном итоге вводят читателя в "мир Си", рассказав о нем достаточно полно и строго. Примеры подобраны таким образом, чтобы читатель мог ясно представить области применения языка Си. В приложении 2 приводится краткий справочник по языку.
Книгу можно рассматривать как пособие для желающих самостоятельно изучить Си. Однако и владеющие языком, без сомнения, прочтут ее с удовольствием, поскольку в ней нешаблонно описана философия Си и можно отыскать много интересного, включая новую грань в методике преподавания Си. Наконец, книга снабжена прекрасными, известными всему миру иллюстрациями сэра Джона Тенниела (John Tenniel) к произведениям Льюиса Кэрролла. Вы могли познакомиться ? ними ранее отнюдь не по научно-техническим изданиям. К сожалению, сегодня наше книгопечатание переживает не самые лучшие дни, и в момент написания этих строк мы не можем с уверенностью сказать, в каком виде будет держать в руках эту книгу читатель.

Предисловие
Язык Си занимает среди языков программирования необычное место. Его можно поставить между языками программирования высокого уровня и языком Ассемблера, поскольку он соединяет в себе наиболее сильные свойства тех и других. Данная книга представляет собой введение в язык Си и в связанный с ним специфический образ мышления. Читатель, приступающий к изучению Си, вероятно уже знаком с каким-либо языком программирования, например, Бейсиком или Паскалем, и было бы разумно воспользоваться этим опытом. Поэтому мы полагаем, что вы имеете представление о компьютерной арифметике и знакомы с основными понятиями, общими для всех языков программирования высокого уровня (циклами, условными переходами и т.п.).
К сказанному хотелось бы еще кое-что добавить. Невозможно научиться разговорному французскому языку, продолжая думать на английском и выполняя перевод механически. Точно также невозможно научиться "разговорному" Си, продолжая "думать" на Бейсике. Однако на ранней стадии изучения французского языка можно опереться на знание английского и не потерять уверенность, столкнувшись с mot juste,* которому нет эквивалента в английском. Таков же наш подход к изучению Си. Поэтому в самом начале мы не говорим о некоторых возможностях Си, позволяющих создать очень элегантный и эффективный программный код, так как у новичка их применение может вызвать затруднения. Позднее, когда у вас появится легкость владения языком, вы сами воспользуетесь этими возможностями.
Книгу условно можно разделить на две части. Главы с 1 по 13 содержат описание базовых возможностей языка. Они снабжены примерами, небольшими задачами с ответами и там, где это необходимо, контрольными заданиями для про-
верки знаний читателя. В главах 14-17, на базе материала предыдущих глав, разбираются более сложные примеры программ. В конце концов, программы разрабатываются для того, чтобы с ними можно было действительно работать, а Си — это язык системного программирования (именно на нем написана широко известная операционная система UNIX), идеально подходящий для написания служебных программ. Исходя из этого, при подборе примеров и упражнений мы отдавали предпочтение задачам, требующим создания служебных программ общего назначения, таких как программы рациональной арифметики, поддержки графики и генераторы случайных чисел. Подобные задачи привлекают нас и еще по одному соображению — они очень подходят для демонстрации различных возможностей языка. Числовые задачи помогают пояснять арифметические операции над битами, а генераторы случайных чисел — логические операции. Работа с графикой позволяет проиллюстрировать достаточно сложные математические идеи и возможности динамического развития уже раз-ррботанных систем. При работе с графикой мы постарались обойтись операциями только с целыми числами.
В конце книги приводятся два приложения. Первое содер-экит описание ранее не обсуждавшихся возможностей языка, а второе представляет собой краткое справочное пособие по Си. Книга, конечно, задумана как учебник, а не справочное пособие, но мы сочли не лишним снабдить ее и компактным описанием языка, которым можно воспользоваться как справочником.
• Используемая нами методика подачи материала приводит к тому, что в первой части книги программы несколько громоздки. Это объясняется тем, что мы пользуемся только некоторыми возможностями Си, известными читателю из других языков программирования. Но к концу чтения книги читатель вполне будет способен воспользоваться всей мощью языка Си.
Фолкстон, Кент Робин Джонс
Ковентри, Варвикшир Ян Стюарт

Содержание
Предисловие к русскому изданию
Предисловие о
1 Компиляторы и интерпретаторы 10
Редакторы 12
Работа с компилятором 12
2 Структура программы на Си
Простые и составные предложения 18
Функции, не возвращающие значения 20
Возврат значений 20
Функция main 21
Типы переменных 22
Область действия переменных 23
Глобальные переменные 24
Упущенные детали 25
Функция print! 25
Комментарии 26
Упражнения 27
3 Циклы и управляющие конструкции 28
Конструкция И 29
Условные выражения 30
Логические связки 31
Циклы 31
Автоматическое наращивание значений 33
Функция sqr 34
ОТВЕТЫ 40
Упражнения 41
4 Арифметические и логические операции 43
Четные и нечетные числа 44
Логические операторы 45
Код ASCII 45
Оператор AND (И) 46
Оператор OR (ИЛИ) 48
Оператор XOR (исключающее ИЛИ) 49
Оператор NOT (HE) 50
Сдвиги 51
Ответы • 52
5 Строки, массивы и указатели
Строки и указатели 55
Массивы 56
Объявление массивов 57
Функции работы со строками 58
Выделение подстроки слева 59
Выделение подстроки справа 60
Дополнительные сведения об указателях 61
Модификация функции left 62
Модификация функции right 62
Копирование и объединение строк 63
Ответы М1
Упражнения 66
6 Данные типа float и некоторые другие типы данных 67
Данные типа float 68
Разновидности данных типа int 68
Знак числа и сдвиги 69
Регистровые переменные 69
Структуры 70
Пользовательские типы данных 71
Константы и инициализация переменных 72
Символьные константы 72
Управляющие символы 73
Поименованные константы 74
Изменение значений констант 75
Предложение ^include 76
Восьмеричные и шестнадцатиричные константы 77
Инициализация переменных 78
Инициализация указателей 79
Объявление типа функции 80
Ответы 81
7 Ввод 82
Простой ввод 83
Ввод с буферизацией 83
Старшинство операций оператора 85
Преобразование строк в числа 86
Слабое оправдание 90
Функция scanf 90
Ответы 91
Упражнения 91
J ВЫВОД 92
Еще о функции printf 93
Выравнивание 93
Форматный вывод в оперативную память 94
Простейший вывод 95
9 Кое-что об управляющих конструкциях 96
Условный оператор 97
Прерывание циклов 98
Обход части цикла 98
Переключатели 99
О предложении goto 101
Ответы 102
10 Рекурсия 103
Факториалы 104
Работа со строками 106
Перестановка слов в предложении 108
Ввод и вывод строк 109
Перестановка текста 111
Ответы 112
Упражнение 113
Послесловие ИЗ
11 Структуры 114
Действия со структурами 115
Программа-склад 117
Удаление 118
Добавить 120
Рекурсивные структуры 121
Ответы 122
Упражнения 124
12 Работа с файлами 125
Переназначение ввода/вывода 126
Сообщения об ошибке 127
Буферизация ввода/вывода 127
Создание файла 129
Еще о работе с файлами 130
Ошибки доступа к файлу 131
Файлы прямого доступа 132
Таблица квадратов 134
Обратная задача 135
Ответы 137
Упражнения 139
13 Отладка
Наиболее распространенные ошибки 142
Ошибки во время выполнения программы 144
Тестирование функций 145
Отладочные предложения 146
Удостоверьтесь! 149
Остались ли ошибки? 150
Ответы 153
Упражнения 154
14 Рациональная арифметика 155
Анализ проблемы 156
Переполнение 158
Практическая реализация 159
Функции 160
В два раза больше или ничего 161
Немного о мобильности 165
Обманы, ужасные обманы и компьютерные программы 166
Вычитание 166
Умножение 167
Деление 167
Подпрограммы преобразования типов 168
А теперь плохие новости... 169
Ответы 170
Упражнения 171
Послесловие 171
15 Создание "черепашьей" графики... 173
Управление черепашкой 174
Но сначала одно отступление... 175
Начнем "от печки" 176
Команды черепашки 179
Подключение черепашки 182
Аппроксимация функций 183
Тригонометрические функции на Си 186
Упражнения 187
16 ....и ее применение 188
Прямоугольники 1 g9
Вращение прямоугольников 191
Многоугольники 192
Окружность 195
Звездочки 195
Спирали 195
Снежинка Коха 196
Некоторые размышления... 199
Ответы 200
Упражнения 201
17 Случайные числа 202
Несколько основных идей 203
Проверка "случайности" 205
Численная связь 206
Случайные числа и регистровые операции 208
Практическая программа 210
Ответы 213
Упражнения 215
Некоторые дополнения 216
Краткий справочник 224
Hosted by uCoz