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;

}

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


 

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

22818. Причини, основні завдання та особливості Лютневої (1917 р.) революції в Росії 29.5 KB
  революції в Росії. В Росії виникає двовладдя. Ліберальні депутати Державної Думи Росії сформували Тимчасовий уряд який спирався на буржуазію поміщиків на панівний клас інтереси яких виражав. Друга влада в Росії Петроградська влада робітничих та солдатських депутатів.
22819. Зовнішня політика УНР. Берестейській договір та його наслідки 33 KB
  У зовнішній політиці Директорії вдалося розширити міжнародні зв'язки УНР її визнали Угорщина Чехословаччина Голландія Італія. Не визнали УНР країни Антанти й відроджена Польща яка претендувала на Правобережну Україну. Не визнавши гетьманської адміністрації дипломати країн Антанти не збиралися визнавати й поновлену УНР.
22820. Проголошення ЗУНР та її злука з УНР 30 KB
  у Львові відбулося загальне собранне укр. політичних діячів Галичини і Буковини що обрало керівний орган Національний Рада що заявив про прагнення об'єднати усе західноукр. Национальный Рад увів війська у Львів і в Східну Галицню проголосив 18 листопада 1918 р утворення Западноукрдинской Народної республіки ЗУНР Президент Е. Було зроблене таке: для захисту республіки утворив власну Укр.
22821. Ассортимент товаров. Определения. Характеристика товарного ассортимента. Структура ассортимента. Формирование ассортимента. Ассортиментная политика 21.33 KB
  Одной из важнейших товароведных характеристик товаров является ассортиментная характеристика, которая определяет принципиальные различия между товарами разных видов и наименований. Ассортимент товара - перечень товаров, объединенных по какому-либо признаку и удовлетворяющие потребности человека.
22822. Качество товара, определения. Требования к качеству товара. Классификация свойств и показателей качества. Потребительская ценность продукции: базовая и дополнительная и их влияние на 16.84 KB
  Качество — одна из основополагающих характеристик товара, которая оказывает решающее влияние на создание потребительских предпочтений и формирование конкурентоспособности.
22823. Органічна хімія, конспект лекцій 887 KB
  Значення органічної хімії. Вивчення основних теоретичних положень органічної хімії сприяє формуванню, розширенню і поглибленню фундаментальних, загальнопрофесійних, спеціальних знань, а також активному формуванню предметних і професійних компетенцій, спрямованих на виконання виробничих функцій.
22824. Обязательная сертификация в законе «О техническом регулировании». Ее сущность, объекты, участники. Организация обязательной сертификации 19.03 KB
  Порядок передачи сведений о выданных сертификатах соответствия в единый реестр выданных сертификатов устанавливается федеральным органом исполнительной власти по техническому регулированию...
22825. Государственный контроль и надзор за соблюдением обязательных требований технических регламентов 16.81 KB
  Государственный контроль (надзор) за соблюдением требований технических регламентов осуществляется федеральными органами исполнительной власти, органами исполнительной власти субъектов Российской Федерации
22826. Релаксаційні коливання у схемі з неоновою лампою 86 KB
  Якщо напруга досягне певної величини яка називається напругою запалювання U3 лампа спалахне і струм стрибком досягне скінченої величини I3. Коли напруга спаде до величини U3 лампа не погасне. За другим правилом Кірхгофа для цього кола маємо 1 де Uk напруга на конденсаторі та неоновій лампі яка підключена до нього паралельно.15 видно що напруга на конденсаторі монотонно зростає із швидкістю яка залежить від величини добутку RC.