Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CИ-часть3студ.doc
Скачиваний:
12
Добавлен:
09.02.2015
Размер:
196.1 Кб
Скачать

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

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

// функция без параметров

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

const int mmax=10,nmax=15;

float a[mmax][nmax], b[mmax*nmax],sum,pr;

int m,n,k;

void fun();

int _tmain(int argc, _TCHAR* argv[])

{ int i,j;

printf("wwedit m i n\n");

scanf("%d%d",&m,&n);

printf("\nwwedie matrizu\n");

for(i=0;i<m;i++)

for (j=0;j<n;j++)

scanf("%f",&a[i][j]);

fun();

if (k>0)

{printf("\nmassiw poloshitelnix\n");

for(i=0;i<k;i++)

printf("%6.2f ",b[i]);

} else printf("\npoloshitelnix net");

printf("\n sum=%6.2f pr=%6.2f",sum,pr);

getch();

return 0;

}

void fun()

{int i,j;

k=0;

sum=0.0;

pr=1.0;

for(i=0;i<m;i++)

for (j=0;j<n;j++)

{sum+=a[i][j];

pr*=a[i][j];

if (a[i][j]>0)

{b[k]=a[i][j];

k++;

}

}

  1. }

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

Следующая программа демонстрирует побочный эффект. Результат работы зависит от последовательности вычисления суммы, сохраняемой в переменной y. В первом варианте сначала переменной y присваивается значение переменной x, а затем дважды производится обращение к функции sum, в итоге получим y=22. Во втором варианте сначала переменной y присваивается сумма значений, возвращаемых при двух обращениях к функции sum, а затем прибавляется значение переменной x. Поскольку значение глобальной переменной x изменяется в функции, то к y прибавится дважды измененное значение x, равное 9 и результат будет равен 26, а в первом случае в y заносится исходное значение x (до обращения к функции), результат будет равен 22.

// побочные эффекты

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

#include "math.h"

float x=5;

float sum(float a,float b);

int _tmain(int argc, _TCHAR* argv[])

{ float a=8,b=2,y=0;

printf("x=%5.1f",x);

y=x; // 1-ый вариант

y+=sum(a,b)+sum(3,4);

//2-ой вариант y+=x;

printf(" y=%5.1f",y);

getch();

return 0;

}

float sum( float a,float b)

{ x=x+2;

printf("\nx=%5.1f a=%5.1f b=%5.1f",x,a,b);

return a+b;

  1. }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]