Лабораторная работа
Тема: Использование условных операторов при реализации ветвящихся процессов
Цель работы: Получить практические навыки в разработке программ, использующих условные операторы
Методические указания
Условный оператор if предназначен для выполнения одной или другой последовательности действий в зависимости от истинности или ложности некоторого условия.
Условный оператор имеет две формы: if и if...else….
Форма if имеет вид:
if (условие) оператор;
Заметим, что круглые скобки обязательны, так как играют роль ограничителя. Если условие (условное выражение в скобках) истинно (условие соблюдается), то выполняется оператор справа от скобки. При ложности условного выражения действий не происходит.
Условием может быть любое выражение, преобразуемое в булевый тип. Если условие выполняется, то результатом условного выражения является ненулевое значение — истина (true) (возвращается 1), то указанный оператор в конструкции if выполняется. В противном случае управление сразу передается следующему за конструкцией if оператору. Например, в результате выполнения операторов
С = А;
if (В > А) С = В;
переменная С станет равна максимальному из чисел А и В, поскольку оператор С = В будет выполнен только при В > А.
Форма if...else…. имеет вид:
if (условие) оператор1; else оператор2;
Если условное выражение истинно (условие соблюдается), то выполняется оператор1, если нарушается - оператор2 (после else).
Если условие возвращает true, то выполняется первый из указанных операторов, в противном случае выполняется второй оператор. Обратите внимание, что в конце первого оператора перед ключевым словом else ставится точка с запятой.
Приведем примеры.
if (g = = 0)
cout<<"Деление на нуль";
else
p = i/g;
В качестве и первого, и второго оператора могут, конечно, использоваться
и составные операторы:
if (g = = 0)
{
Cout<<"Деление на нуль";
p = 0;
)
else
p = i/g;
Напомним, что последовательность операторов, заключенная в фигурные скобки, называется составным оператором.
Составной оператор в языке C++ интерпретируется как один оператор и может использоваться везде, где допускается применение одного оператора.
Следует обратить внимание, что после фигурной скобки перед else точка с запятой не ставится.
Поскольку в C++ арифметическое (целое или действительное) значение может преобразовываться к булеву (любое ненулевое значение воспринимается как true, а нулевое — как false), то условие может иметь целый тип. Например:
int а, b, с;
i f ( а - b/с)
В данном случае условие if(a - b/c) эквивалентно if(a = = b/c), поскольку а - b/c возвращает нуль при равенстве а и b/с. Аналогичные условия формально можно записывать и для действительных чисел:
double а, b, с;
if(а - b/с)
Но из-за ошибок округления это может не сработать, даже если теоретически значения а и b/с должны совпадать.
Сравнивать вещественные числа на равенство рекомендуется с некоторой погрешностью:
double а, b, с;
if(fabs(а - b/с) < 1e-7)
что означает, что величины а и b/с должны отличаться друг от друга на величину не больше, чем 0.0000001.
В условии можно объявлять переменные. Например:
if (int v = f u n c ( a ) ) . ..;
В этом случае область действия и существования объявленной переменной - только данная структура if, включая ее выполняемый оператор.
При вложенных конструкциях if могут возникнуть неоднозначности в понимании того, к какой из вложенных конструкций if относится элемент else. Компилятор всегда считает, что else относится к последней из конструкций if, в которой не было раздела else.
Например, в конструкции
if (условие1)
if (условие2)
оператор1;
else оператор2;
else будет отнесено компилятором ко второй конструкции if, т.е. оператор2 будет выполняться в случае, если первое условие истинно, а второе ложно. Иначе говоря, вся конструкция будет прочитана как
if (условие1)
{
if (условие2) оператор1;
else оператор2;
}
Если же вы хотите отнести else к первому if, это надо записать в явном виде с помощью фигурных скобок:
if (условие1)
{
if (условие3) оператор1;
}
else оператор2;