Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Лекции. 2009. Измайлов.doc
Скачиваний:
9
Добавлен:
26.10.2018
Размер:
4 Mб
Скачать

11.2.2. Безальтернативный оператор условия

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

Синтаксис безальтернативного оператора:

if (условие) оператор1;

Пример:

_

+ if (x > 5)

{

y = a*x;

x + = 0.1;

}

В приведенном примере альтернативная ветвь отсутствует (на блок – схеме она пустая). Оператор основной ветви – составной, состоящий из двух операторов присваивания y = a*x и x + = 0.1.

Следует иметь в виду, что в безальтернативном операторе условия может отсутствовать только альтернативная ветвь. Основная ветвь должна быть всегда. Поэтому в блок – схеме следует записывать условие таким образом, чтобы пустой ветвью была только ветвь НЕТ ( – ).

11.2.3. Составные операторы условия

Иногда при решении задач возникает ситуация, когда в качестве операторов, содержащихся в ветвях, могут, в свою очередь, быть другие операторы условия. Их называют составными операторами. Причем количество вложений или, как еще говорят, уровней вложений может быть несколько. Теоретически это количество не ограничено, но практически это ограничение определяется объемом оперативной памяти компьютера, а, главное, удобством чтения и восприятия такого оператора. На практике используют не более трех вложений. Например, вычислить значения нелинейной функции у = f(х), график которой представлен на рис.11.1.

y

a

- b

b х

а

Рис. 11.1 График функции

+ _

+

Рис. 11.2. Фрагмент блок – схемы вычисления функции

Из приведенного фрагмента блок–схемы видно, что в альтернативной ветви «НЕТ» условия первого уровня вложен другой оператор условия (второго уровня). Запись этого фрагмента с помощью оператора условия будет иметь вид:

if ((x > – b) && (z < b)) y = a/b*x;

else if (x < = – b) y = – a;

else y = a;

Здесь в альтернативной ветви else первого оператора условия вложен другой оператор условия.

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

_

+

_ if (a > b)

{

+ if (b > 0) k++;

}

else k – –;

Рис.11.3. Фрагмент блок – схемы вычисления функции

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

if (a > b)

if (b > 0) k ++;

else k – –;

соответствовала бы алгоритму, приведенному на рис.11.4.

+

+

Рис.11.4. Фрагмент алгоритма.

Как видно из рисунка этот алгоритм отличается от предыдущего и искажает логику вычислений, а, следовательно, влияет на результат.

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