Основы использования функций.

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

Общий формат С++ функций

Все С++ функции имеют общий формат

Тип_возвращаемого значения имя (список _параметров)

{

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

}

С помощью элемента тип_возвращаемого_значения указывается тип значения возвращаемого функцией. Это может быть любой тип , за исключением массива. Если функция не возвращает никакого значения , необходимо указать тип void.

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

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

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

Если функции не имеют параметров, то круглые скобки остаются пустыми.

В фигурные скобки заключено тело функции. Тело функции составляют С++-инструкции, которые определяют действие функции. Функция завершается ( и управление передается вызывающей процедуре) при достижении закрывающейся скобки или инструкции return

Создание функции.

#include<iostream>

using namespace std;

void myfunc();// прототип функции myfunc()

void main()

{

cout<<”В функции main().”<<endl;

myfunc();

cout<<”Снова в функции main().”<<endl;

}

// Определение функции myfunc()

void myfunc()

{

cout<<”В функции myfunc().”<<endl;

}

Использользование аргументов

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

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

#include<iostream>

using namespace std;

void box(int length, int width, int height);// прототип функции

void main()

{

box(7,20,4);

box(50,3,2);

box(8,6,9);

}

// Определение функции box()

void box(int length, int width, int height)

{

cout<<” Объем параллелепипеда равен ”<< lengtht* width* height <<endl;

}

Использользование инструкции return

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

Возврат значений.

Использование функции в выражениях

Правила действия областей видимости функций.

Локальная область видимости

Локальные переменные можно объявлять внутри любого блока.

Сокрытие имен

Параметры функции

Глобальная область видимости

Передача указателей и массивов в качестве аргументов функций

Передача функции указателя

Передача функции массива

Передача функциям строк

Возвращение функциями указателей

Оформление функции в С++

Тип имя функции (список формальных параметров);

Типы функции

int

double

char

void (не возвращает значений)

Функция - именованный набор операторов.

Если р1 и р2 функции, и р1 вызывает р2, то р2 должна быть описана раньше р1.

Если тело функции идет после main() , то перед main() должен стоять прототип функции.

Пример 1

Функция плюс

# include <iostream.h>

void plus (int,int,int); // прототип функции plus, параметры переданы по значению

void plus1 (int,int,int&); // прототип функции plus1, последний параметр передан по ссылке

int plus2(int, int) //результат функции число типа int

Void main()

{

int a=4; int b=5; int c=10;

cout<<”plus()”<<endl;

plus(a,b,c);

cout<<”c=”<<c<<endl; //9

plus1(a,b,c);

cout<<”c=”<<c<<endl; //10

int c2=plus2(a,b);

cout<<”c2=”<<c2<<endl; //9

// Возможен вариант

cout<<”plus2()=”<<plus2(a,b)<<endl; //9

}

Void plus (int x, int y, int z)

{

cout<<”x=”<<x<< endl; //4

cout<<”y=”<<y<< endl; // 5

cout<<”z=”<<z<< endl; // 10

z=x+y;

cout<<”z=”<<z<< endl; // 9

}

void plus1 (int x, int y, int &z)

{

cout<<”x=”<<x<< endl; //4

cout<<”y=”<<y<< endl; // 5

cout<<”z=”<<z<< endl; // 10

z=x+y;

cout<<”z=”<<z<< endl; // 9

}

Int plus2 (int x, int y)

{

cout<<”x=”<<x<< endl; //4

cout<<”y=”<<y<< endl; // 5

cout<<”x+y”<<x+y<< endl; // 9

return x+y;

}

Примечание

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

plus2(a+b*c,2*c);

plus2(5,7);

Передача массивов функции.

Пример 2.

# include <iostream.h>

const int n=10;

void create ( int x[], int k);

//возможный вариант void vvod ( int x[n])

void show ( int x[], int k);

int max (int x[], int k);

void main()

{

int a[n];

create(a,n);

show ( a, n);

cout<< “max(a,n)= ”<<max(a,n)<<endl;;

}

void create ( int x[], int k)

{

int i;

for (i=0; i<k; i++)

{

cout<<”x[“<<i<<”]=”;

cin>>x[i];}

}

}

void show ( int x[], int k)

{

int i;

for (i=0; i<k; i++)

cout<<x[i]<<”_”;

}

int max(int x[], int k)

{

int i;

int m;

m=a[0];

for (i=0; i<k; i++)

if (m<x[i]) m=x[i];

return m;

}

Лекция №9

Динамические массивы

Задание статического массива

const int n=10;

int a[n];

Задание динамического массива

int n;

cout<< “Enter n:”;

cin>>n;

int*b //указатель на первый элемент массива

b= new int[n];

delete [] b - после работы программы необходимо освободить память «кучи» от b.

В параметрах функций динамический массив задается так же, как и статический

void vvod ( int x[], int n);

Или

void vvod ( int *x, int n);

void vvod ( int x[n])

основы использования функций. - student2.ru

Примечание

int*p;

p=new int;

*p=10; (косвенная динамическая память)

delete p ; (возврат памяти)

Задание двумерного динамического массива

Память выделяется в 2 этапа: сначала под строку указателей на столбцы, а затем в цикле под каждый столбец.

int colstr; colstb;

cout<< “Enter colstr:”;

cin>> colstr;

cout<< “Enter colstb:”;

cin>> colstb;

int **b;

b=new int*[colstr];

for (int i<0;i<colstr;i++)

b[i]=new int[colstb];

Соответственно, необходимо delete[][]b;

В параметрах функций

void create ( int **x, int n, int m);

void show( int **x, int n, int m);

Задача 1.

Наши рекомендации