Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Видеоматериал для лекций по С++ c потоковым вводо_выводом (cin, cout) 2008 г.doc
Скачиваний:
12
Добавлен:
29.03.2016
Размер:
346.62 Кб
Скачать

Функции

Пример.

Требуется составить программу нахождения наибольшего значения из трех величин – 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 :

    1. 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 :

    1. 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;

}