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

if(!x)

{

   //если х = =0

   ...

}

if(x)

{

    // если х   != 0

   ...

}

Например, можно было бы написать:

if<!D = Ь  * Ь -  4   *  а  *  с)

{

   ...

}

что означало бы: присвоить переменной D вычисленное значение 2-4ас), и если переменная D приняла ненулевое значение, вы­полнить блочный оператор {...}. Обычно в подобных случаях компилятор выдает предупреждение о вероятно ошибочном ис­пользовании оператора присвоения вместо сравнения.

          1.3 Условный оператор ?:

          Вместо операторов if-else вполне можно использовать ус­ловный оператор ?:, если входящие в него выражения являются достаточно простыми. Данная конструкция будет иметь следую­щий вид:

условие ?  выражение!   :   выражекие2;

          По аналогии с оператором if, данный условный оператор ра­ботает так: если условие приняло истинное значение, выполня­ется выражение 1, а если ложное — выражение2. Обычно воз­вращаемое значение присваивается какой-либо переменной.

Например, решим задачу нахождения максимума из двух це­лочисленных Переменных:

#include <iostream.h>

void main()

{

   int a = 10;

   int b = 20;

   int max;

   max = (a > b) ? a : b;

   cout << max;

}

          1.4 Оператор switch

          Еще одной альтернативой управляющей конструкции if-alse может служить оператор ветвления switch. Он имеет сле­дующий синтаксис:

switch(выражение)

{

caseконстантное_выражение :

   группа операторов;

break; caseконстантное_выражекие :

   группа операторов;

break;

default константное_выражение : группа операторов;

}

          Конструкция switch-case представляет собой своеобраз­ный "переключатель". Работает он следующим образом.

На первом этапе анализируется выражение и осуществляется переход к той ветви программы, для которой его значение совпадает с указанным констанфным_выражеяием. Далее следует выпол­нение оператора или группы_операторов до тех пор, пока не встретится ключевое слово break (происходит выход из тела опе­ратора switch-case) или не будет достигнут конец блока конст­рукции (соответствующая закрывающаяся фигурная скобка }). Если значения выражения и константных_выражений. указанных в case, не совпадут ни в одном из случаев, выполнится ветвь про­граммы, определенная с помощью ключевого слова default. Во­обще говоря, ключевые слова default и break не являются обя-|зательными н зачастую программисты умышленно их опускают.

          Подобный прием может в некоторых случаях упростить код про­граммы, однако его следует применять очень аккуратно. Приведён­ный ниже фрагмент иллюстрирует работу конструкции switch-, case. Объявленная символьная переменная Answer служит для приема из входного потока ответа пользователя на вопрос, тфЬдол-жить ли работу с программой.

#include <iostream.h>

void  main ()

{

   char Answer =' ';

   cout << "Продолжаемработать? ";

   cin >> Answer;

   switch(Answer)

  {

     case 'y':

     case 'Y':

     case 'd':

     case 'D':

        cout << "Продолжим... \n";

        break;

     default:

          cout << "Завершение... \n";

  }

}

           Как видно из примера, пользователю достаточно выбрать лю­бую из букв y, Y, д, Д, чтобы продолжить выполнение про-граммы, либо нажать любую другую клавишу для завершения.

          Если же по ошибке пропустить оператор break, на экран бу­дет выведено сразу два сообщения без выполнения содержатель­ной части программы:

Продолжим...

Завершение...

          Хотя оператор switch и допускает вложения в себя анало­гичных операторов, стоит избегать подобных конструкций, так

как в противном случае код становится визуально плохо воспри­нимаемым.

          Наиболее эффективно применение связки операторов switch-case с использованием в программе перечислений. В приведенном ниже фрагменте объявляется перечисление цветов гаммы Rainbow и соответствующая этому типу пере­менная Color. Далее осуществляется сравнение значения пе­ременной Color с заданными значениями цветов.