Все рассмотренные ранее примеры программ исполнялись в порядке следования операторов, выполняющихся исключительно по одному разу. Однако на практике возможности подобных программ весьма ограничены. Слишком малое число проблем может быть решено подобным способом - большинство задач требует от программы принятия решения в зависимости от различных ситуаций. Язык C++ обладает исчерпывающим набором конструкций, позволяющим управлять порядком выполнения отдельно взятых ветвей программы. Например, вы можете передать управление в ту или иную часть программы в зависимости от результата проверки некоторого условия. Для осуществления ветвления используются гак называемые условные операторы.
Оператор if производит ветвление программы в зависимости от результата проверки некоторого условия на истинность:
if (проверяемое_условие)
оператор1;
оператор2;
Проверяемое_условие может быть любым выражением, но чаще всего оно содержит операторы сравнения.
Если проверяемое_условие принимает истинное значение (true), выполняется оператор!.. В противном случае (false) выполнение программы переходит к оператору2.
В конструкциях языка C++ операторы могут быть блочными. Это означает, что в зависимости от принятого решения выполняется не один, а целый блок операторов.
Блок начинается с открывающейся фигурной скобки ({) и заканчивается закрывающейся фигурной скобкой (}). Все содержимое блока рассматривается компилятором как единый оператор.
Следующий пример иллюстрирует использование оператора if.
#include <iostream.h>
void main()
{
intb;
if(b > 0)
{
// Если условие b > 0 выполнено
…
cout « "b - положительное";
…
}
if(b < 0)
cout « "b - отрицательное" ;
}
В приведенном фрагменте объявляется целочисленная переменная Ь, а затем следует сравнение ее значения с нулем. Если величина b больше нуля, выводится сообщение "b -положительное", а если b меньше нуля - сообщение "b -отрицательное".
Одной из типичных ошибок при использовании оператора if является пропуск фигурных скобок для обозначения блока выполняемых операторов:
#include <iostream.h>
void main()
{
int x = 0;
int y = 8;
int z = 0;
if(x != 0)
z++;
у /= x; // Ошибка! Деление на 0
cout<< "x = ";
}
В этом примере следует проверка значения переменной х на неравенство нулю. Если значение х отлично от нуля, производится увеличение на единицу значения переменной z. Однако далее осуществляется действие вида у = у / х, независимо от того, какое значение имеет переменная х.
Если правильно определить блок исполняемых операторов, как показано ниже, вычисления выполнятся корректно:
if (х != 0)
{
Z++;
У /= х;
cout « "х = ";
}
В данном варианте вычисление выражения у = у / х будет производиться только для х, значение которого отлично от нуля.
Оператор if с ключевым словом else имеет следующий вид:
if (проверяемое условие)
предложение1; else
предложение2; предложениеЗ;
Если проверяемое_условие выполняется, осуществляется переход к предложению! с последующим переходом к пред-ложениюЗ. В случае, когда проверяемое_условие принимает ложное значение, программа выполнит ветвь, содержащую предложение2, а затем перейдет к предложениюЗ.
Следует отметить, что комбинация if-else позволяет значительно упростить код программы.
В качестве примера решим квадратное уравнение вида
х2 + 2х - з = О. Для решения поставленной задачи воспользуемся методом вычисления детерминанта вида
D = (Ь2 - 4 * а * с) с последующим сравнением полученного результата с нулем.
#include <iostream.h>
#include <math.h>
int main ()
{
int a = 1;
int b = 2;
int c = -3;
float D;
float x1, x2;
D=b*b-4*a*c;
if (D < 0)
{
cout << " Уравнение не имеет корней ";
}
if(D==0)
{
x1 = x2 = -b / (2 * a) ;
cout << " Уравнение имеет 1 корень:";
cout << " x = " << x1;
}
else
{
x1 = (-b + sqrt(D)) / (2 * a);
x1 = (-b - sqrt(D)) / (2 * a);
cout << " Уравнение имеет 2 корня:";
cout << "\nxl = " << x1;
cout << "\nx2 = " << x2;
}
}
Типичной ошибкой программистов, переходящих на С и C++ является использование в условных конструкциях оператора присваивания вместо оператора сравнения (= вместо ==). Хотя язык С и поймет производить присвоения в условных операторах, здесь следует быть особенно внимательным — в больших проектах подобные ошибки локализуются с трудом.
Еще одно замечание: часто проверяемое условие представляет собой проверку значения некоторой целочисленной переменной, тогда если эта переменная принимает ненулевое значение, то результатом вычисления условного выражения будет true, и произойдет переход на выполнение предложения, указанного за оператором if. Поэтому на практике часто встречаются записи
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.