Функции. Основные принципы структурной методологии. Принцип формальности. Принцип иерархического упорядочивания, страница 6

int main()

   {

float data=1, avg;

while( data != 0 )

{

cout << "Enter a number: ";

cin >> data;                                //вводим значение 5

      avg = getavg(data);                   //вызов функции

cout <<  avg << endl;                 //результат: 5

cout << "Enter a number: ";

cin >> data;                                //вводим значение 15

      avg = getavg(data);                   //вызов функции

cout << avg << endl;                  //результат: 10

}

return 0;

}

//-------------------------------------------------------------float getavg (float newdata)

{

static float total = 0;        //статическая переменная размещается в сегменте данных и

static int count = 0;          //инициализируется только один раз при первом  вызове

count++;                      //count получает значение 1 при первом вызове функции

//count получает значение 2 при втором вызове функции           

total += newdata;        //total получает значение 5 при первом вызове функции

// total получает значение 20 при втором вызове функции return total / count;     

}

Проанализируйте примеры вызовов функций, обработки возвращаемых значений,  использования локальных, глобальных, статических переменных:

//1

#include <stdio.h>
int   reset (int);                 //прототип функции #define    HIGH   5  int  main  ()   {   int   i = HIGH;                //локальная переменная i   reset  (i/2);                        //аргумент получает значение 2, но i свое значение не изменяет
                                                //возвращаемое функцией значение пропадает   printf (“%d\n”, i);                 //5   return    0;  }  int   reset (int i)               //локальная переменная i  {     i = i;     return   (i);   }
//2

#include <stdio.h>

intreset (int);                 //прототип функции   #define   HIGH   5 intmain ()   {      int i = HIGH;//локальная переменная i reset  (i=i/2);               //аргумент получает значение 2, и i изменяет свое значение на 2

//возвращаемое функцией значение пропадает      printf (“%d\n”,i);               //2      return  0;     }     intreset (inti)     {        i = i;        return  (i);        }

//3

#include <stdio.h>

intreset (inti);                                 //прототип функции       #define    LOW    0       #define    HIGH   5        int  i = LOW;                           //глобальная переменная i intmain  ()              {              int  i = LOW;                     //локальная переменная i i = reset  (i/2);      //аргумент i/2 получает значение 0, а и i изменяет свое значение                                                // на значение 5, возвращаемое из функции reset              printf (“%d\n”,i);                //5              return  0;           } intreset  (inti)//локальная переменная i                 {              i = HIGH;              return  (i);              }

//4        #include <stdio.h> intreset (inti);                   //прототипы функций      intworkover  (inti);     #define    LOW    0       #define    HIGH   5       #define    CHANGE    2        int   i= LOW;                           //глобальная переменная i intmain  ()                  {              auto int i = HIGH;            //локальная переменная i reset  (i/2);             //вызов функции с аргументом 2, i свое значение не изменяет                                              //возвращаемое функцией значение пропадает                    reset  (i=i/2);         //вызов функции с аргументом 2, i изменяет свое значение на 2,                                             //значение, возвращаемое функцией, пропадает                                 printf (“%d\n”, i);                  //2              i= reset  (i/2);         //вызов функции с аргументом 1, i изменяет свое значение на                                               //значение 5, возвращаемое функцией              workover(i);                           //вызов функции с аргументом 5