3.4 Оператор
ветвления if-else.
Для удобства ввода оператора if-else, рассмотрим для сравнения программы
на Си и на Паскале.

Результатом работы программ
будут следующие экраны:

Как видно, понятие истины в Си
довольно растяжимое. Уточняя этот факт,
познакомимся ещё с одним оператором, для этого
подробней рассмотрим обе программы.
На Паскале:
test:integer; -
оператор объявления переменной целого типа.
flag:boolean; -
оператор объявления переменной логического
(булевского) типа.
На Си:
int test; -
оператор объявления переменной целого типа. Как
видно, отсутствует описание булевых переменных.
На Паскале:
test:=1; -
присваиваем целой переменной значение 1.
На Си:
test=1; - присваиваем
целой переменной значение 1.
Теперь, для того чтобы
определить, истине или лжи соответствует это
значение, используем новый оператор. Этот
оператор позволяет использовать проверку
истинности условия для выбора между разными
возможными способами действия.
Несмотря на свою длину это один
оператор. Если в языке Паскаль этот оператор
имеет ключевые слова If, then и else, то в Си этот
оператор определяется ключевыми словами If и else.
В общем виде, данный оператор на
Паскале выглядит так:
If <условие>
then (оператор1)
else (оператор2)
Если условие истинно, то
выполняется оператор1, в противном случае
выполняется оператор2. Напомним, что
любой из операторов может быть составным, тогда
операторы, образующие составной, объединяются
служебными словами begin и end;.
В Си общий вид оператора
выглядит несколько иначе:
If <условие>
(оператор1) else (оператор2)
Если условие истинно, то
выполняется оператор1, в противном случае
выполняется оператор2. Здесь также любой
из операторов может быть составным, тогда
операторы, образующие составной, объединяются
фигурными скобками { и }.
Продолжим рассмотрение наших
программ. Следующий шаг программ:
flag:=FALSE; - это
почти такой же оператор, как ранее рассмотренный.
Здесь в качестве условного выражения
используется переменная булевского типа. Можно
использовать, так же, любые выражения булевского
типа.
test=0; - Вы уже
сами заметили разницу, что этот оператор
отличается от уже использованного в программе на
Си. Здесь, в качестве условного выражения,
используется целочисленная переменная. Вообще
говоря, в качестве условия можно использовать
любое целочисленное выражение, и если его значение равно 0, то оно считается ложным.
Чтобы завершить рассмотрение
условного оператора, в программе на Си, присвоим
переменной значение 100.
Ох, уж эта переменная, всё время меняет своё
значение! Напомним, что в языке Си, истине
соответствует любое ненулевое значение. Кроме
всего, в языке Си допускается усечённая форма
условного оператора (без части, связанной с else). В этом случае оператор, следующий
за условным выражением, выполняется, если это
выражение истинно и не выполняется, если оно
ложно.
В языке Паскаль, так же
допускается усечённая форма, но, обратите
внимание, как аналогичная проблема решена на
Паскале. Как Вы наверное знаете, при выполнении
команды writeln((test>0) AND (test<2),’-это тоже истина’); будет выведен
непосредственный результат булевого выражения.
Для создания мощных и
эффективных программ язык программирования
должен обеспечить реализацию трёх форм
управления процессом выполнения программ:
- Выполнение последовательности
операторов;

- Выполнение последовательности
операторов до тех пор, пока некоторое условие
истинно (цикл while);

- Использование проверки
истинности условия для выбора между различными
способами действия (оператор else).

Простейшая форма конструкции if позволяет выполнить оператор в
случае истинности проверяемого выражения и
пропустить его выполнение, если выражение ложно.
Оператор, следующий за проверяемым выражением,
может быть простым или составным.
В любом случае конструкция
рассматривается как
один оператор if.
Простая форма оператора if позволяет выполнять оператор или
пропускать его.
Язык Си предоставляет также
возможность выбрать любой из двух операторов
путём использования конструкции if-else. Если выражение истинно, то
выполняется первый оператор, а если ложно (равно
нулю) – то второй, следующий за ключевым словом else:
Правила языка Си не требуют
отступа в строке, но отступ позволяет с первого
взгляда заметить те операторы, выполнение
которых зависит от проверяемого условия.
И на Паскале, и на Си операторы,
используемые в конструкции if-else, могут быть как простыми, так и
составными. Но несмотря ни на что, конструкция
рассматривается компилятором как один оператор if-else. Также допускается использование, в
качестве операторов, другого условного
оператора if-else (вложение).
Здесь возможны два пути
реализации вложения:
1)
if (выражение1)
оператор1
else
if (выражение2)
оператор2
else
оператор3
2)
if (выражение1)
оператор1
else if (выражение2)
оператор2
else оператор3
По мнению авторов языка Си,
вторая форма записи предпочтительней, т.к. более
чётко указывает, что осуществляется выбор из
трёх возможностей. Кроме того, такая запись более
компактна и легче читается, особенно при наличии
действительно множественного выбора.
Замечание! else соответствует ближайшему if, кроме тех случаев, когда имеются
фигурные скобки.
В качестве закрепления всего
выше рассмотренного, запишем программу на Си.

Единица можно сразу же вывести,
как простое число: printf(“1\n”);
Цикл for (num=2; num<=LIM; num=num+1)
определяет условие перебора
чисел в диапазоне от 2 до 20
(num<=LIM;) с шагом 1. Для каждого из значений переменной num делаем перебор всех возможных
делителей (имеющих остаток 0): for (div=2; num %
div !=0; div=div+1); и проверяем их
равенство самому числу (div==num).
Рассмотрим теперь правила
безусловного перехода, который можно
представить в следующей форме: goto метка;.
Как известно, в Паскале так же
присутствует оператор безусловного перехода goto
метка;.
Но, надо заметить, что в Паскале, все используемые
метки, должны быть описаны в специальном разделе
описания меток. Чего нет в Си. Здесь, используемые
метки не описываются.
Напомним, что метка –
это любой идентификатор. Как и в Паскале,
оператор goto указывает,
что выполнение программы необходимо продолжить,
начиная с инструкции, перед которой записана
метка. Как и в Паскале, в программе обязательно
должна быть строка, где указана метка, поставлено
двоеточие и записана инструкция, к которой
должен выполниться переход. Метку можно
поставить перед любой инструкцией в той функции,
где находится соответствующий ей оператор goto. |