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;

}

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


 

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

76625. Октябрь 1917 г. Установление власти большевиков 37.5 KB
  Установление власти большевиков Причины октябрьской революции 1917 года: усталость от войны; промышленность и сельское хозяйство страны оказались на грани полного развала; катастрофический финансовый кризис; нерешенность аграрного вопроса и обнищание крестьян; оттягивание социальноэкономических реформ; противоречия Двоевластия стали предпосылкой для смены власти. Двоевластие окончилось победой буржуазии. Главной целью октябрьской революции было завоевание власти Советами. ВРК объявил о свержении Временного правительства и передаче...
76626. Гражданская война в России. «Военный Коммунизм» 38.5 KB
  Официально началом войны считаются бои в Петрограде ставшие началом Октябрьской революции то есть октябрь 1917 г. Есть также версии относящие начало войны к началу Февральской революции 1917 г. По поводу окончания войны также нет единодушного мнения: одни ученые и их большинство считают концом войны взятие Владивостока то есть октябрь 1922 г. Причины войны.
76627. Новая экономическая политика (Нэп) 31.5 KB
  По мнению Ленина сущность НЭПа была в налаживании союза между рабочими и крестьянами. Ленин сделал правильный тактический ход попытавшись с помощью НЭПа выйти из кризиса и проскочив опасный период похоронить эту политику. В политику НЭПа были введены и опробованы элементы долгосрочного планирования. Это явилось причиной отказа от политики НЭПа и его свертывания в сельском хозяйстве затем в промышленности а в 30е годы в торговле.
76628. Формирование тоталитарного режима в СССР в 1930-е годы 27 KB
  Во главе небольшой группы политической элиты находится харизматичный лидер любое его слово воспринимается элитой и нацией почти как божественное откровение. не было единства внутри политической элиты существовали оппозиции авторитет нового вождя И. Однако Конституция стала лишь идеологическим прикрытием тоталитарной политической системы.
76629. Форсированная индустриализация в СССР в 1930-е годы 33.5 KB
  Однако Советское государство продолжало отставать от ведущих мировых держав по основным промышленным показателям поэтому основными стали проблемы модернизации промышленности – эта экономическая политика получила название социалистическая индустриализация. Главными особенностями первой пятилетки 1928-–1932 были высокие темпы сжатые сроки акцент на строительство предприятий тяжелой промышленности использование внутренних источников накопления перекачка средств из деревни займы у населения и др. В годы второй пятилетки 1933–-1937...
76630. Коллективизация в СССР в 1930-е годы 34 KB
  Официально коллективизация началась 7 ноября 1929 г. Одновременно осуществлялись две группы мероприятий – сплошная коллективизация массовое насильственное создание колхозов и раскулачивание. Сталину становится ясно что сплошная коллективизация может привести к серьезному экономическому и политическому кризису – в хлебных районах возникали стихийные восстания крестьян шел массовый забой скота начались волнения в армии. сплошная коллективизация возобновилась.
76631. СССР в 1939-1941 гг. Начало второй мировой войны 38.5 KB
  Новые секретные договоренности давали СССР возможность свободы действий в создании сферы безопасности у его западных границ закрепляли присоединение западных областей Белоруссии и Украины позволили Советскому Союзу заключить договоры о взаимной помощи 28 сентября 1939 г. По данным договорам СССР получил право размещения в республиках Прибалтики своих войск и создания на их территориях морских и воздушных баз. Сталин пошел на передачу в руки гестапо многих сотен немецких антифашистов скрывавшихся в СССР от нацистов а также произвел...
76632. Великая Отечественная Война: характер, этапы, итоги 36 KB
  Война между СССР и Германией в рамках Второй Мировой войны закончившаяся победой Советского Союза над фашистами и взятием Берлина. Причины Великой Отечественной Войны После поражения в Первой Мировой войне Германия осталась в крайне тяжелом экономическом и политическом положении однако после прихода к власти Гитлера и проведения реформ страна смогла нарастить свою военную мощь и стабилизировать экономику. Основные тапы Великой Отечественной войны Начальный период войны 22 июня 1941 18 ноября 1942. Третий период войны 19431945 гг.
76633. Внешняя политика СССР 1945-1985 годах 43 KB
  Победа в Великой Отечественной войне решающая роль во Второй мировой войне существенно укрепили авторитет СССР его влияние на международной арене. СССР стал одним из создателей Организации Объединенных Наций постоянным членом Совета Безопасности. Столкновение внешнеполитических интересов СССР с одной стороны и его партнеров по антигитлеровской коалиции США Великобритания с другой в сущности было неизбежным.