ЧАСТЬ 3

ИНФОРМАТИКА

Электронное учебно-методическое пособие

 

 
 

 

4.17. Функции

Функция main () — это основная функция любой программы на языке С. Функции являются основными «строительными блоками» программы, или подпрограммами. Они, в свою очередь, строятся из операторов, составляющих тело функции. Каждый оператор оканчивается символом точкой с запятой. В общем виде функция определяется таким образом [10]:

возвращаемый_ тип имя функции (список_ параметров)
{
тело_функции
}

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

Под процедурой обычно понимают подпрограмму, не возвращающую никакого значения. В С формально любая функция возвращает какой-либо тип, хотя этот тип может быть пустым (void). В первоначальном варианте языка функция, для которой возвращаемый тип не определялся, считалась возвращающей int (целое значение).

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

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

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

Например, обращение pow(12.3, "abcd") вызовет недовольство компилятора, поскольку "abcd" является строкой, а не int. При вызове pow(2, i) компилятор преобразует 2 к типу float, как того требует функция. Функция pow возводит основание в степенное выражение и может быть определена так:


float pow(float x, int n)

  {
if (n <0) error("извините, отрицательный показатель ");

switch (n) {
case 0: return 1;
case 1: return x;
default: return x*pow(x, n-1);
}
}

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

Разные функции обычно имеют разные имена, но функциям, выполняющим сходные действия над объектами различных типов, иногда лучше дать возможность иметь одинаковые имена. Если типы их параметров различны, то компилятор всегда может различить их и выбрать для вызова нужную функцию. Может, например, быть одна функция возведения в степень для целых переменных и другая – для переменных с плавающей точкой:

overload pow;
int pow(int, int);
double pow(double, double);
//...
x = pow (2, 10);
y = pow (2.0, 10.0);

Здесь overload pow сообщает компилятору, что использование имени pow более чем для одной функции является умышленным.
Например, для вычисления функции y = cos(x) + 1 рекомендуется использовать следующую программу:

#include <iostream.h>
#include <math.h>
float V(float x, float y) // определение функции V
{ y = cos(x) + 1;
return y;
}
main() // определение основной функции main
{ float x;
cin>>”введите число” >>x;
cout<<”результат =”<<V(x);
}
или так:
#include
#include
float V(float x, float y); // объявление функции V
main()
{ float x,y;
cin>>”введите число” >>x;
y = V(x);
cout<<”результат =”<<y;
}
float V(float x, float y) // определение функции V
{ y = cos(x) + 1;
return y;
}

В этом примере описывался принцип передачи «по значению».

Список аргументов, содержащихся в списке параметров, также может передаваться:

  • «по ссылке» – для передачи данных в функцию и обратно в одной и то же переменной:

#include <iostream.h>
#include <math.h>
void V(float &y)
{ y = cos(x) + 1; }
main()
{ float x;
cin>>”введите число” >>x;
cout<<”результат =”<<V(x);
}

  • «параметр-указатель» – для передачи данных их функции:
    #include <iostream.h>
    #include <math.h>
    void V(float x, floay *y)
    { *y = cos(x)+1; }
    main()
    {float x, y;
    cin>>”введите число” >>x;
    y = V(x);
    cout<<”результат =”<<V(x, &y);
    }

В этих примерах void означает, что функция возвращает значение в списке аргументов.


 

 


© Сибирская государственная геодезическая академия (СГГА), 2011