Основы программирования на языке С
Покупка
Основная коллекция
Тематика:
Программирование на C и C++
Издательство:
НИЦ ИНФРА-М
Год издания: 2023
Кол-во страниц: 269
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-16-015470-1
ISBN-онлайн: 978-5-16-104798-9
Артикул: 151650.13.01
Доступ онлайн
В корзину
Учебное пособие является начальным курсом программирования на языке С. Рассмотрены основы программирования, приемы и методы в стиле модульного программирования. Может быть использовано как руководство по языку С, содержит многочисленные примеры, оттестированные на компьютере. Лабораторный практикум поможет читателям практически освоить приемы программирования и технические возможности классического С, изложенные в данном пособии.
Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения.
Рекомендовано студентам, изучающим дисциплины «Основы программирования», «Языки высокого уровня», «Информатика», а также преподавателям данных курсов в высших учебных заведениях.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.04: Программная инженерия
- ВО - Магистратура
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С Л.Г. ГАГАРИНА Е.Г. ДОРОГОВА 2-е издание, исправленное и дополненное УЧЕБНОЕ ПОСОБИЕ Рекомендовано Межрегиональным учебно-методическим советом профессионального образования в качестве учебного пособия для учащихся учебных заведений среднего профессионального образования, обучающихся по основной образовательной программе среднего профессионального образования Москва ИНФРА-М 2023
УДК 004.43(075.8) ББК 32.973-018.1я73 Г12 Гагарина Л.Г. Г12 Основы про граммирования на языке С : учебное пособие / Л.Г. Га- гарина, Е.Г. Дорогова. — 2-е изд., испр. и доп. — Москва : ИНФРА-М, 2023. — 269 с. — (Высшее образование: Бакалавриат). — DOI 10.12737/1035562. ISBN 978-5-16-015470-1 (print) ISBN 978-5-16-104798-9 (online) Учебное пособие является начальным курсом программирования на язы- ке С. Рассмотрены основы программирования, приемы и методы в стиле модульного программирования. Может быть использовано как руковод- ство по языку С, содержит многочисленные примеры, оттестированные на компьютере. Лабораторный практикум поможет читателям практически освоить приемы программирования и технические возможности классиче- ского С, изложенные в данном пособии. Соответствует требованиям федеральных государственных образова- тельных стандартов высшего образования последнего поколения. Рекомендовано студентам, изучающим дисциплины «Основы про- граммирования», «Языки высокого уровня», «Информатика», а также пре- подавателям данных курсов в высших учебных заведениях. УДК 004.43(075.8) ББК 32.973-018.1я73 Р е ц е н з е н т ы: Е.М. Портнов, доктор технических наук, профессор; Е.С. Янакова, доктор технических наук © Дорогов В.Г., Дорогова Е.Г., 2011 © Гагарина Л.Г., Дорогова Е.Г., 2021, с изменениями ISBN 978-5-16-015470-1 (print) ISBN 978-5-16-104798-9 (online)
Введение Язык С разработан и реализован в 1972 г. сотрудником фирмы AT&T Bell Laboratories Денисом Ритчи во время работы над опе- рационной системой UNIX. Он не планировал создание универ- сального языка для широкого использования, он создавал инстру- ментальный язык операционной системы UNIX для сотрудников фирмы AT&T. При создании системных про грамм про граммист обязан уде- лять особое внимание быстродействию, надежности и эффектив- ности про граммного кода, что обычно достигается использованием ассемблера, но при решении таких сложных задач, как ОС, возникает желание использовать более производительные средства про граммирования. Именно так и возник язык С — он объединил в себе гибкость ассемблера и удобство языков высокого уровня. Рост популярности С, с одной стороны, и отсутствие утвержденного стандарта — с другой привели к тому, что в создании компиляторов начали участвовать коллективы разработчиков, ранее не причастных к проектированию языка, что привело к возникновению проблемы совместимости про грамм. Про граммы, написанные и отлаженные с применением средств про граммирования одного разработчика, могли не работать на компиляторе другого разработчика. В 1983 г. Американский институт национальных стандартов (American National Standards Institute — ANSI) учредил комитет, перед которым была поставлена цель выработать «однозначное и машинно-независимое определение языка С», полностью сохранив при этом его стилистику. Результатом работы этого комитета и явился стандарт ANSI языка С. Кроме того, существует еще один стандарт языка С — ISO (International Standart Organization). Современные компиляторы обеспечивают поддержку значительной части обоих стандартов, приведем наиболее известные из них: компилятор GNU, Intel C++, Borland C++, Visual C++. Настоящее пособие предназначено для изучения про- граммирования на стандартном языке С. Большое внимание уде- лено как ситаксису и конструкциям языка, так и их практическому использованию при решении типовых задач. Наряду с простым перечис лением правил широко используются изучение, написание и проработка примеров. Следует отметить, что изучать язык про граммирования только по книге или лекциям — пустая трата времени. Для достижения
успеха в про граммировании необходима практика, поэтому предпо- лагается, что читатели будут выполнять упражнения, приведенные в пособии, на компьютере. Лабораторный практикум охватывает все основные темы и поможет читателю освоить инструменты про- граммирования на практике. Все про граммы тестировались в MS Visual Studio 2010 под управ- лением Windows 7. В заключение отметим, что данное пособие предназначено для студентов бакалавриата и формирует компетенции по сле- дующим дисциплинам: «Основы про граммирования», «Языки вы- сокого уровня», «Информатика». В результате студенты будут: знать • современные информационные технологии и про граммные средства и то, как их использовать при решении задач профес- сиональной деятельности; уметь • выбирать современные информационные технологии и про- граммные средства, в том числе отечественного производства, при решении задач профессиональной деятельности; владеть • навыками использования современных информационных тех- нологий и про граммных средств при решении задач профессио- нальной деятельности. Также пособие формирует следующие общие навыки в области про граммирования: • способность использовать языки про граммирования для со- здания про граммного обеспечения; • способность разрабатывать и отлаживать про граммный код на языке С.
Глава 1. БАЗОВЫЕ ПОНЯТИЯ ПРО ГРАММИРОВАНИЯ Под про граммированием чаще всего понимают процесс создания компьютерных про грамм с помощью языков про граммирования. Про граммирование сочетает в себе элементы математики и инже- нерии. В узком смысле слова про граммирование рассматривается как кодирование или реализация алгоритма на некотором языке про граммирования. Осваивая про граммирование, мы приобретаем два важных на- выка: • изучаем синтаксис языка про граммирования — слова, грамма- тику и пунктуацию, узнаем значение каждой команды и каждой функции, учимся правильно их использовать; • учимся логике про граммирования — узнаем, как выполнить ту или иную задачу, используя язык про граммирования. Это уни- версальный навык, который может быть применен для любого языка про граммирования. Если вы прочувствуете логику про- граммирования на одном языке, то для того, чтобы научиться работать с другим, останется только изучить его синтаксис. Чтобы научиться про граммировать, необходимо освоить оба эти навыка, в данном курсе лекций мы будем изучать их параллельно. Рассмотрим этапы создания про граммных систем. Как правило, процесс создания про грамм состоит из трех этапов: • формализация задачи — это создание технического задания; • разработка алгоритма решения; • про граммирование: создание текста, отладка, тестирование. Техническое задание (ТЗ) — это исходный документ для проекти- рования разработки про граммы. ТЗ содержит основные технические требования, предъявляемые к про грамме, и исходные данные для раз- работки; в ТЗ указываются назначение, область применения, сроки исполнения и многое другое. Как правило, ТЗ составляют на основе анализа результатов предварительных исследований, расчетов и моде- лирования. Этот этап работы над про граммой относится к дисциплине «проектирование», и мы не будем его подробно рассматривать. 1.1. АЛГОРИТМИЗАЦИЯ ЗАДАЧИ Алгоритм связан с языком про граммирования, но тем не менее не зависит от него, прежде всего потому, что в языках про-
граммирования есть общие, характерные для всех языков инст- рументы, на которые и опирается алгоритм. Заметим, что алгоритмизация задачи — это всегда сокращение круга понятий, которыми можно оперировать при решении задачи, это прежде всего переход от терминов и понятий естественного языка к терминам и понятиям языка про граммирования. Связь между алгоритмом решения и языком про граммирования очень тес ная. Проводя аналогию с естественными языками, заметим, что: • человек думает только о том, что можно выразить словами; • про граммист решает задачи на компьютере только в тех тер- минах и с использованием тех конструкций, которые есть в языке про граммирования. Что же такое алгоритм? Приведем самое общее его определение. Алгоритм решения — точные предписания (инструкции), ко- торые определяют процесс, ведущий от исходных данных к требуе- мому конечному результату. Поскольку алгоритм — это «точная инструкция», а инструкции встречаются практически во всех областях человеческой деятель- ности, то возможны самые разнообразные алгоритмы, например алгоритм проведения физического эксперимента, сборки шкафа или телевизора, обработки детали. Однако следует заметить, что не всякая инструкция есть алгоритм. Инструкция становится алгоритмом, когда процесс преобразо- вания исходной информации к требуемому конечному результату задается однозначно и выполняется за конечное число элемен- тарных дискретных шагов. К основным способам описания алгоритмов можно отнести сле- дующие: • словесно-формульный (на естественном языке); • в виде схемы (схема алгоритма); • с использованием специальных алгоритмических языков (на- пример языка UML). 1.2. СХЕМА АЛГОРИТМА ПРО ГРАММЫ Схема алгоритма — это графическое представление про граммы или алгоритма с использованием стандартных графических эле- ментов (прямоугольников, ромбов, трапеций и др.), обозначающих команды, действия, данные и т.п. Геометрические фигуры представляют блоки про граммы, ко- торые связаны линиями со стрелками, указывающими направления потока управления. В блоках записывается последовательность действий. Элементы схемы-алгоритма показаны на рис. 1.1.
Начало или конец. Внутри фигуры пишут «начало» или «конец» соответственно Прямоугольником обозначается операция или группа операций. Например, присваивание Внутри ромба пишутся проверяемые условия. Например, «b < a» Функция. Внутри указывают имя функции, передаваемые параметры и возвращаемое значение Параллелограмм обозначает операции ввода-вывода данных Начало цикла. Внутри указывают параметры цикла Указание связи между прерванными линиями, соединяющими блоки N Рис. 1.1. Основные элементы схемы алгоритма 1.3. ПРИМЕР АЛГОРИТМИЗАЦИИ Поставим перед собой задачу: составить алгоритм про граммы для расчета налога на продажи. На первом этапе опишем задачу как можно подробнее. Большинство про грамм подчиняются алгоритму, включающему три этапа: ввод данных, их обработку и вывод результата, например на экран дисплея. Рассмотрим подробнее кажый из них. Ввод данных: для расчета необходимы два параметра — объем продаж и ставка налога, причем ставка налога — величина по- стоянная, объем продаж может меняться. Поскольку про грамма используется неоднократно, объем продаж следует вводить при каждом новом расчете. Ставка налога меняется редко, поэтому может быть определена в тексте про граммы. Опишем ввод короче:
Во-первых, указать пользователю, что он должен ввести сумму продаж (sum), показатель вводится с клавиатуры. Во-вторых, указать компьютеру величину налога на продажи (rate), задать в виде константы в тексте про граммы. Обработка: чтобы рассчитать сумму налога (tax), необходимо умножить сумму продаж на ставку налога. Вывод данных: результат вычислений (tax) должен быть выведен на экран дисплея. На втором этапе рисуем схему алгоритма, используя принятые обозначения (рис. 1.2). Начало rate=0.2 sum > 0 Конец Нет Сообщение об ошибке tax = sum * rate tax (вывод на терминал) Да sum (ввод с клавиатуры) Рис. 1.2. Схема алгоритма решения Обратите внимание на блок обработки ошибок при вводе инфор- мации с клавиатуры — это необходимая часть любой про граммы, принимающей данные от человека, который является источником потенциальных ошибок. Можно избежать проблем в будущем, если на входе в обрабатывающие блоки отсекать некорректные данные, в нашем случае это простейшая проверка, значение суммы не может быть отрицательным значением. Анализируя полученный алгоритм, отметим, что объем вспомогательной части (ввод-вывод данных
и контроль ошибок) намного превосходит содержательную часть — обработку, ради которой и составлялся алгоритм. Это типичная си- туация для задач, решаемых на компьютере, в среднем половина про- граммного кода посвящена вспомогательной части работы. 1.4. ЭТАПЫ ТРАНСЛЯЦИИ ПРО ГРАММЫ По мере развития вычислительной техники увеличивались па- мять и быстродействие компьютеров, а значит, становилось воз- можным создание все более длинных и сложных про грамм. Самые первые про граммы писались в машинных кодах. Данные и про грамма составляли единое целое, структура такой про граммы была примитивна. Очень скоро появились первые языки про- граммирования — так называемые ассемблеры, они отличаются от машинных команд лишь заменой числовых кодов на символьные названия инструкций. Поэтому про граммирование на ассемблере мало отличается от про граммирования в машинных кодах, это весьма трудоемкий процесс, требующий к тому же довольно вы- сокой квалификации про граммиста. На следующем этапе развития про граммирования появились языки высокого уровня — в них каждый оператор, написанный про граммистом, при исполнении про граммы заменялся уже целым набором машинных инструкций. Большим преимуществом языков высокого уровня было то, что они позволяли забыть о том, на каком именно компьютере про грамма исполняется, т.е. про граммы стали переносимы с одного компьютера на другой. Для того чтобы исполнить про грамму, ее нужно разместить в па- мяти компьютера (рис. 1.3), но единственный язык, напрямую вы- полняемый процессором — это машинный код. Перевод исходного текста на языке высокого уровня, написанного про граммистом, в машинный код выполняют специальные про граммы, называемые трансляторами. Про грамма Данные Алгоритм Память Код = + Код Рис. 1.3. Размещение про граммы и данных в памяти компьютера
Транслятор — про грамма, которая принимает на вход про- грамму на одном языке (он называется исходным язык) и преобра- зует ее в про грамму, написанную на другом языке (он называется целевым языком). В качестве целевого языка наиболее часто вы- ступает машинный код, так как он может непосредственно испол- няться компьютером. Существует две разновидности трансляторов. Компиляторы — выдают результат в виде исполняемого файла. Этот файл может быть запущен самостоятельно без создавшего его транслятора. Интерпретаторы — исполняют про грамму после построчного разбора. Про грамма транслируется (интерпретируется) при каждом запуске и требует наличия на компьютере как интерпретатора, так и исходного кода. В современных компьютерах трансляция исходного языка в це- левой язык проходит в несколько этапов, представленных на рис. 1.4: • компиляция (обработка исходного текста компилятором); • компоновка (последующая обработка редактором связей). Компилятор — это про грамма, которая считывает текст про граммы на исходном языке (например на С) из файла и преобразует его в последовательность команд на языке, понятном компьютеру (этот процесс называется «компиляция про граммы»). Компилятор прео- бразует сразу весь текст про граммы и сохраняет результат на диске, так что про грамму можно запустить в любое время. Основные за- дачи компиляции — анализ исходного текста про граммы и проверка возможных ошибок (компилятор проверяет только синтаксические ошибки про граммирования, т.е. соответствие написанной про граммы правилам языка про граммирования), затем компилятор создает про- межуточную форму про граммы — объектный модуль. Редактор связей выполняет дальнейшее преобразование про- граммы, в результате которого объектный код превращается в ма- шинный код, называемый исполняемым модулем про граммы. Кроме того, на этом этапе происходит соединение нескольких объектных модулей в единый исполняемый модуль и определяется способ за- грузки полученной про граммы в память. Если текст про граммы состоит из нескольких частей, располо- женных в различных файлах, говорят, что про грамма представ- ляет собой проект и состоит из нескольких модулей. В этом случае каждый модуль компилируется отдельно, а затем полученные объ- ектные модули соединяются в единый исполняемый модуль. Мы рассмотрели этапы трансляции, в результате которых про- грамма преобразуется из исходного модуля, написанного на языке
Доступ онлайн
В корзину