Главная страница
Навигация по странице:

  • ИСТОРИЯ СИ ДОСТОИНСТВА СИ ЯЗЫКИ КОМПИЛЯЦИИ

  • ПРОИСХОЖДЕНИЕ ЯЗЫКА СИ

  • ДОСТОИНСТВА ЯЗЫКА СИ

  • БУДУЩЕЕ ЯЗЫКА СИ

  • ИСПОЛЬЗОВАНИЕ ЯЗЫКА СИ

  • Язык Си - Уэйт, Прата, Мартин. M. уэит с. Прата д. Мартин


    Скачать 4.69 Mb.
    НазваниеM. уэит с. Прата д. Мартин
    АнкорЯзык Си - Уэйт, Прата, Мартин.pdf
    Дата15.03.2018
    Размер4.69 Mb.
    Формат файлаpdf
    Имя файлаЯзык Си - Уэйт, Прата, Мартин.pdf
    ТипПрограмма
    #16711
    страница1 из 42
      1   2   3   4   5   6   7   8   9   ...   42

    © 1984 The Waite Group, Inc
    © перевод на русский язык: Москва "Мир", 1988
    M. УЭИТ С. ПРАТА Д. МАРТИН
    Перевод с английского Л. Н. Горинович и В. С. Явниловича
    под редакцией д-ра техн. наук Э. А. Трахтенгерца
    ББК 32.973 У97 УДК 681.3
    ISBN 5-03-001309-1 /русск./
    ISBN 0-672-22090-3 /англ./
    Предисловие редактора перевода
    Предисловие
    Глава 1. Вступление
    Происхождение языка Си
    Достоинства языка Си
    Будущее языка Си
    Использование языка Си
    Использование текстового редактора для подготовки программы
    Исходные файлы и выполняемые файлы
    Компиляция Си программы в ОС UNIX
    Компиляция Си программы на IBM PC (компиляторы Microsoft С и Lattice С)
    Альтернативный способ трансляции
    Почему компиляция
    Некоторые соглашения
    Вид шрифта
    Цвет
    Устройство ввода и вывода
    Функциональные клавиши
    Наша вычислительния система
    Совет
    Глава 2. Введение в язык Си
    Пример простои программы на языке Си
    Пояснения
    Первый просмотр краткий обзор
    Второй просмотр детали
    Структура простой пpoграммы
    Несколько сонетов, как сделать программу читаемой
    Следующий шаг
    Дополнительный пример
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнения
    Глава 3. Данные, язык Си и вы
    Данные: переменные и константы
    1

    Данные: типы данных
    Целые числа
    Числа с плавающей точкой
    Tипы данных в языке Си
    Типы int, short и long
    Описание данных целого типа
    Целые константы
    Инициализация переменных целого тина
    Рекомендации
    Тип данных unsigned
    Тип данных char
    Описание символьных переменных
    Символьные константы
    Программа
    Типы данных float и double
    Описание переменных с плавающей точкой
    Константы с плавающей точкой
    Другие типы
    Размеры данных
    Использование типов данных
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Глава 4. Символьные строки, директива #define, функции printf() и scanf()
    Символьные строки - введение
    Длина строки - функция strlen( )
    Константы и препроцессор языка Си
    Язык Си - искусный фокусник: создание псевдоимен
    Изучение и использование функций printf( ) и scanf( )
    Использование функции printf( )
    Модификаторы спецификации преобразования, используемые в функции printf( )
    Примеры
    Использование функции printf( ) для преобразования данных
    Применение функции scanf( )
    Советы по применению
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Глава 5. Операции, выражения и операторы
    Основные операции
    Операция присваивания: =
    Операция сложения: +
    Операция вычитания: -
    Операция изменения знака: -
    Операция умножения: *
    Операция деления: /
    Порядок выполнения операций
    Некоторые дополнительные операции
    Операция деления по модулю: %
    Операции увеличення и уменьшения: ++ и - -
    Операция уменьшения: --
    Старшинство операции
    Не будьте слишком умными
    Выражения и операторы
    Выражения
    Операторы
    Составные операторы (блоки)
    Преобразование типов
    Операция приведения
    Пример программы
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнения
    Глава 6. Функции и переключение ввода-вывода
    Ввод и вывод одного символа: функции getchar( ) и putchar( )
    Буферы
    Следующий шаг
    2

    Чтение одной строки
    Чтение одиночного файла
    Переключение и работа с файлами
    Операционная система 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. Как правильно пользоваться функциями
    Создание и использование простой функции
    Аргументы функции
    Определение функции с аргументом: формальные аргументы
    Вызов функции с аргументом: фактические аргументы
    3

    Функция как "черный ящик"
    Наличие нескольких аргументов
    Возвращение значения функцией: оператор return
    Локальные переменные
    Нахождение адрссов: операция &
    Изменение переменных в вызывающей программе
    Указатели: первое знакомство
    Операция косвенной адресации: *
    Описание указателей
    Использование указателей для связи между функциями
    Использование наших знаний о функциях
    Описание типов функций
    В языке Си все функции равноправны
    Резюме
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнения
    Глава 10. Классы памяти и разработка программ
    Классы памяти и область действия
    Автоматические переменные
    Внешние переменные
    Статические переменные
    Внешние статические переменные
    Регистровые переменные
    Какой класс памяти применять?
    Функция получения целых чисел: getlnt( )
    План
    Поток информации для getint( )
    Содержание getint( )
    Преобразование строки в целое: stoi( )
    Проверка
    Сортировка чисел
    Считывание числовых данных
    Выбор представления данных
    Завершение ввода
    Дальнейшие рассуждения main() и getarray()
    Разъяснения
    Сортировка данных
    Печать данных
    Результаты
    Обзор
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнения
    Глава 11. Препроцессор языка Си
    Символические константы: #define
    Использование аргументов с #define
    Макроопределение или функция?
    Включение файла: #include
    Заголовочные файлы: Пример
    Замечания по программе
    Другие директивы #undef, #if, #ifdef, #ifndef, #else и endif
    Что вы должны были узнать и этой главе
    Вопросы и ответы
    Упражнение
    Глава 12. Массивы и указатели
    Массивы
    Инициализация массивов и классы памяти
    Указатели массивов
    Функции, массивы и указатели
    Использование указателей при работе с массивами
    Операции с указателями
    Многомерные массивы
    Инициализация двумерного массива
    4

    Указатели и многомерные массивы
    Функции и многомерные массивы
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнения
    Глава 13. Символьные строки и функции над строками
    Определение строк в пpoграмме
    Строковые константы
    Массивы символьных строк и их инициализация
    Массив или указатель
    Явное задание размера памяти
    Массивы символьных строк
    Указатели и строки
    Ввод строк
    Выделение памяти
    Функция gets( )
    Функция scanf( )
    Вывод строк
    Функция puts( )
    Функция printf( )
    Создание собственных функции
    Функции, работающие со строками
    Функция strlen( )
    Функция strcat( )
    Функция strcrnpt( )
    Функция strcpy( )
    Пример: сортировка строк
    Аргументы командной строки
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнения
    Глава 14. Структуры и другие типы данных
    Типовая задача: инвентаризация книг
    Установка структурного шаблона
    Определение структурных переменных
    Инициализация структуры
    Доступ к элементам структуры
    Массивы структур
    Описание массива структур
    Определение элементов массива структур
    Детализация программы
    Вложенные структуры
    Указатели на структуры
    Описание и инициализация указателя на структуру
    Доступ к элементу структуры при помощи указателя
    Передача информации о структурах функциям
    Использование элементов структуры
    Использование адреса структуры
    Использование массива
    Структуры: что дальше?
    Объединения - краткий обзор typedef - кpaткий обзор
    Что вы должны были узнать в этой главе
    Вопросы и ответы
    Упражнении
    Глава 15. Библиотека языка Си н фаилы ввода-вывода
    Доступ в библиотеку языка Си
    Автоматический доступ
    Включение файла
    Включение библиотеки
    Библиотечные функции, которые мы использовали
    Связь с файлами
    Что такое файл?
    Простые программы чтения файла: fopen(), fclose(), getc() и putc()
    Открытие файла: fopen( )
    5

    Закрытие файла: 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
    ИСТОРИЯ СИ ДОСТОИНСТВА СИ
    ЯЗЫКИ КОМПИЛЯЦИИ
    Добро пожаловать в мир языка Си. В данной главе мы попробуем подготовить вас к изучению
    6
    этого мощного языка, завоевывающего все большую популярность. Что вам для этого нужно?
    Во-первых, интерес к Си, который, по-видимому, у вас уже есть. Но, чтобы усилить его, мы кратко обрисуем некоторые привлекательные стороны данного языка. Во-вторых, вы нуждаетесь в учебнике по языку Си - и учебником послужит вам эта книга. Кроме того, вам нужен доступ к какой- нибудь вычислительной системе, в которой имеется компилятор с языка Си. Это вы должны обеспечить себе сами. Наконец, вам необходимо научиться выполнять Си-программу на вашей вычислительной системе, и мы в конце главы дадим вам несколько советов по этому поводу.
    ПРОИСХОЖДЕНИЕ ЯЗЫКА СИ
    Далее
    Содержание
    Сотрудник фирмы Bell Labs Деннис Ритчи создал язык Си в 1972 г. во время совместной работы с Кеном Томпсоном над операционной системой UNIX. Ритчи не выдумал Си просто из головы - прообразом послужил язык Би, разработанный Томпсоном, который в свою очередь..., но это уже другая история. Важным моментом для нас является то, что язык Си был разработан как инструмент для программистов-практиков. В соответствии с этим главной целью его автора было создание удобного и полезного языка.
    Мы думаем, что критерий полезности принимался во внимание ПРИ разработке большинства языков программирования, но, кроме того, часто учитывались и другие потребности. Одной из главных Целей при создании языка Паскаль, например, было построение ПРОЧНЫХ основ обучения принципам программирования. Язык Бейсик создавался так, чтобы его синтаксис был близок к синтаксису английского языка; поэтому им легко могли пользоваться студенты, не знакомые с ЭВМ.
    Все эти цели тоже важны, но они не всегда совместимы с прагматическими, каждодневными требованиями. Предпосылки, послужившие основой создания языка Си как средства программирования, позволили разработать, кроме того, язык, облегчающий труд программиста.
    ДОСТОИНСТВА ЯЗЫКА СИ
    Далее
    Содержание
    Язык Си быстро становится одним из наиболее важных и популярных языков программирования.
    Его использование все более расширяется, поскольку часто программисты предпочитают язык Си всем другим языкам после первого знакомства с ним. Когда вы изучите язык Си достаточно хорошо,
    вы сможете оценить многие из его достоинств. Сейчас мы упомянем лишь некоторые из них.
    Си - современный язык. Он включает в себя те управляющие конструкции, которые рекомендуются теоретическим и практическим программированием. Его структура побуждает программиста
    7
    использовать в своей работе нисходящее проектирование, структурное программирование и пошаговую разработку модулей. Результатом такого подхода является надежная и читаемая программа.
    Си - эффективный язык. Его структура позволяет наилучшим образом использовать возможности современных ЭВМ. На языке Си программы обычно отличаются компактностью и быстротой исполнения.
    Си - переносимый, или мобильный, язык. Это означает, что программа, написанная на Си для одной вычислительной системы, может быть перенесена с небольшими изменениями (или вообще без них) на другую. Если модификации все-таки необходимы, то часто они могут быть сделаны путем простого изменения нескольких элементов в "головном" файле, который сопутствует главной программе. Конечно, структура большинства языков программирования подразумевает переносимость, но тот, кто переносил программу, написанную на Бейсике, с персональной ЭВМ IBM
    PC на машину Apple (они во многом, похожи) или пытался выполнить программу, написанную на
    Фортране для машины типа IBM, в системе UNIX, знает о многих возникающих при этом мучительных
    РИС. 1.1. Достоинства языка Си.
    проблемах. Язык Си предоставляет исключительные возможности для переноса программ.
    Компиляторы с данного языка реализованы почти на 40 типах вычислительных систем, начиная от-
    8-разрядных микропроцессоров и кончая CRAY-1 одним из самых мощных в настоящее время
    8
    суперкомпьютеров.
    Си - мощный и гибкий язык (два излюбленных слова в литературе по вычислительной технике).
    Например, большая часть мощной и гибкой (!) операционной системы (ОС) UNIX написана на языке
    Си. Речь идет о компиляторах и интерпретаторах других языков, таких, как Фортран, АПЛ, Паскаль,
    Лисп, Лого и Бейсик. Поэтому, когда вы используете компилятор с Фортрана в системе UNIX,
    результирующая объектная программа в конечном счете получается с помощью некоторой программы, написанной на языке Си. Кроме того, программы, написанные на Си, используются для решения физических и технических проблем и даже для производства мультипликационных фильмов.
    Си обладает рядом замечательных конструкций управления, обычно ассоциируемых с ассемблером. Если вы остановите свой выбор на Си, то сможете реализовывать свои программы с максимальной эффективностью.
    Си - удобный язык. Он достаточно структурирован, чтобы поддерживать хороший стиль программирования, и вместе с тем не связывать вас смирительной рубашкой ограничений.
    Кроме уже упомянутых достоинств язык Си имеет и некоторые другие. У него, безусловно, есть и ряд недостатков, но вместо того чтобы далее углубляться в это, давайте обсудим еще один вопрос.
    БУДУЩЕЕ ЯЗЫКА СИ
    Далее
    Содержание
    Язык Си уже занимает доминирующее положение в мире мини-компьютеров, работающих под управлением ОС UNIX. Сейчас он распространяется на область персональных ЭВМ. Многие фирмы,
    производящие программное обеспечение, все чаще обращаются к Си, как к удобному языку для реализации своих проектов: программ обработки текстов, составления крупноформатных таблиц,
    компиляторов и т. д., поскольку известно, что Си позволяет получить компактные и эффективные программы. Что еще важнее, эти программы могут быть легко модифицированы и адаптированы к новым моделям ЭВМ.
    Другой причиной, способствующей проникновению Си в программное обеспечение персональных
    ЭВМ, является желание пользователей, работающих в системе UNIX, отлаживать свои программы дома. Поскольку уже созданы варианты компилятора с языка Си для некоторых моделей персональных ЭВМ, пользователи имеют возможность это делать.
    По нашему мнению, то, что подходит для фирм и программистов с большим опытом работы на
    Си, хорошо и для остальных пользователей. Все больше и больше программистов останавливают свой выбор на языке Си, чтобы воспользоваться его преимуществами. Поэтому вам совсем не обязательно быть. профессиональным программистом, чтобы следовать их примеру.
    Короче говоря, Си суждено стать одним из наиболее важных языков программирования в 80-90-е годы. Он уже применяется на мини-компьютерах и персональных ЭВМ. Он используется фирмами,
    производящими программное обеспечение, студентами, обучающимися программированию, и различными энтузиастами. И если вы хотите работать в сфере программотехники, то один из первых вопросов, на который вы должны будете отвечать "да", - "Умеете ли вы программировать на
    Си?".
    ИСПОЛЬЗОВАНИЕ ЯЗЫКА СИ
    Далее
    Содержание
    Си - язык "компилируемого" типа. Не огорчайтесь, если это звучит для вас пока как непонятный набор слов; вы поймете, что это значит, когда мы опишем этапы процесса создания работающей
    Си-программы.
    Если вы привыкли использовать какой-нибудь язык программирования компилируемого типа,
    например Паскаль или Фортран, вам будут понятны основные этапы "сборки" программ,
    написанных на Си. Но если ваш опыт основан на работе с такими языками
    9

    РИС. 1.2. Области применения языка Си.
    интерпретируемого типа, как Бейсик и Лого, или у вас совсем нет соответствующей подготовки, то процесс сборки может показаться вам поначалу необычным. К счастью, мы можем объяснить вам все детали этого процесса, и вы увидите, что на самом деле он достаточно понятен и прост.
    Чтобы дать вам первое представление о процессе создания программы, ниже приводится упрощенная схема того, что необходимо сделать - начиная от написания программы и кончая ее выполнением.
    1. Используйте "редактор текстов" для создания программы на языке Си.
    2. Попытайтесь осуществить трансляцию вашей программы с помощью удобного для вас компилятора. Он проведет проверку правильности вашей программы и, если обнаружит ошибки,
    выдаст сообщение об этом. В противном случае компилятор выполнит перевод программы в некоторый внутренний язык ЭВМ и поместит результат в новый файл.
    3. Набрав имя этого нового файла на клавиатуре дисплея, вы можете запустить вашу программу.
    В некоторых вычислительных системах второй этап может быть разбитым на два или три шага,
    но его суть от этого не изменится. Давайте рассмотрим теперь каждый этап более подробно.
      1   2   3   4   5   6   7   8   9   ...   42


    написать администратору сайта