Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Лабораторная работа №5. Функции и многомерные массивы в С++




Функции и многомерные массивы в С++

 

Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение.

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

Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.

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

 

[ класс ] тип имя ([ список параметров ])[throw (исключения) ]

{ тело функции }

В квадратных скобках указана необязательная часть.

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

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

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

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

Например вызов функции ожидания нажатия произвольной клавиши на клавиатуре - функция getch(), объявление которой находится в библиотеке conio.h, можно произвести следующим образом

....

getch();

....

Существует несколько способов возврата управления к точке, из которой была вызвана функция:

  • Если функция не должна возвращать результат, управление возвращается либо просто при достижении правой фигурной скобки, завершающей функцию, либо
  • При выполнении оператора return.

Если функция должна возвращать результат, то оператор

  • return выражение;

 

возвращает значение выражение в обращение к функции. Таким образом, оператор возврата имеет две формы:

 

return;

 

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

 

return выражение;

 

Например:

return; не возвращает значения;

return 3; возвращаемое значение = 3;

return (a + b); возвращаемое значение = значению выражения (а + b);

 

Пример определения функции

 

#include<iostream.h>

#include<conio.h>

double cube(double x) //объявление функции – заголовок. Функция cube возводит в 3 степень вещественное число х, возвращает результат вещественного типа

{

return x*x*x; //возвращает в основную программу х в 3 степени

}

 

int main()

{

double x,y;

cout<<"Input x = ";

cin>>x; //ввод с клавиатуры числа х

y=1+cube(x); //вызов функции cube

cout<<y; //вывод результата

getch();

}

 

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

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

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

 

Пример

#include<iostream.h>

#include<conio.h>

 

int fun(int х,int у)

{

return(х+у);

}

 

int main()

{

int a=1,b=9,c=2.5;

cout<<fun(a,c); несоответствие типов, результат будет 3, с - округлится

/*cout<<fun(a,b,c);*/ будет ошибка

getch();

}

 

Пример

#include<iostream.h>

#include<conio.h>

 

int fun(int x,char y)

{ cout<<"y="<<y<<'\n'; вторая переменная просто проигнорируется

int fun(int x, double y) – даст верный результат

return(x+y);

}

 

int main()

{

int a=2,b=100000000,c=2.5;

cout<<fun(a,b);

getch();

}

 

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

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

 

Результат работы программы:

i j k

1 2 3

1 3 4

Первый параметр (1) передается по значению. Его изменение в функции не влияет на исходное значение. Второй параметр (j) передается по адресу с помощью указателя, при этом для передачи в функцию адреса фактического параметра используется операция взятия адреса, а для получения его значения в функции требуется операция разыменования. Третий параметр (к) передается по адресу с помощью ссылки.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных