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;

}

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


 

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

56548. Целеполагание на уроках музыкального воспитания 33.5 KB
  Цель воспитание музыкального вкуса нравственных и эстетических чувств уважение к истории своей Родины музыкальным традиция своего народа и культур разных стран мира; показ песни.
56549. Профессия. Работа 1.64 MB
  Цели: совершенствовать навыки употребления изученного лексико-грамматического материала, познакомить со строением официально-делового письма, развивать навыки устной и письменной речи, формировать представление об активном образе жизни, развивать навыки делового общения.
56550. Є цінності, які за все дорожчі… Урок розвитку зв’язного мовлення. Твір-роздум на морально-етичну тему 73.5 KB
  Мета: формувати в учнів уміння і навички, які б сприяли вільному використанню засобів мови в будь-яких життєвих ситуаціях під час сприймання, відтворення і створення власних висловлювань...
56552. Сценарій туристичного свята «Посвята в туристята» 235.5 KB
  Мета та завдання: сприяти залученню школярів до систематичних занять туризмом; згуртувати дітей в єдину команду, об’єднавши усіх її учасників єдиною творчою діяльністю; залучати учнів до творчої діяльності, впливати на особистість дитини; закріпити набуті туристичні знання, уміння і навички;
56553. Учнівський проект «Україна туристична» 45 KB
  Цілі проекту: навчальна: навчання учнів технологіям проектної діяльності; спонукаючи формуванню в учнів практичних знань і навиків; розвиваюча: розвивати вміння та навички самостійно відбирати систематизувати аналізувати інформацію...
56554. Інформаційна система 50.5 KB
  А поруч з капітаном в компютерному крузі Помічники чудові його надійні друзі Хоч інформатику вони не так довго вивчають Про файли та курсори все необхідне знають Команда друга теж до змагань готова Там хлопці працьовиті їм невідома втома...
56555. Ігровий турнір «Через гру до безпеки життя» 202 KB
  Та команда котра першою правильно виконає завдання отримує 3б. Що ускладнює виконання кладки взимку низька температура снігопади ожеледь використання додаткового обладнання та інструментів Гра Піраміда...
56556. Сценарій позакласного заходу «Лицарський турнір» 122.5 KB
  Король Хлодвіг А зараз ми проведемо спортивний конкурс аби ви хоч трішки розімялись та показали хто спритніший в гонці на конях. Конкурс Найкращий гонец Учасники загону повинні за командою Герольда по одному пробігти на конях дистанцію на швидкість.