Similar presentations:
Функции языка программирования С (лекция 6)
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;
}
//очищение динамической памяти