Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
49
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать
    1. Функции.

Функции являются основными компонентами при построении программ на языке С. Благодаря тому, что каждая функция представляет собой отдельный модуль, программа выглядит как модульная структура. Правильное проектирование функций в значительной степени определяет эффективность, читаемость и переносимость программного кода.

Определение функции.

В общем случае функция имеет следующий формат:

<возвращаемый тип> ИмяФункции ( параметры) {

//Здесь следует тело функции,

//состоящее из операторов }

Тип возвращаемого значения может быть одним из рассмотренных нами типов. Тип void означает, что функция не возвращает никакого значения. Кроме того, функция может возвращать и другие типы, например определенные пользователем. Если тип возвращаемого значения не указан, то по умолчанию он предполагается целочисленным (int).

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

Обратите внимание, что знак «точка с запятой» не ставится после списка параметров.

Прототипы функций.

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

<возвращаемый тип> ИмяФункции ( параметры);

В конце списка параметров стоит знак «точка с запятой», это и указывает на то, что мы имеем дело не с описанием функции, а с ее прототипом.

Функции, которые не используют параметров, обычно описываются прототипом с ключевым словом void на месте списка параметров.

Вызов по значению и вызов по ссылке.

При вызове функции фактические имена параметров заменяют формальные имена, которые использовались при описании функции. Следовательно, совсем не обязательно использовать одинаковые имена при вызове и при описании.

Аргументы в функцию обычно передаются по значению, т.е. в функцию передается только копия текущего значения. Сама переменная в этом случае внутри функции не может быть изменена. Главным ограничением вызова по значению является то, что функция может возвращать только одно значение.

При вызове по ссылке в функцию передается адрес аргумента. В этом случае копирование аргумента не выполняется, что позволяет экономить память и время выполнения. Переменная, переданная по ссылке, может быть изменена внутри функции. Это позволяет создавать функции, которые возвращают более одного параметра. Для указания того, что передача параметра выполняется по ссылке, используется знак &, который ставится перед именем параметра. Если в функции не предполагается изменение этого параметра, то целесообразно перед типом параметра поставить ключевое слово const:

int add(const int &x, const int &y)

{

int z;

z=x+y;

return z;

}

Вычисление функций путем разложения в ряд.

В составе библиотеки С имеется большое число функций. Их прототипы записаны в соответствующие заголовочные файлы. Рассмотрим, как можно самостоятельно написать подобные функции на примере функции y=ex. Математические функции такого типа вычисляются путем разложения в степенной ряд , Для функции y=ex, . Вычисление очередного члена ряда обычно удобно выполнять рекуррентным способом: , . Вычисление прекращается по достижению требуемой точности. В результате получим следующую функцию:

double exp(double x)

{

double s,ak;

long k;

const double eps=1e-8;

ak=1.;

s=ak;

while(ak>eps)

{

ak=ak*x/k;

s=s+ak;

}

return s;

}