Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 5 подпрограммы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
433.15 Кб
Скачать

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

Тема: Модульное программирование. Функции.

Цель: получить навыки по

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

  • Передаче данных в подпрограммы

  • Использованию пользовательских подпрограмм при разработке программ.

Оглавление

ЛАБОРАТОРНАЯ РАБОТА №5 1

ЛАБОРАТОРНАЯ РАБОТА №5 1

Модульное программирование. Подпрограммы 1

Теория функций 1

Функция с типом 2

Функция типа void 4

Обмен данными между программой и функцией, между функциями 5

Обмен данными через глобальные переменные 5

Механизм параметров 5

Виды формальных параметров 6

Параметр значение 6

Параметр указатель 7

Параметр ссылка 8

Параметр – константа 8

Параметр по умолчанию 9

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

Способы передачи параметров 10

Передача по значению 11

Передача по адресу 11

Передача по ссылке 11

Правила использования механизма параметров 11

Требования к выполнению лабораторной работы 11

Требования к выполнению первой задачи варианта 12

Требования к выполнению второй задачи варианта 12

Требования к выполнению третьей задачи варианта 12

Варианты 12

Пример оформления отчета задания 1 17

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

ЛАБОРАТОРНАЯ РАБОТА №5

Модульное программирование. Подпрограммы

Теория функций

Подпрограмма – это специальным образом оформленный фрагмент программы, которому присваивается ИМЯ.

Язык Си и С++ поддерживает два вида подпрограмм: функция с типом и функция с типом void.

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

  • определение функции;

  • вызов подпрограммы на выполнение;

  • объявление функции.

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

Функция с типом

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

Согласно этому определению функцию можно сравнить с выражением.

Формат определение функции с типом

[КП] специф.типа/имя типа ИМЯ ФУНКЦИИ ([список формальных параметров])

{

ОПЕРАТОРЫ ТЕЛА ФУНКЦИИ

[return [выражение]];

}

Если тип функции не указан, то действует правило по умолчанию и функция имеет тип int.

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

Тип результата – это имя простого или ссылочного типа.

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

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

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

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

Формат вызова

ИМЯ ФУНКЦИИ ([список фактических параметров])

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

Примеры определения функций с типом

Пример 1. Функция типа int. Наибольший общий делитель двух целых чисел

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

  • что возвращает функция и возвращает ли вообще – т.е. определить тип функции;

  • какие данные являются входными для алгоритма этой функции

int NOD(int a, int b)

{

if(a==0 || b==0)

return (a+b);

while(a!=b)

{

if(a>b)

a=a-b;

else

b=b-a;

}

return a;

}

Пример 2. Функция типа double.

Вычислить расстояние между двумя точкам на плоскости.

double R_len (double X1, double Y1, double X2, double Y2)

{

return (sqrt((X1- X2)* (X1- X2)+ (Y1- Y2)* (Y1- Y2));

}

//Вызов

int main()

{

double X1, Y1, X2, Y2, R;

printf(“Введите координаты двух точек на плоскости”);

scanf(“%lf %lf %lf %lf”, &X1, &Y1, &X2, &Y2);

R=R_len(X1, Y1, X2, Y2);

printf(“R=%lf”,R);

}

Пример 3. Функция, результат которой логическое значение (истина =1. ложь 0).

Сравнение на равенство вещественных чисел с заданной точностью eps.

const double eps=1e-3;

int RealEq(const double x, const double y )

{

return (fabs(x-y)<=eps);

}

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

{

float x=123.455789;

double y=123.455789;

printf("x-y=%lf", fabs(x-y));

if(RealEq(x,y))

printf("yes");

else

printf("no");

}