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

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

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

К покупке доступен более свежий выпуск Перейти