M. УЭИТ   С. ПРАТА    Д. МАРТИН


   Язык Си
   руководство для начинающих


Перевод с английского Л. Н. Горинович и В. С. Явниловича
под редакцией д-ра техн. наук Э. А. Трахтенгерца
ББК 32.973 У97 УДК 681.3
ISBN 5-03-001309-1 /русск./
ISBN 0-672-22090-3 /англ./

© 1984 The Waite Group, Inc
© перевод на русский язык: Москва "Мир", 1988



Оглавление

Предисловие редактора перевода
Предисловие
Глава 1. Вступление
     Происхождение языка Си
     Достоинства языка Си
     Будущее языка Си
     Использование языка Си
     Использование текстового редактора для подготовки программы
     Исходные файлы и выполняемые файлы
     Компиляция Си программы в ОС UNIX
     Компиляция Си программы на IBM PC (компиляторы Microsoft С и Lattice С)
     Альтернативный способ трансляции
     Почему компиляция
     Некоторые соглашения
     Вид шрифта
     Цвет
     Устройство ввода и вывода
     Функциональные клавиши
     Наша вычислительния система
     Совет
Глава 2. Введение в язык Си
     Пример простои программы на языке Си
     Пояснения
     Первый просмотр краткий обзор
     Второй просмотр детали
     Структура простой пpoграммы
     Несколько сонетов, как сделать программу читаемой
     Следующий шаг
     Дополнительный пример
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 3. Данные, язык Си и вы
     Данные: переменные и константы
     Данные: типы данных
     Целые числа
     Числа с плавающей точкой
     Tипы данных в языке Си
     Типы int, short и long
     Описание данных целого типа
     Целые константы
     Инициализация переменных целого тина
     Рекомендации
     Тип данных unsigned
     Тип данных char
     Описание символьных переменных
     Символьные константы
     Программа
     Типы данных float и double
     Описание переменных с плавающей точкой
     Константы с плавающей точкой
     Другие типы
     Размеры данных
     Использование типов данных
     Что вы должны были узнать в этой главе
     Вопросы и ответы
Глава 4. Символьные строки, директива #define, функции printf() и scanf()
     Символьные строки - введение
     Длина строки - функция strlen( )
     Константы и препроцессор языка Си
     Язык Си - искусный фокусник: создание псевдоимен
     Изучение и использование функций printf( ) и scanf( )
     Использование функции printf( )
     Модификаторы спецификации преобразования, используемые в функции printf( )
     Примеры
     Использование функции printf( ) для преобразования данных
     Применение функции scanf( )
     Советы по применению
     Что вы должны были узнать в этой главе
     Вопросы и ответы
Глава 5. Операции, выражения и операторы
     Основные операции
     Операция присваивания: =
     Операция сложения: +
     Операция вычитания: -
     Операция изменения знака: -
     Операция умножения: *
     Операция деления: /
     Порядок выполнения операций
     Некоторые дополнительные операции
     Операция деления по модулю: %
     Операции увеличення и уменьшения: ++ и - -
     Операция уменьшения: --
     Старшинство операции
     Не будьте слишком умными
     Выражения и операторы
     Выражения
     Операторы
     Составные операторы (блоки)
     Преобразование типов
     Операция приведения
     Пример программы
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 6. Функции и переключение ввода-вывода
     Ввод и вывод одного символа: функции getchar( ) и put- char( )
     Буферы
     Следующий шаг
     Чтение одной строки
     Чтение одиночного файла
     Переключение и работа с файлами
     Операционная система UNIX
     Переключение вывода
     Переключение ввода
     Комбинированное переключение
     Операционные системы, отличные от ОС UNIX
     Комментарии
     Системно-зависимые средства: порты ввода-вывода микропроцессоров INTEL 8086/8088
     Использование порта
     Резюме
     Использование скрытой мощности (в лошадиных силах) вашего компьютера
     Что вы должны были узнать в этой главе
     Вопросы н ответы
     Упражнения
Глава 7. Выбор вариантов
     Оператор if
     Расширение оператора if с помощью else
     Выбор: Конструкция if-else
     Множественный выбор: конструкция else-lf
     Объединение операторов if и else
     Что важнее: операции отношения или выражения
     Что такое истина?
     Итак чему же все-таки соответствует истина?
     Осложнения с понятием "истина"
     Приоритеты операций отношения
     Логические операции
     Приоритеты
     Порядок вычислении
     Программа подсчета слов
     Программа, "рисующая" символами
     Анализ программы
     Длина строки
     Структура программы
     Форма данных
     Контроль ошибок
     Операция условия: ?:
     Множественный выбор: операторы switch и break
     Что вы должны были узнать в этой главе
     Вопросы и ответы
Глава 8. Циклы и другие управляющие средства
     Цикл while
     Завершение цикла while
     Алгоритмы и псевдокод
     Цикл for
     Гибкость конструкции for
     Операция "запятая"
     Философ Зенон и цикл for
     Цикл с условием на выходе: do while
     Какой цикл лучше
     Вложенные цыклы
     Другие управляющие операторы: break, continue, goto
     Избегайте использовать goto
     Массивы
     Проблема ввода
     Резюме
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 9. Как правильно пользоваться функциями
     Создание и использование простой функции
     Аргументы функции
     Определение функции с аргументом: формальные аргументы
     Вызов функции с аргументом: фактические аргументы
     Функция как "черный ящик"
     Наличие нескольких аргументов
     Возвращение значения функцией: оператор return
     Локальные переменные
     Нахождение адрссов: операция &
     Изменение переменных в вызывающей программе
     Указатели: первое знакомство
     Операция косвенной адресации: *
     Описание указателей
     Использование указателей для связи между функциями
     Использование наших знаний о функциях
     Описание типов функций
     В языке Си все функции равноправны
     Резюме
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 10. Классы памяти и разработка программ
     Классы памяти и область действия
     Автоматические переменные
     Внешние переменные
     Статические переменные
     Внешние статические переменные
     Регистровые переменные
     Какой класс памяти применять?
     Функция получения целых чисел: getlnt( )
     План
     Поток информации для getint( )
     Содержание getint( )
     Преобразование строки в целое: stoi( )
     Проверка
     Сортировка чисел
     Считывание числовых данных
     Выбор представления данных
     Завершение ввода
     Дальнейшие рассуждения
     main() и getarray()
     Разъяснения
     Сортировка данных
     Печать данных
     Результаты
     Обзор
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 11. Препроцессор языка Си
     Символические константы: #define
     Использование аргументов с #define
     Макроопределение или функция?
     Включение файла: #include
     Заголовочные файлы: Пример
     Замечания по программе
     Другие директивы #undef, #if, #ifdef, #ifndef, #else и endif
     Что вы должны были узнать и этой главе
     Вопросы и ответы
     Упражнение
Глава 12. Массивы и указатели
     Массивы
     Инициализация массивов и классы памяти
     Указатели массивов
     Функции, массивы и указатели
     Использование указателей при работе с массивами
     Операции с указателями
     Многомерные массивы
     Инициализация двумерного массива
     Указатели и многомерные массивы
     Функции и многомерные массивы
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 13. Символьные строки и функции над строками
     Определение строк в пpoграмме
     Строковые константы
     Массивы символьных строк и их инициализация
     Массив или указатель
     Явное задание размера памяти
     Массивы символьных строк
     Указатели и строки
     Ввод строк
     Выделение памяти
     Функция gets( )
     Функция scanf( )
     Вывод строк
     Функция puts( )
     Функция printf( )
     Создание собственных функции
     Функции, работающие со строками
     Функция strlen( )
     Функция strcat( )
     Функция strcrnpt( )
     Функция strcpy( )
     Пример: сортировка строк
     Аргументы командной строки
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Глава 14. Структуры и другие типы данных
     Типовая задача: инвентаризация книг
     Установка структурного шаблона
     Определение структурных переменных
     Инициализация структуры
     Доступ к элементам структуры
     Массивы структур
     Описание массива структур
     Определение элементов массива структур
     Детализация программы
     Вложенные структуры
     Указатели на структуры
     Описание и инициализация указателя на структуру
     Доступ к элементу структуры при помощи указателя
     Передача информации о структурах функциям
     Использование элементов структуры
     Использование адреса структуры
     Использование массива
     Структуры: что дальше?
     Объединения - краткий обзор
     typedef - кpaткий обзор
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнении
Глава 15. Библиотека языка Си н фаилы ввода-вывода
     Доступ в библиотеку языка Си
     Автоматический доступ
     Включение файла
     Включение библиотеки
     Библиотечные функции, которые мы использовали
     Связь с файлами
     Что такое файл?
     Простые программы чтения файла: fopen(), fclose(), getc() и putc()
     Открытие файла: fopen( )
     Закрытие файла: fclose( )
     Текстовые фаилы с буферизацией
     Ввод-вывод файла: getc( ) и putc( )
     Простая программа сжатия файла
     Ввод-вывод файла: fprintf( ), fscanf( ), fgets( ) и fputs( )
     Функции fprintf( ) и fscanf( )
     Функция fgets( )
     Функция fputs( )
     Произвольный доступ: fseek( )
     Проверка и преобразование символов
     Преобразования символьных строк: atoi( ), atof( )
     Выход: exit( )
     Распределение памяти: malloc( ) и са11ос( )
     Другие библиотечные функции
     Заключение
     Что вы должны были узнать в этой главе
     Вопросы и ответы
     Упражнения
Приложение А. Дополнительная литература
     Язык Си
     Программирование
     Операционная система UNIX
Приложение Б. Ключевые слова языка Си
     Ключевые слова выполнения программы
Приложение В. Операции языка Си
Приложение Г. Типы данных и классы памяти
     Основные типы данных
     Как описать простую переменную
     Классы памяти
Приложение Д. Управление ходом выполнения программы
     Оператор while
     Оператор tor
     Оператор do while
     Использование операторов if для выбора вариантов
     Множественный выбор при помощи switch
     Переходы и программе
Приложение Е. Манипуляции разрядами: операции и поля
     Операции
     Поля
Приложение Ж. Двоичные и другие числа
     Двоичные числа
     Двоичные числа с плавающей точкой
     Другие основания системы счисления
Приложение 3. "Музыка" в системе IBM PC
     Функция tone( )
     Использование функции tone( )
Приложение И. Расширение языка Си
     Структуры в качестве аргументов функции
     Перечислимые типы
Приложение К. Таблица кодов ASCII