Добавлен: 03.04.2023
Просмотров: 857
Скачиваний: 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).
- #include <iostream>;
- using namespace std;
- int main()
- {
- int a, b, i;
- i=2
- while(i--)
- {
- cout<<"Введите значение num1: ";
- cin>>a;
- cout<<"Введите значение num2: ";
- cin>>b;
- cout<<"a+b="<<a+b<<endl;
- cout<<"a/b="<<a/b<<endl;
- cout<<"a-b="<<a-b<<endl;
- }
- system("pause");
- return 0;
- }
Листинг 1
В программе цикл должен отработать два раза. В строке 12 циклу передается значение переменной i, и в этой же строке она уменьшается на единицу с помощью операции декремента (i--). Но если в переменную num2 будет введено значение 0, будет виден только результат сложения a + b, и программа завершит работу вне зависимости от того, есть код ниже или нет, отработал цикл или нет.
С помощью исключений возможно избежать подобных проблем. [23] Чтобы добавить исключение к этому примеру, необходимы следующие команды С++:
- throw;
- try;
- catch.
В исходном коде ниже (см. Листинг 2), исключение будет работать следующим образом: программа получает конкретное указание от программиста — если значение определённой переменной в определённом участке кода (в try-блоке) будет равно 0, то в этом случае пусть генерируется исключение throw. Это исключение автоматически передастся catch-блоку в виде параметра, и будет выполнен код этого блока.
Рассмотрим пример:
- #include <iostream>;
- using namespace std;
- int main()
- {
- int a, b;
- int var = 2;
- while(var--)
- {
- cout<<"Введите первое число: ";
- cin>>a;
- cout<<"Введите второе число: ";
- cin>>b;
- cout<<a<<”+”<<b<<”="<<a+b<<endl;
- cout<<a<<”/”<<b<<”=";
- try
- {
- if (num2 == 0)
- {
- throw 123;
- }
- cout<<a/b<<endl;
- }
- catch(int i)
- {
- cout<<"Ошибка "<<i;
- cout<<" - на 0 делить нельзя!"<<endl;
- }
- cout<<a<<”-“<<b<<”="<<a-b<<endl;
- cout<<endl;
- }
- system("pause");
- return 0;
- }