Студопедия — Функции. Алгоритм решения задачи реализуется путем вызовов функций
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Функции. Алгоритм решения задачи реализуется путем вызовов функций






 

Алгоритм решения задачи реализуется путем вызовов функций. Одна из функций считается главной и имеет фиксиро­ванное имя, эта функция вызывается ОС при запуске программы, а из нее могут вызываться другие функции. При работе в MS-DOS главная функция имеет имя main.

Описание функции имеет общий синтаксис внешнего опреде­ления и отличается от описания переменного синтаксисом декларатора-инициализатора, который содержит идентификатор (имя) функции и список параметров в круглых скобках.

Тип функции - тип значения, возвращаемого функцией. Функция может воз­вращать значение любого типа, кроме массива и функции, но до­пускается возвращать указатель на массив и указатель на функ­цию. Если функция не возвращает никакого значения, ее тип обо­значается ключевым словом void.

В списке параметров указываются типы и имена параметров, передаваемых в функцию при ее вызове. Если функция не требует передачи ей аргументов, список параметров может быть пустым. Для Си++ рекомен­дуется в качестве пустого списка параметров указывать ключевое слово void.

Полное описание функции содержит также тело функции, представляющее собой составной оператор.

Составной оператор - это последовательность описаний внутренних данных и операто­ров, заключенная в фигурные скобки. В C++ описание функций не может быть вложенным, в теле функции нельзя объявить другую функцию.

Например, функция, возвращающая среднее арифметическое трех вещественных данных, может быть описана так:

double srd (double x, double у, double z) { double s;

s = x + у + z;

return s /3;

}

Для вызова такой функции при условии, что предварительно объявлены переменные р, a, b и с, можно записать оператор: р = srd(a, b, с);

Функция должна быть описана до того, как встретится ее пер­вый вызов. Это не всегда возможно, например, когда две функции вызывают друг друга. Если программа состоит из нескольких файлов, полное описание функции должно присутствовать только в одном файле, но вызовы этой функции возможны из разных файлов программы. Чтобы разрешить подобные противоречия, предусмотрены две формы описания: полнаяформа, называемая также определением функции, и сокращенная, назы­ваемая описанием прототипа функции.

Прототип функции содер­жит только заголовок функции и задает имя функ­ции, тип возвращаемого значения и типы параметров. По этой информации при компиляции программного файла прове­ряется правильность записи вызова функции и использования воз­вращаемого значения. В C++ требуется, чтобы вызову любой функции предшествовало в том же файле либо полное определе­ние функции, либо описание ее прототипа.

Дополнительные возможности описания функций в C++:

1) При описании прототипа функции можно не указывать име­на параметров, достаточно указать их типы.

2) Для части параметров функции можно задавать значение по Умолчанию, что позволяет вызывать функцию с меньшим числом аргументов, что предусмотрено описанием функции. Значение по Умолчанию указывается только для последних параметров в списке. Например, функция srdописана так:

double srd (double x, double y, double z=0) { double s;

s = x + у + z;

return s / 3;

}

К такой функции можно обращаться с двумя и с тремя аргу­ментами.

3) Функция может иметь переменное число параметров, для части параметров могут быть неизвестны их типы. Неизвестная часть списка параметров обозначается многоточием.

Например, функция с прототипом

int varfuncparam (int n,...);

имеет один обязательный параметр типа int и неопределенное число параметров неизвестных типов. Правильная интерпретация такого списка параметров в теле функции требует от программи­ста дополнительных усилий.

При вызове функции аргументы передаются в функцию по значениям, т.е для каждого аргумента в памяти создается его копия, которая и используется при вычислении функции. Любые изменения значений аргументов в теле функции теряются при выходе из нее. Если аргумент является массивом, в функцию передается указатель на начальный элемент этого масси­ва; присваивания элементам массива в теле функции изменяют соответствующие значения в массиве аргумента.

Сигнатура функции - определяется типом возвращаемого значения и типами параметров, в C++ связывается с объявлением функции. Это позволяет назначать одинаковые имена функциям, имеющим аналогичное назначение, но использующим параметры разных типов. Например, наряду с функцией srd для вещественных аргументов, в той же программе может присутствовать функция

double srd (int x, int у, int z = 0) { int s;

s = x + у + z;

return s / 3; }

Функция, в теле которой отсутствуют операторы цикла и пере­ключатели, может быть объявлена с дополнительным описателем inline. В точке вызова такой функции при компиляции вставляется тело функции с соответствующей заменой параметров на аргументы вызова. В результате экономится время на передачу параметров, переход на подпрограмму и организацию возврата в вызывающую программу. Функции с описателем inline назы­вают встроенными; они реализуются как открытые подпрограм­мы. Типичный пример такой функции - определение наибольшего (наименьшего) из двух чисел:

inline int max (int x1, int x2) {

return xl > x2? xl: x2 }

Стандартный прототип функции main имеет вид:

int main (int argc, char *argv[ ], char *envp[ ])

В конкретной программе можно объявлять функцию main без возвращаемого значения (возвращающую тип void) с использо­ванием только двух первых параметров или вообще без парамет­ров. Параметры argc и argv служат для передачи в программу аргументов в виде массива строк:

argc - число элементов этого массива;

argv - массив указателей на элементы массива.

Первый элемент массива, на который указывает argv[0], содержит имя программы (имя ехе-файла программы), остальные элементы - аргументы из командной строки DOS;

envp - доступ к элементам текущей среды DOS.

 







Дата добавления: 2014-11-12; просмотров: 547. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Эндоскопическая диагностика язвенной болезни желудка, гастрита, опухоли Хронический гастрит - понятие клинико-анатомическое, характеризующееся определенными патоморфологическими изменениями слизистой оболочки желудка - неспецифическим воспалительным процессом...

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия