Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1 курс / метод указания / Информатика. Основы программирования на С++. Учебное пособие.doc
Скачиваний:
142
Добавлен:
08.06.2015
Размер:
2.15 Mб
Скачать

6.2. Глобальные и локальные переменные

Глобальная переменная объявляется вне каких-либо функций, в том числеmain. Она может использоваться в любом месте программы, начиная от места объявления. Полной противоположностью глобальной переменной являетсялокальная переменная, которая описывается внутри функции. Областью ее действия является функция. Между вызовами одной и той же функции значение локальной переменной не сохраняется. Если этого требуется избежать, при объявлении локальных переменных используется модификаторstatic, например:

. . . . . . . . . . .

staticintn=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; //Второй оператор возврата

}