Читайте также:
|
|
Вызов функции может быть выполнен из функции 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= "<< fac t(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;
}
Дата добавления: 2015-02-16; просмотров: 84 | Поможем написать вашу работу | Нарушение авторских прав |