Файл: Использование управляющих конструкций в С++.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 03.04.2023

Просмотров: 859

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

Язык программирования C++ является одним из старейших и продвинутых языков программирования. Это компилируемый язык программирования общего назначения, который сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования. С++ был создан в начале 1980-х годов и с тех пор не теряет актуальности и важности в мире программирования. Он широко используется для создания прикладных программ, разработки операционных систем, драйверов устройств, видеоигр и тд.

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

Цель данной курсовой работы – подробно изучить виды, особенности и использование основных управляющих конструкций в С++.

Для достижения поставленной цели были выделены следующие задачи:

  • Проанализировать литературу по теме курсовой работы;
  • Изучить понятие «управляющие конструкции»;
  • Рассмотреть назначение и использование основных управляющих конструкций в C++;
  • Проиллюстрировать использование основных управляющих конструкций в С++ на примере конкретных задач.

Курсовая работа состоит из введения, трех глав, заключения и списка литературы, включающего в себя 3 источника.

В первой главе описываются основные управляющие конструкции в С++.

Вторая глава посвящена конструкциям, позволяющим делать выбор и производить ветвления в программе.

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

Глава 1. Основные конструкции

Управляющие конструкции позволяют организовывать циклы и ветвления в программах.  В C++ имеется достаточно большое количество конструкций, которые будут рассмотрены в данной работе. К таким конструкциям относятся условия (будут рассмотрены во 2 главе), циклы (будут рассмотрены во 3 главе), исключения, функции и другие.

Фигурные скобки

Основная управляющая конструкция в C++ - это фигурные скобки. Фигурные скобки позволяют объединить несколько элементарных операторов в один составной оператор или блок. Во всех синтаксических конструкциях составной оператор можно использовать вместо простого. [1]


В C++ в начало блока можно помещать описания локальных переменных. Локальные переменные, описанные внутри блока, создаются при входе в блок и уничтожаются при выходе из него. [2] [3]

В C++ локальные переменные можно описывать не только в начале блока, но и в середине, однако вне зависимости от их положения, они автоматически уничтожаются при выходе из блока. [4] [5]

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

double a, b;  

...  

{  

  double tmp = a;  

  a = b;  

  b = tmp;  

}  

Чтобы обменять значения двух переменных a и b, мы сначала запоминаем значение x во вспомогательной переменной tmp. Затем в a записывается значение b, а в b - сохраненное в tmp предыдущее значение x. Поскольку переменная tmp нужна только внутри этого фрагмента, мы заключили его в блок и описали переменную tmp внутри этого блока. По выходу из блока память, занятая переменной tmp, будет освобождена.

Оператор запятая

Оператор запятая (,) позволяет объединить несколько выражений в одно выражение, таким образом в C++ вводится понятие выражение с запятой, имеющее общий вид записи:

<выражение>, <выражение>, <выражение>, . . . [6]

Оператор запятая имеет ассоциативность слева направо. Два выражения, разделенные запятой, вычисляются в направлении слева направо. Левый операнд вычисляется всегда в первую очередь, и перед вычислением правого операнда учитываются все побочные эффекты. [7] [8]

В некоторых контекстах, например, в списках аргументов функций, в качестве разделителей можно использовать запятые. Не следует путать использование запятой в качестве разделителя с ее использованием в качестве оператора; эти два варианта использования совершенно различны. [9] [10]

В тех случаях, когда в качестве разделителя обычно используется запятая (например, в фактических аргументах для функций или составных инициализаторов), оператор запятую и его операнды следует заключать в скобки. [11] Например:

function_1( x, y + 2, z );

function_2( (x--, y + 2), z );

В приведенном выше вызове функции func_one передаются три аргумента, разделенные запятыми: x, y + 2 и z. В вызове функции function_2 скобки заставляют компилятор интерпретировать первую запятую в качестве оператора последовательного вычисления. В этом вызове функции в функцию function_2 передаются два аргумента. Первым аргументом является результат операции последовательного вычисления (x--, y + 2), который имеет значение и тип выражения y + 2; второй аргумент — z.


Операторы передачи управления

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

К операторам передачи управления в C++ относятся:

  • goto;
  • функции (function_name());
  • return.

Оператор перехода goto

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

L: ...;  

...  

goto L;  

В качестве метки можно использовать любое имя, допустимое в C++ (т.е. последовательность букв, цифр и знаков подчеркивания " _ ", начинающуюся не с цифры). [13] Метка может стоять до или после оператора goto. Метка выделяется символом двоеточия " :". Лучше после него сразу ставить точку с запятой " ; ", помечая таким образом пустой оператор - это общепринятая программистская практика, согласно которой метки ставятся между операторами, а не на операторах. [14]

Использование оператора goto нежелательно, поскольку это запутывает программу. Вместо goto при необходимости можно использовать операторы выхода из цикла break и пропуска итерации цикла continue. Единственная ситуация, в которой использование goto оправдано, - это выход из нескольких вложенных друг в друга циклов:

while(...)  

{  

  ...  

  while(...)  

  {  

    ...  

    if(...)  

    {  

      goto LExit;  

    }  

    ...  

    }  

}  

LExit: ;  

Оператор func() вызов функции

Функция — это поименованный набор описаний и операторов, выполняющих определенную задачу. [15] Функция может принимать параметры и возвращать значение. Информация, передаваемая в функцию для обработки, называется параметром, а результат вычислений функции ее значением. Обращение к функции называют вызовом. [16]

Перед вызовом функция должна быть обязательно описана. Описание функции состоит из заголовка и тела функции:

тип имя_функции(параметры)  

{  

  тело функции  

}  

Заголовок функции содержит:

тип возвращаемого функцией значения, он может быть любым; если функция не возвращает значения, указывают тип void;


имя_функции, с которым она будет вызываться;

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

Тело функции представляет собой последовательность описаний и операторов, заключенных в фигурные скобки. [17]

В общем виде структура программы на C++ может иметь вид:

тип имя_1(параметры)  

{  

  //тело функции

}  

тип имя_2(параметры)  

{  

  //тело функции

}

int main(параметры)

{  

//тело функции может содержать

//вызов других функций

//тело основной функции

}  

Стоит отметить, что тексты функции могут следовать после главной функции main(). Однако заголовки необходимо перечислить до нее. [18]

Вызвать функцию можно в любом месте программы. Для этого необходимо указать ее имя и в круглых скобках через запятую перечислить имена или значения аргументов, если такие имеются:

имя_функции(параметры);

Оператор return

Для возвращения результата из функции применяется оператор return. Этот оператор имеет две формы:

return;

return выражение; [19]

Первая форма используется, если в качестве возвращаемого типа функции применяется тип void. [20]

Вторая форма оператора return применяется для возвращения результата из функции. Если функция имеет в качестве возвращаемого типа любой тип, отличный от void, то такая функция обязательно должна возвратить некоторое значение с помощью оператора return. Причем значение, которое возвращается оператором return, должно соответствовать возвращаемому типу функции, либо допускать неявное преобразование в этот тип. [21]

Исключения

Исключение - это некое действие, которое вступает в силу, при наступлении нестандартной ситуации. Говоря о об исключениях в С++, рассмотрим одну из таких нестандартных ситуаций — деление на 0. Если в программе вручную вводится большое количество числовых данных, и в результате определенных расчетов значение одной из переменных станет равным нулю, и это значение выступит в роли делителя, то это действие приведет к неизбежному закрытию программы и выходу из нее и потере всех данных. [22]

Приведенный ниже пример иллюстрирует исключения в С++. Пользователь должен ввести два числа, и программа проведет простые расчеты с этими числами. Ввод и расчеты будут проводиться определенное количество раз — с помощью цикла while.


Если в приведенном ниже коде в переменную a внести число 0, то программа прекращает свою работу, поскольку сталкивается с делением на 0 (см. Листинг 1).

  1. #include <iostream>;  
  2.   
  3. using namespace std;  
  4.   
  5. int main()    
  6. {    
  7.   int a, b, i;     
  8.   i=2  
  9.   while(i--)    
  10. {  
  11.    cout<<"Введите значение num1: ";  
  12.     cin>>a;  
  13.     cout<<"Введите значение num2: ";  
  14.     cin>>b;  
  15.     cout<<"a+b="<<a+b<<endl;  
  16.     cout<<"a/b="<<a/b<<endl;  
  17.     cout<<"a-b="<<a-b<<endl;  
  18. }  
  19. system("pause");  
  20. return 0;  
  21. }    

Листинг 1

В программе цикл должен отработать два раза. В строке 12 циклу передается значение переменной i, и в этой же строке она уменьшается на единицу с помощью операции декремента (i--). Но если в переменную num2 будет введено значение 0, будет виден только результат сложения a + b, и программа завершит работу вне зависимости от того, есть код ниже или нет, отработал цикл или нет.

С помощью исключений возможно избежать подобных проблем. [23] Чтобы добавить исключение к этому примеру, необходимы следующие команды С++:

  • throw;
  • try;
  • catch.

В исходном коде ниже (см. Листинг 2), исключение будет работать следующим образом: программа получает конкретное указание от программиста — если значение определённой переменной в определённом участке кода (в try-блоке) будет равно 0, то в этом случае пусть генерируется исключение throw. Это исключение автоматически передастся catch-блоку в виде параметра, и будет выполнен код этого блока.

Рассмотрим пример:

  1. #include <iostream>;
  2. using namespace std;  
  3.    
  4. int main()  
  5. {  
  6.   int a, b;  
  7.   int var = 2;   
  8.   while(var--)  
  9.   {  
  10.     cout<<"Введите первое число: ";  
  11.     cin>>a;  
  12.     cout<<"Введите второе число: ";  
  13.     cin>>b;   
  14.     cout<<a<<”+”<<b<<”="<<a+b<<endl;  
  15.     cout<<a<<”/”<<b<<”=";   
  16.     try  
  17.     {    
  18.       if (num2 == 0)  
  19.       {  
  20.         throw 123;  
  21.       }  
  22.       cout<<a/b<<endl;     
  23.     }  
  24.     catch(int i)  
  25.     {  
  26.       cout<<"Ошибка "<<i;  
  27.       cout<<" - на 0 делить нельзя!"<<endl;  
  28.     }  
  29.     cout<<a<<”-“<<b<<”="<<a-b<<endl;  
  30.     cout<<endl;  
  31.   }  
  32.   system("pause");  
  33.   return 0;  
  34. }