Учебное пособие: Язык прораммирования С++

В фигурных скобках, как и в главной функции, находятся объявления переменных и операторы, реализующие вычисление функции. Вычисления должны обязательно заканчиваться оператором return, возвращающим вычисленное значение. В данном примере оператор возвращает значение, помещенное в переменную s. Но вместо переменной можно также записывать выражение, например, приведенную выше функцию можно было реализовать так:

float area(int x, int y)

{ return x * y ;

}

В функции main мы использовали обозначение void и вместо возвращаемого значения и вместо списка параметров – это тоже тип данных, не знаю, как его лучше называть, то ли пустой, то ли неопределенный это пустые, не имеющие значения данные. Неизвестно даже, сколько байтов нужно для их хранения – поэтому и объявить переменную типа void нельзя. Этот тип указывают как раз там, где обычно ожидают какого-нибудь значения, а его нет. То есть, заголовок voidmain(void), указывает, что функция main не получает параметров и не возвращает значения. (На Паскале такая конструкция называлась бы процедурой без параметров). Поместим вызов нашей функции в главную программу:

void main(void)

{float A,B;

int b,R;

b = 4;

A = area(5,b);

B = area (20,30);

}

При выполнении программы сначала оператором b=4; в переменную b занесется число четыре. Следующий оператор вызовет вычисление функции area(5,b); для того, чтобы записать ее значение 25 в переменную A.

Выполнение операции вызова функции area(5,b) заключается в следующем:

– программа перестает выполнять операторы главной функции main()и переходит к выполнению функции area(), при этом ей передаются указанные при вызове значения параметров – в параметр x запишется число 5, а в параметр y значение переменной b – число четыре;

– выполняется первый оператор, записанный в теле функцииarea(), то есть строкаs= x*y;. При этом функция вычислит произведение 5*4 и запишет его в переменную s.

– у нас очень короткая функция, но в общем случае операторы функции выполняются до тех пор, пока не встретится оператор выхода из функции return;

– в этом операторе после слова return помещается выражение, определяющее значение функции. Выполнение оператора заключается в вычислении выражения и возврате в то место, откуда функция вызывалась, но уже с результатом – значением функции.

Как видим, из описания самой функции нельзя увидеть, чему равны параметры x и y. Они потому и называются формальными, что получают фактические значения только во время выполнения программы – в момент вызова функции. Так, при следующем вызове B=area(20,30); формальные параметры x и y получат значения 20 и 10. Как мы помним из предыдущих глав, процедуры и функции тем и хороши, что позволяют проделывать одни и те же действия, но с разными исходными данными.

Замечание. Когда компилятор переводит строки языка С++ в машинные коды, он, как и мы, просматривает программу сверху вниз. Поэтому, к моменту вызова функции area() он уже обработал описание функции и знает, что функция должна получать в качестве параметров два целых числа и возвращать вещественный результат. Поэтому если вставить в программу операторы

R=area(20,30,70);

B=area(2.5,10);

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

Если мы запишем функцию area() после главной, то во время обработки оператора A=area(5,b); у компилятора еще не будет информации для проверки правильности вызова.

Так что же, мы не можем поместить функцию вычисления площади после главной функции? Можем, но заголовок функции area()придется написать еще раз, как показано ниже:

float area(int x, int y);

void main(void) {

float A,B;

int b,R

К-во Просмотров: 454
Бесплатно скачать Учебное пособие: Язык прораммирования С++