Объявление и определение функций


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

Различают два вида функций: определяемые пользователем и стандартные (встроенные), являющиеся составной частью компилятора.

Для определения функции в программе следует сначала описать заголовок функции, а затем расположить тело функции, заключённое в фигурные скобки:

/* заголовок функции */

<тип_результата> <имя_функции> ([список_параметров])

{

тело_функции

}

где

· тип_результата – тип возвращаемого значения функцией. Если функция не возвращает никакого значения, то на месте типа записывается спецификатор void. Тип void обычно называют пустым типом;

· имя_функции – произвольно выбираемый пользователем идентификатор. Имя функции не должно совпадать со служебными словами и именами других данных в программе, т.е. должно быть уникальным;

· список_параметров задаёт описание передаваемых данных в функцию при ее вызове, и для каждого параметра задаётся его тип;

· тело_функции представляет собой последовательность операторов, допустимых в языке программирования С++, которые описывают определённый алгоритм.

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

int myFun(int x, float y); есть прототип функции myFun().

Имена параметров в прототипе функции можно опускать. Таким образом, объявление функции myFun() может иметь вид:

int myFun (int, float);

Каждая программа в своём составе должна иметь главную функцию main().Именно функция main() обеспечивает точку входа в программу.

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

Каждая функция должна быть определена где-нибудь в программе после её объявления, но не внутри другой функции, в том числе и не внутри main().Кроме того, объявление функции вообще может отсутствовать в случае, если определение функции расположено выше по тексту main()-программы.

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

Оператор возврата в точку вызова функции является важным оператором тела функции и имеет следующую форму записи:

return [выражение];

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

Если функция не возвращает значение, выражение в операторе returnне указывается, и оператор записывается в виде:

return;

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

Функция – часть программы, описывающая определенный алгоритм. В простейшем случае программа состоит из одной функции, которая должна называться main(). Помимо функции main() в программе могут быть и другие функции пользователя. В теле функции нельзя объявить другую функцию.

Вызов функций

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

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

1.Если функция имеет тип возвращаемого значения void, т.е. не возвращает никакого значения, тогда функция вызывается отдельно стоящим оператором:

имя_функции([список_аргументов]);

где список_аргументов задаёт список величин, называемых аргументами, которые передаются в функцию при её вызове.

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

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

system("pause"); – вызывается функция system(), которой передаётся в качестве аргумента строка "pause".

Если параметры у функции отсутствуют, то и при описании функции, и при её вызове после имени функции следует оставлять пустые круглые скобкиfun();

2.Если функция возвращает значение, тогда её вызов может быть использован как операнд в выражении. Например, если определение функции в программе имеет вид:

int myFun(int x, int y){

int z = x + y;

return z;

}

то в этом случае её вызов (из main()или из другой функции) может быть использован следующим образом:

int t = myFun(4, 6) + 5;

При данном вызове функции myFun() переменные x и y инициализируются значениями 4 и 6 соответственно, а по завершении работы функция возвращает в точку вызова значение, используемое для вычисления выражения, которым инициализируется целочисленная переменная t.

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

cout<<myFun(4, 6)<<endl;

При вызове функции компилятор использует прототип функции для сравнения типов аргументов с типами параметров. Язык С++ не предусматривает автоматического преобразования типов в случаях, когда аргументы не совпадают по типам с соответствующими им параметрами. Язык С++ обеспечивает строгий контроль типов. В случае несовместимых типов компилятор фиксирует ошибку “Type mismatch…”.

//Пример 5.1. Написать программу, содержащую вызов функции,

// которая по заданному признаку обеспечивает поиск либо большего,

// либо меньшего из двух заданных величин.

#include <iostream>

using namespace std;

int max_min(int p, int x, int y); // прототип функции max_min()

int main(){

int pr, a, b, rez;

cout<<"Vvedi priznak ( 1 – max, 0 – min) "; cin>>pr;

cout<<"Vvedi a, b: "; cin>>a>>b;

rez = max_min(pr, a, b); // вызов функции max_min()

cout<<"rez = "<<rez<<endl;

system("pause");

}

int max_min(int p, int x, int y){ // определение функции max_min()

int z;

if(p == 0)

if(x < y)z = x; else z = y;

else

if(x > y)z = x; else z = y;

return z;

}

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

//Пример 5.2. Написать программу для вычисления6!, 7!, 8!, 9!, 10!,

// 11!, 12!. Вычисление n!оформить в виде функции.

#include <iostream>

using namespace std;

long fact(int); // прототип функции fact()

int main(){

for(int n = 6; n <= 12; n++)

cout<<"n= "<<n<<" f= "<<fact(n)<<endl; // вызов fact()

system("pause");

}

long fact(int n) { // определение функция fact()

long f = 1;

for(int i = 1; i <= n; f*= i++);

return f;

}

// Пример 5.3. Определить количество цифр в заданном целом числе num,

// используя функциюkolCifr().

#include <iostream>

using namespace std;

int kolCifr(long); // прототип функции kolCifr()

int main(){

long num;

cout<<"Enter num: "; cin>>num;

cout<<"Num = "<<num<<endl;

cout<<" kolcif = : "<<kolCifr(num)<<endl;

system("pause");

}

int kolCifr(long num){ // определение функцииkolCifr()

int k = 0;

 

while(num){

k++; num = num / 10;

}

return k;

}

// Пример 5.4. Вычисление значения полинома в точке х по схеме

// Горнера оформить в виде функции.

// y = an * xn + an-1 * xn-1 + …+ a1 * x + a0 =

// ( ((an * x + an-1) * x + an-2) * x +…+ a1) * x + a0;

#include <iostream>

using namespace std;

double value(int n, double x); // прототип функции value()

int main(){

int n; double x;

cout<<"Enter n, x :"<<endl; cin>>n>>x;

cout<<" y = " <<value( n, x) << endl; // вызов функции value()

system("pause");

}

double value(int n, double x){ // определение функции value()

double coeff, v = 0;

int i = n;

while(i >= 0){

cout<<"Enter coefficient for degree "<<i<<" for x ";

cin>>coeff; v = v*x + coeff;

i--;

}

return v;

}



Дата добавления: 2022-05-27; просмотров: 77;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.02 сек.