Условные операторы позволяют выбирать для выполнения те или иные части программы в зависимости от некоторых условий. Если, например, в программе используются вещественные переменные x и z, и на каком-то этапе решения задачи требуется вычислить z=max(x, y), то желаемый результат получается в результате выполнения либо оператора присваивания z:=x, либо оператора присваивания z:=y. Поскольку значения переменных x и y заранее неизвестны, а определяются в процессе вычислений, то в программе необходимо предусмотреть оба эти оператора присваивания. Однако на самом деле должен выполниться один из них. Поэтому в программе должно содержаться указание о том, в каком случае надо выбирать для исполнения тот или иной оператор присваивания.

Это указание естественно сформулировать с использованием отношения x>y. Если это отношение при текущих значениях x и y справедливо (принимает значение true), то для исполнения должен выбираться оператор z:=x; в противном случае для исполнения должен выбираться оператор z:=y (при x=y безразлично, какой оператор выполнять, так что выполнение оператора z:=y в этом случае даст правильный результат).

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

if B then S1 else S2

Здесь if (если), then (то) и else (иначе) являются служебными словами, В – логическое выражение, а S1 и S2 – операторы.

Выполнение такого условного оператора в Паскале сводится к выполнению одного из входящих в него операторов S1 или S2: если заданное в операторе условие выполняется (логическое выражение В принимает значение true), то выполняется оператор S1, в противном случае выполняется оператор S2.

Алгоритм решения упомянутой выше задачи вычисления z= max(x, y) можно задать в виде условного оператора Паскаля

if x>y then z:= x else z:= y

При формулировании алгоритмов весьма типичной является такая ситуация, когда на определенном этапе вычислительного процесса какие-либо действия надо выполнить только при выполнении некоторого условия, а если это условие не выполняется, то на данном этапе вообще не нужно выполнять никаких действий. Простейшим примером такой ситуации является замена текущего значения переменной х на абсолютную величину этого значения: если x<0, то необходимо выполнить оператор присваивания x:= - x; если же x>=0, то текущее значение х должно остаться без изменений, т.е. на данном этапе вообще не надо выполнять каких-либо действий.

В подобных ситуациях удобна сокращенная форма записи условного оператора в Паскале:

if B then S

Правило выполнения сокращенного условного оператора Паскаля достаточно очевидно: если значение логического выражения В есть true, то выполняется оператор S; в противном случае никаких иных действий не производится.

В языке программирования Паскаль в условном операторе между then и else , а также после else по синтаксису может стоять только один оператор. Если же при выполнении (или невыполнении) заданного условия надо выполнить некоторую последовательность действий, то их надо объединить в единый, составной оператор, т.е. заключить эту последовательность действий в операторные скобки begin... end (это важно!) . Если, например, при x< y надо поменять местами значения этих переменных, то условный оператор будет записан следующим образом в Паскале:

if xthen begin r:=x; x:=y; y:=r end

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

if B1 then if B2 then S1 else S2

допускает, вообще говоря, две разные трактовки:

  • как полный условный оператор Паскаля вида

if B1 then begin
if B2 then S1 end
else S2

  • как сокращенный условный оператор Паскаля вида

if B1 then begin
if B2 then S1 else S2 end

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

Оператор выбора Паскаля

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

Структура оператора выбора в Паскале такова:

Case <ключ_выбора> of
<список_выбора>
end

Здесь case, of, else, end – зарезервированные слова (случай, из, иначе, конец);

  • <ключ_выбора> - выражение порядкового типа;
  • <список_выбора> - одна или более конструкций вида:
    • <константа_выбора>: <оператор>;
  • <константа_выбора> - константа того же типа, что и выражение
    • <ключ_выбора>;

<операторы> - произвольные операторы Паскаля.

Оператор выбора Паскаля работает следующим образом. Вначале вычисляется значение выражения <ключ_выбора>, а затем в последовательности <список_выбора> отыскивается константа, равная вычисленному значению. Выполняется оператор, который следует за найденной константой, после чего оператор выбора завершает работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается операторам, стоящим за словом else. Часть else <оператор_иначе> можно опустить, тогда при отсутствии в списке выбора нужной константы не будет выполнено никаких действий, и оператор выбора просто завершит свою работу.

Например, составим программу, которая по номеру дня недели выводит на экран его название:

Пример программы с использованием Case of

Program dni_nedeli;
Var n: byte;
Begin
Readln(n);
Case n of
1: writeln("понедельник ");
2: writeln("вторник ");
3: writeln("среда ");
4: writeln("четверг ");
5: writeln("пятница ");
6: writeln("суббота ");
7: writeln("воскресенье");
else writeln("дня недели с номером", n,"нет");
  end;
end.

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

Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например, следующая программа при вводе одного из символов " y" или " Y" выведет на экран «Да», а при вводе " n" или " N" – слово «Нет».

Пример программы с использованием Case of с несколькими переменными

Var ch: char;
Begin
Readln(ch);
Case ch of
N, n: writeln("Да ");
Y, y: writeln("Нет ");
End;
End.

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

На занятии рассматривается условный оператор в Паскале (if ). Объясняется, как использовать несколько условий в одной конструкции (AND и OR ). Рассмотриваются примеры работы с оператором

Напоминаем, что данный сайт не претендует на полное изложение информации по теме. Целью портала является предоставление возможности усваивания материала на основе готовых решенных примеров по теме «Язык программирования Pascal» с практическими заданиями для закрепления материала. Представленные на сайте сайт задания по Паскалю выстроены последовательно по мере увеличения их сложности. Сайт сайт может быть использован учителями и преподавателями в качестве вспомогательного наглядного пособия.

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

Блок-схема условного оператора:

Условный оператор в Паскале имеет следующий синтаксис:

Сокращенный вариант:

if условие then оператор;

Полный вариант:

if условие then оператор else оператор;

Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.

Составной оператор

Если при истинном условии необходимо выполнять несколько операторов, то их по правилам языка Pascal необходимо заключать в блок , начинающийся со служебного слова begin и заканчивающегося служебным словом end . Такой блок принято называть операторными скобками , а данную конструкцию — составным оператором :

Операторные скобки и составной оператор в Паскале:

if логическое выражение then begin оператор1; оператор2; end else begin оператор1; оператор2; end;

Перевод с английского оператора условия облегчит понимание его использования:

IF THEN ELSE
ЕСЛИ ТО ИНАЧЕ


В условии (в логическом выражении) используются операторы отношения.
Рассмотрим список операторов отношения Паскаля:

  • больше >
  • меньше
  • больше или равно в Pascal >=
  • меньше либо равно в Pascal
  • сравнение в Pascal =
  • не равно в Pascal

Пример: найти наибольшее из двух чисел

Вариант 1 Вариант 2


Подробно разобраться в работе условного оператора в Паскале можно, просмотрев видеоурок:

Пример: вычислить значение переменной у по одной из двух ветвей

Показать решение:

var x,y:real; begin writeln ("введите х"); read(x); if x>0 then y:=ln(x) else y:=exp(x); writeln ("y=", y:6:2) {итоговое число будет занимать 6 позиций, и в нем будет 2 знака после запятой} end.

Обратите внимание на то, как в данном примере выводится y . При выводе переменных типа в pascal, можно использовать так называемый форматированный вывод , или запись с двумя двоеточиями:
y:6:2
- цифра после первого двоеточия (6) указывает на то, сколько знаков будет занимать число при выводе на экран
- цифра после второго двоеточия (2) указывает на то, сколько знаков после запятой вещественного числа будет выводиться

Таким образом, использование такой записи в pascal практически позволяет выполнить округление до сотых, тысячных и т.п.

Задача 0. Вычислить значение переменной у по одной из двух ветвей:

Задача 1. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА

Задача 2. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?

Логические операции в Паскале (в логическом выражении)

Когда необходимо использовать двойное условие в Pascal, то понадобятся логические операции.

  • Логическая операция AND (И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными). Логический смысл операции - "конъюнкция".
  • Поставленный между двумя условиями, знак OR (ИЛИ) говорит о том, что достаточно, если будет выполняться хотя бы одно из них (одно из двух условий истинно). Логический смысл операции - "дизъюнкция".
  • На языке Паскаль XOR - знак логической операции, имеющий смысл "строгая дизъюнкция" и указывающий на то, что необходимо, чтобы одно из двух условий выполнялось (истинно), а другое - не выполнялось (ложно).
  • Логическая операция NOT перед логическим выражением или переменной имеет смысл "отрицание" или "инверсия" и указывает на то, что если данная переменная или выражение истинны, то их отрицание - ложь и наоборот.

Важно: Каждое из простых условий обязательно заключать в скобки.

Пример : Рассмотрим примеры логических операций в логических выражениях в Паскале

1 2 3 4 5 6 7 8 var n: integer ; begin n: = 6 ; if (n>5 ) and (n<10 ) then writeln ("истина" ) ; if (n>7 ) or (n<10 ) then writeln ("истина" ) ; if (n>7 ) xor (n<10 ) then writeln ("истина" ) ; if not (n>7 ) then writeln ("истина" ) ; end .

var n:integer; begin n:=6; if (n>5) and (n<10) then writeln("истина"); if (n>7) or (n<10) then writeln("истина"); if (n>7) xor (n<10) then writeln("истина"); if not(n>7) then writeln("истина"); end.

Пример: Компания набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он для данной компании (вывести ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли два условия одновременно.

Условные операторы предназначены для выбора к исполнению одного из возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может отсутствовать). В качестве условий выбора используется значение логического выражения. В Турбо Паскале имеются два ус­ловных оператора: if и case.

Оператор условия if

Оператор условия if может принимать одну из следующих форм:

if <условие> then <оператор1>

else <оператор2>;

if <условие> then <оператор>;

Оператор условия if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значе­ние булевского типа. В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then. Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2>. Во втором случае - если результат выражения Тгuе, выполняется <оператор>, если False - выполняется оператор, следующий сразу за оператором if. По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной оператор. Точка с запятой перед E lse не ставится.

Оператор выбора case

Если один оператор if может обеспечить выбор из двух альтернатив, то оператор выбораcase позволяет сделать выбор из произволь­ного числа имеющихся вариантов.

case <выражение-селектор> of

<список1>: <оператор1>;

<список2>: <оператор2>;

<списокN>: <операторN>;

Оператор caseработает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словомelse. Если словоelseотсутствует, активизируется оператор, находящийся за словомend, т.е. первый оператор за границейcase.

Выражение-селектор - это простая переменная целого, символьного, перечисляемого или логического типов, в зависимости от значения которой принимается решение;

Список констант выбора состоит из произвольного количества значений, или диапазонов, отделенных друг от друга запятыми. Тип констант должен совпадать cтипом селектора;

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

Ветвь Else не обязательна, и в отличие от оператора if, перед ней можно ставить точку с запятой.

Операторы повтора

Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (цикла). В языке Паскаль раз­личают три вида операторов цикла: while, repeat, for.

Оператор while

Оператор while (пока) называют оператором цикла с Предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

while <условие продолжения повторений> do

<тело цикла>;

Условие – логическое выражение. Тело цикла – простой или составной оператор. Составной оператор используется в тех случаях, когда тело цикла состоит из 2-х и более операторов.

Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, происходит выход из цикла и пере­ход к первому оператору, стоящему сразу за телом цикла.

Оператор повтора repeat

Оператор repeatреализует цикл спостусловием . Цикл с постусловием всегда будет выполнен хотя бы один раз.

<оператор1>;

<оператор2>;

<оператор N >;

until <условие окончания цикла>;

Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат логического выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит выход из цикла.

Оператор повтора for

Это оператор с известным числом повторений. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла , илиуправляющей переменной .

Оператор повтора for может быть представлен в двух форматах:

for <параметр цикла> := to do <тело цикла>;

for <параметр цикла> := downto do <тело цикла>;

где <параметр цикла> - это переменная целого, символьного, логического или перечисляемого типов;

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

for ... do - заголовок цикла;

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

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

Шаг изменения параметра цикла для оператора for…to…doравен +1, а для оператораfor…downto…doравен -1.

Вопросы для самопроверки:

    Формат оператора присваивания. Допустимо ли использование величин разных типов в арифметическом выражении?

    В чем заключается отличие оператора ввода Read от оператора Readln?

    Укажите форматы вывода данных.

    Какие виды ветвлений реализованы в Turbo Pascal?

    Для чего используются ветвления? Приведите примеры.

    Две формы записи условного оператора If.

    Формат записи вложенного оператора If.

    Формат записи оператора выбора Case?

    В каких случаях используется составной оператор Begin…end?

    Как в блок-схемах изображаются разветвленные алгоритмы?

    Что такое цикл?

    Какие виды циклов реализованы в Turbo Pascal?

    Что такое тело цикла?

    В каком случае тело цикла заключается в операторные скобки begin…end?

    В чем отличия операторов повтора while и repeat?

    В каких случаях предпочтительнее использовать для организации циклов оператор повтора for? Что записывается в заголовке этого оператора?

    Каким образом в операторе цикла for описывается направление изменения значения параметра цикла?

С помощью этого оператора переменные в Турбо Паскале могут получать свои значения программным путем (то есть не с клавиатуры). Формат:

<идентификатор (имя) переменной>:= <выражение>

Система сначала вычисляет значение выражения, затем присваивает его переменной.

    Составной оператор.

Составной оператор – это последовательность любых операторов Турбо Паскаля, заключенная в операторные скобки begin и end. Например:

begin a:=5; write (‘a=’,a); end;

Среди операторов составного оператора могут быть другие составные операторы, то есть допускается любая глубина их вложения. Например:

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

Они существуют для организации ветвлений в зависимости от истинности или ложности некоторого условия. Таких операторов два: полный условный оператор и неполный условный оператор.

    Полный условный оператор

Реализует алгоритмическую конструкцию «полная развилка»:

Его формат:

if <логическое выражение> then <оператор 1> else <оператор 2>

If, then, else – служебные слова «если», «тогда», «иначе». Перед словом else точка с запятой не ставится. Оператор 1 и оператор 2 могут быть как простыми операторами, так и составными. Составной оператор следует заключать в операторные скобки begin и end.

Действия условного оператора: если логическое выражение имеет значение true, то выполняется оператор 1, если логическое выражение имеет значение false, то выполняется оператор 2.

    Неполный условный оператор

Реализует алгоритмическую конструкцию «неполная развилка»

Его формат:

if <логическое выражение> then <оператор >

If, then – служебные слова «если», «тогда». Оператор может быть как простыми оператором, так и составным.

Действия условного оператора: если логическое выражение имеет значение true, то выполняется оператор, если логическое выражение имеет значение false, то условный оператор пропускается и выполняется оператор, следующий за ним.

Условные операторы (полный и неполный) могут иметь вложенную конструкцию, то есть после слов THEN или ELSE опять используется условный оператор. Служебное слово ELSE всегда относится к ближайшему слева слову THEN.

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

Замечание: после слова THEN не может сразу записываться новый условный оператор, а после ELSE – может. Например:

В тех случаях, когда требуется проверить несколько условий, применяются сложные условные операторы. В них используются логические операции and, not, or. Например:

if ((x>3) and (y>3) and (z>3)) then ...

    Операторы организации цикла.

Цикл – это многократно повторяемый участок программы. Для организации цикла в Паскале используются три оператора: оператор с предусловием, оператор с постусловием и оператор с параметром.

    Оператор цикла с предусловием

Этот оператор реализует блок-схему цикла с предусловием:

Его формат:

While <логическое выражение> Do <тело цикла>

While («пока»), Do («делать») - служебные слова.

Действия оператора: пока логическое выражение имеет значение true, выполняется тело цикла; как только логическое выражение принимает значение false, действие оператора заканчивается и выполняется оператор, следующий за ним. Значение логического выражения проверяется перед телом цикла. Если логическое выражение ложно с самого начала, то тело цикла сразу опускается.

Если тело цикла содержит последовательность операторов, то говорят, что оно образует составной оператор, в начале и в конце которого надо писать операторные скобки Begin и End.

Если же тело цикла - один оператор (не составной), то операторных скобок не требуется. Тогда транслятор считает, что тело цикла заканчивается на ближайшем знаке «;». В Паскале нет специальных слов для обозначения начала цикла и конца цикла. На все случаи есть универсальные слова Begin и End.

    Оператор цикла с постусловием

Этот оператор реализует блок-схему цикла с постусловием:

Его формат:

Repeat <тело цикла> Until <логическое выражение>

Repeat («повторять»), Until («до тех пор») - служебные слова.

Тело цикла может быть как одиночным, так и составным оператором, однако употребления Begin и End не требуется, поскольку сами слова Repeat и Until выполняют роль операторных скобок.

Действия оператора: выполняется тело цикла, затем проверяется значение логического выражения. Если логическое выражение имеет значение false, то опять выполняется тело цикла. Так продолжается до тех пор, пока логическое выражение не примет значение true. То есть тело цикла повторяет свое выполнение, если условие ложно. Повторение кончается, когда условие станет истинным. Действие оператора заканчивается и выполняется оператор, следующий за ним. Значение логического выражения проверяется после тела цикла.

Замечания:

    Перед каждым выполнением тела цикла логическое выражение должно иметь конкретное значение.

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

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

    Оператор цикла с параметром

Этот оператор реализует блок-схему цикла со счетчиком. Его формат:

for <параметр цикла>:= <арифметическое выражение 1> to <арифметическое выражение 2> do <тело цикла>

for < параметр цикла >:= < арифметическое выражение 1> downto < арифметическое выражение 2> do <тело цикла>

Параметр цикла – это переменная любого типа, кроме real.

Арифметические выражения 1 и 2 должны иметь тот же тип, что и параметр цикла. Тело цикла – любой оператор Паскаля (простой, сложный, составной).

Действия оператора: параметру цикла присваивается значение арифметического выражения 1. Если оно меньше (для for - to - do ) или больше (для for - downto - do ) значения арифметического выражения 2, то выполняется тело цикла. Затем параметр цикла увеличивается (уменьшается) на величину, указанную в теле цикла. Потом он снова сравнивается с арифметическим выражением 2. И так до тех пор, пока параметр цикла не станет больше (меньше) значения арифметического выражения 2. Далее оператор цикла заканчивает работу и выполняется следующий за ним оператор.

Если параметр цикла имеет тип integer, то при слове to шаг изменения параметра равен единице (при downto шаг равен -1).

Этот оператор имеет ограниченное применение, то есть его можно использовать только в тех случаях, когда известно число повторений тела цикла

«развилка».
Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма .

Признаком разветвляющегося алгоритма является наличие операций проверки условия. Чаще всего для проверки условия используется условный оператор if .

if может использоваться в форме полной или неполной развилки.

В случае неполной развилки если Условие истинно, то БлокОпераций1 выполняется, если Условие ложно, то БлокОпераций1 не выполняется.

В случае полной развилки если Условие истинно, то выполняется БлокОпераций1 , иначе выполняется БлокОпераций2 .

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

Пример на C :

1
2
3
4
5
6
7
8
9
10
11
12
13
14


#include
int main()
{
int k; // объявляем целую переменную k
printf("k= " ); // выводим сообщение
scanf("%d" , &k); // вводим переменную k
if (k >= 5) // если k>5
printf("%d >= 5" , k); // выводим "ЗНАЧЕНИЕ >= 5"
else // иначе
printf("%d < 5" , k); // выводим "ЗНАЧЕНИЕ < 5"
getchar(); getchar();
return 0;
}


Результат выполнения

Оператор if может быть вложенным.

Пример на C :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
#include
int main() {
int key;
system("chcp 1251" );
system("cls" ); // очищаем окно консоли
printf();
scanf("%d" , &key);
if (key == 1) // если key = 1
printf("\n Выбран первый пункт" ); // выводим сообщение
else if (key == 2) // иначе если key = 2
printf("\n Выбран второй пункт" ); // выводим сообщение
else // иначе
printf(); // выводим сообщение
getchar(); getchar();
return 0;
}

Результат выполнения





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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
#include // для использования функции system
int main() {
int key; // объявляем целую переменную key
system("chcp 1251" ); // переходим в консоли на русский язык
system("cls" ); // очищаем окно консоли
printf("Введите номер пункта, 1 или 2: " );
scanf("%d" , &key); // вводим значение переменной key
if (key != 1) { // если key не равен 1
if (key == 2) // если key равен 2
printf("\n Выбран второй пункт" ); // вывод сообщения
} // если key - не 1 и не 2, то ничего не выводится
else // иначе, если key равен 1
printf("\n Выбран первый пункт" ); // вывод сообщения
getchar(); getchar();
return 0;
}


Результат выполнения





Тернарные операции

Тернарная условная операция имеет 3 аргумента и возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Синтаксис тернарной операции в языке Си

Условие? Выражение1: Выражение2;


Если выполняется Условие , то тернарная операция возвращает Выражение1 , в противном случае - Выражение2 .

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

Приведенный выше пример с использованием тернарных операций можно представить в виде

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
#include // для использования функции system
int main() {
int key; // объявляем целую переменную key
system("chcp 1251" ); // переходим в консоли на русский язык
system("cls" ); // очищаем окно консоли
printf("Введите номер пункта, 1 или 2: " );
scanf("%d" , &key); // вводим значение переменной key
key == 1 ? printf("\n Выбран первый пункт" ) :
(key == 2 ? printf("\n Выбран второй пункт" ) :
printf("\n Первый и второй пункты не выбраны" ));
getchar(); getchar();
return 0;
}

Оператор ветвления switch (оператор множественного выбора)

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

Общая форма записи

switch (ЦелоеВыражение)
{
case Константа1: БлокОпераций1;
break ;
case Константа2: БлокОпераций2;
break ;
. . .
case Константаn: БлокОперацийn;
break ;
default: БлокОперацийПоУмолчанию;
break ;
}

Оператор ветвления switch выполняется следующим образом:

  • вычисляется ЦелоеВыражение в скобках оператора switch ;
  • полученное значение сравнивается с метками (Константами ) в опциях case , сравнение производится до тех пор, пока не будет найдена метка, соответствующая вычисленному значению целочисленного выражения;
  • выполняется БлокОпераций соответствующей метки case ;
  • если соответствующая метка не найдена, то выполнится БлокОперацийПоУмолчанию , описанный в опции default .

Альтернатива default может отсутствовать, тогда не будет произведено никаких действий.
Опция break; осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии опции break будут выполняться все операторы, начиная с помеченного данной меткой и кончая оператором в опции default .

Константы в опциях case должны быть целого типа (могут быть символами).