Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по программированию.doc
Скачиваний:
11
Добавлен:
13.11.2019
Размер:
1.2 Mб
Скачать

Void main(void)

{

Int I; double X,step();

printf("x="); scanf(“%lf'.&x);

printf("п="); scanf(“%d",&i);

printf ("%lf %d=%lf",x,i.STEP(x,i));

}

double STEP(double x, int n)

{

int i; double s=1.0;

for(i=l; i<=n; i++) s*=x;

return s;

}

Здесь сначала описана главная функция, а затем функция STEP. Поскольку естественный порядок описания функ­ций нарушен, мы должны информировать функцию main о том, что где-то в программе описана функция STEP, которую следует использовать. Нужно объявить (декла­рировать) ее. Как видно из примера, делается это очень просто. Функция STEP имеет тип double, и ее объявля­ют в main вместе с описаниями переменных этого типа. Для того чтобы система могла отличить объявление пе­ременной от объявления функции, после имени функции в описании ставят круглые скобки.

Функция STEP от двух аргументов: х (вещественного типа) и n (целого типа), как легко убедиться, возвраща­ет n - ю степень числа х для неотрицательных целых n. Главное, на чем следует остановиться, это то, что в теле функции STEP нам пришлось описать две дополни­тельные переменные - i и s, после чего изготовленная нами функция стала уже совсем похожей на уже совсем родную нам главную функцию main.

Мы упоминали о том, что переменные, описанные внутри функции, явля­ются локальными. Они "живут" только в этой функции и для других функций не существуют. В этой связи имена локальных переменных в разных функциях вполне мо­гут совпадать. Переменная х1 в функции М не имеет никакого отношения к переменной х1 в функции Р так же, как Миша, живущий в квартире 56, это вовсе не то же самое, что Миша, живущий в квартире 65. Совсем иное дело - глобальные переменные, описанные в про­грамме вне функций. Такие переменные (и константы) "живут" во всех функциях, описанных после описания глобальных переменных. Такие объекты видны из любой функции программы. Изменение значения глобальной пе­ременной, сделанное в одной из функций программы, не­медленно отобразится на ее значении во всех остальных функциях. Продолжая нашу аналогию, можно сказать, что Александр Сергеевич Пушкин - он и есть Пушкин и для квартиры 56 и для квартиры 65, и если президентом на выборах стал господин Смит, то он стал президен­том и для штата Техас и для штата Флорида.

Правда, и здесь возможны особенности: а что, если в некой се­мье с нестандартным воображением родившегося ребен­ка назвали А.С. Пушкин? Когда в этой семье говорят о Пушкине, то кого имеют в виду? В житейской ситуации, по-видимому, в этом случае требуются дополнительные пояснения. В С ничего такого не нужно. Существует следующее правило: если имя глобальной переменной со­впадает с именем локальной, для некоторой функции, переменной, то внутри этой функции операции с этим именем относятся к локальному объекту. Так, например, изменение локальной переменной никак не отразится на значении глобальной переменной с тем же именем. Наобо­рот, изменение глобальной переменной проявится во всех функциях, где такое имя не описано, а там, где описана ее локальная "тезка", с последней ничего не произойдет.

Мы говорили пока о типизированных функциях, вы­числяющих одно значение и возвращающих это значе­ние в качестве значения функции. Возможен, однако, и другой вариант использования функций, когда требует­ся определить и передать в программу несколько значе­ний. В некоторых языках программирования такие программные модули носят название процедур. Типичная для этого варианта задача - преобразование координат. Допустим, нам нужно создать функцию, которая принимает в качестве аргументов полярные ко­ординаты точки и и передает в вызывающую эту функцию программу декартовы координаты точки Х и У, вычисляемые по формулам:

Один из способов решения такой задачи состоит в пе­редаче вычисленных значений в вызывающую програм­му в виде глобальных переменных:

#include<stdio.h>

#include<math.h>

#define Pi 3.1415927

double X,Y;