Функции
Пример.
Требуется составить программу нахождения наибольшего значения из трех величин – max(a,b,c). Для ее решения можно использовать вспомогательный алгоритм нахождения максимального значения из двух, поскольку справедливо равенство: max=(a,b,c)=max(max(a,b),c).

|
# include <iostream> using name space std;
int MAX(int, int);
int main (void) { int a,b,c, z; cout<<"a,b,c"; cin>>a>>b>>c; z=MAX(MAX(a,b),c); cout<<"max="<<z; retirn 0; } int MAX (int x, int y) { int w; if (x>y) w=x; else w=y; return w; }
|
# include <iostream> using name space std;
int MAX (int x, int y) { int w; if (x>y) w=x; else w=y; return w; } int main (void) { int a, b, c, z; cout<<"a, b, c"; cin>>a>>b>>c; z=MAX(MAX(a,b),c); cout<<"max="<<z; return 0; }
|
Формат определения функции:
тип имя_функции (спецификация_параметров)
{тело_функции}
Пример:
void hello_world (void)
{
cout<<”Hello_World!!!\n”;
}
Формат обращения к функции (вызов функции)
имя функции (список_фактических_параметров)
Пример:
# include <iostream>
using namespace std;
void hello_world (void)
{
cout<<”Hello_World!!!\n”;
}
int main ()
{
cout<<”Befor the function\n”;
hello_world(); // вызов функции
cout<<”After the function\n”;
return 0;
}
Результат выполнения программы:
Befor the function
Hello_World!!!
After the function
Оператором возврата из функции в точку ее вызова является оператор return. Он может использоваться в функциях в двух формах:
return; или return (выражение);
Пример
int aquare (int value)
{
return (value*value);
}
В вызывающей функции возвращаемое функцией aquare значение может быть присвоено переменной или использовано при вызове некоторой другой функции.
# include <iostream>
using namespace std;
int aquare (int value)
{
return (value*value);
}
int main ( )
{int x, result;
cout<<”Input number”;
cin>>x;
result= aquare(x);// или cout<< aquare(x)<<” are a aquare of number“<<x<<endl;
return 0;}
Прототип функции.
Пример:
// возведение числа в указанную степень
# include <iostream>
# include <math.h>
using namespace std;
void vpower(double, double);
int main()
{
double dtnum, dunum;
cout<<”Input number:”;
cin>>dtnum;
cout<<” Input degree:”;
cin >>dunum;
vpower (dtnum, dunum);
return 0;
}
void vpower(double dt, double du)
{
double danswer; //a:nse
danswer=pow(dt, du);
cout<<dt<<” in degree “<<du<<” =”<<danswer<<endl;
}
Способы передачи значений фактических параметров
из основной программы в функцию
// вызов функции по значению
# include <iostream>
using namespace std;
void swap (float , float );
int main ()
{
float a,c;
cout<<"Input a, c :"<<"\n";
cin>>a>>c;
swap(a,c);
cout<<a<<" "<<c<<"\n";
return 0;
}
void swap (float b, float d)
{
float m;
m=b;
b=d;
d=m;
}
Результаты выполнения программы:
Input a, c :
3.5 -2.7
3.5 -2.7
// использование ссылок в качестве аргументов функций
# include <iostream>
void swap (float &, float &);
int main ()
{
float a,c;
cout<<"Input a, c :"<<"\n";
cin>>a>>c;
swap(a,c);
cout<<a<<" "<<c<<"\n";
return 0;
}
void swap (float &b, float &d)
{
float m;
m=b;
b=d;
d=m;
}
Результаты выполнения программы:
Input a, c :
3.5 -2.7
-2.7 3.5
Ссылки
Формат объявления ссылки
тип & имя
где тип – это тип величины, на которую указывает ссылка;
& - оператор ссылки, означающий, что следующее за ним имя является именем переменной ссылочного типа, например:
|
int number; int & pal=number; // ссылка pal – альтернативное имя number const char & CR=’\n’ //ссылка на константу |
Правила работы с ссылками
Переменная-ссылка должна явно инициализироваться при ее описании, кроме случаев когда она является параметром функции.
После инициализации ссылке не может быть присвоена другая переменная.
Тип ссылки должен совпадать с типом величины, на которую она ссылается.
Не разрешается определять указатели на ссылки, создавать массивы ссылок и ссылки на ссылки.
Ссылки применяются чаще всего в качестве параметров функций и типов возвращаемых функциями значений. Ссылки позволяют использовать в функциях переменные, передаваемые по адресу, без операции разадресации, что улучшает читаемость программы.
Ссылки, в отличие от указателя, не занимает дополнительного пространства в памяти и является просто другим именем величины. Операция над ссылкой приводит к изменению величины, на которую она ссылается.
Перегрузка функции
# include <iostream>
using namespace std;
// прототип функции sum для работы с массивом целых чисел
int sum (int iarray[]);
// прототип функции sum для работы с массивом вещественных чисел
float sum (float farray[]);
int main()
{
int iarray[7]={5, 1, 6, 20, 15, 0, 12};
float farray[7]={3.3, 5.2, 0.05, 1.49, 3.1415, 2.007, 6.8976};
int isum;
float fsum;
isum=sum(iarray);
fsum=sum(farray);
cout<<”isum=”<<isum<<”\n”;
cout<<”fsum=”<<fsum<<”\n”;
return 0;
}
//описание функции для работы с массивом целых чисел
int sum (int iarray[])
{
int i, is;
is=iarray[0];
for (i=1; i<7; ++i)
is+=iarray[i];
return is;
}
//описание функции для работы с массивом вещественных чисел
float sum (float farray[])
{
int i,
float fs;
fs=farray[0];
for (i=1; i<7; ++ i)
fs+=farray[i];
return fs;
}
