Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
608.26 Кб
Скачать

1.7. Метки, оператор goto, условные конструкции, оператор break, функция exit

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

goto метка ;

где метка - это некоторый идентификатор, использованный в данной функции в виде метка : оператор . Имена меток никак не описываются в программе и распознаются компилятором по контексту. Передача управления разрешена на любой помеченный оператор в теле функции. Однако в С++ существует одно ограничение : запрещено обходить описания, содержащие инициализацию объектов. Это ограничение не распространяется на вложенные блоки, которые можно обходить целиком.

Перед рассмотрением условных конструкций еще раз отметим, что в языке С в явном виде булевский, или логический, тип данных отсутствует, а значения true и false обозначаются соответственно ненулевым и нулевым значениями. Такой подход лишает компилятор языка С возможности выявления определенного класса ошибок. Например, с точки зрения языка С, каждое из следующих двух выражений корректно и имеет значение true: 1<10<100 , 100<10<1 . Для второго выражения: 100<10 дает 0 (false) и 0<1 дает true. Другой пример : если i и k -целые переменные, то когда вместо выражения i<k по ошибке будет записано выражение i+k , то компилятор не в состоянии будет обнаружить эту ошибку.

В языке C есть особая операция, которая называется “операция выбора” ( обозначается как ?: ), она применяется к трем операндам и записывается в виде

( логическое выражение ) ? выражение1 : выражение2

В данном случае в качестве логического может использоваться любое выражение; оно интерпретируется как ложное, если его значение равно нулю, и как истинное во всех остальных случаях. Результат операции выбора равен значению выражение1, если логическое выражение истинно, и значению выражение2, если логическое выражение ложно. Тип результата операции равен старшему из типов выражения1 и выражения2. Операция выбора старше операций присваивания и младше всех других операций, несколько записанных подряд операций выбора выполняются в последовательности справа налево. Например, выражение (a<0)?-a:a дает абсолютную величину a.

Условный оператор if в языке С записывается в виде:

If ( логическое выражение ) оператор/блок [ else оператор/блок ]

Логическое выражение (обязательно заключенное в круглые скобки) - это любое выражение, считающееся истинным, если оно не равно нулю. Условный оператор в свою очередь может включать условный оператор, таким образом допустимы вложенные условные операторы. Синтаксис языка предполагает, что при вложениях условных операторов каждое else соответствует ближайшему к нему предшествующему if. Отличие от языка PASCAL состоит лишь в отсутствии ключевого слова THEN и в том, что перед else ставится ; .

Условный оператор switch имеет вид :

switch ( выражение ) {

case кв1 : [ операторы1 ]

case кв2 : [ операторы2 ]

..........................

default : [ операторы ]

}

выражение должно иметь целый тип ; кв1 , кв2 и т.д. - константные выражения целого типа. Порядок выполнения оператора switch следующий: вычисляется выражение в скобках, если его значение равно значению какого либо из константных выражений, происходит переход к первому из операторов, стоящих после этого константного выражения, в противном случае - к оператору, стоящему после метки default, затем операторы выполняются последовательно. Метку default не обязательно включать в оператор. Выхода из оператора switch при достижении следующего case или метки default не происходит - в отличие от аналогичного оператора CASE языка PASCAL. Однако эти действия можно задать явно, используя специальный оператор выхода break; , который можно включить в последовательности выполняемых операторов. Оператор break аналогичен по своему действию процедуре Break в языке PASCAL, он вызывает немедленное завершение выполнения условной или циклической конструкции, в частности, оператора switch.

В любом месте любой функции для остановки программы можно использовать функцию void exit(int status) , где status - код завершения, передаваемый операционной системе. Функция exit аналогична процедуре Halt в языке PASCAL.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]