68599

Исследование способов работы с функциями

Лабораторная работа

Информатика, кибернетика и программирование

В данной функции значения переменных x и y являющихся формальными параметрами меняются местами но поскольку эти переменные существуют только внутри функции chnge значения фактических...

Русский

2014-09-23

60.5 KB

0 чел.

Лабораторная работа № 3

Тема: Исследование способов работы с функциями

Цель занятия:

  •  Совершенствование навыков разработки программ в среде программирования MS Visual C++
  •  Совершенствование навыков в программировании с использованием указателей
  •  Исследование способов передачи параметров в функцию
  •  Исследование порядка возвращения параметров из функции

Время на выполнение  работы: 2 часа

Программа исследований:

  1.  Исследование способа передачи параметров в функцию по значению
    1.  Исследование способов передачи параметров в функцию по адресу
    2.  Исследование порядка возвращения параметров из функции

Подготовка к выполнению работы:

  1.  Изучить материал настоящего руководства и рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка Си, переменные и константы, стандартные типы данных, выражения и операции в языке Си, циклы, массивы и указатели, функции).
  2.  Практически освоить порядок работы на ПЭВМ в среде программирования MS Visual C++.

Материалы для подготовки к занятию:

  1.  Конспект лекций
  2.  [1] стр. 73-82

Содержание отчета:

  1.  Цели исследования.
  2.  Программу работы.
  3.  Листинги программ
  4.  Результаты исследований
  5.  Выводы по каждому пункту и общий вывод.


МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ

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

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

Пример:  

      /*    использование параметров по значению  */

 void change (int x, int y);

void main()

  {

  int a=5,b=15;

  cout<<”\na=”<<a<<”, b=”<<b;

  change(a,b);

  cout<<”\na=”<<a<<”, b=”<<b;

  return;

  }

      void change (int x, int y)

        {    

  int k=x;

        x=y;

        y=k;

  }

В данной функции значения переменных x и y, являющихся формальными параметрами, меняются местами, но поскольку эти переменные существуют только внутри функции change, значения фактических параметров, используемых при вызове функции, останутся неизменными, то есть значения переменных a и b как были 5 и 15 соответственно, так и остались. Для того чтобы менялись местами значения фактических аргументов можно использовать функцию приведенную в следующем примере.

Пример:

     /*    использование параметров по адресу  */

      void change (int *x, int *y)

      {  int k=*x;

            *x=*y;

            *y=k;}

При вызове такой функции в качестве фактических параметров должны быть использованы не значения переменных, а их адреса  change (&a,&b);. Тогда функция будет оперировать не с локальными значениями, а со значениями по адресам, переданным в функцию в качестве параметров, что приведет к обмену значениями переменных a и b.

Существует еще один способ передачи параметров в функцию – по ссылке. Механизм использования ссылок очень удобен и прост в использовании. Рассмотрим тот же самый пример, но с использованием механизма ссылок:

Пример:

      /*    использование параметров по ссылке  */

 void change (int &x, int &y)

      {    int k=x;

               x=y;

               y=k;}

При вызове такой функции в качестве фактических параметров должны быть использованы имена переменных:  change (a,b);. При этом, в функции мы будем работать с самими переменными a и b, но через альтернативные их имена: x и y.

Любая функция по результатам своей работы может возвращать какое-либо значение. Функция не может возвращать массив или функцию, но может возвращать указатель на любой тип, в том числе и на массив и на функцию. Тип возвращаемого значения, задаваемый в определении функции, должен соответствовать типу в объявлении этой функции.

Функция возвращает значение если ее выполнение заканчивается оператором return, содержащим некоторое выражение. Указанное выражение вычисляется, преобразуется, если необходимо, к типу возвращаемого значения и возвращается в точку вызова функции в качестве результата. Если оператор return не содержит выражения или выполнение функции завершается после выполнения последнего ее оператора (без выполнения оператора return), то возвращаемое значение не определено. Для функций, не использующих возвращаемое значение, должен быть использован тип void, указывающий на отсутствие возвращаемого значения. Если функция определена как функция, возвращающая некоторое значение, а в операторе return при выходе из нее отсутствует выражение, то поведение вызывающей функции после передачи ей управления может быть непредсказуемым.


ЗАДАНИЕ НА ИССЛЕДОВАНИЕ

  1.  Исследование способа передачи параметров в функцию по значению
    •  реализовать в среде программирования следующий листинг:

void Swap(int a, int b);

int main(int argc, char* argv[])

{

int x,y;

cout<<"\nEnter two numbers: ";

 cin>>x>>y;

cout<<"\nx="<<x<<", y="<<y;

Swap(x,y);

    cout<<"\nx="<<x<<", y="<<y;

 cout<<endl;

return 0;

}

void Swap(int a, int b)

{

int c;

c=a;

a=b;

b=c;

 return;

}

  •  с использованием режима отладки исследовать процесс исполнения программы в микропроцессоре. Обратить внимание на способ и место хранения значений локальных переменных a,b и c.
  1.   Исследование способа передачи параметров в функцию по адресу
    •  реализовать в среде программирования следующий листинг:

void Swap(int *a, int *b);

int main(int argc, char* argv[])

{

int x,y;

cout<<"\nEnter two numbers: ";

 cin>>x>>y;

cout<<"\nx="<<x<<", y="<<y;

Swap(&x,&y);

   cout<<"\nx="<<x<<", y="<<y;

 cout<<endl;

return 0;

}

void Swap(int *a, int *b)

{

int c;

c=*a;

*a=*b;

*b=c;

 return;

}

  •  с использованием режима отладки исследовать процесс исполнения программы в микропроцессоре. Обратить внимание на способ и место хранения значений локальных переменных a,b и c;
    •  реализовать в среде программирования следующий листинг:

void Swap(int &a, int &b);

int main(int argc, char* argv[])

{

int x,y;

cout<<"\nEnter two numbers: ";

 cin>>x>>y;

cout<<"\nx="<<x<<", y="<<y;

Swap(x,y);

   cout<<"\nx="<<x<<", y="<<y;

 cout<<endl;

return 0;

}

void Swap(int &a, int &b)

{

int c;

c=a;

a=b;

b=c;

 return;

}

  •  с использованием режима отладки исследовать процесс исполнения программы в микропроцессоре. Обратить внимание на способ и место хранения значений локальных переменных a,b и c;
    •  сделать выводы по рассмотренным методам.
  1.  Исследование порядка возвращения параметров из функции
    •  реализовать в среде программирования следующий листинг:

int Max(int a, int b);

int main(int argc, char* argv[])

{

int x,y,c;

cout<<"\nEnter a two numbers: ";

 cin>>x>>y;

c=Max(x,y);

   cout<<"\nMaximum is "<<c;

cout<<endl;

return 0;

}

int Max(int a, int b)

{

int c;

c=(a>b)?a:b;

return c;

}

  •  с использованием режима отладки исследовать процесс исполнения программы в микропроцессоре. Обратить внимание на способ и место хранения значений локальных переменных a,b иc;
  •  реализовать в среде программирования следующий листинг:

int* GetMem();

int main(int argc, char* argv[])

{

int *a;

a=GetMem();

   cout<<"\n a is "<<a;

cout<<"\n*a is "<<*a;

cout<<endl;

return 0;

}

int* GetMem()

{

int *c=new int(5);

 return c;

}

  •  с использованием режима отладки исследовать процесс исполнения программы в микропроцессоре;
  •  сделать выводы.


 

А также другие работы, которые могут Вас заинтересовать

16177. Криминальные организации. Учебное пособие 518 KB
  Криминальные организации Преступность вымогательство и политика американского города. От автора Эта книга совместный труд прошедший множество стадий прежде чем принять настоящую форму. Я обязан огромному числу людей за их помощь. Филипп Дженкинс из ...
16178. Муниципальное право России. Учебное пособие 628.5 KB
  СЕРИЯ ПОДГОТОВКА К ЭКЗАМЕНУ И. В. Постовой Муниципальное право России вопросы и ответы МОСКВА Юриспруденция 2000 УДК35 ББК 67.401 П63 П63 Постовой Н.В. Муниципальное право России: Вопросы и ответы. М.: Юриспруденция 2000. 128 с. С
16179. Тактика допроса на предварительном следствии. Учебное пособие 2.4 MB
  Порубов Н. И. Тактика допроса на предварительном следствии: Учебное пособие. М.: Издательство БЕК 1998. 208 с. В книге на основе действующего законодательства последних достижений криминалистики данных психологии логики и педагогики рассматривается допрос в проце
16180. Правовое положение холдингов в России. Учебное пособие 1.15 MB
  Правовое положение холдингов в России Предисловие Настоящая книга посвящена теме которая представляет большой интерес для практики и науки. Практика хозяйственной деятельности в настоящее время требует объединения усилий субъектов для достижения поставл...
16181. Искусство речи на суде. Учебное пособие 1.46 MB
  Искусство речи на суде Пороховщиков П.С. Искусство речи на суде. Тула издательство Автограф 2000 г. Воспроизводится по изданию 1910 г. Главная задача книги это исследование судебного говорения и установление его методов. Книга адресована студентам юридических...
16182. Язык и стиль судебных документов. Учебное пособие 506.5 KB
  Издание второе переработанное и дополненное. Сборник подготовлен Федеральным арбитражным судом СевероЗападного округа при содействии Совета судей Российской Федерации Союза юристов России и финансовой поддержке ФГУП Росэнергоатом. Автор идеи и руководитель пр
16183. История государства и права зарубежных стран. Учебное пособие 1.41 MB
  Попова ИСТОРИЯ ГОСУДАРСТВА И ПРАВА ЗАРУБЕЖНЫХ СТРАН Об авторе Содержание курса Программа курса Введение Вводный раздел Тема 1. ГОСУДАРСТВО И ПРАВО ДРЕВНЕГО ВОСТОКА Тема 2. ГОСУДАРСТВО И ПРАВО ДРЕВНЕЙ ГРЕЦИИ И ДРЕВНЕГО РИМА Тема 3. ФЕОДАЛЬНОЕ ГОСУДАРСТВО В ...
16184. Уголовный закон и его обратная сила. Учебное пособие 375 KB
  Данная работа посвящена вопросам действия уголовного закона во времени. Автор комментирует соответствующие нормы уголовного законодательства ряда зарубежных государств, раскрывает основные положения Уголовного кодекса Российской Федерации о действии уголовного закона во времени и его обратной силе
16185. Международное частное право. Учебное пособие 994.5 KB
  7.93 Рецензент кандидат юридических наук А. М. Сытник Международное частное право высшая математика юриспруденции. Профессор М.М.Богуславский. ПРЕДИСЛОВИЕ К ПЕРВОМУ ИЗДАНИЮ С недавних пор говорить о невмешательстве в частные дела стало модным. Однако говорит...