Вызов функции

Рис. 11.2. Вызов функции func_1 (а,b)

4. Передача аргументов функции в Visual С++ 2010

Существует два способа передачи аргументов функции в С++: по значению и по ссылке.

Когда происходит передача переменной-аргумента по значению, в функции создается локальная переменная с именем аргумента, в которую записывается его значение. Внутри функции может измениться значение этой переменной, но не самого аргумента.

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

Если параметр функции используется для возвращения результата, то в объявлении функции этот параметр должен быть ссылкой, а в инструкции вызова функции как фактический параметр должен быть указан адрес переменной (передача аргументов по ссылке).

Пример 1. Разработать программу, вычисляющую Y по формуле Y=a+b, в которой расчет Y оформлен в виде функции.

Блок-схема алгоритма решения данной задачиприведена на рис. 11.3.

а) б)

Рис. 11.3. Блок-схема алгоритма вычисления Y по формуле Y=a+b с использованием функции:

а) основная программа; б) функция sum(double c, double d)

Программа, использующая функцию для вычисления Y по формуле Y=a+b, будет иметь следующий вид:

double sum(double c, double d); //Объявление (прототип) функции вычисления Y

int _tmain(int argc, _TCHAR* argv[])

{

double Y, a, b;

cout<<"Vvedite a, b:"<<endl;

cin>>a>>b; //Ввод чисел a и b

Y=sum(a, b); //Вызов функции, вычисляющей сумму двух чисел

cout<<endl<<"Y = "<<Y<<endl; //Вывод значения Y

getch();

return 0;

}

double sum(double c, double d) //Описание функции вычисления z=c+d

{

double z;

z=c+d; //Вычисление z=c+d

return z; //Возврат значения z в основную программу

}

Результат выполнения программы следующий:

Vvedite a, b:

5.4 4.3

Y=9.8

Пример 2. Разработать программу, использующую функцию вычисления факториала числа:

F = n!.

Для составления программы данное выражение запишем следующим образом:

F = n! = 1*2*3*4* …*n =

Блок-схема алгоритма решения данной задачиприведена на рис. 11.4.

а) б)

Рис. 11.4. Блок-схема алгоритма вычисления факториала числа с использованием функции:

а) основная программа; б) функция faktorial(int n)

Программа для функции, вычисляющей факториал числа n, будет иметь следующий вид:

int faktorial(int n); //Объявление (прототип) функции вычисления факториала

int _tmain(int argc, _TCHAR* argv[])

{

int K;

cout<<"Vvedite K:"<<endl;

cin>>K; //Ввод числа K

F=faktorial(K); //Вызов функции,вычисляющей факториал числа

cout<<endl<<"Faktorial K= "<<K<<endl; //Вывод значения факториала числа K

getch();

return 0;

}

int faktorial(int n) //Описание функции вычисления факториала числа

{

int j, y;

y=1;

for(j=1; j<=n; j++) //Цикл для вычисления факториала числа

y=y*j;

return y; //Возврат значения y в основную программу

}

Результат выполнения программы следующий:

Vvedite K:

Faktorial K= 120

Пример 3. Разработать программу для вычисления числа соединений R из N элементов по M по формуле

R = ;

где расчет R производится с использованием функции.

Воспользуемся созданной в Примере 2 функцией factorial(int n) для вычисления факториала числа и будем обращаться к этой функции непосредственно в формуле для расчета R:

int faktorial(int n); //Объявление (прототип) функции вычисления факториала

int _tmain(int argc, _TCHAR* argv[])

{

int N,M,R;

cout<<"Vvedite N i M (N>M):"<<endl;

cin>>N>>M; //Ввод значений N и M

R=faktorial(N)/(faktorial(M)*faktorial(N-M)); //Формула для R (с трехкратным вызовом функции faktorial)

cout<<endl<<"R= "<<R<<endl; //Вывод значения R

getch();

return 0;

}

int faktorial(int n) //Описание функции вычисления факториала числа

{

int j, y;

y=1;

for(j=1; j<=n; j++)

y=y*j;

return y; //Возвращение в основную программу значения у

}

Результат выполнения программы следующий:

Vvedite N и M:

8 4

R= 70

5. Области действия и видимости переменных в программах в среде Visual С++ 2010

Область действия переменной – это часть или части программного кода, в которых данные переменные определены (доступны для действий с ними в данном месте программы).

С точки зрения области действия переменных различают три типа переменных:

- локальные;

- глобальные;

-формальные.

Локальные переменные – это переменные, объявленные в середине блока, в частности, внутри описания функции. Локальная переменная доступна в середине блока, в котором она объявлена. Блок открывается и закрывается фигурными скобками. Область действия локальной переменной – данный блок или функция.

Формальные переменные (параметры) – это переменные, объявленные при описании функции как ее аргументы. Формальные параметры используются в теле функции, как локальные переменные. Область действия формальных параметров – тело функции.

Глобальные переменные – это переменные, объявленные в основной программе вне какой-либо функции. Они могут быть использованы в любом месте программы. Область действия глобальной переменной – вся программа.

6. Функции и массивы в Visual С++ 2010

Если в качестве аргумента функции используется массив, то необходимо указать адрес начала массива и его размер.

Заглавие функции, обрабатывающей массив, необходимо записать следующим образом:

float function (float A[n]);

или

float function (float A[ ], int n);

В этомслучае вызов функции function из основной программы запишется следующим образом:

function (B, k);

Пример 4. Задан массив А из N произвольных чисел. Сформировать новый массив В, каждый элемент которого равняется частному от деления соответствующего элемента массива А на его максимальный элемент. На экран вывести начальный массив А, его максимальный элемент и массив В. Поиск максимального элемента массива А оформить функцией.

Запрограммируем функцию нахождения максимального элемента массива и его номера и используем ее в разрабатываемой программе следующим образом:

double Max(double B[],int n); //Объявление (прототип) функции поиска макс. элемента

int _tmain(int argc, _TCHAR* argv[])

{

const int N=50; //Максимальный размер исходного массива

int i, k; //Объявление параметра цикла и реального размера массива

double A[N], M; //Объявление массива A и переменной М

cout<<"Vvedite razmer massiva:"<<endl;

cin>>k; //Ввод реального размера массива

cout<<" Vvedite massiv:"<<endl;

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

cin>>A[i]; //Ввод исходного массива А

cout<<endl;

M=Max(A, k); //Обращение к функциипоиска Max()

cout<<" Ishodnui massiv "<<endl;

for(i=0; i<k; i++) //Цикл для печати исходного массива А

cout<<A[i]<<' ';

cout<<endl<<"Max= "<<M<<endl; //Печать максимального элемента исходного массива

cout<<" Novui massiv "<<endl;

for(i=0; i<k; i++) //Цикл для расчета и печати элементов нового массива

cout<<A[i]/M<<' ';

cout<<endl;

getch();

return 0;

}

double Max(double B[],int n) //Описание функции поиска максимального элемента массива

{

int j;

double C=B[0]; //Присваивание переменной С начального знач-я (1-го элемента)

for(j=0; j<n; j++) //Цикл для перебора элементов массива и сравнения их с С

if (B[j]>C) C=B[j];

return C; //Возвращение в основную программу значения С

}

После выполнения программы экран будет иметь следующий вид:

Пример 5. Задан массив А из N произвольных чисел. Разработать программу для нахождения максимального элемента этого массива и его номера, которые вывести на экран. Поиск максимального элемента массива и его номера оформить функцией, а сами переменные использовать как глобальные, т. е. “видимые” и в основной программе, и в описаниях функций.

Запрограммируем функцию нахождения максимального элемента массива и его номера и используем ее в разрабатываемой программе следующим образом:

double Max(double B[], int n); //Объявление (прототип) функции Max()

double C; //Объявление глобальной переменной C

int k; //Объявление глобальной переменной k

int _tmain(int argc, _TCHAR* argv[])

{

const int N=50; //Объявление максимального размера исходного массива

int i, m; //Объявление параметра цикла и реального размера массива

double A[N]; //Объявление исходного массива A[N]

cout<<"Vvedite razmer massiva:"<<endl;

cin>>m; //Ввод реального размера исходного массива

cout<<endl<<"Vvedite massiv:"<<endl;

for(i=0; i<m; i++) cin>>A[i]; //Ввод элементов исходного массива A[i]

cout<<endl;

Max(A, m); //Обращение (вызов) к функции Max()

cout<<"Max= "<<C<<endl; //Печать макс. элемента массива А (глобальная переменная)

cout<<" Nomer max "<<k<<endl; //Печать номера макс. элемента (глобальная переменная)

getch();

return 0;

}

double Max(double B[], int n) //Заголовок описания (кода) функции Max

{

int j; //Объявление параметра цикла

C=B[0]; //Глобальной переменной C присваиваем первый элемент

for(j=0; j<n;j++) //Цикл для поиска максимального элемента

if(B[j]>C)

{

C=B[j]; //Определяем максимальный элемент

k=j; //Номер макс. элемента заносим в глобальную переменную k

}

return 0; //Функция не возвращает никаких значений

}

После выполнения программы экран будет иметь следующий вид:

Вопросы для самоконтроля

1. При обращении к функции реальные и формальные параметры должны совпадать…

1) по количеству и месту

2) по количеству, типу и месту

3) по количеству и типу

2. Обращение к функции осуществляется…

1) по заглавию функции

2) по имени функции

3) с помощью специального оператора

3. Функции могут быть…

1) только с параметрами

2) только без параметров

3) с параметрами и без параметров

4. В программе используются две независимые функции F1 и F2. В каком порядке они должны быть описаны в разделе прототипов?

1) Сначала F1, а затем F2

2) Сначала F2, а затем F1

3) Не суть важно в каком порядке

5. В массиве А необходимо определить максимальный элемент и его номер. Возможно ли этот блок оформить функцией?

1) Возможно

2) Возможно в отдельных случаях

3) Невозможно

6. В программе описано две функции F1 и F2. Возможно ли в них использовать одни и те же переменные?

1) Возможно

2) Не возможно

3) Возможно в отдельных случаях

7. Отдельный блок программы целесообразно оформить функцией, если в нем есть…

1) один результат

2) два и более результата

3) Все равно сколько результатов

8. В программе описана функция int f(int x). Возможно ли так обратится к этой функции: r = f(n)/(f(m)*f(n-m));?

1) Возможно

2) Невозможно

3) Возможно в отдельных случаях

9. Обратиться к функции можно так…

1) func (int Mas[10])

2) func (int Mas[], 10)

3) все равно как

10. В качестве аргумента функции используется двухмерный массив W[3][3].

Укажите неправильное обращение к функции.

1) func (int W[3][3]);

2 ) func (int W[][3]);

3) func (int W[][]);

11. Когда функция не возвращает никакого значения, можно ли ее использовать в выражениях языка С++?

1) можно

2) нельзя

3. можно, когда выражение принимает определенное значение

12. Когда функция не возвращает никакого значения, она должна быть объявлена как функция тип…

1) int

2) void

3) char

13. Параметры функции – это переменные, которые…

1) объявлены в функции

2) объявлены вне функции

3) все равно где

14. Укажите правильную запись заглавия функции:

1) func (int x, в, float z)

2) func (x, int в, float z)

3) func (int x, int в, float z)

15. Оператор return

1) вызывает выход из функции

2) используется для возвращения значение функции

3) и первое, и второе

16. В теле функции оператор return

1) может отсутствовать

2) должен быть обязательно

3) все зависит от назначения функции

17. Когда в теле функции отсутствующий оператор return, выход из функции осуществляется…

1) когда выполнится последний оператор функции

2) в данном случае возникнет зависание программы

3) оператор return должен быть в теле функции обязательно

18. Если функция не имеет аргументов, то в прототипе такой функции необходимо…

1) ничего не писать в скобках функции

2) в скобках записать служебное слово int

3) в скобках записать служебное слово void

19. Локальная переменная – это переменная, которая объявлена…

1) в теле данной функции

2) вне данной функции

3) в качестве параметра в заглавии функции

20. В заглавии функции записываются…

1) формальные параметры

2) фактические параметры

3) глобальные переменные

21. При обращении к функции реальные параметры должны совпадать с формальными…

1) по месту

2) по месту и типу

3) по месту, типу и количеству


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: