Объявление и определение функций
Функция – это логически завершённый и определённым образом оформленный фрагмент программы, который может быть вызван из других частей программы.
Различают два вида функций: определяемые пользователем и стандартные (встроенные), являющиеся составной частью компилятора.
Для определения функции в программе следует сначала описать заголовок функции, а затем расположить тело функции, заключённое в фигурные скобки:
/* заголовок функции */
<тип_результата> <имя_функции> ([список_параметров])
{
тело_функции
}
где
· тип_результата – тип возвращаемого значения функцией. Если функция не возвращает никакого значения, то на месте типа записывается спецификатор 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;