Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++ / Лекция 9.doc
Скачиваний:
101
Добавлен:
02.04.2015
Размер:
110.59 Кб
Скачать

Функции

  • Функции – строительные блоки программы

  • Функции рассматриваются как отдельные компоненты. Ни одна функция не может быть встроена в другую (в отличие от Pascal)

  • main( ) – первая функция, выполняемая при запуске программы в консольном приложении

  • параметр – это определяемая функцией переменная, которая принимает передаваемый функцией аргумент

Объявление функции

тип имя_функции (тип1 параметр1,…,типN параметрN);//прототип

// функции

или

тип имя_функции (тип1,…,типN ); );//прототип функции

тип имя_функции (тип1 параметр1,…,типN параметрN)

{

тело функции

}

  • Тип - тип возвращаемого значения функции, определенный для С++ (кроме массивов ).

  • Оператор return служит для немедленного выхода из функции в вызывающую программу и может возвращать значение функции

  • В теле функции может быть несколько операторов return

  • Если функция не возвращает никакого значения, то в качестве типа используется ключевое слово void

  • Для void-функций инструкция return может отсутствовать или иметь вид return;

  • Список формальных параметров может отсутствовать

  • Если функция вместе с ее реализацией объявляется до использования в теле программы, то протитип не нужен.

Разные способы описания функции

1-способ

2-способ

3-способ

int max (int a, int b);

int max (int a, int b)

{

if (a>b) return a;

else return b;

}

int max (int, int);

int max (int a, int b)

{

if (a>b) return a;

return b;

}

int max (int, int);//прототип

int max (int a, int b)

{

return (a>b)? a:b;

}

Варианты основной функции main()

1 вариант

2 вариант

int main( )

{

int x=10;

int y=5;

// вызов функции max(x,y)

cout<<max(x,y)<<endl;

// обязательно надо возвратить целое

// число

return 0;

}

void main( )

{

int x=10;

int y=5;

// вызов функции max(x,y)

cout<<max(x,y)<<endl;

return ; //или может

// отсутствовать

}

При вызове функции в стеке выделяется место для формальных параметров функции, в которое заносится значение фактического параметра. Далее функция использует и изменяет значения в стеке. Таким образом, фактические параметры не изменяются. При выходе из функции измененные значения теряются.

Это пример вызова по значению (call-by-value)

Пример, когда локальные значения не теряются.

Статические переменные

#include <iostream.h>

void f(int a)

{

int m=0;

cout <<”n m p\n”;

while (a--)

{

static int n=0; // будет изменяться

int p=0; //не будет изменяться

cout<<n++<<’ ‘<<m++<<’ ‘<<p++<<’\n’;

}

}

int main() {f(3); f(2); return 0;}

n m p

0 0 0

1 1 0

2 2 0

n m p

3 0 0

4 1 0

Статическая переменная n

  • размещается в сегменте данных и инициализируется один раз при первом выполнении оператора, содержащего ее определение.

  • сохраняет свое значение между вызовами функций

  • доступна только внутри функции и не может быть случайно изменена вне ее ( в отличие от глобальной переменной).

Пример с использованием статической переменной

Подсчет среднего арифметического

#include <iostream.h>

float avr_number(float var)

{

static float sum=0; // накапливается сумма

static int number=0; // накапливается количество введенных чисел

sum+=var;

number++;

return sum/number;

}

int main( )

{

float a=0;

while (true) // организация бесконечного цикла

{

cout<<"Input a ( 0 - for exit) ";

cin>>a;

if (!a) break;

cout<<avr_number(a)<<endl;

}

return 0;

}