Оператор ветвления if в зависимости от условия позволяет выбрать одно из двух возможных продолжений программы. Схематично этот оператор можно изобразить так, как показано на рисунке ниже:
Формально
в терминах языка программирования это можно записать так:
if(Условие)
Оператор ветви «Да»;
else
Оператор ветви «Нет»;
Оператор работает следующим образом: вычисляется записанное в круглых скобках выражение-условие, если оно истинно, то выполняется Оператор ветви «Да», если ложно — то Оператор ветви «Нет». После этого управление передаётся на следующий оператор.
Условие — это некоторое выражение, имеющее результат логического или арифметического типа. Условие всегда должно записываться в круглых скобках. Примеры записи условий:
if(a>b) — простое условие, используется операция сравнения;
if(a>0 && b>0 && c>0) — сложное условие, три операции отношения объединены в одно условие с помощью логической операции И;
if(a+b) — а здесь условие содержит арифметическое выражение (сложение двух чисел).
Если в первых двух случаях всё делается так, как и во многих других языках программирования, то вот сумма двух чисел в качестве результата вычисления условия в операторе 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.
Формальная запись условной операции:
Условие ? Выражение_Да : Выражение_Нет
Здесь
Условие — логическое или арифметическое выражение, подобное тому, которое можно записать в операторе 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.
|
|
|