Оператор if и условная операция ? :

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

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


Формально в терминах языка программирования это можно записать так:

if(Условие)

   Оператор ветви «Да»;

else

   Оператор ветви «Нет»;

Оператор работает следующим образом: вычисляется записанное в круглых скобках выражение-условие, если оно истинно, то выполняется Оператор ветви «Да», если ложно — то Оператор ветви «Нет». После этого управление передаётся на следующий оператор.

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

Если в первых двух случаях всё делается так, как и во многих других языках программирования, то вот сумма двух чисел в качестве результата вычисления условия в операторе if может поставить в тупик. Как трактовать такое условие?

Всё очень просто. В языке C не было логического типа данных, поэтому считалось, что число 0 — это ложь, а любое, отличное от 0 число — это истина. В C++ есть логический тип данных (bool), но для совместимости с языком C это правило также поддерживается.

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

Пример 1. Дано натуральное число n. Определить, является ли оно двухзначным или нет.

Возможный текст программы:

#include <iostream>

using namespace std;

int main()

{

   int n;

   cout << "n=";

   cin >> n;

   if(n > 9 && n < 100)

      cout << "Yes" << endl;

   else

      cout << "No" << endl;

   return 0;

}


Пример 2. Даны три числа: a, b, c. Могут ли эти числа быть длинами сторон треугольника? Если «да», то вычислить его площадь, используя формулу Герона:

,    где .

Возможный текст программы:

#include <iostream>

using namespace std;

#include <cmath>

int main()

{

   double a, b, c, p, s;

   cout << "a,b,c:" << endl;

   cin >> a >> b >> c;

   if(a + b > c && b + c > a && a+ c > b)

   {

      cout << "Yes" << endl;

      p = (a + b + c) / 2;

      s = sqrt(p * (p - a) * (p - b) * (p - c));

      cout << "s=" << s << endl;

   }

   else

      cout << "No" << endl;

   return 0;

}

Условная операция ? :

В языках C/C++ есть одна единственная трёхместная операция — условная операция. Она имеет два специальных символа, разделяющих три части операции. Именно поэтому операция является трёхместной. В ряде случаев её удобно использовать вместо оператора if.

Формальная запись условной операции:

Условие ? Выражение_Да : Выражение_Нет

Здесь

Вычисление операции выполняется следующим образом. Вначале вычисляется Условие, записанное до символа ? (вопросительный знак). Если условие истинно, то результатом работы операции будет Выражение_Да , если ложно, то Выражение_Нет. Как видно из формальной записи, Выражение_Да и Выражение_Нет разделены символом : (двоеточие).

Результат вычисления условной операции можно присвоить какой-либо переменной или вывести на печать.

Пример 3. Вычислить максимум из двух чисел.

а)Реализация с помощью условной операции:

max = a > b ? a : b;

б)Реализация с помощью оператора if:

if(a > b)

   max = a;

else

   max=b;

Пример 4. Дано целое число a, определить, является ли оно чётным или нечётным.

а)Так можно сделать с помощью условной операции:

cout << (a % 2 ? "Nechet" : "Chet") << endl;

б)А так делается с помощью оператора if:

if(a%2)

   cout << "Nechet" << endl;

else

   cout << "Chet") << endl;

Когда применять условную операцию? Лучше всего в простых ситуациях, когда по обеим ветвям в зависимости от истинности условия надо присвоить переменной то или иное значение (как в Примере 3, а).

Когда действия по ветвям разные, то приемлем только оператор ветвления if.

Назад
На верх
Вперёд
Hosted by uCoz