Лекция: Глобальные и локальные переменные
Глобальнаяпеременная объявляется вне каких-либо функций, в том числе main. Она может использоваться в любом месте программы, начиная от места объявления. Полной противоположностью глобальной переменной является локальнаяпеременная, которая описывается внутри функции. Областью ее действия является функция. Между вызовами одной и той же функции значение локальной переменной не сохраняется. Если этого требуется избежать, при объявлении локальных переменных используется модификатор static, например:
.......... .
static int n=0; n++; //при повторном вызове n=1, далее n=2 и т.д.
.......... .
Если локальная и глобальная переменные имеют одно и то же имя, то локальная переменная «блокирует» в функции действие глобальной переменной, т.е. глобальная переменная в этом случае не видима.
Использование глобальных переменных в функциях не рекомендуется, так как это препятствует их помещению в библиотеку общего пользования. Необходимо всегда стремиться к тому, чтобы функции были максимально независимыми и обменивались информацией через свои заголовки.
Пример. Составить программу вычисления значения
,
приk=10, m=4, d=2,5; bi=1…4,6; ci=1…3,6.
Вычисление суммы и факториала оформить в виде функций.
Программа для решения данной задачи приведена в лист. 6.1.
Листинг 6.1. faktorial.сpp
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
float d=2.5; //Глобальная переменная
//Прототип функции summ с параметром по умолчанию
double summ(double,double,int,int=2);
//Описание основной функции main
void main() /*Функция main не имеет параметров
и не возвращает значение*/
{
int k,m; //Локальные переменные
double b1,bk,c1,ck,y,y1,y2; //функции main
//Ввод исходных данных
cout<<«k=»;cin>>k;
cout<<«m=»;cin>>m;
cout<<«b1=»;cin>>b1; //Начальное значение bi
cout<<«bk=»;cin>>bk; //Конечное значение bi
cout<<«c1=»;cin>>c1; //Начальное значение ci
cout<<«ck=»;cin>>ck; //Конечное значение ci
y1=tan(d)*summ(b1,bk,k); //Параметр по умолчанию опущен
y2=exp(d)*summ(c1,ck,m,3); //Параметр по умолчанию изменен
y=y1+y2;
cout<<"\nПолученный результат:";
cout<<«y=»<<setw(8)<<y;
}
unsigned long fact(int); //Прототип функции fact
//Описание функции вычисления суммы summ
double summ(double x1,double xk,int p,int q) //Заголовок
{ double x=x1,s=0,h; //Локальные переменные
h=(xk-x1)/(p-1); //Вычисление шага
for(int i=1;i<=p;i++)
{
s+=(pow(x,q)+d)/fact(q*i); //Вызов функции fact
x+=h;
}
return s; //Возвращение результата
}
//Описание функции вычисления факториала fact
unsigned long fact(int a) //Заголовок функции fact
{
unsigned long f=1; //Локальная переменная f
if(a==0) return 1; //Первый оператор возврата
for(int j=1;j<=a;j++)
f*=j;
return f; //Второй оператор возврата
}