
- •Лабораторная работа №4 Программирование пользовательских функций.
- •Теоретические сведения.
- •Время жизни и область видимости переменной.
- •Функции, общие понятия.
- •Использование переменных в функции. Локальные переменные.
- •Статические переменные.
- •Глобальные переменные.
- •Статические переменные.
- •Передача параметров в функцию
- •Передача параметров по значению
- •Передача массива в функцию
- •Примеры программирования.
- •Вопросы.
- •Варианты заданий. Общие требования.
Использование переменных в функции. Локальные переменные.
Переменные, определенные в теле функции – это локальные переменные. Область видимости такой переменной – функция, к ней могут обращаться только операторы тела функции. Время жизни такой переменной от входа до выхода из функции, при входе в функцию – переменная создается, а при выходе из функции – уничтожается.
Пример 2: Функция находит максимальное значение из двух целых чисел
. . .
int max (int a, int b) // a, b - формальные параметры
{ //------------------------ тело функции
int r; // локальная переменная r
if (a>=b) r=a;
else r=b;
return (r); // Возврат результата
}
void main()
{ int x=4, y=10, big;
// Вызов функции max, x,y - фактические параметры
big = max (x,y);
printf ("big=%d\n", big); // big=10
printf ("r=%d\n", r); // ошибка, переменной r уже нет!!!
}
При вызове формальные параметры функции max() инициализируются фактическими значениями :a =4 b =10
После окончания работы возвращаемое значение передается в точку вызова функции, значение локальной переменной r, возвращенное функциейmax ()возникает справа от знака присваивания в оператореbig = max (x,y);
Статические переменные.
Статические переменныемогут быть использованы в теле функции.В отличии от локальных, статические переменные создаются и инициализируются при первом входе в функцию и сохраняются на протяжении выполнения всей программы. Статические переменные в определении функции используются в том случае, если нужно сохранять результат вычислений между вызовами функций.
Пример 3:Использование статических переменных в определении функции.
#include <stdio.h>
// определение функции plus1()
voidplus1()
{staticintx=0;//инструкция выполняется один раз
inty=0; // выполняется при каждом вызове
x=x+1;
y=y+1;
printf("x=%d , y=%d \n",x,y);
} // переменная y уничтожается, переменнаяxсохраняется
voidmain()
{plus1();
plus1();
y++; // переменнойy уже нет (будет ошибка!)
plus1();
x++; // переменнаяхсуществует, но не видна здесь (будет ошибка!)
}
Инструкция х=0(в теле функции) выполняется только один раз, при первом вызове функцииplus1().Посколькупеременная х сохраняется ,происходит её увеличение на единицу при каждом вызове функции.
Локальная переменная yсоздается каждый раз заново при вызове функцииplus1(), при выходе из функции она уничтожается, и поэтому её значение не сохраняется между вызовами функции.
В результате работы программы, на экране будет напечатано :
При 1-ом вызове х=1, y=1
При 2-ом вызове х=2, y=1
При 3-ем вызове х=3, y=1
Глобальные переменные.
Подобно статическим, глобальные переменные создаются один раз в начале работы программы, по-умолчанию они инициализируются нулем и существуют до конца выполнения программы. Но в отличие от статических переменных, которые видны только в той функции, в которой определены, глобальные переменные видны во всех функциях программного модуля.
Пример 4:Использование глобальных переменных.
Переменная gдоступна как в функцииmain(), так и во всех других функциях программы.
#include "stdafx.h"
#include <windows.h>
#include <clocale>
int g=10; // глобальная переменная
void plus1() // определение функции plus1()
{ int p=10; // локальная переменная
g=g+1;
p=p+1;
printf("Плюс 1: g=%d\tp=%d\n",g,p);
}
void minus1() // определение функции minus1()
{ int m=10; // локальная переменная
g=g-1;
m=m-1;
printf("Минус 1: g=%d\tm=%d\n",g,m);
}
// вызывающая программа
int _tmain(int argc, _TCHAR* argv[])
{ setlocale(0,"Russian");
printf("начало: g=%d\n",g);
plus1();
plus1();
g++; // обращение к глобальной переменной g
printf("Середина: g=%d \n",g);
minus1();
minus1();
// локальные переменные здесь недоступны :
p++; // ошибка доступа!
m++; // ошибка доступа!
printf("Конец g=%d \n",g);
system ("pause");
return 0;
}
В результате работы программы, на экране будет напечатано :
Начало : g=10
Плюс 1: g=11p=11
Плюс 1: g=12p=11
Середина : g=13
Минус 1: g=12m=9
Минус 1: g=11m=8
Конец : g=11
Глобальная переменная gдоступна из любой функции программы, включая функциюmain(). К переменнымpиmдоступа из функцииmain() нет, этих переменных просто не существует в момент выполнения функцииmain().
Глобальные переменные по-умолчанию инициализируются нулем.
Локальные переменные по-умолчанию не инициализируются, поэтому в них всегда необходимо заносить начальные значения явно.