225.50K
Категория: ПрограммированиеПрограммирование

Лекция_6_Функции (3)

1.

Лекция 6
Функции языка
программирования С

2.

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

3.

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

4.

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

5.

Определение функции
Имеет следующую форму:
ТИП функции ИМЯ функции (список параметров)
{
Тело функции
}

6.

Тип функции
– это тип вычисленного и возвращаемого
в вызывающую ее функцию значения.
• Если функция возвращает целое число,
то ее тип будет int,
• Если дробное число, то – float ,
• Если символы – char,
• И т.д.

7.

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

8.

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

9.

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

10.

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

11.

Примеры
• Стандартная функция printf(“%d”, x); -
выводит значение переменной х на
экран – передача по значению.
• Стандартная функция scanf_s(“%d”, &x);
- вводит значение переменной х с
клавиатуры – передача по ссылке.

12.

Пример задачи
Заданы 3 массива.
Найти максимальные значения в этих
массивах.
Затем найти минимум из этих трех
максимумов.

13.

Прототипы функций
void program(void);
void input(int *, int);
void output(int *, int);
int maxim(int *, int );
void minim(int , int , int );

14.

Передача массива в функцию
Массив в функцию передается по
указателю:
input(&a[0], 7);
По определению имя массива является
указателем, поэтому массив можно
передать и так:
input(a, 7);

15.

void program(void)
{
int a[7], b[6], c[8]; //массивы
int ma, mb, mc;
//их максимумы
input(a, 7);
input(b, 6);
input(c, 8);
output(a, 7);
output(b, 6);
output(c, 8);
ma=maxim(a, 7); printf(“ma = %d\n”, ma);
mb=maxim(b, 6); printf(“mb = %d\n”, mb);
mc=maxim(c, 8); printf(“mc = %d\n”, mc);
minim(ma, mb, mc);
}

16.

Теперь сами функции:
void input( int *x, int n)
{
int i;
for (i=0; i<n; i++)
{
x[i]=rand() % 10;
}
}

17.

Теперь сами функции:
void output (int *x, int n)
{
int i;
for (i=0; i<n; i++)
{
printf ("%d\t",x[i]);
}
printf("\n");
}

18.

Теперь сами функции:
int maxim(int *x, int n)
{
int i, max;
max=x[0];
for(i=0; i<n; i++)
{
if (x[i]>max) max=x[i];
}
return max;
}

19.

Теперь сами функции:
void minim(int a, int b, int c)
{
int min;
if ((a<=b) && (a<=c)) min=a;
if ((b<=c) && (b<=a)) min=b;
if ((c<=a) && (c<=b)) min=c;
printf (“minimum = %d\n", min);
}

20.

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

21.

Пример
Написать программу нахождения
среднего значения чисел.
Это могут быть 2 числа, 3 числа и т.д.
Числа могут быть разного типа,
возвращаемый результат тоже может
быть разного типа.

22.

//---Прототипы функций
float sredn (int a, int b);
float sredn (int a, int b, int c);
//--- внешняя функция
void program_1(void)
{
int a=1, b=2, c=3;
printf(“(%d+%d)/2 = %.2f\n”, a, b, sredn(a, b));
printf(“(%d+%d+%d)/3 = %.2f\n”, a, b, c, sredn(a, b, c));
}
//--float sredn (int a, int b)
{
return (float)(a+b)/2;
}
//--float sredn (int a, int b, int c)
{
return (float)(a+b+c)/3;
}

23.

Размер массива с клавиатуры
void massive_1(void)
{
const int MAX_SIZE = 100;//Максимальный размер массива
int n;//Будущий реальный размер массива
int i;
int m[MAX_SIZE], numb[MAX_SIZE];
printf("Enter n<100: "); scanf_s("%d", &n);
//И дальше везде n использовать в качестве размера массива
}

24.

Размер массива с клавиатуры
void Dyn_Massive(void)
{
int n; //Будущий реальный размер массива
printf("Enter dimmension of your array: "; //Введите размер массива
scanf_s(“%d”, &n);
int* a= new int[n]; //динамически выделяем память
//далее работаем с массивом как обычно
...
delete [] a;
}
//очищение динамической памяти
English     Русский Правила