Разработка функций и модулей пользователя на языке C в среде VS C++
Покупка
Тематика:
Программирование на C и C++
Год издания: 2020
Кол-во страниц: 114
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7038-5340-5
Артикул: 804306.01.99
Приведены краткие теоретические сведения по организации подпрограмм и модулей пользователей на языке C, изложены принципы организации функций в языке C, подробно рассматриваются вопросы передачи параметров в подпрограммы. Большое внимание уделено особенностям и трудностям передачи массивов в подпрограммы в качестве параметров. Приведены комплекты заданий на составление программ с подпрограммами. Рассмотрена организация рекурсивных, перегружаемых функций, подпрограмм с переменным числом параметров, с параметрами по умолчанию. Показано использование шаблонов функций и динамических массивов. Отдельная глава учебного пособия посвящена созданию пользовательских библиотек функций (модулей).
Для студентов машино- и приборостроительных специальностей. Может быть полезно преподавателям для проведения практических занятий.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 15.03.06: Мехатроника и роботехника
- 16.03.01: Техническая физика
- 27.03.04: Управление в технических системах
- ВО - Специалитет
- 11.05.01: Радиоэлектронные системы и комплексы
- 23.05.01: Наземные транспортно-технологические средства
- 24.05.06: Системы управления летательными аппаратами
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Ю.Е. Алексеев, А.В. Куров Разработка функций и модулей пользователя на языке C в среде VS C++ Модуль 3 Учебное пособие Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)»
ISBN 978-5-7038-5340-5 УДК 004.43 ББК 32.973 А47 Издание доступно в электронном виде по адресу https://bmstu.press/catalog/item/6798 Факультет «Информатика и системы управления» Кафедра «Программное обеспечение ЭВМ и информационные технологии» Рекомендовано Научно-методическим советом МГТУ им. Н.Э. Баумана в качестве учебного пособия Рецензенты: канд. техн. наук, доцент ДКИ МИЭМ НИУ ВШЭ Э.С. Клышинский; канд. техн. наук, доцент кафедры «Системы автоматизированного проектирования» МГТУ им. Н. Э. Баумана В.Г. Федорук © МГТУ им. Н.Э. Баумана, 2020 © Оформление. Издательство МГТУ им. Н.Э. Баумана, 2020 Алексеев, Ю. Е. А47 Разработка функций и модулей пользователя на языке C в среде VS C++. Модуль 3 : учебное пособие / Ю. Е. Алексеев, А. В. Куров. — Москва : Издательство МГТУ им. Н. Э. Баумана, 2020. — 109, [5] с. : ил. ISBN 978-5-7038-5340-5 Приведены краткие теоретические сведения по организации подпрограмм и модулей пользователей на языке C, изложены принципы организации функций в языке C, подробно рассматриваются вопросы передачи параметров в подпрограммы. Большое внимание уделено особенностям и трудностям передачи массивов в подпрограммы в качестве параметров. Приведены комплекты заданий на составление программ с подпрограммами. Рассмотрена организация рекурсивных, перегружаемых функций, подпрограмм с переменным числом параметров, с параметрами по умолчанию. Показано использование шаблонов функций и динамических массивов. Отдельная глава учебного пособия посвящена созданию пользовательских библиотек функций (модулей). Для студентов машино- и приборостроительных специальностей. Может быть полезно преподавателям для проведения практических занятий. УДК 004.43 ББК 32.973
Предисловие В настоящем издании продолжено рассмотрение основ программиро вания на языке C в среде программирования MS VS, начатое в учебных пособиях «Введение в информационные технологии и программирование на языке C в среде VS C++», «Программирование инженерных задач на базе использования алгоритмов циклической структуры на языке C в среде VS C++» (соответственно модули 1 и 2 дисциплины «Информатика»). Теоретический материал сопровождается примерами программ, а также комплектами заданий для выполнения лабораторных работ. Пособие предназначено для самостоятельной проработки студентами материала модуля 3 дисциплины «Информатика» по направлениям подготовки 09.03.01 «Информатика и вычислительная техника», 11.05.01 «Радиоэлектронные системы и комплексы», 15.03.06 «Мехатроника и робототехника», 16.03.01 «Техническая физика», 23.05.01 «Наземные транспортно-технологические средства», 24.05.06 «Системы управления летательными аппаратами», 27.03.04 «Управление в технических системах». Материал учебного пособия имеет важное значение для освоения про граммирования, поскольку разработка программных продуктов невозможна без использования подпрограмм. Это положение наглядно демонстрирует структура любой программы, написанной на языке C, так как любая программа на этом языке представляет собой совокупность подпрограмм, причем основная программа также оформляется в виде подпрограммы. В пособии рассматриваются также возможности языка программирования по созданию библиотек подпрограмм — модулей. После изучения материала данного пособия студенты будут знать и уметь следующее: •• объяснять основные термины и понятия, используемые в процессе разработки программ на языке программирования: •• разрабатывать программы с использованием подпрограмм; •• реализовывать механизмы передачи параметров в подпрограммы; •• знать принципы организации модулей пользователя и иметь навыки разработки собственных библиотек; •• анализировать ошибки, возникающие при создании программ с при менением подпрограмм, проводить тестирование и отладку программ, в том числе с использованием встроенных средств отладки среды программирования. Изучение материала, изложенного в данном учебном пособии, предпо лагает предварительное освоение следующих предметов (в рамках школьного курса):
•• основ информатики; •• математики (функции, производная, интеграл, геометрический смысл производной и интеграла); •• иностранного языка (английский). Результаты обучения оцениваются при выполнении и защите лабора торных работ, а также при проведении рубежного контроля. В соответствии с действующей программой дисциплины на лекционных занятиях рассматриваются общие вопросы информатики: понятия информатики и информационных технологий, свойства информации, математические и логические основы ЭВМ, технические средства и программное обеспечение, сети ЭВМ, базы данных. Изложение основ программирования и изучение конкретного языка программирования осуществляется только на практических занятиях и в процессе выполнения лабораторных работ. Лабораторные работы предназначены для приобретения навыков и опыта практического решения инженерных задач, предусматривающего разработку алгоритма и его реализацию на конкретном языке программирования. Значительную роль в обучении программированию играет самостоятельная работа студентов, для обеспечения эффективности которой большую помощь окажет настоящее учебное пособие. Изложенные в нем основные теоретические положения, иллюстрируемые наглядными практическими примерами, способствуют освоению студентами особенностей как используемого языка программирования, так и алгоритмов решения задач. Материалом пособия можно воспользоваться при подготовке к вы полнению лабораторных работ и рубежного контроля. Поскольку задания, предлагаемые на рубежном контроле, соответствуют по уровню сложности заданиям, рассматриваемым в настоящем издании, студент, разрабатывая предлагаемые программы, заранее может проверить и оценить уровень своей подготовки до проведения контрольного мероприятия. В пособии приведены примеры реализации программ с использованием подпрограмм. Каждая рассматриваемая тема завершается списком вопросов для са моконтроля, а также комплектом заданий, которые используются при проведении лабораторных работ. Эти задания следует выполнять строго по графику учебной работы, обсуждая результаты на семинарах и консультациях. Текущий контроль проводится во время изучения всего модуля, его ито говые результаты складываются из оценок по результатам защиты лабораторных работ, выполнения рубежного контроля и работы на практических занятиях. Для сдачи каждого модуля студент должен выполнить все контрольные мероприятия, сдать готовые лабораторные работы и защитить их. Промежуточная аттестация по дисциплине (экзамен) основывается на результатах текущего контроля, учитываются ответы на вопросы по лекционному материалу. Успешная аттестация служит для оценки владения сту
дентом ключевыми, базовыми положениями предметной области, умением их применять при решении практических задач. Освоение дисциплины, ее успешное завершение на стадии промежуточ ной аттестации возможно только при регулярной работе во время семестра и при планомерном прохождении текущего контроля. Опыт преподавания дисциплины и приема экзаменов показывает, что попытки студентов во время экзамена сдать теоретический материал и выполнить задания (написать программы) по несданным модулям редко оказываются успешными.
Введение Программирование с использованием подпрограмм играет важную роль в разработке программного обеспечения, так как реализация решения практически любой задачи выполняется в виде совокупности подпрограмм. Использование подпрограмм позволяет уменьшить размер программы (если в разных частях программы необходимо выполнять обработку данных по одному алгоритму) и сделать ее исходный текст более удобным для понимания процесса обработки данных (если алгоритм подпрограммы обладает функциональной законченностью, а имя подпрограммы отражает ее назначение, например, как у стандартных подпрограмм sin(X), fabs(X) и др.). Программирование с применением подпрограмм позволяет сократить время разработки программного продукта за счет возможности распараллеливания процесса разработки при наличии нескольких программистов. Даже в условиях разработки программного обеспечения одним программистом удается сэкономить время благодаря тому, что программист может создавать отдельные подпрограммы до разработки алгоритмов решения всех подзадач. В этом случае параллельно с программированием можно продолжать разработку алгоритмов еще не решенных задач. При наличии нескольких исполнителей экономия времени очевидна, поскольку процесс создания нескольких подпрограмм можно поручить разным программистам, т. е. подпрограммы будут разрабатываться одновременно (параллельно). Для обеспечения высокого качества создаваемого программного обе спечения и повышения эффективности процесса разработки следует руководствоваться определенными принципами, которые являются основой технологии структурного программирования. 1. Принцип модульного программирования означает программирование с использованием подпрограмм, т. е. разбиение всей большой программы на модули (подпрограммы). Разбиение на модули выполняется прежде всего по функциональному принципу. Каждый модуль должен реализовывать одну, но законченную, функцию. Следовательно, эта функция должна быть реализована в рамках подпрограммы полностью. 2. Разрабатываемые модули должны соответствовать целому ряду требо ваний. Размер модуля должен составлять 10–60 строк. Если размер модуля будет меньше, это может означать, что функция реализуется не целиком, а лишь частично. Если размер модуля будет превышать норму, это усложнит процесс его отладки, поскольку человеку легче воспринять текст, размещенный в пределах одной стандартной страницы (как раз 60 строк). Если
объем подпрограммы больше 60 строк, это может свидетельствовать о том, что программа реализует не одну, а несколько функций. 3. При проектировании модулей необходимо стремиться к минимиза ции числа межмодульных связей (числа передаваемых между модулями параметров). Каждый модуль должен иметь один вход и один выход. Работа модуля не должна зависеть от количества предшествующих обращений к нему, т. е. от предыстории. 4. Модули должны образовывать иерархическую структуру. В рамках иерархической структуры модули одного уровня не должны взаимодействовать друг с другом. При обращении к модулю управление должно быть возвращено тому модулю, который произвел его вызов. 5. После разработки иерархической структуры программного комплек са необходимо решить вопрос о том, в какой последовательности вести процесс проектирования. Возможны две технологии: «сверху вниз» и «снизу вверх». В первом случае процесс проектирования предполагает первоочередную разработку модулей верхнего уровня с постепенным продвижением к модулям более низких уровней. Во втором случае процесс выполняется в противоположном порядке, т. е. в первую очередь проектируются модули самого нижнего уровня с постепенным переходом к модулям верхних уровней. Предпочтительной является технология «сверху вниз», так как в этом случае на начальных этапах решаются наиболее сложные задачи, связанные с определением взаимодействия модулей, решением основных стратегических задач. Во втором случае процесс разработки программного комплекса начинается с проектирования модулей нижних уровней, которые являются самыми простыми. По мере продвижения вверх могут возникнуть нестыковки, связанные с непродуманностью взаимодействия модулей. Устранение недостатков может потребовать значительных затрат времени, увеличения сроков разработки за счет необходимости решения ранее нерешенных задач и внесения изменений (переделки) в уже спроектированные модули. При разработке каждого конкретного модуля следует использовать огра ниченный набор базовых управляющих структур. К ним относят: следование, ветвление, цикл «пока». Возможно использование структуры выбора, являющейся обобщением структуры ветвления, цикла «до — тех пор — пока». Следует заметить, что в языке C имеется также цикл с параметром. При его использовании надо знать, в виде какой из двух управляющих структур он реализован. В языке C цикл с параметром реализован как цикл «пока». 6. При разработке подпрограммы следует руководствоваться также принципом пошаговой детализации. Данный принцип предполагает постепенную разработку модуля (в виде отдельных шагов). На каждом шаге необходимо выполнять лишь небольшие расширения и уточнения. 7. Непосредственное кодирование модулей также предполагает следова ние определенным правилам. Имена переменных должны выражать суть соответствующей величины. При записи выражений в случае возникновения сомнений в приоритете опе
раций и во избежание ошибки следует использовать скобки. В одной строке программы следует записывать один оператор или одну управляющую структуру. Однородную группу операторов рекомендуется записывать с отступом вправо, что облегчает чтение и восприятие программы. Программы следует сопровождать комментариями. Опыт программирования показывает, что наличие строки комментария на 5–10 строк кода делает программу самодокументируемой и не требует отдельного описания. Ключевые слова: модуль, параметр, перегружаемая функция, передача параметра по адресу, передача параметра по значению, подпрограмма, фактический параметр, формальный параметр, функция.
ГЛАВА 1. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ 1.1. Объявление функций Подпрограмму можно определить как относительно самостоятельный фрагмент программы, оформленный таким образом, что его можно выполнять многократно, передавая ему управление из разных частей программы для обработки разных данных В языке C есть только один вид подпрограмм — функции. В языке C они являются фактически эквивалентом функций и подпрограмм общего вида языка Фортран или процедур и функций языка Паскаль. С помощью определенной организации функций в языке C можно фактически получать аналоги процедур и функций языка Паскаль, который, в свою очередь, также позволяет работать с функциями как с процедурами. Функцию можно определить как именованную последовательность описаний и операторов, выполняющих определенное законченное действие. В функцию можно передавать параметры (исходные данные) и возвращать значения (результаты). Обращение к функции проводится с помощью ее имени. Любая программа на языке C состоит из функций, одна из которых должна иметь имя main, с нее начинается выполнение программы. Функция начинает выполняться в момент ее вызова. При работе с функциями следует различать термины: объявление функ ции, определение функции и обращение к функции (вызов функции). Объявление функции (прототип функции) задает ее имя, тип возвраща емого значения и список передаваемых параметров. Обычно это заголовок функции, за которым следует знак «;». Заголовок функции имеет следующий вид: тип имя (список), где тип — тип возвращаемого функцией значения; имя — имя функции; список — список формальных параметров, который может быть пустым. Имя функции строится так же, как и прочие имена в языке C. Имя функ ции задает ее разработчик, и оно должно быть уникальным в своем модуле. Тип возвращаемого значения может быть любым — простым или указа телем на структурный тип или функцию. Если функция не должна возвращать никакого значения, указывается пустой тип void.
Список формальных параметров определяет величины, которые требу ется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми и оформляются подобно определениям переменных. Определение функции содержит кроме заголовка тело функции, представ ляющее собой блок. Блок функции, как и блок основной функции main, может содержать объявления констант и переменных. Операторы тела функции описывают процесс обработки данных. В объявлении функции имена параметров можно не указывать, а в опре делении функции они должны присутствовать. Выход из функции и возвращение значений (результатов) в вызвавшую ее функцию осуществляется оператором return — выражение. Функция может содержать несколько операторов return (это опреде ляется особенностями реализуемого алгоритма), причем каждый из этих операторов может содержать свое выражение. Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции. В функциях типа void операторы return не должны содержать выражений (просто обозначая места выхода из функций) или вовсе отсутствовать (в этом случае выход из функции происходит при достижении конца ее блока). Обращение к функции выполняется по ее имени и описывает фактиче ские параметры, обработку которых должна выполнить функция. Выполнение обращения приводит к передаче управления в тело функции. Вызовов одной функции может быть несколько, а фактические параметры в них могут быть разными. Для вызова функции следует указать ее имя, за которым в круглых скоб ках через запятую перечисляются фактические параметры. Вызов функции может находиться в любом месте программы, где согласно синтаксису языка допустимо выражение того типа, который возвращает функция. Если тип возвращаемого значения — не void, обращение к функции может входить в состав выражений или, например, располагаться в правой части оператора присваивания. Между фактическими и формальными параметрами функции должно выполняться соответствие по их количеству, порядку следования и типу. При вызове функции фактические параметры как бы занимают в ал горитме места соответствующих формальных параметров (уточнение будет дано позже), после чего алгоритм выполняется. Объявление или определение функции должно находиться в тексте про граммы раньше вызова функции, для того чтобы компилятор мог правильно построить вызов. Если все определения функций разместить после главной, а перед ней разместить их объявления, то из любой функции можно будет вызывать любую. В качестве простейшего примера организации функции приведем при мер объявления и вызова функции, возвращающей первое из двух значений, представленных параметрами, кратное 5. Если оба значения не кратны 5, функция возвращает значение –1.