Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Функции




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

С понятием функции в языке C++ связано три следующих компонента:

- описание функции;

- прототип;

- вызов функции.

Описание функции состоит из двух частей: заголовка и тела. Описание функции имеет следующую форму записи:

[тип_результата] <имя_функции> ([список_параметров])

{

/* объявления и операторы

или, другими словами, тело функции*/

}

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

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

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

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

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

В первом случае оператор имеет следующий формат:

[имя_функции] (список_аргументов);

Например: Print(“Hello World!”);

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

[Переменная] = [имя_функции] (список_аргументов);

Например: z = max(x, y);

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

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

Ниже приводится пример функции с возвращаемым значением.

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

Возможное решение данной задачи имеет вид:

//описание функции max находится в данном файле ниже тела главной функции

#include <conio.h>

#include <iostream>

using namespace std;

 

// описание пользовательской функции

int max (int a, int b) // заголовок функции

{

int с; //

c=(a>b)?a:b; // тело функции

return с; //

}

 

void main()

{

setlocale(LC_ALL,"Rus");

int x,y,z;

cout << "\n поочередно введите х и у \n";

cin >> х >> y;

z=max (х, y); // вызов функции

cout << "z=" << z;

return;

}

Описание функции находится в одном файле с главной программой.

Вызов функции является выражением в правой части оператора присваивания z=max(x,y);, при выполнении которого значения аргументов х и у подставляются вместо параметров а и bсоответственно (передача параметров в функцию по значению). После выполнения тела функции возвращаемое значение передается в место вызова функции и присваивается переменной z.

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

Пример 2. Использование функции без возвращаемого значения.

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

...

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

 

void main()

{

char x;

cout <<”\nВводите символы.”<<” Enter – окончание ввода”;

do

{

x=getch();

print (x);

}

while (x!= 13);

return 0;

}

void print(char a) { cout <<a << “\t“; }

В функции print() отсутствует возвращаемое значение, поэтому обращение к функции осуществляется оператором вызова функции print(x);. В результате обращения к функции на экран будет выведен символ, введенный с клавиатуры с помощью оператора x=getch().


Лабораторная работа №5
Использование функций для решения прикладных задач

ЦЕЛЬ РАБОТЫ: закрепление теоретических знаний и приобретение навыков программирования функций.

Выполнение работы: освоить теоретический материал, выполнить общее для всех задание I и в соответствии с вариантом составить программу (задание II), реализовав пользовательскую функцию.

Задание I

Изучить порядок объявления и описания функций:

- реализовать (отладить и запустить программы) приведенные в теоретических сведениях примеры 1 – 2;

- оформить в тетради, записав условие, блок-схему и результат работы соответствующих программ (примеры 1 – 2).

Задание II

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

1. Три прямоугольных треугольника заданы катетами. Определить, площадь какого из них больше.

2. Три отрезка заданы координатами вершин. Определить, есть ли среди них отрезки равной длины.

3. В порт в среднем приходит три корабля в день. Какова вероятность того, что в порт придёт 2 корабля? 4 корабля? Вычисление вероятности производится по формуле: Р = 3k e-3/ k!.

4. Найти среднее арифметическое действительных корней трёх квадратных уравнений.

5. Даны три различных бруска, имеющих форму кубов с заданным произвольным ребром. Из каждого выпилена правильная четырехугольная пирамида (основание – грань куба). Вычислить объем материала, ушедшего в отходы.

6. Даны действительные числа а и b. Вычислите,

g (l.2, a)+ g (b, a)- g (2 a - 1, ab), где

7. Заданы длины рёбер произвольной треугольной пирамиды. Вычислить площадь полной поверхности этой пирамиды.

8. Вычислить объем «снеговика», состоящего из трех шаров с произвольными радиусами.

9. Каждое из трех колец задано внутренним и внешним радиусами. Чему равна площадь наибольшего кольца?

10. Вычислить значение выражения a! + b! + c! + d!.

11. Вычислить площадь «елки», состоящей из четырех треугольников с известными сторонами.

12. Найти минимальное значение среди корней трех квадратных уравнений (каждое уравнений задано тройкой коэффициентов).

13. Даны действительные числа a и b. Вычислить

max (u + v 2, 3.14),

где u = max(a, b), v = max(ab, a + b), а max – подпрограмма для вычисления максимального значения для двух данных чисел.

14. Даны радиусы трех шаров. Вычислить среднее арифметическое объемов этих шаров.

15. Дана арифметическая прогрессия an ,, a 1 – первый ее элемент, d – разность. Найти второй, третий, четвертый и седьмой элементы и их сумму.

16. Даны действительные числа s и t. Вычислить f (t, -2 s, 1.17) + f (2.2, t, s - t),

.

17. Найти наибольшее из пяти заданных чисел, используя подпрограмму нахождения наибольшего из двух чисел.

18. Вычислить значение функции:

, если

19. Вычислить значение функций

и

для значений х = 0,1; 0,35; 0,53.

20. Вычислить значение функции x = 2 f (15) - 4 f (-1) g (11) + g (32), если

f (x) = 10 x + e2 x; .

21. Из куба со стороной а выпилили куб со сторой b (a > b). Какой процент материала ушёл в отходы?

22. Каждая из трёх окружностей задана координатами центра и координатами точки на окружности. Какова наибольшая длина окружности?

23. Найти наименьшее из четырёх заданных чисел, используя подпрограмму нахождения наименьшего из двух чисел.

24. Даны действительные числа a и b. Вычислить

min (2 u - v 2, 4.5),

где u = min(a, b), v = min(a/b, a - b), а min – подпрограмма для вычисления минимального значения для двух данных чисел.

25. Вычислить большие вещественные корни квадратных уравнений а х 2 + b х + с = 0 и t х 2 + p х + q = 0, если они существуют. В противном случае вывести на экран монитора соответствующее сообщение.

Контрольные вопросы

1. Что такое подпрограмма?

2. Как подпрограмму можно реализовать в С++?

3. Какие параметры называются формальными?

4. Какие параметры называются фактическими?

5. Что такое переменная?

6. Что такое область действия идентификатора?

7. Что такое локальная переменная? Что такое глобальная переменная?

8. Какова область действия локальных идентификаторов?

9. Какова область действия глобальных идентификаторов?

10. Что такое функция?

11. Чем отличается объявление функции от ее определения?

12. Что такое прототип функции?

13. Как описывается функция пользователя в программе?

14. Что такое возвращаемое значение функции?

15. Как осуществляется вызов функций из основной программы?




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 775; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.037 сек.