Оператор 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