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

Лабораторная работа № 9

«Процедуры и функции»

Цель работы: ознакомиться с особенностями применения функций в языке С++, с понятием прототипа и областью его применения, с понятием статических и фактических, локальных и глобальных переменных и их применением при составлении программ с использованием функций.

.

Теоретические сведения

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

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

# include < > /* директивы препроцессора */

# define NAME значение // макроопределение или макрос

/* объявление функций */

int func_1 (список параметров);

void func_2 (список параметров);

...

float func_n (список параметров);

/* описание глобальных переменных */

float a,b,c char ch;

/* определение функций */

int func_1 (список параметров);

{

int i,j; /*описание локальных переменных */

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

}

void func_2 (список параметров)

{

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

}

float func_3 (список параметров)

{

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

}

void main(void)

{

описание главной функции

}

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

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

Примеры объявлений:

int func_1(char*, int, float); //объявление о функции func_1()

char* func_2(int a, int b, char* ch); //объявление о функции func_2()

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

void func_3(int, int); //отсутствует возвращаемое значение

void func_4(void); //отсутствуют формальные параметры и возвращаемое значение

Имена функций должны быть уникальными.

Список формальных параметров может оканчиваться запятой и многоточием (,…):

int func_5(int*,int,…);

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

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

Заголовок функции синтаксически имеет такой же формат, как и прототип функции, с той лишь разницей, что, кроме типов, указываются имена формальных параметров и отсутствует символ ‘;’ в конце заголовка.

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

char* func(int param_1, int param_2, char* param_3)

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

{

int i, j, k; //объявления локальных объектов

char buff [80];

оператор;

оператор;

return buff; //возвращаемое значение

}

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

Существует два способа вызова функции:

1. имя_функции (список фактических параметров);

2. (* указатель_на_функцию) (список фактических параметров),

здесь круглые скобки обязательны.

Указатель_на_функцию - это переменная, содержащая адрес функции, Адрес функции может быть присвоен указателю оператором:

указатель_на_функцию = имя_функции;

Примеры вызовов:

func (a,b);

func (&a, &b);

func ();

(*func) (&a, &b); и т.д.

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

Y = func_1 (a, b) + func_2 (c, d);

Операция присваивания «сохраняет» значение, возвращаемое функцией. Если же просто написать func_1 (a, b), то значение не будет сохранено.

Операция func_1 (a, b) правомерна, если функция не возвращает значения, т.е. имеет тип void.

Функция, не имеющая параметров и не возвращающая значения, должна быть описана как void func(void); ее вызов будет иметь вид func ();

ЗАДАНИЕ: реализовать следующие программы, используя функции

Вариант Задание
1. Написать подпрограмму, которая преобразует последовательность чисел в последовательность квадратов этих чисел.
2. Даны числа а, b. Описать процедуру, которая для этих чисел определяет площадь и периметр прямоугольника.
3. Описать процедуру, которая для трех чисел осуществляет перераспределение значений по правилу a<=b<=c.
4.  
5. Даны 2 матрицы размером m*n, напечатать ту из них, где больше нечетных чисел меньше 100.
6. Описать процедуру, которая вычисляет произведение элементов двух одномерных массивов.
7. Описать процедуру, которая вычисляет разницу элементов двух одномерных массивов.
8. Описать процедуру, которая вычисляет сумму элементов двух одномерных массивов.
9. Описать процедуру, которая в матрице А, размером n*n, меняет местами максимальный элемент и элемент А(1,1).
10. Описать подпрограмму, которая в матрице, размером n*m, находит сумму элементов каждой строки.
11. Составить процедуру, заменяющую в исходной строке символов все единицы нулями, все нули единицами. Замена должна выполняться, начиная с заданной позиции строки.
12. Составить процедуру, которая из первой заданной строки удаляет все символы принадлежащие и второй заданной строке.
13. Описать подпрограмму, которая преобразует последовательность чисел по правилу: сначала выводятся все положительные, а затем все остальные числа.
14. Составить подпрограмму, которая возвращает значение true, если переданный ей символ является буквой, и false -в противном случае.
15. Напишите программу, вычисляющую с помощью функций среднее значение и среднее арифметическое трёх цифр.

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



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