Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формальные и фактические параметры_функции (2)....docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
41 Кб
Скачать
☆

Int _tmain(int argc, _tchar* argv[])

{

double y;

int n;

iterat(g,2.5,1.e-5,&y,&n);// Вызов функции

cout<<"\ny= "<<y<<" n= "<<n<<"\n";

return 0;

}

double g(double x) // Определение функции

{

// Значение правой части x=g(x)

return - x * x * x * 0.04 + 1.08 * x + 0.2;

}

void iterat(double (*g)(double),double x,

double e, double * y, int * k)

{

double d;

// Метод итерации:

*k =1;

do

{

*y = g(x);

d = fabs(*y-x);

(*k)++;

x = *y;

} while ((d>e) && ((*k)<NMax));

}

Пример. Функция myoperator() способна выполнить любую

операцию с двумя целыми числами, – эта операция задается третьим

параметром (см. также Прата С. Язык программирования C++. ).

int plus(int,int);

int minus (int,int);

int myoperator (int x, int y, int (*f)(int,int));

int main ()

{

int m,n;

m = myoperator(7, 5, plus);

cout<<"m= "<<m;

n = myoperator(20, m, minus);

cout<<" n= "<<n<<endl;

return 0;

}

int plus(int a, int b){

return (a+b);

}

int minus (int a, int b){

return (a-b);

}

int myoperator (int x, int y, int (*f)(int,int))

{

int g;

g = (*f)(x,y);

return (g);

}

Массивы как параметры

При передаче массива в качестве параметра нужно:

– в заголовке функции после имени массива указать пустые квадратные

скобки, например,

int sum_arr(int arr[],int size_arr)

– а в вызове функции указать имя массива уже без квадратных скобок:

sum=sum_arr(mass,N);

Пример. Использование массива как параметра функции.

// Массив как параметр функции

//

#include "stdafx.h"

#include <iostream>

using namespace std;

const int N=8;

int sum_arr(int arr[],int);//прототип

Int _tmain(int argc, _tchar* argv[])

{

int mass[N]={11,22,17,26,29,22,27,34};

int sum=sum_arr(mass,N);

cout<<"\nSumma="<<sum<<"\n";

return 0;

}

int sum_arr(int arr[],int size_arr)

{

int s=0;

for (int i=0;i< size_arr;i++) s+=arr[i];

return s;

}

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

Пример. Ещѐ одна версия передачи массива как параметра –

формальный параметр функции объявлен как указатель.

// Массив как параметр функции

//

#include "stdafx.h"

#include <iostream>

using namespace std;

const int N =8;

int sum_arr(int*,int );//прототип

Int _tmain(int argc, _tchar* argv[])

{

int mass[N]={11,22,17,26,29,22,27,34};

int sum=sum_arr(mass,N);

cout<<"\nSumma="<<sum<<"\n";

return 0;

}

int sum_arr(int* arr,int n)

{

for(int i=0;i<n;i++) {

s+=arr[i];

arr[i]=-arr[i];// поменяли знак

}

return s;

}

Из заголовка функции не видно входным или выходным параметром

является массив. Любые изменения элементов массива в теле функции

являются изменением значений массива, переданного в качестве параметра.

Чтобы не допустить таких изменений, можно добавить в объявление

массива-параметра модификатор const и тогда компилятор будет выдавать

сообщение об ошибке при попытке изменить значения массива.

Пример. Использование массива как параметра функции – с помощью

модификатора const запрещено изменение значений массива в функции.

#include "stdafx.h"

#include <iostream>

using namespace std;

const int N=8;

int sum_arr(const int [],int);//прототип

Int _tmain(int argc, _tchar* argv[])

{

int mass[N]={11,22,17,26,29,22,27,34};

int sum=sum_arr(mass,N);

cout<<"\nSumma="<<sum<<"\n";

return 0;

}

int sum_arr(const int arr[],int n)

{

int s=0;

for(int i=0;i<n;i++) {

s+=arr[i];

arr[i]=-arr[i];// теперь это ошибка

}

}

Пример. Вычисление границы безразмерного символьного массива

оформлено в виде функции size_char().

int size_char(char *s); // прототип