Файл: Анализ применения условных операторов в разных языках программирования.docx

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

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

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

Добавлен: 07.11.2023

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

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

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


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

Как было отмечено выше, важной особенностью языка C++ является то, что символы могут храниться в любом целом типе данных, поскольку они представляются как однобайтовое целое. Это означает, что можно трактовать символ или как целое, или как символ, в зависимости от его использования. Например, выражение
Cout<<»Символ (a) в ASCII имеет значение «< ('a');
Напечатает символ a и его целочисленное представление в таблице ASCII (American Standard Code for Information Interchange) в виде:
Символ (a) в ASCII имеет значение 97
Поэтому структура switch может применяться с любой комбинацией символьных и целых констант, имеющих целое постоянное значение. Отметим также, что в теле инструкции switch можно использовать вложенные инструкции switch, при этом в ключевых словах case можно использовать одинаковые константные выражения. Однако такие вложенные структуры обычно встречаются в программах очень редко.

Пример использования инструкции switch приведен ниже.

Задача

Дан равносторонний треугольник. Будем считать, что может задаваться лишь один из его параметров: сторона, площадь, высота, радиус вписанной окружности или радиус описанной окружности. Составить программу, которая, в зависимости от того, какой из параметров указан, будет на его основе находить остальные.
#include

#include

#include

Using namespace std;

Int main()

{ float a,h,S; //сторона, высота и площадь треугольника

Float r,R; //радиус вписанной и описанной окружностей

Int variant; //номер сделанного выбора (вариант выбора)

System(«cls»);

Cout<<»Выберите известный параметр из списка: «<>variant;

System(«cls»);

Switch (variant) {

Case 1: cout<<»Введите сторону треугольника»<>a;

Cout<<»Высота треугольника h=»

<>h;

Cout<<»Сторона треугольника a=»<<2*h/sqrt(3)<>S;

Cout<<»Сторона треугольника a=»

<>r;

Cout<<»Сторона треугольника a=»<<2*r*sqrt(3)<>R;

Cout<<»Сторона треугольника a=»<
Инструкция goto (безусловного перехода)

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

Одной меткой можно пометить только одно выражение. Метка от помеченного выражения отделяется двоеточием. Имя метки – это идентификатор. Формат инструкции следующий:

Goto имя-метки;

………………..;

Имя-метки: выражение;
Используя инструкцию goto, можно передавать управление внутрь составного выражения. Однако при входе в составное выражение нужно соблюдать осторожность, т.к. оно может дать неправильный результат. Например, в составном выражении, содержащем объявления переменных с инициализацией, так как объявления располагаются перед выполняемыми выражениями, значения объявленных переменных при таком переходе будут не определены. Кроме того, безусловный переход можно осуществлять далеко не из каждого места программы и не в любое ее место.

2.ОПИСАНИЯ ОПЕРАТОРОВ

Пустой оператор

Пустой оператор состоит только из точки с запятой. При выполнении этого оператора ничего не происходит. Он обычно используется в следующих случаях:

- в операторах do, for, while, if в строках, когда место оператора не требуется, но по синтаксису требуется хотя бы один оператор;

- при необходимости пометить фигурную скобку.

Синтаксис языка С требует, чтобы после метки обязательно следовал оператор. Фигурная же скобка оператором не является. Поэтому, если надо передать управление на фигурную скобку, необходимо использовать пустой оператор.

Пример:
Int main ( )

{

;

{

If (…) goto a; /* переход на скобку */

{ …

}

A:;

}

Return 0;

}
Оператор безусловного перехода

Использование оператора безусловного перехода goto в практике программирования на языке С настоятельно не рекомендуется, так как он затрудняет понимание программ и возможность их модификаций.

Формат этого оператора следующий:
Goto имя-метки;



Имя-метки: оператор;
Оператор goto передает управление на оператор, помеченный меткой имя-метки. Помеченный оператор должен находиться в той же функции, что и оператор goto, а используемая метка должна быть уникальной, т.е. одно имя-метки не может быть использовано для разных операторов программы. Имя-метки – это идентификатор.

Любой оператор в составном операторе может иметь свою метку. Используя оператор goto, можно передавать управление внутрь составного оператора. Но нужно быть осторожным при входе в составной оператор, содержащий объявления переменных с инициализацией, так как объявления располагаются перед выполняемыми операторами и значения объявленных переменных при таком переходе будут не определены.

2.1 Операторы условного перехода



Оператор if

Формат оператора:

If (выражение) оператор;

Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

- если выражение истинно (т.е. отлично от 0), то выполняется оператор.

- если выражение ложно, то выполняется следующий за if оператор.

После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.

Пример:
if (i < j) i++:

Оператор if-else

Формат оператора:

If (выражение) оператор-1; else оператор-2;

Выполнение оператора if начинается с вычисления выражения.

Далее выполнение осуществляется по следующей схеме:

- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.

- если выражение ложно (т.е. равно 0),то выполняется оператор-2.
После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.

Пример:
If (i < j) i++:

Else { j = i-3; i++; }
Этот пример иллюстрирует также и тот факт, что на месте оператор-1, так же как и на месте оператор-2 могут находиться сложные конструкции.

Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.

Примеры:
Int main ( )

{

Int t=2, b=7, r=3;

If (t>b)

{

If (b < r) r=b;

}

Else r=t;

Return (0);

}

В результате выполнения этой программы r станет равным 2.

Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:
Int main ( )

{

Int t=2,b=7,r=3;

If ( a>b )

If ( b < c ) t=b;

Else

R=t;

Return (0);

}
В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.


Оператор if-else if

Следующий фрагмент иллюстрирует вложенные операторы if:
Char ZNAC;

Int x,y,z;

:

If (ZNAC == '-') x = y – z;

Else if (ZNAC == '+') x = y + z;

Else if (ZNAC == '*') x = y * z;

Else if (ZNAC == '/') x = y / z;

Else …
Из рассмотрения этого примера можно сделать вывод, что конструкции использующие вложенные операторы if, являются довольно громоздкими и не всегда достаточно надежными. Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.
2.2 Оператор переключатель switch

Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:
Switch ( выражение )

{ [объявление]

:

[ case константное-выражение1]: [ список-операторов1]

[ case константное-выражение2]: [ список-операторов2]

:

:

[ default: [ список операторов ]]

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

Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора smitch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.

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

Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент, помеченный ключевым словом default.

Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.

Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.

Схема выполнения оператора switch следующая:
- вычисляется выражение в круглых скобках;

- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;


- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;

- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.

Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.

Пример:
Int i=2;

Switch(i)

{

case 1: i+=2;

case 2: i*=3;

case 4: i/=2;

case 0: i-=5;

default ;

}
Выполнение оператора switch начинается с оператора, помеченного case 2. Таким образом, переменная i получает значение, равное 6, далее выполняется оператор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.

Рассмотрим ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, переписанной теперь с использованием оператора switch
char ZNAC;

int x, y,z;

switch (ZNAC){

case'+'x=y+z;break;

case'-'x=y-z;break

case'*'x=y*z;break

case'/'x=y/z;break

default:;

}
Использование оператора break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch, путем передачи управления оператору, следующему за switch

Отметим, что в теле оператора switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые константные выражения.

Пример:
Switch (a) {

case 1: b=c; break;

case 2: }

switch (d) {

case 0: f=s; break;

case 1: f=9; break;