Условные операторы языка программирования C++

Страницы работы

Содержание работы

       1. Условные операторы

Все рассмотренные ранее примеры программ исполнялись в порядке следования операторов, выполняющихся исключительно по одному разу. Однако на практике возможности подобных про­грамм весьма ограничены. Слишком малое число проблем может быть решено подобным способом - большинство задач требует от программы принятия решения в зависимости от различных ситуаций. Язык C++ обладает исчерпывающим набором конст­рукций, позволяющим управлять порядком выполнения отдельно взятых ветвей программы. Например, вы можете передать управ­ление в ту или иную часть программы в зависимости от результа­та проверки некоторого условия. Для осуществления ветвления используются гак называемые условные операторы.

          1.1 Операторы if

Оператор 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 «   "х =   ";

}

В данном варианте вычисление выражения у = у / х будет производиться только для х, значение которого отлично от нуля.

          1.2 Операторы if-else

Оператор 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. Поэтому на практике часто встречаются записи

Похожие материалы

Информация о работе

Тип:
Конспекты лекций
Размер файла:
118 Kb
Скачали:
0