Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Основы программирования на языке С

Покупка
Основная коллекция
Артикул: 151650.13.01
Доступ онлайн
от 324 ₽
В корзину
Учебное пособие является начальным курсом программирования на языке С. Рассмотрены основы программирования, приемы и методы в стиле модульного программирования. Может быть использовано как руководство по языку С, содержит многочисленные примеры, оттестированные на компьютере. Лабораторный практикум поможет читателям практически освоить приемы программирования и технические возможности классического С, изложенные в данном пособии. Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения. Рекомендовано студентам, изучающим дисциплины «Основы программирования», «Языки высокого уровня», «Информатика», а также преподавателям данных курсов в высших учебных заведениях.
Гагарина, Л. Г. Основы программирования на языке С : учебное пособие / Л.Г. Гагарина, Е.Г. Дорогова. — 2-е изд., испр. и доп. — Москва : ИНФРА-М, 2023. — 269 с. — (Высшее образование: Бакалавриат). — DOI 10.12737/1035562. - ISBN 978-5-16-015470-1. - Текст : электронный. - URL: https://znanium.ru/catalog/product/1907425 (дата обращения: 02.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
ОСНОВЫ 

ПРОГРАММИРОВАНИЯ 

НА ЯЗЫКЕ С

Л.Г. ГАГАРИНА
Е.Г. ДОРОГОВА

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:
 
• компиляция (обработка исходного текста компилятором);
 
• компоновка (последующая обработка редактором связей).
Компилятор — это про грамма, которая считывает текст про граммы 
на исходном языке (например на С) из файла и преобразует его 
в последовательность команд на языке, понятном компьютеру (этот 
процесс называется «компиляция про граммы»). Компилятор прео-
бразует сразу весь текст про граммы и сохраняет результат на диске, 
так что про грамму можно запустить в любое время. Основные за-
дачи компиляции — анализ исходного текста про граммы и проверка 
возможных ошибок (компилятор проверяет только синтаксические 
ошибки про граммирования, т.е. соответствие написанной про граммы 
правилам языка про граммирования), затем компилятор создает про-
межуточную форму про граммы — объектный модуль.
Редактор связей выполняет дальнейшее преобразование про-
граммы, в результате которого объектный код превращается в ма-
шинный код, называемый исполняемым модулем про граммы. Кроме 
того, на этом этапе происходит соединение нескольких объектных 
модулей в единый исполняемый модуль и определяется способ за-
грузки полученной про граммы в память.
Если текст про граммы состоит из нескольких частей, располо-
женных в различных файлах, говорят, что про грамма представ-
ляет собой проект и состоит из нескольких модулей. В этом случае 
каждый модуль компилируется отдельно, а затем полученные объ-
ектные модули соединяются в единый исполняемый модуль.
Мы рассмотрели этапы трансляции, в результате которых про-
грамма преобразуется из исходного модуля, написанного на языке 

Доступ онлайн
от 324 ₽
В корзину