Разное

Книга по c: Лучшие книги по C для начинающих – бестселлеры на русском языке

книги — Хорошая книга по C

Вопрос задан

Изменён 6 лет 3 месяца назад

Просмотрен 32k раз

Решил учить азы языка C. Кто-нибудь может посоветовать хорошую книгу? Друг дал почитать «M. Уэйт, С. Прата, Д. Мартин — Язык Си руководство для начинающих», но эта книга старше меня.

  • c
  • книги

5

Подкину несколько наименований полезных книг, правда с точки зрения преподавателя 😉

  • K. N. King. C Programming: A Modern Approach, 2nd Edition.
    На мой взгляд лучший учебник по языку C, покрывающий C99. Разобраны все 24 заголовочных файла стандартной библиотеки C99 с таким уровнем детализации, которого я больше не видел нигде.
    Является основным учебником по программированию на языке C во многих американских колледжах. К сожалению на русский язык книга не переводилась, но 100-мегабайтный PDF английского издания легко находится в сети.
  • Manuel Bermudez. Study Guide for C Programming: A Modern Approach.
    Руководство к описанному выше учебнику. На русском также не найти.
  • Randal Bryant and David O’Hallaron. Computer Systems: A Programmer’s Perspective (2nd Edition).
    Эту книгу я упоминал здесь уже несколько раз. Она не о языке C — она об архитектуре компьютера и поведении компилятора с точки зрения программиста на C. В ней можно найти ответы на такие вопросы как «почему компилятор как правило преобразует циклы к форме do-while?», «как использовать switch, чтобы его машинная реализация была эффективней каскадного if?», «как работает компоновщик?», «почему оптимизирующий компилятор не может соптимизировать казалось бы очевидный код и как писать код, чтобы получить максимум от оптимизации?» и многие другие.
    Издавалась на русском языке ограниченным тиражом, английский вариант элементарно находится в сети.
  • Stephen Kochan. Programming in C (3rd Edition).
    Хороший, добротный учебник. Издавался на русском языке.
  • Richard Heathfield and Lawrence Kirby. C Unleashed.
    Философская книга для уже знающих язык. Должна быть на книжной полке каждого программиста на языке C. На русском языке издавалась под названием «Искусство программирования на C», несложно найти PDF/DJVU. Дик Хэзфилд также широко известен своими статьями по глубокому исследованию проблем программирования на языке C (примерно как Андрей Александреску на C++).

Думаю, на данный момент лучшая книга по С для начинающих — Стивен Прата «Язык программирования С». K&R, конечно, классика, но написан суховато и слишком сжато, для новичков (особенно не профессионалов в IT) будет трудноват. Потом можно почитать замечательную книжку Харбисона и Стила «Язык С с примерами». Это прекрасный учебник и справочник по С99.

1

Керниган, Ритчи «Язык программирования Си». Правда первое издание (и первый перевод) вышли ещё раньше вышеуказанного «Руководства для начинающих», но — классика.

2

Керниган, Ритчи «Язык программирования Си» — толковая книга и от авторов самого языка. В русском переводе есть и более поздние издания. Всё объясняется на примерах и в конце каждой главые есть упражнения. Можно и в .djvu, и в .chm скачать. Также в придачку можно скачать: Керниган Б., Ритчи Д., Фьэр А. «Язык программирования Си. Задачи по языку Си». Там есть примеры с объяснениями.

Ворожцов А. В., Винокуров Н. А. Алгоритмы: Построение, анализ и реализация на языке программирования Си

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

В книжном варианте: Практика и теория программирования. В 2 книгах. Книга 2

Я учил C (обучение еще, конечно, не окончено =)) по книгам Харви Дейтел, Пол Дейтел «Как программировать на C» и Герберт Шилдт «Полный справочник по C++» (там C идет как подраздел). Все описано в них простым языком и, думаю, для начала в самый раз.

1

Какие «свежие» книги по C вам известны?

Вопрос задан

6 лет 9 месяцев назад

Изменён 6 лет 9 месяцев назад

Просмотрен 2k раза

В университете нам твердили, что ничего лучше K&R для изучения C — нет. Сейчас студенты младших курсов интересуются, что из литературы вышло хотя бы приближенного к этой библии по C. Что можно предложить?

  • c
  • книги

4

Ничего лучшего, чем Керниган, Ритчи. Язык программирования C, на мой взгляд, не выходило. Причем эта маленькая книга содержит в себе помимо учебника по языку еще и учебник по хорошей практике программирования.
В C не было таких революционных изменений, как в C++ — вполне можно изучить C89, а потом прочитать о внесенных изменениях (скорее — дополнениях).

Есть еще одна — более современная — хорошая книга по C:
Харбисон, Стил. Язык C с примерами. М.: Бином, 2011.
В ней описан в том числе и стандарт C99. Она написана больше как справочник, но может использоваться и как учебник (даже упражнения есть).

Есть еще современные книги с описанием C11:

  • Прата. Язык программирования C. Лекции и упражнения
  • Дейтел, Дейтел. Как программировать на C. М.: Бином, 2014.

К сожалению ничего сказать о них не могу, т.к. сам не читал.
У Дейтелов обычно хорошие книги. Только указанная книга скорее похожа на учебник по программированию, в котором за базовый язык принят C (также в ней есть и введение в C++).

2

Из совершенно новых хотелось бы отметить «21st Century C»/»Язык С в XXI веке» Бэна Клеменса. Основной упор в книге не сколько на сам язык, сколько на современное инструментальное окружение, полезные библиотеки. Хорошо освещаются изменения в синтаксисе C, которые произошли в последние 20 лет. Изумительное дополнение к какой-нибудь классике вроде K&R.

3

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

The C Book — Table of Contents

Это онлайн-версия The C Book , вторая издание Майка Банахана, Деклана Брэди и Марка Дорана, первоначально опубликовано Addison Wesley в 1991 году. Эта версия сделана в свободном доступе.

Хотя эта книга больше не издается, ее содержание по-прежнему очень актуально сегодня. Язык C по-прежнему популярен, особенно для открытым исходное программное обеспечение и встроенное программирование. Мы надеемся, что эта книга будет полезна или, по крайней мере, интересна тем, кто используйте C.

Если у вас есть какие-либо комментарии об этой книге или если вы обнаружите какие-либо ошибки в своей презентации, пожалуйста, отправьте сообщение на консалтинг@gbdirect.co.uk.

Хотя у нас самих нет времени и инструментов для подготовки этой книги в формате PDF, мы очень благодарны профессору Карлосу Хосе де Алмейда Перейра из Университета Эстадуаль-де-Санта-Крус в Бразилии за его работу, которую он скромно описывает как «просто напечатать ваши страницы, удобные для печати, в файл PDF». PDF-файл книги, которую он создал таким образом, был размещен здесь 6 марта 2007 г. и в настоящее время должен быть таким же, как и содержимое этого сайта, так как никаких обновлений не производилось с момента создания одного файла.

Альтернативная версия в формате pdf была позже представлена ​​в июле 2010 года Уордом ван Ванройджем (обновлена ​​в 2018 году) — вы можете скачать его версию здесь. Мы не делаем никаких заявлений о точности или иных версиях в формате PDF.

  • Предисловие
    • Об этой книге
    • Успех C
    • Стандарты
    • Хостинговые и автономные среды
    • Типографские соглашения
    • Порядок тем
    • Примеры программ
    • Уважение к высшему авторитету
    • Адрес для стандартного
  • Глава 1. Введение в C
    • 1.1. Форма программы C 
    • 1.2. Функции
    • 1.3. Описание примера 1.1
    • 1.4. Еще несколько программ
    • 1.5. Терминология
    • 1.6. Резюме
    • 1.7. Упражнения
  • Глава 2. Переменные и арифметика
    • 2.1. Некоторые основы
    • 2.2. Алфавит C
    • 2.3. Текстовая структура программ
    • 2. 4. Ключевые слова и идентификаторы
    • 2.5. Объявление переменных
    • 2.6. Реальные типы
    • 2.7. Интегральные типы
    • 2.8. Выражения и арифметика
    • 2.9. Константы
    • 2.10. Резюме
    • 2.11. Упражнения
  • Глава 3. Управление потоком и логическими выражениями
    • 3.1. Задача впереди
    • 3.2. Контроль потока
    • 3.3. Еще логические выражения
    • 3.4. Странные операторы
    • 3.5. Резюме
    • 3.6. Упражнения
  • Глава 4. Функции
    • 4.1. Изменения
    • 4.2. Тип функций
    • 4.3. Рекурсия и передача аргументов
    • 4.4. Связь
    • 4.5. Резюме
    • 4.6. Упражнения
  • Глава 5. Массивы и указатели
    • 5.1. Вступительные выстрелы
    • 5.2. Массивы
    • 5.3. Указатели
    • 5.4. Обработка символов
    • 5.5. Размер и выделение памяти
    • 5. 6. Указатели на функции
    • 5.7. Выражения с указателями
    • 5.8. Массивы, оператор и и функция декларации
    • 5.9. Резюме
    • 5.10. Упражнения
  • Глава 6. Типы структурированных данных
    • 6.1. История
    • 6.2. Конструкции
    • 6.3. Союзы
    • 6.4. Битовые поля
    • 6.5. Перечисления
    • 6.6. Квалификаторы и производные типы
    • 6.7. Инициализация
    • 6.8. Резюме
    • 6.9. Упражнения
  • Глава 7. Препроцессор
    • 7.1. Действие стандарта
    • 7.2. Как работает препроцессор
    • 7.3. Директивы
    • 7.4. Резюме
    • 7.5. Упражнения
  • Глава 8. Специализированные области C
    • 8.1. Предупреждение правительства о вреде для здоровья
    • 8.2. Декларации, определения и доступность
    • 8.3. Определение типа
    • 8.4. Константа и Энергозависимая
    • 8. 5. Точки последовательности
    • 8.6. Резюме
  • Глава 9. Библиотеки
    • 9.1. Введение
    • 9.2. Диагностика
    • 9.3. Обработка символов
    • 9.4. Локализация
    • 9.5. Ограничения
    • 9.6. Математические функции
    • 9.7. Нелокальные прыжки
    • 9.8. Обработка сигналов
    • 9.9. Переменное количество аргументов
    • 9.10. Вход и выход
    • 9.11. Форматированный ввод-вывод
    • 9.12. Символьный ввод/вывод
    • 9.13. Неформатированный ввод-вывод
    • 9.14. Функции произвольного доступа
    • 9.15. Общие коммунальные услуги
    • 9.16. Обработка строк
    • 9.17. Дата и время
    • 9.18. Резюме
  • Глава 10. Полные программы на C
    • 10.1. Собираем все вместе
    • 10.2. Аргументы к main
    • 10.3. Интерпретация аргументов программы
    • 10.4. Программа сопоставления с образцом
    • 10. 5. Более амбициозный пример
    • 10.6. Послесловие
  • ответов на упражнения
    • Глава 1
    • Глава 2
    • Глава 3
    • Глава 4
    • Глава 5
    • Глава 6
    • Глава 7
  • Авторское право и отказ от ответственности

Книга C — Алфавит C

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

2.2.1. Основной алфавит

Немногие компьютерные языки утруждают себя строгим определением своего алфавита. Обычно предполагается, что английский алфавит дополнен будет доступно разбрызгивание более или менее произвольных знаков препинания в каждой среде, которая пытается поддерживать язык. предположение не всегда подтверждается опытом. Старые языки страдают меньше от такого рода проблем, но попробуйте отправить программы C по телексу или ограничительные ссылки по электронной почте, и вы поймете сложность.

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

Стандарт требует наличия алфавита из 96 символов. для C следующим образом:

а б в г д е ж з и к л м н о п р с т у ф ш х у ш
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
! " # % & ' ( ) * + , - . _ { | } ~
пробел, горизонтальная и вертикальная вкладка
перевод страницы, новая строка

Таблица 2.1. Алфавит C

Оказывается, большинство широко используемых компьютерных алфавитов содержат все символы, которые необходимы для C, за несколькими пресловутыми исключениями. Алфавитные символы C, показанные ниже, отсутствуют в международном Организация по стандартизации Стандартный 7-битный набор символов ISO 646, который как подмножество всех широко используемых компьютерных алфавитов. 9{ | } ~

Для систем, которые не могут предоставить полные 96 символов. необходимо C, стандарт определяет метод использования Символы ISO 646 для представления нескольких недостающих символов; техника — это использование триграфов .

2.2.2. Триграфы

Триграфы – это последовательность из трех символов ISO 646, которые получают обработаны так, как если бы они были одним символом в алфавите C; все из триграфы начинаются с двух вопросительных знаков ?? что помогает чтобы показать, что происходит «что-то смешное». В Таблице 2.1 ниже показаны триграфы, определенные в Стандарте.

9029
Символ C Триграф
# ??=
[ ??(
] ??)
??'

Таблица 2.2. Триграфы

В качестве примера предположим, что на вашем терминале нет # символ. Написать препроцессору строку

#define МАКС 32767 

невозможно; вместо этого вы должны использовать обозначение триграфа:

??= определить МАКС. 32767 

Конечно, триграфы будут работать, даже если у вас есть #  символ; они готовы помочь в трудную обстоятельств больше, чем для рутинного программирования.

? «привязывается вправо», поэтому в любой последовательности повторяется ? с, только двое справа могли быть частью триграфа, в зависимости от того, что будет дальше, — это избавляет от всякого двусмысленность.

Было бы ошибкой полагать, что программы, написанные Portable будет использовать триграфы «на случай, если их придется перенести в системы». которые поддерживают только ISO 646’. Если ваша система может обрабатывать все 96 символов в алфавите C, то это то, что вы должны использовать. Триграфы будут видны только в ограниченных средах, и это чрезвычайно просто написать посимвольный транслятор между два представления. Однако все компиляторы, соответствующие стандарту узнает триграфы, когда их увидят.

Подстановка триграфа — это самая первая операция, которую выполняет компилятор. выполняет на входном тексте.

2.2.3. Многобайтовые символы

Поддержка многобайтовых символов является новой в стандарте. Почему?

Очень большая часть повседневных вычислений связана с данными, которые представляет собой текст той или иной формы. До недавнего времени, скорее шовинистическая компьютерная индустрия предположила, что она адекватна для обеспечения поддержка примерно сотни печатных символов (отсюда 96 символьного алфавита С), исходя из требований Английский язык — неудивительно, так как основная часть разработки коммерческих вычислений было на рынке США. Этот алфавит (технически называемый репертуаром ) удобно вписывается в 7 или 8 бит хранения, поэтому стандарт набора символов US-ASCII а архитектура мини- и микрокомпьютеров дает очень тяжелые упор на использование 8-битных байтов в качестве основной единицы хранения.

C также использует побайтовый подход к хранению данных. Наименьший отдельным элементом памяти, который может быть непосредственно использован в C, является байт, который определяется размером не менее 8 бит. Старые системы или архитектуры, которые явно не предназначены для поддержки этого, могут повлечь за собой снижение производительности при запуске C в результате, хотя нет многие считают это большой проблемой.

Возможно, было время, когда английский алфавит был приемлем для приложения для обработки данных по всему миру — когда компьютеры использовались в средах, в которых пользователи могли бы адаптироваться, но те дни ушли. В настоящее время совершенно необходимо обеспечить хранение и обработка текстового материала на родном алфавите кто хочет пользоваться системой. Большая часть США и Западной Европы языковые требования могут быть объединены в набор символов, который по-прежнему соответствует 8 битам на символ, но азиатские и другие языки просто не может.

Существует два основных способа расширения наборов символов. Один из них заключается в использовании фиксированное количество байтов (часто два) для каждого символа. Это то, что Широкая поддержка символов в C предназначена для этого. Другой метод заключается в использовании схема кодирования со сдвигом на входе и выходе; это популярно над 8-битным коммуникационные связи. Представьте себе поток символов, который выглядит так:

.
a b c  a b g  x y 

, где и означает «переключиться на греческий» и «вернуться на английский» соответственно. Устройство отображения, согласившееся использовать этот метод, вполне может затем отобразите a, b, c, alpha, beta, gamma, x и y. Это примерно схема, используемая японским стандартом shift-JIS, за исключением того, что как только было замечено смещение, пара символов вместе используются как код для одного японского символа. Существуют альтернативные схемы, которые используйте более одного символа переключения, но они менее распространены.

Стандарт теперь явно разрешает использование расширенного символа. наборы. Для части C используются только определенные ранее 96 символов. программы, но в комментариях, строках, символьных константах и ​​заголовке имена (это действительно данные, а не часть программы как таковой) расширенные символы разрешены, если ваша среда их поддерживает. Стандарт устанавливает ряд довольно очевидных правил о том, как вам разрешено используйте их, которые мы не будем повторять здесь. Наиболее существенным из них является то, что байт, значение которого равно нулю, интерпретируется как нулевой символ независимо от любого состояния переключения. Это важно, потому что C использует null символ для обозначения конца строки, и многие библиотечные функции полагаются в теме. Дополнительным требованием является то, что многобайтовые последовательности должны начинаться и заканчиваются в начальном состоянии сдвига.

Тип char определяется Стандартом как подходящий для удерживать значение всех символов в «символе выполнения set’, который будет определен в документации вашей системы. Это означает что (в приведенном выше примере) он может содержать значение a ’ или ‘ b ’ или даже «переключиться на греческий иероглиф. Из-за механизма сдвига не было бы никакой разницы между значением, хранящимся в char, который был предназначен для обозначения « a » или греческого «альфа» персонаж. Сделать это означало бы использовать другое представление — вероятно, требуется более 8 бит, что во многих системах было бы слишком большим для символов . Именно поэтому Стандарт вводит wchar_t тип. Чтобы использовать это, вы должны включить Заголовок , потому что wchar_t просто определяется как альтернативное имя для одного из других типов C. Мы обсудим это далее в Раздел 2.8.

Резюме

  • C требует не менее 96 символов в символе исходной программы. установлен.
  • Не все общеупотребительные наборы символов можно растянуть до 96 символов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *