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

Аргументы в функцию можно передавать двумя способами.

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

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

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

#include <stdio.h>

int sqr (int x);

int main (void)

{

int t = 10;

printf(“%d %d”, t, sqr(t) )

return 0;

}

int sqr (int x)

{

x = x*x;

}

В данном примере значение аргумента, передаваемого в sqr (), равное 10, копируется в параметр x. Когда происходит присваивание x = x*x, изменяется только локальная переменная х. Переменная t, используемая при вызове sqr(), по-прежнему содержит значение 10. Следовательно, на экране появится «10 100».

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

      1. Создание передачи по ссылке

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

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

Void swap(int *x, int *y)

{

int temp;

temp = x; /* сохранение значения по адресу */

*x = *y; /* помещение у в х */

*y = temp; /* помещение х в у */

}

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

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

#include <stdio.h>

void swap (int *x, int *y);

int main (void)

{

int x, y;

x = 10;

y = 20;

swap(&x, &y);

printf(“%d %d”, x, y);

return 0;

}

В данном примере переменной х присваивается значение 10, а у – 20. Затем вызывается функция swap() с адресами х и у. Унарный оператор & используется для получения адресов переменных. Поэтому в функцию swap() передаются адреса х и у, а не их значения.

  1. Методические указания

а) При определении суммы членов ряда следует использовать реккурентную формулу для получения следующего члена ряда .

Например, требуется найти сумму ряда с точностью = 10-4, общий член которого

Для получения реккурентной формулы вычислим отношение последующего члена ряда к текущему:

откуда

.

б) заданную точность оценивать по последнему члену ряда, т. е. an .

Пример программы

#include <stdio.h>

#include <conio.h>

main()

{

float const eps = 1e-4; /* заданная точность */

int n=1;

float An, sum=0.0;

An = 1/3;

while (An <= eps)

{

sum = sum+An;

n++;

An = An*(n+1)/(2*(2*n+1);

} /* конец while */

clrscr();

printf(“ Сумма = %f\n Последний член ряда = %f”, sum, An);

}

  1. Варианты задания

№ варианта

Функция

Начальное значение

Шаг

Конечное значение

Погрешность

1

2

3

4

5

6

7

8

9

10

11

12

13

14

ex

e-x

sin x

cos x

0.730

0.730

0.015

0.025

0.08

0.00

0.70

0.10

0.015

0.035

40o

50o

16o

15o

0.005

0.005

0.001

0.001

0.02

0.05

0.01

0.01

0.001

0.002

20’

20’

15’

6’

0.780

0.780

0.035

0.045

0.80

0.95

0.90

0.25

0.027

0.055

45o

55o

20o

16o

10-6

10-6

10-6

10-7

10-8

10-6

10-6

10-6

10-5

10-6

10-5

10-7

10-6

10-7

Разложения в степенной ряд функций, указанных выше:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]