Язык Си: кратко и ясно
Язык Си: Краткий Обзор для Начинающих
Эта книга представляет собой учебное пособие по языку программирования Си, предназначенное для новичков, стремящихся к профессиональному пониманию этого языка. Она сочетает в себе подходы учебника и справочника, делая изучение материала более удобным для студентов технических вузов.
Основы и аппаратное обеспечение
Книга начинается с обзора базовых понятий программирования, включая аппаратное обеспечение компьютеров. Рассматриваются цифровые компьютеры, их компоненты (ОЗУ, процессор, постоянные запоминающие устройства) и программное обеспечение. Подчеркивается важность понимания аппаратной части для эффективного программирования.
Классификация программного обеспечения
Далее следует классификация программного обеспечения на прикладное и системное, а также описание их взаимодействия. Рассматриваются системные компоненты, такие как драйверы, ядро операционной системы, графический интерфейс пользователя.
Программирование и его аспекты
Описывается процесс программирования, включая этапы интерпретации и компиляции. Подробно рассматривается процесс компиляции, включающий препроцессирование, компиляцию и сборку модулей.
Место Си среди языков программирования
Определяется место языка Си среди других языков программирования, его история и актуальность. Рассматриваются различные уровни абстракции языков программирования, от низкоуровневых до языков высокого уровня.
Базовые типы данных и их представление
В книге подробно рассматриваются базовые типы данных языка Си (целые, действительные, символьные), их двоичное представление и модификаторы типов. Обсуждаются беззнаковые и знаковые целые числа, форматы с фиксированной и плавающей точкой, а также узкоспециализированные типы данных.
Переменные, константы и операторы
Описываются переменные, константы, операторы и выражения, а также стандартные преобразования типов. Рассматриваются свойства переменных и констант, область видимости и область определения, а также маскирование переменных.
Массивы и указатели
Отдельное внимание уделяется массивам и указателям, их взаимосвязи и адресной арифметике. Рассматриваются одномерные и многомерные массивы, инициализация массивов, строковые массивы и константы.
Функции и управление вычислениями
Рассматриваются функции, их определения и декларации, оператор return, формальные и фактические параметры. Описываются операторы управления ходом вычислений (if, switch, for, while, do...while, goto).
Пользовательские типы данных
В книге рассматриваются пользовательские типы данных, такие как структуры, объединения и перечислимые типы. Обсуждаются вложенные структуры, инициализация полей структуры, а также использование typedef.
Стандартная библиотека функций
В заключительной части книги представлен обзор стандартной библиотеки функций Си, включая функции для работы с динамической памятью, строками, файлами и математические функции.
Препроцессор
Рассматриваются директивы препроцессора, такие как #include, #define, #ifdef, #ifndef, #else, #elif, #pragma, а также макроопределения с параметрами.
Текст подготовлен языковой моделью и может содержать неточности.
- ВО - Бакалавриат
- 01.03.02: Прикладная математика и информатика
- 02.03.02: Фундаментальная информатика и информационные технологии
- 03.03.02: Прикладная математика и информатика
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ЯЗЫК СИ КРАТКО И ЯСНО Д.В. ПАРФЕНОВ УЧЕБНОЕ ПОСОБИЕ Допущено УМО по классическому образованию в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлениям подготовки 01.03.02 «Прикладная математика и информатика» и 02.03.02 «Фундаментальная информатика и информационные технологии» Регистрационный номер рецензии 088-4/42-14 от 24.03.2014 Москва ИНФРА-М 202
УДК 519.682.2(075.8) ББК 32.973-018.1я73 П18 Парфенов Д.В. П18 Язык Си: кратко и ясно : учебное пособие / Д.В. Парфенов. — Москва : ИНФРА-М, 2024. — 320 с. — (Высшее образование). ISBN 978-5-16-019382-3 (print) ISBN 978-5-16-110920-5 (online) В учебном пособии представлена новейшая версия языка программи рования Си, ставшего международным стандартом. Совмещены подходы учебного пособия и справочника, что облегчает студентам изучение материала. Особое внимание уделено стилю программирования, его эффективности и выразительности. Для студентов технических вузов, обучающихся по направлениям подготовки 01.03.02 «Прикладная математика и информатика» и 02.03.02 «Фундаментальная информатика и информационные технологии». УДК 519.682.2(075.8) ББК 32.973-018.1я73 ISBN 978-5-16-019382-3 (print) ISBN 978-5-16-110920-5 (online) © Парфенов Д.В., 2014 ООО «Научно-издательский центр ИНФРА-М» 127214, Москва, ул. Полярная, д. 31В, стр. 1 Тел.: (495) 280-15-96, 280-33-86. Факс: (495) 280-36-29 E-mail: books@infra-m.ru http://www.infra-m.ru Подписано в печать 25.09.2023. Формат 6090/16. Бумага офсетная. Гарнитура Petersburg. Печать цифровая. Усл. печ. л. 20,0. ППТ20. Заказ № 00000 ТК 279800-2092884-240414 Отпечатано в типографии ООО «Научно-издательский центр ИНФРА-М» 127214, Москва, ул. Полярная, д. 31В, стр. 1 Тел.: (495) 280-15-96, 280-33-86. Факс: (495) 280-36-29 ФЗ № 436-ФЗ Издание не подлежит маркировке в соответствии с п. 1 ч. 4 ст. 11
ПРЕДИСЛОВИЕ Эта книга задумана как дорога новичка к профессиональному пониманию языка программирования Си. Профессионал должен уметь отвечать не только на вопрос «Как это сделать?», но и на вопрос «Почему?». Для этого необходимо глубокое понимание изящных и логичных механизмов языка, избавляющее от потребности заучивать множество следствий: они автоматически вытекают из немногих основных принципов. Надеюсь, что настоящее учебное пособие сыграет роль «учебника алгоритмического языка», в котором значительное внимание уделяется также стилю программирования, эффективности и выразительности. Поскольку область применения Си как одного из лидеров среди языков программирования очень широка и охватывает сферы от управления производственными процессами до средств поддержки виртуальной реальности, от создания операционных систем до сложных математических вычислений, автор пытался избежать привязки повествования и многочисленных примеров к какойлибо конкретной предметной области, чтобы сделать изложение одновременно компактным, универсальным, достаточно полным, но не перегруженным мелочами, систематическим и в то же время четко построенным по принципу «от простого к сложному». Известно немало хороших пособий по языку Си – ведь его популярность огромна. Человек, взявший в руки эту книгу, обязательно задаст вопрос: «Зачем мне именно эта книга?» Но даже беглого просмотра достаточно, чтобы убедиться, что предлагаемое пособие существенно отличается от других, представленных в печати, как способом подачи материала, так и кру´гом рассматриваемых вопросов. Дело не только в том, что в пособии представлена новейшая версия языка, ставшая международным стандартом в конце 2011 г. Многолетний опыт чтения данного курса в Московском государственном техническом университете радиотехники,
электроники и автоматики (МГТУ МИРЭА) убедил автора в том, что обращение к учебному пособию как к справочнику является неотъемлемой чертой современного процесса освоения программирования. Создавая свои первые программы, студенты стремятся найти ответы на частные вопросы в первую очередь в том же источнике, который ввел их в суть дела. Поэтому представляется, что такая книга должна совмещать подходы учебника и справочника, а они заметно противоречат друг другу. Отсюда вытекает нетрадиционно выстроенное изложение, четко структурированное и активно привлекающее компактную схематическую запись языковых правил. Насколько автору удалось реализовать задуманное, судить читателям. 6 Предисловие
В ВЕДЕНИЕ. БАЗОВЫЕ ПОНЯТИЯ ПРОГРАММИРОВАНИЯ В1. Основные сведения об аппаратной части компьютеров Современные компьютеры – электронные устройства, предназначенные для ввода, хранения, обработки и вывода представимой в электронном виде информации. Их функции в зависимости от назначения могут сильно различаться: научные, инженерные, экономические и другие расчеты, математическое моделирование поведения различных систем, интеллектуальное управление механизмами и процессами (например, течением химических реакций), обработка, поиск, передача, анализ и синтез информации (текстовой, визуальной, звуковой и т.д.), средства создания виртуальной и расширенной реальности (синтез визуальных, слуховых и тактильных воздействий, имитирующих явления реального мира или фантастических миров). Столь различающиеся задачи определяют многообразие вычислительных средств. По физическому способу организации вычислений различают цифровые, аналоговые и квантовые вычислители. Не вдаваясь в описание их различий, сосредоточимся на цифровых компьютерах как наиболее распространенных в настоящее время и практически значимых. В зависимости от круга решаемых задач различают компьютеры: узкоспециализированные – предназначены для единственного применения, например управления режимом работы двигателя автомобиля; специализированные – нацелены на решение множества задач одного типа, например игровая приставка к телевизору; широкого применения (например, персональный компьютер, высокопроизводительный вычислительный кластер – связка мощных компьютеров).
Назначение определяет конкретные используемые аппаратные и программные средства компьютера. Аппаратные средства – это совокупность всех электронных схем, механизмов и элементов конструкций, составляющих «физическую» часть вычислителя (англ. hardware1, в повседневной речи часто именуемые «железом» компьютера), а программные средства – исчерпывающее описание правил обработки информации силами аппаратных средств (англ. software). В качестве предельно грубой, но наглядной аналогии можно уподобить аппаратные средства телу человека, а программные – полному набору правил его поведения. Успешное программирование предполагает базовое понимание ключевых аппаратных средств типичного персонального компьютера. Оперативное запоминающее устройство (ОЗУ, оперативная память произвольного доступа, англ. random access memory – RAM) – это микросхемы разделенной на ячейки одинакового объема памяти. В такую память можно целиком или частично относительно быстро записать данные или программы в произвольной последовательности, а потом прочитать ту же информацию в том же или другом порядке. Доступ может быть осуществлен непосредственно к одной произвольной ячейке памяти. Для попадания в требуемую ячейку используется адресация – сопоставление по некоторому правилу ячейкам памяти номеров – адресов. Адрес однозначно определяет конкретную ячейку памяти. При выключении компьютера содержимое такой памяти обычно полностью утрачивается. В дальнейшем говоря о памяти, будем почти всегда подразумевать именно такую ее разновидность. На самом деле имеется еще один важный вид памяти – кэшпамять (англ. cache memory, от фр. caché – скрытый, спрятанный). Назначение этой памяти, многократно (от десятков до тысяч раз) более быстрой по сравнению с оперативной, – промежуточное хранение наиболее востребованных данных и команд для быстрой доставки их в процессор и из процессора. «Скрытый» характер памяти проявляется в невоз8 Введение. Базовые понятия программирования 1 Чтобы упростить понимание довольно специфических сообщений компилятора и сборщика и ориентации в многочисленных программистских текстах, в скобках приводятся английские варианты ключевых терминов.
можности адресовать то, что в ней лежит: специальная подсистема компьютера сама решает, что и на какое время там разместить, и осуществляет автоматический доступ в нее так, как будто информация размещена в обычной оперативной памяти. Профессиональному программисту необходимо знать о наличии (а еще лучше алгоритмы работы) кэшпамяти, чтобы реализовать эффективные стратегии работы с памятью. Центральный процессор (центральный процессорный модуль, англ. central processor unit – CPU, в дальнейшем для краткости – процессор) или несколько взаимосвязанных процессоров – это микросхемы с высокой степенью интеграции (сложностью), непосредственно осуществляющие обработку информации. Они пошагово считывают из оперативной памяти программы – последовательности команд обработки информации, описывающие, что делать, и исполняют их – меняют данные по этим правилам. Данные могут размещаться в памяти или в так называемых регистрах процессора. Регистр – одна или несколько связанных между собой ячеек памяти, расположенных внутри процессора. В отличие от обычной оперативной памяти у них обычно нет адресов, но скорость обращения к информации бывает еще выше, чем у быстрой кэшпамяти. Поскольку различные разновидности даже совместимых процессоров оснащены различающимися наборами регистров и некоторые регистры могут отсутствовать или быть поразному устроены, у программистов далеко не всегда есть возможность пользоваться регистрами непосредственно. В действительности это ограничение несущественно и не мешает создавать переносимые программы, такие, которые могут выполняться на разных компьютерах, не принимая во внимание их не очень значительные отличия. Постоянные запоминающие устройства включают накопители на жестких магнитных дисках (англ. hard disk drives – HDD), накопители на гибких магнитных дисках (дискетах, англ. floppy disk drives – FDD), накопители на магнитных лентах (стримеры, англ. streamers), разнообразные оптические накопители (MO, MD, CDROM, DVDROM, DVDRAM, BD и др.), flashпамять, твердотельные накопители (англ. solid state drives, SSD), гибридные, сетевые устройства хранения информации и множество менее распространенных устройств. ЗапиВ1. Основные сведения об аппаратной части компьютеров 9
санная на них информация сохраняется и после выключения питания компьютера. Она может быть прочитана впоследствии, а на некоторых типах носителей в дальнейшем полностью или частично стерта и перезаписана какойто другой информацией. Большинство этих устройств характеризуется последовательным доступом к информации, который заключается в следующем: 1) устанавливается исходная точка начала нужного фрагмента информации; 2) фрагмент информации записывается от начала до конца последовательно – блок за блоком; 3) точно в такой же последовательности он и считывается. К последовательным устройствам относятся также клавиатура (символы набираются друг за другом), текстовое окно консоли (области экрана, куда программа осуществляет вывод текста) и большинство внешних портов для подключения компьютера к другим устройствам – USB (универсальная последовательная шина, англ. universal serial bus), SATA (Serial AT Attachment), COMпорт (последовательный коммуникационный порт), Ethernet, IEEE 1394 (FireWire), Bluetooth и т.д. Все устройства такого рода собирательно назовем последовательными. Стандартная библиотека языка Си включает мощные и универсальные средства работы с такими устройствами. Несмотря на важность для функционирования компьютера и других аппаратных средств, при изучении программирования на языках высокого уровня, таких, как Си, в общем случае нет смысла акцентировать на них внимание. Имеющиеся средства языка достаточны для работы с ними вследствие единообразия его механизмов. В2. Классификация программного обеспечения Программные средства являются совокупностью взаимодействующих друг с другом отдельных программ, подобно тому, как аппаратные средства состоят из связанных определенным образом друг с другом выполняющих различные функции компонентов – процессоров, источников вторичного электропитания, жестких дисков и др. Программы могут обмениваться как информацией (данными), так и указа10 Введение. Базовые понятия программирования