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